class Archruby::Ruby::TypeInference::Ruby::ProcessMethodBody

Public Class Methods

new(ast, local_scope) click to toggle source
Calls superclass method
# File lib/archruby/ruby/type_inference/ruby/process_method_body.rb, line 7
def initialize(ast, local_scope)
  super()
  @ast = ast
  @params = {}
  @current_dependency_class = []
  @current_dependency_class_name = nil
  @method_calls = []
  @local_scope = local_scope
end

Public Instance Methods

add_method_call(class_name, method_name, params=nil) click to toggle source
# File lib/archruby/ruby/type_inference/ruby/process_method_body.rb, line 54
def add_method_call(class_name, method_name, params=nil)
  @method_calls << InternalMethodInvocation.new(class_name, method_name, params)
end
build_full_name(const_name) click to toggle source
# File lib/archruby/ruby/type_inference/ruby/process_method_body.rb, line 87
def build_full_name(const_name)
  @current_dependency_class.unshift(const_name)
  full_class_path = @current_dependency_class.join('::')
  @current_dependency_class = []
  full_class_path
end
check_if_has_params(params) click to toggle source
# File lib/archruby/ruby/type_inference/ruby/process_method_body.rb, line 44
def check_if_has_params(params)
  has_local_params = false
  params.each do |param|
    if param[0] == :lvar
      has_local_params = @local_scope.has_formal_parameter(param[1]) || @local_scope.has_local_params(param[1])
    end
  end
  has_local_params
end
parse() click to toggle source
# File lib/archruby/ruby/type_inference/ruby/process_method_body.rb, line 17
def parse
  #binding.pry
  @ast.map! {|sub_tree| process(sub_tree)}
  @method_calls
end
process_alias(exp) click to toggle source
# File lib/archruby/ruby/type_inference/ruby/process_method_body.rb, line 377
def process_alias(exp)
end
process_and(exp) click to toggle source
# File lib/archruby/ruby/type_inference/ruby/process_method_body.rb, line 177
def process_and(exp)
  _, left_side, right_side = exp
  process(left_side)
  process(right_side)
end
process_array(exp) click to toggle source
# File lib/archruby/ruby/type_inference/ruby/process_method_body.rb, line 172
def process_array(exp)
  _, *args = exp
  args.map! {|sub_tree| process(sub_tree)}
end
process_attrasgn(exp) click to toggle source
# File lib/archruby/ruby/type_inference/ruby/process_method_body.rb, line 94
def process_attrasgn(exp)
  _, receiver, method_name, value = exp
  process(receiver)
  process(value)
end
process_back_ref(exp) click to toggle source
# File lib/archruby/ruby/type_inference/ruby/process_method_body.rb, line 370
def process_back_ref(exp)
end
process_begin(exp) click to toggle source
# File lib/archruby/ruby/type_inference/ruby/process_method_body.rb, line 380
def process_begin(exp)
end
process_block(exp) click to toggle source
# File lib/archruby/ruby/type_inference/ruby/process_method_body.rb, line 139
def process_block(exp)
  _, *args = exp
  args.map! { |subtree| process(subtree) }
end
process_block_pass(exp) click to toggle source
# File lib/archruby/ruby/type_inference/ruby/process_method_body.rb, line 315
def process_block_pass(exp)
  _, *args = exp
  args.map! {|sub_tree| process(sub_tree)}
end
process_break(exp) click to toggle source
# File lib/archruby/ruby/type_inference/ruby/process_method_body.rb, line 392
def process_break(exp)
end
process_call(exp) click to toggle source
# File lib/archruby/ruby/type_inference/ruby/process_method_body.rb, line 23
def process_call(exp)
  _, receiver, method_name, *params = exp
  if receiver && receiver[0] == :lvar && receiver[1].class == Symbol
    type = @local_scope.var_type(receiver[1])
    parsed_params = ProcessMethodParams.new(params, @local_scope).parse
    add_method_call(type, method_name, parsed_params)
  elsif !receiver.nil?
    process(receiver)
    parsed_params = nil
    if check_if_has_params(params)
      parsed_params = ProcessMethodParams.new(params, @local_scope).parse
    end
    add_method_call(@current_dependency_class_name, method_name, parsed_params)
    #@current_dependency_class_name = nil
  end
end
process_case(exp) click to toggle source
# File lib/archruby/ruby/type_inference/ruby/process_method_body.rb, line 272
def process_case(exp)
  _, condition, when_part, ensure_part = exp
  process(condition)
  process(when_part)
  process(ensure_part)
end
process_colon2(exp) click to toggle source
# File lib/archruby/ruby/type_inference/ruby/process_method_body.rb, line 81
def process_colon2(exp)
  _, first_part, last_part = exp
  @current_dependency_class.unshift(last_part)
  process(first_part)
end
process_colon3(exp) click to toggle source
# File lib/archruby/ruby/type_inference/ruby/process_method_body.rb, line 76
def process_colon3(exp)
  _, constant_name = exp
  @current_dependency_class_name = build_full_name("::#{constant_name}")
end
process_const(exp) click to toggle source
# File lib/archruby/ruby/type_inference/ruby/process_method_body.rb, line 67
def process_const(exp)
  _, const_name = exp
  if !@current_dependency_class.empty?
    @current_dependency_class_name = build_full_name(const_name)
  else
    @current_dependency_class_name = const_name.to_s
  end
end
process_cvar(exp) click to toggle source
# File lib/archruby/ruby/type_inference/ruby/process_method_body.rb, line 373
def process_cvar(exp)
  # class variable
end
process_cvasgn(exp) click to toggle source
# File lib/archruby/ruby/type_inference/ruby/process_method_body.rb, line 298
def process_cvasgn(exp)
  _, class_var_name, *value = exp
  value.map! {|sub_tree| process(sub_tree)}
end
process_cvdecl(exp) click to toggle source
# File lib/archruby/ruby/type_inference/ruby/process_method_body.rb, line 365
def process_cvdecl(exp)
  _, instance_classvar_name, *value = exp
  value.map! {|sub_tree| process(sub_tree)}
end
process_defined(exp) click to toggle source
# File lib/archruby/ruby/type_inference/ruby/process_method_body.rb, line 360
def process_defined(exp)
  _, *args = exp
  args.map! {|sub_tree| process(sub_tree)}
end
process_defn(exp) click to toggle source
# File lib/archruby/ruby/type_inference/ruby/process_method_body.rb, line 328
def process_defn(exp)
  #estudar esse caso para ver se vamos quer pegar isso
end
process_defs(exp) click to toggle source
# File lib/archruby/ruby/type_inference/ruby/process_method_body.rb, line 40
def process_defs(exp)
  #estudar esse caso -> acontece no rails em activemodel
end
process_dot2(exp) click to toggle source
# File lib/archruby/ruby/type_inference/ruby/process_method_body.rb, line 309
def process_dot2(exp)
  _, left, right = exp
  process(left)
  process(right)
end
process_dot3(exp) click to toggle source
# File lib/archruby/ruby/type_inference/ruby/process_method_body.rb, line 303
def process_dot3(exp)
  _, left, right = exp
  process(left)
  process(right)
end
process_dregx(exp) click to toggle source
# File lib/archruby/ruby/type_inference/ruby/process_method_body.rb, line 323
def process_dregx(exp)
  _, str, *args = exp
  args.map! {|sub_tree| process(sub_tree) if sub_tree.class == Sexp}
end
process_dregx_once(exp) click to toggle source
# File lib/archruby/ruby/type_inference/ruby/process_method_body.rb, line 194
def process_dregx_once(exp)
  _, start, *args = exp
  args.map! {|sub_tree| process(sub_tree)}
end
process_dstr(exp) click to toggle source
# File lib/archruby/ruby/type_inference/ruby/process_method_body.rb, line 189
def process_dstr(exp)
  _, start, *args = exp
  args.map! {|sub_tree| process(sub_tree)}
end
process_dsym(exp) click to toggle source
# File lib/archruby/ruby/type_inference/ruby/process_method_body.rb, line 134
def process_dsym(exp)
  _, str, *args = exp
  args.map! {|sub_tree| process(sub_tree)}
end
process_dxstr(exp) click to toggle source
# File lib/archruby/ruby/type_inference/ruby/process_method_body.rb, line 209
def process_dxstr(exp)
  _, str, *args = exp
  args.map! {|sub_tree| process(sub_tree)}
end
process_ensure(exp) click to toggle source
# File lib/archruby/ruby/type_inference/ruby/process_method_body.rb, line 245
def process_ensure(exp)
  _, *args = exp
  args.map! {|sub_tree| process(sub_tree)}
end
process_evstr(exp) click to toggle source
# File lib/archruby/ruby/type_inference/ruby/process_method_body.rb, line 199
def process_evstr(exp)
  _, *args = exp
  args.map! {|sub_tree| process(sub_tree)}
end
process_false(exp) click to toggle source
# File lib/archruby/ruby/type_inference/ruby/process_method_body.rb, line 419
def process_false(exp)
end
process_for(exp) click to toggle source
# File lib/archruby/ruby/type_inference/ruby/process_method_body.rb, line 279
def process_for(exp)
  _, x, y, body = exp
  process(x)
  process(y)
  process(body)
end
process_gasgn(exp) click to toggle source
# File lib/archruby/ruby/type_inference/ruby/process_method_body.rb, line 345
def process_gasgn(exp)
  _, global_var_name, *value = exp
  value.map! {|sub_tree| process(sub_tree)}
end
process_gvar(exp) click to toggle source
# File lib/archruby/ruby/type_inference/ruby/process_method_body.rb, line 401
def process_gvar(exp)
end
process_hash(exp) click to toggle source
# File lib/archruby/ruby/type_inference/ruby/process_method_body.rb, line 144
def process_hash(exp)
  _, key, value = exp
  process(key)
  process(value)
end
process_iasgn(exp) click to toggle source
# File lib/archruby/ruby/type_inference/ruby/process_method_body.rb, line 100
def process_iasgn(exp)
  _, instance_varialbe_name, *value = exp
  value.map! { |subtree| process(subtree) }
end
process_if(exp) click to toggle source
# File lib/archruby/ruby/type_inference/ruby/process_method_body.rb, line 127
def process_if(exp)
  _, condition, true_body, else_body = exp
  process(condition)
  process(true_body)
  process(else_body)
end
process_iter(exp) click to toggle source
# File lib/archruby/ruby/type_inference/ruby/process_method_body.rb, line 121
def process_iter(exp)
  _, first_part, second_part, *body = exp
  process(first_part)
  body.map! {|sub_tree| process(sub_tree)}
end
process_ivar(exp) click to toggle source
# File lib/archruby/ruby/type_inference/ruby/process_method_body.rb, line 214
def process_ivar(exp)
  _, var_name, *args = exp
  args.map! {|sub_tree| process(sub_tree)}
end
process_lasgn(exp) click to toggle source
# File lib/archruby/ruby/type_inference/ruby/process_method_body.rb, line 58
def process_lasgn(exp)
  _, variable_name, *args = exp
  args.map! { |subtree| process(subtree) }
  if @current_dependency_class_name
    @local_scope.add_variable(variable_name, @current_dependency_class_name)
  end
  @current_dependency_class_name = nil
end
process_lit(exp) click to toggle source
# File lib/archruby/ruby/type_inference/ruby/process_method_body.rb, line 410
def process_lit(exp)
end
process_lvar(exp) click to toggle source
# File lib/archruby/ruby/type_inference/ruby/process_method_body.rb, line 413
def process_lvar(exp)
end
process_masgn(exp) click to toggle source
# File lib/archruby/ruby/type_inference/ruby/process_method_body.rb, line 332
def process_masgn(exp)
  _, *args = exp
  args.map! {|sub_tree| process(sub_tree)}
end
process_match2(exp) click to toggle source
# File lib/archruby/ruby/type_inference/ruby/process_method_body.rb, line 219
def process_match2(exp)
  _, rec, *args = exp
  args.map! {|sub_tree| process(sub_tree)}
end
process_match3(exp) click to toggle source
# File lib/archruby/ruby/type_inference/ruby/process_method_body.rb, line 109
def process_match3(exp)
  _, left_side, right_side = exp
  process(left_side)
  process(right_side)
end
process_next(exp) click to toggle source
# File lib/archruby/ruby/type_inference/ruby/process_method_body.rb, line 395
def process_next(exp)
end
process_nil(exp) click to toggle source
# File lib/archruby/ruby/type_inference/ruby/process_method_body.rb, line 404
def process_nil(exp)
end
process_not(exp) click to toggle source
# File lib/archruby/ruby/type_inference/ruby/process_method_body.rb, line 355
def process_not(exp)
  _, *args = exp
  args.map! {|sub_tree| process(sub_tree)}
end
process_nth_ref(exp) click to toggle source
# File lib/archruby/ruby/type_inference/ruby/process_method_body.rb, line 389
def process_nth_ref(exp)
end
process_op_asgn1(exp) click to toggle source
# File lib/archruby/ruby/type_inference/ruby/process_method_body.rb, line 105
def process_op_asgn1(exp)
  process(exp.last)
end
process_op_asgn2(exp) click to toggle source
# File lib/archruby/ruby/type_inference/ruby/process_method_body.rb, line 115
def process_op_asgn2(exp)
  _, receiver, method, met, last = exp
  process(receiver)
  process(last)
end
process_op_asgn_and(exp) click to toggle source
# File lib/archruby/ruby/type_inference/ruby/process_method_body.rb, line 240
def process_op_asgn_and(exp)
  _, *args = exp
  args.map! {|sub_tree| process(sub_tree)}
end
process_op_asgn_or(exp) click to toggle source
# File lib/archruby/ruby/type_inference/ruby/process_method_body.rb, line 235
def process_op_asgn_or(exp)
  _, *args = exp
  args.map! {|sub_tree| process(sub_tree)}
end
process_or(exp) click to toggle source
# File lib/archruby/ruby/type_inference/ruby/process_method_body.rb, line 183
def process_or(exp)
  _, left_side, right_side = exp
  process(left_side)
  process(right_side)
end
process_redo(exp) click to toggle source
# File lib/archruby/ruby/type_inference/ruby/process_method_body.rb, line 337
def process_redo(exp)
end
process_resbody(exp) click to toggle source
# File lib/archruby/ruby/type_inference/ruby/process_method_body.rb, line 166
def process_resbody(exp)
  _, class_to_rescue, *body = exp
  process(class_to_rescue)
  body.map! {|sub_tree| process(sub_tree)}
end
process_rescue(exp) click to toggle source
# File lib/archruby/ruby/type_inference/ruby/process_method_body.rb, line 155
def process_rescue(exp)
  _, normal, *rescue_body = exp
  process(normal)
  rescue_body.map! {|sub_tree| process(sub_tree)}
end
process_retry(exp) click to toggle source
# File lib/archruby/ruby/type_inference/ruby/process_method_body.rb, line 320
def process_retry(exp)
end
process_return(exp) click to toggle source
# File lib/archruby/ruby/type_inference/ruby/process_method_body.rb, line 161
def process_return(exp)
  _, *value = exp
  value.map! {|sub_tree| process(sub_tree)}
end
process_sclass(exp) click to toggle source
# File lib/archruby/ruby/type_inference/ruby/process_method_body.rb, line 350
def process_sclass(exp)
  _, singleton_class, *body = exp
  body.map! {|sub_tree| process(sub_tree)}
end
process_self(exp) click to toggle source
# File lib/archruby/ruby/type_inference/ruby/process_method_body.rb, line 383
def process_self(exp)
end
process_splat(exp) click to toggle source
# File lib/archruby/ruby/type_inference/ruby/process_method_body.rb, line 267
def process_splat(exp)
  _, *args = exp
  args.map! {|sub_tree| process(sub_tree)}
end
process_str(exp) click to toggle source
# File lib/archruby/ruby/type_inference/ruby/process_method_body.rb, line 398
def process_str(exp)
end
process_super(exp) click to toggle source
# File lib/archruby/ruby/type_inference/ruby/process_method_body.rb, line 150
def process_super(exp)
  _, *args = exp
  args.map! {|sub_tree| process(sub_tree)}
end
process_svalue(exp) click to toggle source
# File lib/archruby/ruby/type_inference/ruby/process_method_body.rb, line 230
def process_svalue(exp)
  _, *args = exp
  args.map! {|sub_tree| process(sub_tree)}
end
process_to_ary(exp) click to toggle source
# File lib/archruby/ruby/type_inference/ruby/process_method_body.rb, line 340
def process_to_ary(exp)
  _, *args = exp
  args.map! {|sub_tree| process(sub_tree)}
end
process_true(exp) click to toggle source
# File lib/archruby/ruby/type_inference/ruby/process_method_body.rb, line 416
def process_true(exp)
end
process_until(exp) click to toggle source
# File lib/archruby/ruby/type_inference/ruby/process_method_body.rb, line 256
def process_until(exp)
  _, condition, body, *args = exp
  process(condition)
  process(body)
end
process_when(exp) click to toggle source
# File lib/archruby/ruby/type_inference/ruby/process_method_body.rb, line 286
def process_when(exp)
  _, condition, body = exp
  process(condition)
  process(body)
end
process_while(exp) click to toggle source
# File lib/archruby/ruby/type_inference/ruby/process_method_body.rb, line 250
def process_while(exp)
  _, condition, body = exp
  process(condition)
  process(body)
end
process_xstr(exp) click to toggle source
# File lib/archruby/ruby/type_inference/ruby/process_method_body.rb, line 386
def process_xstr(exp)
end
process_yield(exp) click to toggle source
# File lib/archruby/ruby/type_inference/ruby/process_method_body.rb, line 262
def process_yield(exp)
  _, *args = exp
  args.map! {|sub_tree| process(sub_tree)}
end
process_zsuper(exp) click to toggle source
# File lib/archruby/ruby/type_inference/ruby/process_method_body.rb, line 407
def process_zsuper(exp)
end