PageRenderTime 41ms CodeModel.GetById 36ms app.highlight 4ms RepoModel.GetById 0ms app.codeStats 0ms

/src/boot/larceny/larceny.scm

http://github.com/dharmatech/abstracting
Scheme | 98 lines | 43 code | 42 blank | 13 comment | 0 complexity | 90f2a85ddff5c8ce97ad42fecad44632 MD5 | raw file
Possible License(s): BSD-3-Clause
 1
 2;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
 3
 4(import (rnrs)
 5        (err5rs load)
 6        (primitives current-directory))
 7
 8(import (srfi :1))
 9
10;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
11
12(define scheme-implementation 'larceny)
13
14;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
15
16(define (print . elts) (for-each display elts))
17
18;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
19
20(define *roots* #f)
21
22(define *loaded* '())
23
24(define *included* '())
25
26;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
27
28(define (directory-contains file)
29  (lambda (dir)
30    (file-exists?
31     (string-append dir "/" file))))
32
33;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
34
35(define (resolve lib)
36  (let ((root (find (directory-contains lib) *roots*)))
37    (if root (string-append root "/" lib) #f)))
38
39;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
40
41(define (load-lib lib)
42  
43  (let ((dir (resolve lib)))
44
45    (let ((import-file (string-append dir "/import")))
46
47      (if (file-exists? import-file)
48        
49          (let ((import-list (call-with-input-file import-file read)))
50
51            (for-each require-lib import-list))))
52
53    (let ((include-file (string-append dir "/include")))
54
55      (if (file-exists? include-file)
56        
57          (let ((include-list (call-with-input-file include-file read)))
58
59            (for-each require-lib include-list))))
60
61    (load (string-append dir "/source.scm"))))
62
63;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
64
65(define (require-lib dir)
66  (cond ((not (member dir *loaded*))
67         (print "Loading lib " dir "\n")
68         (load-lib dir)
69         (set! *loaded* (cons dir *loaded*)))))
70
71;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
72
73(load "src/boot/boot.scm")
74
75;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
76
77(define inexact->exact exact)
78
79(define exact->inexact inexact)
80
81(import (primitives modulo))
82
83;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
84
85(import (primitives time))
86
87;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
88
89(import (srfi :19))
90
91(define (current-time-in-nanoseconds)
92  (let ((val (current-time)))
93    (+ (* (time-second val) 1000000000)
94       (time-nanosecond val))))
95
96;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
97
98(print "Abstracting is loaded\n")