Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(282)

Side by Side Diff: pkg/front_end/lib/src/fasta/source/source_library_builder.dart

Issue 2916333002: Setup correct scope for initializers and complain about fields initialized more than once. (Closed)
Patch Set: A parenthesized expression doesn't have a name. Created 3 years, 6 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View unified diff | Download patch
OLDNEW
1 // Copyright (c) 2016, the Dart project authors. Please see the AUTHORS file 1 // Copyright (c) 2016, the Dart project authors. Please see the AUTHORS file
2 // for details. All rights reserved. Use of this source code is governed by a 2 // for details. All rights reserved. Use of this source code is governed by a
3 // BSD-style license that can be found in the LICENSE file. 3 // BSD-style license that can be found in the LICENSE file.
4 4
5 library fasta.source_library_builder; 5 library fasta.source_library_builder;
6 6
7 import 'package:front_end/src/scanner/token.dart' show Token; 7 import 'package:front_end/src/scanner/token.dart' show Token;
8 8
9 import 'package:kernel/ast.dart' show ProcedureKind; 9 import 'package:kernel/ast.dart' show ProcedureKind;
10 10
(...skipping 174 matching lines...) Expand 10 before | Expand all | Expand 10 after
185 List<TypeVariableBuilder> typeVariables, 185 List<TypeVariableBuilder> typeVariables,
186 int modifiers, 186 int modifiers,
187 T mixinApplication, 187 T mixinApplication,
188 List<T> interfaces, 188 List<T> interfaces,
189 int charOffset); 189 int charOffset);
190 190
191 void addField(List<MetadataBuilder> metadata, int modifiers, T type, 191 void addField(List<MetadataBuilder> metadata, int modifiers, T type,
192 String name, int charOffset, Token initializer); 192 String name, int charOffset, Token initializer);
193 193
194 void addFields(List<MetadataBuilder> metadata, int modifiers, T type, 194 void addFields(List<MetadataBuilder> metadata, int modifiers, T type,
195 List<Object> namesOffsetsAndInitializers) { 195 List<Object> fieldsInfo) {
196 for (int i = 0; i < namesOffsetsAndInitializers.length; i += 4) { 196 for (int i = 0; i < fieldsInfo.length; i += 4) {
197 String name = namesOffsetsAndInitializers[i]; 197 String name = fieldsInfo[i];
198 int charOffset = namesOffsetsAndInitializers[i + 1]; 198 int charOffset = fieldsInfo[i + 1];
199 Token initializer; 199 Token initializer = fieldsInfo[i + 2];
200 if (type == null) { 200 if (initializer != null) {
201 initializer = namesOffsetsAndInitializers[i + 2]; 201 Token beforeLast = fieldsInfo[i + 3];
202 Token afterInitializer = namesOffsetsAndInitializers[i + 3]; 202 beforeLast.setNext(new Token.eof(beforeLast.next.offset));
203 // TODO(paulberry): figure out a way to do this without using
204 // Token.previous.
205 afterInitializer?.previous
206 ?.setNext(new Token.eof(afterInitializer.offset));
207 } 203 }
208 addField(metadata, modifiers, type, name, charOffset, initializer); 204 addField(metadata, modifiers, type, name, charOffset, initializer);
209 } 205 }
210 } 206 }
211 207
212 void addProcedure( 208 void addProcedure(
213 List<MetadataBuilder> metadata, 209 List<MetadataBuilder> metadata,
214 int modifiers, 210 int modifiers,
215 T returnType, 211 T returnType,
216 String name, 212 String name,
(...skipping 361 matching lines...) Expand 10 before | Expand all | Expand 10 after
578 /// synthesize type variables on the factory matching the class'. 574 /// synthesize type variables on the factory matching the class'.
579 void addFactoryDeclaration( 575 void addFactoryDeclaration(
580 ProcedureBuilder procedure, DeclarationBuilder<T> factoryDeclaration) { 576 ProcedureBuilder procedure, DeclarationBuilder<T> factoryDeclaration) {
581 factoryDeclarations[procedure] = factoryDeclaration; 577 factoryDeclarations[procedure] = factoryDeclaration;
582 } 578 }
583 579
584 Scope toScope(Scope parent) { 580 Scope toScope(Scope parent) {
585 return new Scope(members, setters, parent, isModifiable: false); 581 return new Scope(members, setters, parent, isModifiable: false);
586 } 582 }
587 } 583 }
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698