OLD | NEW |
1 // Copyright (c) 2016, the Dart project authors. Please see the AUTHORS file | 1 // Copyright (c) 2016, 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 library kernel.ast_to_binary; | 4 library kernel.ast_to_binary; |
5 | 5 |
6 import '../ast.dart'; | 6 import '../ast.dart'; |
7 import '../import_table.dart'; | 7 import '../import_table.dart'; |
8 import 'tag.dart'; | 8 import 'tag.dart'; |
9 import 'dart:convert'; | 9 import 'dart:convert'; |
10 import 'dart:typed_data'; | 10 import 'dart:typed_data'; |
(...skipping 1078 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
1089 } | 1089 } |
1090 | 1090 |
1091 visitNamedType(NamedType node) { | 1091 visitNamedType(NamedType node) { |
1092 writeStringReference(node.name); | 1092 writeStringReference(node.name); |
1093 writeNode(node.type); | 1093 writeNode(node.type); |
1094 } | 1094 } |
1095 | 1095 |
1096 visitTypeParameterType(TypeParameterType node) { | 1096 visitTypeParameterType(TypeParameterType node) { |
1097 writeByte(Tag.TypeParameterType); | 1097 writeByte(Tag.TypeParameterType); |
1098 writeUInt30(_typeParameterIndexer[node.parameter]); | 1098 writeUInt30(_typeParameterIndexer[node.parameter]); |
1099 writeUInt30(node.parameter.binaryOffset); | 1099 List<TypeParameter> typeParameters = |
| 1100 _typeParameterIndexer.indexList[node.parameter]; |
| 1101 writeUInt30(typeParameters[0].binaryOffset); |
| 1102 writeUInt30(typeParameters.indexOf(node.parameter)); |
1100 writeOptionalNode(node.bound); | 1103 writeOptionalNode(node.bound); |
1101 } | 1104 } |
1102 | 1105 |
1103 visitVectorType(VectorType node) { | 1106 visitVectorType(VectorType node) { |
1104 writeByte(Tag.VectorType); | 1107 writeByte(Tag.VectorType); |
1105 } | 1108 } |
1106 | 1109 |
1107 visitTypedefType(TypedefType node) { | 1110 visitTypedefType(TypedefType node) { |
1108 writeByte(Tag.TypedefType); | 1111 writeByte(Tag.TypedefType); |
1109 writeReference(node.typedefReference); | 1112 writeReference(node.typedefReference); |
(...skipping 91 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
1201 | 1204 |
1202 void exit(SwitchStatement node) { | 1205 void exit(SwitchStatement node) { |
1203 stackHeight -= node.cases.length; | 1206 stackHeight -= node.cases.length; |
1204 } | 1207 } |
1205 | 1208 |
1206 int operator [](SwitchCase node) => index[node]; | 1209 int operator [](SwitchCase node) => index[node]; |
1207 } | 1210 } |
1208 | 1211 |
1209 class TypeParameterIndexer { | 1212 class TypeParameterIndexer { |
1210 final Map<TypeParameter, int> index = <TypeParameter, int>{}; | 1213 final Map<TypeParameter, int> index = <TypeParameter, int>{}; |
| 1214 final Map<TypeParameter, List<TypeParameter>> indexList = |
| 1215 <TypeParameter, List<TypeParameter>>{}; |
1211 int stackHeight = 0; | 1216 int stackHeight = 0; |
1212 | 1217 |
1213 void enter(List<TypeParameter> typeParameters) { | 1218 void enter(List<TypeParameter> typeParameters) { |
1214 for (var parameter in typeParameters) { | 1219 for (var parameter in typeParameters) { |
1215 index[parameter] = stackHeight; | 1220 index[parameter] = stackHeight; |
| 1221 indexList[parameter] = typeParameters; |
1216 ++stackHeight; | 1222 ++stackHeight; |
1217 } | 1223 } |
1218 } | 1224 } |
1219 | 1225 |
1220 void exit(List<TypeParameter> typeParameters) { | 1226 void exit(List<TypeParameter> typeParameters) { |
1221 stackHeight -= typeParameters.length; | 1227 stackHeight -= typeParameters.length; |
1222 } | 1228 } |
1223 | 1229 |
1224 int operator [](TypeParameter parameter) => index[parameter]; | 1230 int operator [](TypeParameter parameter) => index[parameter]; |
1225 } | 1231 } |
(...skipping 239 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
1465 _sink.add(_buffer.sublist(0, length)); | 1471 _sink.add(_buffer.sublist(0, length)); |
1466 _buffer = new Uint8List(SIZE); | 1472 _buffer = new Uint8List(SIZE); |
1467 flushedLength += length; | 1473 flushedLength += length; |
1468 length = 0; | 1474 length = 0; |
1469 } | 1475 } |
1470 | 1476 |
1471 void flushAndDestroy() { | 1477 void flushAndDestroy() { |
1472 _sink.add(_buffer.sublist(0, length)); | 1478 _sink.add(_buffer.sublist(0, length)); |
1473 } | 1479 } |
1474 } | 1480 } |
OLD | NEW |