Class: CastOff::Compiler::SimpleIR::Getspecial
- Defined in:
- lib/cast_off/compile/ir/call_ir.rb
Constant Summary
Constants included from Instruction
Instruction::BlockSeparator, Instruction::BranchInstruction, Instruction::IgnoreInstruction, Instruction::JumpOrReturnInstruction, Instruction::SupportInstruction, Instruction::TypeInfoUser, Instruction::VM_CALL_ARGS_BLOCKARG_BIT, Instruction::VM_CALL_ARGS_SPLAT_BIT, Instruction::VM_CALL_FCALL_BIT, Instruction::VM_CALL_OPT_SEND_BIT, Instruction::VM_CALL_SUPER_BIT, Instruction::VM_CALL_TAILCALL_BIT, Instruction::VM_CALL_TAILRECURSION_BIT, Instruction::VM_CALL_VCALL_BIT
Instance Attribute Summary
Attributes inherited from VMInsnIR
Attributes inherited from CallIR
#argc, #result_variable, #return_value, #values, #variables, #variables_without_result
Attributes inherited from IR
Instance Method Summary collapse
-
#initialize(param, argc, return_value, insn, cfg) ⇒ Getspecial
constructor
A new instance of Getspecial.
- #propergate_guard_usage ⇒ Object
- #side_effect? ⇒ Boolean
- #to_c(params) ⇒ Object
- #type_propergation(defs) ⇒ Object
Methods inherited from VMInsnIR
#dont_duplicate_if_harmless, #should_be_alive?
Methods inherited from CallIR
#can_not_unbox, #harmless?, #mark, #param_irs, #param_variables, #propergate_boxed_value, #propergate_exact_class, #sampling_return_value, #sampling_return_value?, #should_be_alive?, #unboxing_prelude
Methods included from Util
Methods inherited from IR
#add_sampling_variable, #alive, #alive?, #dispatch_method?, #generate_guard, #get_definition, #get_definition_str, #get_usage, #get_variable, #inlining_target?, #propergate_boxed_value, #reset, #sampling_variable, #set_info, #standard_guard_target, #unboxing_prelude, #vanish, #vanish?
Constructor Details
#initialize(param, argc, return_value, insn, cfg) ⇒ Getspecial
Returns a new instance of Getspecial.
658 659 660 |
# File 'lib/cast_off/compile/ir/call_ir.rb', line 658 def initialize(param, argc, return_value, insn, cfg) super(param, argc, return_value, insn, cfg) end |
Instance Method Details
#propergate_guard_usage ⇒ Object
662 663 664 665 |
# File 'lib/cast_off/compile/ir/call_ir.rb', line 662 def propergate_guard_usage() params = param_irs() params.each{|p| p.need_guard(false)} end |
#side_effect? ⇒ Boolean
704 705 706 |
# File 'lib/cast_off/compile/ir/call_ir.rb', line 704 def side_effect? false end |
#to_c(params) ⇒ Object
667 668 669 670 671 672 673 674 675 676 677 678 679 680 681 682 683 684 685 686 687 688 689 690 691 692 693 694 695 696 697 698 |
# File 'lib/cast_off/compile/ir/call_ir.rb', line 667 def to_c(params) ret = [] ret << super(params) param = param_variables() key, type = *@operands if type == 0 bug() else if @configuration.allow_builtin_variable_incompatibility? if type & 0x01 != 0 case (type >> 1).chr when '&' ret << " #{@return_value} = rb_reg_last_match(rb_backref_get());" when '`' ret << " #{@return_value} = rb_reg_match_pre(rb_backref_get());" when '\'' ret << " #{@return_value} = rb_reg_match_post(rb_backref_get());" when '+' ret << " #{@return_value} = rb_reg_match_last(rb_backref_get());" else bug() end else ret << " #{@return_value} = rb_reg_nth_match((int)(#{type >> 1}), rb_backref_get());" end else bug() end end bug() unless param.empty? ret.join("\n") end |
#type_propergation(defs) ⇒ Object
700 701 702 |
# File 'lib/cast_off/compile/ir/call_ir.rb', line 700 def type_propergation(defs) @return_value.is_dynamic() end |