diff options
| author | s-ol <s-ol@users.noreply.github.com> | 2020-04-12 17:45:02 +0000 |
|---|---|---|
| committer | s-ol <s-ol@users.noreply.github.com> | 2020-04-12 17:45:02 +0000 |
| commit | 98ed2cdbd1bce20d38fda1c830ef68807975ea93 (patch) | |
| tree | 106881049995b4dc8e5979dc88b7c06ec34f0fdd /core/base/action.moon | |
| parent | time/every: allow specifying event (diff) | |
| download | alive-98ed2cdbd1bce20d38fda1c830ef68807975ea93.tar.gz alive-98ed2cdbd1bce20d38fda1c830ef68807975ea93.zip | |
rename Action to Builtin
Diffstat (limited to 'core/base/action.moon')
| -rw-r--r-- | core/base/action.moon | 96 |
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 -} |
