Class: YTLJit::VM::Node::SendElementAssignNode
- Includes:
- SendUtil, UnboxedArrayUtil
- Defined in:
- lib/ytljit/vm_sendnode.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 SendNode
#arguments, #class_top, #current_exception_table, #frame_info, #func, #modified_instance_var, #modified_local_var, #next_node, #opt_flag, #result_cache, #seq_no, #yield_signature_cache
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
Methods included from UnboxedArrayUtil
#compile_array_unboxed, #gen_ref_element, #gen_set_element
Methods included from UnboxedObjectUtil
Methods included from SendUtil
#compile_c_fixarg, #compile_c_fixarg_raw, #compile_c_vararg, #compile_ytl, #gen_eval_self, #signature
Methods inherited from SendNode
add_special_send_node, #check_signature_changed, #collect_candidate_type, #collect_candidate_type_block, #collect_info, #fill_result_cache, #get_constant_value, get_macro_tab, #get_send_method_node, get_user_defined_method_tab, #inherit_from_callee, #initialize, macro_expand, make_send_node, node, #search_signature, #traverse_childlen, #traverse_node
Methods included from NodeUtil
#search_class_top, #search_end, #search_frame_info, #search_top
Methods included from SendNodeCodeGen
Methods included from CommonCodeGen
#dump_context, #gen_alloca, #gen_call, #gen_save_thepr
Methods included from OptFlagOp
#is_args_blockarg, #is_args_splat, #is_fcall, #is_opt_send, #is_super, #is_tailcall, #is_tailrecursion, #is_vcall
Methods included from HaveChildlenMixin
#initialize, #traverse_childlen
Methods inherited from BaseNode
#add_element_node, #add_element_node_backward, #add_element_node_backward_aux, #collect_candidate_type, #collect_info, #decide_type, #decide_type_core, #decide_type_once, #gen_type_inference_proc, #get_constant_value, #inference_type, #initialize, #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
This class inherits a constructor from YTLJit::VM::Node::SendNode
Instance Method Details
#collect_candidate_type_regident(context, slf) ⇒ Object
1757 1758 1759 1760 1761 1762 1763 1764 1765 1766 1767 1768 1769 1770 1771 1772 1773 1774 1775 1776 1777 1778 1779 1780 1781 1782 1783 1784 1785 1786 1787 1788 1789 1790 1791 1792 1793 |
# File 'lib/ytljit/vm_sendnode.rb', line 1757 def collect_candidate_type_regident(context, slf) cursig = context.to_signature case [slf.ruby_type] when [Array] fixtype = RubyType::BaseType.from_ruby_class(Fixnum) val = @arguments[4] @arguments[3].add_type(cursig, fixtype) cidx = @arguments[3].get_constant_value @arguments[2].type = nil slf = @arguments[2].decide_type_once(cursig) val.type = nil if slf.boxed and val.is_escape != :global_export then val.set_escape_node_backward(:global_export) context = val.collect_candidate_type(context) else val.set_escape_node_backward(:local_export) end arg = [slf, cursig, val, cidx, context] @arguments[2].add_element_node_backward(arg) same_type(self, val, cursig, cursig, context) when [Hash] cidx = @arguments[3].get_constant_value @arguments[2].add_element_node(slf, cursig, self, cidx, context) niltype = RubyType::BaseType.from_ruby_class(NilClass) @arguments[3].type = nil @arguments[3].add_type(cursig, niltype) @arguments[4].type = nil @arguments[4].add_type(cursig, niltype) @arguments[3].set_escape_node_backward(:global_export) @arguments[4].set_escape_node_backward(:global_export) end context end |
#compile(context) ⇒ Object
1795 1796 1797 1798 1799 1800 1801 1802 1803 1804 1805 1806 1807 1808 1809 |
# File 'lib/ytljit/vm_sendnode.rb', line 1795 def compile(context) sig = context.to_signature rtype = @arguments[2].decide_type_once(sig) rrtype = rtype.ruby_type if rrtype == Array and !rtype.boxed and @arguments[2].is_escape != :global_export then context = gen_set_element(context, @arguments[2], @arguments[3], @arguments[4]) @body.compile(context) else super end end |