Chromium Code Reviews| OLD | NEW |
|---|---|
| 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:kernel/ast.dart' show ProcedureKind; | 7 import 'package:kernel/ast.dart' show ProcedureKind; |
| 8 | 8 |
| 9 import '../../base/resolve_relative_uri.dart' show resolveRelativeUri; | 9 import '../../base/resolve_relative_uri.dart' show resolveRelativeUri; |
| 10 | 10 |
| (...skipping 50 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
| 61 | 61 |
| 62 final DeclarationBuilder<T> libraryDeclaration; | 62 final DeclarationBuilder<T> libraryDeclaration; |
| 63 | 63 |
| 64 final List<ConstructorReferenceBuilder> constructorReferences = | 64 final List<ConstructorReferenceBuilder> constructorReferences = |
| 65 <ConstructorReferenceBuilder>[]; | 65 <ConstructorReferenceBuilder>[]; |
| 66 | 66 |
| 67 final List<SourceLibraryBuilder<T, R>> parts = <SourceLibraryBuilder<T, R>>[]; | 67 final List<SourceLibraryBuilder<T, R>> parts = <SourceLibraryBuilder<T, R>>[]; |
| 68 | 68 |
| 69 final List<Import> imports = <Import>[]; | 69 final List<Import> imports = <Import>[]; |
| 70 | 70 |
| 71 final List<Export> exports = <Export>[]; | |
| 72 | |
| 71 final Scope importScope; | 73 final Scope importScope; |
| 72 | 74 |
| 73 final Uri fileUri; | 75 final Uri fileUri; |
| 74 | 76 |
| 75 final List<List> implementationBuilders = <List<List>>[]; | 77 final List<List> implementationBuilders = <List<List>>[]; |
| 76 | 78 |
| 77 /// Indicates whether type inference (and type promotion) should be disabled | 79 /// Indicates whether type inference (and type promotion) should be disabled |
| 78 /// for this library. | 80 /// for this library. |
| 79 final bool disableTypeInference; | 81 final bool disableTypeInference; |
| 80 | 82 |
| (...skipping 63 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
| 144 "${name} != ${currentDeclaration.name}"); | 146 "${name} != ${currentDeclaration.name}"); |
| 145 DeclarationBuilder<T> previous = currentDeclaration; | 147 DeclarationBuilder<T> previous = currentDeclaration; |
| 146 currentDeclaration = currentDeclaration.parent; | 148 currentDeclaration = currentDeclaration.parent; |
| 147 return previous; | 149 return previous; |
| 148 } | 150 } |
| 149 | 151 |
| 150 Uri resolve(String path) => uri.resolve(path); | 152 Uri resolve(String path) => uri.resolve(path); |
| 151 | 153 |
| 152 void addExport(List<MetadataBuilder> metadata, String uri, | 154 void addExport(List<MetadataBuilder> metadata, String uri, |
| 153 Unhandled conditionalUris, List<Combinator> combinators, int charOffset) { | 155 Unhandled conditionalUris, List<Combinator> combinators, int charOffset) { |
| 154 loader | 156 var exportedLibrary = loader.read(resolve(uri), charOffset, accessor: this); |
|
ahe
2017/08/08 09:47:58
Missing type.
scheglov
2017/08/08 16:31:16
It's not like it is worse typed now than it was. T
| |
| 155 .read(resolve(uri), charOffset, accessor: this) | 157 exportedLibrary.addExporter(this, combinators, charOffset); |
| 156 .addExporter(this, combinators, charOffset); | 158 exports.add(new Export(this, exportedLibrary, combinators, charOffset)); |
|
ahe
2017/08/08 09:47:58
Question: you need access to the metadata as well,
scheglov
2017/08/08 16:31:16
Yes, we need metadata for everything about what th
| |
| 157 } | 159 } |
| 158 | 160 |
| 159 void addImport( | 161 void addImport( |
| 160 List<MetadataBuilder> metadata, | 162 List<MetadataBuilder> metadata, |
| 161 String uri, | 163 String uri, |
| 162 Unhandled conditionalUris, | 164 Unhandled conditionalUris, |
| 163 String prefix, | 165 String prefix, |
| 164 List<Combinator> combinators, | 166 List<Combinator> combinators, |
| 165 bool deferred, | 167 bool deferred, |
| 166 int charOffset, | 168 int charOffset, |
| (...skipping 163 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
| 330 addCompileTimeError( | 332 addCompileTimeError( |
| 331 templateDeferredPrefixDuplicated.withArguments(name), | 333 templateDeferredPrefixDuplicated.withArguments(name), |
| 332 deferred.charOffset, | 334 deferred.charOffset, |
| 333 fileUri); | 335 fileUri); |
| 334 addCompileTimeError( | 336 addCompileTimeError( |
| 335 templateDeferredPrefixDuplicatedCause.withArguments(name), | 337 templateDeferredPrefixDuplicatedCause.withArguments(name), |
| 336 other.charOffset, | 338 other.charOffset, |
| 337 fileUri); | 339 fileUri); |
| 338 } | 340 } |
| 339 return existing | 341 return existing |
| 340 ..exports.merge(builder.exports, | 342 ..exportScope.merge(builder.exportScope, |
| 341 (String name, Builder existing, Builder member) { | 343 (String name, Builder existing, Builder member) { |
| 342 return buildAmbiguousBuilder(name, existing, member, charOffset); | 344 return buildAmbiguousBuilder(name, existing, member, charOffset); |
| 343 }); | 345 }); |
| 344 } else if (isDuplicatedDefinition(existing, builder)) { | 346 } else if (isDuplicatedDefinition(existing, builder)) { |
| 345 addCompileTimeError(templateDuplicatedDefinition.withArguments(name), | 347 addCompileTimeError(templateDuplicatedDefinition.withArguments(name), |
| 346 charOffset, fileUri); | 348 charOffset, fileUri); |
| 347 } | 349 } |
| 348 return members[name] = builder; | 350 return members[name] = builder; |
| 349 } | 351 } |
| 350 | 352 |
| (...skipping 140 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
| 491 | 493 |
| 492 void addImportsToScope() { | 494 void addImportsToScope() { |
| 493 bool explicitCoreImport = this == loader.coreLibrary; | 495 bool explicitCoreImport = this == loader.coreLibrary; |
| 494 for (Import import in imports) { | 496 for (Import import in imports) { |
| 495 if (import.imported == loader.coreLibrary) { | 497 if (import.imported == loader.coreLibrary) { |
| 496 explicitCoreImport = true; | 498 explicitCoreImport = true; |
| 497 } | 499 } |
| 498 import.finalizeImports(this); | 500 import.finalizeImports(this); |
| 499 } | 501 } |
| 500 if (!explicitCoreImport) { | 502 if (!explicitCoreImport) { |
| 501 loader.coreLibrary.exports.forEach((String name, Builder member) { | 503 loader.coreLibrary.exportScope.forEach((String name, Builder member) { |
| 502 addToScope(name, member, -1, true); | 504 addToScope(name, member, -1, true); |
| 503 }); | 505 }); |
| 504 } | 506 } |
| 505 } | 507 } |
| 506 | 508 |
| 507 @override | 509 @override |
| 508 void addToScope(String name, Builder member, int charOffset, bool isImport) { | 510 void addToScope(String name, Builder member, int charOffset, bool isImport) { |
| 509 Map<String, Builder> map = | 511 Map<String, Builder> map = |
| 510 member.isSetter ? importScope.setters : importScope.local; | 512 member.isSetter ? importScope.setters : importScope.local; |
| 511 Builder existing = map[name]; | 513 Builder existing = map[name]; |
| (...skipping 135 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
| 647 /// synthesize type variables on the factory matching the class'. | 649 /// synthesize type variables on the factory matching the class'. |
| 648 void addFactoryDeclaration( | 650 void addFactoryDeclaration( |
| 649 ProcedureBuilder procedure, DeclarationBuilder<T> factoryDeclaration) { | 651 ProcedureBuilder procedure, DeclarationBuilder<T> factoryDeclaration) { |
| 650 factoryDeclarations[procedure] = factoryDeclaration; | 652 factoryDeclarations[procedure] = factoryDeclaration; |
| 651 } | 653 } |
| 652 | 654 |
| 653 Scope toScope(Scope parent) { | 655 Scope toScope(Scope parent) { |
| 654 return new Scope(members, setters, parent, isModifiable: false); | 656 return new Scope(members, setters, parent, isModifiable: false); |
| 655 } | 657 } |
| 656 } | 658 } |
| OLD | NEW |