OLD | NEW |
1 // Copyright (c) 2015, the Dart project authors. Please see the AUTHORS file | 1 // Copyright (c) 2015, 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 serialization.elements; | 5 library serialization.elements; |
6 | 6 |
7 import 'dart:convert'; | 7 import 'dart:convert'; |
8 | 8 |
9 import 'package:analyzer/dart/ast/ast.dart'; | 9 import 'package:analyzer/dart/ast/ast.dart'; |
10 import 'package:analyzer/dart/element/element.dart'; | 10 import 'package:analyzer/dart/element/element.dart'; |
(...skipping 1115 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
1126 b.name = variable.name; | 1126 b.name = variable.name; |
1127 b.nameOffset = variable.nameOffset; | 1127 b.nameOffset = variable.nameOffset; |
1128 if (!variable.hasImplicitType) { | 1128 if (!variable.hasImplicitType) { |
1129 b.type = serializeTypeRef(variable.type, variable); | 1129 b.type = serializeTypeRef(variable.type, variable); |
1130 } | 1130 } |
1131 b.isStatic = variable.isStatic && variable.enclosingElement is ClassElement; | 1131 b.isStatic = variable.isStatic && variable.enclosingElement is ClassElement; |
1132 b.isFinal = variable.isFinal; | 1132 b.isFinal = variable.isFinal; |
1133 b.isConst = variable.isConst; | 1133 b.isConst = variable.isConst; |
1134 b.documentationComment = serializeDocumentation(variable); | 1134 b.documentationComment = serializeDocumentation(variable); |
1135 b.annotations = serializeAnnotations(variable); | 1135 b.annotations = serializeAnnotations(variable); |
| 1136 // TODO(scheglov) VariableMember.initializer is not implemented |
| 1137 if (variable is! VariableMember && variable.initializer != null) { |
| 1138 b.initializer = serializeExecutable(variable.initializer); |
| 1139 } |
1136 if (variable is ConstVariableElement) { | 1140 if (variable is ConstVariableElement) { |
1137 ConstVariableElement constVariable = variable as ConstVariableElement; | 1141 ConstVariableElement constVariable = variable as ConstVariableElement; |
1138 Expression initializer = constVariable.constantInitializer; | 1142 Expression initializer = constVariable.constantInitializer; |
1139 if (initializer != null) { | 1143 if (initializer != null) { |
1140 b.constExpr = | 1144 b.initializer?.bodyExpr = |
1141 serializeConstExpr(variable, variable.initializer, initializer); | 1145 serializeConstExpr(variable, variable.initializer, initializer); |
1142 } | 1146 } |
1143 } | 1147 } |
1144 if (variable is PropertyInducingElement) { | 1148 if (variable is PropertyInducingElement) { |
1145 if (b.isFinal || b.isConst) { | 1149 if (b.isFinal || b.isConst) { |
1146 b.propagatedTypeSlot = | 1150 b.propagatedTypeSlot = |
1147 storeLinkedType(variable.propagatedType, variable); | 1151 storeLinkedType(variable.propagatedType, variable); |
1148 } else { | 1152 } else { |
1149 // Variable is not propagable. | 1153 // Variable is not propagable. |
1150 assert(variable.propagatedType == null); | 1154 assert(variable.propagatedType == null); |
1151 } | 1155 } |
1152 } | 1156 } |
1153 if (variable.hasImplicitType && | 1157 if (variable.hasImplicitType && |
1154 (variable.initializer != null || !variable.isStatic)) { | 1158 (variable.initializer != null || !variable.isStatic)) { |
1155 b.inferredTypeSlot = storeInferredType(variable.type, variable); | 1159 b.inferredTypeSlot = storeInferredType(variable.type, variable); |
1156 } | 1160 } |
1157 b.codeRange = serializeCodeRange(variable); | 1161 b.codeRange = serializeCodeRange(variable); |
1158 if (variable is LocalVariableElement) { | 1162 if (variable is LocalVariableElement) { |
1159 SourceRange visibleRange = variable.visibleRange; | 1163 SourceRange visibleRange = variable.visibleRange; |
1160 if (visibleRange != null) { | 1164 if (visibleRange != null) { |
1161 b.visibleOffset = visibleRange.offset; | 1165 b.visibleOffset = visibleRange.offset; |
1162 b.visibleLength = visibleRange.length; | 1166 b.visibleLength = visibleRange.length; |
1163 } | 1167 } |
1164 } | 1168 } |
1165 // TODO(scheglov) VariableMember.initializer is not implemented | |
1166 if (variable is! VariableMember && variable.initializer != null) { | |
1167 b.initializer = serializeExecutable(variable.initializer); | |
1168 } | |
1169 return b; | 1169 return b; |
1170 } | 1170 } |
1171 | 1171 |
1172 /** | 1172 /** |
1173 * Create a new slot id and return it. If [hasCycle] is `true`, arrange for | 1173 * Create a new slot id and return it. If [hasCycle] is `true`, arrange for |
1174 * the slot id to be included in [LinkedUnit.constCycles]. | 1174 * the slot id to be included in [LinkedUnit.constCycles]. |
1175 */ | 1175 */ |
1176 int storeConstCycle(bool hasCycle) { | 1176 int storeConstCycle(bool hasCycle) { |
1177 int slot = ++numSlots; | 1177 int slot = ++numSlots; |
1178 if (hasCycle) { | 1178 if (hasCycle) { |
(...skipping 496 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
1675 exportNames.add(new LinkedExportNameBuilder( | 1675 exportNames.add(new LinkedExportNameBuilder( |
1676 name: name, | 1676 name: name, |
1677 dependency: serializeDependency(dependentLibrary), | 1677 dependency: serializeDependency(dependentLibrary), |
1678 unit: unit, | 1678 unit: unit, |
1679 kind: kind)); | 1679 kind: kind)); |
1680 } | 1680 } |
1681 pb.exportNames = exportNames; | 1681 pb.exportNames = exportNames; |
1682 return pb; | 1682 return pb; |
1683 } | 1683 } |
1684 } | 1684 } |
OLD | NEW |