| OLD | NEW |
| 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 335 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 346 void addMemberMethod(FunctionElement member, ClassBuilder builder) { | 346 void addMemberMethod(FunctionElement member, ClassBuilder builder) { |
| 347 if (member.isAbstract) return; | 347 if (member.isAbstract) return; |
| 348 jsAst.Expression code = backend.generatedCode[member]; | 348 jsAst.Expression code = backend.generatedCode[member]; |
| 349 if (code == null) return; | 349 if (code == null) return; |
| 350 String name = namer.getNameOfMember(member); | 350 String name = namer.getNameOfMember(member); |
| 351 task.interceptorEmitter.recordMangledNameOfMemberMethod(member, name); | 351 task.interceptorEmitter.recordMangledNameOfMemberMethod(member, name); |
| 352 FunctionSignature parameters = member.functionSignature; | 352 FunctionSignature parameters = member.functionSignature; |
| 353 bool needsStubs = !parameters.optionalParameters.isEmpty; | 353 bool needsStubs = !parameters.optionalParameters.isEmpty; |
| 354 bool canTearOff = false; | 354 bool canTearOff = false; |
| 355 bool isClosure = false; | 355 bool isClosure = false; |
| 356 bool isNotApplyTarget = | 356 bool isNotApplyTarget = !member.isFunction() || |
| 357 !member.isFunction() || member.isConstructor() || member.isAccessor(); | 357 member.isConstructor() || |
| 358 member.isAccessor(); |
| 358 String tearOffName; | 359 String tearOffName; |
| 359 if (isNotApplyTarget) { | 360 if (isNotApplyTarget) { |
| 360 canTearOff = false; | 361 canTearOff = false; |
| 361 } else if (member.isInstanceMember()) { | 362 } else if (member.isInstanceMember()) { |
| 362 if (member.getEnclosingClass().isClosure()) { | 363 if (member.getEnclosingClass().isClosure()) { |
| 363 canTearOff = false; | 364 canTearOff = false; |
| 364 isClosure = true; | 365 isClosure = true; |
| 365 } else { | 366 } else { |
| 366 // Careful with operators. | 367 // Careful with operators. |
| 367 canTearOff = compiler.codegenWorld.hasInvokedGetter(member, compiler); | 368 canTearOff = compiler.codegenWorld.hasInvokedGetter(member, compiler); |
| 368 assert(!needsSuperGetter(member) || canTearOff); | 369 assert(!needsSuperGetter(member) || canTearOff); |
| 369 tearOffName = namer.getterName(member); | 370 tearOffName = namer.getterName(member); |
| 370 } | 371 } |
| 371 } else { | 372 } else { |
| 372 canTearOff = | 373 canTearOff = |
| 373 compiler.codegenWorld.staticFunctionsNeedingGetter.contains(member); | 374 compiler.codegenWorld.staticFunctionsNeedingGetter.contains(member); |
| 374 tearOffName = namer.getStaticClosureName(member); | 375 tearOffName = namer.getStaticClosureName(member); |
| 375 } | 376 } |
| 376 final bool canBeApplied = !isNotApplyTarget && | 377 final bool canBeApplied = compiler.enabledFunctionApply && |
| 377 compiler.enabledFunctionApply && | 378 compiler.world.getMightBePassedToApply(member); |
| 378 (canTearOff || member.name == 'call' || !member.isInstanceMember()); | 379 |
| 379 final bool canBeReflected = backend.isAccessibleByReflection(member); | 380 final bool canBeReflected = backend.isAccessibleByReflection(member); |
| 380 final bool needStructuredInfo = | 381 final bool needStructuredInfo = |
| 381 canTearOff || canBeReflected || canBeApplied; | 382 canTearOff || canBeReflected || canBeApplied; |
| 382 if (!needStructuredInfo) { | 383 if (!needStructuredInfo) { |
| 383 builder.addProperty(name, code); | 384 builder.addProperty(name, code); |
| 384 if (needsStubs) { | 385 if (needsStubs) { |
| 385 addParameterStubs( | 386 addParameterStubs( |
| 386 member, | 387 member, |
| 387 (Selector selector, jsAst.Fun function) { | 388 (Selector selector, jsAst.Fun function) { |
| 388 builder.addProperty(namer.invocationName(selector), function); | 389 builder.addProperty(namer.invocationName(selector), function); |
| (...skipping 142 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 531 expressions.add(js.string(member.name)); | 532 expressions.add(js.string(member.name)); |
| 532 } | 533 } |
| 533 | 534 |
| 534 builder.addProperty(name, js.toExpression(expressions)); | 535 builder.addProperty(name, js.toExpression(expressions)); |
| 535 } | 536 } |
| 536 | 537 |
| 537 void addMemberField(VariableElement member, ClassBuilder builder) { | 538 void addMemberField(VariableElement member, ClassBuilder builder) { |
| 538 // For now, do nothing. | 539 // For now, do nothing. |
| 539 } | 540 } |
| 540 } | 541 } |
| OLD | NEW |