16
16
17
17
open ! Stdlib
18
18
19
- [@@@ ocaml.flambda_o3]
20
-
21
19
[@@@ ocaml.inline 0 ]
22
20
[@@@ ocaml.afl_inst_ratio 0 ]
23
21
24
- open Obj
22
+ let magic x = Sys. opaque_identity (Obj. magic x)
23
+ let of_repr x = Sys. opaque_identity (Obj. obj x)
24
+
25
+ let repr = Obj. repr
26
+ let dup = Obj. dup
27
+ let new_block = Obj. new_block
28
+ let set_field = Obj. set_field
29
+
30
+ let set_object_field (arr : _ array ) field new_value =
31
+ Array. unsafe_set (Sys. opaque_identity arr) field new_value
32
+
33
+ let get_object_field (arr : _ array ) field =
34
+ Array. unsafe_get (Sys. opaque_identity arr) field
25
35
26
36
(* *** Object representation ****)
27
37
@@ -30,7 +40,7 @@ external set_id: 'a -> 'a = "caml_set_oo_id" [@@noalloc]
30
40
(* *** Object copy ****)
31
41
32
42
let copy o =
33
- let o = (Obj. obj ( Obj. dup (Obj. repr o))) in
43
+ let o = (of_repr ( dup (repr o))) in
34
44
set_id o
35
45
36
46
(* *** Compression options ****)
@@ -126,7 +136,7 @@ let dummy_table =
126
136
let table_count = ref 0
127
137
128
138
(* dummy_met should be a pointer, so use an atom *)
129
- let dummy_met : item = obj ( Obj. new_block 0 0 )
139
+ let dummy_met : item = of_repr ( new_block 0 0 )
130
140
(* if debugging is needed, this could be a good idea: *)
131
141
(* let dummy_met () = failwith "Undefined method" *)
132
142
@@ -271,7 +281,7 @@ let new_variable table name =
271
281
index
272
282
273
283
let to_array arr =
274
- if arr = Obj. magic 0 then [||] else arr
284
+ if arr = magic 0 then [||] else arr
275
285
276
286
let new_methods_variables table meths vals =
277
287
let meths = to_array meths in
@@ -326,7 +336,7 @@ let init_class table =
326
336
let inherits cla vals virt_meths concr_meths (_ , super , _ , env ) top =
327
337
narrow cla vals virt_meths concr_meths;
328
338
let init =
329
- if top then super cla env else Obj. repr (super cla) in
339
+ if top then super cla env else repr (super cla) in
330
340
widen cla;
331
341
Array. concat
332
342
[[| repr init |];
@@ -339,7 +349,7 @@ let make_class pub_meths class_init =
339
349
let table = create_table pub_meths in
340
350
let env_init = class_init table in
341
351
init_class table;
342
- (env_init (Obj. repr 0 ), class_init, env_init, Obj. repr 0 )
352
+ (env_init (repr 0 ), class_init, env_init, repr 0 )
343
353
344
354
type init_table = { mutable env_init : t ; mutable class_init : table -> t }
345
355
@@ -352,24 +362,24 @@ let make_class_store pub_meths class_init init_table =
352
362
353
363
let dummy_class loc =
354
364
let undef = fun _ -> raise (Undefined_recursive_module loc) in
355
- (Obj. magic undef, undef, undef, Obj. repr 0 )
365
+ (magic undef, undef, undef, repr 0 )
356
366
357
367
(* *** Objects ****)
358
368
359
369
let create_object table =
360
370
(* XXX Appel de [obj_block] | Call to [obj_block] *)
361
- let obj = Obj. new_block Obj. object_tag table.size in
371
+ let obj = new_block Obj. object_tag table.size in
362
372
(* XXX Appel de [caml_modify] | Call to [caml_modify] *)
363
- Obj. set_field obj 0 (Obj. repr table.methods);
364
- Obj. obj (set_id obj)
373
+ set_field obj 0 (repr table.methods);
374
+ of_repr (set_id obj)
365
375
366
376
let create_object_opt obj_0 table =
367
- if (Obj. magic obj_0 : bool ) then obj_0 else begin
377
+ if (magic obj_0 : bool ) then obj_0 else begin
368
378
(* XXX Appel de [obj_block] | Call to [obj_block] *)
369
- let obj = Obj. new_block Obj. object_tag table.size in
379
+ let obj = new_block Obj. object_tag table.size in
370
380
(* XXX Appel de [caml_modify] | Call to [caml_modify] *)
371
- Obj. set_field obj 0 (Obj. repr table.methods);
372
- Obj. obj (set_id obj)
381
+ set_field obj 0 (repr table.methods);
382
+ of_repr (set_id obj)
373
383
end
374
384
375
385
let rec iter_f obj =
@@ -383,14 +393,14 @@ let run_initializers obj table =
383
393
iter_f obj inits
384
394
385
395
let run_initializers_opt obj_0 obj table =
386
- if (Obj. magic obj_0 : bool ) then obj else begin
396
+ if (magic obj_0 : bool ) then obj else begin
387
397
let inits = table.initializers in
388
398
if inits <> [] then iter_f obj inits;
389
399
obj
390
400
end
391
401
392
402
let create_object_and_run_initializers obj_0 table =
393
- if (Obj. magic obj_0 : bool ) then obj_0 else begin
403
+ if (magic obj_0 : bool ) then obj_0 else begin
394
404
let obj = create_object table in
395
405
run_initializers obj table;
396
406
obj
@@ -429,7 +439,8 @@ let get_next = function
429
439
| Cons tables -> tables.next
430
440
431
441
let build_path n keys tables =
432
- let res = Cons {key = Obj. magic 0 ; data = Empty ; next = Empty } in
442
+ let obj_zero = magic 0 in
443
+ let res = Cons {key = obj_zero; data = Empty ; next = Empty } in
433
444
let r = ref res in
434
445
for i = 0 to n do
435
446
r := Cons {key = keys.(i); data = ! r; next = Empty }
@@ -466,59 +477,59 @@ let lookup_tables root keys =
466
477
(* *** builtin methods ****)
467
478
468
479
let get_const x = ret (fun _obj -> x)
469
- let get_var n = ret (fun obj -> Array. unsafe_get obj n)
480
+ let get_var n = ret (fun obj -> get_object_field obj n)
470
481
let get_env e n =
471
482
ret (fun obj ->
472
- Array. unsafe_get ( Obj. magic (Array. unsafe_get obj e) : obj) n)
483
+ get_object_field ( magic (get_object_field obj e) : obj) n)
473
484
let get_meth n = ret (fun obj -> sendself obj n)
474
- let set_var n = ret (fun obj x -> Array. unsafe_set obj n x)
485
+ let set_var n = ret (fun obj x -> set_object_field obj n x)
475
486
let app_const f x = ret (fun _obj -> f x)
476
- let app_var f n = ret (fun obj -> f (Array. unsafe_get obj n))
487
+ let app_var f n = ret (fun obj -> f (get_object_field obj n))
477
488
let app_env f e n =
478
489
ret (fun obj ->
479
- f (Array. unsafe_get ( Obj. magic (Array. unsafe_get obj e) : obj) n))
490
+ f (get_object_field ( magic (get_object_field obj e) : obj) n))
480
491
let app_meth f n = ret (fun obj -> f (sendself obj n))
481
492
let app_const_const f x y = ret (fun _obj -> f x y)
482
- let app_const_var f x n = ret (fun obj -> f x (Array. unsafe_get obj n))
493
+ let app_const_var f x n = ret (fun obj -> f x (get_object_field obj n))
483
494
let app_const_meth f x n = ret (fun obj -> f x (sendself obj n))
484
- let app_var_const f n x = ret (fun obj -> f (Array. unsafe_get obj n) x)
495
+ let app_var_const f n x = ret (fun obj -> f (get_object_field obj n) x)
485
496
let app_meth_const f n x = ret (fun obj -> f (sendself obj n) x)
486
497
let app_const_env f x e n =
487
498
ret (fun obj ->
488
- f x (Array. unsafe_get ( Obj. magic (Array. unsafe_get obj e) : obj) n))
499
+ f x (get_object_field ( magic (get_object_field obj e) : obj) n))
489
500
let app_env_const f e n x =
490
501
ret (fun obj ->
491
- f (Array. unsafe_get ( Obj. magic (Array. unsafe_get obj e) : obj) n) x)
502
+ f (get_object_field ( magic (get_object_field obj e) : obj) n) x)
492
503
let meth_app_const n x = ret (fun obj -> (sendself obj n : _ -> _ ) x)
493
504
let meth_app_var n m =
494
- ret (fun obj -> (sendself obj n : _ -> _ ) (Array. unsafe_get obj m))
505
+ ret (fun obj -> (sendself obj n : _ -> _ ) (get_object_field obj m))
495
506
let meth_app_env n e m =
496
507
ret (fun obj -> (sendself obj n : _ -> _ )
497
- (Array. unsafe_get ( Obj. magic (Array. unsafe_get obj e) : obj) m))
508
+ (get_object_field ( magic (get_object_field obj e) : obj) m))
498
509
let meth_app_meth n m =
499
510
ret (fun obj -> (sendself obj n : _ -> _ ) (sendself obj m))
500
511
let send_const m x c =
501
- ret (fun obj -> sendcache x m (Array. unsafe_get obj 0 ) c)
512
+ ret (fun obj -> sendcache x m (get_object_field obj 0 ) c)
502
513
let send_var m n c =
503
514
ret (fun obj ->
504
- sendcache (Obj. magic (Array. unsafe_get obj n) : obj) m
505
- (Array. unsafe_get obj 0 ) c)
515
+ sendcache (magic (get_object_field obj n) : obj) m
516
+ (get_object_field obj 0 ) c)
506
517
let send_env m e n c =
507
518
ret (fun obj ->
508
519
sendcache
509
- (Obj. magic (Array. unsafe_get
510
- (Obj. magic (Array. unsafe_get obj e) : obj) n) : obj)
511
- m (Array. unsafe_get obj 0 ) c)
520
+ (magic (get_object_field
521
+ (magic (get_object_field obj e) : obj) n) : obj)
522
+ m (get_object_field obj 0 ) c)
512
523
let send_meth m n c =
513
524
ret (fun obj ->
514
- sendcache (sendself obj n) m (Array. unsafe_get obj 0 ) c)
525
+ sendcache (sendself obj n) m (get_object_field obj 0 ) c)
515
526
let new_cache table =
516
527
let n = new_method table in
517
528
let n =
518
529
if n mod 2 = 0 || n > 2 + magic table.methods.(1 ) * 16 / Sys. word_size
519
530
then n else new_method table
520
531
in
521
- table.methods.(n) < - Obj. magic 0 ;
532
+ table.methods.(n) < - magic 0 ;
522
533
n
523
534
524
535
type impl =
0 commit comments