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

Side by Side Diff: pkg/compiler/lib/src/js_backend/type_variable_handler.dart

Issue 2034973003: Handle deferred access of unserialized code. (Closed) Base URL: https://github.com/dart-lang/sdk.git@master
Patch Set: dartfmt Created 4 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
« no previous file with comments | « pkg/compiler/lib/src/deferred_load.dart ('k') | pkg/compiler/lib/src/resolution/members.dart » ('j') | no next file with comments »
Toggle Intra-line Diffs ('i') | Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
OLDNEW
1 // Copyright (c) 2013, the Dart project authors. Please see the AUTHORS file 1 // Copyright (c) 2013, 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 part of js_backend; 5 part of js_backend;
6 6
7 /** 7 /**
8 * Handles construction of TypeVariable constants needed at runtime. 8 * Handles construction of TypeVariable constants needed at runtime.
9 */ 9 */
10 class TypeVariableHandler { 10 class TypeVariableHandler {
11 final Compiler _compiler; 11 final Compiler _compiler;
12 FunctionElement _typeVariableConstructor; 12 ConstructorElement _typeVariableConstructor;
13 13
14 /** 14 /**
15 * Set to 'true' on first encounter of a class with type variables. 15 * Set to 'true' on first encounter of a class with type variables.
16 */ 16 */
17 bool _seenClassesWithTypeVariables = false; 17 bool _seenClassesWithTypeVariables = false;
18 18
19 /** 19 /**
20 * Maps a class element to a list with indices that point to type variables 20 * Maps a class element to a list with indices that point to type variables
21 * constants for each of the class' type variables. 21 * constants for each of the class' type variables.
22 */ 22 */
(...skipping 47 matching lines...) Expand 10 before | Expand all | Expand 10 after
70 void processTypeVariablesOf(ClassElement cls) { 70 void processTypeVariablesOf(ClassElement cls) {
71 // Do not process classes twice. 71 // Do not process classes twice.
72 if (_typeVariables.containsKey(cls)) return; 72 if (_typeVariables.containsKey(cls)) return;
73 73
74 InterfaceType typeVariableType = _typeVariableClass.thisType; 74 InterfaceType typeVariableType = _typeVariableClass.thisType;
75 List<jsAst.Expression> constants = <jsAst.Expression>[]; 75 List<jsAst.Expression> constants = <jsAst.Expression>[];
76 76
77 for (TypeVariableType currentTypeVariable in cls.typeVariables) { 77 for (TypeVariableType currentTypeVariable in cls.typeVariables) {
78 TypeVariableElement typeVariableElement = currentTypeVariable.element; 78 TypeVariableElement typeVariableElement = currentTypeVariable.element;
79 79
80 AstConstant name = new AstConstant(
81 typeVariableElement,
82 typeVariableElement.node,
83 new StringConstantExpression(currentTypeVariable.name),
84 _backend.constantSystem
85 .createString(new DartString.literal(currentTypeVariable.name)));
86 jsAst.Expression boundIndex = 80 jsAst.Expression boundIndex =
87 _metadataCollector.reifyType(typeVariableElement.bound); 81 _metadataCollector.reifyType(typeVariableElement.bound);
88 ConstantValue boundValue = new SyntheticConstantValue( 82 ConstantValue boundValue = new SyntheticConstantValue(
89 SyntheticConstantKind.TYPEVARIABLE_REFERENCE, boundIndex); 83 SyntheticConstantKind.TYPEVARIABLE_REFERENCE, boundIndex);
90 ConstantExpression boundExpression = 84 ConstantExpression boundExpression =
91 new SyntheticConstantExpression(boundValue); 85 new SyntheticConstantExpression(boundValue);
92 AstConstant bound = new AstConstant(typeVariableElement, 86 ConstantExpression constant = new ConstructedConstantExpression(
93 typeVariableElement.node, boundExpression, boundValue); 87 _typeVariableConstructor.enclosingClass.thisType,
94 AstConstant type = new AstConstant( 88 _typeVariableConstructor,
95 typeVariableElement, 89 const CallStructure.unnamed(3), [
96 typeVariableElement.node, 90 new TypeConstantExpression(cls.rawType),
97 new TypeConstantExpression(cls.rawType), 91 new StringConstantExpression(currentTypeVariable.name),
98 _backend.constantSystem.createType(_backend.compiler, cls.rawType)); 92 new SyntheticConstantExpression(boundValue)
99 List<AstConstant> arguments = [type, name, bound]; 93 ]);
100 94
101 // TODO(johnniwinther): Support a less front-end specific creation of 95 _backend.constants.evaluate(constant);
102 // constructed constants. 96 ConstantValue value = _backend.constants.getConstantValue(constant);
103 AstConstant constant =
104 CompileTimeConstantEvaluator.makeConstructedConstant(
105 _compiler,
106 _backend.constants,
107 typeVariableElement,
108 typeVariableElement.node,
109 typeVariableType,
110 _typeVariableConstructor,
111 typeVariableType,
112 _typeVariableConstructor,
113 const CallStructure.unnamed(3),
114 arguments,
115 arguments);
116 ConstantValue value = constant.value;
117 _backend.registerCompileTimeConstant(value, _compiler.globalDependencies); 97 _backend.registerCompileTimeConstant(value, _compiler.globalDependencies);
118 _backend.addCompileTimeConstantForEmission(value); 98 _backend.addCompileTimeConstantForEmission(value);
119 _backend.constants.addCompileTimeConstantForEmission(value); 99 _backend.constants.addCompileTimeConstantForEmission(value);
120 constants 100 constants
121 .add(_reifyTypeVariableConstant(value, currentTypeVariable.element)); 101 .add(_reifyTypeVariableConstant(value, currentTypeVariable.element));
122 } 102 }
123 _typeVariables[cls] = constants; 103 _typeVariables[cls] = constants;
124 } 104 }
125 105
126 /** 106 /**
(...skipping 37 matching lines...) Expand 10 before | Expand all | Expand 10 after
164 } 144 }
165 145
166 List<jsAst.Expression> typeVariablesOf(ClassElement classElement) { 146 List<jsAst.Expression> typeVariablesOf(ClassElement classElement) {
167 List<jsAst.Expression> result = _typeVariables[classElement]; 147 List<jsAst.Expression> result = _typeVariables[classElement];
168 if (result == null) { 148 if (result == null) {
169 result = const <jsAst.Expression>[]; 149 result = const <jsAst.Expression>[];
170 } 150 }
171 return result; 151 return result;
172 } 152 }
173 } 153 }
OLDNEW
« no previous file with comments | « pkg/compiler/lib/src/deferred_load.dart ('k') | pkg/compiler/lib/src/resolution/members.dart » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698