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 384 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
395 // } | 395 // } |
396 | 396 |
397 bool hasOptionalParameters = member.optionalParameterCount(compiler) != 0; | 397 bool hasOptionalParameters = member.optionalParameterCount(compiler) != 0; |
398 int parameterCount = member.parameterCount(compiler); | 398 int parameterCount = member.parameterCount(compiler); |
399 | 399 |
400 // Intercepted methods take an extra parameter, which is the | 400 // Intercepted methods take an extra parameter, which is the |
401 // receiver of the call. | 401 // receiver of the call. |
402 bool inInterceptor = backend.isInterceptedMethod(member); | 402 bool inInterceptor = backend.isInterceptedMethod(member); |
403 List<String> fieldNames = <String>[]; | 403 List<String> fieldNames = <String>[]; |
404 compiler.boundClosureClass.forEachInstanceField((_, Element field) { | 404 compiler.boundClosureClass.forEachInstanceField((_, Element field) { |
405 fieldNames.add(namer.getNameOfInstanceMember(field)); | 405 fieldNames.add(namer.instanceFieldPropertyName(field)); |
406 }); | 406 }); |
407 | 407 |
408 ClassElement classElement = member.getEnclosingClass(); | 408 ClassElement classElement = member.getEnclosingClass(); |
409 String name = inInterceptor | 409 String name = inInterceptor |
410 ? 'BoundClosure\$i${parameterCount}' | 410 ? 'BoundClosure\$i${parameterCount}' |
411 : 'BoundClosure\$${parameterCount}'; | 411 : 'BoundClosure\$${parameterCount}'; |
412 | 412 |
413 ClassElement closureClassElement = new ClosureClassElement( | 413 ClassElement closureClassElement = new ClosureClassElement( |
414 null, name, compiler, member, | 414 null, name, compiler, member, |
415 member.getCompilationUnit()); | 415 member.getCompilationUnit()); |
(...skipping 102 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
518 const String receiverArgumentName = r'$receiver'; | 518 const String receiverArgumentName = r'$receiver'; |
519 | 519 |
520 jsAst.Expression buildGetter() { | 520 jsAst.Expression buildGetter() { |
521 if (member.isGetter()) { | 521 if (member.isGetter()) { |
522 String getterName = namer.getterName(member); | 522 String getterName = namer.getterName(member); |
523 return js('this')[getterName]( | 523 return js('this')[getterName]( |
524 isInterceptedMethod | 524 isInterceptedMethod |
525 ? <jsAst.Expression>[js(receiverArgumentName)] | 525 ? <jsAst.Expression>[js(receiverArgumentName)] |
526 : <jsAst.Expression>[]); | 526 : <jsAst.Expression>[]); |
527 } else { | 527 } else { |
528 String fieldName = member.hasFixedBackendName() | 528 String fieldName = namer.instanceFieldPropertyName(member); |
529 ? member.fixedBackendName() | |
530 : namer.instanceFieldName(member); | |
531 return js('this')[fieldName]; | 529 return js('this')[fieldName]; |
532 } | 530 } |
533 } | 531 } |
534 | 532 |
535 // Two selectors may match but differ only in type. To avoid generating | 533 // Two selectors may match but differ only in type. To avoid generating |
536 // identical stubs for each we track untyped selectors which already have | 534 // identical stubs for each we track untyped selectors which already have |
537 // stubs. | 535 // stubs. |
538 Set<Selector> generatedSelectors = new Set<Selector>(); | 536 Set<Selector> generatedSelectors = new Set<Selector>(); |
539 for (Selector selector in selectors) { | 537 for (Selector selector in selectors) { |
540 if (selector.applies(member, compiler)) { | 538 if (selector.applies(member, compiler)) { |
(...skipping 90 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
631 if (!parameters.optionalParameters.isEmpty) { | 629 if (!parameters.optionalParameters.isEmpty) { |
632 addParameterStubs(member, builder.addProperty); | 630 addParameterStubs(member, builder.addProperty); |
633 } | 631 } |
634 } | 632 } |
635 } | 633 } |
636 | 634 |
637 void addMemberField(VariableElement member, ClassBuilder builder) { | 635 void addMemberField(VariableElement member, ClassBuilder builder) { |
638 // For now, do nothing. | 636 // For now, do nothing. |
639 } | 637 } |
640 } | 638 } |
OLD | NEW |