Chromium Code Reviews| Index: frog/member.dart |
| diff --git a/frog/member.dart b/frog/member.dart |
| index f9f9d3a57f49bfc0a71abb464e4110c24d5c9731..d6b1b7d9a64837683e7cf7d27efc0ca4e58f1fd1 100644 |
| --- a/frog/member.dart |
| +++ b/frog/member.dart |
| @@ -1143,6 +1143,10 @@ class MethodMember extends Member { |
| var x = assign.x; // DotExpression or VarExpression |
| var fname = x.name.name; |
| var val = generator.visitValue(assign.y); |
| + if (!val.isConst) { |
| + world.error('invalid non-const initializer in const constructor', |
| + assign.y.span); |
|
jimhug
2011/12/12 18:14:30
Could this be val.span instead? It doesn't really
Siggi Cherem (dart-lang)
2011/12/12 18:20:55
For some reason in this case they are not the same
|
| + } |
| fields[fname] = val; |
| } |
| } |
| @@ -1152,9 +1156,14 @@ class MethodMember extends Member { |
| // Add default values only if they weren't overriden in the constructor. |
| for (var f in declaringType.members.getValues()) { |
| - if (f is FieldMember && !f.isStatic && f.value != null |
| - && !fields.containsKey(f.name)) { |
| - fields[f.name] = f.computeValue(); |
| + if (f is FieldMember && !f.isStatic && !fields.containsKey(f.name)) { |
| + if (!f.isFinal) { |
| + world.error('const class "${declaringType.name}" has non-final ' |
| + + 'field "${f.name}"', f.span); |
| + } |
| + if (f.value != null) { |
| + fields[f.name] = f.computeValue(); |
| + } |
| } |
| } |