sibilant 0.0.1 → 0.0.2
Sign up to get free protection for your applications and to get access to all the features.
- data/README.md +8 -4
- data/js/sibilant/.gitignore +4 -0
- data/js/sibilant/.travis.yml +6 -0
- data/js/sibilant/LICENSE +20 -0
- data/js/sibilant/README.md +70 -0
- data/js/sibilant/bin/sibilant +3 -0
- data/js/sibilant/cli-help +79 -0
- data/js/sibilant/include/functional.sibilant +57 -0
- data/js/sibilant/include/macros.sibilant +374 -0
- data/js/sibilant/include/node.sibilant +2 -0
- data/js/sibilant/lib/browser.js +685 -0
- data/js/sibilant/lib/cli.js +153 -0
- data/js/sibilant/lib/options.js +232 -0
- data/js/sibilant/lib/repl.js +78 -0
- data/js/sibilant/lib/sibilant.js +688 -0
- data/js/sibilant/misc/sibilant-mode.el +129 -0
- data/js/sibilant/package.json +19 -0
- data/js/sibilant/package.sibilant +16 -0
- data/js/sibilant/public/index.html +502 -0
- data/js/sibilant/public/javascripts/browser.js +685 -0
- data/js/sibilant/public/javascripts/jquery-ui.js +392 -0
- data/js/sibilant/public/javascripts/jquery.js +154 -0
- data/js/sibilant/public/javascripts/macros.sibilant +374 -0
- data/js/sibilant/public/javascripts/sibilant.info.sibilant +77 -0
- data/js/sibilant/public/sass/_mixins.sass +98 -0
- data/js/sibilant/public/sass/sibilant.sass +156 -0
- data/js/sibilant/public/stylesheets/Anonymous_Pro-webfont.eot +0 -0
- data/js/sibilant/public/stylesheets/Anonymous_Pro-webfont.svg +241 -0
- data/js/sibilant/public/stylesheets/Anonymous_Pro-webfont.ttf +0 -0
- data/js/sibilant/public/stylesheets/Anonymous_Pro-webfont.woff +0 -0
- data/js/sibilant/public/stylesheets/sibilant.css +166 -0
- data/js/sibilant/src/browser.sibilant +45 -0
- data/js/sibilant/src/cli.sibilant +93 -0
- data/js/sibilant/src/core.sibilant +338 -0
- data/js/sibilant/src/options.sibilant +65 -0
- data/js/sibilant/src/repl.sibilant +59 -0
- data/js/sibilant/src/sibilant.sibilant +78 -0
- data/js/sibilant/test/defvar.sibilant +5 -0
- data/js/sibilant/test/includeFile1.sibilant +1 -0
- data/js/sibilant/test/includeFile2.sibilant +1 -0
- data/js/sibilant/test/node.sibilant +10 -0
- data/js/sibilant/test/slice.sibilant +3 -0
- data/js/sibilant/test/test.sibilant +464 -0
- data/js/sibilant/test/testHelper.sibilant +80 -0
- data/lib/sibilant/version.rb +1 -1
- data/sibilant.gemspec +3 -1
- metadata +44 -1
@@ -0,0 +1,338 @@
|
|
1
|
+
(set sibilant 'tokens {})
|
2
|
+
|
3
|
+
(set sibilant.tokens
|
4
|
+
'regex "(\\/(\\\\\\\/|[^\\/\\n])+\\/[glim]*)"
|
5
|
+
'comment "(;.*)"
|
6
|
+
'string "(\"(([^\"]|(\\\\\"))*[^\\\\])?\")"
|
7
|
+
'number "(-?[0-9][0-9.,]*)"
|
8
|
+
'literal "(-?[*.$a-zA-Z][*.a-zA-Z0-9-]*(\\?|!)?)"
|
9
|
+
'special "([&']?)"
|
10
|
+
'other-char "([><=!\\+\\/\\*-]+)"
|
11
|
+
'open-paren "(\\()"
|
12
|
+
'special-open-paren "('?\\()"
|
13
|
+
'close-paren "(\\))"
|
14
|
+
'alternative-parens "\\{|\\[|\\}|\\]"
|
15
|
+
'special-literal (concat sibilant.tokens.special
|
16
|
+
sibilant.tokens.literal))
|
17
|
+
|
18
|
+
(set sibilant 'token-precedence
|
19
|
+
'( regex comment string number special-literal other-char
|
20
|
+
special-open-paren close-paren alternative-parens))
|
21
|
+
|
22
|
+
(defvar tokenize
|
23
|
+
(setf sibilant.tokenize
|
24
|
+
(lambda (string)
|
25
|
+
(defvar tokens []
|
26
|
+
parse-stack [tokens]
|
27
|
+
specials [])
|
28
|
+
|
29
|
+
(defun accept-token (token)
|
30
|
+
(send (get parse-stack 0) push token))
|
31
|
+
|
32
|
+
(defun increase-nesting ()
|
33
|
+
(defvar new-arr [])
|
34
|
+
(accept-token new-arr)
|
35
|
+
(parse-stack.unshift new-arr))
|
36
|
+
|
37
|
+
(defun decrease-nesting ()
|
38
|
+
(specials.shift)
|
39
|
+
(parse-stack.shift)
|
40
|
+
(when (zero? parse-stack.length)
|
41
|
+
(throw (concat "unbalanced parens:\n"
|
42
|
+
(call inspect parse-stack)))))
|
43
|
+
|
44
|
+
(defun handle-token (token)
|
45
|
+
(defvar special (first token)
|
46
|
+
token token)
|
47
|
+
|
48
|
+
(if (= special "'")
|
49
|
+
(progn
|
50
|
+
(setf token (token.slice 1))
|
51
|
+
(increase-nesting)
|
52
|
+
(accept-token 'quote))
|
53
|
+
(setf special false))
|
54
|
+
|
55
|
+
(specials.unshift (as-boolean special))
|
56
|
+
|
57
|
+
(switch token
|
58
|
+
("(" (increase-nesting))
|
59
|
+
(("]" "}" ")") (decrease-nesting))
|
60
|
+
|
61
|
+
("{" (increase-nesting) (accept-token 'hash))
|
62
|
+
("[" (increase-nesting) (accept-token 'list))
|
63
|
+
|
64
|
+
(default
|
65
|
+
(if (token.match (regex (concat "^" sibilant.tokens.number "$")))
|
66
|
+
(accept-token (parse-float (token.replace (regex "," 'g) "")))
|
67
|
+
(accept-token token))))
|
68
|
+
|
69
|
+
(when (and (!= token "(")
|
70
|
+
(specials.shift))
|
71
|
+
(decrease-nesting)))
|
72
|
+
|
73
|
+
|
74
|
+
|
75
|
+
(defvar ordered-regexen (map sibilant.token-precedence
|
76
|
+
(lambda (x) (get sibilant.tokens x)))
|
77
|
+
master-regex (regex (join "|" ordered-regexen) 'g))
|
78
|
+
|
79
|
+
(chain string
|
80
|
+
(match master-regex)
|
81
|
+
(for-each handle-token))
|
82
|
+
|
83
|
+
(when (> parse-stack.length 1)
|
84
|
+
(error "unexpected EOF, probably missing a )\n"
|
85
|
+
(call inspect (first parse-stack))))
|
86
|
+
tokens)))
|
87
|
+
|
88
|
+
(defun indent (&rest args)
|
89
|
+
(concat
|
90
|
+
(chain (compact args)
|
91
|
+
(join "\n")
|
92
|
+
(replace /^/ "\n")
|
93
|
+
(replace /\n/g "\n "))
|
94
|
+
"\n"))
|
95
|
+
|
96
|
+
(defun construct-hash (array-of-arrays)
|
97
|
+
(inject {} array-of-arrays
|
98
|
+
(lambda (object item)
|
99
|
+
(set object (first item) (get object (second item)))
|
100
|
+
object)))
|
101
|
+
|
102
|
+
(defvar macros (hash))
|
103
|
+
(set sibilant 'macros macros)
|
104
|
+
|
105
|
+
(set macros 'return
|
106
|
+
(lambda (token)
|
107
|
+
(defvar default-return (concat "return " (translate token)))
|
108
|
+
|
109
|
+
(if (list? token)
|
110
|
+
(switch (first token)
|
111
|
+
('(return throw progn) (translate token))
|
112
|
+
('delete
|
113
|
+
(defvar delete-macro (get macros 'delete))
|
114
|
+
(if (< token.length 3) default-return
|
115
|
+
(concat (apply delete-macro (token.slice 1 -1))
|
116
|
+
"\nreturn "
|
117
|
+
(delete-macro (last token)))))
|
118
|
+
('setf
|
119
|
+
(if (< token.length 4) default-return
|
120
|
+
(concat (apply macros.setf
|
121
|
+
(token.slice 1 (- token.length 2)))
|
122
|
+
"\nreturn "
|
123
|
+
(apply macros.setf (token.slice -2)))))
|
124
|
+
('set
|
125
|
+
(if (< token.length 5) default-return
|
126
|
+
(progn
|
127
|
+
(defvar obj (second token)
|
128
|
+
non-return-part (token.slice 2 (- token.length 2))
|
129
|
+
return-part (token.slice -2))
|
130
|
+
(non-return-part.unshift obj)
|
131
|
+
(return-part.unshift obj)
|
132
|
+
(concat (apply macros.set non-return-part)
|
133
|
+
"\nreturn "
|
134
|
+
(apply macros.set return-part)))))
|
135
|
+
(default default-return))
|
136
|
+
default-return)))
|
137
|
+
|
138
|
+
(defun as-statement (string)
|
139
|
+
(chain string (to-string) (replace /;*\s*$/ ";")))
|
140
|
+
|
141
|
+
(defun macros.statement (&rest args)
|
142
|
+
(concat (apply macros.call args) ";\n"))
|
143
|
+
|
144
|
+
(defun macros.progn (&rest body)
|
145
|
+
(defvar last-index (-math.max 0 (- body.length 1)))
|
146
|
+
|
147
|
+
(set body last-index ['return (get body last-index)])
|
148
|
+
|
149
|
+
(join "\n"
|
150
|
+
(map body (lambda (arg)
|
151
|
+
(concat (as-statement (translate arg)))))))
|
152
|
+
|
153
|
+
(defun macros.call (fn-name &rest args)
|
154
|
+
(concat (translate fn-name)
|
155
|
+
"(" (join ", " (map args translate)) ")"))
|
156
|
+
|
157
|
+
(defun macros.defun (fn-name &rest args-and-body)
|
158
|
+
(defvar fn-name-tr (translate fn-name)
|
159
|
+
start (if (match? /\./ fn-name-tr) "" "var "))
|
160
|
+
(concat start fn-name-tr " = "
|
161
|
+
(apply macros.lambda args-and-body)
|
162
|
+
";\n"))
|
163
|
+
|
164
|
+
(defun macros.defmacro (name &rest args-and-body)
|
165
|
+
(defvar js (apply macros.lambda args-and-body)
|
166
|
+
name (translate name))
|
167
|
+
(try (set macros name (eval js))
|
168
|
+
(error (concat "error in parsing macro "
|
169
|
+
name ":\n" (indent js))))
|
170
|
+
undefined)
|
171
|
+
|
172
|
+
(defun macros.concat (&rest args)
|
173
|
+
(concat "(" (join " + " (map args translate)) ")"))
|
174
|
+
|
175
|
+
(defun transform-args (arglist)
|
176
|
+
(defvar last undefined
|
177
|
+
args [])
|
178
|
+
(each (arg) arglist
|
179
|
+
(if (= (first arg) "&") (setf last (arg.slice 1))
|
180
|
+
(progn
|
181
|
+
(args.push [ (or last 'required) arg ])
|
182
|
+
(setf last null))))
|
183
|
+
|
184
|
+
(when last
|
185
|
+
(error (concat "unexpected argument modifier: " last)))
|
186
|
+
|
187
|
+
args)
|
188
|
+
|
189
|
+
|
190
|
+
(defun macros.reverse (arr)
|
191
|
+
(defvar reversed [])
|
192
|
+
(each (item) arr (reversed.unshift item))
|
193
|
+
reversed)
|
194
|
+
|
195
|
+
(defvar reverse macros.reverse)
|
196
|
+
|
197
|
+
(defun build-args-string (args rest)
|
198
|
+
(defvar args-string ""
|
199
|
+
optional-count 0)
|
200
|
+
|
201
|
+
(each (arg option-index) args
|
202
|
+
(when (= (first arg) 'optional)
|
203
|
+
(setf
|
204
|
+
args-string
|
205
|
+
(concat
|
206
|
+
args-string
|
207
|
+
"if (arguments.length < "
|
208
|
+
(- args.length optional-count) ")"
|
209
|
+
" // if " (translate (second arg)) " is missing"
|
210
|
+
(indent
|
211
|
+
(concat "var "
|
212
|
+
(chain
|
213
|
+
(map (args.slice (+ option-index 1))
|
214
|
+
(lambda (arg arg-index)
|
215
|
+
(concat (translate (second arg)) " = "
|
216
|
+
(translate (second (get args
|
217
|
+
(+ option-index
|
218
|
+
arg-index)))))))
|
219
|
+
(reverse)
|
220
|
+
(concat (concat (translate (second arg)) " = undefined"))
|
221
|
+
(join ", "))
|
222
|
+
";"))))
|
223
|
+
(incr optional-count)))
|
224
|
+
|
225
|
+
(if (defined? rest)
|
226
|
+
(concat args-string
|
227
|
+
"var " (translate (second rest))
|
228
|
+
" = Array.prototype.slice.call(arguments, "
|
229
|
+
args.length ");\n")
|
230
|
+
args-string))
|
231
|
+
|
232
|
+
(defun build-comment-string (args)
|
233
|
+
(if (empty? args) ""
|
234
|
+
(concat "// "
|
235
|
+
(join " "
|
236
|
+
(map args
|
237
|
+
(lambda (arg)
|
238
|
+
(concat (translate (second arg)) ":" (first arg))))))))
|
239
|
+
|
240
|
+
;; brain 'splode
|
241
|
+
(defun macros.lambda (arglist &rest body)
|
242
|
+
(defvar args (transform-args arglist)
|
243
|
+
rest (first (select args
|
244
|
+
(lambda (arg)
|
245
|
+
(= 'rest (first arg)))))
|
246
|
+
doc-string undefined)
|
247
|
+
|
248
|
+
(set body (- body.length 1)
|
249
|
+
[ 'return (get body (- body.length 1)) ])
|
250
|
+
|
251
|
+
(when (and (= (typeof (first body)) 'string)
|
252
|
+
(send (first body) match /^".*"$/))
|
253
|
+
(setf doc-string
|
254
|
+
(concat "/* " (eval (body.shift)) " */\n")))
|
255
|
+
|
256
|
+
(defvar no-rest-args (if rest (args.slice 0 -1) args)
|
257
|
+
args-string (build-args-string no-rest-args rest)
|
258
|
+
comment-string (build-comment-string args))
|
259
|
+
|
260
|
+
(concat "(function("
|
261
|
+
(join ", " (map args (lambda (arg) (translate (second arg)))))
|
262
|
+
") {"
|
263
|
+
(indent comment-string doc-string args-string
|
264
|
+
(join "\n"
|
265
|
+
(map body
|
266
|
+
(lambda (stmt)
|
267
|
+
(defvar tstmt (translate stmt))
|
268
|
+
(concat tstmt
|
269
|
+
(if (= (last tstmt) ";") "" ";"))))))
|
270
|
+
"})"))
|
271
|
+
|
272
|
+
|
273
|
+
(defun macros.quote (item)
|
274
|
+
(if (= "Array" item.constructor.name)
|
275
|
+
(concat "[ " (join ", " (map item macros.quote)) " ]")
|
276
|
+
(if (= 'number (typeof item)) item
|
277
|
+
(concat "\"" (literal item) "\""))))
|
278
|
+
|
279
|
+
(defun macros.hash (&rest pairs)
|
280
|
+
(when (odd? pairs.length)
|
281
|
+
(error (concat
|
282
|
+
"odd number of key-value pairs in hash: "
|
283
|
+
(call inspect pairs))))
|
284
|
+
(defvar pair-strings
|
285
|
+
(bulk-map pairs (lambda (key value)
|
286
|
+
(concat (translate key) ": "
|
287
|
+
(translate value)))))
|
288
|
+
(if (>= 1 pair-strings.length)
|
289
|
+
(concat "{ " (join ", " pair-strings) " }")
|
290
|
+
(concat "{" (indent (join ",\n" pair-strings)) "}")))
|
291
|
+
|
292
|
+
|
293
|
+
(defun literal (string)
|
294
|
+
(inject (chain string
|
295
|
+
(replace /\*/g "_")
|
296
|
+
(replace /\?$/ "__QUERY")
|
297
|
+
(replace /!$/ "__BANG"))
|
298
|
+
(string.match /-(.)/g)
|
299
|
+
(lambda (return-string match)
|
300
|
+
(return-string.replace match
|
301
|
+
(send (second match) to-upper-case)))))
|
302
|
+
|
303
|
+
|
304
|
+
(defun translate (token hint)
|
305
|
+
(defvar hint hint)
|
306
|
+
(when (and hint (undefined? (get macros hint)))
|
307
|
+
(setf hint undefined))
|
308
|
+
|
309
|
+
(when (defined? token)
|
310
|
+
(when (string? token) (setf token (token.trim)))
|
311
|
+
(try
|
312
|
+
(if (list? token)
|
313
|
+
(if (defined? (get macros (translate (first token))))
|
314
|
+
(apply (get macros (translate (first token))) (token.slice 1))
|
315
|
+
(apply (get macros (or hint 'call)) token))
|
316
|
+
(if (and (string? token)
|
317
|
+
(token.match (regex (concat "^" sibilant.tokens.literal "$"))))
|
318
|
+
(literal token)
|
319
|
+
(if (and (string? token) (token.match (regex "^;")))
|
320
|
+
(token.replace (regex "^;+") "//")
|
321
|
+
(if (and (string? token) (= "\"" (first token) (last token)))
|
322
|
+
(chain token (split "\n") (join "\\n\" +\n\""))
|
323
|
+
token))))
|
324
|
+
(error (concat e.stack "\n"
|
325
|
+
"Encountered when attempting to process:\n"
|
326
|
+
(indent (call inspect token)))))))
|
327
|
+
|
328
|
+
|
329
|
+
(set sibilant 'translate translate)
|
330
|
+
|
331
|
+
(defun translate-all (contents)
|
332
|
+
(defvar buffer "")
|
333
|
+
(each (token) (tokenize contents)
|
334
|
+
(defvar line (translate token 'statement))
|
335
|
+
(when line (setf buffer (concat buffer line "\n"))))
|
336
|
+
buffer)
|
337
|
+
|
338
|
+
(set sibilant 'translate-all translate-all)
|
@@ -0,0 +1,65 @@
|
|
1
|
+
(include "../include/functional")
|
2
|
+
|
3
|
+
(defun extract-options (config &optional args)
|
4
|
+
(defvar args (or args (process.argv.slice 2))
|
5
|
+
default-label 'unlabeled
|
6
|
+
current-label default-label
|
7
|
+
after-break false
|
8
|
+
config (or config {})
|
9
|
+
unlabeled [])
|
10
|
+
|
11
|
+
(defun label? (item) (and (string? item) (send /^-/ test item)))
|
12
|
+
|
13
|
+
(defun synonym-lookup (item)
|
14
|
+
(defvar config-entry (get config item))
|
15
|
+
(if (string? config-entry)
|
16
|
+
(synonym-lookup config-entry)
|
17
|
+
item))
|
18
|
+
|
19
|
+
(defun takes-args? (item)
|
20
|
+
(!= false (get config (label-for item))))
|
21
|
+
|
22
|
+
(setf default-label (synonym-lookup default-label)
|
23
|
+
current-label default-label)
|
24
|
+
|
25
|
+
(defun label-for (item)
|
26
|
+
(synonym-lookup (item.replace /^-+/ "")))
|
27
|
+
|
28
|
+
(defun add-value (hash key value)
|
29
|
+
(defvar current-value (get hash key))
|
30
|
+
(when (undefined? current-value)
|
31
|
+
(setf current-value [])
|
32
|
+
(set hash key current-value))
|
33
|
+
(when (!= true value)
|
34
|
+
(current-value.push value)))
|
35
|
+
|
36
|
+
(defun reset-label ()
|
37
|
+
(setf current-label default-label))
|
38
|
+
|
39
|
+
(inject {} args
|
40
|
+
(lambda (return-hash item index)
|
41
|
+
(if (= "--" item) (setf after-break true)
|
42
|
+
(if after-break
|
43
|
+
(add-value return-hash 'after-break item)
|
44
|
+
(if (label? item)
|
45
|
+
(progn
|
46
|
+
(setf current-label (label-for item))
|
47
|
+
(add-value return-hash current-label true)
|
48
|
+
(when (not (takes-args? item)) (reset-label)))
|
49
|
+
(progn
|
50
|
+
(add-value return-hash current-label item)
|
51
|
+
(reset-label)))))
|
52
|
+
return-hash)))
|
53
|
+
|
54
|
+
(defun process-options (&optional config)
|
55
|
+
(defvar options (extract-options config))
|
56
|
+
(when config
|
57
|
+
(defun handle-pair (key value)
|
58
|
+
(defvar handle (get config key))
|
59
|
+
(when (string? handle) (handle-pair handle value))
|
60
|
+
(when (function? handle) (handle value options)))
|
61
|
+
(each (key) (keys options) (handle-pair key (get options key))))
|
62
|
+
|
63
|
+
options)
|
64
|
+
|
65
|
+
(set module 'exports process-options)
|
@@ -0,0 +1,59 @@
|
|
1
|
+
(defvar input (process.open-stdin)
|
2
|
+
output process.stdout
|
3
|
+
vm (require 'vm)
|
4
|
+
readline (send (require 'readline) create-interface input output)
|
5
|
+
sibilant (require "./sibilant")
|
6
|
+
context undefined
|
7
|
+
cmd-buffer ""
|
8
|
+
util (require 'util))
|
9
|
+
|
10
|
+
(defun create-context ()
|
11
|
+
(defvar context (vm.create-context))
|
12
|
+
(set module 'filename (concat (process.cwd) "/exec"))
|
13
|
+
(set context
|
14
|
+
'module module
|
15
|
+
'require require)
|
16
|
+
(each-key key global (set context key (get global key)))
|
17
|
+
context)
|
18
|
+
|
19
|
+
(setf context (create-context))
|
20
|
+
|
21
|
+
(defun display-prompt ()
|
22
|
+
(readline.set-prompt
|
23
|
+
(concat (if (> cmd-buffer.length 10)
|
24
|
+
(concat "..." (cmd-buffer.slice -10))
|
25
|
+
(if (> cmd-buffer.length 0) cmd-buffer "sibilant"))
|
26
|
+
"> "))
|
27
|
+
(readline.prompt))
|
28
|
+
|
29
|
+
(readline.on 'line
|
30
|
+
(lambda (cmd)
|
31
|
+
(defvar js-line "")
|
32
|
+
|
33
|
+
(try
|
34
|
+
(progn
|
35
|
+
(setf cmd-buffer (concat cmd-buffer cmd))
|
36
|
+
(each (stmt) (sibilant.tokenize cmd-buffer)
|
37
|
+
(setf js-line (concat js-line
|
38
|
+
(sibilant.translate stmt 'statement))))
|
39
|
+
(defvar result (vm.run-in-context js-line context "sibilant-repl"))
|
40
|
+
(set readline.history 0 cmd-buffer)
|
41
|
+
(when (defined? result)
|
42
|
+
(output.write (concat "result: "
|
43
|
+
(util.inspect result) "\n")))
|
44
|
+
(set context "_" result)
|
45
|
+
(setf cmd-buffer ""))
|
46
|
+
(progn
|
47
|
+
(if (e.message.match /unexpected EOF/)
|
48
|
+
(progn
|
49
|
+
(setf cmd-buffer (concat cmd-buffer " "))
|
50
|
+
(readline.history.shift))
|
51
|
+
(progn
|
52
|
+
(set readline.history 0 cmd-buffer)
|
53
|
+
(output.write (concat e.stack "\n"))
|
54
|
+
(setf cmd-buffer "")))))
|
55
|
+
(display-prompt)))
|
56
|
+
|
57
|
+
(readline.on 'close input.destroy)
|
58
|
+
|
59
|
+
(display-prompt)
|
@@ -0,0 +1,78 @@
|
|
1
|
+
(defvar sibilant exports
|
2
|
+
util (require 'util)
|
3
|
+
path (require 'path)
|
4
|
+
fs (require 'fs)
|
5
|
+
error (lambda (str) (throw str))
|
6
|
+
inspect util.inspect)
|
7
|
+
|
8
|
+
(include "../include/functional")
|
9
|
+
|
10
|
+
(defun sibilant.package-info ()
|
11
|
+
(defvar fs (require 'fs))
|
12
|
+
(JSON.parse (fs.read-file-sync
|
13
|
+
(concat **dirname "/../package.json"))))
|
14
|
+
|
15
|
+
(defun sibilant.version-string ()
|
16
|
+
(defvar package (sibilant.package-info)
|
17
|
+
path (require 'path))
|
18
|
+
(concat package.name " version " package.version
|
19
|
+
"\n(at " (path.join **dirname "..") ")"))
|
20
|
+
|
21
|
+
(defun sibilant.strip-shebang (data)
|
22
|
+
(data.replace /^#!.*\n/ ""))
|
23
|
+
|
24
|
+
(set sibilant
|
25
|
+
'file 'eval.sibilant
|
26
|
+
'dir (process.cwd))
|
27
|
+
|
28
|
+
(defun with-dir-and-file (dir file fn)
|
29
|
+
(defvar before { dir sibilant.dir
|
30
|
+
file sibilant.file })
|
31
|
+
(set sibilant
|
32
|
+
'dir dir
|
33
|
+
'file file)
|
34
|
+
|
35
|
+
(defvar retval (fn))
|
36
|
+
|
37
|
+
(set sibilant
|
38
|
+
'dir before.dir
|
39
|
+
'file before.file)
|
40
|
+
|
41
|
+
retval)
|
42
|
+
|
43
|
+
|
44
|
+
(defun sibilant.translate-file (file-name)
|
45
|
+
(with-dir-and-file (path.dirname file-name)
|
46
|
+
file-name
|
47
|
+
(thunk
|
48
|
+
(sibilant.translate-all
|
49
|
+
(sibilant.strip-shebang
|
50
|
+
(fs.read-file-sync file-name "utf8"))))))
|
51
|
+
|
52
|
+
|
53
|
+
(defun sibilant.version ()
|
54
|
+
(get (sibilant.package-info) 'version))
|
55
|
+
|
56
|
+
(set require.extensions ".sibilant"
|
57
|
+
(lambda (module filename)
|
58
|
+
(defvar content (sibilant.translate-file filename))
|
59
|
+
(module.*compile content filename)))
|
60
|
+
|
61
|
+
(defun sibilant.include (file)
|
62
|
+
(when (not (file.match (regex ".sibilant$")))
|
63
|
+
(setf file (concat file ".sibilant")))
|
64
|
+
|
65
|
+
(when (file.match (regex "^\.\.?/"))
|
66
|
+
(setf file (concat sibilant.dir "/" file)))
|
67
|
+
|
68
|
+
(defvar resolved (require.resolve file))
|
69
|
+
|
70
|
+
(sibilant.translate-file resolved))
|
71
|
+
|
72
|
+
|
73
|
+
(include "../src/core")
|
74
|
+
|
75
|
+
(defun macros.include (file)
|
76
|
+
(sibilant.include (eval (translate file))))
|
77
|
+
|
78
|
+
(sibilant.include (path.normalize (concat **dirname "/../include/macros")))
|
@@ -0,0 +1 @@
|
|
1
|
+
1
|
@@ -0,0 +1 @@
|
|
1
|
+
2
|
@@ -0,0 +1,10 @@
|
|
1
|
+
#!/usr/bin/env sibilant -x
|
2
|
+
(include "./testHelper.sibilant")
|
3
|
+
|
4
|
+
(sibilant.include "sibilant/include/node")
|
5
|
+
|
6
|
+
(assert-translation "(on thing event (arg1 arg2) (concat arg1 arg2))"
|
7
|
+
"thing.on(\"event\", (function(arg1, arg2) {
|
8
|
+
// arg1:required arg2:required
|
9
|
+
return (arg1 + arg2);
|
10
|
+
}))")
|