Chromium Code Reviews| Index: pkg/compiler/lib/src/kernel/element_builder.dart |
| diff --git a/pkg/compiler/lib/src/kernel/world_builder.dart b/pkg/compiler/lib/src/kernel/element_builder.dart |
| similarity index 90% |
| rename from pkg/compiler/lib/src/kernel/world_builder.dart |
| rename to pkg/compiler/lib/src/kernel/element_builder.dart |
| index f3548837b2fcaf79241650b8b6cad57855fd3f20..b6c58ecf3d41f6f1f2f43160c64cd341577f7af0 100644 |
| --- a/pkg/compiler/lib/src/kernel/world_builder.dart |
| +++ b/pkg/compiler/lib/src/kernel/element_builder.dart |
| @@ -2,7 +2,7 @@ |
| // for details. All rights reserved. Use of this source code is governed by a |
| // BSD-style license that can be found in the LICENSE file. |
| -library dart2js.kernel.world_builder; |
| +library dart2js.kernel.element_builder; |
| import 'package:kernel/ast.dart' as ir; |
| @@ -31,10 +31,9 @@ import 'elements.dart'; |
| part 'native_class_resolver.dart'; |
| part 'no_such_method_resolver.dart'; |
| -/// World builder used for creating elements and types corresponding to Kernel |
| +/// Element builder used for creating elements and types corresponding to Kernel |
| /// IR nodes. |
| -// TODO(johnniwinther): Implement [ResolutionWorldBuilder]. |
| -class KernelWorldBuilder extends KernelElementAdapterMixin { |
| +class KernelElementBuilder extends KernelElementAdapterMixin { |
|
Siggi Cherem (dart-lang)
2017/04/20 22:39:39
as we discuss in the meeting, I think we can drop
Johnni Winther
2017/04/24 15:24:01
Changed to KernelToElementMap
|
| CommonElements _commonElements; |
| native.BehaviorBuilder _nativeBehaviorBuilder; |
| final DiagnosticReporter reporter; |
| @@ -42,15 +41,15 @@ class KernelWorldBuilder extends KernelElementAdapterMixin { |
| DartTypeConverter _typeConverter; |
| /// Library environment. Used for fast lookup. |
| - KEnv _env; |
| + _KEnv _env; |
| /// List of library environments by `KLibrary.libraryIndex`. This is used for |
| /// fast lookup into library classes and members. |
| - List<KLibraryEnv> _libraryEnvs = <KLibraryEnv>[]; |
| + List<_KLibraryEnv> _libraryEnvs = <_KLibraryEnv>[]; |
| /// List of class environments by `KClass.classIndex`. This is used for |
| /// fast lookup into class members. |
| - List<KClassEnv> _classEnvs = <KClassEnv>[]; |
| + List<_KClassEnv> _classEnvs = <_KClassEnv>[]; |
| Map<ir.Library, KLibrary> _libraryMap = <ir.Library, KLibrary>{}; |
| Map<ir.Class, KClass> _classMap = <ir.Class, KClass>{}; |
| @@ -74,8 +73,8 @@ class KernelWorldBuilder extends KernelElementAdapterMixin { |
| Map<ir.TreeNode, KLocalFunction> _localFunctionMap = |
| <ir.TreeNode, KLocalFunction>{}; |
| - KernelWorldBuilder(this.reporter, ir.Program program) |
| - : _env = new KEnv(program) { |
| + KernelElementBuilder(this.reporter, ir.Program program) |
| + : _env = new _KEnv(program) { |
| _elementEnvironment = new KernelElementEnvironment(this); |
| _commonElements = new CommonElements(_elementEnvironment); |
| ConstantEnvironment constants = new KernelConstantEnvironment(this); |
| @@ -106,11 +105,11 @@ class KernelWorldBuilder extends KernelElementAdapterMixin { |
| native.BehaviorBuilder get nativeBehaviorBuilder => _nativeBehaviorBuilder; |
| LibraryEntity lookupLibrary(Uri uri) { |
| - KLibraryEnv libraryEnv = _env.lookupLibrary(uri); |
| + _KLibraryEnv libraryEnv = _env.lookupLibrary(uri); |
| return _getLibrary(libraryEnv.library, libraryEnv); |
| } |
| - KLibrary _getLibrary(ir.Library node, [KLibraryEnv libraryEnv]) { |
| + KLibrary _getLibrary(ir.Library node, [_KLibraryEnv libraryEnv]) { |
| return _libraryMap.putIfAbsent(node, () { |
| Uri canonicalUri = node.importUri; |
| _libraryEnvs.add(libraryEnv ?? _env.lookupLibrary(canonicalUri)); |
| @@ -126,14 +125,14 @@ class KernelWorldBuilder extends KernelElementAdapterMixin { |
| MemberEntity lookupLibraryMember(KLibrary library, String name, |
| {bool setter: false}) { |
| - KLibraryEnv libraryEnv = _libraryEnvs[library.libraryIndex]; |
| + _KLibraryEnv libraryEnv = _libraryEnvs[library.libraryIndex]; |
| ir.Member member = libraryEnv.lookupMember(name, setter: setter); |
| return member != null ? getMember(member) : null; |
| } |
| ClassEntity lookupClass(KLibrary library, String name) { |
| - KLibraryEnv libraryEnv = _libraryEnvs[library.libraryIndex]; |
| - KClassEnv classEnv = libraryEnv.lookupClass(name); |
| + _KLibraryEnv libraryEnv = _libraryEnvs[library.libraryIndex]; |
| + _KClassEnv classEnv = libraryEnv.lookupClass(name); |
| if (classEnv != null) { |
| return _getClass(classEnv.cls, classEnv); |
| } |
| @@ -142,18 +141,18 @@ class KernelWorldBuilder extends KernelElementAdapterMixin { |
| MemberEntity lookupClassMember(KClass cls, String name, |
| {bool setter: false}) { |
| - KClassEnv classEnv = _classEnvs[cls.classIndex]; |
| + _KClassEnv classEnv = _classEnvs[cls.classIndex]; |
| ir.Member member = classEnv.lookupMember(name, setter: setter); |
| return member != null ? getMember(member) : null; |
| } |
| ConstructorEntity lookupConstructor(KClass cls, String name) { |
| - KClassEnv classEnv = _classEnvs[cls.classIndex]; |
| + _KClassEnv classEnv = _classEnvs[cls.classIndex]; |
| ir.Member member = classEnv.lookupConstructor(name); |
| return member != null ? getConstructor(member) : null; |
| } |
| - KClass _getClass(ir.Class node, [KClassEnv classEnv]) { |
| + KClass _getClass(ir.Class node, [_KClassEnv classEnv]) { |
| return _classMap.putIfAbsent(node, () { |
| KLibrary library = _getLibrary(node.enclosingLibrary); |
| if (classEnv == null) { |
| @@ -353,7 +352,7 @@ class KernelWorldBuilder extends KernelElementAdapterMixin { |
| return list; |
| } |
| - void _ensureThisAndRawType(KClass cls, KClassEnv env) { |
| + void _ensureThisAndRawType(KClass cls, _KClassEnv env) { |
| if (env.thisType == null) { |
| ir.Class node = env.cls; |
| // TODO(johnniwinther): Add the type argument to the list literal when we |
| @@ -378,18 +377,18 @@ class KernelWorldBuilder extends KernelElementAdapterMixin { |
| } |
| InterfaceType _getThisType(KClass cls) { |
| - KClassEnv env = _classEnvs[cls.classIndex]; |
| + _KClassEnv env = _classEnvs[cls.classIndex]; |
| _ensureThisAndRawType(cls, env); |
| return env.thisType; |
| } |
| InterfaceType _getRawType(KClass cls) { |
| - KClassEnv env = _classEnvs[cls.classIndex]; |
| + _KClassEnv env = _classEnvs[cls.classIndex]; |
| _ensureThisAndRawType(cls, env); |
| return env.rawType; |
| } |
| - void _ensureSupertypes(KClass cls, KClassEnv env) { |
| + void _ensureSupertypes(KClass cls, _KClassEnv env) { |
| if (env.supertypes == null) { |
| _ensureThisAndRawType(cls, env); |
| @@ -401,7 +400,7 @@ class KernelWorldBuilder extends KernelElementAdapterMixin { |
| if (node == null) return null; |
| InterfaceType type = _typeConverter.visitSupertype(node); |
| KClass superclass = type.element; |
| - KClassEnv env = _classEnvs[superclass.classIndex]; |
| + _KClassEnv env = _classEnvs[superclass.classIndex]; |
| _ensureSupertypes(superclass, env); |
| for (InterfaceType supertype in env.supertypes) { |
| supertypes.add( |
| @@ -419,13 +418,13 @@ class KernelWorldBuilder extends KernelElementAdapterMixin { |
| } |
| InterfaceType _getSuperType(KClass cls) { |
| - KClassEnv env = _classEnvs[cls.classIndex]; |
| + _KClassEnv env = _classEnvs[cls.classIndex]; |
| _ensureSupertypes(cls, env); |
| return env.supertype; |
| } |
| void _forEachSupertype(KClass cls, void f(InterfaceType supertype)) { |
| - KClassEnv env = _classEnvs[cls.classIndex]; |
| + _KClassEnv env = _classEnvs[cls.classIndex]; |
| _ensureSupertypes(cls, env); |
| env.supertypes.forEach(f); |
| } |
| @@ -528,19 +527,19 @@ class KernelWorldBuilder extends KernelElementAdapterMixin { |
| } |
| /// Environment for fast lookup of program libraries. |
| -class KEnv { |
| +class _KEnv { |
| final ir.Program program; |
| - Map<Uri, KLibraryEnv> _libraryMap; |
| + Map<Uri, _KLibraryEnv> _libraryMap; |
| - KEnv(this.program); |
| + _KEnv(this.program); |
| - /// Return the [KLibraryEnv] for the library with the canonical [uri]. |
| - KLibraryEnv lookupLibrary(Uri uri) { |
| + /// Return the [_KLibraryEnv] for the library with the canonical [uri]. |
| + _KLibraryEnv lookupLibrary(Uri uri) { |
| if (_libraryMap == null) { |
| - _libraryMap = <Uri, KLibraryEnv>{}; |
| + _libraryMap = <Uri, _KLibraryEnv>{}; |
| for (ir.Library library in program.libraries) { |
| - _libraryMap[library.importUri] = new KLibraryEnv(library); |
| + _libraryMap[library.importUri] = new _KLibraryEnv(library); |
| } |
| } |
| return _libraryMap[uri]; |
| @@ -548,21 +547,20 @@ class KEnv { |
| } |
| /// Environment for fast lookup of library classes and members. |
| -// TODO(johnniwinther): Add member lookup. |
| -class KLibraryEnv { |
| +class _KLibraryEnv { |
| final ir.Library library; |
| - Map<String, KClassEnv> _classMap; |
| + Map<String, _KClassEnv> _classMap; |
| Map<String, ir.Member> _memberMap; |
| - KLibraryEnv(this.library); |
| + _KLibraryEnv(this.library); |
| - /// Return the [KClassEnv] for the class [name] in [library]. |
| - KClassEnv lookupClass(String name) { |
| + /// Return the [_KClassEnv] for the class [name] in [library]. |
| + _KClassEnv lookupClass(String name) { |
| if (_classMap == null) { |
| - _classMap = <String, KClassEnv>{}; |
| + _classMap = <String, _KClassEnv>{}; |
| for (ir.Class cls in library.classes) { |
| - _classMap[cls.name] = new KClassEnv(cls); |
| + _classMap[cls.name] = new _KClassEnv(cls); |
| } |
| } |
| return _classMap[name]; |
| @@ -582,8 +580,7 @@ class KLibraryEnv { |
| } |
| /// Environment for fast lookup of class members. |
| -// TODO(johnniwinther): Add member lookup. |
| -class KClassEnv { |
| +class _KClassEnv { |
| final ir.Class cls; |
| InterfaceType thisType; |
| @@ -594,7 +591,7 @@ class KClassEnv { |
| Map<String, ir.Member> _constructorMap; |
| Map<String, ir.Member> _memberMap; |
| - KClassEnv(this.cls); |
| + _KClassEnv(this.cls); |
| void _ensureMaps() { |
| if (_memberMap == null) { |
| @@ -628,30 +625,30 @@ class KClassEnv { |
| } |
| class KernelElementEnvironment implements ElementEnvironment { |
| - final KernelWorldBuilder worldBuilder; |
| + final KernelElementBuilder elementBuilder; |
| - KernelElementEnvironment(this.worldBuilder); |
| + KernelElementEnvironment(this.elementBuilder); |
| @override |
| DartType get dynamicType => const DynamicType(); |
| @override |
| - LibraryEntity get mainLibrary => worldBuilder._mainLibrary; |
| + LibraryEntity get mainLibrary => elementBuilder._mainLibrary; |
| @override |
| - FunctionEntity get mainFunction => worldBuilder._mainFunction; |
| + FunctionEntity get mainFunction => elementBuilder._mainFunction; |
| @override |
| - Iterable<LibraryEntity> get libraries => worldBuilder._libraryMap.values; |
| + Iterable<LibraryEntity> get libraries => elementBuilder._libraryMap.values; |
| @override |
| InterfaceType getThisType(ClassEntity cls) { |
| - return worldBuilder._getThisType(cls); |
| + return elementBuilder._getThisType(cls); |
| } |
| @override |
| InterfaceType getRawType(ClassEntity cls) { |
| - return worldBuilder._getRawType(cls); |
| + return elementBuilder._getRawType(cls); |
| } |
| @override |
| @@ -688,7 +685,7 @@ class KernelElementEnvironment implements ElementEnvironment { |
| @override |
| ConstructorEntity lookupConstructor(ClassEntity cls, String name, |
| {bool required: false}) { |
| - ConstructorEntity constructor = worldBuilder.lookupConstructor(cls, name); |
| + ConstructorEntity constructor = elementBuilder.lookupConstructor(cls, name); |
| if (constructor == null && required) { |
| throw new SpannableAssertionFailure( |
| CURRENT_ELEMENT_SPANNABLE, |
| @@ -702,7 +699,7 @@ class KernelElementEnvironment implements ElementEnvironment { |
| MemberEntity lookupClassMember(ClassEntity cls, String name, |
| {bool setter: false, bool required: false}) { |
| MemberEntity member = |
| - worldBuilder.lookupClassMember(cls, name, setter: setter); |
| + elementBuilder.lookupClassMember(cls, name, setter: setter); |
| if (member == null && required) { |
| throw new SpannableAssertionFailure(CURRENT_ELEMENT_SPANNABLE, |
| "The member '$name' was not found in ${cls.name}."); |
| @@ -712,12 +709,12 @@ class KernelElementEnvironment implements ElementEnvironment { |
| @override |
| ClassEntity getSuperClass(ClassEntity cls) { |
| - return worldBuilder._getSuperType(cls)?.element; |
| + return elementBuilder._getSuperType(cls)?.element; |
| } |
| @override |
| void forEachSupertype(ClassEntity cls, void f(InterfaceType supertype)) { |
| - worldBuilder._forEachSupertype(cls, f); |
| + elementBuilder._forEachSupertype(cls, f); |
| } |
| @override |
| @@ -735,7 +732,7 @@ class KernelElementEnvironment implements ElementEnvironment { |
| MemberEntity lookupLibraryMember(LibraryEntity library, String name, |
| {bool setter: false, bool required: false}) { |
| MemberEntity member = |
| - worldBuilder.lookupLibraryMember(library, name, setter: setter); |
| + elementBuilder.lookupLibraryMember(library, name, setter: setter); |
| if (member == null && required) { |
| throw new SpannableAssertionFailure(CURRENT_ELEMENT_SPANNABLE, |
| "The member '${name}' was not found in library '${library.name}'."); |
| @@ -746,7 +743,7 @@ class KernelElementEnvironment implements ElementEnvironment { |
| @override |
| ClassEntity lookupClass(LibraryEntity library, String name, |
| {bool required: false}) { |
| - ClassEntity cls = worldBuilder.lookupClass(library, name); |
| + ClassEntity cls = elementBuilder.lookupClass(library, name); |
| if (cls == null && required) { |
| throw new SpannableAssertionFailure(CURRENT_ELEMENT_SPANNABLE, |
| "The class '$name' was not found in library '${library.name}'."); |
| @@ -756,7 +753,7 @@ class KernelElementEnvironment implements ElementEnvironment { |
| @override |
| LibraryEntity lookupLibrary(Uri uri, {bool required: false}) { |
| - LibraryEntity library = worldBuilder.lookupLibrary(uri); |
| + LibraryEntity library = elementBuilder.lookupLibrary(uri); |
| if (library == null && required) { |
| throw new SpannableAssertionFailure( |
| CURRENT_ELEMENT_SPANNABLE, "The library '$uri' was not found."); |
| @@ -766,7 +763,7 @@ class KernelElementEnvironment implements ElementEnvironment { |
| @override |
| CallStructure getCallStructure(KFunction function) { |
| - ir.Member member = worldBuilder._memberList[function.memberIndex]; |
| + ir.Member member = elementBuilder._memberList[function.memberIndex]; |
| ir.FunctionNode functionNode; |
| if (member is ir.Procedure) { |
| functionNode = member.function; |
| @@ -791,7 +788,7 @@ class KernelElementEnvironment implements ElementEnvironment { |
| /// Visitor that converts kernel dart types into [DartType]. |
| class DartTypeConverter extends ir.DartTypeVisitor<DartType> { |
| - final KernelWorldBuilder elementAdapter; |
| + final KernelElementBuilder elementAdapter; |
| bool topLevel = true; |
| DartTypeConverter(this.elementAdapter); |
| @@ -894,7 +891,7 @@ class KernelBehaviorBuilder extends native.BehaviorBuilder { |
| /// Constant environment mapping [ConstantExpression]s to [ConstantValue]s using |
| /// [_EvaluationEnvironment] for the evaluation. |
| class KernelConstantEnvironment implements ConstantEnvironment { |
| - KernelWorldBuilder _worldBuilder; |
| + KernelElementBuilder _worldBuilder; |
| Map<ConstantExpression, ConstantValue> _valueMap = |
| <ConstantExpression, ConstantValue>{}; |
| @@ -926,7 +923,7 @@ class KernelConstantEnvironment implements ConstantEnvironment { |
| /// Evaluation environment used for computing [ConstantValue]s for |
| /// kernel based [ConstantExpression]s. |
| class _EvaluationEnvironment implements Environment { |
| - final KernelWorldBuilder _worldBuilder; |
| + final KernelElementBuilder _worldBuilder; |
| _EvaluationEnvironment(this._worldBuilder); |
| @@ -966,7 +963,7 @@ class _EvaluationEnvironment implements Environment { |
| // Interface for testing equivalence of Kernel-based entities. |
| class WorldDeconstructionForTesting { |
| - final KernelWorldBuilder builder; |
| + final KernelElementBuilder builder; |
| WorldDeconstructionForTesting(this.builder); |
| @@ -975,7 +972,7 @@ class WorldDeconstructionForTesting { |
| } |
| KLibrary getLibraryForClass(KClass cls) { |
| - KClassEnv env = builder._classEnvs[cls.classIndex]; |
| + _KClassEnv env = builder._classEnvs[cls.classIndex]; |
| return builder.getLibrary(env.cls.enclosingLibrary); |
| } |
| @@ -999,14 +996,14 @@ class WorldDeconstructionForTesting { |
| _getLibrary(field, builder._fieldMap); |
| KClass getSuperclassForClass(KClass cls) { |
| - KClassEnv env = builder._classEnvs[cls.classIndex]; |
| + _KClassEnv env = builder._classEnvs[cls.classIndex]; |
| ir.Supertype supertype = env.cls.supertype; |
| if (supertype == null) return null; |
| return builder.getClass(supertype.classNode); |
| } |
| InterfaceType getMixinTypeForClass(KClass cls) { |
| - KClassEnv env = builder._classEnvs[cls.classIndex]; |
| + _KClassEnv env = builder._classEnvs[cls.classIndex]; |
| ir.Supertype mixedInType = env.cls.mixedInType; |
| if (mixedInType == null) return null; |
| return builder.createInterfaceType( |