Class: CodeTools::AST::Match2
- Defined in:
- lib/rubinius/code/ast/control_flow.rb
Instance Attribute Summary collapse
-
#pattern ⇒ Object
Returns the value of attribute pattern.
-
#value ⇒ Object
Returns the value of attribute value.
Attributes inherited from Node
Instance Method Summary collapse
- #bytecode(g) ⇒ Object
-
#initialize(line, pattern, value) ⇒ Match2
constructor
A new instance of Match2.
- #to_sexp ⇒ Object
Methods inherited from Node
#ascii_graph, #attributes, #children, #defined, match_arguments?, match_send?, #new_block_generator, #new_generator, #node_name, #or_bytecode, #pos, #set_child, #transform, transform, transform_comment, transform_kind, transform_kind=, transform_name, #value_defined, #visit, #walk
Constructor Details
#initialize(line, pattern, value) ⇒ Match2
Returns a new instance of Match2.
471 472 473 474 475 |
# File 'lib/rubinius/code/ast/control_flow.rb', line 471 def initialize(line, pattern, value) @line = line @pattern = pattern @value = value end |
Instance Attribute Details
#pattern ⇒ Object
Returns the value of attribute pattern.
469 470 471 |
# File 'lib/rubinius/code/ast/control_flow.rb', line 469 def pattern @pattern end |
#value ⇒ Object
Returns the value of attribute value.
469 470 471 |
# File 'lib/rubinius/code/ast/control_flow.rb', line 469 def value @value end |
Instance Method Details
#bytecode(g) ⇒ Object
477 478 479 480 481 482 483 484 485 486 487 488 489 490 491 492 493 494 495 496 497 498 499 500 501 502 503 504 505 506 507 508 509 510 511 |
# File 'lib/rubinius/code/ast/control_flow.rb', line 477 def bytecode(g) pos(g) @pattern.bytecode(g) @value.bytecode(g) g.send :=~, 1 if @pattern.kind_of? RegexLiteral regexp = Regexp.new(@pattern.source) # TODO: this code cannot just use Rubinius-specific methods. # Fix without using respond_to?. if regexp.respond_to? :name_table if table = regexp.name_table table.sort_by { |name, idx| idx }.each do |name, idx| local = g.state.scope.new_local name g.last_match 5, idx.last - 1 case local when Compiler::LocalVariable g.set_local local.slot when Compiler::EvalLocalVariable g.push_variables g.swap g.push_literal name g.swap g.send :set_eval_local, 2, false else raise CompileError, "unknown type of local #{local.inspect}" end g.pop end end end end end |
#to_sexp ⇒ Object
513 514 515 |
# File 'lib/rubinius/code/ast/control_flow.rb', line 513 def to_sexp [:match2, @pattern.to_sexp, @value.to_sexp] end |