From fbfa95b5129f13a15cc12582d8fbc22d4d38daec Mon Sep 17 00:00:00 2001 From: s-ol Date: Thu, 21 May 2020 18:09:50 +0200 Subject: add builtin get --- alv/builtin.moon | 33 +++++++++++++++++++++++++++++++++ 1 file changed, 33 insertions(+) diff --git a/alv/builtin.moon b/alv/builtin.moon index c3dfcda..bef4a58 100644 --- a/alv/builtin.moon +++ b/alv/builtin.moon @@ -400,6 +400,37 @@ to_evt = Constant.meta tick: => @out\set @inputs.sig! +get = Constant.meta + meta: + name: 'get' + summary: "Index into Arrays and Structs." + examples: { '(get val key [key2…])' } + + value: class extends Op + pattern = (val! / evt!) + (const.str / const.sym / const.num)*0 + setup: (inputs) => + { val, keys } = pattern\match inputs + super val: Input.hot val + + @state = [key.result! for key in *keys] + + type = val\type! + for key in *@state + type = type\get key + + if val\metatype == '!' + @out = type\mk_evt! + else + @out = type\mk_sig! + + tick: => + val = @inputs.val! + for key in *@state + if type(key) == 'number' + key = key + 1 + val = val[key] + @out\set val + Scope.from_table { :doc :trace, 'trace=': trace_, print: print_ @@ -415,6 +446,8 @@ Scope.from_table { '~': to_sig '!': to_evt + :get + true: Constant.meta meta: name: 'true' -- cgit v1.2.3