Module: Finitio::Syntax::Expr
- Includes:
- Node
- Included in:
- ArithOp, Comparison, FnCall, Identifier, Literal, LogicDyadic, LogicNot, OOCall, Parenthesized, UnaryMinusOp
- Defined in:
- lib/finitio/syntax/expr.rb,
lib/finitio/syntax/expr/fn_call.rb,
lib/finitio/syntax/expr/literal.rb,
lib/finitio/syntax/expr/oo_call.rb,
lib/finitio/syntax/expr/arith_op.rb,
lib/finitio/syntax/expr/logic_not.rb,
lib/finitio/syntax/expr/comparison.rb,
lib/finitio/syntax/expr/identifier.rb,
lib/finitio/syntax/expr/logic_dyadic.rb,
lib/finitio/syntax/expr/parenthesized.rb,
lib/finitio/syntax/expr/unary_minus_op.rb
Defined Under Namespace
Modules: ArithOp, Comparison, FnCall, Identifier, Literal, LogicDyadic, LogicNot, OOCall, Parenthesized, UnaryMinusOp
Constant Summary
collapse
- WORLD_VAR =
"__world"
Class Method Summary
collapse
Instance Method Summary
collapse
Methods included from Node
#metadata, #resolve_ruby_const, #unique_names!
Class Method Details
.included(by) ⇒ Object
8
9
10
|
# File 'lib/finitio/syntax/expr.rb', line 8
def self.included(by)
by.extend(Node::ClassHelpers)
end
|
Instance Method Details
#_free_variables(fvs) ⇒ Object
40
41
42
|
# File 'lib/finitio/syntax/expr.rb', line 40
def _free_variables(fvs)
raise NotImplementedError
end
|
#free_variables ⇒ Object
36
37
38
|
# File 'lib/finitio/syntax/expr.rb', line 36
def free_variables
[].tap{|fvs| _free_variables(fvs) }.uniq
end
|
#to_proc ⇒ Object
12
13
14
15
|
# File 'lib/finitio/syntax/expr.rb', line 12
def to_proc()
src = to_proc_src
::Kernel.eval(src)
end
|
#to_proc_source ⇒ Object
32
33
34
|
# File 'lib/finitio/syntax/expr.rb', line 32
def to_proc_source
raise NotImplementedError
end
|
#to_proc_src ⇒ Object
17
18
19
20
21
22
23
24
25
26
27
28
29
30
|
# File 'lib/finitio/syntax/expr.rb', line 17
def to_proc_src
initializer = free_variables
.map{|v| "#{v} = __world.fetch(:#{v})" }
.join("\n")
<<-SRC.gsub(/^[ ]{10}/m,'')
->(__world){
unless __world.is_a?(Hash) && __world.keys.all?{|k| k.is_a?(Symbol) }
raise "Invalid world: " + __world.inspect
end
#{initializer}
#{to_proc_source}
}
SRC
end
|