@@ -10,10 +10,14 @@ type object_property = {
10
10
optional : bool ;
11
11
}
12
12
and runtime_js_value =
13
- | String of {value : string value }
14
- | Number of {value : string value }
15
- | BigInt of {value : string value }
16
- | Boolean of {value : bool value }
13
+ | StringLiteral of {value : string }
14
+ | String
15
+ | NumberLiteral of {value : string }
16
+ | Number
17
+ | BigIntLiteral of {value : string }
18
+ | BigInt
19
+ | BooleanLiteral of {value : bool }
20
+ | Boolean
17
21
| NullLiteral
18
22
| UndefinedLiteral
19
23
| Array of {element_type : runtime_js_value value }
@@ -27,14 +31,14 @@ and runtime_js_value =
27
31
28
32
let rec debug_print_runtime_value (value : runtime_js_value ) =
29
33
match value with
30
- | String {value = Known v } -> Printf. sprintf " String (%s)" v
31
- | String { value = Unknown } -> " String"
32
- | Number {value = Known v } -> Printf. sprintf " Number(%s)" v
33
- | Number { value = Unknown } -> " Number"
34
- | BigInt {value = Known v } -> Printf. sprintf " BigInt(%s)" v
35
- | BigInt { value = Unknown } -> " BigInt"
36
- | Boolean {value = Known v } -> Printf. sprintf " Boolean(%b)" v
37
- | Boolean { value = Unknown } -> " Boolean"
34
+ | StringLiteral {value = v } -> Printf. sprintf " StringLiteral (%s)" v
35
+ | String -> " String"
36
+ | NumberLiteral {value = v } -> Printf. sprintf " Number(%s)" v
37
+ | Number -> " Number"
38
+ | BigIntLiteral {value = v } -> Printf. sprintf " BigInt(%s)" v
39
+ | BigInt -> " BigInt"
40
+ | BooleanLiteral {value = v } -> Printf. sprintf " Boolean(%b)" v
41
+ | Boolean -> " Boolean"
38
42
| NullLiteral -> " Null"
39
43
| UndefinedLiteral -> " Undefined"
40
44
| Array {element_type = Known v } ->
@@ -61,16 +65,16 @@ type runtime_representation = {possible_values: runtime_js_value list}
61
65
let tag_type_to_possible_values (tag_type : Ast_untagged_variants.tag_type ) :
62
66
runtime_js_value =
63
67
match tag_type with
64
- | String v -> String {value = Known v}
65
- | Int v -> Number {value = Known (string_of_int v)}
66
- | Float v -> Number {value = Known v}
67
- | BigInt v -> BigInt {value = Known v}
68
- | Bool v -> Boolean {value = Known v}
68
+ | String v -> StringLiteral {value = v}
69
+ | Int v -> NumberLiteral {value = (string_of_int v)}
70
+ | Float v -> NumberLiteral {value = v}
71
+ | BigInt v -> BigIntLiteral {value = v}
72
+ | Bool v -> BooleanLiteral {value = v}
69
73
| Null -> NullLiteral
70
74
| Undefined -> UndefinedLiteral
71
- | Untagged (IntType | FloatType ) -> Number {value = Unknown }
72
- | Untagged StringType -> String {value = Unknown }
73
- | Untagged BooleanType -> Boolean {value = Unknown }
75
+ | Untagged (IntType | FloatType ) -> Number
76
+ | Untagged StringType -> String
77
+ | Untagged BooleanType -> Boolean
74
78
| Untagged ObjectType ->
75
79
Object {properties = [] ; can_have_unknown_properties = true }
76
80
| Untagged UnknownType -> Any
@@ -90,12 +94,12 @@ let rec to_runtime_representation (type_expr : Types.type_expr) (env : Env.t)
90
94
match type_expr.desc with
91
95
(* Builtins *)
92
96
| Tconstr (p , _ , _ ) when Path. same p Predef. path_string ->
93
- [String {value = Unknown } ]
97
+ [String ]
94
98
| Tconstr (p , _ , _ ) when Path. same p Predef. path_bool ->
95
- [Boolean {value = Unknown } ]
99
+ [Boolean ]
96
100
| Tconstr (p, _, _)
97
101
when Path. same p Predef. path_float || Path. same p Predef. path_int ->
98
- [Number {value = Unknown } ]
102
+ [Number ]
99
103
| Tconstr (p , [inner ], _ ) when Path. same p Predef. path_option ->
100
104
[UndefinedLiteral ] @ to_runtime_representation inner env
101
105
| Tconstr (p , [inner ], _ ) when Path. same p Predef. path_dict ->
@@ -123,14 +127,14 @@ let rec to_runtime_representation (type_expr : Types.type_expr) (env : Env.t)
123
127
Ast_untagged_variants. process_tag_type c.cd_attributes
124
128
in
125
129
match (c.cd_args, tag_type) with
126
- | Cstr_tuple [] , None -> String {value = Known c.cd_id.name}
130
+ | Cstr_tuple [] , None -> StringLiteral {value = c.cd_id.name}
127
131
| Cstr_tuple [] , Some tag_type ->
128
132
tag_type_to_possible_values tag_type
129
133
| Cstr_tuple payloads , maybe_tag_type ->
130
134
let tag_value =
131
135
match maybe_tag_type with
132
136
| Some tag_type -> tag_type_to_possible_values tag_type
133
- | None -> String {value = Known c.cd_id.name}
137
+ | None -> StringLiteral {value = c.cd_id.name}
134
138
in
135
139
Object
136
140
{
@@ -160,7 +164,7 @@ let rec to_runtime_representation (type_expr : Types.type_expr) (env : Env.t)
160
164
let tag_value =
161
165
match maybe_tag_type with
162
166
| Some tag_type -> tag_type_to_possible_values tag_type
163
- | None -> String {value = Known c.cd_id.name}
167
+ | None -> StringLiteral {value = c.cd_id.name}
164
168
in
165
169
Object
166
170
{
@@ -184,7 +188,7 @@ let rec to_runtime_representation (type_expr : Types.type_expr) (env : Env.t)
184
188
row_fields
185
189
|> List. map (fun ((label , field ) : string * Types. row_field ) ->
186
190
match field with
187
- | Rpresent None -> [String {value = Known label}]
191
+ | Rpresent None -> [StringLiteral {value = label}]
188
192
| Rpresent (Some inner ) ->
189
193
[
190
194
Object
@@ -194,7 +198,7 @@ let rec to_runtime_representation (type_expr : Types.type_expr) (env : Env.t)
194
198
[
195
199
{
196
200
key = " NAME" ;
197
- value = Known [String {value = Known label}];
201
+ value = Known [StringLiteral {value = label}];
198
202
optional = false ;
199
203
};
200
204
{
@@ -211,13 +215,13 @@ let rec to_runtime_representation (type_expr : Types.type_expr) (env : Env.t)
211
215
212
216
let runtime_values_match (a : runtime_js_value ) (b : runtime_js_value ) =
213
217
match (a, b) with
214
- | String {value = Known a_value } , String {value = Known b_value } ->
218
+ | StringLiteral {value = a_value } , StringLiteral {value = b_value } ->
215
219
a_value = b_value
216
- | Number {value = Known a_value } , Number {value = Known b_value } ->
220
+ | NumberLiteral {value = a_value } , NumberLiteral {value = b_value } ->
217
221
a_value = b_value
218
- | BigInt {value = Known a_value } , BigInt {value = Known b_value } ->
222
+ | BigIntLiteral {value = a_value } , BigIntLiteral {value = b_value } ->
219
223
a_value = b_value
220
- | Boolean {value = Known a_value } , Boolean {value = Known b_value } ->
224
+ | BooleanLiteral {value = a_value } , BooleanLiteral {value = b_value } ->
221
225
a_value = b_value
222
226
| NullLiteral , NullLiteral -> true
223
227
| UndefinedLiteral , UndefinedLiteral -> true
0 commit comments