|
|
@@ -81,7 +81,7 @@ var tokenizer = function (input) {
|
|
81
|
81
|
})
|
|
82
|
82
|
continue
|
|
83
|
83
|
}
|
|
84
|
|
- let characters = /[a-zA-Z_]/
|
|
|
84
|
+ let characters = /[a-zA-Z_:]/
|
|
85
|
85
|
if (characters.test(char)) {
|
|
86
|
86
|
let name = ''
|
|
87
|
87
|
while (characters.test(char)) {
|
|
|
@@ -312,7 +312,7 @@ var generator = function (node) {
|
|
312
|
312
|
switch (node.type) {
|
|
313
|
313
|
case 'Prog':
|
|
314
|
314
|
let program = node.body.map(generator)
|
|
315
|
|
- program.unshift('var _ = require("./stdlib.js")')
|
|
|
315
|
+ program.unshift('var _ = require("./lib/stdlib.js")(this)')
|
|
316
|
316
|
return program.join('\n')
|
|
317
|
317
|
break
|
|
318
|
318
|
case 'Statement':
|
|
|
@@ -320,16 +320,27 @@ var generator = function (node) {
|
|
320
|
320
|
break
|
|
321
|
321
|
case 'FunctionCall':
|
|
322
|
322
|
if (!node.callee.name.match('(def|if|repeat)')) {
|
|
323
|
|
- return (generator(node.callee) + '(' + node.args.map(generator).join(', ') + ')')
|
|
|
323
|
+ if (node.callee.name.match('include')) {
|
|
|
324
|
+ // Include is a special function and we will write the generation ourselves
|
|
|
325
|
+ if (node.args.length > 1) {
|
|
|
326
|
+ console.error("Compiler Error: (include) may only take 1 argument!")
|
|
|
327
|
+ process.exit(1)
|
|
|
328
|
+ } else {
|
|
|
329
|
+ let lib = './lib/' + node.args[0].value + '.js'
|
|
|
330
|
+ return ('var _' + node.args[0].value + ' = require("' + lib + '")(this)')
|
|
|
331
|
+ }
|
|
|
332
|
+ } else {
|
|
|
333
|
+ return (generator(node.callee) + '(' + node.args.map(generator).join(', ') + ')')
|
|
|
334
|
+ }
|
|
324
|
335
|
} else {
|
|
325
|
336
|
return (generator(node.callee) + '(' + node.args.map((v, i) => {
|
|
326
|
337
|
if (i === 0) {
|
|
327
|
338
|
return generator(v) + ', '
|
|
328
|
339
|
} else {
|
|
329
|
340
|
if (i === 1) {
|
|
330
|
|
- return 'function() {' + generator(v) + ';'
|
|
|
341
|
+ return 'function() { \n' + generator(v) + ';\n'
|
|
331
|
342
|
} else {
|
|
332
|
|
- return generator(v) + '; '
|
|
|
343
|
+ return generator(v) + ';\n'
|
|
333
|
344
|
}
|
|
334
|
345
|
}
|
|
335
|
346
|
}).join('') + '})')
|
|
|
@@ -342,7 +353,12 @@ var generator = function (node) {
|
|
342
|
353
|
return '}, function() {'
|
|
343
|
354
|
break
|
|
344
|
355
|
case 'FunctionName':
|
|
345
|
|
- return '_.' + node.name
|
|
|
356
|
+ if (node.name.match("::")) {
|
|
|
357
|
+ let [namespace, func] = node.name.split("::")
|
|
|
358
|
+ return "_" + namespace + "." + func
|
|
|
359
|
+ } else {
|
|
|
360
|
+ return '_.' + node.name
|
|
|
361
|
+ }
|
|
346
|
362
|
break
|
|
347
|
363
|
case 'VariableReference':
|
|
348
|
364
|
return '_.ref(\'' + node.value + '\')'
|