Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(2)

Side by Side Diff: sdk/lib/_internal/compiler/implementation/js_backend/native_emitter.dart

Issue 11414258: Reapply dart2js: Dot-separated field-and-super descriptor string in classes. (Closed) Base URL: https://dart.googlecode.com/svn/branches/bleeding_edge/dart
Patch Set: Created 8 years ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View unified diff | Download patch | Annotate | Revision Log
OLDNEW
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
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
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
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 }
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698