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

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

Issue 886053004: dart2js: Refactor how parameter stubs are handled. (Closed) Base URL: https://dart.googlecode.com/svn/branches/bleeding_edge/dart
Patch Set: Address comments. Created 5 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 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 /// This class should morph into something that makes it easy to build 7 /// This class should morph into something that makes it easy to build
8 /// JavaScript representations of libraries, class-sides, and instance-sides. 8 /// JavaScript representations of libraries, class-sides, and instance-sides.
9 /// Initially, it is just a placeholder for code that is moved from 9 /// Initially, it is just a placeholder for code that is moved from
10 /// [CodeEmitterTask]. 10 /// [CodeEmitterTask].
(...skipping 14 matching lines...) Expand all
25 25
26 final bool needStructuredInfo = 26 final bool needStructuredInfo =
27 canTearOff || canBeReflected || canBeApplied || hasSuperAlias; 27 canTearOff || canBeReflected || canBeApplied || hasSuperAlias;
28 28
29 emitter.interceptorEmitter.recordMangledNameOfMemberMethod(member, name); 29 emitter.interceptorEmitter.recordMangledNameOfMemberMethod(member, name);
30 30
31 if (!needStructuredInfo) { 31 if (!needStructuredInfo) {
32 compiler.dumpInfoTask.registerElementAst(member, 32 compiler.dumpInfoTask.registerElementAst(member,
33 builder.addProperty(name, code)); 33 builder.addProperty(name, code));
34 34
35 for (ParameterStubMethod method in method.parameterStubs) { 35 for (ParameterStubMethod stub in method.parameterStubs) {
36 jsAst.Property property = builder.addProperty(method.name, method.code); 36 assert(stub.callName == null);
37 jsAst.Property property = builder.addProperty(stub.name, stub.code);
37 compiler.dumpInfoTask.registerElementAst(member, property); 38 compiler.dumpInfoTask.registerElementAst(member, property);
38 emitter.interceptorEmitter 39 emitter.interceptorEmitter
39 .recordMangledNameOfMemberMethod(member, method.name); 40 .recordMangledNameOfMemberMethod(member, stub.name);
40 } 41 }
41 return; 42 return;
42 } 43 }
43 emitter.needsStructuredMemberInfo = true; 44 emitter.needsStructuredMemberInfo = true;
44 45
45 // This element is needed for reflection or needs additional stubs or has a 46 // This element is needed for reflection or needs additional stubs or has a
46 // super alias. So we need to retain additional information. 47 // super alias. So we need to retain additional information.
47 48
48 // The information is stored in an array with this format: 49 // The information is stored in an array with this format:
49 // 50 //
(...skipping 35 matching lines...) Expand 10 before | Expand all | Expand 10 after
85 86
86 if (onlyNeedsSuperAlias) { 87 if (onlyNeedsSuperAlias) {
87 jsAst.ArrayInitializer arrayInit = 88 jsAst.ArrayInitializer arrayInit =
88 new jsAst.ArrayInitializer(expressions); 89 new jsAst.ArrayInitializer(expressions);
89 compiler.dumpInfoTask.registerElementAst(member, 90 compiler.dumpInfoTask.registerElementAst(member,
90 builder.addProperty(name, arrayInit)); 91 builder.addProperty(name, arrayInit));
91 return; 92 return;
92 } 93 }
93 94
94 String callSelectorString = 'null'; 95 String callSelectorString = 'null';
95 if (member.isFunction) { 96 if (method.callName != null) {
96 Selector callSelector = new Selector.fromElement(member).toCallSelector(); 97 callSelectorString = '"${method.callName}"';
97 callSelectorString = '"${namer.invocationName(callSelector)}"';
98 } 98 }
99 99
100 // On [requiredParameterCount], the lower bit is set if this method can be 100 // On [requiredParameterCount], the lower bit is set if this method can be
101 // called reflectively. 101 // called reflectively.
102 int requiredParameterCount = parameters.requiredParameterCount << 1; 102 int requiredParameterCount = parameters.requiredParameterCount << 1;
103 if (member.isAccessor) requiredParameterCount++; 103 if (member.isAccessor) requiredParameterCount++;
104 104
105 int optionalParameterCount = parameters.optionalParameterCount << 1; 105 int optionalParameterCount = parameters.optionalParameterCount << 1;
106 if (parameters.optionalParametersAreNamed) optionalParameterCount++; 106 if (parameters.optionalParametersAreNamed) optionalParameterCount++;
107 107
108 // TODO(sra): Don't use LiteralString for non-strings. 108 // TODO(sra): Don't use LiteralString for non-strings.
109 List tearOffInfo = [new jsAst.LiteralString(callSelectorString)]; 109 List tearOffInfo = [new jsAst.LiteralString(callSelectorString)];
110 110
111 if (needsStubs || canTearOff) { 111 for (ParameterStubMethod stub in method.parameterStubs) {
112 String invocationName = stub.name;
113 emitter.interceptorEmitter
114 .recordMangledNameOfMemberMethod(member, invocationName);
112 115
113 for (ParameterStubMethod method in method.parameterStubs) { 116 expressions.add(stub.code);
114 String invocationName = method.name; 117 if (member.isInstanceMember) {
115 emitter.interceptorEmitter 118 expressions.add(js.string(invocationName));
116 .recordMangledNameOfMemberMethod(member, invocationName); 119 } else {
117 expressions.add(method.code); 120 // TOOD(floitsch): Since we know when reading static data versus
118 if (member.isInstanceMember) { 121 // instance data, we can eliminate this element.
119 expressions.add(js.string(invocationName)); 122 expressions.add(js('null'));
120 } else {
121 expressions.add(js('null'));
122 // TOOD(ahe): Since we know when reading static data versus instance
123 // data, we can eliminate this element.
124 }
125
126 Set<Selector> callSelectors = compiler.codegenWorld.invokedNames[
127 namer.closureInvocationSelectorName];
128 Selector callSelector = method.selector.toCallSelector();
129 String callSelectorString = 'null';
130 if (canTearOff && callSelectors != null &&
131 callSelectors.contains(callSelector)) {
132 callSelectorString = '"${namer.invocationName(callSelector)}"';
133 }
134 tearOffInfo.add(new jsAst.LiteralString(callSelectorString));
135 } 123 }
124 String callName = stub.callName;
125 String callSelectorString = (callName == null) ? 'null' : '"$callName"';
126 tearOffInfo.add(new jsAst.LiteralString(callSelectorString));
136 } 127 }
137 128
138 jsAst.Expression memberTypeExpression; 129 jsAst.Expression memberTypeExpression;
139 if (canTearOff || canBeReflected) { 130 if (canTearOff || canBeReflected) {
140 DartType memberType; 131 DartType memberType;
141 if (member.isGenerativeConstructorBody) { 132 if (member.isGenerativeConstructorBody) {
142 var body = member; 133 var body = member;
143 memberType = body.constructor.type; 134 memberType = body.constructor.type;
144 } else { 135 } else {
145 memberType = member.type; 136 memberType = member.type;
(...skipping 60 matching lines...) Expand 10 before | Expand all | Expand 10 after
206 jsAst.ArrayInitializer arrayInit = 197 jsAst.ArrayInitializer arrayInit =
207 new jsAst.ArrayInitializer(expressions.toList()); 198 new jsAst.ArrayInitializer(expressions.toList());
208 compiler.dumpInfoTask.registerElementAst(member, 199 compiler.dumpInfoTask.registerElementAst(member,
209 builder.addProperty(name, arrayInit)); 200 builder.addProperty(name, arrayInit));
210 } 201 }
211 202
212 void addMemberField(Field field, ClassBuilder builder) { 203 void addMemberField(Field field, ClassBuilder builder) {
213 // For now, do nothing. 204 // For now, do nothing.
214 } 205 }
215 } 206 }
OLDNEW
« no previous file with comments | « pkg/compiler/lib/src/js_emitter/model.dart ('k') | pkg/compiler/lib/src/js_emitter/parameter_stub_generator.dart » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698