@@ -4,14 +4,14 @@ use compile_state::state::SloshVm;
4
4
use shell:: builtins:: expand_tilde;
5
5
use sl_compiler:: load_eval:: apply_callable;
6
6
use slvm:: { from_i56, VMError , VMResult , Value } ;
7
- use std:: collections:: HashMap ;
8
7
use std:: path:: { Path , PathBuf } ;
9
8
use std:: { env, fs, io} ;
10
9
11
10
use glob:: glob;
12
11
13
12
use bridge_adapters:: add_builtin;
14
13
use same_file;
14
+ use slvm:: vm_hashmap:: VMHashMap ;
15
15
use std:: fs:: { File , Metadata } ;
16
16
use std:: time:: SystemTime ;
17
17
use walkdir:: { DirEntry , WalkDir } ;
@@ -354,19 +354,18 @@ fn is_same_file(path_0: &str, path_1: &str) -> VMResult<Value> {
354
354
/// (defn create-in (in-dir num-files visited)
355
355
/// (dotimes-i i num-files
356
356
/// (let (tmp-file (get-temp-file in-dir))
357
- /// (set! visited.~tmp-file nil ))))
357
+ /// (set! visited.~tmp-file #f ))))
358
358
///
359
359
/// (defn create-dir (tmp-dir visited)
360
360
/// (let (new-tmp (get-temp tmp-dir))
361
361
/// (set! visited.~new-tmp #f)
362
362
/// new-tmp))
363
363
///
364
- /// #| XXXX Fix hashmaps so strings and string consts hash the same then restore this testing...
365
364
/// (with-temp (fn (root-tmp-dir)
366
365
/// (let (tmp-file-count 5
367
- /// visited {})
368
- /// (def cnt 0)
369
- /// (set! visited.~root-tmp-dir nil )
366
+ /// visited {}
367
+ /// cnt 0)
368
+ /// (set! visited.~root-tmp-dir #f )
370
369
/// (create-in root-tmp-dir tmp-file-count visited)
371
370
/// (let (tmp-dir (create-dir root-tmp-dir visited)
372
371
/// new-files (create-in tmp-dir tmp-file-count visited)
@@ -378,47 +377,46 @@ fn is_same_file(path_0: &str, path_1: &str) -> VMResult<Value> {
378
377
/// (set! visited.~x #t)
379
378
/// (inc! cnt))))
380
379
/// (test::assert-equal (+ 3 (* 3 tmp-file-count)) cnt)
381
- /// (test::assert-equal (+ 3 (* 3 tmp-file-count)) (len (hash-keys visited) ))
380
+ /// (test::assert-equal (+ 3 (* 3 tmp-file-count)) (len visited))
382
381
/// (seq-for key in (hash-keys visited) (test::assert-true visited.~key))))))
383
382
///
384
383
/// (with-temp (fn (root-tmp-dir)
385
384
/// (let (tmp-file-count 5
386
- /// visited {})
387
- /// (def cnt 0)
388
- /// (set! visited.~root-tmp-dir nil )
385
+ /// visited {}
386
+ /// cnt 0)
387
+ /// (set! visited.~root-tmp-dir #f )
389
388
/// (create-in root-tmp-dir tmp-file-count visited)
390
389
/// (let (tmp-dir (create-dir root-tmp-dir visited)
391
- /// new-files (create-in tmp-dir tmp-file-count visited)
392
- /// tmp-dir (create-dir tmp-dir {})
393
- /// new-files (create-in tmp-dir tmp-file-count {}))
390
+ /// new-files (create-in tmp-dir tmp-file-count visited)
391
+ /// tmp-dir (create-dir tmp-dir {})
392
+ /// new-files (do (set! visited.~tmp-dir #f)( create-in tmp-dir tmp-file-count {}) ))
394
393
/// (fs-crawl root-tmp-dir (fn (x)
395
394
/// (let (file visited.~x)
396
395
/// (test::assert-true (not file)) ;; also tests double counting
397
396
/// (set! visited.~x #t)
398
397
/// (inc! cnt))) 2)
399
398
/// (test::assert-equal (+ 3 (* 2 tmp-file-count)) cnt)
400
- /// (test::assert-equal (+ 3 (* 2 tmp-file-count)) (length (hash-keys visited) ))
401
- /// (seq-for key in (hash-keys visited) (test::assert-true visited.~key)))))
399
+ /// (test::assert-equal (+ 3 (* 2 tmp-file-count)) (len visited))
400
+ /// (seq-for key in (hash-keys visited) (test::assert-true visited.~key))))))
402
401
///
403
402
/// (with-temp (fn (root-tmp-dir)
404
403
/// (let (tmp-file-count 5
405
- /// visited {})
406
- /// (def cnt 0)
407
- /// (set! visited.~root-tmp-dir nil )
404
+ /// visited {}
405
+ /// cnt 0)
406
+ /// (set! visited.~root-tmp-dir #f )
408
407
/// (create-in root-tmp-dir tmp-file-count visited)
409
408
/// (let (tmp-dir (create-dir root-tmp-dir {})
410
- /// new-files (create-in tmp-dir tmp-file-count {})
411
- /// tmp-dir (create-dir tmp-dir {})
412
- /// new-files (create-in tmp-dir tmp-file-count {}))
409
+ /// new-files (do (set! visited.~tmp-dir #f)( create-in tmp-dir tmp-file-count {}) )
410
+ /// tmp-dir (create-dir tmp-dir {})
411
+ /// new-files (create-in tmp-dir tmp-file-count {}))
413
412
/// (fs-crawl root-tmp-dir (fn (x)
414
413
/// (let (file visited.~x)
415
414
/// (test::assert-true (not file)) ;; also tests double counting
416
415
/// (set! visited.~x #t)
417
416
/// (inc! cnt))) 1)
418
417
/// (test::assert-equal (+ 2 tmp-file-count) cnt)
419
- /// (test::assert-equal (+ 2 tmp-file-count) (length (hash-keys visited)))
420
- /// (seq-for key in (hash-keys visited) (test::assert-true visited.~key)))))
421
- /// |#
418
+ /// (test::assert-equal (+ 2 tmp-file-count) (len visited))
419
+ /// (seq-for key in (hash-keys visited) (test::assert-true visited.~key))))))
422
420
#[ sl_sh_fn( fn_name = "fs-crawl" , takes_env = true ) ]
423
421
fn fs_crawl (
424
422
environment : & mut SloshVm ,
@@ -619,7 +617,7 @@ fn fs_meta(vm: &mut SloshVm, registers: &[Value]) -> VMResult<Value> {
619
617
let name = string. pretty_value ( vm) ;
620
618
let file = File :: open ( name) ?;
621
619
let meta = file. metadata ( ) ?;
622
- let mut map = HashMap :: new ( ) ;
620
+ let mut map = VMHashMap :: new ( ) ;
623
621
let ftype = if meta. is_dir ( ) {
624
622
"dir"
625
623
} else if meta. is_file ( ) {
@@ -634,15 +632,14 @@ fn fs_meta(vm: &mut SloshVm, registers: &[Value]) -> VMResult<Value> {
634
632
} else {
635
633
Value :: False
636
634
} ;
637
- map. insert ( Value :: Keyword ( vm. intern_static ( "readonly" ) ) , ro) ;
638
- map. insert (
639
- Value :: Keyword ( vm. intern_static ( "len" ) ) ,
640
- ( meta. len ( ) as i64 ) . into ( ) ,
641
- ) ;
642
- map. insert (
643
- Value :: Keyword ( vm. intern_static ( "type" ) ) ,
644
- Value :: Keyword ( vm. intern_static ( ftype) ) ,
645
- ) ;
635
+ let key = Value :: Keyword ( vm. intern_static ( "readonly" ) ) ;
636
+ map. insert ( vm, key, ro) ;
637
+ let key = Value :: Keyword ( vm. intern_static ( "len" ) ) ;
638
+ let val: Value = ( meta. len ( ) as i64 ) . into ( ) ;
639
+ map. insert ( vm, key, val) ;
640
+ let key = Value :: Keyword ( vm. intern_static ( "type" ) ) ;
641
+ let val = Value :: Keyword ( vm. intern_static ( ftype) ) ;
642
+ map. insert ( vm, key, val) ;
646
643
// XXX TODO- include times.
647
644
Ok ( vm. alloc_map ( map) )
648
645
} else {
0 commit comments