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

Side by Side Diff: pkg/compiler/lib/src/js_emitter/class_stub_generator.dart

Issue 2319863002: Revert "dart2js: Pass type information to constructor rather than add later." (Closed)
Patch Set: Created 4 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
OLDNEW
1 // Copyright (c) 2014, the Dart project authors. Please see the AUTHORS file 1 // Copyright (c) 2014, 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 ClassStubGenerator { 7 class ClassStubGenerator {
8 final Namer namer; 8 final Namer namer;
9 final Compiler compiler; 9 final Compiler compiler;
10 final JavaScriptBackend backend; 10 final JavaScriptBackend backend;
11 11
12 ClassStubGenerator(this.compiler, this.namer, this.backend); 12 ClassStubGenerator(this.compiler, this.namer, this.backend);
13 13
14 jsAst.Expression generateClassConstructor(ClassElement classElement, 14 jsAst.Expression generateClassConstructor(
15 Iterable<jsAst.Name> fields, bool hasRtiField) { 15 ClassElement classElement, Iterable<jsAst.Name> fields) {
16 // TODO(sra): Implement placeholders in VariableDeclaration position: 16 // TODO(sra): Implement placeholders in VariableDeclaration position:
17 // 17 //
18 // String constructorName = namer.getNameOfClass(classElement); 18 // String constructorName = namer.getNameOfClass(classElement);
19 // return js.statement('function #(#) { #; }', 19 // return js.statement('function #(#) { #; }',
20 // [ constructorName, fields, 20 // [ constructorName, fields,
21 // fields.map( 21 // fields.map(
22 // (name) => js('this.# = #', [name, name]))])); 22 // (name) => js('this.# = #', [name, name]))]));
23 var typeParameters = const <jsAst.Parameter>[]; 23 return js('function(#) { #; this.#();}', [
24 var typeInits = const <jsAst.Expression>[];
25 if (hasRtiField) {
26 String parameterName = r'$ti';
27 typeParameters = parameterName;
28 typeInits = js('this.# = #', [namer.rtiFieldName, parameterName]);
29 }
30 return js('function(#, #) { #; #; this.#();}', [
31 fields, 24 fields,
32 typeParameters,
33 fields.map((name) => js('this.# = #', [name, name])), 25 fields.map((name) => js('this.# = #', [name, name])),
34 typeInits,
35 namer.deferredAction 26 namer.deferredAction
36 ]); 27 ]);
37 } 28 }
38 29
39 jsAst.Expression generateGetter(Element member, jsAst.Name fieldName) { 30 jsAst.Expression generateGetter(Element member, jsAst.Name fieldName) {
40 ClassElement cls = member.enclosingClass; 31 ClassElement cls = member.enclosingClass;
41 String receiver = backend.isInterceptorClass(cls) ? 'receiver' : 'this'; 32 String receiver = backend.isInterceptorClass(cls) ? 'receiver' : 'this';
42 List<String> args = backend.isInterceptedMethod(member) ? ['receiver'] : []; 33 List<String> args = backend.isInterceptedMethod(member) ? ['receiver'] : [];
43 return js('function(#) { return #.# }', [args, receiver, fieldName]); 34 return js('function(#) { return #.# }', [args, receiver, fieldName]);
44 } 35 }
(...skipping 245 matching lines...) Expand 10 before | Expand all | Expand 10 after
290 if (cache === void 0) cache = #tearOff( 281 if (cache === void 0) cache = #tearOff(
291 this, funcs, reflectionInfo, true, [], name).prototype; 282 this, funcs, reflectionInfo, true, [], name).prototype;
292 return cache; 283 return cache;
293 } 284 }
294 : tearOffGetter(funcs, reflectionInfo, name, isIntercepted); 285 : tearOffGetter(funcs, reflectionInfo, name, isIntercepted);
295 }''', 286 }''',
296 {'tearOff': tearOffAccessExpression}); 287 {'tearOff': tearOffAccessExpression});
297 288
298 return <jsAst.Statement>[tearOffGetter, tearOff]; 289 return <jsAst.Statement>[tearOffGetter, tearOff];
299 } 290 }
OLDNEW
« no previous file with comments | « pkg/compiler/lib/src/js_backend/constant_emitter.dart ('k') | pkg/compiler/lib/src/js_emitter/full_emitter/class_emitter.dart » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698