diff options
| author | s-ol <s-ol@users.noreply.github.com> | 2020-08-20 12:32:03 +0000 |
|---|---|---|
| committer | s-ol <s+removethis@s-ol.nu> | 2025-03-02 14:24:49 +0000 |
| commit | f3920fa16dc6952af16fc6cce1035ce14951ba7b (patch) | |
| tree | 85974bef0740423075e1cca3f04158847728ec14 | |
| parent | dirty (insert) implementation (diff) | |
| download | alive-f3920fa16dc6952af16fc6cce1035ce14951ba7b.tar.gz alive-f3920fa16dc6952af16fc6cce1035ce14951ba7b.zip | |
dirty (remove) implementation
| -rw-r--r-- | alv/builtins.moon | 45 |
1 files changed, 42 insertions, 3 deletions
diff --git a/alv/builtins.moon b/alv/builtins.moon index f336440..1436962 100644 --- a/alv/builtins.moon +++ b/alv/builtins.moon @@ -605,7 +605,7 @@ insert = Constant.meta `array`/`struct` and `val` may be a !-stream." value: class extends PureOp - pattern: (sig! / evt!) + -(const.str / const.sym / const.num) + (sig! / evt!) + pattern: (sig! / evt!) + (const.str / const.sym / const.num) + (sig! / evt!) type: (inputs) => { comp, key, val } = inputs before = comp\type! @@ -632,7 +632,6 @@ insert = Constant.meta tick: => { comp, key, val } = @unwrap_all! - comp = {k,v for k,v in pairs comp} if type(key) == 'number' @@ -642,6 +641,46 @@ insert = Constant.meta @out\set comp +remove = Constant.meta + meta: + name: 'remove' + summary: "Remove values from Arrays and Structs." + examples: { '(remove array key)', '(remove struct key)' } + description: "Remvoes the value for `key` from `array`/`struct`. + +`key` has to be a constant expression." + + value: class extends PureOp + pattern: (sig! / evt!) + (const.str / const.sym / const.num) + type: (inputs) => + { comp, key } = inputs + before = comp\type! + + if before.__class == Array + Array before.size - 1, before.type + else + types = {k,v for k,v in pairs before.types} + types[key\const!!] = nil + Struct types + + setup: (...) => + super ... + + { comp, key } = @inputs + comp\type!\get key! + + tick: => + { comp, key, val } = @unwrap_all! + comp = {k,v for k,v in pairs comp} + + if type(key) == 'number' + table.remove comp, key + 1, val + else + comp[key] = nil + + @out\set comp + + loop = Constant.meta meta: name: 'loop' @@ -740,7 +779,7 @@ Scope.from_table { '!': to_evt :array, :struct - :get, :set, :insert + :get, :set, :insert, :remove :loop, :recur |
