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 |