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

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

Issue 891673003: dart2js: Refactoring, documentation, and a few bugfixes in Namer class. (Closed) Base URL: https://dart.googlecode.com/svn/branches/bleeding_edge/dart
Patch Set: Typo and TODO about clash in named parameters 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 99 matching lines...) Expand 10 before | Expand all | Expand 10 after
110 110
111 var body; // List or jsAst.Statement. 111 var body; // List or jsAst.Statement.
112 if (member.hasFixedBackendName) { 112 if (member.hasFixedBackendName) {
113 body = emitter.nativeEmitter.generateParameterStubStatements( 113 body = emitter.nativeEmitter.generateParameterStubStatements(
114 member, isInterceptedMethod, invocationName, 114 member, isInterceptedMethod, invocationName,
115 parametersBuffer, argumentsBuffer, 115 parametersBuffer, argumentsBuffer,
116 indexOfLastOptionalArgumentInParameters); 116 indexOfLastOptionalArgumentInParameters);
117 } else if (member.isInstanceMember) { 117 } else if (member.isInstanceMember) {
118 if (needsSuperGetter(member)) { 118 if (needsSuperGetter(member)) {
119 ClassElement superClass = member.enclosingClass; 119 ClassElement superClass = member.enclosingClass;
120 String methodName = namer.getNameOfInstanceMember(member); 120 String methodName = namer.instanceMethodName(member);
121 // When redirecting, we must ensure that we don't end up in a subclass. 121 // When redirecting, we must ensure that we don't end up in a subclass.
122 // We thus can't just invoke `this.foo$1.call(filledInArguments)`. 122 // We thus can't just invoke `this.foo$1.call(filledInArguments)`.
123 // Instead we need to call the statically resolved target. 123 // Instead we need to call the statically resolved target.
124 // `<class>.prototype.bar$1.call(this, argument0, ...)`. 124 // `<class>.prototype.bar$1.call(this, argument0, ...)`.
125 body = js.statement( 125 body = js.statement(
126 'return #.#.call(this, #);', 126 'return #.#.call(this, #);',
127 [backend.emitter.prototypeAccess(superClass, 127 [backend.emitter.prototypeAccess(superClass,
128 hasBeenInstantiated: true), 128 hasBeenInstantiated: true),
129 methodName, 129 methodName,
130 argumentsBuffer]); 130 argumentsBuffer]);
131 } else { 131 } else {
132 body = js.statement( 132 body = js.statement(
133 'return this.#(#);', 133 'return this.#(#);',
134 [namer.getNameOfInstanceMember(member), argumentsBuffer]); 134 [namer.instanceMethodName(member), argumentsBuffer]);
135 } 135 }
136 } else { 136 } else {
137 body = js.statement('return #(#)', 137 body = js.statement('return #(#)',
138 [emitter.staticFunctionAccess(member), argumentsBuffer]); 138 [emitter.staticFunctionAccess(member), argumentsBuffer]);
139 } 139 }
140 140
141 jsAst.Fun function = js('function(#) { #; }', [parametersBuffer, body]); 141 jsAst.Fun function = js('function(#) { #; }', [parametersBuffer, body]);
142 142
143 addStub(selector, function); 143 addStub(selector, function);
144 } 144 }
(...skipping 115 matching lines...) Expand 10 before | Expand all | Expand 10 after
260 MemberInfo info = analyzeMemberMethod(member); 260 MemberInfo info = analyzeMemberMethod(member);
261 if (info != null) { 261 if (info != null) {
262 addMemberMethodFromInfo(info, builder); 262 addMemberMethodFromInfo(info, builder);
263 } 263 }
264 } 264 }
265 265
266 MemberInfo analyzeMemberMethod(FunctionElement member) { 266 MemberInfo analyzeMemberMethod(FunctionElement member) {
267 if (member.isAbstract) return null; 267 if (member.isAbstract) return null;
268 jsAst.Expression code = backend.generatedCode[member]; 268 jsAst.Expression code = backend.generatedCode[member];
269 if (code == null) return null; 269 if (code == null) return null;
270 String name = namer.getNameOfMember(member); 270 String name = namer.getNameOfMethod(member);
271 271
272 FunctionSignature parameters = member.functionSignature; 272 FunctionSignature parameters = member.functionSignature;
273 bool needsStubs = !parameters.optionalParameters.isEmpty; 273 bool needsStubs = !parameters.optionalParameters.isEmpty;
274 bool canTearOff = false; 274 bool canTearOff = false;
275 bool isClosure = false; 275 bool isClosure = false;
276 bool isNotApplyTarget = !member.isFunction || 276 bool isNotApplyTarget = !member.isFunction ||
277 member.isConstructor || 277 member.isConstructor ||
278 member.isAccessor; 278 member.isAccessor;
279 String tearOffName; 279 String tearOffName;
280 280
281 281
282 final bool canBeReflected = backend.isAccessibleByReflection(member) || 282 final bool canBeReflected = backend.isAccessibleByReflection(member) ||
283 // During incremental compilation, we have to assume that reflection 283 // During incremental compilation, we have to assume that reflection
284 // *might* get enabled. 284 // *might* get enabled.
285 compiler.hasIncrementalSupport; 285 compiler.hasIncrementalSupport;
286 286
287 if (isNotApplyTarget) { 287 if (isNotApplyTarget) {
288 canTearOff = false; 288 canTearOff = false;
289 } else if (member.isInstanceMember) { 289 } else if (member.isInstanceMember) {
290 if (member.enclosingClass.isClosure) { 290 if (member.enclosingClass.isClosure) {
291 canTearOff = false; 291 canTearOff = false;
292 isClosure = true; 292 isClosure = true;
293 } else { 293 } else {
294 // Careful with operators. 294 // Careful with operators.
295 canTearOff = 295 canTearOff =
296 compiler.codegenWorld.hasInvokedGetter(member, compiler.world) || 296 compiler.codegenWorld.hasInvokedGetter(member, compiler.world) ||
297 (canBeReflected && !member.isOperator); 297 (canBeReflected && !member.isOperator);
298 assert(!needsSuperGetter(member) || canTearOff); 298 assert(!needsSuperGetter(member) || canTearOff);
299 tearOffName = namer.getterName(member); 299 tearOffName = namer.getterForElement(member);
300 } 300 }
301 } else { 301 } else {
302 canTearOff = 302 canTearOff =
303 compiler.codegenWorld.staticFunctionsNeedingGetter.contains(member) || 303 compiler.codegenWorld.staticFunctionsNeedingGetter.contains(member) ||
304 canBeReflected; 304 canBeReflected;
305 tearOffName = namer.getStaticClosureName(member); 305 tearOffName = namer.getStaticClosureName(member);
306 } 306 }
307 final bool canBeApplied = compiler.enabledFunctionApply && 307 final bool canBeApplied = compiler.enabledFunctionApply &&
308 compiler.world.getMightBePassedToApply(member); 308 compiler.world.getMightBePassedToApply(member);
309 309
(...skipping 271 matching lines...) Expand 10 before | Expand all | Expand 10 after
581 assert(needsStubs != null); 581 assert(needsStubs != null);
582 assert(canTearOff != null); 582 assert(canTearOff != null);
583 assert(isClosure != null); 583 assert(isClosure != null);
584 assert(tearOffName != null || !canTearOff); 584 assert(tearOffName != null || !canTearOff);
585 assert(canBeReflected != null); 585 assert(canBeReflected != null);
586 assert(canBeApplied != null); 586 assert(canBeApplied != null);
587 assert(hasSuperAlias != null); 587 assert(hasSuperAlias != null);
588 assert(needStructuredInfo != null); 588 assert(needStructuredInfo != null);
589 } 589 }
590 } 590 }
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698