| 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[''] || []; | |
| 94 var generateGetterSetter = ${emitter.generateGetterSetterFunction}; | 93 var generateGetterSetter = ${emitter.generateGetterSetterFunction}; |
| 95 for (var i = 0; i < fields.length; i++) { | 94 var fields = desc['']; |
| 96 generateGetterSetter(fields[i], desc); | 95 var fields_array = fields ? fields.split(',') : []; |
| 96 for (var i = 0; i < fields_array.length; i++) { |
| 97 generateGetterSetter(fields_array[i], desc); |
| 97 } | 98 } |
| 98 var hasOwnProperty = Object.prototype.hasOwnProperty; | 99 var hasOwnProperty = Object.prototype.hasOwnProperty; |
| 99 for (var method in desc) { | 100 for (var method in desc) { |
| 100 if (method !== '') { | 101 if (method) { """/* Short version of: if (method != '') */""" |
| 101 if (hasOwnProperty.call(desc, method)) { | 102 if (hasOwnProperty.call(desc, method)) { |
| 102 $dynamicName(method)[cls] = desc[method]; | 103 $dynamicName(method)[cls] = desc[method]; |
| 103 } | 104 } |
| 104 } | 105 } |
| 105 } | 106 } |
| 106 }"""; | 107 }"""; |
| 107 } | 108 } |
| 108 | 109 |
| 109 void generateNativeLiteral(ClassElement classElement) { | 110 void generateNativeLiteral(ClassElement classElement) { |
| 110 String quotedNative = classElement.nativeTagInfo.slowToString(); | 111 String quotedNative = classElement.nativeTagInfo.slowToString(); |
| (...skipping 42 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 153 generateNativeLiteral(classElement); | 154 generateNativeLiteral(classElement); |
| 154 // The native literal kind needs to be dealt with specially when | 155 // The native literal kind needs to be dealt with specially when |
| 155 // generating code for it. | 156 // generating code for it. |
| 156 return; | 157 return; |
| 157 } | 158 } |
| 158 | 159 |
| 159 CodeBuffer fieldBuffer = new CodeBuffer(); | 160 CodeBuffer fieldBuffer = new CodeBuffer(); |
| 160 CodeBuffer getterSetterBuffer = new CodeBuffer(); | 161 CodeBuffer getterSetterBuffer = new CodeBuffer(); |
| 161 CodeBuffer methodBuffer = new CodeBuffer(); | 162 CodeBuffer methodBuffer = new CodeBuffer(); |
| 162 | 163 |
| 163 emitter.emitClassFields(classElement, fieldBuffer, false); | 164 emitter.emitClassFields(classElement, fieldBuffer, false, isNative: true); |
| 164 emitter.emitClassGettersSetters(classElement, getterSetterBuffer, false); | 165 emitter.emitClassGettersSetters(classElement, getterSetterBuffer, false); |
| 165 emitter.emitInstanceMembers(classElement, methodBuffer, false); | 166 emitter.emitInstanceMembers(classElement, methodBuffer, false); |
| 166 | 167 |
| 167 if (methodBuffer.isEmpty | 168 if (methodBuffer.isEmpty |
| 168 && fieldBuffer.isEmpty | 169 && fieldBuffer.isEmpty |
| 169 && getterSetterBuffer.isEmpty) { | 170 && getterSetterBuffer.isEmpty) { |
| 170 return; | 171 return; |
| 171 } | 172 } |
| 172 | 173 |
| 173 String nativeTag = toNativeTag(classElement); | 174 String nativeTag = toNativeTag(classElement); |
| (...skipping 392 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 566 if (!first) targetBuffer.add(",\n"); | 567 if (!first) targetBuffer.add(",\n"); |
| 567 targetBuffer.add(" $name: $function"); | 568 targetBuffer.add(" $name: $function"); |
| 568 first = false; | 569 first = false; |
| 569 }); | 570 }); |
| 570 targetBuffer.add("\n});\n\n"); | 571 targetBuffer.add("\n});\n\n"); |
| 571 } | 572 } |
| 572 targetBuffer.add(nativeBuffer); | 573 targetBuffer.add(nativeBuffer); |
| 573 targetBuffer.add('\n'); | 574 targetBuffer.add('\n'); |
| 574 } | 575 } |
| 575 } | 576 } |
| OLD | NEW |