Skip to content

Commit 3a09c2c

Browse files
committed
expand to literal
1 parent 472df0c commit 3a09c2c

File tree

1 file changed

+36
-32
lines changed

1 file changed

+36
-32
lines changed

Diff for: jscomp/ml/runtime_representation.ml

+36-32
Original file line numberDiff line numberDiff line change
@@ -10,10 +10,14 @@ type object_property = {
1010
optional: bool;
1111
}
1212
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
1721
| NullLiteral
1822
| UndefinedLiteral
1923
| Array of {element_type: runtime_js_value value}
@@ -27,14 +31,14 @@ and runtime_js_value =
2731

2832
let rec debug_print_runtime_value (value : runtime_js_value) =
2933
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"
3842
| NullLiteral -> "Null"
3943
| UndefinedLiteral -> "Undefined"
4044
| Array {element_type = Known v} ->
@@ -61,16 +65,16 @@ type runtime_representation = {possible_values: runtime_js_value list}
6165
let tag_type_to_possible_values (tag_type : Ast_untagged_variants.tag_type) :
6266
runtime_js_value =
6367
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}
6973
| Null -> NullLiteral
7074
| 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
7478
| Untagged ObjectType ->
7579
Object {properties = []; can_have_unknown_properties = true}
7680
| Untagged UnknownType -> Any
@@ -90,12 +94,12 @@ let rec to_runtime_representation (type_expr : Types.type_expr) (env : Env.t)
9094
match type_expr.desc with
9195
(* Builtins *)
9296
| Tconstr (p, _, _) when Path.same p Predef.path_string ->
93-
[String {value = Unknown}]
97+
[String]
9498
| Tconstr (p, _, _) when Path.same p Predef.path_bool ->
95-
[Boolean {value = Unknown}]
99+
[Boolean]
96100
| Tconstr (p, _, _)
97101
when Path.same p Predef.path_float || Path.same p Predef.path_int ->
98-
[Number {value = Unknown}]
102+
[Number]
99103
| Tconstr (p, [inner], _) when Path.same p Predef.path_option ->
100104
[UndefinedLiteral] @ to_runtime_representation inner env
101105
| 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)
123127
Ast_untagged_variants.process_tag_type c.cd_attributes
124128
in
125129
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}
127131
| Cstr_tuple [], Some tag_type ->
128132
tag_type_to_possible_values tag_type
129133
| Cstr_tuple payloads, maybe_tag_type ->
130134
let tag_value =
131135
match maybe_tag_type with
132136
| 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}
134138
in
135139
Object
136140
{
@@ -160,7 +164,7 @@ let rec to_runtime_representation (type_expr : Types.type_expr) (env : Env.t)
160164
let tag_value =
161165
match maybe_tag_type with
162166
| 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}
164168
in
165169
Object
166170
{
@@ -184,7 +188,7 @@ let rec to_runtime_representation (type_expr : Types.type_expr) (env : Env.t)
184188
row_fields
185189
|> List.map (fun ((label, field) : string * Types.row_field) ->
186190
match field with
187-
| Rpresent None -> [String {value = Known label}]
191+
| Rpresent None -> [StringLiteral {value = label}]
188192
| Rpresent (Some inner) ->
189193
[
190194
Object
@@ -194,7 +198,7 @@ let rec to_runtime_representation (type_expr : Types.type_expr) (env : Env.t)
194198
[
195199
{
196200
key = "NAME";
197-
value = Known [String {value = Known label}];
201+
value = Known [StringLiteral {value = label}];
198202
optional = false;
199203
};
200204
{
@@ -211,13 +215,13 @@ let rec to_runtime_representation (type_expr : Types.type_expr) (env : Env.t)
211215

212216
let runtime_values_match (a : runtime_js_value) (b : runtime_js_value) =
213217
match (a, b) with
214-
| String {value = Known a_value}, String {value = Known b_value} ->
218+
| StringLiteral {value = a_value}, StringLiteral {value = b_value} ->
215219
a_value = b_value
216-
| Number {value = Known a_value}, Number {value = Known b_value} ->
220+
| NumberLiteral {value = a_value}, NumberLiteral {value = b_value} ->
217221
a_value = b_value
218-
| BigInt {value = Known a_value}, BigInt {value = Known b_value} ->
222+
| BigIntLiteral {value = a_value}, BigIntLiteral {value = b_value} ->
219223
a_value = b_value
220-
| Boolean {value = Known a_value}, Boolean {value = Known b_value} ->
224+
| BooleanLiteral {value = a_value}, BooleanLiteral {value = b_value} ->
221225
a_value = b_value
222226
| NullLiteral, NullLiteral -> true
223227
| UndefinedLiteral, UndefinedLiteral -> true

0 commit comments

Comments
 (0)