| 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 | 
|---|