Module: SByC::CodeTree::FunctionalEval
- Defined in:
- lib/sbyc/codetree/eval/functional_eval.rb
Class Method Summary collapse
-
.functional_compile(ast, receiver_object = "receiver", scope_object = "scope", scope_method = :[]) ⇒ Object
Generates code for a functional evaluation.
-
.functional_eval(ast, receiver, scope = {}, scope_method = :[]) ⇒ Object
Evaluates this AST with an object style.
-
.functional_proc(ast, scope_method = :[]) ⇒ Object
Generates a lambda function for functional evaluation.
Class Method Details
.functional_compile(ast, receiver_object = "receiver", scope_object = "scope", scope_method = :[]) ⇒ Object
Generates code for a functional evaluation
6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 |
# File 'lib/sbyc/codetree/eval/functional_eval.rb', line 6 def functional_compile(ast, receiver_object = "receiver", scope_object = "scope", scope_method = :[]) ast.visit{|node, collected| case func = node.function when :_ collected.first.inspect when :'?' if scope_method == :[] "#{scope_object}[#{collected.join(', ')}]" else "#{scope_object}.#{scope_method}(#{collected.join(', ')})" end else "#{receiver_object}.#{func}(#{collected.join(', ')})" end } end |
.functional_eval(ast, receiver, scope = {}, scope_method = :[]) ⇒ Object
Evaluates this AST with an object style.
31 32 33 |
# File 'lib/sbyc/codetree/eval/functional_eval.rb', line 31 def functional_eval(ast, receiver, scope = {}, scope_method = :[]) functional_proc(ast, scope_method).call(receiver, scope) end |
.functional_proc(ast, scope_method = :[]) ⇒ Object
Generates a lambda function for functional evaluation
25 26 27 |
# File 'lib/sbyc/codetree/eval/functional_eval.rb', line 25 def functional_proc(ast, scope_method = :[]) ::Kernel.eval("::Kernel.lambda{|receiver, scope| #{functional_compile(ast, 'receiver', 'scope', scope_method)}}") end |