Class: YTLJit::VM::Node::CRubyInstanceVarAssignNode
- Inherits:
-
InstanceVarAssignNode
- Object
- BaseNode
- VariableRefCommonNode
- InstanceVarRefCommonNode
- InstanceVarAssignNode
- YTLJit::VM::Node::CRubyInstanceVarAssignNode
- Includes:
- CommonCodeGen, TypeListWithoutSignature, UnboxedArrayUtil
- Defined in:
- lib/ytljit/vm_cruby_obj.rb
Constant Summary
Constants included from AbsArch
AbsArch::AL, AbsArch::BL, AbsArch::CL, AbsArch::DL, AbsArch::FUNC_ARG, AbsArch::FUNC_ARG_YTL, AbsArch::FUNC_FLOAT_ARG, AbsArch::FUNC_FLOAT_ARG_YTL, AbsArch::INDIRECT_BPR, AbsArch::INDIRECT_RETR, AbsArch::INDIRECT_SPR, AbsArch::INDIRECT_TMPR, AbsArch::INDIRECT_TMPR2, AbsArch::INDIRECT_TMPR3
Constants included from SSE
SSE::XMM0, SSE::XMM1, SSE::XMM2, SSE::XMM3, SSE::XMM4, SSE::XMM5, SSE::XMM6, SSE::XMM7
Constants inherited from BaseNode
Instance Attribute Summary
Attributes inherited from InstanceVarAssignNode
Attributes included from HaveChildlenMixin
Attributes inherited from BaseNode
#code_space, #debug_info, #element_node_list, #id, #is_escape, #parent, #ti_observee, #ti_observer, #type
Instance Method Summary collapse
- #compile_main(context) ⇒ Object
- #compile_main_aux(context, slfcont, slftype, val, body) ⇒ Object
-
#initialize(parent, name, mnode, val) ⇒ CRubyInstanceVarAssignNode
constructor
A new instance of CRubyInstanceVarAssignNode.
Methods included from UnboxedArrayUtil
#compile_array_unboxed, #gen_ref_element, #gen_set_element
Methods included from UnboxedObjectUtil
Methods included from CommonCodeGen
#dump_context, #gen_alloca, #gen_call, #gen_save_thepr
Methods included from TypeListWithoutSignature
#add_type, #set_type_list, #type_list, #type_list_initvar
Methods inherited from InstanceVarAssignNode
#collect_candidate_type, #collect_info, #compile, #traverse_childlen
Methods included from HaveChildlenMixin
Methods included from NodeUtil
#search_class_top, #search_end, #search_frame_info, #search_top
Methods inherited from BaseNode
#add_element_node, #add_element_node_backward, #add_element_node_backward_aux, #collect_candidate_type, #collect_info, #compile, #decide_type, #decide_type_core, #decide_type_once, #gen_type_inference_proc, #get_constant_value, #inference_type, #marge_element_node, #marge_type, #same_type, #search_valid_signature, #set_escape_node, #set_escape_node_backward, #ti_add_observer, #ti_changed, #ti_del_link, #ti_reset, #ti_update
Methods included from TypeListWithSignature
#add_type, #set_type_list, #type_list, #type_list_initvar
Methods included from Inspect
Constructor Details
#initialize(parent, name, mnode, val) ⇒ CRubyInstanceVarAssignNode
Returns a new instance of CRubyInstanceVarAssignNode.
78 79 80 81 |
# File 'lib/ytljit/vm_cruby_obj.rb', line 78 def initialize(parent, name, mnode, val) super @current_frame_info = search_frame_info end |
Instance Method Details
#compile_main(context) ⇒ Object
83 84 85 86 87 |
# File 'lib/ytljit/vm_cruby_obj.rb', line 83 def compile_main(context) slfoff = @current_frame_info.offset_arg(2, BPR) cursig = context.to_signature compile_main_aux(context, slfoff, cursig[2], @val, @body) end |
#compile_main_aux(context, slfcont, slftype, val, body) ⇒ Object
89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 |
# File 'lib/ytljit/vm_cruby_obj.rb', line 89 def compile_main_aux(context, slfcont, slftype, val, body) cursig = context.to_signature mivl = @class_top.end_nodes[0].modified_instance_var.keys off = mivl.index(@name) rtype = val.decide_type_once(cursig) if !slftype.boxed then asm = context.assembler asm.with_retry do asm.mov(TMPR2, slfcont) end context = gen_set_element(context, nil, off, val) if body then return body.compile(context) else return context end end addr = lambda { a = address_of("ytl_ivar_set_boxing") $symbol_table[a] = "ytl_ivar_set_boxing" a } ivarset = OpVarMemAddress.new(addr) context.start_using_reg(TMPR2) context.start_arg_reg asm = context.assembler asm.with_retry do asm.mov(FUNC_ARG[0], slfcont) end context = val.compile(context) context = rtype.gen_boxing(context) asm.with_retry do asm.mov(TMPR2, context.ret_reg) asm.mov(FUNC_ARG[1], off) asm.mov(FUNC_ARG[2], TMPR2) end context = gen_save_thepr(context) context = gen_call(context, ivarset, 3) context.end_arg_reg context.end_using_reg(TMPR2) context.ret_reg = RETR context.ret_node = self if body then body.compile(context) else context end end |