class Nydp::Cond_LEX
Public Class Methods
build(cond, when_true, when_false)
click to toggle source
# File lib/nydp/cond.rb, line 107 def self.build cond, when_true, when_false tsig = sig(when_true) fsig = sig(when_false) cond_sig = "#{tsig}_#{fsig}" if (cond == when_true) && (fsig == "LIT") OR_LEX_LIT.new cond, nil, when_false.expression elsif (cond == when_true) && (fsig == "LEX") OR_LEX_LEX.new cond, nil, when_false elsif (cond == when_true) OR_LEX_XXX.new cond, nil, when_false else case cond_sig when "LIT_LIT" # puts "building Cond_LEX_LIT_LIT #{[cond, when_true.expression, when_false.expression]}" Nydp::Cond_LEX_LIT_LIT.new(cond, when_true.expression, when_false.expression) when "LEX_LIT" Nydp::Cond_LEX_LEX_LIT.new(cond, when_true, when_false.expression) when "CND_LIT" Nydp::Cond_LEX_CND_LIT.new(cond, when_true, when_false.expression) when "NVB_LEX" Nydp::Cond_LEX_NVB_LEX.new(cond, when_true, when_false) when "NVB_LIT" Nydp::Cond_LEX_NVB_LIT.new(cond, when_true, when_false.expression) else new(cond, when_true, when_false) end end end
Public Instance Methods
execute(vm)
click to toggle source
# File lib/nydp/cond.rb, line 91 def execute vm if @condition.value vm.current_context @when_true.execute(vm) else @when_false.execute(vm) end end
lexical_reach(n)
click to toggle source
# File lib/nydp/cond.rb, line 99 def lexical_reach n cr = @condition.lexical_reach(n) ct = @when_true.lexical_reach(n) cf = @when_false.lexical_reach(n) [cr, ct, cf].max end