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

Unified Diff: pkg/compiler/lib/src/js_emitter/old_emitter/class_emitter.dart

Issue 841993003: dart2js: Only emit constructors of the native class interceptors that are used. (Closed) Base URL: https://dart.googlecode.com/svn/branches/bleeding_edge/dart
Patch Set: Incorporating changes from Issue 854133003. Adds return in emitClassConstructor plus some renames. Created 5 years, 11 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/compiler/lib/src/js_emitter/native_emitter.dart ('k') | no next file » | no next file with comments »
Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
Index: pkg/compiler/lib/src/js_emitter/old_emitter/class_emitter.dart
diff --git a/pkg/compiler/lib/src/js_emitter/old_emitter/class_emitter.dart b/pkg/compiler/lib/src/js_emitter/old_emitter/class_emitter.dart
index 6a8381564379138dd1b8e1aed7cc4575122b3c6f..3feb1bb764f7ad9c4301db332af203a085fb1d5a 100644
--- a/pkg/compiler/lib/src/js_emitter/old_emitter/class_emitter.dart
+++ b/pkg/compiler/lib/src/js_emitter/old_emitter/class_emitter.dart
@@ -40,9 +40,10 @@ class ClassEmitter extends CodeEmitterHelper {
ClassBuilder builder = new ClassBuilder(classElement, namer);
builder.superName = superName;
- emitClassConstructor(classElement, builder, onlyForRti: onlyForRti);
+ emitPrecompiledConstructor(classElement, onlyForRti: onlyForRti);
emitFields(classElement, builder, onlyForRti: onlyForRti);
- emitClassGettersSetters(classElement, builder, onlyForRti: onlyForRti);
+ emitCheckedClassSetters(classElement, builder, onlyForRti: onlyForRti);
+ emitClassGettersSettersForCSP(classElement, builder, onlyForRti: onlyForRti);
floitsch 2015/01/19 13:40:31 Long line.
zarah 2015/01/20 09:10:53 Done.
emitInstanceMembers(classElement, builder, onlyForRti: onlyForRti);
emitter.typeTestEmitter.emitIsTests(classElement, builder);
if (additionalProperties != null) {
@@ -62,22 +63,26 @@ class ClassEmitter extends CodeEmitterHelper {
emitClassBuilderWithReflectionData(
className, classElement, builder, properties);
}
-
- void emitClassConstructor(ClassElement classElement,
- ClassBuilder builder,
+ /**
+ * Emits the precompiled constructor when in CSP mode.
+ */
+ void emitPrecompiledConstructor(ClassElement classElement,
{bool onlyForRti: false}) {
List<String> fields = <String>[];
- if (!onlyForRti && !classElement.isNative) {
- visitFields(classElement, false,
- (Element member,
- String name,
- String accessorName,
- bool needsGetter,
- bool needsSetter,
- bool needsCheckedSetter) {
- fields.add(name);
- });
- }
+
+ if (!compiler.useContentSecurityPolicy
floitsch 2015/01/19 13:40:32 Are you sure this is correct? I think we still ne
zarah 2015/01/20 09:10:53 Done.
+ || onlyForRti
+ || classElement.isNative) return;
+
+ visitFields(classElement, false,
+ (Element member,
+ String name,
+ String accessorName,
+ bool needsGetter,
+ bool needsSetter,
+ bool needsCheckedSetter) {
+ fields.add(name);
+ });
jsAst.Expression constructorAst =
_stubGenerator.generateClassConstructor(classElement, fields);
@@ -218,7 +223,8 @@ class ClassEmitter extends CodeEmitterHelper {
return fieldsAdded;
}
- void emitClassGettersSetters(ClassElement classElement,
+ /// Emits checked setters for fields.
+ void emitCheckedClassSetters(ClassElement classElement,
ClassBuilder builder,
{bool onlyForRti: false}) {
if (onlyForRti) return;
@@ -235,11 +241,30 @@ class ClassEmitter extends CodeEmitterHelper {
assert(!needsSetter);
generateCheckedSetter(member, name, accessorName, builder);
}
+ });
+ });
+ }
+
+ /// Emits getters/setters for fields if compiling in CSP mode.
+ void emitClassGettersSettersForCSP(ClassElement classElement,
floitsch 2015/01/19 13:40:31 Should be consistent. Either rename emitPrecompile
zarah 2015/01/20 09:10:53 Done.
+ ClassBuilder builder,
+ {bool onlyForRti: false}) {
+
+ if (!compiler.useContentSecurityPolicy || onlyForRti) return;
+
+ visitFields(classElement, false,
+ (VariableElement member,
+ String name,
+ String accessorName,
+ bool needsGetter,
+ bool needsSetter,
+ bool needsCheckedSetter) {
+ compiler.withCurrentElement(member, () {
if (needsGetter) {
- generateGetter(member, name, accessorName, builder);
+ generateGetterForCSP(member, name, accessorName, builder);
}
if (needsSetter) {
- generateSetter(member, name, accessorName, builder);
+ generateSetterForCSP(member, name, accessorName, builder);
}
});
});
@@ -506,7 +531,7 @@ class ClassEmitter extends CodeEmitterHelper {
member, setterName, builder, isGetter: false);
}
- void generateGetter(Element member, String fieldName, String accessorName,
+ void generateGetterForCSP(Element member, String fieldName, String accessorName,
floitsch 2015/01/19 13:40:31 I would rename to "emitGetterForCSP". I use "gene
floitsch 2015/01/19 13:40:31 long line.
zarah 2015/01/20 09:10:53 Done.
zarah 2015/01/20 09:10:53 Done.
ClassBuilder builder) {
jsAst.Expression function =
_stubGenerator.generateGetter(member, fieldName);
@@ -525,7 +550,7 @@ class ClassEmitter extends CodeEmitterHelper {
}
}
- void generateSetter(Element member, String fieldName, String accessorName,
+ void generateSetterForCSP(Element member, String fieldName, String accessorName,
floitsch 2015/01/19 13:40:32 long line.
zarah 2015/01/20 09:10:53 Done.
ClassBuilder builder) {
jsAst.Expression function =
_stubGenerator.generateSetter(member, fieldName);
« no previous file with comments | « pkg/compiler/lib/src/js_emitter/native_emitter.dart ('k') | no next file » | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698