Class: YTLJit::VM::Node::SendEvalNode

Inherits:
SendNode show all
Defined in:
lib/ytljit/vm_sendnode.rb,
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

BaseNode::ESCAPE_LEVEL

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

#body

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 inherited from SendNode

add_special_send_node, #check_signature_changed, #collect_candidate_type, #collect_candidate_type_block, #collect_info, #compile, #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

#gen_make_argv

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, #compile, #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

#inspect_by_graph

Constructor Details

This class inherits a constructor from YTLJit::VM::Node::SendNode

Instance Method Details

#collect_candidate_type_regident(context, slf) ⇒ Object



640
641
642
643
644
645
646
647
648
649
650
651
652
653
654
655
656
657
658
659
660
661
662
663
664
665
666
667
668
669
670
671
672
673
674
# File 'lib/ytljit/vm_sendnode.rb', line 640

def collect_candidate_type_regident(context, slf)
  if slf.ruby_type == String
    cursig = context.to_signature
    arytype = RubyType::BaseType.from_ruby_class(Array)
    add_type(cursig, arytype)

    fmt = @arguments[3].get_constant_value
    if fmt.is_a?(Array) and fmt[0].is_a?(String) then
      fmt = fmt[0]
    else
      fmt = nil
    end
    fmt.each_char do |ch|
      type = nil
      case ch
      when 'c', 'C', 's', 'S', 'i', 'I', 'l', 'L', 'n', 'N', 'v', 'V'
        type = RubyType::BaseType.from_ruby_class(Fixnum)

      when 'a', 'A', 'Z', 'b', 'B', 'h', 'H', 'm', 'M', 'u', 'U', 'w'
        type = RubyType::BaseType.from_ruby_class(String)
        
      when 'f', 'd', 'e', 'E', 'g', 'G'
        type = RubyType::BaseType.from_ruby_class(Float)

      end

      if type then
        tnode = TypedDummyNode.instance(cursig, type)
        add_element_node(arytype, cursig, tnode, nil, context)
      end
    end
  end

  context
end