aboutsummaryrefslogtreecommitdiffstats
path: root/core/builtin.moon
diff options
context:
space:
mode:
Diffstat (limited to 'core/builtin.moon')
-rw-r--r--core/builtin.moon36
1 files changed, 18 insertions, 18 deletions
diff --git a/core/builtin.moon b/core/builtin.moon
index 71beac3..6abcbd9 100644
--- a/core/builtin.moon
+++ b/core/builtin.moon
@@ -1,6 +1,6 @@
-- builtin special forms
import Action, FnDef from require 'core.base'
-import ResultNode, Value, Const from require 'core.value'
+import Result, Value from require 'core.value'
import Cell from require 'core.cell'
import Scope from require 'core.scope'
@@ -13,7 +13,7 @@ prints the docstring for sym in the console"
assert #tail == 1, "'doc' takes exactly one parameter"
def = L\push tail[1]\eval, scope
- with ResultNode children: { def }
+ with Result children: { def }
def = def.value\const!\unwrap!
L\print "(doc #{tail[1]\stringify!}):\n#{def.doc}\n"
@@ -35,9 +35,9 @@ updates all val-exprs."
name = (name\quote scope)\unwrap 'sym'
with val_expr\eval scope
- scope\set name, .value
+ scope\set name, \make_ref!
- ResultNode :children
+ Result :children
class use extends Action
@doc: "(use scope1 [scope2]...) - merge scopes into parent scope
@@ -49,10 +49,10 @@ all scopes have to be eval-time constants."
L\trace "evaling #{@}"
for child in *tail
result = L\push child\eval, scope
- value = result\value_only!\const!
+ value = result\const!
scope\use value\unwrap 'scope', "'use' only works on scopes"
- ResultNode!
+ Result!
class require_ extends Action
@doc: "(require name-str) - require a module
@@ -65,10 +65,10 @@ name-str has to be an eval-time constant."
assert #tail == 1, "'require' takes exactly one parameter"
result = L\push tail[1]\eval, scope
- name = result\value_only!\const!
+ name = result\const!
L\trace @, "loading module #{name}"
- ResultNode value: Value.wrap require "lib.#{name\unwrap 'str'}"
+ Result value: Value.wrap require "lib.#{name\unwrap 'str'}"
class import_ extends Action
@doc: "(import sym1 [sym2]...) - require and define modules
@@ -81,9 +81,9 @@ requires modules sym1, sym2, ... and defines them as sym1, sym2, ... in the curr
for child in *tail
name = (child\quote scope)\unwrap 'sym'
- scope\set name, Value.wrap require "lib.#{name}"
+ scope\set name, Result value: Value.wrap require "lib.#{name}"
- ResultNode!
+ Result!
class import_star extends Action
@doc: "(import* sym1 [sym2]...) - require and use modules
@@ -99,7 +99,7 @@ requires modules sym1, sym2, ... and merges them into the current scope"
name = (child\quote scope)\unwrap 'sym'
scope\use (Value.wrap require "lib.#{name}")\unwrap 'scope'
- ResultNode!
+ Result!
class fn extends Action
@doc: "(fn (p1 [p2]...) body-expr) - declare a (lambda) function
@@ -117,7 +117,7 @@ the symbols p1, p2, ... will resolve to the arguments passed to the function."
param\quote scope
body = body\quote scope
- ResultNode value: Value.wrap FnDef param_symbols, body, scope
+ Result value: Value.wrap FnDef param_symbols, body, scope
class defn extends Action
@doc: "(defn name-sym (p1 [p2]...) body-expr) - define a function
@@ -138,8 +138,8 @@ declares a lambda (see (doc fn)) and defines it in the current scope"
body = body\quote scope
fn = FnDef param_symbols, body, scope
- scope\set name, Value.wrap fn
- ResultNode!
+ scope\set name, Result value: Value.wrap fn
+ Result!
class do_expr extends Action
@doc: "(do expr1 [expr2]...) - update multiple expressions
@@ -148,7 +148,7 @@ evaluates and continously updates expr1, expr2, ...
the last expression's value is returned."
eval: (scope, tail) =>
- ResultNode children: [expr\eval scope for expr in *tail]
+ Result children: [expr\eval scope for expr in *tail]
class if_ extends Action
@doc: "(if bool then-expr [else-xpr]) - make an eval-time const choice
@@ -164,7 +164,7 @@ to then-expr, otherwise it is equivalent to else-xpr if given, or nil otherwise.
{ xif, xthen, xelse } = tail
xif = L\push xif\eval, scope
- xif = xif\value_only!\const!\unwrap!
+ xif = xif\const!\unwrap!
if xif
xthen\eval scope
@@ -189,8 +189,8 @@ class trace extends Action
import: import_
'import*': import_star
- true: Const.bool true
- false: Const.bool false
+ true: Value.bool true
+ false: Value.bool false
:fn, :defn
'do': do_expr