-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathindex.js
More file actions
35 lines (30 loc) · 1.08 KB
/
index.js
File metadata and controls
35 lines (30 loc) · 1.08 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
const fs = require ('fs')
const path = require ('path')
const environment = new (require ('./kernel/environment'))
const setSpecial = (environment, name, value) => {
environment.set ('lexical', 'datum', `*${ name }*`, environment.quote (value))
}
const lisp = file => {
file = path.resolve (file)
const code = fs.readFileSync (file, 'utf-8')
const tree = environment.interpret (environment.read (code))
return environment.closure (environment => {
setSpecial (environment, 'module', module)
setSpecial (environment, 'filename', file)
setSpecial (environment, 'dirname', path.dirname (file))
return environment.evaluate (tree)
})
}
const dialect = `${ __dirname }/dialect`
fs.readdirSync (dialect) .forEach (file => {
if (/^\./ .test (file)) {
return;
} else if (/\.lisp$/ .test (file)) {
lisp (`${ dialect }/${ file }`)
} else if (/\.js$/ .test (file)) {
require (`${ dialect }/${ file }`) (environment)
} else {
console.warn (`bad dialect source "${ file }"`)
}
})
module.exports = lisp