aboutsummaryrefslogtreecommitdiffstats
path: root/core/init.moon
blob: 7122e0feb2830cb4def24ee3187c4134a3a4b775 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
L or= setmetatable {}, __index: => ->

import Value from require 'core.value'
import Result from require 'core.result'
import Scope from require 'core.scope'
import Registry from require 'core.registry'
import Tag from require 'core.tag'

import Cell, RootCell from require 'core.cell'
import cell, program from require 'core.parsing'

with require 'core.cycle'
  \load!

globals = Scope.from_table require 'core.builtin'

{
  :Value, :Result
  :Cell, :RootCell
  :Scope

  :Registry, :Tag

  :globals
  parse: program\match
  eval: (str, inject) ->
      scope = Scope nil, globals
      scope\use inject if inject

      ast = assert (cell\match str), "failed to parse: #{str}"
      result = ast\eval scope
      result\const!
}