Skip to content
This repository was archived by the owner on Feb 4, 2025. It is now read-only.

Commit 210929f

Browse files
committed
add double converter support, fix related tests
1 parent d351f18 commit 210929f

File tree

13 files changed

+721
-408
lines changed

13 files changed

+721
-408
lines changed

goldens/foo/lib/foo.analyzer.json

Lines changed: 12 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -208,14 +208,18 @@
208208
"value": {
209209
"reference": {
210210
"type": "ClassReference",
211-
"value": {}
211+
"value": {
212+
"name": "QueryClass"
213+
}
212214
},
213215
"typeArguments": []
214216
}
215217
},
216218
"constructor": {
217219
"type": "ConstructorReference",
218-
"value": {}
220+
"value": {
221+
"name": "new"
222+
}
219223
},
220224
"arguments": []
221225
}
@@ -272,14 +276,18 @@
272276
"value": {
273277
"reference": {
274278
"type": "ClassReference",
275-
"value": {}
279+
"value": {
280+
"name": "QueryClass"
281+
}
276282
},
277283
"typeArguments": []
278284
}
279285
},
280286
"constructor": {
281287
"type": "ConstructorReference",
282-
"value": {}
288+
"value": {
289+
"name": "new"
290+
}
283291
},
284292
"arguments": []
285293
}

goldens/foo/lib/literal_params.analyzer.augmentations

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -5,10 +5,10 @@ augment class Foo {
55
// aNum: 8.0, double
66
// aDouble: 9.0, double
77
// aString: 10, String
8-
// anObject: {type: {type: NamedTypeAnnotation, value: {reference: {type: ClassReference, value: {}}, typeArguments: []}}, constructor: {type: ConstructorReference, value: {}}, arguments: [{type: NamedArgument, value: {name: a, expression: {type: BooleanLiteral, value: {text: true}}}}, {type: NamedArgument, value: {name: b, expression: {type: BooleanLiteral, value: {text: false}}}}]}, String
8+
// anObject: {type: {type: NamedTypeAnnotation, value: {reference: {type: ClassReference, value: {name: Bar}}, typeArguments: []}}, constructor: {type: ConstructorReference, value: {name: new}}, arguments: [{type: NamedArgument, value: {name: a, expression: {type: BooleanLiteral, value: {value: true}}}}, {type: NamedArgument, value: {name: b, expression: {type: BooleanLiteral, value: {value: false}}}}]}, String
99
// ints: [11, 12], List<Object>
1010
// nums: [13.0, 14], List<Object>
1111
// doubles: [15.0, 16], List<Object>
1212
// strings: [17, eighteen], List<Object>
13-
// objects: [19, {type: {type: NamedTypeAnnotation, value: {reference: {type: ClassReference, value: {}}, typeArguments: []}}, constructor: {type: ConstructorReference, value: {}}, arguments: [{type: NamedArgument, value: {name: a, expression: {type: BooleanLiteral, value: {text: true}}}}, {type: NamedArgument, value: {name: b, expression: {type: BooleanLiteral, value: {text: false}}}}]}], List<Object>
13+
// objects: [19, {type: {type: NamedTypeAnnotation, value: {reference: {type: ClassReference, value: {name: Bar}}, typeArguments: []}}, constructor: {type: ConstructorReference, value: {name: new}}, arguments: [{type: NamedArgument, value: {name: a, expression: {type: BooleanLiteral, value: {value: true}}}}, {type: NamedArgument, value: {name: b, expression: {type: BooleanLiteral, value: {value: false}}}}]}], List<Object>
1414
}

goldens/foo/lib/metadata.analyzer.json

Lines changed: 15 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -28,14 +28,18 @@
2828
"value": {
2929
"reference": {
3030
"type": "ClassReference",
31-
"value": {}
31+
"value": {
32+
"name": "QueryClass"
33+
}
3234
},
3335
"typeArguments": []
3436
}
3537
},
3638
"constructor": {
3739
"type": "ConstructorReference",
38-
"value": {}
40+
"value": {
41+
"name": "new"
42+
}
3943
},
4044
"arguments": []
4145
}
@@ -50,14 +54,18 @@
5054
"value": {
5155
"reference": {
5256
"type": "ClassReference",
53-
"value": {}
57+
"value": {
58+
"name": "Annotation"
59+
}
5460
},
5561
"typeArguments": []
5662
}
5763
},
5864
"constructor": {
5965
"type": "ConstructorReference",
60-
"value": {}
66+
"value": {
67+
"name": "new"
68+
}
6169
},
6270
"arguments": [
6371
{
@@ -67,7 +75,7 @@
6775
"expression": {
6876
"type": "BooleanLiteral",
6977
"value": {
70-
"text": "true"
78+
"value": true
7179
}
7280
}
7381
}
@@ -79,7 +87,8 @@
7987
"expression": {
8088
"type": "IntegerLiteral",
8189
"value": {
82-
"text": "23"
90+
"text": "23",
91+
"value": 23
8392
}
8493
}
8594
}

pkgs/_analyzer_cfe_macros/lib/metadata_converter.dart

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -281,7 +281,7 @@ T? convert<T>(Object? object) => switch (object) {
281281
as T,
282282
front_end.ConstructorInvocation o =>
283283
dart_model.ConstructorInvocation(
284-
type: convert(o.type),
284+
type: convertToTypeAnnotation(o.type),
285285
constructor: convertToReference(o.constructor),
286286
arguments: convert(o.arguments),
287287
)

pkgs/_analyzer_cfe_macros/test/metadata_converter_test.dart

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -20,7 +20,7 @@ void main() {
2020
expect(convert<Object>(invocation), <String, Object?>{
2121
'receiver': {
2222
'type': 'DoubleLiteral',
23-
'value': {'text': '1.23'},
23+
'value': {'text': '1.23', 'value': 1.23},
2424
},
2525
'name': 'round',
2626
'typeArguments': [],
@@ -40,12 +40,12 @@ void main() {
4040
expect(convert<Object>(expression), <String, Object?>{
4141
'left': {
4242
'type': 'DoubleLiteral',
43-
'value': {'text': '1.23'},
43+
'value': {'text': '1.23', 'value': 1.23},
4444
},
4545
'operator': 'minus',
4646
'right': {
4747
'type': 'DoubleLiteral',
48-
'value': {'text': '1.24'},
48+
'value': {'text': '1.24', 'value': 1.24},
4949
},
5050
});
5151
});
@@ -63,7 +63,7 @@ void main() {
6363
expect(convert<Object>(invocation), <String, Object?>{
6464
'receiver': {
6565
'type': 'DoubleLiteral',
66-
'value': {'text': '1.23'},
66+
'value': {'text': '1.23', 'value': 1.23},
6767
},
6868
'name': 'round',
6969
'typeArguments': [],

pkgs/_test_macros/lib/literal_params.dart

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -93,9 +93,9 @@ class LiteralParamsImplementation implements ClassDeclarationsMacro {
9393
extension ExpressionExtension on Expression {
9494
Object get evaluate => switch (type) {
9595
ExpressionType.integerLiteral => int.parse(asIntegerLiteral.text),
96-
ExpressionType.doubleLiteral => double.parse(asDoubleLiteral.text),
96+
ExpressionType.doubleLiteral => asDoubleLiteral.value,
9797
ExpressionType.stringLiteral => asStringLiteral.evaluate,
98-
ExpressionType.booleanLiteral => bool.parse(asBooleanLiteral.text),
98+
ExpressionType.booleanLiteral => asBooleanLiteral.value,
9999
ExpressionType.listLiteral =>
100100
asListLiteral.elements.map((e) => e.evaluate).toList(),
101101
// TODO(davidmorgan): need the type name to do something useful here,

pkgs/dart_model/lib/src/json_buffer/json_buffer_builder.dart

Lines changed: 26 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -4,6 +4,7 @@
44

55
import 'dart:collection';
66
import 'dart:convert';
7+
import 'dart:io';
78
import 'dart:typed_data';
89

910
import 'package:convert/convert.dart';
@@ -104,6 +105,8 @@ class JsonBufferBuilder {
104105
_buildDigest(pointer, byteSink);
105106
case Type.uint32:
106107
byteSink.addSlice(_buffer, pointer, pointer + 4, false);
108+
case Type.float64:
109+
byteSink.addSlice(_buffer, pointer, pointer + 8, false);
107110
case Type.boolean:
108111
// We use [1] and [2] because [0] is `null`.
109112
byteSink.add(_readBoolean(pointer) ? const [2] : const [1]);
@@ -151,6 +154,8 @@ class JsonBufferBuilder {
151154
return _readPointer(pointer);
152155
case Type.uint32:
153156
return _readUint32(pointer);
157+
case Type.float64:
158+
return _readFloat64(pointer);
154159
case Type.boolean:
155160
return _readBoolean(pointer);
156161
case Type.anyPointer:
@@ -206,6 +211,9 @@ class JsonBufferBuilder {
206211
case Type.uint32:
207212
_writeUint32(pointer, value as int);
208213

214+
case Type.float64:
215+
_writeFloat64(pointer, value as double);
216+
209217
case Type.boolean:
210218
_writeBoolean(pointer, value as bool);
211219

@@ -325,6 +333,24 @@ class JsonBufferBuilder {
325333
(_buffer[pointer + 2] << 16) +
326334
(_buffer[pointer + 3] << 24);
327335

336+
/// Writes [value] at [pointer].
337+
void _writeFloat64(_Pointer pointer, double value) {
338+
_explanations?.push('_writeFloat64 $value');
339+
__writeFloat64(pointer, value);
340+
_explanations?.pop();
341+
}
342+
343+
void __writeFloat64(_Pointer pointer, double value) {
344+
final byteData = ByteData(8);
345+
byteData.setFloat64(0, value, Endian.big);
346+
_setRange(pointer, pointer + 8, byteData.buffer.asUint8List());
347+
}
348+
349+
/// Reads the float64 at [_Pointer].
350+
double _readFloat64(_Pointer pointer) {
351+
return ByteData.sublistView(_buffer).getFloat64(pointer, Endian.big);
352+
}
353+
328354
/// Writes [boolean] at [pointer].
329355
void _writeBoolean(_Pointer pointer, bool boolean) {
330356
_explanations?.push('_writeBoolean $boolean');

pkgs/dart_model/lib/src/json_buffer/type.dart

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -27,6 +27,7 @@ enum Type {
2727
type(false),
2828
pointer(true),
2929
uint32(false),
30+
float64(false),
3031
boolean(false),
3132
anyPointer(false), // This is actually a type followed by a pointer.
3233
stringPointer(true),
@@ -52,6 +53,8 @@ enum Type {
5253
return Type.stringPointer;
5354
case int():
5455
return Type.uint32;
56+
case double():
57+
return Type.float64;
5558
case bool():
5659
return Type.boolean;
5760
case Type():
@@ -92,6 +95,8 @@ enum Type {
9295
return 4;
9396
case anyPointer:
9497
return 5;
98+
case float64:
99+
return 8;
95100
}
96101
}
97102
}

0 commit comments

Comments
 (0)