@@ -132,8 +132,10 @@ load-header: function/with [
132
132
set /any [hdr: rest: ] transcode/next/error rest none ; get header block
133
133
not block? :hdr [return 'no-header] ; header block is incomplete
134
134
not attempt [hdr: construct /with :hdr system/standard/header ][return 'bad-header]
135
+ word? : hdr/options [hdr/options: to block! : hdr/options ]
135
136
not any [block? : hdr/options none? : hdr/options ][return 'bad-header]
136
137
not any [binary? : hdr/checksum none? : hdr/checksum ][return 'bad-checksum]
138
+ not tuple? : hdr/version [hdr/version: none]
137
139
find hdr/options 'content [repend hdr ['content data]] ; as of start of header
138
140
13 = rest/1 [rest: next rest] ; skip CR
139
141
10 = rest/1 [rest: next rest] ; skip LF
@@ -241,7 +243,9 @@ load-boot-exts: function [
241
243
not delay [hdr: spec-of mod: make module! load-ext-module ext]
242
244
; NOTE: This will error out if the code contains commands but
243
245
; no extension dispatcher (call) has been provided.
244
- hdr/name [reduce /into [hdr/name mod if hdr/checksum [copy hdr/checksum ]] system/modules ]
246
+ hdr/name [
247
+ repend system/modules [hdr/name mod]
248
+ ]
245
249
]
246
250
case [
247
251
not module? mod none
@@ -461,9 +465,10 @@ load-module: function [
461
465
case /all [
462
466
as [cause-error 'script 'bad-refine /as ] ; no renaming
463
467
; Return none if no module of that name found
464
- not tmp: find /skip system/modules source 3 [return none]
465
- set [ mod: modsum: ] next tmp none ; get the module
468
+ not mod: select system/modules source [return none]
469
+
466
470
;assert/type [mod [module! block!] modsum [binary! none!]] none
471
+
467
472
; If no further processing is needed, shortcut return
468
473
all [not version not check any [delay module? :mod ]] [
469
474
return reduce [source if module? :mod [mod]]
@@ -497,12 +502,14 @@ load-module: function [
497
502
]
498
503
]
499
504
module? source [ ; see if the same module is already in the list
500
- if tmp: find/skip next system/modules mod: source 3 [
501
- if as [cause-error 'script 'bad-refine /as ] ; already imported
502
- if all [ ; not /version, not /check, same as top module of that name
503
- not version not check same? mod select system/modules pick tmp 0
504
- ] [return copy/part back tmp 2 ]
505
- set [mod: modsum: ] tmp
505
+ mod: source
506
+ foreach [n m] system/modules [
507
+ if source = m [
508
+ if as [cause-error 'script 'bad-refine /as ] ; already imported
509
+ set mod: m
510
+ hdr: spec-of mod
511
+ return reduce [hdr/name mod]
512
+ ]
506
513
]
507
514
]
508
515
block? source [
@@ -566,15 +573,17 @@ load-module: function [
566
573
; See if it's there already, or there is something more recent
567
574
all [
568
575
override?: not no-lib ; set to false later if existing module is used
569
- set [ name0: mod0: sum0: ] pos: find /skip system/modules name 3
576
+ mod0: select system/modules name
570
577
] [
571
578
; Get existing module's info
572
579
case /all [
573
580
module? :mod0 [hdr0: spec-of mod0] ; final header
574
- block? :mod0 [hdr0: first mod0] ; cached preparsed header
581
+ block? :mod0 [hdr0: first mod0] ; cached preparsed header
575
582
;assert/type [name0 word! hdr0 object! sum0 [binary! none!]] none
576
- not tuple? set /any 'ver0 : hdr0/version [ver0: 0.0.0]
583
+ ; not tuple? set/any 'ver0 :hdr0/version [ver0: 0.0.0] ;@@ remove?
577
584
]
585
+ ver0: any [hdr0/version 0.0.0]
586
+ sum0: hdr0/checksum
578
587
; Compare it to the module we want to load
579
588
case [
580
589
same? mod mod0 [override?: not any [delay module? mod]] ; here already
@@ -626,9 +635,8 @@ load-module: function [
626
635
]
627
636
628
637
all [not no-lib override?] [
638
+ repend system/modules [name mod]
629
639
case /all [
630
- pos [pos/2: mod pos/3: modsum] ; replace delayed module
631
- not pos [reduce /into [name mod modsum] system/modules ]
632
640
all [module? mod not mixin? hdr block? select hdr 'exports] [
633
641
resolve/extend/only lib mod hdr/exports ; no-op if empty
634
642
]
0 commit comments