Class: Archruby::Ruby::TypeInference::Ruby::ProcessMethodParams

Inherits:
SexpInterpreter
  • Object
show all
Defined in:
lib/archruby/ruby/type_inference/ruby/process_method_params.rb

Instance Method Summary collapse

Constructor Details

#initialize(ast, local_scope) ⇒ ProcessMethodParams

Returns a new instance of ProcessMethodParams.



7
8
9
10
11
12
13
14
# File 'lib/archruby/ruby/type_inference/ruby/process_method_params.rb', line 7

def initialize(ast, local_scope)
  super()
  @ast = ast
  @current_dependency_class = []
  @current_dependency_class_name = nil
  @local_scope = local_scope
  @params = []
end

Instance Method Details

#add_to_params(name) ⇒ Object



81
82
83
# File 'lib/archruby/ruby/type_inference/ruby/process_method_params.rb', line 81

def add_to_params(name)
  @params << name
end

#build_full_name(const_name) ⇒ Object



96
97
98
99
100
101
# File 'lib/archruby/ruby/type_inference/ruby/process_method_params.rb', line 96

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

#parseObject



16
17
18
19
# File 'lib/archruby/ruby/type_inference/ruby/process_method_params.rb', line 16

def parse
  @ast.map! {|sub_tree| process(sub_tree)}
  @params
end

#process_and(exp) ⇒ Object



187
188
189
190
191
# File 'lib/archruby/ruby/type_inference/ruby/process_method_params.rb', line 187

def process_and(exp)
  _, left_side, right_side = exp
  process(left_side)
  process(right_side)
end

#process_array(exp) ⇒ Object



145
146
147
148
# File 'lib/archruby/ruby/type_inference/ruby/process_method_params.rb', line 145

def process_array(exp)
  _, *elements = exp
  elements.map! {|sub_tree| process(sub_tree)}
end

#process_attrasgn(exp) ⇒ Object



212
213
214
215
216
# File 'lib/archruby/ruby/type_inference/ruby/process_method_params.rb', line 212

def process_attrasgn(exp)
  _, receiver, method, arg, value = exp
  process(receiver)
  process(value)
end

#process_back_ref(exp) ⇒ Object



235
236
# File 'lib/archruby/ruby/type_inference/ruby/process_method_params.rb', line 235

def process_back_ref(exp)
end

#process_block(exp) ⇒ Object



30
31
32
33
# File 'lib/archruby/ruby/type_inference/ruby/process_method_params.rb', line 30

def process_block(exp)
  _, *args = exp
  args.map! { |subtree| process(subtree) }
end

#process_block_pass(exp) ⇒ Object



76
77
78
79
# File 'lib/archruby/ruby/type_inference/ruby/process_method_params.rb', line 76

def process_block_pass(exp)
  _, *args = exp
  args.map! { |subtree| process(subtree) }
end

#process_call(exp) ⇒ Object



71
72
73
74
# File 'lib/archruby/ruby/type_inference/ruby/process_method_params.rb', line 71

def process_call(exp)
  _, receiver, method_name, *params = exp
  process(receiver)
end

#process_case(exp) ⇒ Object



193
194
195
196
197
198
# File 'lib/archruby/ruby/type_inference/ruby/process_method_params.rb', line 193

def process_case(exp)
  _, condition, when_part, ensure_part = exp
  process(condition)
  process(when_part)
  process(ensure_part)
end

#process_colon2(exp) ⇒ Object



85
86
87
88
89
# File 'lib/archruby/ruby/type_inference/ruby/process_method_params.rb', line 85

def process_colon2(exp)
  _, first_part, last_part = exp
  @current_dependency_class.unshift(last_part)
  process(first_part)
end

#process_colon3(exp) ⇒ Object



91
92
93
94
# File 'lib/archruby/ruby/type_inference/ruby/process_method_params.rb', line 91

def process_colon3(exp)
  _, constant_name = exp
  @current_dependency_class_name = build_full_name("::#{constant_name}")
end

#process_const(exp) ⇒ Object



60
61
62
63
64
65
66
67
68
69
# File 'lib/archruby/ruby/type_inference/ruby/process_method_params.rb', line 60

def process_const(exp)
  _, const_name = exp
  if !@current_dependency_class.empty?
    @current_dependency_class_name = build_full_name(const_name)
    add_to_params(@current_dependency_class_name)
    @current_dependency_class_name = nil
  else
    add_to_params(const_name)
  end
end

#process_cvar(exp) ⇒ Object



242
243
244
# File 'lib/archruby/ruby/type_inference/ruby/process_method_params.rb', line 242

def process_cvar(exp)
  # class variable
end

#process_defined(exp) ⇒ Object



155
156
157
158
# File 'lib/archruby/ruby/type_inference/ruby/process_method_params.rb', line 155

def process_defined(exp)
  _, *args = exp
  args.map! {|sub_tree| process(sub_tree)}
end

#process_defn(exp) ⇒ Object



21
22
23
# File 'lib/archruby/ruby/type_inference/ruby/process_method_params.rb', line 21

def process_defn(exp)
  #estudar esse caso
end

#process_dot2(exp) ⇒ Object



170
171
172
173
174
# File 'lib/archruby/ruby/type_inference/ruby/process_method_params.rb', line 170

def process_dot2(exp)
  _, left, right = exp
  process(left)
  process(right)
end

#process_dot3(exp) ⇒ Object



40
41
42
43
44
# File 'lib/archruby/ruby/type_inference/ruby/process_method_params.rb', line 40

def process_dot3(exp)
  _, left, right = exp
  process(left)
  process(right)
end

#process_dregx(exp) ⇒ Object



165
166
167
168
# File 'lib/archruby/ruby/type_inference/ruby/process_method_params.rb', line 165

def process_dregx(exp)
  _, str, *args = exp
  args.map! {|sub_tree| process(sub_tree) if sub_tree.class == Sexp }
end

#process_dregx_once(exp) ⇒ Object



25
26
27
28
# File 'lib/archruby/ruby/type_inference/ruby/process_method_params.rb', line 25

def process_dregx_once(exp)
  _, start, *args = exp
  args.map! {|sub_tree| process(sub_tree) if sub_tree.class == Sexp}
end

#process_dstr(exp) ⇒ Object



132
133
134
135
# File 'lib/archruby/ruby/type_inference/ruby/process_method_params.rb', line 132

def process_dstr(exp)
  _, init, *args = exp
  args.map! {|sub_tree| process(sub_tree)}
end

#process_dsym(exp) ⇒ Object



176
177
178
179
# File 'lib/archruby/ruby/type_inference/ruby/process_method_params.rb', line 176

def process_dsym(exp)
  _, str, *args = exp
  args.map! {|sub_tree| process(sub_tree)}
end

#process_dxstr(exp) ⇒ Object



160
161
162
163
# File 'lib/archruby/ruby/type_inference/ruby/process_method_params.rb', line 160

def process_dxstr(exp)
  _, str, *args = exp
  args.map! {|sub_tree| process(sub_tree)}
end

#process_evstr(exp) ⇒ Object



137
138
139
140
# File 'lib/archruby/ruby/type_inference/ruby/process_method_params.rb', line 137

def process_evstr(exp)
  _, *args = exp
  args.map! {|sub_tree| process(sub_tree)}
end

#process_false(exp) ⇒ Object



258
259
# File 'lib/archruby/ruby/type_inference/ruby/process_method_params.rb', line 258

def process_false(exp)
end

#process_gvar(exp) ⇒ Object



232
233
# File 'lib/archruby/ruby/type_inference/ruby/process_method_params.rb', line 232

def process_gvar(exp)
end

#process_hash(exp) ⇒ Object



103
104
105
106
107
# File 'lib/archruby/ruby/type_inference/ruby/process_method_params.rb', line 103

def process_hash(exp)
  _, key, value = exp
  process(key)
  process(value)
end

#process_iasgn(exp) ⇒ Object



114
115
116
117
# File 'lib/archruby/ruby/type_inference/ruby/process_method_params.rb', line 114

def process_iasgn(exp)
  _, instance_varialbe_name, *value = exp
  value.map! { |subtree| process(subtree) }
end

#process_if(exp) ⇒ Object



119
120
121
122
123
124
# File 'lib/archruby/ruby/type_inference/ruby/process_method_params.rb', line 119

def process_if(exp)
  _, condition, true_body, else_body = exp
  process(condition)
  process(true_body)
  process(else_body)
end

#process_iter(exp) ⇒ Object



126
127
128
129
130
# File 'lib/archruby/ruby/type_inference/ruby/process_method_params.rb', line 126

def process_iter(exp)
  _, first_part, second_part, *body = exp
  process(first_part)
  body.map! {|sub_tree| process(sub_tree)}
end

#process_ivar(exp) ⇒ Object



264
265
# File 'lib/archruby/ruby/type_inference/ruby/process_method_params.rb', line 264

def process_ivar(exp)
end

#process_kwsplat(exp) ⇒ Object



35
36
37
38
# File 'lib/archruby/ruby/type_inference/ruby/process_method_params.rb', line 35

def process_kwsplat(exp)
  _, *args = exp
  args.map! { |subtree| process(subtree) }
end

#process_lasgn(exp) ⇒ Object



46
47
# File 'lib/archruby/ruby/type_inference/ruby/process_method_params.rb', line 46

def process_lasgn(exp)
end

#process_lit(exp) ⇒ Object



238
239
240
# File 'lib/archruby/ruby/type_inference/ruby/process_method_params.rb', line 238

def process_lit(exp)
  _, value = exp
end

#process_lvar(exp) ⇒ Object



49
50
51
52
53
54
55
56
57
58
# File 'lib/archruby/ruby/type_inference/ruby/process_method_params.rb', line 49

def process_lvar(exp)
  _, lvar_name = exp
  type = @local_scope.var_type(lvar_name)
  if type
    add_to_params(type)
  else
    add_to_params(lvar_name)
  end
  #chamado para pegar o valor
end

#process_match2(exp) ⇒ Object



150
151
152
153
# File 'lib/archruby/ruby/type_inference/ruby/process_method_params.rb', line 150

def process_match2(exp)
  _, rec, *args = exp
  args.map! {|sub_tree| process(sub_tree)}
end

#process_match3(exp) ⇒ Object



223
224
225
226
227
# File 'lib/archruby/ruby/type_inference/ruby/process_method_params.rb', line 223

def process_match3(exp)
  _, first, second = exp
  process(first)
  process(second)
end

#process_nil(exp) ⇒ Object



249
250
# File 'lib/archruby/ruby/type_inference/ruby/process_method_params.rb', line 249

def process_nil(exp)
end

#process_nth_ref(exp) ⇒ Object



229
230
# File 'lib/archruby/ruby/type_inference/ruby/process_method_params.rb', line 229

def process_nth_ref(exp)
end

#process_or(exp) ⇒ Object



181
182
183
184
185
# File 'lib/archruby/ruby/type_inference/ruby/process_method_params.rb', line 181

def process_or(exp)
  _, left_side, right_side = exp
  process(left_side)
  process(right_side)
end

#process_rescue(exp) ⇒ Object



206
207
208
209
210
# File 'lib/archruby/ruby/type_inference/ruby/process_method_params.rb', line 206

def process_rescue(exp)
  _, body, rescbody = exp
  process(body)
  process(rescbody)
end

#process_self(exp) ⇒ Object



252
253
# File 'lib/archruby/ruby/type_inference/ruby/process_method_params.rb', line 252

def process_self(exp)
end

#process_splat(exp) ⇒ Object



109
110
111
112
# File 'lib/archruby/ruby/type_inference/ruby/process_method_params.rb', line 109

def process_splat(exp)
  _, *args = exp
  args.map! {|sub_tree| process(sub_tree)}
end

#process_str(exp) ⇒ Object



255
256
# File 'lib/archruby/ruby/type_inference/ruby/process_method_params.rb', line 255

def process_str(exp)
end

#process_super(exp) ⇒ Object



246
247
# File 'lib/archruby/ruby/type_inference/ruby/process_method_params.rb', line 246

def process_super(exp)
end

#process_true(exp) ⇒ Object



261
262
# File 'lib/archruby/ruby/type_inference/ruby/process_method_params.rb', line 261

def process_true(exp)
end

#process_when(exp) ⇒ Object



200
201
202
203
204
# File 'lib/archruby/ruby/type_inference/ruby/process_method_params.rb', line 200

def process_when(exp)
  _, condition, body = exp
  process(condition)
  process(body)
end

#process_xstr(exp) ⇒ Object



142
143
# File 'lib/archruby/ruby/type_inference/ruby/process_method_params.rb', line 142

def process_xstr(exp)
end

#process_yield(exp) ⇒ Object



218
219
220
221
# File 'lib/archruby/ruby/type_inference/ruby/process_method_params.rb', line 218

def process_yield(exp)
  _, *args = exp
  args.map! {|sub_tree| process(sub_tree)}
end

#process_zsuper(exp) ⇒ Object



267
268
# File 'lib/archruby/ruby/type_inference/ruby/process_method_params.rb', line 267

def process_zsuper(exp)
end