Skip to content

Commit 55d7337

Browse files
authored
Clean up legacy tags handling (#7309)
1 parent 646b2c3 commit 55d7337

10 files changed

+30
-91
lines changed

CHANGELOG.md

+4
Original file line numberDiff line numberDiff line change
@@ -12,6 +12,10 @@
1212
1313
# 12.0.0-alpha.10 (Unreleased)
1414

15+
#### :house: Internal
16+
17+
- Clean up legacy tags handling. https://github.com/rescript-lang/rescript/pull/7309
18+
1519
# 12.0.0-alpha.9
1620

1721
#### :boom: Breaking Change

CONTRIBUTING.md

+4-1
Original file line numberDiff line numberDiff line change
@@ -47,7 +47,10 @@ Make sure you have [opam](https://opam.ocaml.org/doc/Install.html) installed on
4747
opam init
4848

4949
# Any recent OCaml version works as a development compiler
50-
opam switch create 5.3.0 # can also create local switch with opam switch create
50+
# Can also create local switch with opam switch create
51+
# If you get "No compiler matching `5.3.0' found" error,
52+
# then you need to run `opam update && opam upgrade` first
53+
opam switch create 5.3.0
5154

5255
# Install dev dependencies from OPAM
5356
opam install . --deps-only --with-test --with-dev-setup -y

compiler/core/js_exp_make.ml

-4
Original file line numberDiff line numberDiff line change
@@ -338,9 +338,6 @@ let eight_int_literal : t =
338338
let nine_int_literal : t =
339339
{expression_desc = Number (Int {i = 9l; c = None}); comment = None}
340340

341-
let obj_int_tag_literal : t =
342-
{expression_desc = Number (Int {i = 248l; c = None}); comment = None}
343-
344341
let int ?comment ?c i : t = {expression_desc = Number (Int {i; c}); comment}
345342

346343
let bigint ?comment sign i : t =
@@ -364,7 +361,6 @@ let small_int i : t =
364361
| 7 -> seven_int_literal
365362
| 8 -> eight_int_literal
366363
| 9 -> nine_int_literal
367-
| 248 -> obj_int_tag_literal
368364
| i -> int (Int32.of_int i)
369365

370366
let true_ : t = {comment = None; expression_desc = Bool true}

compiler/core/js_exp_make.mli

-1
Original file line numberDiff line numberDiff line change
@@ -132,7 +132,6 @@ val zero_int_literal : t
132132

133133
(* val one_int_literal : t *)
134134
val zero_float_lit : t
135-
(* val obj_int_tag_literal : t *)
136135

137136
val zero_bigint_literal : t
138137

lib/es6/Primitive_hash.js

+5-9
Original file line numberDiff line numberDiff line change
@@ -118,15 +118,11 @@ function hash(count, _limit, seed, obj) {
118118
if (size !== 0) {
119119
let obj_tag = obj$1.TAG;
120120
let tag = (size << 10) | obj_tag;
121-
if (obj_tag === 248) {
122-
s = hash_mix_int(s, obj$1[1]);
123-
} else {
124-
s = hash_mix_int(s, tag);
125-
let v = size - 1 | 0;
126-
let block = v < num ? v : num;
127-
for (let i = 0; i <= block; ++i) {
128-
push_back(queue, obj$1[i]);
129-
}
121+
s = hash_mix_int(s, tag);
122+
let v = size - 1 | 0;
123+
let block = v < num ? v : num;
124+
for (let i = 0; i <= block; ++i) {
125+
push_back(queue, obj$1[i]);
130126
}
131127
} else {
132128
let size$1 = (function(obj,cb){

lib/es6/Primitive_object.js

-21
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,5 @@
11

22

3-
import * as Primitive_int from "./Primitive_int.js";
43
import * as Primitive_bool from "./Primitive_bool.js";
54
import * as Primitive_float from "./Primitive_float.js";
65
import * as Primitive_string from "./Primitive_string.js";
@@ -107,16 +106,6 @@ function compare(a, b) {
107106
}
108107
let tag_a = a.TAG;
109108
let tag_b = b.TAG;
110-
if (tag_a === 248) {
111-
return Primitive_int.compare(a[1], b[1]);
112-
}
113-
if (tag_a === 251) {
114-
throw {
115-
RE_EXN_ID: "Invalid_argument",
116-
_1: "equal: abstract value",
117-
Error: new Error()
118-
};
119-
}
120109
if (tag_a !== tag_b) {
121110
if (tag_a < tag_b) {
122111
return -1;
@@ -247,16 +236,6 @@ function equal(a, b) {
247236
}
248237
let tag_a = a.TAG;
249238
let tag_b = b.TAG;
250-
if (tag_a === 248) {
251-
return a[1] === b[1];
252-
}
253-
if (tag_a === 251) {
254-
throw {
255-
RE_EXN_ID: "Invalid_argument",
256-
_1: "equal: abstract value",
257-
Error: new Error()
258-
};
259-
}
260239
if (tag_a !== tag_b) {
261240
return false;
262241
}

lib/js/Primitive_hash.js

+5-9
Original file line numberDiff line numberDiff line change
@@ -118,15 +118,11 @@ function hash(count, _limit, seed, obj) {
118118
if (size !== 0) {
119119
let obj_tag = obj$1.TAG;
120120
let tag = (size << 10) | obj_tag;
121-
if (obj_tag === 248) {
122-
s = hash_mix_int(s, obj$1[1]);
123-
} else {
124-
s = hash_mix_int(s, tag);
125-
let v = size - 1 | 0;
126-
let block = v < num ? v : num;
127-
for (let i = 0; i <= block; ++i) {
128-
push_back(queue, obj$1[i]);
129-
}
121+
s = hash_mix_int(s, tag);
122+
let v = size - 1 | 0;
123+
let block = v < num ? v : num;
124+
for (let i = 0; i <= block; ++i) {
125+
push_back(queue, obj$1[i]);
130126
}
131127
} else {
132128
let size$1 = (function(obj,cb){

lib/js/Primitive_object.js

-21
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,5 @@
11
'use strict';
22

3-
let Primitive_int = require("./Primitive_int.js");
43
let Primitive_bool = require("./Primitive_bool.js");
54
let Primitive_float = require("./Primitive_float.js");
65
let Primitive_string = require("./Primitive_string.js");
@@ -107,16 +106,6 @@ function compare(a, b) {
107106
}
108107
let tag_a = a.TAG;
109108
let tag_b = b.TAG;
110-
if (tag_a === 248) {
111-
return Primitive_int.compare(a[1], b[1]);
112-
}
113-
if (tag_a === 251) {
114-
throw {
115-
RE_EXN_ID: "Invalid_argument",
116-
_1: "equal: abstract value",
117-
Error: new Error()
118-
};
119-
}
120109
if (tag_a !== tag_b) {
121110
if (tag_a < tag_b) {
122111
return -1;
@@ -247,16 +236,6 @@ function equal(a, b) {
247236
}
248237
let tag_a = a.TAG;
249238
let tag_b = b.TAG;
250-
if (tag_a === 248) {
251-
return a[1] === b[1];
252-
}
253-
if (tag_a === 251) {
254-
throw {
255-
RE_EXN_ID: "Invalid_argument",
256-
_1: "equal: abstract value",
257-
Error: new Error()
258-
};
259-
}
260239
if (tag_a !== tag_b) {
261240
return false;
262241
}

runtime/Primitive_hash.res

+10-14
Original file line numberDiff line numberDiff line change
@@ -174,22 +174,18 @@ let hash = (count: int, _limit, seed: int, obj: Obj.t): int => {
174174
if size != 0 {
175175
let obj_tag = Obj.tag(obj)
176176
let tag = lor(lsl(size, 10), obj_tag)
177-
if obj_tag == 248 /* Obj.object_tag */ {
178-
s.contents = hash_mix_int(s.contents, (Obj.obj(Obj.getField(obj, 1)): int))
179-
} else {
180-
s.contents = hash_mix_int(s.contents, tag)
181-
let block = {
182-
let v = size - 1
183-
if v < num.contents {
184-
v
185-
} else {
186-
num.contents
187-
}
188-
}
189-
for i in 0 to block {
190-
push_back(queue, Obj.getField(obj, i))
177+
s.contents = hash_mix_int(s.contents, tag)
178+
let block = {
179+
let v = size - 1
180+
if v < num.contents {
181+
v
182+
} else {
183+
num.contents
191184
}
192185
}
186+
for i in 0 to block {
187+
push_back(queue, Obj.getField(obj, i))
188+
}
193189
} else {
194190
let size: int = %raw(`function(obj,cb){
195191
var size = 0

runtime/Primitive_object.res

+2-11
Original file line numberDiff line numberDiff line change
@@ -32,7 +32,6 @@ type t = Primitive_object_extern.t
3232
let repr = Primitive_object_extern.repr
3333
let magic = Primitive_object_extern.magic
3434
let tag = Primitive_object_extern.tag
35-
let field = Primitive_object_extern.getField
3635
let size = Primitive_object_extern.size
3736

3837
module O = {
@@ -145,11 +144,7 @@ let rec compare = (a: t, b: t): int =>
145144
} else {
146145
let tag_a = tag(a)
147146
let tag_b = tag(b)
148-
if tag_a == 248 /* object/exception */ {
149-
Pervasives.compare((magic(field(a, 1)): int), magic(field(b, 1)))
150-
} else if tag_a == 251 /* abstract_tag */ {
151-
raise(Invalid_argument("equal: abstract value"))
152-
} else if tag_a != tag_b {
147+
if tag_a != tag_b {
153148
if tag_a < tag_b {
154149
-1
155150
} else {
@@ -277,11 +272,7 @@ let rec equal = (a: t, b: t): bool =>
277272
/* [a] [b] could not be null, so it can not raise */
278273
let tag_a = tag(a)
279274
let tag_b = tag(b)
280-
if tag_a == 248 /* object/exception */ {
281-
magic(field(a, 1)) === magic(field(b, 1))
282-
} else if tag_a == 251 /* abstract_tag */ {
283-
raise(Invalid_argument("equal: abstract value"))
284-
} else if tag_a != tag_b {
275+
if tag_a != tag_b {
285276
false
286277
} else {
287278
let len_a = size(a)

0 commit comments

Comments
 (0)