aboutsummaryrefslogtreecommitdiffstats
path: root/core/base/action.moon
diff options
context:
space:
mode:
authors-ol <s-ol@users.noreply.github.com>2020-04-12 17:45:02 +0000
committers-ol <s-ol@users.noreply.github.com>2020-04-12 17:45:02 +0000
commit98ed2cdbd1bce20d38fda1c830ef68807975ea93 (patch)
tree106881049995b4dc8e5979dc88b7c06ec34f0fdd /core/base/action.moon
parenttime/every: allow specifying event (diff)
downloadalive-98ed2cdbd1bce20d38fda1c830ef68807975ea93.tar.gz
alive-98ed2cdbd1bce20d38fda1c830ef68807975ea93.zip
rename Action to Builtin
Diffstat (limited to 'core/base/action.moon')
-rw-r--r--core/base/action.moon96
1 files changed, 0 insertions, 96 deletions
diff --git a/core/base/action.moon b/core/base/action.moon
deleted file mode 100644
index d10712f..0000000
--- a/core/base/action.moon
+++ /dev/null
@@ -1,96 +0,0 @@
-----
--- Builtin / Special Form evaluation Strategy (`builtin`).
---
--- Responsible for quoting/evaluating subexpressions, instantiating and setting
--- up `Op`s, updating the current `Scope`, etc.
--- See `builtin` and `invoke` for examples.
---
--- @classmod Action
-
-class Action
---- Action interface.
---
--- methods that have to be implemented by `Action` implementations.
--- @section interface
-
- --- create a new instance.
- --
- -- @tparam Cell cell the Cell to evaluate
- -- @tparam Value head the (`AST:eval`d) `head` of the Cell to evaluate
- new: (@cell, @head) =>
- @tag = @cell.tag
- @tag\register @
-
- --- perform the actual evaluation.
- --
- -- Implementations should:
- --
- -- - eval or quote `tail` values
- -- - perform scope effects
- -- - wrap all child-results
- --
- -- @tparam Scope scope the active scope
- -- @tparam {AST,...} tail the arguments to this expression
- -- @treturn Result the result of this evaluation
- eval: (scope, tail) => error "not implemented"
-
- --- free resources
- destroy: =>
-
- --- setup or copy state from previous instance of same type.
- --
- -- `prev` is only passed if Action types of prev and current expression match.
- -- Otherwise, or when no previous expression exists, `nil` is passed.
- --
- -- @tparam ?Action prev the previous Action instance
- setup: (prev) =>
-
- --- the `Cell` this Action was created for.
- -- @tfield Cell cell
-
- --- the evaluated head of `cell`.
- -- @tfield AST head
-
- --- the identity of `cell`.
- -- @tfield Tag tag
-
---- static functions
--- @section static
-
- --- create and setup an `Action` for a given tag, then evaluate it.
- --
- -- Create a new instance using `tag` and `head` and call `setup` on it.
- -- If a previous instance with the same `tag` exists and has the same `head`,
- -- it pass it to `setup`. Register the `Action` with `tag`, evaluate it
- -- and return the `Result`.
- --
- -- @tparam Cell cell the `Cell` being evaluated
- -- @tparam Scope scope the active scope
- -- @tparam Value head the (`AST:eval`d) head of the `Cell` being evaluated
- -- @treturn Result the result of evaluation
- @eval_cell: (cell, scope, head) =>
- last = cell.tag\last!
- compatible = last and (last.__class == @) and last.head == head
-
- L\trace if compatible
- "reusing #{last} for #{cell.tag} <#{@__name} #{head}>"
- else if last
- "replacing #{last} with new #{cell.tag} <#{@__name} #{head}>"
- else
- "initializing #{cell.tag} <#{@__name} #{head}>"
-
- action = @ cell, head
- if compatible
- action\setup last
- else
- last\destroy! if last
- action\setup nil
-
- action\eval scope, cell\tail!
-
- __tostring: => "<#{@@__name} #{@head}>"
- __inherited: (cls) => cls.__base.__tostring = @__tostring
-
-{
- :Action
-}