adlint 1.2.0 → 1.4.0

Sign up to get free protection for your applications and to get access to all the features.
data/AUTHORS CHANGED
@@ -21,7 +21,7 @@
21
21
 
22
22
  ++
23
23
 
24
- === Original Author
24
+ === Authors
25
25
 
26
26
  * Yutaka Yanoh <mailto:yanoh@users.sourceforge.net>
27
27
  * Rie Shima <mailto:rkakuuchi@users.sourceforge.net>
data/ChangeLog CHANGED
@@ -1,3 +1,275 @@
1
+ Thu Mar 29 10:53:48 2012 Yutaka Yanoh <yanoh@users.sourceforge.net>
2
+
3
+ * release.ga : 1.4.0
4
+ - Add W0606 detection.
5
+ - Add W0687 detection.
6
+ - Add W0695 detection.
7
+ - Add W0698 detection.
8
+ - Add W0699 detection.
9
+ - Add W0720 detection.
10
+ - Add W0721 detection.
11
+ - Add W0722 detection.
12
+ - Add W0723 detection.
13
+ - Add W0726 detection.
14
+ - Add W0727 detection.
15
+ - Add W0728 detection.
16
+ - Add W0729 detection.
17
+ - Add W0730 detection.
18
+ - Add W0731 detection.
19
+ - Add W0737 detection.
20
+ - Add W0738 detection.
21
+ - Add W0739 detection.
22
+ - Add W0740 detection.
23
+ - Add W0741 detection.
24
+ - Add W0743 detection.
25
+ - Add W0801 detection.
26
+ - Add W0806 detection.
27
+ - Add W1033 detection.
28
+ - Add W1064 detection.
29
+ - Add W1065 detection.
30
+ - Add missing implicit conversion of return-statement in order to
31
+ detect W0727 at an expression of return-statement.
32
+ - Update the user's guide in Japanese.
33
+ - Update the user's guide in English.
34
+
35
+ Wed Mar 28 15:30:55 2012 Yutaka Yanoh <yanoh@users.sourceforge.net>
36
+
37
+ * release.beta : 1.3.3
38
+ - Fix interpreter in order to detect W0653 correctly.
39
+
40
+ Wed Mar 28 15:24:20 2012 Yutaka Yanoh <yanoh@users.sourceforge.net>
41
+
42
+ * lib/adlint/c/interp.rb : Fix evaluation of a string literal as an
43
+ initializer of the array variable definition in order to detect
44
+ W0653 correctly.
45
+
46
+ Wed Mar 28 13:51:55 2012 Yutaka Yanoh <yanoh@users.sourceforge.net>
47
+
48
+ * release.beta : 1.3.2
49
+ - Fix interpreter in order to detect W0255 family, W0459, W0580,
50
+ W0653, W0654 and W0730 correctly.
51
+ - Update the user's guide in Japanese.
52
+ - Update the user's guide in English.
53
+
54
+ Wed Mar 28 13:48:16 2012 Yutaka Yanoh <yanoh@users.sourceforge.net>
55
+
56
+ * lib/adlint/c/interp.rb : Fix initialization of the array variable
57
+ defined with a string literal as an initializer in order to detect
58
+ W0580 correctly.
59
+
60
+ Wed Mar 28 13:39:56 2012 Yutaka Yanoh <yanoh@users.sourceforge.net>
61
+
62
+ * lib/adlint/c/interp.rb : Fix notification of variable initialization
63
+ to pass the original object of an implicit conversion in order to
64
+ detect W0653 and W0654 correctly.
65
+
66
+ Wed Mar 28 12:04:08 2012 Yutaka Yanoh <yanoh@users.sourceforge.net>
67
+
68
+ * lib/adlint/c/interp.rb : Fix notification of return-statement
69
+ evaluation not to confuse W0255 family and W0730 detections.
70
+
71
+ Wed Mar 28 11:39:43 2012 Yutaka Yanoh <yanoh@users.sourceforge.net>
72
+
73
+ * lib/adlint/c/expr.rb : Fix access notification of array or composite
74
+ typeed variable value and add missing reference notification of the
75
+ array value in evaluation of an array-subscript-expression in order
76
+ to detect W0459 correctly.
77
+
78
+ Wed Mar 28 09:58:58 2012 Yutaka Yanoh <yanoh@users.sourceforge.net>
79
+
80
+ * share/doc/users_guide_ja.texi : Update descriptions about added
81
+ warning messages.
82
+ * share/doc/users_guide_en.texi : Ditto.
83
+
84
+ Tue Mar 27 17:59:37 2012 Yutaka Yanoh <yanoh@users.sourceforge.net>
85
+
86
+ * release.beta : 1.3.1
87
+ - Add W0737 detection.
88
+ - Add W0738 detection.
89
+ - Add W0739 detection.
90
+ - Add W0740 detection.
91
+ - Add W0741 detection.
92
+ - Add W0743 detection.
93
+ - Add missing implicit conversion of return-statement in order to
94
+ detect W0727 at an expression of return-statement.
95
+ - Update the user's guide in Japanese.
96
+ - Update the user's guide in English.
97
+
98
+ Tue Mar 27 17:51:06 2012 Yutaka Yanoh <yanoh@users.sourceforge.net>
99
+
100
+ * lib/adlint/c/message.rb : Add W0743 detection.
101
+ * lib/adlint/c/phase.rb : Ditto.
102
+ * share/demo/overflow/overflow.c : Add sample code.
103
+
104
+ Tue Mar 27 17:34:14 2012 Yutaka Yanoh <yanoh@users.sourceforge.net>
105
+
106
+ * lib/adlint/c/message.rb : Add W0740 and W0741 detections.
107
+ * lib/adlint/c/phase.rb : Ditto.
108
+ * share/demo/wrap_around/wrap_around.c : Add sample code.
109
+
110
+ Tue Mar 27 17:14:34 2012 Yutaka Yanoh <yanoh@users.sourceforge.net>
111
+
112
+ * lib/adlint/c/message.rb : Add W0739 detection.
113
+ * lib/adlint/c/phase.rb : Ditto.
114
+ * share/demo/wrap_around/wrap_around.c : Add sample code.
115
+
116
+ Tue Mar 27 16:20:13 2012 Yutaka Yanoh <yanoh@users.sourceforge.net>
117
+
118
+ * lib/adlint/c/message.rb : Add W0738 detection.
119
+ * lib/adlint/c/phase.rb : Ditto.
120
+ * share/demo/overflow/overflow.c : Add sample code.
121
+
122
+ Tue Mar 27 16:18:14 2012 Yutaka Yanoh <yanoh@users.sourceforge.net>
123
+
124
+ * lib/adlint/c/interp.rb : Move responsibility of implicit conversion
125
+ in evaluation of a variable-definition with initializers to
126
+ InitializerInterpreter in order to detect implicit conversions at
127
+ expressions in initializers.
128
+
129
+ Tue Mar 27 15:02:45 2012 Yutaka Yanoh <yanoh@users.sourceforge.net>
130
+
131
+ * lib/adlint/c/message.rb : Add W0737 detection.
132
+ * lib/adlint/c/phase.rb : Ditto.
133
+ * share/demo/incomplete_type/incomplete_type.c : Add sample code.
134
+
135
+ Tue Mar 27 12:05:03 2012 Yutaka Yanoh <yanoh@users.sourceforge.net>
136
+
137
+ * lib/adlint/c/interp.rb : Add missing conversion logic of
138
+ return-statement evaluation.
139
+ * share/demo/bad_enum/bad_enum.c : Add sample code.
140
+
141
+ Mon Mar 26 17:05:05 2012 Yutaka Yanoh <yanoh@users.sourceforge.net>
142
+
143
+ * release.beta : 1.3.0
144
+ - This is the initial beta release for 1.4.0 GA release.
145
+ - Add W0606 detection.
146
+ - Add W0687 detection.
147
+ - Add W0695 detection.
148
+ - Add W0698 detection.
149
+ - Add W0699 detection.
150
+ - Add W0720 detection.
151
+ - Add W0721 detection.
152
+ - Add W0722 detection.
153
+ - Add W0723 detection.
154
+ - Add W0726 detection.
155
+ - Add W0727 detection.
156
+ - Add W0728 detection.
157
+ - Add W0729 detection.
158
+ - Add W0730 detection.
159
+ - Add W0731 detection.
160
+ - Add W0801 detection.
161
+ - Add W0806 detection.
162
+ - Add W1033 detection.
163
+ - Add W1064 detection.
164
+ - Add W1065 detection.
165
+ - Update the user's guide in Japanese.
166
+ - Update the user's guide in English.
167
+
168
+ Mon Mar 26 16:50:45 2012 Rie Shima <rkakuuchi@users.sourceforge.net>
169
+
170
+ * share/doc/users_guide_ja.texi : Update descriptions about added
171
+ warning messages.
172
+ * share/doc/users_guide_en.texi : Ditto.
173
+
174
+ Mon Mar 26 16:13:26 2012 Yutaka Yanoh <yanoh@users.sourceforge.net>
175
+
176
+ * lib/adlint/c/message.rb : Add W0731, W1064 and W1065 detections.
177
+ * lib/adlint/c/phase.rb : Ditto.
178
+ * share/demo/bad_enum/bad_enum.c : Add sample code.
179
+ * lib/adlint/c/interp.rb : Add notifications about switch-statement.
180
+ * lib/adlint/c/mediator.rb : Ditto.
181
+
182
+ Mon Mar 26 12:23:10 2012 Yutaka Yanoh <yanoh@users.sourceforge.net>
183
+
184
+ * lib/adlint/c/message.rb : Add W0727, W0728, W0729 and W0730
185
+ detections.
186
+ * lib/adlint/c/phase.rb : Ditto.
187
+ * lib/adlint/c/expr.rb : Ditto.
188
+ * lib/adlint/c/type.rb : Ditto.
189
+ * share/demo/Makefile : Add `bad_enum' demo.
190
+ * share/demo/bad_enum/bad_enum.c : Ditto.
191
+
192
+ Mon Mar 26 12:19:13 2012 Yutaka Yanoh <yanoh@users.sourceforge.net>
193
+
194
+ * lib/adlint/c/resolver.rb : Add type attribute to enumerators.
195
+ * lib/adlint/c/syntax.rb : Ditto.
196
+
197
+ Mon Mar 26 10:14:06 2012 Yutaka Yanoh <yanoh@users.sourceforge.net>
198
+
199
+ * lib/adlint/c/message.rb : Add W0722 and W0723 detections.
200
+ * lib/adlint/c/phase.rb : Ditto.
201
+ * share/demo/wrap_around/wrap_around.c : Add sample code.
202
+
203
+ Fri Mar 23 21:24:08 2012 Yutaka Yanoh <yanoh@users.sourceforge.net>
204
+
205
+ * lib/adlint/c/message.rb : Add W0721 detection.
206
+ * lib/adlint/c/phase.rb : Ditto.
207
+ * share/demo/overflow/overflow.c : Add sample code.
208
+
209
+ Fri Mar 23 20:11:29 2012 Rie Shima <rkakuuchi@users.sourceforge.net>
210
+
211
+ * lib/adlint/cpp/message_shima.rb : Add W0687, W0695 and W0806
212
+ detections.
213
+ * lib/adlint/cpp/phase.rb : Ditto.
214
+ * share/demo/bad_macro/bad_macro.c : Add sample code.
215
+
216
+ Fri Mar 23 20:08:37 2012 Yutaka Yanoh <yanoh@users.sourceforge.net>
217
+
218
+ * lib/adlint/cpp/eval.rb : Add #undef notification.
219
+
220
+ Fri Mar 23 19:00:17 2012 Yutaka Yanoh <yanoh@users.sourceforge.net>
221
+
222
+ * etc/mesg.d/ja_JP/messages.yml : Refine message text of W0726.
223
+ * etc/mesg.d/en_US/messages.yml : Ditto.
224
+ * share/doc/users_guide_ja.texi : Ditto.
225
+ * share/doc/users_guide_en.texi : Ditto.
226
+
227
+ Fri Mar 23 18:55:29 2012 Yutaka Yanoh <yanoh@users.sourceforge.net>
228
+
229
+ * lib/adlint/c/syntax.rb : Refactor using Enumerable#each_with_object.
230
+
231
+ Fri Mar 23 18:44:30 2012 Rie Shima <rkakuuchi@users.sourceforge.net>
232
+
233
+ * lib/adlint/c/message_shima.rb : Add W0606, W0698, W0699, W0726, W0801
234
+ and W1033 detections.
235
+ * lib/adlint/c/phase.rb : Ditto.
236
+ * lib/adlint/c.rb : Ditto.
237
+ * MANIFEST : Ditto.
238
+ * share/demo/Makefile : Add `bad_return' and `unnamed_member' demos.
239
+ * share/demo/bad_return/bad_return.c : Ditto.
240
+ * share/demo/unnamed_member/unnamed_member.c : Ditto.
241
+ * share/demo/union_type/union_type.c : Add sample code.
242
+ * share/demo/various_fundef/various_fundef.c : Ditto.
243
+
244
+ Fri Mar 23 16:39:13 2012 Yutaka Yanoh <yanoh@users.sourceforge.net>
245
+
246
+ * lib/adlint/c/message.rb : Add W0720 detection.
247
+ * lib/adlint/c/phase.rb : Ditto.
248
+ * share/demo/overflow/overflow.c : Ditto.
249
+
250
+ Fri Mar 23 14:11:20 2012 Yutaka Yanoh <yanoh@users.sourceforge.net>
251
+
252
+ * lib/adlint/c/message.rb : Modify W0457 and W0458 detections to use
253
+ new #implicitly_typed? method to check whether a definition or
254
+ declaration is typed implicitly.
255
+ * lib/adlint/c/syntax.rb : Fix inverted check logic.
256
+
257
+ Fri Mar 23 13:39:12 2012 Yutaka Yanoh <yanoh@users.sourceforge.net>
258
+
259
+ * lib/adlint/c/syntax.rb : Add DeclarationSpecifiersHolder module to
260
+ commonalize accessors of DeclarationSpecifiers.
261
+
262
+ Fri Mar 23 12:07:52 2012 Yutaka Yanoh <yanoh@users.sourceforge.net>
263
+
264
+ * lib/adlint/c/syntax.rb : Add DeclarationSpecifiers#explicitly_typed?
265
+ and DeclarationSpecifiers#implicitly_typed? methods.
266
+
267
+ Fri Mar 23 12:03:14 2012 Yutaka Yanoh <yanoh@users.sourceforge.net>
268
+
269
+ * lib/adlint/c/syntax.rb : Move common responsibilities of
270
+ VariableDefinition, FunctionDefinition and ParameterDefinition to
271
+ Definition class.
272
+
1
273
  Wed Mar 21 18:50:39 2012 Yutaka Yanoh <yanoh@users.sourceforge.net>
2
274
 
3
275
  * release.ga : 1.2.0
data/MANIFEST CHANGED
@@ -45,6 +45,7 @@ lib/adlint/c/interp.rb
45
45
  lib/adlint/c/lexer.rb
46
46
  lib/adlint/c/mediator.rb
47
47
  lib/adlint/c/message.rb
48
+ lib/adlint/c/message_shima.rb
48
49
  lib/adlint/c/metric.rb
49
50
  lib/adlint/c/object.rb
50
51
  lib/adlint/c/parser.y
@@ -109,10 +110,12 @@ share/demo/bad_charset/bad_charset.c
109
110
  share/demo/bad_comment/bad_comment.c
110
111
  share/demo/bad_const/bad_const.c
111
112
  share/demo/bad_conv/bad_conv.c
113
+ share/demo/bad_enum/bad_enum.c
112
114
  share/demo/bad_indent/bad_indent.c
113
115
  share/demo/bad_init/bad_init.c
114
116
  share/demo/bad_line/bad_line.c
115
117
  share/demo/bad_macro/bad_macro.c
118
+ share/demo/bad_return/bad_return.c
116
119
  share/demo/bitwise_expr/bitwise_expr.c
117
120
  share/demo/call_by_value/call_by_value.c
118
121
  share/demo/cross_ref/cross_ref.c
@@ -194,6 +197,7 @@ share/demo/unmatch_decl/unmatch_decl_2.c
194
197
  share/demo/unmatch_decl/unmatch_decl_2.h
195
198
  share/demo/unmatch_decl/unmatch_decl_3.c
196
199
  share/demo/unmatch_paren_macro/unmatch_paren_macro.c
200
+ share/demo/unnamed_member/unnamed_member.c
197
201
  share/demo/unreachable/unreachable.c
198
202
  share/demo/useless_exp_funs/useless_exp_funs_1.c
199
203
  share/demo/useless_exp_funs/useless_exp_funs_1.h
data/NEWS CHANGED
@@ -21,6 +21,45 @@
21
21
 
22
22
  ++
23
23
 
24
+ === \AdLint 1.4.0 is released (2012-03-29)
25
+
26
+ ==== Changes since the 1.2.0 release
27
+
28
+ * Add W0606 detection
29
+ * Add W0687 detection
30
+ * Add W0695 detection
31
+ * Add W0698 detection
32
+ * Add W0699 detection
33
+ * Add W0720 detection
34
+ * Add W0721 detection
35
+ * Add W0722 detection
36
+ * Add W0723 detection
37
+ * Add W0726 detection
38
+ * Add W0727 detection
39
+ * Add W0728 detection
40
+ * Add W0729 detection
41
+ * Add W0730 detection
42
+ * Add W0731 detection
43
+ * Add W0737 detection
44
+ * Add W0738 detection
45
+ * Add W0739 detection
46
+ * Add W0740 detection
47
+ * Add W0741 detection
48
+ * Add W0743 detection
49
+ * Add W0801 detection
50
+ * Add W0806 detection
51
+ * Add W1033 detection
52
+ * Add W1064 detection
53
+ * Add W1065 detection
54
+ * Add missing implicit conversion of return-statement in order to detect W0727
55
+ at an expression of return-statement
56
+ * Update the user's guide in Japanese
57
+ * Update the user's guide in English
58
+
59
+ See the file
60
+ {ChangeLog}[http://adlint.sourceforge.net/pmwiki/upload.d/Main/ChangeLog]
61
+ for more details.
62
+
24
63
  === \AdLint 1.2.0 is released (2012-03-21)
25
64
 
26
65
  ==== Changes since the 1.0.0 release
@@ -40,10 +79,6 @@
40
79
  * Update the user's guide in Japanese
41
80
  * Update the user's guide in English
42
81
 
43
- See the file
44
- {ChangeLog}[http://adlint.sourceforge.net/pmwiki/upload.d/Main/ChangeLog]
45
- for more details.
46
-
47
82
  === \AdLint 1.0.0 is released (2012-02-28)
48
83
 
49
84
  This is the initial GA release of \AdLint.
@@ -36,7 +36,7 @@
36
36
  # X9999: "Your custom message for the fatal error of #9999."
37
37
  # E9999: "Your custom message for the error of #9999."
38
38
 
39
- version: "1.2.0"
39
+ version: "1.4.0"
40
40
 
41
41
  message_definition:
42
42
  X0001: "An unknown exception `%s' is found."
@@ -646,7 +646,7 @@ message_definition:
646
646
  W0722: "A value of signed statement is overflow."
647
647
  W0723: "A value of signed statement might be overflow."
648
648
  W0724: "An unrecognized preprocessing directive is ignored by conditional include directive."
649
- W0726: "A function `%s()' which return value is declared as qualified void type , `return statement;' is found."
649
+ W0726: "A function `%s()' which return value is declared as qualified void type, `return expression;' is found."
650
650
  W0727: "The value not part of the enumeration type is used."
651
651
  W0728: "Other enumeration literal of enumeration type is passed to enumeration literal of formal argument as actual argument."
652
652
  W0729: "An enumeration literal of the other enumeration type is substituted for enumeration type object."
@@ -36,7 +36,7 @@
36
36
  # X9999: "Your custom message for the fatal error of #9999."
37
37
  # E9999: "Your custom message for the error of #9999."
38
38
 
39
- version: "1.2.0"
39
+ version: "1.4.0"
40
40
 
41
41
  message_definition:
42
42
  X0001: "不明な例外条件 `%s' を検出しました。"
@@ -646,7 +646,7 @@ message_definition:
646
646
  W0722: "符号付きの式の値がオーバーフローしています。"
647
647
  W0723: "符号付きの式の値がオーバーフローする可能性があります。"
648
648
  W0724: "条件付きインクルード指令によって、認識できない前処理指令が無視されました。"
649
- W0726: "修飾子付き void 型の戻り値が定義された関数 `%s()' の中で、`return 式 ;' が見つかりました。"
649
+ W0726: "修飾子付き void 型の戻り値が定義された関数 `%s()' の中で、`return 式;' が見つかりました。"
650
650
  W0727: "列挙型にない値を使っています。"
651
651
  W0728: "列挙型の関数仮引数に、別の列挙型の列挙定数が実引数として渡されています。"
652
652
  W0729: "列挙型のオブジェクトに、別の列挙型の列挙定数が代入されています。"
data/lib/adlint/c.rb CHANGED
@@ -43,6 +43,7 @@ require "adlint/c/interp"
43
43
  require "adlint/c/lexer"
44
44
  require "adlint/c/mediator"
45
45
  require "adlint/c/message"
46
+ require "adlint/c/message_shima"
46
47
  require "adlint/c/metric"
47
48
  require "adlint/c/object"
48
49
  require "adlint/c/parser"
data/lib/adlint/c/expr.rb CHANGED
@@ -68,7 +68,7 @@ module C #:nodoc:
68
68
 
69
69
  if enumerator = enumerator_named(node.identifier.value)
70
70
  enumerator.mark_as_referred_by(node.identifier)
71
- return temporary_variable(int_type, ScalarValue.of(enumerator.value))
71
+ return temporary_variable(enumerator.type, ScalarValue.of(enumerator.value))
72
72
  end
73
73
 
74
74
  define_implicit_function(node.identifier.value)
@@ -96,10 +96,9 @@ module C #:nodoc:
96
96
  when array_or_pointer.type.array?
97
97
  array = array_or_pointer
98
98
  when array_or_pointer.type.pointer?
99
- if pointee = pointee_of(array_or_pointer)
100
- if pointee.type.array?
101
- array = pointee
102
- end
99
+ if pointee = pointee_of(array_or_pointer) and pointee.type.array?
100
+ array = pointee
101
+ _notify_variable_value_referred(node, array)
103
102
  end
104
103
  end
105
104
 
@@ -848,14 +847,14 @@ module C #:nodoc:
848
847
  rhs_object, rhs_variable)
849
848
  end
850
849
 
851
- if lhs_variable.type.same_as?(rhs_object.type)
852
- rhs_converted = rhs_object
850
+ if lhs_variable.type.same_as?(rhs_variable.type)
851
+ rhs_converted = rhs_variable
853
852
  else
854
853
  rhs_converted =
855
- do_conversion(rhs_object, lhs_variable.type) ||
854
+ do_conversion(rhs_variable, lhs_variable.type) ||
856
855
  temporary_variable(lhs_variable.type)
857
856
  notify_implicit_conv_performed(node.rhs_operand,
858
- rhs_object, rhs_converted)
857
+ rhs_variable, rhs_converted)
859
858
  end
860
859
 
861
860
  # NOTE: Domain of the arithmetic result value will be restricted by
@@ -867,7 +866,7 @@ module C #:nodoc:
867
866
  _notify_variable_value_referred(node, rhs_variable)
868
867
  _notify_variable_value_updated(node, lhs_variable)
869
868
 
870
- notify_assignment_expr_evaled(node, lhs_variable, rhs_converted)
869
+ notify_assignment_expr_evaled(node, lhs_variable, rhs_variable)
871
870
 
872
871
  lhs_variable
873
872
  end
@@ -1452,32 +1451,27 @@ module C #:nodoc:
1452
1451
  module_function :_notify_object_referred
1453
1452
 
1454
1453
  def _notify_variable_value_referred(node, object)
1455
- if object.kind_of?(InnerVariable)
1456
- # NOTE: When a value of the inner-variable of array or composite object
1457
- # is referred, the outmost variable's value is notified to be
1458
- # referred.
1459
- object = object.owner
1460
- object = object.owner while object.kind_of?(InnerVariable)
1461
- end
1462
-
1463
1454
  if object.variable?
1464
1455
  interpreter.notify_variable_value_referred(node, object)
1465
1456
  end
1457
+
1458
+ # NOTE: When a value of the inner-variable of array or composite object
1459
+ # is referred, notification of the outer variable's value has
1460
+ # already been done in sub expressions.
1466
1461
  end
1467
1462
  module_function :_notify_variable_value_referred
1468
1463
 
1469
1464
  def _notify_variable_value_updated(node, object)
1470
- if object.kind_of?(InnerVariable)
1471
- # NOTE: When a value of the inner-variable of array or composite object
1472
- # is updated, the outmost variable's value is notified to be
1473
- # updated.
1474
- object = object.owner
1475
- object = object.owner while object.kind_of?(InnerVariable)
1476
- end
1477
-
1478
1465
  if object.variable?
1479
1466
  interpreter.notify_variable_value_updated(node, object)
1480
1467
  end
1468
+
1469
+ if object.kind_of?(InnerVariable)
1470
+ # NOTE: When a value of the inner-variable of array or composite object
1471
+ # is updated, the outer variable's value should also be notified
1472
+ # to be updated.
1473
+ _notify_variable_value_updated(node, object.owner)
1474
+ end
1481
1475
  end
1482
1476
  module_function :_notify_variable_value_updated
1483
1477