aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authors-ol <s-ol@users.noreply.github.com>2020-08-20 12:32:03 +0000
committers-ol <s+removethis@s-ol.nu>2025-03-02 14:24:49 +0000
commitf3920fa16dc6952af16fc6cce1035ce14951ba7b (patch)
tree85974bef0740423075e1cca3f04158847728ec14
parentdirty (insert) implementation (diff)
downloadalive-f3920fa16dc6952af16fc6cce1035ce14951ba7b.tar.gz
alive-f3920fa16dc6952af16fc6cce1035ce14951ba7b.zip
dirty (remove) implementation
-rw-r--r--alv/builtins.moon45
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