From 2174e57f3626b95b69eeb543f1d11ee867b67a63 Mon Sep 17 00:00:00 2001 From: s-ol Date: Mon, 10 Feb 2020 15:30:03 +0100 Subject: reorganization --- core/scope.moon | 55 +++++++++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 55 insertions(+) create mode 100644 core/scope.moon (limited to 'core/scope.moon') diff --git a/core/scope.moon b/core/scope.moon new file mode 100644 index 0000000..a840ba7 --- /dev/null +++ b/core/scope.moon @@ -0,0 +1,55 @@ +import Const from require 'core.const' + +class Scope + new: (@node, @parent) => + @values = {} + + set_raw: (key, val) => @values[key] = Const.wrap val, key + set: (key, val) => + L\trace "setting #{key} = #{val} in #{@}" + @values[key] = val + + get: (key, prefix='') => + L\debug "checking for #{key} in #{@}" + if val = @values[key] + L\trace "found #{val} in #{@}" + return val + + start, rest = key\match '^(.-)/(.*)' + + if not start + return @parent and L\push -> @parent\get key + + scope = @get start + assert scope and scope.type == 'scope', "cant find '#{prefix}#{start}' for '#{prefix}#{key}'" + scope\getc!\get rest, "#{prefix}#{start}/" + + use: (other) => + for k, v in pairs other.values + @values[k] = v + + from_table: (tbl) -> + with Scope! + .values = { k, Const.wrap v, k for k,v in pairs tbl } + + __tostring: => + buf = " 5 + keys = [key for key in *keys[,5]] + keys[6] = '...' + buf ..= " [#{table.concat keys, ', '}]" + + buf ..= ">" + buf + +:Scope -- cgit v1.2.3