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

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

Issue 569583002: Make dart2js deferred loading work in cps mode. (Closed) Base URL: https://dart.googlecode.com/svn/branches/bleeding_edge/dart
Patch Set: Address comments Created 6 years, 3 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
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 65 matching lines...) Expand 10 before | Expand all | Expand 10 after
76 String constructorName = namer.getNameOfClass(classElement); 76 String constructorName = namer.getNameOfClass(classElement);
77 77
78 // TODO(sra): Implement placeholders in VariableDeclaration position: 78 // TODO(sra): Implement placeholders in VariableDeclaration position:
79 // task.precompiledFunction.add(js.statement('function #(#) { #; }', 79 // task.precompiledFunction.add(js.statement('function #(#) { #; }',
80 // [ constructorName, fields, 80 // [ constructorName, fields,
81 // fields.map( 81 // fields.map(
82 // (name) => js('this.# = #', [name, name]))])); 82 // (name) => js('this.# = #', [name, name]))]));
83 jsAst.Expression constructorAst = js('function(#) { #; }', 83 jsAst.Expression constructorAst = js('function(#) { #; }',
84 [fields, 84 [fields,
85 fields.map((name) => js('this.# = #', [name, name]))]); 85 fields.map((name) => js('this.# = #', [name, name]))]);
86 task.emitPrecompiledConstructor(constructorName, constructorAst); 86 OutputUnit outputUnit =
87 compiler.deferredLoadTask.outputUnitForElement(classElement);
88 task.emitPrecompiledConstructor(
89 outputUnit, constructorName, constructorAst);
87 } 90 }
88 91
89 /// Returns `true` if fields added. 92 /// Returns `true` if fields added.
90 bool emitFields(Element element, 93 bool emitFields(Element element,
91 ClassBuilder builder, 94 ClassBuilder builder,
92 String superName, 95 String superName,
93 { bool classIsNative: false, 96 { bool classIsNative: false,
94 bool emitStatics: false, 97 bool emitStatics: false,
95 bool onlyForRti: false }) { 98 bool onlyForRti: false }) {
96 assert(!emitStatics || !onlyForRti); 99 assert(!emitStatics || !onlyForRti);
(...skipping 418 matching lines...) Expand 10 before | Expand all | Expand 10 after
515 member, setterName, builder, isGetter: false); 518 member, setterName, builder, isGetter: false);
516 } 519 }
517 520
518 void generateGetter(Element member, String fieldName, String accessorName, 521 void generateGetter(Element member, String fieldName, String accessorName,
519 ClassBuilder builder) { 522 ClassBuilder builder) {
520 String getterName = namer.getterNameFromAccessorName(accessorName); 523 String getterName = namer.getterNameFromAccessorName(accessorName);
521 ClassElement cls = member.enclosingClass; 524 ClassElement cls = member.enclosingClass;
522 String className = namer.getNameOfClass(cls); 525 String className = namer.getNameOfClass(cls);
523 String receiver = backend.isInterceptorClass(cls) ? 'receiver' : 'this'; 526 String receiver = backend.isInterceptorClass(cls) ? 'receiver' : 'this';
524 List<String> args = backend.isInterceptedMethod(member) ? ['receiver'] : []; 527 List<String> args = backend.isInterceptedMethod(member) ? ['receiver'] : [];
525 task.precompiledFunction.add( 528 OutputUnit outputUnit =
529 compiler.deferredLoadTask.outputUnitForElement(member);
530 task.cspPrecompiledFunctionFor(outputUnit).add(
526 js('#.prototype.# = function(#) { return #.# }', 531 js('#.prototype.# = function(#) { return #.# }',
527 [className, getterName, args, receiver, fieldName])); 532 [className, getterName, args, receiver, fieldName]));
528 if (backend.isAccessibleByReflection(member)) { 533 if (backend.isAccessibleByReflection(member)) {
529 task.precompiledFunction.add( 534 task.cspPrecompiledFunctionFor(outputUnit).add(
530 js('#.prototype.#.${namer.reflectableField} = 1', 535 js('#.prototype.#.${namer.reflectableField} = 1',
531 [className, getterName])); 536 [className, getterName]));
532 } 537 }
533 } 538 }
534 539
535 void generateSetter(Element member, String fieldName, String accessorName, 540 void generateSetter(Element member, String fieldName, String accessorName,
536 ClassBuilder builder) { 541 ClassBuilder builder) {
537 String setterName = namer.setterNameFromAccessorName(accessorName); 542 String setterName = namer.setterNameFromAccessorName(accessorName);
538 ClassElement cls = member.enclosingClass; 543 ClassElement cls = member.enclosingClass;
539 String className = namer.getNameOfClass(cls); 544 String className = namer.getNameOfClass(cls);
540 String receiver = backend.isInterceptorClass(cls) ? 'receiver' : 'this'; 545 String receiver = backend.isInterceptorClass(cls) ? 'receiver' : 'this';
541 List<String> args = backend.isInterceptedMethod(member) ? ['receiver'] : []; 546 List<String> args = backend.isInterceptedMethod(member) ? ['receiver'] : [];
542 task.precompiledFunction.add( 547 OutputUnit outputUnit =
548 compiler.deferredLoadTask.outputUnitForElement(member);
549 task.cspPrecompiledFunctionFor(outputUnit).add(
543 // TODO: remove 'return'? 550 // TODO: remove 'return'?
544 js('#.prototype.# = function(#, v) { return #.# = v; }', 551 js('#.prototype.# = function(#, v) { return #.# = v; }',
545 [className, setterName, args, receiver, fieldName])); 552 [className, setterName, args, receiver, fieldName]));
546 if (backend.isAccessibleByReflection(member)) { 553 if (backend.isAccessibleByReflection(member)) {
547 task.precompiledFunction.add( 554 task.cspPrecompiledFunctionFor(outputUnit).add(
548 js('#.prototype.#.${namer.reflectableField} = 1', 555 js('#.prototype.#.${namer.reflectableField} = 1',
549 [className, setterName])); 556 [className, setterName]));
550 } 557 }
551 } 558 }
552 559
553 void generateReflectionDataForFieldGetterOrSetter(Element member, 560 void generateReflectionDataForFieldGetterOrSetter(Element member,
554 String name, 561 String name,
555 ClassBuilder builder, 562 ClassBuilder builder,
556 {bool isGetter}) { 563 {bool isGetter}) {
557 Selector selector = isGetter 564 Selector selector = isGetter
(...skipping 42 matching lines...) Expand 10 before | Expand all | Expand 10 after
600 js(r'this.$builtinTypeInfo && this.$builtinTypeInfo[#]', index); 607 js(r'this.$builtinTypeInfo && this.$builtinTypeInfo[#]', index);
601 } 608 }
602 jsAst.Expression convertRtiToRuntimeType = 609 jsAst.Expression convertRtiToRuntimeType =
603 namer.elementAccess(backend.findHelper('convertRtiToRuntimeType')); 610 namer.elementAccess(backend.findHelper('convertRtiToRuntimeType'));
604 compiler.dumpInfoTask.registerElementAst(element, 611 compiler.dumpInfoTask.registerElementAst(element,
605 builder.addProperty(name, 612 builder.addProperty(name,
606 js('function () { return #(#) }', 613 js('function () { return #(#) }',
607 [convertRtiToRuntimeType, computeTypeVariable]))); 614 [convertRtiToRuntimeType, computeTypeVariable])));
608 } 615 }
609 } 616 }
OLDNEW
« no previous file with comments | « samples/samples.status ('k') | sdk/lib/_internal/compiler/implementation/js_emitter/code_emitter_task.dart » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698