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

Side by Side Diff: sdk/lib/_internal/compiler/implementation/js_emitter/class_emitter.dart

Issue 27318003: Avoid generating members for classes only for needed rti. (Closed) Base URL: https://dart.googlecode.com/svn/branches/bleeding_edge/dart
Patch Set: Created 7 years, 2 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 | Annotate | Revision Log
« no previous file with comments | « no previous file | tests/language/regress_14105_test.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 dart2js.js_emitter; 5 part of dart2js.js_emitter;
6 6
7 class ClassEmitter extends CodeEmitterHelper { 7 class ClassEmitter extends CodeEmitterHelper {
8 /** 8 /**
9 * Documentation wanted -- johnniwinther 9 * Documentation wanted -- johnniwinther
10 * 10 *
(...skipping 17 matching lines...) Expand all
28 String runtimeName = 28 String runtimeName =
29 namer.getPrimitiveInterceptorRuntimeName(classElement); 29 namer.getPrimitiveInterceptorRuntimeName(classElement);
30 30
31 if (classElement.isMixinApplication) { 31 if (classElement.isMixinApplication) {
32 String mixinName = namer.getNameOfClass(computeMixinClass(classElement)); 32 String mixinName = namer.getNameOfClass(computeMixinClass(classElement));
33 superName = '$superName+$mixinName'; 33 superName = '$superName+$mixinName';
34 task.needsMixinSupport = true; 34 task.needsMixinSupport = true;
35 } 35 }
36 36
37 ClassBuilder builder = new ClassBuilder(); 37 ClassBuilder builder = new ClassBuilder();
38 emitClassConstructor(classElement, builder, runtimeName); 38 if (!onlyForRti) {
39 emitClassConstructor(classElement, builder, runtimeName);
40 }
39 emitFields(classElement, builder, superName, onlyForRti: onlyForRti); 41 emitFields(classElement, builder, superName, onlyForRti: onlyForRti);
40 emitClassGettersSetters(classElement, builder); 42 if (!onlyForRti) {
41 if (!classElement.isMixinApplication) { 43 emitClassGettersSetters(classElement, builder);
42 emitInstanceMembers(classElement, builder); 44 if (!classElement.isMixinApplication) {
45 emitInstanceMembers(classElement, builder);
46 }
43 } 47 }
44 task.typeTestEmitter.emitIsTests(classElement, builder); 48 task.typeTestEmitter.emitIsTests(classElement, builder);
45 49
46 emitClassBuilderWithReflectionData( 50 emitClassBuilderWithReflectionData(
47 className, classElement, builder, buffer); 51 className, classElement, builder, buffer);
48 } 52 }
49 53
50 void emitClassConstructor(ClassElement classElement, 54 void emitClassConstructor(ClassElement classElement,
51 ClassBuilder builder, 55 ClassBuilder builder,
52 String runtimeName) { 56 String runtimeName) {
(...skipping 166 matching lines...) Expand 10 before | Expand all | Expand 10 after
219 if (hasMetadata) { 223 if (hasMetadata) {
220 fieldMetadata.insert(0, classDataNode); 224 fieldMetadata.insert(0, classDataNode);
221 classDataNode = new jsAst.ArrayInitializer.from(fieldMetadata); 225 classDataNode = new jsAst.ArrayInitializer.from(fieldMetadata);
222 } 226 }
223 builder.addProperty('', classDataNode); 227 builder.addProperty('', classDataNode);
224 return fieldsAdded; 228 return fieldsAdded;
225 } 229 }
226 230
227 void emitClassGettersSetters(ClassElement classElement, 231 void emitClassGettersSetters(ClassElement classElement,
228 ClassBuilder builder) { 232 ClassBuilder builder) {
229
230 visitFields(classElement, false, 233 visitFields(classElement, false,
231 (VariableElement member, 234 (VariableElement member,
232 String name, 235 String name,
233 String accessorName, 236 String accessorName,
234 bool needsGetter, 237 bool needsGetter,
235 bool needsSetter, 238 bool needsSetter,
236 bool needsCheckedSetter) { 239 bool needsCheckedSetter) {
237 compiler.withCurrentElement(member, () { 240 compiler.withCurrentElement(member, () {
238 if (needsCheckedSetter) { 241 if (needsCheckedSetter) {
239 assert(!needsSetter); 242 assert(!needsSetter);
(...skipping 348 matching lines...) Expand 10 before | Expand all | Expand 10 after
588 ? new Selector.getter(member.name, member.getLibrary()) 591 ? new Selector.getter(member.name, member.getLibrary())
589 : new Selector.setter(member.name, member.getLibrary()); 592 : new Selector.setter(member.name, member.getLibrary());
590 String reflectionName = task.getReflectionName(selector, name); 593 String reflectionName = task.getReflectionName(selector, name);
591 if (reflectionName != null) { 594 if (reflectionName != null) {
592 var reflectable = 595 var reflectable =
593 js(backend.isAccessibleByReflection(member) ? '1' : '0'); 596 js(backend.isAccessibleByReflection(member) ? '1' : '0');
594 builder.addProperty('+$reflectionName', reflectable); 597 builder.addProperty('+$reflectionName', reflectable);
595 } 598 }
596 } 599 }
597 } 600 }
OLDNEW
« no previous file with comments | « no previous file | tests/language/regress_14105_test.dart » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698