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

Side by Side Diff: pkg/compiler/lib/src/js_emitter/old_emitter/class_emitter.dart

Issue 869513003: dart2js: Move metadata from old_emitter to shared directory. (Closed) Base URL: https://dart.googlecode.com/svn/branches/bleeding_edge/dart
Patch Set: Created 5 years, 10 months 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) 2013, the Dart project authors. Please see the AUTHORS file 1 // Copyright (c) 2013, 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 dart2js.js_emitter; 5 part of dart2js.js_emitter;
6 6
7 class ClassEmitter extends CodeEmitterHelper { 7 class ClassEmitter extends CodeEmitterHelper {
8 8
9 ClassStubGenerator get _stubGenerator => 9 ClassStubGenerator get _stubGenerator =>
10 new ClassStubGenerator(compiler, namer, backend); 10 new ClassStubGenerator(compiler, namer, backend);
(...skipping 100 matching lines...) Expand 10 before | Expand all | Expand 10 after
111 bool needsSetter = field.needsUncheckedSetter; 111 bool needsSetter = field.needsUncheckedSetter;
112 112
113 // Ignore needsCheckedSetter - that is handled below. 113 // Ignore needsCheckedSetter - that is handled below.
114 bool needsAccessor = (needsGetter || needsSetter); 114 bool needsAccessor = (needsGetter || needsSetter);
115 // We need to output the fields for non-native classes so we can auto- 115 // We need to output the fields for non-native classes so we can auto-
116 // generate the constructor. For native classes there are no 116 // generate the constructor. For native classes there are no
117 // constructors, so we don't need the fields unless we are generating 117 // constructors, so we don't need the fields unless we are generating
118 // accessors at runtime. 118 // accessors at runtime.
119 bool needsFieldsForConstructor = !emitStatics && !classIsNative; 119 bool needsFieldsForConstructor = !emitStatics && !classIsNative;
120 if (needsFieldsForConstructor || needsAccessor) { 120 if (needsFieldsForConstructor || needsAccessor) {
121 var metadata = 121 var metadata = task.metadataEmitter.buildMetadataFunction(fieldElement);
122 emitter.metadataEmitter.buildMetadataFunction(fieldElement);
123 if (metadata != null) { 122 if (metadata != null) {
124 hasMetadata = true; 123 hasMetadata = true;
125 } else { 124 } else {
126 metadata = new jsAst.LiteralNull(); 125 metadata = new jsAst.LiteralNull();
127 } 126 }
128 fieldMetadata.add(metadata); 127 fieldMetadata.add(metadata);
129 recordMangledField(fieldElement, accessorName, 128 recordMangledField(fieldElement, accessorName,
130 namer.privateName(fieldElement.library, fieldElement.name)); 129 namer.privateName(fieldElement.library, fieldElement.name));
131 String fieldName = name; 130 String fieldName = name;
132 String fieldCode = ''; 131 String fieldCode = '';
(...skipping 23 matching lines...) Expand all
156 int code = field.getterFlags + (field.setterFlags << 2); 155 int code = field.getterFlags + (field.setterFlags << 2);
157 if (code == 0) { 156 if (code == 0) {
158 compiler.internalError(fieldElement, 157 compiler.internalError(fieldElement,
159 'Field code is 0 ($fieldElement).'); 158 'Field code is 0 ($fieldElement).');
160 } else { 159 } else {
161 fieldCode = FIELD_CODE_CHARACTERS[code - FIRST_FIELD_CODE]; 160 fieldCode = FIELD_CODE_CHARACTERS[code - FIRST_FIELD_CODE];
162 } 161 }
163 } 162 }
164 if (backend.isAccessibleByReflection(fieldElement)) { 163 if (backend.isAccessibleByReflection(fieldElement)) {
165 DartType type = fieldElement.type; 164 DartType type = fieldElement.type;
166 reflectionMarker = '-${emitter.metadataEmitter.reifyType(type)}'; 165 reflectionMarker = '-${task.metadataEmitter.reifyType(type)}';
167 } 166 }
168 String builtFieldname = '$fieldName$fieldCode$reflectionMarker'; 167 String builtFieldname = '$fieldName$fieldCode$reflectionMarker';
169 builder.addField(builtFieldname); 168 builder.addField(builtFieldname);
170 // Add 1 because adding a field to the class also requires a comma 169 // Add 1 because adding a field to the class also requires a comma
171 compiler.dumpInfoTask.recordFieldNameSize(fieldElement, 170 compiler.dumpInfoTask.recordFieldNameSize(fieldElement,
172 builtFieldname.length + 1); 171 builtFieldname.length + 1);
173 fieldsAdded = true; 172 fieldsAdded = true;
174 } 173 }
175 } 174 }
176 175
(...skipping 95 matching lines...) Expand 10 before | Expand all | Expand 10 after
272 builder.addProperty(namer.nativeSpecProperty, js.string(cls.nativeInfo)); 271 builder.addProperty(namer.nativeSpecProperty, js.string(cls.nativeInfo));
273 } 272 }
274 } 273 }
275 274
276 void emitClassBuilderWithReflectionData(Class cls, 275 void emitClassBuilderWithReflectionData(Class cls,
277 ClassBuilder classBuilder, 276 ClassBuilder classBuilder,
278 ClassBuilder enclosingBuilder) { 277 ClassBuilder enclosingBuilder) {
279 ClassElement classElement = cls.element; 278 ClassElement classElement = cls.element;
280 String className = cls.name; 279 String className = cls.name;
281 280
282 var metadata = emitter.metadataEmitter.buildMetadataFunction(classElement); 281 var metadata = task.metadataEmitter.buildMetadataFunction(classElement);
283 if (metadata != null) { 282 if (metadata != null) {
284 classBuilder.addProperty("@", metadata); 283 classBuilder.addProperty("@", metadata);
285 } 284 }
286 285
287 if (backend.isAccessibleByReflection(classElement)) { 286 if (backend.isAccessibleByReflection(classElement)) {
288 List<DartType> typeVars = classElement.typeVariables; 287 List<DartType> typeVars = classElement.typeVariables;
289 Iterable typeVariableProperties = emitter.typeVariableHandler 288 Iterable typeVariableProperties = emitter.typeVariableHandler
290 .typeVariablesOf(classElement).map(js.number); 289 .typeVariablesOf(classElement).map(js.number);
291 290
292 ClassElement superclass = classElement.superclass; 291 ClassElement superclass = classElement.superclass;
(...skipping 32 matching lines...) Expand 10 before | Expand all | Expand 10 after
325 compiler.dumpInfoTask.registerElementAst(classBuilder.element, propertyValue ); 324 compiler.dumpInfoTask.registerElementAst(classBuilder.element, propertyValue );
326 enclosingBuilder.addProperty(className, propertyValue); 325 enclosingBuilder.addProperty(className, propertyValue);
327 326
328 String reflectionName = emitter.getReflectionName(classElement, className); 327 String reflectionName = emitter.getReflectionName(classElement, className);
329 if (reflectionName != null) { 328 if (reflectionName != null) {
330 if (!backend.isAccessibleByReflection(classElement)) { 329 if (!backend.isAccessibleByReflection(classElement)) {
331 enclosingBuilder.addProperty("+$reflectionName", js.number(0)); 330 enclosingBuilder.addProperty("+$reflectionName", js.number(0));
332 } else { 331 } else {
333 List<int> types = <int>[]; 332 List<int> types = <int>[];
334 if (classElement.supertype != null) { 333 if (classElement.supertype != null) {
335 types.add(emitter.metadataEmitter.reifyType(classElement.supertype)); 334 types.add(task.metadataEmitter.reifyType(classElement.supertype));
336 } 335 }
337 for (DartType interface in classElement.interfaces) { 336 for (DartType interface in classElement.interfaces) {
338 types.add(emitter.metadataEmitter.reifyType(interface)); 337 types.add(task.metadataEmitter.reifyType(interface));
339 } 338 }
340 enclosingBuilder.addProperty("+$reflectionName", 339 enclosingBuilder.addProperty("+$reflectionName",
341 new jsAst.ArrayInitializer(types.map(js.number).toList())); 340 new jsAst.ArrayInitializer(types.map(js.number).toList()));
342 } 341 }
343 } 342 }
344 } 343 }
345 344
346 /** 345 /**
347 * Invokes [f] for each of the fields of [element]. 346 * Invokes [f] for each of the fields of [element].
348 * 347 *
(...skipping 239 matching lines...) Expand 10 before | Expand all | Expand 10 after
588 js.number(index)); 587 js.number(index));
589 } 588 }
590 jsAst.Expression convertRtiToRuntimeType = emitter 589 jsAst.Expression convertRtiToRuntimeType = emitter
591 .staticFunctionAccess(backend.findHelper('convertRtiToRuntimeType')); 590 .staticFunctionAccess(backend.findHelper('convertRtiToRuntimeType'));
592 compiler.dumpInfoTask.registerElementAst(element, 591 compiler.dumpInfoTask.registerElementAst(element,
593 builder.addProperty(name, 592 builder.addProperty(name,
594 js('function () { return #(#) }', 593 js('function () { return #(#) }',
595 [convertRtiToRuntimeType, computeTypeVariable]))); 594 [convertRtiToRuntimeType, computeTypeVariable])));
596 } 595 }
597 } 596 }
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698