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

Unified Diff: pkg/compiler/lib/src/js_backend/runtime_types.dart

Issue 2809203003: Remove Compiler/JavaScriptBackend from metadata_collector (Closed)
Patch Set: Created 3 years, 8 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 side-by-side diff with in-line comments
Download patch
Index: pkg/compiler/lib/src/js_backend/runtime_types.dart
diff --git a/pkg/compiler/lib/src/js_backend/runtime_types.dart b/pkg/compiler/lib/src/js_backend/runtime_types.dart
index 3101e8d617b8045e74e18b75ac7a311bf68b2a7c..60ce63cb1753fbdebc849d0b7e51ee9bd5d967f3 100644
--- a/pkg/compiler/lib/src/js_backend/runtime_types.dart
+++ b/pkg/compiler/lib/src/js_backend/runtime_types.dart
@@ -112,13 +112,12 @@ abstract class RuntimeTypesEncoder {
bool isSimpleFunctionType(ResolutionFunctionType type);
jsAst.Expression getSignatureEncoding(
- ResolutionDartType type, jsAst.Expression this_);
+ Emitter emitter, ResolutionDartType type, jsAst.Expression this_);
- jsAst.Expression getSubstitutionRepresentation(
+ jsAst.Expression getSubstitutionRepresentation(Emitter emitter,
List<ResolutionDartType> types, OnVariableCallback onVariable);
- jsAst.Expression getSubstitutionCode(Substitution substitution);
- jsAst.Expression getSubstitutionCodeForVariable(
- Substitution substitution, int index);
+ jsAst.Expression getSubstitutionCode(
+ Emitter emitter, Substitution substitution);
/// Returns the JavaScript template to determine at runtime if a type object
/// is a function type.
@@ -132,7 +131,7 @@ abstract class RuntimeTypesEncoder {
/// Returns a [jsAst.Expression] representing the given [type]. Type variables
/// are replaced by the [jsAst.Expression] returned by [onVariable].
jsAst.Expression getTypeRepresentation(
- ResolutionDartType type, OnVariableCallback onVariable,
+ Emitter emitter, ResolutionDartType type, OnVariableCallback onVariable,
[ShouldEncodeTypedefCallback shouldEncodeTypedef]);
String getTypeRepresentationForTypeConstant(ResolutionDartType type);
@@ -693,13 +692,11 @@ class _RuntimeTypes extends _RuntimeTypesBase
class _RuntimeTypesEncoder implements RuntimeTypesEncoder {
final Namer namer;
- final CodeEmitterTask emitter;
- final BackendHelpers helpers;
- final TypeRepresentationGenerator representationGenerator;
+ final BackendHelpers _helpers;
+ final TypeRepresentationGenerator _representationGenerator;
- _RuntimeTypesEncoder(this.namer, this.emitter, this.helpers)
- : representationGenerator =
- new TypeRepresentationGenerator(namer, emitter);
+ _RuntimeTypesEncoder(this.namer, this._helpers)
+ : _representationGenerator = new TypeRepresentationGenerator(namer);
@override
bool isSimpleFunctionType(ResolutionFunctionType type) {
@@ -716,44 +713,45 @@ class _RuntimeTypesEncoder implements RuntimeTypesEncoder {
/// is a function type.
@override
jsAst.Template get templateForIsFunctionType {
- return representationGenerator.templateForIsFunctionType;
+ return _representationGenerator.templateForIsFunctionType;
}
/// Returns the JavaScript template that creates at runtime a new function
/// type object.
@override
jsAst.Template get templateForCreateFunctionType {
- return representationGenerator.templateForCreateFunctionType;
+ return _representationGenerator.templateForCreateFunctionType;
}
@override
jsAst.Expression getTypeRepresentation(
- ResolutionDartType type, OnVariableCallback onVariable,
+ Emitter emitter, ResolutionDartType type, OnVariableCallback onVariable,
[ShouldEncodeTypedefCallback shouldEncodeTypedef]) {
// GENERIC_METHODS: When generic method support is complete enough to
// include a runtime value for method type variables this must be updated.
- return representationGenerator.getTypeRepresentation(
+ return _representationGenerator.getTypeRepresentation(emitter,
type.dynamifyMethodTypeVariableType, onVariable, shouldEncodeTypedef);
}
@override
- jsAst.Expression getSubstitutionRepresentation(
+ jsAst.Expression getSubstitutionRepresentation(Emitter emitter,
List<ResolutionDartType> types, OnVariableCallback onVariable) {
List<jsAst.Expression> elements = types
.map((ResolutionDartType type) =>
- getTypeRepresentation(type, onVariable))
+ getTypeRepresentation(emitter, type, onVariable))
.toList(growable: false);
return new jsAst.ArrayInitializer(elements);
}
- jsAst.Expression getTypeEncoding(ResolutionDartType type,
+ jsAst.Expression getTypeEncoding(Emitter emitter, ResolutionDartType type,
{bool alwaysGenerateFunction: false}) {
ClassElement contextClass = Types.getClassContext(type);
jsAst.Expression onVariable(ResolutionTypeVariableType v) {
return new jsAst.VariableUse(v.name);
}
- jsAst.Expression encoding = getTypeRepresentation(type, onVariable);
+ jsAst.Expression encoding =
+ getTypeRepresentation(emitter, type, onVariable);
if (contextClass == null && !alwaysGenerateFunction) {
return encoding;
} else {
@@ -769,14 +767,14 @@ class _RuntimeTypesEncoder implements RuntimeTypesEncoder {
@override
jsAst.Expression getSignatureEncoding(
- ResolutionDartType type, jsAst.Expression this_) {
+ Emitter emitter, ResolutionDartType type, jsAst.Expression this_) {
ClassElement contextClass = Types.getClassContext(type);
jsAst.Expression encoding =
- getTypeEncoding(type, alwaysGenerateFunction: true);
+ getTypeEncoding(emitter, type, alwaysGenerateFunction: true);
if (contextClass != null) {
jsAst.Name contextName = namer.className(contextClass);
return js('function () { return #(#, #, #); }', [
- emitter.staticFunctionAccess(helpers.computeSignature),
+ emitter.staticFunctionAccess(_helpers.computeSignature),
encoding,
this_,
js.quoteName(contextName)
@@ -801,7 +799,8 @@ class _RuntimeTypesEncoder implements RuntimeTypesEncoder {
* a list expression.
*/
@override
- jsAst.Expression getSubstitutionCode(Substitution substitution) {
+ jsAst.Expression getSubstitutionCode(
+ Emitter emitter, Substitution substitution) {
jsAst.Expression declaration(ResolutionTypeVariableType variable) {
return new jsAst.Parameter(getVariableName(variable.name));
}
@@ -812,10 +811,10 @@ class _RuntimeTypesEncoder implements RuntimeTypesEncoder {
if (substitution.arguments
.every((ResolutionDartType type) => type.isDynamic)) {
- return emitter.emitter.generateFunctionThatReturnsNull();
+ return emitter.generateFunctionThatReturnsNull();
} else {
jsAst.Expression value =
- getSubstitutionRepresentation(substitution.arguments, use);
+ getSubstitutionRepresentation(emitter, substitution.arguments, use);
if (substitution.isFunction) {
Iterable<jsAst.Expression> formals =
substitution.parameters.map(declaration);
@@ -826,28 +825,6 @@ class _RuntimeTypesEncoder implements RuntimeTypesEncoder {
}
}
- @override
- jsAst.Expression getSubstitutionCodeForVariable(
- Substitution substitution, int index) {
- jsAst.Expression declaration(ResolutionTypeVariableType variable) {
- return new jsAst.Parameter(getVariableName(variable.name));
- }
-
- jsAst.Expression use(ResolutionTypeVariableType variable) {
- return new jsAst.VariableUse(getVariableName(variable.name));
- }
-
- if (substitution.arguments[index].isDynamic) {
- return emitter.emitter.generateFunctionThatReturnsNull();
- } else {
- jsAst.Expression value =
- getTypeRepresentation(substitution.arguments[index], use);
- Iterable<jsAst.Expression> formals =
- substitution.parameters.map(declaration);
- return js('function(#) { return # }', [formals, value]);
- }
- }
-
String getVariableName(String name) {
return namer.safeVariableName(name);
}
@@ -876,17 +853,17 @@ class _RuntimeTypesEncoder implements RuntimeTypesEncoder {
class TypeRepresentationGenerator implements DartTypeVisitor {
final Namer namer;
- final CodeEmitterTask emitter;
OnVariableCallback onVariable;
ShouldEncodeTypedefCallback shouldEncodeTypedef;
- TypeRepresentationGenerator(this.namer, this.emitter);
+ TypeRepresentationGenerator(this.namer);
/**
* Creates a type representation for [type]. [onVariable] is called to provide
* the type representation for type variables.
*/
jsAst.Expression getTypeRepresentation(
+ Emitter emitter,
ResolutionDartType type,
OnVariableCallback onVariable,
ShouldEncodeTypedefCallback encodeTypedef) {
@@ -894,40 +871,42 @@ class TypeRepresentationGenerator implements DartTypeVisitor {
this.shouldEncodeTypedef = (encodeTypedef != null)
? encodeTypedef
: (ResolutionTypedefType type) => false;
- jsAst.Expression representation = visit(type);
+ jsAst.Expression representation = visit(type, emitter);
this.onVariable = null;
this.shouldEncodeTypedef = null;
return representation;
}
- jsAst.Expression getJavaScriptClassName(Element element) {
+ jsAst.Expression getJavaScriptClassName(Element element, Emitter emitter) {
return emitter.typeAccess(element);
}
@override
- visit(ResolutionDartType type, [_]) => type.accept(this, null);
+ visit(ResolutionDartType type, Emitter emitter) => type.accept(this, emitter);
- visitTypeVariableType(ResolutionTypeVariableType type, _) {
+ visitTypeVariableType(ResolutionTypeVariableType type, Emitter emitter) {
return onVariable(type);
}
- visitDynamicType(ResolutionDynamicType type, _) {
+ visitDynamicType(ResolutionDynamicType type, Emitter emitter) {
return js('null');
}
- visitInterfaceType(ResolutionInterfaceType type, _) {
- jsAst.Expression name = getJavaScriptClassName(type.element);
- return type.treatAsRaw ? name : visitList(type.typeArguments, head: name);
+ visitInterfaceType(ResolutionInterfaceType type, Emitter emitter) {
+ jsAst.Expression name = getJavaScriptClassName(type.element, emitter);
+ return type.treatAsRaw
+ ? name
+ : visitList(type.typeArguments, emitter, head: name);
}
- jsAst.Expression visitList(List<ResolutionDartType> types,
+ jsAst.Expression visitList(List<ResolutionDartType> types, Emitter emitter,
{jsAst.Expression head}) {
List<jsAst.Expression> elements = <jsAst.Expression>[];
if (head != null) {
elements.add(head);
}
for (ResolutionDartType type in types) {
- jsAst.Expression element = visit(type);
+ jsAst.Expression element = visit(type, emitter);
if (element is jsAst.LiteralNull) {
elements.add(new jsAst.ArrayHole());
} else {
@@ -952,7 +931,7 @@ class TypeRepresentationGenerator implements DartTypeVisitor {
.expressionTemplateFor('{ ${namer.functionTypeTag}: "dynafunc" }');
}
- visitFunctionType(ResolutionFunctionType type, _) {
+ visitFunctionType(ResolutionFunctionType type, Emitter emitter) {
List<jsAst.Property> properties = <jsAst.Property>[];
void addProperty(String name, jsAst.Expression value) {
@@ -965,15 +944,16 @@ class TypeRepresentationGenerator implements DartTypeVisitor {
if (type.returnType.isVoid) {
addProperty(namer.functionTypeVoidReturnTag, js('true'));
} else if (!type.returnType.treatAsDynamic) {
- addProperty(namer.functionTypeReturnTypeTag, visit(type.returnType));
+ addProperty(
+ namer.functionTypeReturnTypeTag, visit(type.returnType, emitter));
}
if (!type.parameterTypes.isEmpty) {
addProperty(namer.functionTypeRequiredParametersTag,
- visitList(type.parameterTypes));
+ visitList(type.parameterTypes, emitter));
}
if (!type.optionalParameterTypes.isEmpty) {
addProperty(namer.functionTypeOptionalParametersTag,
- visitList(type.optionalParameterTypes));
+ visitList(type.optionalParameterTypes, emitter));
}
if (!type.namedParameterTypes.isEmpty) {
List<jsAst.Property> namedArguments = <jsAst.Property>[];
@@ -982,7 +962,8 @@ class TypeRepresentationGenerator implements DartTypeVisitor {
assert(types.length == names.length);
for (int index = 0; index < types.length; index++) {
jsAst.Expression name = js.string(names[index]);
- namedArguments.add(new jsAst.Property(name, visit(types[index])));
+ namedArguments
+ .add(new jsAst.Property(name, visit(types[index], emitter)));
}
addProperty(namer.functionTypeNamedParametersTag,
new jsAst.ObjectInitializer(namedArguments));
@@ -990,32 +971,33 @@ class TypeRepresentationGenerator implements DartTypeVisitor {
return new jsAst.ObjectInitializer(properties);
}
- visitMalformedType(MalformedType type, _) {
+ visitMalformedType(MalformedType type, Emitter emitter) {
Emily Fortuna 2017/04/12 17:57:35 just curious why we added this if we're not using
Johnni Winther 2017/04/18 07:47:00 We're using it in getJavaScriptClassName.
// Treat malformed types as dynamic at runtime.
return js('null');
}
- visitVoidType(ResolutionVoidType type, _) {
+ visitVoidType(ResolutionVoidType type, Emitter emitter) {
// TODO(ahe): Reify void type ("null" means "dynamic").
return js('null');
}
- visitTypedefType(ResolutionTypedefType type, _) {
+ visitTypedefType(ResolutionTypedefType type, Emitter emitter) {
bool shouldEncode = shouldEncodeTypedef(type);
ResolutionDartType unaliasedType = type.unaliased;
if (shouldEncode) {
- jsAst.ObjectInitializer initializer = unaliasedType.accept(this, null);
+ jsAst.ObjectInitializer initializer = visit(unaliasedType, emitter);
// We have to encode the aliased type.
- jsAst.Expression name = getJavaScriptClassName(type.element);
- jsAst.Expression encodedTypedef =
- type.treatAsRaw ? name : visitList(type.typeArguments, head: name);
+ jsAst.Expression name = getJavaScriptClassName(type.element, emitter);
+ jsAst.Expression encodedTypedef = type.treatAsRaw
+ ? name
+ : visitList(type.typeArguments, emitter, head: name);
// Add it to the function-type object.
jsAst.LiteralString tag = js.string(namer.typedefTag);
initializer.properties.add(new jsAst.Property(tag, encodedTypedef));
return initializer;
} else {
- return unaliasedType.accept(this, null);
+ return visit(unaliasedType, emitter);
}
}
}
« no previous file with comments | « pkg/compiler/lib/src/js_backend/constant_emitter.dart ('k') | pkg/compiler/lib/src/js_emitter/class_stub_generator.dart » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698