@@ -291,8 +291,6 @@ let link' ~export_runtime ~standalone ~link (js : Javascript.statement_list) :
291
291
let check_missing = standalone in
292
292
let t = Timer. make () in
293
293
if times () then Format. eprintf " Start Linking...@." ;
294
- let traverse = new Js_traverse. free in
295
- let js = traverse#program js in
296
294
let js =
297
295
if mark_start_of_generated_code ()
298
296
then
@@ -311,20 +309,10 @@ let link' ~export_runtime ~standalone ~link (js : Javascript.statement_list) :
311
309
| `All_from from -> Linker. list_all ~from ()
312
310
| `No -> StringSet. empty
313
311
| `Needed ->
314
- let free = traverse#get_free in
315
- let free : StringSet.t =
316
- Javascript.IdentSet. fold
317
- (fun x acc ->
318
- match x with
319
- | V _ ->
320
- (* This is an error. We don't complain here as we want
321
- to be able to name other variable to make it
322
- easier to spot the problematic ones *)
323
- acc
324
- | S { name = Utf8 x ; _ } -> StringSet. add x acc)
325
- free
326
- StringSet. empty
327
- in
312
+ let free = ref StringSet. empty in
313
+ let o = new Js_traverse. fast_freevar (fun s -> free := StringSet. add s ! free) in
314
+ o#program js;
315
+ let free = ! free in
328
316
let prim = Primitive. get_external () in
329
317
let all_external = StringSet. union prim all_provided in
330
318
StringSet. inter free all_external
@@ -423,18 +411,10 @@ let link' ~export_runtime ~standalone ~link (js : Javascript.statement_list) :
423
411
let check_js js =
424
412
let t = Timer. make () in
425
413
if times () then Format. eprintf " Start Checks...@." ;
426
- let traverse = new Js_traverse. free in
427
- let js = traverse#program js in
428
- let free = traverse#get_free in
429
- let free : StringSet.t =
430
- Javascript.IdentSet. fold
431
- (fun x acc ->
432
- match x with
433
- | V _ -> assert false
434
- | S { name = Utf8 x ; _ } -> StringSet. add x acc)
435
- free
436
- StringSet. empty
437
- in
414
+ let free = ref StringSet. empty in
415
+ let o = new Js_traverse. fast_freevar (fun s -> free := StringSet. add s ! free) in
416
+ o#program js;
417
+ let free = ! free in
438
418
let prim = Primitive. get_external () in
439
419
let prov = Linker. list_all () in
440
420
let all_external = StringSet. union prim prov in
@@ -469,19 +449,8 @@ let name_variables js =
469
449
js)
470
450
else js
471
451
in
472
- let traverse = new Js_traverse. free in
473
- let js = traverse#program js in
474
- let free = traverse#get_free in
475
- Javascript.IdentSet. iter
476
- (fun x ->
477
- match x with
478
- | V _ ->
479
- (* This is an error. We don't complain here as we want
480
- to be able to name other variable to make it
481
- easier to spot the problematic ones *)
482
- ()
483
- | S { name = Utf8 x ; _ } -> Var_printer. add_reserved x)
484
- free;
452
+ let o = new Js_traverse. fast_freevar (fun s -> Var_printer. add_reserved s) in
453
+ o#program js;
485
454
let js = Js_assign. program js in
486
455
if times () then Format. eprintf " coloring: %a@." Timer. print t;
487
456
js
@@ -520,13 +489,12 @@ let pack ~wrap_with_fun ~standalone { Linker.runtime_code = js; always_required_
520
489
let wrap_in_iife ~use_strict js =
521
490
let var ident e = J. variable_declaration [ J. ident ident, (e, J. N ) ], J. N in
522
491
let expr e = J. Expression_statement e, J. N in
523
- let freenames =
524
- let o = new Js_traverse. free in
525
- let (_ : J.program ) = o#program js in
526
- o#get_free
527
- in
492
+ let free = ref StringSet. empty in
493
+ let o = new Js_traverse. fast_freevar (fun s -> free := StringSet. add s ! free) in
494
+ o#program js;
495
+ let freenames = ! free in
528
496
let export_shim js =
529
- if J.IdentSet. mem ( J. ident Global_constant. exports_) freenames
497
+ if StringSet. mem Global_constant. exports freenames
530
498
then
531
499
if should_export wrap_with_fun
532
500
then var Global_constant. exports_ (J. EObj [] ) :: js
@@ -544,7 +512,7 @@ let pack ~wrap_with_fun ~standalone { Linker.runtime_code = js; always_required_
544
512
else js
545
513
in
546
514
let old_global_object_shim js =
547
- if J.IdentSet. mem ( J. ident Global_constant. old_global_object_) freenames
515
+ if StringSet. mem Global_constant. old_global_object freenames
548
516
then
549
517
var
550
518
Global_constant. old_global_object_
0 commit comments