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

Side by Side Diff: pkg/front_end/lib/src/fasta/kernel/kernel_library_builder.dart

Issue 2761173004: Implement dynamic and void as types exported by core library. (Closed)
Patch Set: Use TypeBuilder.bind. Created 3 years, 9 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.kernel_library_builder; 5 library fasta.kernel_library_builder;
6 6
7 import 'package:kernel/ast.dart'; 7 import 'package:kernel/ast.dart';
8 8
9 import 'package:kernel/clone.dart' show CloneVisitor; 9 import 'package:kernel/clone.dart' show CloneVisitor;
10 10
11 import '../errors.dart' show internalError; 11 import '../errors.dart' show internalError;
12 12
13 import '../loader.dart' show Loader; 13 import '../loader.dart' show Loader;
14 14
15 import '../modifier.dart' show abstractMask, staticMask; 15 import '../modifier.dart' show abstractMask, staticMask;
16 16
17 import '../source/source_library_builder.dart' 17 import '../source/source_library_builder.dart'
18 show DeclarationBuilder, SourceLibraryBuilder; 18 show DeclarationBuilder, SourceLibraryBuilder;
19 19
20 import '../source/source_class_builder.dart' show SourceClassBuilder; 20 import '../source/source_class_builder.dart' show SourceClassBuilder;
21 21
22 import '../util/relativize.dart' show relativizeUri; 22 import '../util/relativize.dart' show relativizeUri;
23 23
24 import 'kernel_builder.dart' 24 import 'kernel_builder.dart'
25 show 25 show
26 Builder, 26 Builder,
27 BuiltinTypeBuilder,
27 ClassBuilder, 28 ClassBuilder,
28 ConstructorReferenceBuilder, 29 ConstructorReferenceBuilder,
29 DynamicTypeBuilder,
30 FormalParameterBuilder, 30 FormalParameterBuilder,
31 FunctionTypeAliasBuilder, 31 FunctionTypeAliasBuilder,
32 KernelConstructorBuilder, 32 KernelConstructorBuilder,
33 KernelEnumBuilder, 33 KernelEnumBuilder,
34 KernelFieldBuilder, 34 KernelFieldBuilder,
35 KernelFormalParameterBuilder, 35 KernelFormalParameterBuilder,
36 KernelFunctionTypeAliasBuilder, 36 KernelFunctionTypeAliasBuilder,
37 KernelFunctionTypeBuilder, 37 KernelFunctionTypeBuilder,
38 KernelInvalidTypeBuilder, 38 KernelInvalidTypeBuilder,
39 KernelMixinApplicationBuilder, 39 KernelMixinApplicationBuilder,
(...skipping 28 matching lines...) Expand all
68 KernelLibraryBuilder(Uri uri, Uri fileUri, Loader loader) 68 KernelLibraryBuilder(Uri uri, Uri fileUri, Loader loader)
69 : library = new Library(uri, fileUri: relativizeUri(fileUri)), 69 : library = new Library(uri, fileUri: relativizeUri(fileUri)),
70 super(loader, fileUri); 70 super(loader, fileUri);
71 71
72 Library get target => library; 72 Library get target => library;
73 73
74 Uri get uri => library.importUri; 74 Uri get uri => library.importUri;
75 75
76 KernelTypeBuilder addNamedType( 76 KernelTypeBuilder addNamedType(
77 String name, List<KernelTypeBuilder> arguments, int charOffset) { 77 String name, List<KernelTypeBuilder> arguments, int charOffset) {
78 KernelNamedTypeBuilder type = 78 return addType(
79 new KernelNamedTypeBuilder(name, arguments, charOffset, fileUri); 79 new KernelNamedTypeBuilder(name, arguments, charOffset, fileUri));
80 if (identical(name, "dynamic")) {
81 type.builder =
82 new DynamicTypeBuilder(const DynamicType(), this, charOffset);
83 } else {
84 addType(type);
85 }
86 return type;
87 } 80 }
88 81
89 KernelTypeBuilder addMixinApplication(KernelTypeBuilder supertype, 82 KernelTypeBuilder addMixinApplication(KernelTypeBuilder supertype,
90 List<KernelTypeBuilder> mixins, int charOffset) { 83 List<KernelTypeBuilder> mixins, int charOffset) {
91 KernelTypeBuilder type = new KernelMixinApplicationBuilder( 84 KernelTypeBuilder type = new KernelMixinApplicationBuilder(
92 supertype, mixins, this, charOffset, fileUri); 85 supertype, mixins, this, charOffset, fileUri);
93 return addType(type); 86 return addType(type);
94 } 87 }
95 88
96 KernelTypeBuilder addVoidType(int charOffset) { 89 KernelTypeBuilder addVoidType(int charOffset) {
97 return new KernelNamedTypeBuilder("void", null, charOffset, fileUri); 90 return addNamedType("void", null, charOffset);
98 } 91 }
99 92
100 void addClass( 93 void addClass(
101 List<MetadataBuilder> metadata, 94 List<MetadataBuilder> metadata,
102 int modifiers, 95 int modifiers,
103 String className, 96 String className,
104 List<TypeVariableBuilder> typeVariables, 97 List<TypeVariableBuilder> typeVariables,
105 KernelTypeBuilder supertype, 98 KernelTypeBuilder supertype,
106 List<KernelTypeBuilder> interfaces, 99 List<KernelTypeBuilder> interfaces,
107 int charOffset) { 100 int charOffset) {
(...skipping 199 matching lines...) Expand 10 before | Expand all | Expand 10 after
307 library.addMember(builder.build(this)..isStatic = true); 300 library.addMember(builder.build(this)..isStatic = true);
308 } else if (builder is KernelProcedureBuilder) { 301 } else if (builder is KernelProcedureBuilder) {
309 library.addMember(builder.build(this)..isStatic = true); 302 library.addMember(builder.build(this)..isStatic = true);
310 } else if (builder is FunctionTypeAliasBuilder) { 303 } else if (builder is FunctionTypeAliasBuilder) {
311 // Kernel discard typedefs and use their corresponding function types 304 // Kernel discard typedefs and use their corresponding function types
312 // directly. 305 // directly.
313 } else if (builder is KernelEnumBuilder) { 306 } else if (builder is KernelEnumBuilder) {
314 library.addClass(builder.build(this)); 307 library.addClass(builder.build(this));
315 } else if (builder is PrefixBuilder) { 308 } else if (builder is PrefixBuilder) {
316 // Ignored. Kernel doesn't represent prefixes. 309 // Ignored. Kernel doesn't represent prefixes.
310 } else if (builder is BuiltinTypeBuilder) {
311 // Nothing needed.
317 } else { 312 } else {
318 internalError("Unhandled builder: ${builder.runtimeType}"); 313 internalError("Unhandled builder: ${builder.runtimeType}");
319 } 314 }
320 } 315 }
321 316
322 Library build() { 317 Library build() {
323 super.build(); 318 super.build();
324 library.name = name; 319 library.name = name;
325 return library; 320 return library;
326 } 321 }
(...skipping 100 matching lines...) Expand 10 before | Expand all | Expand 10 after
427 } 422 }
428 } 423 }
429 424
430 bool isConstructorName(String name, String className) { 425 bool isConstructorName(String name, String className) {
431 if (name.startsWith(className)) { 426 if (name.startsWith(className)) {
432 if (name.length == className.length) return true; 427 if (name.length == className.length) return true;
433 if (name.startsWith(".", className.length)) return true; 428 if (name.startsWith(".", className.length)) return true;
434 } 429 }
435 return false; 430 return false;
436 } 431 }
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698