Class: YTLJit::VM::Node::SendAllocateNode
- Includes:
- SendSingletonClassUtil, UnboxedObjectUtil
- 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 SendSingletonClassUtil
Methods included from UnboxedObjectUtil
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 SendUtil
#compile_c_fixarg, #compile_c_fixarg_raw, #compile_c_vararg, #compile_ytl, #gen_eval_self, #signature
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
723 724 725 726 727 728 729 730 731 732 733 734 735 736 737 738 739 740 741 742 743 744 745 746 747 748 749 750 751 752 753 754 755 756 757 758 759 760 761 762 763 764 765 766 767 768 769 770 771 772 773 774 775 776 777 778 779 780 781 782 783 784 |
# File 'lib/ytljit/vm_sendnode.rb', line 723 def collect_candidate_type_regident(context, slf) slfnode = @arguments[2] cursig = context.to_signature if slf.ruby_type.is_a?(Class) then tt = get_singleton_class_object(@arguments[2]) clt = ClassTopNode.get_class_top_node(tt.ruby_type_raw) @type = nil if context.[:compile_array_as_uboxed] and tt.ruby_type != Array and @is_escape and @is_escape != :global_export and (clt and !clt.body.is_a?(DummyNode)) then tt = tt.to_unbox elsif type_list(cursig)[0].include?(tt.to_unbox) then type_list(cursig)[0] = [] end # set element type parg = @parent.arguments if tt.ruby_type == Range then if @is_escape != :global_export then tt = tt.to_unbox end tt.args = parg[3..-1] add_element_node(tt, cursig, parg[3], [0], context) add_element_node(tt, cursig, parg[4], [1], context) elsif tt.ruby_type == Array then if context.[:compile_array_as_uboxed] and @is_escape and @is_escape != :global_export then if @element_node_list.size > 1 and @element_node_list[1..-1].all? {|e| e[3] or e[2].class == BaseNode } then tt = tt.to_unbox elsif parg[3] and siz0 = parg[3].get_constant_value and (siz = siz0[0]) < 10 then @element_node_list = [] dnode = LiteralNode.new(self, nil) tt = tt.to_unbox siz.times do |i| add_element_node(tt, cursig, dnode, [i], context) end end end if parg[4] then siz = parg[3].get_constant_value if siz and false then # Here is buggy yet Fix me siz[0].times do |i| add_element_node(tt, cursig, parg[4], [i], context) end else add_element_node(tt, cursig, parg[4], nil, context) end end end add_type(cursig, tt) end context end |
#compile(context) ⇒ Object
786 787 788 789 790 791 792 793 794 795 796 |
# File 'lib/ytljit/vm_sendnode.rb', line 786 def compile(context) rtype = decide_type_once(context.to_signature) rrtype = rtype.ruby_type if !rtype.boxed then clt = ClassTopNode.get_class_top_node(rrtype) mivl = clt.end_nodes[0].modified_instance_var.keys compile_object_unboxed(context, mivl.size) else super end end |