adlint 1.0.0 → 1.2.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- 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
|