From 12d8cdff9268887aed4a52e195d0d2892c604a95 Mon Sep 17 00:00:00 2001 From: Felix Roos Date: Fri, 29 Mar 2024 16:58:34 +0100 Subject: [PATCH 1/2] remove dangerous arithmetic feature --- packages/core/test/value.test.mjs | 4 ---- packages/core/value.mjs | 11 +++++------ website/src/repl/tunes.mjs | 4 ++-- 3 files changed, 7 insertions(+), 12 deletions(-) diff --git a/packages/core/test/value.test.mjs b/packages/core/test/value.test.mjs index c5472607..87cba57d 100644 --- a/packages/core/test/value.test.mjs +++ b/packages/core/test/value.test.mjs @@ -22,8 +22,4 @@ describe('Value', () => { expect(valued(mul).ap(3).ap(3).value).toEqual(9); expect(valued(3).mul(3).value).toEqual(9); }); - it('union bare numbers for numeral props', () => { - expect(n(3).cutoff(500).add(10).firstCycleValues).toEqual([{ n: 13, cutoff: 510 }]); - expect(n(3).cutoff(500).mul(2).firstCycleValues).toEqual([{ n: 6, cutoff: 1000 }]); - }); }); diff --git a/packages/core/value.mjs b/packages/core/value.mjs index f9a963ce..38a5471b 100644 --- a/packages/core/value.mjs +++ b/packages/core/value.mjs @@ -5,14 +5,13 @@ This program is free software: you can redistribute it and/or modify it under th */ import { curry } from './util.mjs'; +import { logger } from './logger.mjs'; export function unionWithObj(a, b, func) { - if (typeof b?.value === 'number') { - // https://github.com/tidalcycles/strudel/issues/262 - const numKeys = Object.keys(a).filter((k) => typeof a[k] === 'number'); - const numerals = Object.fromEntries(numKeys.map((k) => [k, b.value])); - b = Object.assign(b, numerals); - delete b.value; + if (b?.value !== undefined && Object.keys(b).length === 1) { + // https://github.com/tidalcycles/strudel/issues/1026 + logger(`[warn]: dangerous arithmetic`); + return a; } const common = Object.keys(a).filter((k) => Object.keys(b).includes(k)); return Object.assign({}, a, b, Object.fromEntries(common.map((k) => [k, func(a[k], b[k])]))); diff --git a/website/src/repl/tunes.mjs b/website/src/repl/tunes.mjs index a89bdf6b..cffe0c0e 100644 --- a/website/src/repl/tunes.mjs +++ b/website/src/repl/tunes.mjs @@ -361,8 +361,8 @@ export const echoPiano = `// "Echo piano" // @by Felix Roos n("<0 2 [4 6](3,4,2) 3*2>").color('salmon') -.off(1/4, x=>x.add(2).color('green')) -.off(1/2, x=>x.add(6).color('steelblue')) +.off(1/4, x=>x.add(n(2)).color('green')) +.off(1/2, x=>x.add(n(6)).color('steelblue')) .scale('D minor') .echo(4, 1/8, .5) .clip(.5) From 1aca5db44705f6ae09d0a9d6521f7c5dbcfe8cf9 Mon Sep 17 00:00:00 2001 From: Felix Roos Date: Sat, 30 Mar 2024 15:05:52 +0100 Subject: [PATCH 2/2] better warning --- packages/core/value.mjs | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/packages/core/value.mjs b/packages/core/value.mjs index 38a5471b..ef98bc37 100644 --- a/packages/core/value.mjs +++ b/packages/core/value.mjs @@ -10,7 +10,7 @@ import { logger } from './logger.mjs'; export function unionWithObj(a, b, func) { if (b?.value !== undefined && Object.keys(b).length === 1) { // https://github.com/tidalcycles/strudel/issues/1026 - logger(`[warn]: dangerous arithmetic`); + logger(`[warn]: Can't do arithmetic on control pattern.`); return a; } const common = Object.keys(a).filter((k) => Object.keys(b).includes(k));