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

Unified Diff: pkg/dev_compiler/lib/src/compiler/code_generator.dart

Issue 2711253004: When metadata is not requested, elide unneeded signatures (Closed)
Patch Set: Rebase Created 3 years, 10 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
« no previous file with comments | « pkg/dev_compiler/lib/js/legacy/dart_sdk.js ('k') | pkg/dev_compiler/test/codegen_expected/BenchmarkBase.js » ('j') | no next file with comments »
Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
Index: pkg/dev_compiler/lib/src/compiler/code_generator.dart
diff --git a/pkg/dev_compiler/lib/src/compiler/code_generator.dart b/pkg/dev_compiler/lib/src/compiler/code_generator.dart
index ce58c459435ee80d60c3ac3612d8dce61750db8d..24aac39abbdb4c5e7b1c3bd363f5bee5d8bb218b 100644
--- a/pkg/dev_compiler/lib/src/compiler/code_generator.dart
+++ b/pkg/dev_compiler/lib/src/compiler/code_generator.dart
@@ -1824,7 +1824,11 @@ class CodeGenerator extends GeneralizingAstVisitor
if (node.isAbstract) {
continue;
}
-
+ if (node.isStatic &&
+ !options.emitMetadata &&
+ (node.isGetter || node.isSetter)) {
+ continue;
+ }
List<JS.Property> tMember;
Function getOverride;
Function lookup;
@@ -1851,12 +1855,6 @@ class CodeGenerator extends GeneralizingAstVisitor
}
DartType reifiedType = elementToType(element);
- var type = _emitAnnotatedFunctionType(reifiedType, node.metadata,
- parameters: node.parameters?.parameters,
- nameType: options.hoistSignatureTypes,
- hoistType: options.hoistSignatureTypes,
- definite: true);
-
// Don't add redundant signatures for inherited methods whose signature
// did not change. If we are not overriding, or if the thing we are
// overriding has a different reified type from ourselves, we must
@@ -1867,11 +1865,19 @@ class CodeGenerator extends GeneralizingAstVisitor
lookup(name, library: currentLibrary, thisType: false)) !=
reifiedType;
+ var type = _emitAnnotatedFunctionType(reifiedType, node.metadata,
+ parameters: node.parameters?.parameters,
+ nameType: options.hoistSignatureTypes,
+ hoistType: options.hoistSignatureTypes,
+ definite: true);
+
if (needsSignature) {
var memberName = _declareMemberName(element);
var property = new JS.Property(memberName, type);
tMember.add(property);
- // TODO(vsm): Why do we need this?
+ // We record the names of static methods seperately so we can
+ // attach metadata to them individually.
+ // TODO(leafp): Revisit this.
if (node.isStatic && !node.isGetter && !node.isSetter) {
sNames.add(memberName);
}
@@ -1881,28 +1887,32 @@ class CodeGenerator extends GeneralizingAstVisitor
var tInstanceFields = <JS.Property>[];
var tStaticFields = <JS.Property>[];
for (FieldDeclaration node in fields) {
- for (VariableDeclaration field in node.fields.variables) {
- var element = field.element as FieldElement;
- var memberName = _declareMemberName(element.getter);
- var type = _emitAnnotatedType(element.type, node.metadata);
- var property = new JS.Property(memberName, type);
- (node.isStatic ? tStaticFields : tInstanceFields).add(property);
+ if (!node.isStatic || options.emitMetadata) {
+ for (VariableDeclaration field in node.fields.variables) {
+ var element = field.element as FieldElement;
+ var memberName = _declareMemberName(element.getter);
+ var type = _emitAnnotatedType(element.type, node.metadata);
+ var property = new JS.Property(memberName, type);
+ (node.isStatic ? tStaticFields : tInstanceFields).add(property);
+ }
}
}
var tCtors = <JS.Property>[];
- for (ConstructorDeclaration node in ctors) {
- var memberName = _constructorName(node.element);
- var element = resolutionMap.elementDeclaredByConstructorDeclaration(node);
- var type = _emitAnnotatedFunctionType(element.type, node.metadata,
- parameters: node.parameters.parameters,
- nameType: options.hoistSignatureTypes,
- hoistType: options.hoistSignatureTypes,
- definite: true);
- var property = new JS.Property(memberName, type);
- tCtors.add(property);
+ if (options.emitMetadata) {
+ for (ConstructorDeclaration node in ctors) {
+ var memberName = _constructorName(node.element);
+ var element =
+ resolutionMap.elementDeclaredByConstructorDeclaration(node);
+ var type = _emitAnnotatedFunctionType(element.type, node.metadata,
+ parameters: node.parameters.parameters,
+ nameType: options.hoistSignatureTypes,
+ hoistType: options.hoistSignatureTypes,
+ definite: true);
+ var property = new JS.Property(memberName, type);
+ tCtors.add(property);
+ }
}
-
var sigFields = <JS.Property>[];
if (!tCtors.isEmpty) {
sigFields.add(_buildSignatureField('constructors', tCtors));
@@ -1930,7 +1940,8 @@ class CodeGenerator extends GeneralizingAstVisitor
}
if (!tStaticMethods.isEmpty) {
assert(!sNames.isEmpty);
- // TODO(vsm): Why do we need this names field?
+ // Emit names so that we can lazily attach metadata to statics
+ // TODO(leafp): revisit this strategy
var aNames = new JS.Property(
_propertyName('names'), new JS.ArrayInitializer(sNames));
sigFields.add(_buildSignatureField('statics', tStaticMethods));
« no previous file with comments | « pkg/dev_compiler/lib/js/legacy/dart_sdk.js ('k') | pkg/dev_compiler/test/codegen_expected/BenchmarkBase.js » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698