| 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.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 | 9 import 'package:kernel/clone.dart' show |
| 10 CloneVisitor; | 10 CloneVisitor; |
| (...skipping 19 matching lines...) Expand all Loading... |
| 30 ConstructorReferenceBuilder, | 30 ConstructorReferenceBuilder, |
| 31 DynamicTypeBuilder, | 31 DynamicTypeBuilder, |
| 32 EnumBuilder, | 32 EnumBuilder, |
| 33 FieldBuilder, | 33 FieldBuilder, |
| 34 FormalParameterBuilder, | 34 FormalParameterBuilder, |
| 35 FunctionTypeAliasBuilder, | 35 FunctionTypeAliasBuilder, |
| 36 KernelEnumBuilder, | 36 KernelEnumBuilder, |
| 37 KernelFieldBuilder, | 37 KernelFieldBuilder, |
| 38 KernelFormalParameterBuilder, | 38 KernelFormalParameterBuilder, |
| 39 KernelFunctionTypeAliasBuilder, | 39 KernelFunctionTypeAliasBuilder, |
| 40 KernelInterfaceTypeBuilder, | |
| 41 KernelInvalidTypeBuilder, | 40 KernelInvalidTypeBuilder, |
| 42 KernelMixinApplicationBuilder, | 41 KernelMixinApplicationBuilder, |
| 43 KernelNamedMixinApplicationBuilder, | 42 KernelNamedMixinApplicationBuilder, |
| 43 KernelNamedTypeBuilder, |
| 44 KernelProcedureBuilder, | 44 KernelProcedureBuilder, |
| 45 KernelTypeBuilder, | 45 KernelTypeBuilder, |
| 46 KernelTypeVariableBuilder, | 46 KernelTypeVariableBuilder, |
| 47 MemberBuilder, | 47 MemberBuilder, |
| 48 MetadataBuilder, | 48 MetadataBuilder, |
| 49 MixedAccessor, | 49 MixedAccessor, |
| 50 NamedMixinApplicationBuilder, | 50 NamedMixinApplicationBuilder, |
| 51 PrefixBuilder, | 51 PrefixBuilder, |
| 52 ProcedureBuilder, | 52 ProcedureBuilder, |
| 53 TypeVariableBuilder; | 53 TypeVariableBuilder; |
| 54 | 54 |
| 55 class KernelLibraryBuilder | 55 class KernelLibraryBuilder |
| 56 extends SourceLibraryBuilder<KernelTypeBuilder, Library> { | 56 extends SourceLibraryBuilder<KernelTypeBuilder, Library> { |
| 57 final Library library; | 57 final Library library; |
| 58 | 58 |
| 59 final List<Class> mixinApplicationClasses = <Class>[]; | 59 final List<Class> mixinApplicationClasses = <Class>[]; |
| 60 | 60 |
| 61 final List<List> argumentsWithMissingDefaultValues = <List>[]; | 61 final List<List> argumentsWithMissingDefaultValues = <List>[]; |
| 62 | 62 |
| 63 KernelLibraryBuilder(Uri uri, Uri fileUri, Loader loader) | 63 KernelLibraryBuilder(Uri uri, Uri fileUri, Loader loader) |
| 64 : library = new Library(uri), | 64 : library = new Library(uri), |
| 65 super(loader, fileUri); | 65 super(loader, fileUri); |
| 66 | 66 |
| 67 Uri get uri => library.importUri; | 67 Uri get uri => library.importUri; |
| 68 | 68 |
| 69 KernelTypeBuilder addInterfaceType(String name, | 69 KernelTypeBuilder addNamedType(String name, |
| 70 List<KernelTypeBuilder> arguments) { | 70 List<KernelTypeBuilder> arguments) { |
| 71 KernelInterfaceTypeBuilder type = | 71 KernelNamedTypeBuilder type = |
| 72 new KernelInterfaceTypeBuilder(name, arguments); | 72 new KernelNamedTypeBuilder(name, arguments); |
| 73 if (identical(name, "dynamic")) { | 73 if (identical(name, "dynamic")) { |
| 74 // TODO(ahe): Make const. | 74 // TODO(ahe): Make const. |
| 75 type.builder = new DynamicTypeBuilder(const DynamicType()); | 75 type.builder = new DynamicTypeBuilder(const DynamicType()); |
| 76 } else { | 76 } else { |
| 77 addType(type); | 77 addType(type); |
| 78 } | 78 } |
| 79 return type; | 79 return type; |
| 80 } | 80 } |
| 81 | 81 |
| 82 KernelTypeBuilder addMixinApplication(KernelTypeBuilder supertype, | 82 KernelTypeBuilder addMixinApplication(KernelTypeBuilder supertype, |
| 83 List<KernelTypeBuilder> mixins) { | 83 List<KernelTypeBuilder> mixins) { |
| 84 KernelTypeBuilder type = | 84 KernelTypeBuilder type = |
| 85 new KernelMixinApplicationBuilder(supertype, mixins); | 85 new KernelMixinApplicationBuilder(supertype, mixins); |
| 86 return addType(type); | 86 return addType(type); |
| 87 } | 87 } |
| 88 | 88 |
| 89 KernelTypeBuilder addVoidType() { | 89 KernelTypeBuilder addVoidType() { |
| 90 return new KernelInterfaceTypeBuilder("void", null); | 90 return new KernelNamedTypeBuilder("void", null); |
| 91 } | 91 } |
| 92 | 92 |
| 93 ClassBuilder addClass(List<MetadataBuilder> metadata, | 93 ClassBuilder addClass(List<MetadataBuilder> metadata, |
| 94 int modifiers, String className, | 94 int modifiers, String className, |
| 95 List<TypeVariableBuilder> typeVariables, KernelTypeBuilder supertype, | 95 List<TypeVariableBuilder> typeVariables, KernelTypeBuilder supertype, |
| 96 List<KernelTypeBuilder> interfaces) { | 96 List<KernelTypeBuilder> interfaces) { |
| 97 ClassBuilder cls = new SourceClassBuilder(metadata, modifiers, className, | 97 ClassBuilder cls = new SourceClassBuilder(metadata, modifiers, className, |
| 98 typeVariables, supertype, interfaces, classMembers, declarationTypes, | 98 typeVariables, supertype, interfaces, classMembers, declarationTypes, |
| 99 this, | 99 this, |
| 100 new List<ConstructorReferenceBuilder>.from(constructorReferences)); | 100 new List<ConstructorReferenceBuilder>.from(constructorReferences)); |
| 101 constructorReferences.clear(); | 101 constructorReferences.clear(); |
| 102 classMembers.forEach((String name, MemberBuilder builder) { | 102 classMembers.forEach((String name, MemberBuilder builder) { |
| 103 while (builder != null) { | 103 while (builder != null) { |
| 104 builder.parent = cls; | 104 builder.parent = cls; |
| 105 builder = builder.next; | 105 builder = builder.next; |
| 106 } | 106 } |
| 107 }); | 107 }); |
| 108 // Nested scope began in `OutlineBuilder.beginClassDeclaration`. | 108 // Nested declaration began in `OutlineBuilder.beginClassDeclaration`. |
| 109 endNestedScope(); | 109 endNestedDeclaration(); |
| 110 return addBuilder(className, cls); | 110 return addBuilder(className, cls); |
| 111 } | 111 } |
| 112 | 112 |
| 113 NamedMixinApplicationBuilder addNamedMixinApplication( | 113 NamedMixinApplicationBuilder addNamedMixinApplication( |
| 114 List<MetadataBuilder> metadata, String name, | 114 List<MetadataBuilder> metadata, String name, |
| 115 List<TypeVariableBuilder> typeVariables, int modifiers, | 115 List<TypeVariableBuilder> typeVariables, int modifiers, |
| 116 KernelTypeBuilder mixinApplication, List<KernelTypeBuilder> interfaces) { | 116 KernelTypeBuilder mixinApplication, List<KernelTypeBuilder> interfaces) { |
| 117 NamedMixinApplicationBuilder builder = | 117 NamedMixinApplicationBuilder builder = |
| 118 new KernelNamedMixinApplicationBuilder(metadata, name, typeVariables, | 118 new KernelNamedMixinApplicationBuilder(metadata, name, typeVariables, |
| 119 modifiers, mixinApplication, interfaces, declarationTypes, this); | 119 modifiers, mixinApplication, interfaces, declarationTypes, this); |
| 120 // Nested scope began in `OutlineBuilder.beginNamedMixinApplication`. | 120 // Nested declaration began in `OutlineBuilder.beginNamedMixinApplication`. |
| 121 endNestedScope(); | 121 endNestedDeclaration(); |
| 122 return addBuilder(name, builder); | 122 return addBuilder(name, builder); |
| 123 } | 123 } |
| 124 | 124 |
| 125 FieldBuilder addField(List<MetadataBuilder> metadata, | 125 FieldBuilder addField(List<MetadataBuilder> metadata, |
| 126 int modifiers, KernelTypeBuilder type, String name) { | 126 int modifiers, KernelTypeBuilder type, String name) { |
| 127 return addBuilder(name, | 127 return addBuilder(name, |
| 128 new KernelFieldBuilder(metadata, type, name, modifiers)); | 128 new KernelFieldBuilder(metadata, type, name, modifiers)); |
| 129 } | 129 } |
| 130 | 130 |
| 131 ProcedureBuilder addProcedure(List<MetadataBuilder> metadata, | 131 ProcedureBuilder addProcedure(List<MetadataBuilder> metadata, |
| 132 int modifiers, KernelTypeBuilder returnType, String name, | 132 int modifiers, KernelTypeBuilder returnType, String name, |
| 133 List<TypeVariableBuilder> typeVariables, | 133 List<TypeVariableBuilder> typeVariables, |
| 134 List<FormalParameterBuilder> formals, AsyncMarker asyncModifier, | 134 List<FormalParameterBuilder> formals, AsyncMarker asyncModifier, |
| 135 ProcedureKind kind) { | 135 ProcedureKind kind) { |
| 136 // Nested scope began in `OutlineBuilder.beginMethod` or | 136 // Nested declaration began in `OutlineBuilder.beginMethod` or |
| 137 // `OutlineBuilder.beginTopLevelMethod`. | 137 // `OutlineBuilder.beginTopLevelMethod`. |
| 138 endNestedScope().resolveTypes(typeVariables); | 138 endNestedDeclaration().resolveTypes(typeVariables); |
| 139 return addBuilder(name, | 139 return addBuilder(name, |
| 140 new KernelProcedureBuilder(metadata, modifiers, returnType, name, | 140 new KernelProcedureBuilder(metadata, modifiers, returnType, name, |
| 141 typeVariables, formals, asyncModifier, kind)); | 141 typeVariables, formals, asyncModifier, kind)); |
| 142 } | 142 } |
| 143 | 143 |
| 144 void addFactoryMethod(List<MetadataBuilder> metadata, | 144 void addFactoryMethod(List<MetadataBuilder> metadata, |
| 145 ConstructorReferenceBuilder constructorName, | 145 ConstructorReferenceBuilder constructorName, |
| 146 List<FormalParameterBuilder> formals, AsyncMarker asyncModifier, | 146 List<FormalParameterBuilder> formals, AsyncMarker asyncModifier, |
| 147 ConstructorReferenceBuilder redirectionTarget) { | 147 ConstructorReferenceBuilder redirectionTarget) { |
| 148 String name = constructorName.name; | 148 String name = constructorName.name; |
| 149 assert(constructorName.suffix == null); | 149 assert(constructorName.suffix == null); |
| 150 addBuilder(name, | 150 addBuilder(name, |
| 151 new KernelProcedureBuilder(metadata, staticMask, null, name, null, | 151 new KernelProcedureBuilder(metadata, staticMask, null, name, null, |
| 152 formals, asyncModifier, ProcedureKind.Factory, redirectionTarget)); | 152 formals, asyncModifier, ProcedureKind.Factory, redirectionTarget)); |
| 153 } | 153 } |
| 154 | 154 |
| 155 EnumBuilder addEnum(List<MetadataBuilder> metadata, String name, | 155 EnumBuilder addEnum(List<MetadataBuilder> metadata, String name, |
| 156 List<String> constants) { | 156 List<String> constants) { |
| 157 return addBuilder(name, | 157 return addBuilder(name, |
| 158 new KernelEnumBuilder(metadata, name, constants, this)); | 158 new KernelEnumBuilder(metadata, name, constants, this)); |
| 159 } | 159 } |
| 160 | 160 |
| 161 FunctionTypeAliasBuilder addFunctionTypeAlias(List<MetadataBuilder> metadata, | 161 FunctionTypeAliasBuilder addFunctionTypeAlias(List<MetadataBuilder> metadata, |
| 162 KernelTypeBuilder returnType, String name, | 162 KernelTypeBuilder returnType, String name, |
| 163 List<TypeVariableBuilder> typeVariables, | 163 List<TypeVariableBuilder> typeVariables, |
| 164 List<FormalParameterBuilder> formals) { | 164 List<FormalParameterBuilder> formals) { |
| 165 FunctionTypeAliasBuilder typedef = new KernelFunctionTypeAliasBuilder( | 165 FunctionTypeAliasBuilder typedef = new KernelFunctionTypeAliasBuilder( |
| 166 metadata, returnType, name, typeVariables, formals, declarationTypes, | 166 metadata, returnType, name, typeVariables, formals, declarationTypes, |
| 167 this); | 167 this); |
| 168 // Nested scope began in `OutlineBuilder.beginFunctionTypeAlias`. | 168 // Nested declaration began in `OutlineBuilder.beginFunctionTypeAlias`. |
| 169 endNestedScope(); | 169 endNestedDeclaration(); |
| 170 return addBuilder(name, typedef); | 170 return addBuilder(name, typedef); |
| 171 } | 171 } |
| 172 | 172 |
| 173 KernelFormalParameterBuilder addFormalParameter( | 173 KernelFormalParameterBuilder addFormalParameter( |
| 174 List<MetadataBuilder> metadata, int modifiers, | 174 List<MetadataBuilder> metadata, int modifiers, |
| 175 KernelTypeBuilder type, String name, bool hasThis) { | 175 KernelTypeBuilder type, String name, bool hasThis) { |
| 176 return new KernelFormalParameterBuilder( | 176 return new KernelFormalParameterBuilder( |
| 177 metadata, modifiers, type, name, hasThis); | 177 metadata, modifiers, type, name, hasThis); |
| 178 } | 178 } |
| 179 | 179 |
| (...skipping 95 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 275 } | 275 } |
| 276 expression.value = | 276 expression.value = |
| 277 defaultArgumentFrom(names[expression.name].initializer) | 277 defaultArgumentFrom(names[expression.name].initializer) |
| 278 ..parent = expression; | 278 ..parent = expression; |
| 279 } | 279 } |
| 280 } | 280 } |
| 281 } | 281 } |
| 282 return argumentsWithMissingDefaultValues.length; | 282 return argumentsWithMissingDefaultValues.length; |
| 283 } | 283 } |
| 284 } | 284 } |
| OLD | NEW |