OLD | NEW |
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 library dart2js.js_emitter.full_emitter.class_emitter; | 5 library dart2js.js_emitter.full_emitter.class_emitter; |
6 | 6 |
7 import '../../common.dart'; | 7 import '../../common.dart'; |
8 import '../../common/names.dart' show Names; | 8 import '../../common/names.dart' show Names; |
9 import '../../common_elements.dart'; | 9 import '../../common_elements.dart'; |
10 import '../../elements/resolution_types.dart' show ResolutionDartType; | 10 import '../../elements/resolution_types.dart' show ResolutionDartType; |
(...skipping 107 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
118 return false; | 118 return false; |
119 } else { | 119 } else { |
120 fields = container.fields; | 120 fields = container.fields; |
121 } | 121 } |
122 } else { | 122 } else { |
123 assert(container is Library); | 123 assert(container is Library); |
124 assert(emitStatics); | 124 assert(emitStatics); |
125 fields = container.staticFieldsForReflection; | 125 fields = container.staticFieldsForReflection; |
126 } | 126 } |
127 | 127 |
128 var fieldMetadata = []; | 128 var fieldMetadata = <jsAst.Expression>[]; |
129 bool hasMetadata = false; | 129 bool hasMetadata = false; |
130 bool fieldsAdded = false; | 130 bool fieldsAdded = false; |
131 | 131 |
132 for (Field field in fields) { | 132 for (Field field in fields) { |
133 FieldEntity fieldElement = field.element; | 133 FieldEntity fieldElement = field.element; |
134 jsAst.Name name = field.name; | 134 jsAst.Name name = field.name; |
135 jsAst.Name accessorName = field.accessorName; | 135 jsAst.Name accessorName = field.accessorName; |
136 bool needsGetter = field.needsGetter; | 136 bool needsGetter = field.needsGetter; |
137 bool needsSetter = field.needsUncheckedSetter; | 137 bool needsSetter = field.needsUncheckedSetter; |
138 | 138 |
139 // Ignore needsCheckedSetter - that is handled below. | 139 // Ignore needsCheckedSetter - that is handled below. |
140 bool needsAccessor = (needsGetter || needsSetter); | 140 bool needsAccessor = (needsGetter || needsSetter); |
141 // We need to output the fields for non-native classes so we can auto- | 141 // We need to output the fields for non-native classes so we can auto- |
142 // generate the constructor. For native classes there are no | 142 // generate the constructor. For native classes there are no |
143 // constructors, so we don't need the fields unless we are generating | 143 // constructors, so we don't need the fields unless we are generating |
144 // accessors at runtime. | 144 // accessors at runtime. |
145 bool needsFieldsForConstructor = !emitStatics && !classIsNative; | 145 bool needsFieldsForConstructor = !emitStatics && !classIsNative; |
146 if (needsFieldsForConstructor || needsAccessor) { | 146 if (needsFieldsForConstructor || needsAccessor) { |
147 var metadata = | 147 dynamic metadata = |
148 task.metadataCollector.buildFieldMetadataFunction(fieldElement); | 148 task.metadataCollector.buildFieldMetadataFunction(fieldElement); |
149 if (metadata != null) { | 149 if (metadata != null) { |
150 hasMetadata = true; | 150 hasMetadata = true; |
151 } else { | 151 } else { |
152 metadata = new jsAst.LiteralNull(); | 152 metadata = new jsAst.LiteralNull(); |
153 } | 153 } |
154 fieldMetadata.add(metadata); | 154 fieldMetadata.add(metadata); |
155 recordMangledField(fieldElement, accessorName, | 155 recordMangledField(fieldElement, accessorName, |
156 namer.privateName(fieldElement.memberName)); | 156 namer.privateName(fieldElement.memberName)); |
157 List<jsAst.Literal> fieldNameParts = <jsAst.Literal>[]; | 157 List<jsAst.Literal> fieldNameParts = <jsAst.Literal>[]; |
(...skipping 296 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
454 String reflectionName = emitter.getReflectionSelectorName(selector, name); | 454 String reflectionName = emitter.getReflectionSelectorName(selector, name); |
455 if (reflectionName != null) { | 455 if (reflectionName != null) { |
456 var reflectable = js( | 456 var reflectable = js( |
457 backend.mirrorsData.isMemberAccessibleByReflection(member) | 457 backend.mirrorsData.isMemberAccessibleByReflection(member) |
458 ? '1' | 458 ? '1' |
459 : '0'); | 459 : '0'); |
460 builder.addPropertyByName('+$reflectionName', reflectable); | 460 builder.addPropertyByName('+$reflectionName', reflectable); |
461 } | 461 } |
462 } | 462 } |
463 } | 463 } |
OLD | NEW |