adlint 1.0.0 → 1.2.0
Sign up to get free protection for your applications and to get access to all the features.
- data/AUTHORS +3 -2
- data/ChangeLog +208 -63
- data/MANIFEST +4 -0
- data/NEWS +24 -5
- data/etc/conf.d/fallback/traits.erb +1 -1
- data/etc/conf.d/i686-cygwin/traits-gcc_4.3.4.erb +1 -1
- data/etc/conf.d/i686-devkit/traits-gcc_4.5.2.erb +1 -1
- data/etc/conf.d/i686-linux/traits-gcc_4.5.1.erb +1 -1
- data/etc/conf.d/i686-mingw/traits-gcc_4.6.1.erb +1 -1
- data/etc/mesg.d/en_US/messages.yml +3 -3
- data/etc/mesg.d/ja_JP/messages.yml +4 -4
- data/lib/adlint/c/builtin.rb +3 -3
- data/lib/adlint/c/ctrlexpr.rb +7 -11
- data/lib/adlint/c/expr.rb +548 -363
- data/lib/adlint/c/interp.rb +233 -525
- data/lib/adlint/c/mediator.rb +1 -0
- data/lib/adlint/c/message.rb +144 -1
- data/lib/adlint/c/object.rb +15 -6
- data/lib/adlint/c/parser.rb +170 -128
- data/lib/adlint/c/parser.y +36 -0
- data/lib/adlint/c/phase.rb +4 -0
- data/lib/adlint/c/seqp.rb +72 -0
- data/lib/adlint/c/syntax.rb +254 -3
- data/lib/adlint/c.rb +1 -0
- data/lib/adlint/cpp/code.rb +2 -2
- data/lib/adlint/cpp/eval.rb +29 -13
- data/lib/adlint/cpp/message.rb +71 -70
- data/lib/adlint/cpp/message_shima.rb +100 -0
- data/lib/adlint/cpp/phase.rb +4 -0
- data/lib/adlint/cpp/syntax.rb +5 -1
- data/lib/adlint/cpp.rb +1 -0
- data/lib/adlint/message.rb +6 -3
- data/lib/adlint/traits.rb +1 -1
- data/lib/adlint/version.rb +5 -5
- data/share/demo/Makefile +3 -1
- data/share/demo/bad_line/bad_line.c +27 -0
- data/share/demo/sequence_point/sequence_point.c +31 -0
- data/share/doc/adlint_on_vim_en.png +0 -0
- data/share/doc/adlint_on_vim_ja.png +0 -0
- data/share/doc/developers_guide_ja.html +3 -3
- data/share/doc/developers_guide_ja.texi +1 -1
- data/share/doc/users_guide_en.html +3118 -41
- data/share/doc/users_guide_en.texi +3090 -37
- data/share/doc/users_guide_ja.html +3120 -47
- data/share/doc/users_guide_ja.texi +3106 -65
- data/share/sample/ctags-5.8/adlint/GNUmakefile +13 -1
- data/share/sample/ctags-5.8/adlint/adlint_cinit.h +14 -2
- data/share/sample/ctags-5.8/adlint/adlint_pinit.h +14 -4
- data/share/sample/ctags-5.8/adlint/adlint_traits.yml +14 -1
- data/share/sample/flex-2.5.35/adlint/GNUmakefile +13 -1
- data/share/sample/flex-2.5.35/adlint/adlint_cinit.h +14 -2
- data/share/sample/flex-2.5.35/adlint/adlint_pinit.h +14 -4
- data/share/sample/flex-2.5.35/adlint/adlint_traits.yml +14 -1
- metadata +6 -2
data/lib/adlint/c/interp.rb
CHANGED
@@ -68,232 +68,304 @@ module C #:nodoc:
|
|
68
68
|
|
69
69
|
extend Pluggable
|
70
70
|
|
71
|
+
def self.def_plugin_and_notifier(event_name, *arg_names)
|
72
|
+
class_eval <<-EOS
|
73
|
+
def_plugin :on_#{event_name}
|
74
|
+
def notify_#{event_name}(#{arg_names.join(",")})
|
75
|
+
unless @suppress_notification
|
76
|
+
on_#{event_name}.invoke(#{arg_names.join(",")})
|
77
|
+
end
|
78
|
+
end
|
79
|
+
EOS
|
80
|
+
end
|
81
|
+
private_class_method :def_plugin_and_notifier
|
82
|
+
|
71
83
|
# NOTE: Notified when the interpreter evaluates an initializer of
|
72
84
|
# variable-definition.
|
73
|
-
|
85
|
+
def_plugin_and_notifier :variable_initialized,
|
86
|
+
:variable_definition, :variable, :init_variable
|
74
87
|
|
75
88
|
# NOTE: Notified when the interpreter evaluates a variable-definition.
|
76
|
-
|
89
|
+
def_plugin_and_notifier :variable_defined, :variable_definition, :variable
|
77
90
|
|
78
91
|
# NOTE: Notified when the interpreter evaluates a function-declaration.
|
79
|
-
|
92
|
+
def_plugin_and_notifier :function_declared,
|
93
|
+
:function_declaration, :function
|
80
94
|
|
81
95
|
# NOTE: Notified when the interpreter evaluates a variable-declaration.
|
82
|
-
|
96
|
+
def_plugin_and_notifier :variable_declared,
|
97
|
+
:variable_declaration, :variable
|
83
98
|
|
84
99
|
# NOTE: Notified when the interpreter evaluates a struct-type-declaration.
|
85
|
-
|
100
|
+
def_plugin_and_notifier :struct_declared, :struct_type_declaration
|
86
101
|
|
87
102
|
# NOTE: Notified when the interpreter evaluates a union-type-declaration.
|
88
|
-
|
103
|
+
def_plugin_and_notifier :union_declared, :union_type_declaration
|
89
104
|
|
90
105
|
# NOTE: Notified when the interpreter evaluates a enum-type-declaration.
|
91
|
-
|
106
|
+
def_plugin_and_notifier :enum_declared, :enum_type_declaration
|
92
107
|
|
93
108
|
# NOTE: Notified when the interpreter evaluates a typedef-declaration.
|
94
|
-
|
109
|
+
def_plugin_and_notifier :typedef_declared, :typedef_declaration
|
95
110
|
|
96
111
|
# NOTE: Notified when the interpreter starts execution of a
|
97
112
|
# function-definition.
|
98
|
-
|
113
|
+
def_plugin_and_notifier :function_started, :function_definition
|
99
114
|
|
100
115
|
# NOTE: Notified when the interpreter ends execution of a
|
101
116
|
# function-definition.
|
102
|
-
|
117
|
+
def_plugin_and_notifier :function_ended, :function_definition
|
103
118
|
|
104
119
|
# NOTE: Notified when the interpreter evaluates a parameter-definition at
|
105
120
|
# beginning of execution of a function-definition.
|
106
|
-
|
121
|
+
def_plugin_and_notifier :parameter_defined,
|
122
|
+
:parameter_definition, :variable
|
107
123
|
|
108
124
|
# NOTE: Notified when the interpreter evaluates an expression which results
|
109
125
|
# a named variable.
|
110
|
-
|
126
|
+
def_plugin_and_notifier :variable_referred, :object_specifier, :variable
|
111
127
|
|
112
128
|
# NOTE: Notified when the interpreter evaluates an expression which results
|
113
129
|
# a constant temporary variable.
|
114
|
-
|
130
|
+
def_plugin_and_notifier :constant_referred, :constant_specifier, :variable
|
115
131
|
|
116
132
|
# NOTE: Notified when the interpreter refer to a value of a variable while
|
117
133
|
# evaluating an expression.
|
118
|
-
|
134
|
+
def_plugin_and_notifier :variable_value_referred, :expression, :variable
|
119
135
|
|
120
136
|
# NOTE: Notified when the interpreter overwrite a value of a variable while
|
121
137
|
# evaluating an expression.
|
122
|
-
|
138
|
+
def_plugin_and_notifier :variable_value_updated, :expression, :variable
|
123
139
|
|
124
140
|
# NOTE: Notified when the interpreter refer to a function object while
|
125
141
|
# evaluating an expression.
|
126
|
-
|
142
|
+
def_plugin_and_notifier :function_referred, :expression, :function
|
127
143
|
|
128
144
|
# NOTE: Notified when the interpreter evaluates a sizeof-expression.
|
129
|
-
|
145
|
+
def_plugin_and_notifier :sizeof_expr_evaled,
|
146
|
+
:expression, :operand_variable, :result_variable
|
130
147
|
|
131
148
|
# NOTE: Notified when the interpreter evaluates a sizeof-type-expression.
|
132
|
-
|
149
|
+
def_plugin_and_notifier :sizeof_type_expr_evaled,
|
150
|
+
:expression, :type, :result_variable
|
133
151
|
|
134
152
|
# NOTE: Notified when the interpreter evaluates a cast-expression.
|
135
|
-
|
153
|
+
def_plugin_and_notifier :explicit_conv_performed,
|
154
|
+
:expression, :original_variable, :result_variable
|
136
155
|
|
137
156
|
# NOTE: Notified when the interpreter performs an implicit type conversion
|
138
157
|
# while evaluating an expression.
|
139
|
-
|
158
|
+
def_plugin_and_notifier :implicit_conv_performed,
|
159
|
+
:initializer_or_expression, :original_variable,
|
160
|
+
:result_variable
|
140
161
|
|
141
162
|
# NOTE: Notified when the interpreter evaluates an
|
142
163
|
# array-subscript-expression.
|
143
|
-
|
164
|
+
def_plugin_and_notifier :array_subscript_expr_evaled,
|
165
|
+
:array_subscript_expression,
|
166
|
+
:array_or_pointer_variable, :subscript_variable,
|
167
|
+
:array_variable, :result_variable
|
144
168
|
|
145
169
|
# NOTE: Notified when the interpreter evaluates a function-call-expression.
|
146
|
-
|
170
|
+
def_plugin_and_notifier :function_call_expr_evaled,
|
171
|
+
:function_call_expression, :function,
|
172
|
+
:arg_variables, :result_variable
|
147
173
|
|
148
174
|
# NOTE: Notified when the interpreter evaluates an
|
149
175
|
# unary-arithmetic-expression.
|
150
|
-
|
176
|
+
def_plugin_and_notifier :unary_arithmetic_expr_evaled,
|
177
|
+
:unary_arithmetic_expression, :operand_variable,
|
178
|
+
:result_variable
|
151
179
|
|
152
180
|
# NOTE: Notified when the interpreter evaluates a
|
153
181
|
# multiplicative-expression.
|
154
|
-
|
182
|
+
def_plugin_and_notifier :multiplicative_expr_evaled,
|
183
|
+
:multiplicative_expression, :lhs_variable,
|
184
|
+
:rhs_variable, :result_variable
|
155
185
|
|
156
186
|
# NOTE: Notified when the interpreter evaluates an additive-expression.
|
157
|
-
|
187
|
+
def_plugin_and_notifier :additive_expr_evaled,
|
188
|
+
:additive_expression, :lhs_variable, :rhs_variable,
|
189
|
+
:result_variable
|
158
190
|
|
159
191
|
# NOTE: Notified when the interpreter evaluates a shift-expression.
|
160
|
-
|
192
|
+
def_plugin_and_notifier :shift_expr_evaled,
|
193
|
+
:shift_expression, :lhs_variable, :rhs_variable,
|
194
|
+
:result_variable
|
161
195
|
|
162
196
|
# NOTE: Notified when the interpreter evaluates a relational-expression.
|
163
|
-
|
197
|
+
def_plugin_and_notifier :relational_expr_evaled,
|
198
|
+
:relational_expression, :lhs_variable,
|
199
|
+
:rhs_variable, :result_variable
|
164
200
|
|
165
201
|
# NOTE: Notified when the interpreter evaluates an equality-expression.
|
166
|
-
|
202
|
+
def_plugin_and_notifier :equality_expr_evaled,
|
203
|
+
:equality_expression, :lhs_variable, :rhs_variable,
|
204
|
+
:result_variable
|
167
205
|
|
168
206
|
# NOTE: Notified when the interpreter evaluates a bitwise and-expression.
|
169
|
-
|
207
|
+
def_plugin_and_notifier :and_expr_evaled,
|
208
|
+
:and_expression, :lhs_variable, :rhs_variable,
|
209
|
+
:result_variable
|
170
210
|
|
171
211
|
# NOTE: Notified when the interpreter evaluates an exclusive-or-expression.
|
172
|
-
|
212
|
+
def_plugin_and_notifier :exclusive_or_expr_evaled,
|
213
|
+
:exclusive_or_expression, :lhs_variable,
|
214
|
+
:rhs_variable, :result_variable
|
173
215
|
|
174
216
|
# NOTE: Notified when the interpreter evaluates a bitwise
|
175
217
|
# inclusive-or-expression.
|
176
|
-
|
218
|
+
def_plugin_and_notifier :inclusive_or_expr_evaled,
|
219
|
+
:inclusive_or_expression, :lhs_variable,
|
220
|
+
:rhs_variable, :result_variable
|
177
221
|
|
178
222
|
# NOTE: Notified when the interpreter evaluates a logical-and-expression.
|
179
|
-
|
223
|
+
def_plugin_and_notifier :logical_and_expr_evaled,
|
224
|
+
:logical_and_expression, :lhs_variable,
|
225
|
+
:rhs_variable, :result_variable
|
180
226
|
|
181
227
|
# NOTE: Notified when the interpreter evaluates a logical-or-expression.
|
182
|
-
|
228
|
+
def_plugin_and_notifier :logical_or_expr_evaled,
|
229
|
+
:logical_or_expression, :lhs_variable,
|
230
|
+
:rhs_variable, :result_variable
|
183
231
|
|
184
232
|
# NOTE: Notified when the interpreter evaluates a conditional-expression.
|
185
|
-
|
233
|
+
def_plugin_and_notifier :conditional_expr_evaled,
|
234
|
+
:conditional_expression, :condition_variable,
|
235
|
+
:result_variable
|
186
236
|
|
187
237
|
# NOTE: Notified when the interpreter evaluates an indirection-expression.
|
188
|
-
|
238
|
+
def_plugin_and_notifier :indirection_expr_evaled,
|
239
|
+
:indirection_expression, :pointer_variable,
|
240
|
+
:dereferenced_variable
|
189
241
|
|
190
242
|
# NOTE: Notified when the interpreter evaluates a
|
191
243
|
# member-access-by-value-expression or a
|
192
244
|
# member-access-by-pointer-expression.
|
193
|
-
|
245
|
+
def_plugin_and_notifier :member_access_expr_evaled,
|
246
|
+
:member_access_expression, :outer_variable,
|
247
|
+
:member_variable
|
194
248
|
|
195
249
|
# NOTE: Notified when the interpreter evaluates a
|
196
250
|
# prefix-increment-expression.
|
197
|
-
|
251
|
+
def_plugin_and_notifier :prefix_increment_expr_evaled,
|
252
|
+
:prefix_increment_expression, :operand_variable,
|
253
|
+
:original_value
|
198
254
|
|
199
255
|
# NOTE: Notified when the interpreter evaluates a
|
200
256
|
# postfix-increment-expression.
|
201
|
-
|
257
|
+
def_plugin_and_notifier :postfix_increment_expr_evaled,
|
258
|
+
:postfix_increment_expression, :operand_variable,
|
259
|
+
:result_variable
|
202
260
|
|
203
261
|
# NOTE: Notified when the interpreter evaluates a
|
204
262
|
# prefix-decrement-expression.
|
205
|
-
|
263
|
+
def_plugin_and_notifier :prefix_decrement_expr_evaled,
|
264
|
+
:prefix_decrement_expression, :operand_variable,
|
265
|
+
:original_value
|
206
266
|
|
207
267
|
# NOTE: Notified when the interpreter evaluates a
|
208
268
|
# postfix-decrement-expression.
|
209
|
-
|
269
|
+
def_plugin_and_notifier :postfix_decrement_expr_evaled,
|
270
|
+
:postfix_decrement_expression, :operand_variable,
|
271
|
+
:result_variable
|
210
272
|
|
211
273
|
# NOTE: Notified when the interpreter evaluates a
|
212
274
|
# simple-assignment-expression or a compound-assignment-expression.
|
213
|
-
|
275
|
+
def_plugin_and_notifier :assignment_expr_evaled,
|
276
|
+
:assignment_expression, :lhs_variable,
|
277
|
+
:rhs_variable
|
214
278
|
|
215
279
|
# NOTE: Notified when the interpreter starts execution of a
|
216
280
|
# while-statement.
|
217
|
-
|
281
|
+
def_plugin_and_notifier :while_stmt_started, :while_statement
|
218
282
|
|
219
283
|
# NOTE: Notified when the interpreter ends execution of a while-statement.
|
220
|
-
|
284
|
+
def_plugin_and_notifier :while_stmt_ended, :while_statement
|
221
285
|
|
222
286
|
# NOTE: Notified when the interpreter starts execution of a do-statement.
|
223
|
-
|
287
|
+
def_plugin_and_notifier :do_stmt_started, :do_statement
|
224
288
|
|
225
289
|
# NOTE: Notified when the interpreter ends execution of a do-statement.
|
226
|
-
|
290
|
+
def_plugin_and_notifier :do_stmt_ended, :do_statement
|
227
291
|
|
228
292
|
# NOTE: Notified when the interpreter starts execution of a for-statement.
|
229
|
-
|
293
|
+
def_plugin_and_notifier :for_stmt_started, :for_statement
|
230
294
|
|
231
295
|
# NOTE: Notified when the interpreter ends execution of a for-statement.
|
232
|
-
|
296
|
+
def_plugin_and_notifier :for_stmt_ended, :for_statement
|
233
297
|
|
234
298
|
# NOTE: Notified when the interpreter starts execution of a
|
235
299
|
# c99-for-statement.
|
236
|
-
|
300
|
+
def_plugin_and_notifier :c99_for_stmt_started, :c99_for_statement
|
237
301
|
|
238
302
|
# NOTE: Notified when the interpreter ends execution of a
|
239
303
|
# c99-for-statement.
|
240
|
-
|
304
|
+
def_plugin_and_notifier :c99_for_stmt_ended, :c99_for_statement
|
241
305
|
|
242
306
|
# NOTE: Notified when the interpreter evaluates a goto-statement.
|
243
|
-
|
307
|
+
def_plugin_and_notifier :goto_stmt_evaled, :goto_statement, :label_name
|
244
308
|
|
245
309
|
# NOTE: Notified when the interpreter evaluates a return-statement.
|
246
|
-
|
310
|
+
def_plugin_and_notifier :return_stmt_evaled,
|
311
|
+
:return_statement, :result_variable
|
247
312
|
|
248
313
|
# NOTE: Notified when the interpreter evaluates a controlling expression of
|
249
314
|
# the if-statement.
|
250
|
-
|
315
|
+
def_plugin_and_notifier :if_ctrlexpr_evaled, :if_statement, :ctrlexpr_value
|
251
316
|
|
252
317
|
# NOTE: Notified when the interpreter evaluates a controlling expression of
|
253
318
|
# the if-else-statement.
|
254
|
-
|
319
|
+
def_plugin_and_notifier :if_else_ctrlexpr_evaled,
|
320
|
+
:if_else_statement, :ctrlexpr_value
|
255
321
|
|
256
322
|
# NOTE: Notified when the interpreter evaluates a controlling expression of
|
257
323
|
# the while-statement.
|
258
|
-
|
324
|
+
def_plugin_and_notifier :while_ctrlexpr_evaled,
|
325
|
+
:while_statement, :ctrlexpr_value
|
259
326
|
|
260
327
|
# NOTE: Notified when the interpreter evaluates a controlling expression of
|
261
328
|
# the do-statement.
|
262
|
-
|
329
|
+
def_plugin_and_notifier :do_ctrlexpr_evaled, :do_statement, :ctrlexpr_value
|
263
330
|
|
264
331
|
# NOTE: Notified when the interpreter evaluates a controlling expression of
|
265
332
|
# the for-statement.
|
266
|
-
|
333
|
+
def_plugin_and_notifier :for_ctrlexpr_evaled,
|
334
|
+
:for_statement, :ctrlexpr_value
|
267
335
|
|
268
336
|
# NOTE: Notified when the interpreter evaluates a controlling expression of
|
269
337
|
# the c99-for-statement.
|
270
|
-
|
338
|
+
def_plugin_and_notifier :c99_for_ctrlexpr_evaled,
|
339
|
+
:c99_for_statement, :ctrlexpr_value
|
271
340
|
|
272
341
|
# NOTE: Notified when the interpreter defines a generic-label.
|
273
|
-
|
342
|
+
def_plugin_and_notifier :label_defined, :generic_labeled_statement
|
274
343
|
|
275
344
|
# NOTE: Notified when the interpreter starts execution of a
|
276
345
|
# compound-statement.
|
277
|
-
|
346
|
+
def_plugin_and_notifier :block_started, :compound_statement
|
278
347
|
|
279
348
|
# NOTE: Notified when the interpreter ends execution of a
|
280
349
|
# compound-statement.
|
281
|
-
|
350
|
+
def_plugin_and_notifier :block_ended, :compound_statement
|
282
351
|
|
283
352
|
# NOTE: Notified when the interpreter forks execution paths of a
|
284
353
|
# function-definition.
|
285
|
-
|
354
|
+
def_plugin_and_notifier :branch_started, :branch
|
286
355
|
|
287
356
|
# NOTE: Notified when the interpreter joins execution paths of a
|
288
357
|
# function-definition.
|
289
|
-
|
358
|
+
def_plugin_and_notifier :branch_ended, :branch
|
290
359
|
|
291
360
|
# NOTE: Notified when the interpreter starts execution of a
|
292
361
|
# translation-unit.
|
293
|
-
|
362
|
+
def_plugin_and_notifier :translation_unit_started, :translation_unit
|
294
363
|
|
295
364
|
# NOTE: Notified when the interpreter ends execution of a translation-unit.
|
296
|
-
|
365
|
+
def_plugin_and_notifier :translation_unit_ended, :translation_unit
|
366
|
+
|
367
|
+
# NOTE: Notified when control reaches to a sequence-point.
|
368
|
+
def_plugin_and_notifier :sequence_point_reached, :sequence_point
|
297
369
|
|
298
370
|
def execute(node, *options)
|
299
371
|
if options.include?(:suppress_notification)
|
@@ -332,467 +404,6 @@ module C #:nodoc:
|
|
332
404
|
ScalarValue.of(object.binding.memory.address)
|
333
405
|
end
|
334
406
|
|
335
|
-
def notify_variable_initialized(variable_definition,
|
336
|
-
variable, init_variable)
|
337
|
-
unless @suppress_notification
|
338
|
-
on_variable_initialized.invoke(variable_definition,
|
339
|
-
variable, init_variable)
|
340
|
-
end
|
341
|
-
end
|
342
|
-
|
343
|
-
def notify_variable_defined(variable_definition, variable)
|
344
|
-
unless @suppress_notification
|
345
|
-
on_variable_defined.invoke(variable_definition, variable)
|
346
|
-
end
|
347
|
-
end
|
348
|
-
|
349
|
-
def notify_function_declared(function_declaration, function)
|
350
|
-
unless @suppress_notification
|
351
|
-
on_function_declared.invoke(function_declaration, function)
|
352
|
-
end
|
353
|
-
end
|
354
|
-
|
355
|
-
def notify_variable_declared(variable_declaration, variable)
|
356
|
-
unless @suppress_notification
|
357
|
-
on_variable_declared.invoke(variable_declaration, variable)
|
358
|
-
end
|
359
|
-
end
|
360
|
-
|
361
|
-
def notify_struct_declared(struct_type_declaration)
|
362
|
-
unless @suppress_notification
|
363
|
-
on_struct_declared.invoke(struct_type_declaration)
|
364
|
-
end
|
365
|
-
end
|
366
|
-
|
367
|
-
def notify_union_declared(union_type_declaration)
|
368
|
-
unless @suppress_notification
|
369
|
-
on_union_declared.invoke(union_type_declaration)
|
370
|
-
end
|
371
|
-
end
|
372
|
-
|
373
|
-
def notify_enum_declared(enum_type_declaration)
|
374
|
-
unless @suppress_notification
|
375
|
-
on_enum_declared.invoke(enum_type_declaration)
|
376
|
-
end
|
377
|
-
end
|
378
|
-
|
379
|
-
def notify_typedef_declared(typedef_declaration)
|
380
|
-
unless @suppress_notification
|
381
|
-
on_typedef_declared.invoke(typedef_declaration)
|
382
|
-
end
|
383
|
-
end
|
384
|
-
|
385
|
-
def notify_function_started(function_definition)
|
386
|
-
unless @suppress_notification
|
387
|
-
on_function_started.invoke(function_definition)
|
388
|
-
end
|
389
|
-
end
|
390
|
-
|
391
|
-
def notify_function_ended(function_definition)
|
392
|
-
unless @suppress_notification
|
393
|
-
on_function_ended.invoke(function_definition)
|
394
|
-
end
|
395
|
-
end
|
396
|
-
|
397
|
-
def notify_parameter_defined(parameter_definition, variable)
|
398
|
-
unless @suppress_notification
|
399
|
-
on_parameter_defined.invoke(parameter_definition, variable)
|
400
|
-
end
|
401
|
-
end
|
402
|
-
|
403
|
-
def notify_variable_referred(object_specifier, variable)
|
404
|
-
unless @suppress_notification
|
405
|
-
on_variable_referred.invoke(object_specifier, variable)
|
406
|
-
end
|
407
|
-
end
|
408
|
-
|
409
|
-
def notify_constant_referred(constant_specifier, variable)
|
410
|
-
unless @suppress_notification
|
411
|
-
on_constant_referred.invoke(constant_specifier, variable)
|
412
|
-
end
|
413
|
-
end
|
414
|
-
|
415
|
-
def notify_variable_value_referred(expression, variable)
|
416
|
-
unless @suppress_notification
|
417
|
-
on_variable_value_referred.invoke(expression, variable)
|
418
|
-
end
|
419
|
-
end
|
420
|
-
|
421
|
-
def notify_variable_value_updated(expression, variable)
|
422
|
-
unless @suppress_notification
|
423
|
-
on_variable_value_updated.invoke(expression, variable)
|
424
|
-
end
|
425
|
-
end
|
426
|
-
|
427
|
-
def notify_function_referred(expression, function)
|
428
|
-
unless @suppress_notification
|
429
|
-
on_function_referred.invoke(expression, function)
|
430
|
-
end
|
431
|
-
end
|
432
|
-
|
433
|
-
def notify_sizeof_expr_evaled(expression,
|
434
|
-
operand_variable, result_variable)
|
435
|
-
unless @suppress_notification
|
436
|
-
on_sizeof_expr_evaled.invoke(expression,
|
437
|
-
operand_variable, result_variable)
|
438
|
-
end
|
439
|
-
end
|
440
|
-
|
441
|
-
def notify_sizeof_type_expr_evaled(expression, type, result_variable)
|
442
|
-
unless @suppress_notification
|
443
|
-
on_sizeof_type_expr_evaled.invoke(expression, type, result_variable)
|
444
|
-
end
|
445
|
-
end
|
446
|
-
|
447
|
-
def notify_explicit_conv_performed(expression,
|
448
|
-
original_variable, result_variable)
|
449
|
-
unless @suppress_notification
|
450
|
-
on_explicit_conv_performed.invoke(expression,
|
451
|
-
original_variable, result_variable)
|
452
|
-
end
|
453
|
-
end
|
454
|
-
|
455
|
-
def notify_implicit_conv_performed(initializer_or_expression,
|
456
|
-
original_variable, result_variable)
|
457
|
-
unless @suppress_notification
|
458
|
-
on_implicit_conv_performed.invoke(initializer_or_expression,
|
459
|
-
original_variable, result_variable)
|
460
|
-
end
|
461
|
-
end
|
462
|
-
|
463
|
-
def notify_array_subscript_expr_evaled(array_subscript_expression,
|
464
|
-
array_or_pointer_variable,
|
465
|
-
subscript_variable,
|
466
|
-
array_variable, result_variable)
|
467
|
-
unless @suppress_notification
|
468
|
-
on_array_subscript_expr_evaled.invoke(array_subscript_expression,
|
469
|
-
array_or_pointer_variable,
|
470
|
-
subscript_variable,
|
471
|
-
array_variable, result_variable)
|
472
|
-
end
|
473
|
-
end
|
474
|
-
|
475
|
-
def notify_function_call_expr_evaled(function_call_expression, function,
|
476
|
-
arg_variables, result_variable)
|
477
|
-
unless @suppress_notification
|
478
|
-
on_function_call_expr_evaled.invoke(function_call_expression, function,
|
479
|
-
arg_variables, result_variable)
|
480
|
-
end
|
481
|
-
end
|
482
|
-
|
483
|
-
def notify_unary_arithmetic_expr_evaled(unary_arithmetic_expression,
|
484
|
-
operand_variable, result_variable)
|
485
|
-
unless @suppress_notification
|
486
|
-
on_unary_arithmetic_expr_evaled.invoke(unary_arithmetic_expression,
|
487
|
-
operand_variable,
|
488
|
-
result_variable)
|
489
|
-
end
|
490
|
-
end
|
491
|
-
|
492
|
-
def notify_multiplicative_expr_evaled(multiplicative_expression,
|
493
|
-
lhs_variable, rhs_variable,
|
494
|
-
result_variable)
|
495
|
-
unless @suppress_notification
|
496
|
-
on_multiplicative_expr_evaled.invoke(multiplicative_expression,
|
497
|
-
lhs_variable, rhs_variable,
|
498
|
-
result_variable)
|
499
|
-
end
|
500
|
-
end
|
501
|
-
|
502
|
-
def notify_additive_expr_evaled(additive_expression,
|
503
|
-
lhs_variable, rhs_variable,
|
504
|
-
result_variable)
|
505
|
-
unless @suppress_notification
|
506
|
-
on_additive_expr_evaled.invoke(additive_expression,
|
507
|
-
lhs_variable, rhs_variable,
|
508
|
-
result_variable)
|
509
|
-
end
|
510
|
-
end
|
511
|
-
|
512
|
-
def notify_shift_expr_evaled(shift_expression,
|
513
|
-
lhs_variable, rhs_variable, result_variable)
|
514
|
-
unless @suppress_notification
|
515
|
-
on_shift_expr_evaled.invoke(shift_expression,
|
516
|
-
lhs_variable, rhs_variable,
|
517
|
-
result_variable)
|
518
|
-
end
|
519
|
-
end
|
520
|
-
|
521
|
-
def notify_relational_expr_evaled(relational_expression,
|
522
|
-
lhs_variable, rhs_variable,
|
523
|
-
result_variable)
|
524
|
-
unless @suppress_notification
|
525
|
-
on_relational_expr_evaled.invoke(relational_expression,
|
526
|
-
lhs_variable, rhs_variable,
|
527
|
-
result_variable)
|
528
|
-
end
|
529
|
-
end
|
530
|
-
|
531
|
-
def notify_equality_expr_evaled(equality_expression,
|
532
|
-
lhs_variable, rhs_variable,
|
533
|
-
result_variable)
|
534
|
-
unless @suppress_notification
|
535
|
-
on_equality_expr_evaled.invoke(equality_expression,
|
536
|
-
lhs_variable, rhs_variable,
|
537
|
-
result_variable)
|
538
|
-
end
|
539
|
-
end
|
540
|
-
|
541
|
-
def notify_and_expr_evaled(and_expression,
|
542
|
-
lhs_variable, rhs_variable, result_variable)
|
543
|
-
unless @suppress_notification
|
544
|
-
on_and_expr_evaled.invoke(and_expression,
|
545
|
-
lhs_variable, rhs_variable, result_variable)
|
546
|
-
end
|
547
|
-
end
|
548
|
-
|
549
|
-
def notify_exclusive_or_expr_evaled(exclusive_or_expression,
|
550
|
-
lhs_variable, rhs_variable,
|
551
|
-
result_variable)
|
552
|
-
unless @suppress_notification
|
553
|
-
on_exclusive_or_expr_evaled.invoke(exclusive_or_expression,
|
554
|
-
lhs_variable, rhs_variable,
|
555
|
-
result_variable)
|
556
|
-
end
|
557
|
-
end
|
558
|
-
|
559
|
-
def notify_inclusive_or_expr_evaled(inclusive_or_expression,
|
560
|
-
lhs_variable, rhs_variable,
|
561
|
-
result_variable)
|
562
|
-
unless @suppress_notification
|
563
|
-
on_inclusive_or_expr_evaled.invoke(inclusive_or_expression,
|
564
|
-
lhs_variable, rhs_variable,
|
565
|
-
result_variable)
|
566
|
-
end
|
567
|
-
end
|
568
|
-
|
569
|
-
def notify_logical_and_expr_evaled(logical_and_expression,
|
570
|
-
lhs_variable, rhs_variable,
|
571
|
-
result_variable)
|
572
|
-
unless @suppress_notification
|
573
|
-
on_logical_and_expr_evaled.invoke(logical_and_expression,
|
574
|
-
lhs_variable, rhs_variable,
|
575
|
-
result_variable)
|
576
|
-
end
|
577
|
-
end
|
578
|
-
|
579
|
-
def notify_logical_or_expr_evaled(logical_or_expression,
|
580
|
-
lhs_variable, rhs_variable,
|
581
|
-
result_variable)
|
582
|
-
unless @suppress_notification
|
583
|
-
on_logical_or_expr_evaled.invoke(logical_or_expression,
|
584
|
-
lhs_variable, rhs_variable,
|
585
|
-
result_variable)
|
586
|
-
end
|
587
|
-
end
|
588
|
-
|
589
|
-
def notify_conditional_expr_evaled(conditional_expression,
|
590
|
-
condition_variable, result_variable)
|
591
|
-
unless @suppress_notification
|
592
|
-
on_conditional_expr_evaled.invoke(conditional_expression,
|
593
|
-
condition_variable, result_variable)
|
594
|
-
end
|
595
|
-
end
|
596
|
-
|
597
|
-
def notify_indirection_expr_evaled(indirection_expression,
|
598
|
-
pointer_variable, dereferenced_variable)
|
599
|
-
unless @suppress_notification
|
600
|
-
on_indirection_expr_evaled.invoke(indirection_expression,
|
601
|
-
pointer_variable,
|
602
|
-
dereferenced_variable)
|
603
|
-
end
|
604
|
-
end
|
605
|
-
|
606
|
-
def notify_member_access_expr_evaled(member_access_expression,
|
607
|
-
outer_variable, member_variable)
|
608
|
-
unless @suppress_notification
|
609
|
-
on_member_access_expr_evaled.invoke(member_access_expression,
|
610
|
-
outer_variable, member_variable)
|
611
|
-
end
|
612
|
-
end
|
613
|
-
|
614
|
-
def notify_prefix_increment_expr_evaled(prefix_increment_expression,
|
615
|
-
operand_variable, original_value)
|
616
|
-
unless @suppress_notification
|
617
|
-
on_prefix_increment_expr_evaled.invoke(prefix_increment_expression,
|
618
|
-
operand_variable,
|
619
|
-
original_value)
|
620
|
-
end
|
621
|
-
end
|
622
|
-
|
623
|
-
def notify_postfix_increment_expr_evaled(postfix_increment_expression,
|
624
|
-
operand_variable, result_variable)
|
625
|
-
unless @suppress_notification
|
626
|
-
on_postfix_increment_expr_evaled.invoke(postfix_increment_expression,
|
627
|
-
operand_variable,
|
628
|
-
result_variable)
|
629
|
-
end
|
630
|
-
end
|
631
|
-
|
632
|
-
def notify_prefix_decrement_expr_evaled(prefix_decrement_expression,
|
633
|
-
operand_variable, original_value)
|
634
|
-
unless @suppress_notification
|
635
|
-
on_prefix_decrement_expr_evaled.invoke(prefix_decrement_expression,
|
636
|
-
operand_variable,
|
637
|
-
original_value)
|
638
|
-
end
|
639
|
-
end
|
640
|
-
|
641
|
-
def notify_postfix_decrement_expr_evaled(postfix_decrement_expression,
|
642
|
-
operand_variable, result_variable)
|
643
|
-
unless @suppress_notification
|
644
|
-
on_postfix_decrement_expr_evaled.invoke(postfix_decrement_expression,
|
645
|
-
operand_variable,
|
646
|
-
result_variable)
|
647
|
-
end
|
648
|
-
end
|
649
|
-
|
650
|
-
def notify_assignment_expr_evaled(assignment_expression,
|
651
|
-
lhs_variable, rhs_variable)
|
652
|
-
unless @suppress_notification
|
653
|
-
on_assignment_expr_evaled.invoke(assignment_expression,
|
654
|
-
lhs_variable, rhs_variable)
|
655
|
-
end
|
656
|
-
end
|
657
|
-
|
658
|
-
def notify_while_stmt_started(while_statement)
|
659
|
-
unless @suppress_notification
|
660
|
-
on_while_stmt_started.invoke(while_statement)
|
661
|
-
end
|
662
|
-
end
|
663
|
-
|
664
|
-
def notify_while_stmt_ended(while_statement)
|
665
|
-
unless @suppress_notification
|
666
|
-
on_while_stmt_ended.invoke(while_statement)
|
667
|
-
end
|
668
|
-
end
|
669
|
-
|
670
|
-
def notify_do_stmt_started(do_statement)
|
671
|
-
unless @suppress_notification
|
672
|
-
on_do_stmt_started.invoke(do_statement)
|
673
|
-
end
|
674
|
-
end
|
675
|
-
|
676
|
-
def notify_do_stmt_ended(do_statement)
|
677
|
-
unless @suppress_notification
|
678
|
-
on_do_stmt_ended.invoke(do_statement)
|
679
|
-
end
|
680
|
-
end
|
681
|
-
|
682
|
-
def notify_for_stmt_started(for_statement)
|
683
|
-
unless @suppress_notification
|
684
|
-
on_for_stmt_started.invoke(for_statement)
|
685
|
-
end
|
686
|
-
end
|
687
|
-
|
688
|
-
def notify_for_stmt_ended(for_statement)
|
689
|
-
unless @suppress_notification
|
690
|
-
on_for_stmt_ended.invoke(for_statement)
|
691
|
-
end
|
692
|
-
end
|
693
|
-
|
694
|
-
def notify_c99_for_stmt_started(c99_for_statement)
|
695
|
-
unless @suppress_notification
|
696
|
-
on_c99_for_stmt_started.invoke(c99_for_statement)
|
697
|
-
end
|
698
|
-
end
|
699
|
-
|
700
|
-
def notify_c99_for_stmt_ended(c99_for_statement)
|
701
|
-
unless @suppress_notification
|
702
|
-
on_c99_for_stmt_ended.invoke(c99_for_statement)
|
703
|
-
end
|
704
|
-
end
|
705
|
-
|
706
|
-
def notify_goto_stmt_evaled(goto_statement, label_name)
|
707
|
-
unless @suppress_notification
|
708
|
-
on_goto_stmt_evaled.invoke(goto_statement, label_name)
|
709
|
-
end
|
710
|
-
end
|
711
|
-
|
712
|
-
def notify_return_stmt_evaled(return_statement, result_variable)
|
713
|
-
unless @suppress_notification
|
714
|
-
on_return_stmt_evaled.invoke(return_statement, result_variable)
|
715
|
-
end
|
716
|
-
end
|
717
|
-
|
718
|
-
def notify_if_ctrlexpr_evaled(if_statement, ctrlexpr_value)
|
719
|
-
unless @suppress_notification
|
720
|
-
on_if_ctrlexpr_evaled.invoke(if_statement, ctrlexpr_value)
|
721
|
-
end
|
722
|
-
end
|
723
|
-
|
724
|
-
def notify_if_else_ctrlexpr_evaled(if_else_statement, ctrlexpr_value)
|
725
|
-
unless @suppress_notification
|
726
|
-
on_if_else_ctrlexpr_evaled.invoke(if_else_statement, ctrlexpr_value)
|
727
|
-
end
|
728
|
-
end
|
729
|
-
|
730
|
-
def notify_while_ctrlexpr_evaled(while_statement, ctrlexpr_value)
|
731
|
-
unless @suppress_notification
|
732
|
-
on_while_ctrlexpr_evaled.invoke(while_statement, ctrlexpr_value)
|
733
|
-
end
|
734
|
-
end
|
735
|
-
|
736
|
-
def notify_do_ctrlexpr_evaled(do_statement, ctrlexpr_value)
|
737
|
-
unless @suppress_notification
|
738
|
-
on_do_ctrlexpr_evaled.invoke(do_statement, ctrlexpr_value)
|
739
|
-
end
|
740
|
-
end
|
741
|
-
|
742
|
-
def notify_for_ctrlexpr_evaled(for_statement, ctrlexpr_value)
|
743
|
-
unless @suppress_notification
|
744
|
-
on_for_ctrlexpr_evaled.invoke(for_statement, ctrlexpr_value)
|
745
|
-
end
|
746
|
-
end
|
747
|
-
|
748
|
-
def notify_c99_for_ctrlexpr_evaled(c99_for_statement, ctrlexpr_value)
|
749
|
-
unless @suppress_notification
|
750
|
-
on_c99_for_ctrlexpr_evaled.invoke(c99_for_statement, ctrlexpr_value)
|
751
|
-
end
|
752
|
-
end
|
753
|
-
|
754
|
-
def notify_label_defined(generic_labeled_statement)
|
755
|
-
unless @suppress_notification
|
756
|
-
on_label_defined.invoke(generic_labeled_statement)
|
757
|
-
end
|
758
|
-
end
|
759
|
-
|
760
|
-
def notify_block_started(compound_statement)
|
761
|
-
unless @suppress_notification
|
762
|
-
on_block_started.invoke(compound_statement)
|
763
|
-
end
|
764
|
-
end
|
765
|
-
|
766
|
-
def notify_block_ended(compound_statement)
|
767
|
-
unless @suppress_notification
|
768
|
-
on_block_ended.invoke(compound_statement)
|
769
|
-
end
|
770
|
-
end
|
771
|
-
|
772
|
-
def notify_branch_started(branch)
|
773
|
-
unless @suppress_notification
|
774
|
-
on_branch_started.invoke(branch)
|
775
|
-
end
|
776
|
-
end
|
777
|
-
|
778
|
-
def notify_branch_ended(branch)
|
779
|
-
unless @suppress_notification
|
780
|
-
on_branch_ended.invoke(branch)
|
781
|
-
end
|
782
|
-
end
|
783
|
-
|
784
|
-
def notify_translation_unit_started(translation_unit)
|
785
|
-
unless @suppress_notification
|
786
|
-
on_translation_unit_started.invoke(translation_unit)
|
787
|
-
end
|
788
|
-
end
|
789
|
-
|
790
|
-
def notify_translation_unit_ended(translation_unit)
|
791
|
-
unless @suppress_notification
|
792
|
-
on_translation_unit_ended.invoke(translation_unit)
|
793
|
-
end
|
794
|
-
end
|
795
|
-
|
796
407
|
def _suppress_notification=(suppress_notification)
|
797
408
|
# NOTE: This method is called only from ControllingExpression.
|
798
409
|
@suppress_notification = suppress_notification
|
@@ -879,6 +490,8 @@ module C #:nodoc:
|
|
879
490
|
|
880
491
|
function = define_explicit_function(node)
|
881
492
|
notify_function_declared(node, function)
|
493
|
+
|
494
|
+
evaluate_sequence_point(node.init_declarator.declarator)
|
882
495
|
end
|
883
496
|
|
884
497
|
def visit_variable_declaration(node)
|
@@ -892,6 +505,8 @@ module C #:nodoc:
|
|
892
505
|
|
893
506
|
variable = declare_variable(node)
|
894
507
|
notify_variable_declared(node, variable)
|
508
|
+
|
509
|
+
evaluate_sequence_point(node.declarator)
|
895
510
|
end
|
896
511
|
|
897
512
|
def visit_variable_definition(node)
|
@@ -915,6 +530,8 @@ module C #:nodoc:
|
|
915
530
|
notify_implicit_conv_performed(initializer, init_variable, converted)
|
916
531
|
end
|
917
532
|
|
533
|
+
notify_variable_value_referred(node, init_variable)
|
534
|
+
|
918
535
|
variable = define_variable(node, converted.value.to_defined_value)
|
919
536
|
notify_variable_defined(node, variable)
|
920
537
|
notify_variable_initialized(node, variable, init_variable)
|
@@ -922,6 +539,8 @@ module C #:nodoc:
|
|
922
539
|
variable = define_variable(node)
|
923
540
|
notify_variable_defined(node, variable)
|
924
541
|
end
|
542
|
+
|
543
|
+
evaluate_sequence_point(node.init_declarator.declarator)
|
925
544
|
end
|
926
545
|
|
927
546
|
def visit_struct_type_declaration(node)
|
@@ -972,6 +591,8 @@ module C #:nodoc:
|
|
972
591
|
|
973
592
|
notify_typedef_declared(node)
|
974
593
|
|
594
|
+
evaluate_sequence_point(node.init_declarator.declarator)
|
595
|
+
|
975
596
|
Analyzer.current.info("user type `#{node.identifier.value}' " +
|
976
597
|
"defined at #{node.location.to_s}.")
|
977
598
|
end
|
@@ -1007,6 +628,12 @@ module C #:nodoc:
|
|
1007
628
|
def deduct_array_length_from_array_variable(variable_type, array_variable)
|
1008
629
|
variable_type.length ||= array_variable.type.length
|
1009
630
|
end
|
631
|
+
|
632
|
+
def evaluate_sequence_point(full_declarator)
|
633
|
+
if sequence_point = full_declarator.subsequent_sequence_point
|
634
|
+
notify_sequence_point_reached(sequence_point)
|
635
|
+
end
|
636
|
+
end
|
1010
637
|
end
|
1011
638
|
|
1012
639
|
class InitializerInterpreter
|
@@ -1341,12 +968,26 @@ module C #:nodoc:
|
|
1341
968
|
NARROWING, FINAL, IMPLICIT_CONDITION, COMPLETE) do
|
1342
969
|
interpret(node.body_statement)
|
1343
970
|
interpret(node.expression) if node.expression
|
971
|
+
# NOTE: To avoid that value of the controlling variable is marked
|
972
|
+
# as updated at end of the for-statement. Value of the
|
973
|
+
# controlling variable is referred by the controlling
|
974
|
+
# expression at the last iteration.
|
975
|
+
# FIXME: This re-interpretation of the controlling expression may
|
976
|
+
# causes duplicative warning messages.
|
977
|
+
interpret(ctrlexpr)
|
1344
978
|
end
|
1345
979
|
when ctrlexpr_value.may_be_true?
|
1346
980
|
branched_eval(effective_ctrlexpr,
|
1347
981
|
NARROWING, FINAL, IMPLICIT_CONDITION) do
|
1348
982
|
interpret(node.body_statement)
|
1349
983
|
interpret(node.expression) if node.expression
|
984
|
+
# NOTE: To avoid that value of the controlling variable is marked
|
985
|
+
# as updated at end of the for-statement. Value of the
|
986
|
+
# controlling variable is referred by the controlling
|
987
|
+
# expression at the last iteration.
|
988
|
+
# FIXME: This re-interpretation of the controlling expression may
|
989
|
+
# causes duplicative warning messages.
|
990
|
+
interpret(ctrlexpr)
|
1350
991
|
end
|
1351
992
|
end
|
1352
993
|
else
|
@@ -1383,12 +1024,26 @@ module C #:nodoc:
|
|
1383
1024
|
NARROWING, FINAL, IMPLICIT_CONDITION, COMPLETE) do
|
1384
1025
|
interpret(node.body_statement)
|
1385
1026
|
interpret(node.expression) if node.expression
|
1027
|
+
# NOTE: To avoid that value of the controlling variable is marked
|
1028
|
+
# as updated at end of the for-statement. Value of the
|
1029
|
+
# controlling variable is referred by the controlling
|
1030
|
+
# expression at the last iteration.
|
1031
|
+
# FIXME: This re-interpretation of the controlling expression may
|
1032
|
+
# causes duplicative warning messages.
|
1033
|
+
interpret(ctrlexpr)
|
1386
1034
|
end
|
1387
1035
|
when ctrlexpr_value.may_be_true?
|
1388
1036
|
branched_eval(effective_ctrlexpr,
|
1389
1037
|
NARROWING, FINAL, IMPLICIT_CONDITION) do
|
1390
1038
|
interpret(node.body_statement)
|
1391
1039
|
interpret(node.expression) if node.expression
|
1040
|
+
# NOTE: To avoid that value of the controlling variable is marked
|
1041
|
+
# as updated at end of the for-statement. Value of the
|
1042
|
+
# controlling variable is referred by the controlling
|
1043
|
+
# expression at the last iteration.
|
1044
|
+
# FIXME: This re-interpretation of the controlling expression may
|
1045
|
+
# causes duplicative warning messages.
|
1046
|
+
interpret(ctrlexpr)
|
1392
1047
|
end
|
1393
1048
|
end
|
1394
1049
|
else
|
@@ -1734,6 +1389,59 @@ module C #:nodoc:
|
|
1734
1389
|
def initialize(owner)
|
1735
1390
|
super(owner, Expression)
|
1736
1391
|
end
|
1392
|
+
|
1393
|
+
def self.def_eval_with_sequence_point(method_name)
|
1394
|
+
class_eval <<-EOS
|
1395
|
+
def #{method_name}(node)
|
1396
|
+
super
|
1397
|
+
ensure
|
1398
|
+
if sequence_point = node.subsequent_sequence_point
|
1399
|
+
notify_sequence_point_reached(sequence_point)
|
1400
|
+
end
|
1401
|
+
end
|
1402
|
+
EOS
|
1403
|
+
end
|
1404
|
+
private_class_method :def_eval_with_sequence_point
|
1405
|
+
|
1406
|
+
def_eval_with_sequence_point :visit_error_expression
|
1407
|
+
def_eval_with_sequence_point :visit_object_specifier
|
1408
|
+
def_eval_with_sequence_point :visit_constant_specifier
|
1409
|
+
def_eval_with_sequence_point :visit_string_literal_specifier
|
1410
|
+
def_eval_with_sequence_point :visit_null_constant_specifier
|
1411
|
+
def_eval_with_sequence_point :visit_grouped_expression
|
1412
|
+
def_eval_with_sequence_point :visit_array_subscript_expression
|
1413
|
+
def_eval_with_sequence_point :visit_function_call_expression
|
1414
|
+
def_eval_with_sequence_point :visit_member_access_by_value_expression
|
1415
|
+
def_eval_with_sequence_point :visit_member_access_by_pointer_expression
|
1416
|
+
def_eval_with_sequence_point :visit_bit_access_by_value_expression
|
1417
|
+
def_eval_with_sequence_point :visit_bit_access_by_pointer_expression
|
1418
|
+
def_eval_with_sequence_point :visit_postfix_increment_expression
|
1419
|
+
def_eval_with_sequence_point :visit_postfix_decrement_expression
|
1420
|
+
def_eval_with_sequence_point :visit_compound_literal_expression
|
1421
|
+
def_eval_with_sequence_point :visit_prefix_increment_expression
|
1422
|
+
def_eval_with_sequence_point :visit_prefix_decrement_expression
|
1423
|
+
def_eval_with_sequence_point :visit_address_expression
|
1424
|
+
def_eval_with_sequence_point :visit_indirection_expression
|
1425
|
+
def_eval_with_sequence_point :visit_unary_arithmetic_expression
|
1426
|
+
def_eval_with_sequence_point :visit_sizeof_expression
|
1427
|
+
def_eval_with_sequence_point :visit_sizeof_type_expression
|
1428
|
+
def_eval_with_sequence_point :visit_alignof_expression
|
1429
|
+
def_eval_with_sequence_point :visit_alignof_type_expression
|
1430
|
+
def_eval_with_sequence_point :visit_cast_expression
|
1431
|
+
def_eval_with_sequence_point :visit_multiplicative_expression
|
1432
|
+
def_eval_with_sequence_point :visit_additive_expression
|
1433
|
+
def_eval_with_sequence_point :visit_shift_expression
|
1434
|
+
def_eval_with_sequence_point :visit_relational_expression
|
1435
|
+
def_eval_with_sequence_point :visit_equality_expression
|
1436
|
+
def_eval_with_sequence_point :visit_and_expression
|
1437
|
+
def_eval_with_sequence_point :visit_exclusive_or_expression
|
1438
|
+
def_eval_with_sequence_point :visit_inclusive_or_expression
|
1439
|
+
def_eval_with_sequence_point :visit_logical_and_expression
|
1440
|
+
def_eval_with_sequence_point :visit_logical_or_expression
|
1441
|
+
def_eval_with_sequence_point :visit_conditional_expression
|
1442
|
+
def_eval_with_sequence_point :visit_simple_assignment_expression
|
1443
|
+
def_eval_with_sequence_point :visit_compound_assignment_expression
|
1444
|
+
def_eval_with_sequence_point :visit_comma_separated_expression
|
1737
1445
|
end
|
1738
1446
|
|
1739
1447
|
end
|