| OLD | NEW |
| 1 // Copyright (c) 2012, the Dart project authors. Please see the AUTHORS file | 1 // Copyright (c) 2012, 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 js_backend; | 5 part of js_backend; |
| 6 | 6 |
| 7 class NativeEmitter { | 7 class NativeEmitter { |
| 8 | 8 |
| 9 CodeEmitterTask emitter; | 9 CodeEmitterTask emitter; |
| 10 CodeBuffer nativeBuffer; | 10 CodeBuffer nativeBuffer; |
| (...skipping 72 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 83 const SourceString('hashCodeForNativeObject')); | 83 const SourceString('hashCodeForNativeObject')); |
| 84 return backend.namer.isolateAccess(element); | 84 return backend.namer.isolateAccess(element); |
| 85 } | 85 } |
| 86 | 86 |
| 87 String get defineNativeClassName | 87 String get defineNativeClassName |
| 88 => '${backend.namer.CURRENT_ISOLATE}.\$defineNativeClass'; | 88 => '${backend.namer.CURRENT_ISOLATE}.\$defineNativeClass'; |
| 89 | 89 |
| 90 String get defineNativeClassFunction { | 90 String get defineNativeClassFunction { |
| 91 return """ | 91 return """ |
| 92 function(cls, desc) { | 92 function(cls, desc) { |
| 93 var fields = desc[''] || []; |
| 93 var generateGetterSetter = ${emitter.generateGetterSetterFunction}; | 94 var generateGetterSetter = ${emitter.generateGetterSetterFunction}; |
| 94 var fields = desc['']; | 95 for (var i = 0; i < fields.length; i++) { |
| 95 var fields_array = fields ? fields.split('.') : []; | 96 generateGetterSetter(fields[i], desc); |
| 96 for (var i = 0; i < fields_array.length; i++) { | |
| 97 generateGetterSetter(fields_array[i], desc); | |
| 98 } | 97 } |
| 99 var hasOwnProperty = Object.prototype.hasOwnProperty; | 98 var hasOwnProperty = Object.prototype.hasOwnProperty; |
| 100 for (var method in desc) { | 99 for (var method in desc) { |
| 101 if (method) { """/* method != '' */""" | 100 if (method !== '') { |
| 102 if (hasOwnProperty.call(desc, method)) { | 101 if (hasOwnProperty.call(desc, method)) { |
| 103 $dynamicName(method)[cls] = desc[method]; | 102 $dynamicName(method)[cls] = desc[method]; |
| 104 } | 103 } |
| 105 } | 104 } |
| 106 } | 105 } |
| 107 }"""; | 106 }"""; |
| 108 } | 107 } |
| 109 | 108 |
| 110 void generateNativeLiteral(ClassElement classElement) { | 109 void generateNativeLiteral(ClassElement classElement) { |
| 111 String quotedNative = classElement.nativeTagInfo.slowToString(); | 110 String quotedNative = classElement.nativeTagInfo.slowToString(); |
| (...skipping 42 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 154 generateNativeLiteral(classElement); | 153 generateNativeLiteral(classElement); |
| 155 // The native literal kind needs to be dealt with specially when | 154 // The native literal kind needs to be dealt with specially when |
| 156 // generating code for it. | 155 // generating code for it. |
| 157 return; | 156 return; |
| 158 } | 157 } |
| 159 | 158 |
| 160 CodeBuffer fieldBuffer = new CodeBuffer(); | 159 CodeBuffer fieldBuffer = new CodeBuffer(); |
| 161 CodeBuffer getterSetterBuffer = new CodeBuffer(); | 160 CodeBuffer getterSetterBuffer = new CodeBuffer(); |
| 162 CodeBuffer methodBuffer = new CodeBuffer(); | 161 CodeBuffer methodBuffer = new CodeBuffer(); |
| 163 | 162 |
| 164 emitter.emitClassFields( | 163 emitter.emitClassFields(classElement, fieldBuffer, false); |
| 165 classElement, fieldBuffer, isNative: true, emitEndingComma: false); | |
| 166 emitter.emitClassGettersSetters(classElement, getterSetterBuffer, false); | 164 emitter.emitClassGettersSetters(classElement, getterSetterBuffer, false); |
| 167 emitter.emitInstanceMembers(classElement, methodBuffer, false); | 165 emitter.emitInstanceMembers(classElement, methodBuffer, false); |
| 168 | 166 |
| 169 if (methodBuffer.isEmpty | 167 if (methodBuffer.isEmpty |
| 170 && fieldBuffer.isEmpty | 168 && fieldBuffer.isEmpty |
| 171 && getterSetterBuffer.isEmpty) { | 169 && getterSetterBuffer.isEmpty) { |
| 172 return; | 170 return; |
| 173 } | 171 } |
| 174 | 172 |
| 175 String nativeTag = toNativeTag(classElement); | 173 String nativeTag = toNativeTag(classElement); |
| (...skipping 392 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 568 if (!first) targetBuffer.add(",\n"); | 566 if (!first) targetBuffer.add(",\n"); |
| 569 targetBuffer.add(" $name: $function"); | 567 targetBuffer.add(" $name: $function"); |
| 570 first = false; | 568 first = false; |
| 571 }); | 569 }); |
| 572 targetBuffer.add("\n});\n\n"); | 570 targetBuffer.add("\n});\n\n"); |
| 573 } | 571 } |
| 574 targetBuffer.add(nativeBuffer); | 572 targetBuffer.add(nativeBuffer); |
| 575 targetBuffer.add('\n'); | 573 targetBuffer.add('\n'); |
| 576 } | 574 } |
| 577 } | 575 } |
| OLD | NEW |