diff options
| author | s-ol <s-ol@users.noreply.github.com> | 2020-02-03 10:59:10 +0000 |
|---|---|---|
| committer | s-ol <s-ol@users.noreply.github.com> | 2020-02-03 11:00:32 +0000 |
| commit | 1b6da2babfc65c4b8f6f7ac8644c0498e094bab7 (patch) | |
| tree | 61ef0fc20c511cd8936e6af2d889a2ffddab9211 | |
| parent | fix error handling again (diff) | |
| download | alive-1b6da2babfc65c4b8f6f7ac8644c0498e094bab7.tar.gz alive-1b6da2babfc65c4b8f6f7ac8644c0498e094bab7.zip | |
Forward references
| -rw-r--r-- | base.moon | 9 | ||||
| -rw-r--r-- | copilot.moon | 2 | ||||
| -rw-r--r-- | init.moon | 15 | ||||
| -rw-r--r-- | lib/builtin.moon | 9 | ||||
| -rw-r--r-- | registry.moon | 1 | ||||
| -rw-r--r-- | scope.moon | 8 | ||||
| -rw-r--r-- | test.alv | 8 |
7 files changed, 41 insertions, 11 deletions
@@ -34,6 +34,12 @@ class Macro __tostring: => "<macro: #{@@__name}>" __inherited: (cls) => cls.__base.__tostring = @__tostring +class Forward + new: (@node) => + + get: => (assert @node.value, "node never patched!")\get! + getc: => (assert @node.value, "node never patched!")\getc! + class Const types = { sym: true @@ -78,7 +84,7 @@ class Const switch ancestor klass when Op then 'op' when Scope then 'scope' - when Const + when Const, Forward return val else error "#{name}: cannot wrap '#{klass.__name}' instance" @@ -93,5 +99,6 @@ class Const { :Op :Macro + :Forward :Const } diff --git a/copilot.moon b/copilot.moon index 802688c..71820fc 100644 --- a/copilot.moon +++ b/copilot.moon @@ -33,7 +33,7 @@ class Copilot spit @file, root\stringify! - ok, err = pcall @registry\patch! + ok, err = pcall @registry\patch if not ok L\error "error patching: #{err}" @@ -4,7 +4,18 @@ import Logger from require 'logger' import Registry from require 'registry' import Copilot from require 'copilot' -Logger.init! +arguments, key = {} +for a in *arg + if match = a\match '^%-%-(.*)' + key = match + arguments[key] = true + elseif key + arguments[key] = a + key = nil + else + table.insert arguments, a + +Logger.init arguments.log delta = do gettime = -> @@ -18,7 +29,7 @@ delta = do last = time env = Registry! -copilot = Copilot arg[1], env +copilot = Copilot arguments[1], env while true copilot\poll! diff --git a/lib/builtin.moon b/lib/builtin.moon index 369c3b3..8615afa 100644 --- a/lib/builtin.moon +++ b/lib/builtin.moon @@ -1,4 +1,4 @@ -import Macro, Const from require 'base' +import Macro, Const, Forward from require 'base' import Scope from require 'scope' class def extends Macro @@ -12,8 +12,13 @@ class def extends Macro name, val = @node[i], @node[i+1] assert name.atom_type == 'sym', "'def's argument ##{i} has to be a symbol" val\expand @node.scope - scope\set name.raw, val.value + if val.value + -- expand-time constant + scope\set name.raw, val.value + else + -- patch-time expression + scope\set name.raw, Forward val nil class _require extends Macro diff --git a/registry.moon b/registry.moon index 6c4548b..c9682fa 100644 --- a/registry.moon +++ b/registry.moon @@ -29,6 +29,7 @@ class Registry continue unless typ == 'Xpr' if node.tag + @map[node.tag] = node seen[node.tag] = true continue @@ -8,7 +8,7 @@ class Scope set_raw: (key, val) => @values[key] = Const.wrap val, key set: (key, val) => - L\trace "setting #{key} = #{val}" + L\trace "setting #{key} = #{val} in #{@}" @values[key] = val get: (key, prefix='') => @@ -45,7 +45,11 @@ class Scope parent = parent.parent buf ..= " ^#{depth}" if depth != 0 - buf ..= " [#{table.concat [key for key in pairs @values], ', '}]" + keys = [key for key in pairs @values] + if #keys > 5 + keys = [key for key in *keys[,5]] + keys[6] = '...' + buf ..= " [#{table.concat keys, ', '}]" buf ..= ">" buf @@ -2,6 +2,8 @@ ([4]use ([3]require 'osc')) ([6]use ([5]require 'time')) -([8]out '127.0.0.1' 9000 '/param/radius/set' ([11]mix 0.3 0.5 ([7]lfo 1.8))) -([10]out '127.0.0.1' 9000 '/param/offset/set' ([13]+ ([9]lfo 0.2 'sin') - ([12]lfo 0.5 'sin'))) +([8]def my-lfo ([7]lfo 0.2 'sin')) + +([8]out '127.0.0.1' 9000 '/param/radius/set' my-lfo) +([10]out '127.0.0.1' 9000 '/param/offset/set' my-lfo) +([10]out '127.0.0.1' 9000 '/param/offset/set' my-lfo) |
