sibilant 0.0.2 → 0.0.3

Sign up to get free protection for your applications and to get access to all the features.
@@ -38,13 +38,11 @@ var displayPrompt = (function() {
38
38
  });
39
39
 
40
40
  readline.on("line", (function(cmd) {
41
- // cmd:required
42
41
  var jsLine = "";
43
42
  (function() {
44
43
  try {
45
44
  cmdBuffer = (cmdBuffer + cmd);
46
45
  sibilant.tokenize(cmdBuffer).forEach((function(stmt) {
47
- // stmt:required
48
46
  return jsLine = (jsLine + sibilant.translate(stmt, "statement"));
49
47
  }));
50
48
  var result = vm.runInContext(jsLine, context, "sibilant-repl");
@@ -3,12 +3,10 @@ var sibilant = exports,
3
3
  path = require("path"),
4
4
  fs = require("fs"),
5
5
  error = (function(str) {
6
- // str:required
7
6
  throw new Error (str);
8
7
  }),
9
8
  inspect = util.inspect;
10
9
  var bulkMap = (function(arr, fn) {
11
- // arr:required fn:required
12
10
  var index = 0,
13
11
  groupSize = fn.length,
14
12
  retArr = [ ];
@@ -26,12 +24,10 @@ var bulkMap = (function(arr, fn) {
26
24
  });
27
25
 
28
26
  var inject = (function(start, items, fn) {
29
- // start:required items:required fn:required
30
27
  var value = start;
31
28
  (function() {
32
29
  if ((items) && (items).constructor.name === "Array") {
33
30
  return items.forEach((function(item, index) {
34
- // item:required index:required
35
31
  return value = fn(value, item, index);
36
32
  }));
37
33
  }
@@ -40,18 +36,14 @@ var inject = (function(start, items, fn) {
40
36
  });
41
37
 
42
38
  var map = (function(items, fn) {
43
- // items:required fn:required
44
39
  return inject([ ], items, (function(collector, item, index) {
45
- // collector:required item:required index:required
46
40
  collector.push(fn(item, index));
47
41
  return collector;
48
42
  }));
49
43
  });
50
44
 
51
45
  var select = (function(items, fn) {
52
- // items:required fn:required
53
46
  return inject([ ], items, (function(collector, item, index) {
54
- // collector:required item:required index:required
55
47
  (function() {
56
48
  if (fn(item, index)) {
57
49
  return collector.push(item);
@@ -62,7 +54,6 @@ var select = (function(items, fn) {
62
54
  });
63
55
 
64
56
  var detect = (function(items, fn) {
65
- // items:required fn:required
66
57
  var returnItem = undefined,
67
58
  index = 0,
68
59
  items = items;
@@ -83,7 +74,6 @@ var detect = (function(items, fn) {
83
74
  });
84
75
 
85
76
  var reject = (function(items, fn) {
86
- // items:required fn:required
87
77
  var args = [ items, fn ];
88
78
  return select(items, (function() {
89
79
  return (!fn.apply(undefined, arguments));
@@ -91,19 +81,15 @@ var reject = (function(items, fn) {
91
81
  });
92
82
 
93
83
  var compact = (function(arr) {
94
- // arr:required
95
84
  return select(arr, (function(item) {
96
- // item:required
97
85
  return (!!(item));
98
86
  }));
99
87
  });
100
88
 
101
89
  var flatten = (function(items) {
102
- // items:rest
103
90
  var items = Array.prototype.slice.call(arguments, 0);
104
91
 
105
92
  return inject([ ], items, (function(collector, item) {
106
- // collector:required item:required
107
93
  return collector.concat((function() {
108
94
  if ((item) && (item).constructor.name === "Array") {
109
95
  return flatten.apply(undefined, item);
@@ -127,14 +113,12 @@ sibilant.versionString = (function() {
127
113
  });
128
114
 
129
115
  sibilant.stripShebang = (function(data) {
130
- // data:required
131
116
  return data.replace(/^#!.*\n/, "");
132
117
  });
133
118
 
134
119
  (sibilant)["file"] = "eval.sibilant";
135
120
  (sibilant)["dir"] = process.cwd();
136
121
  var withDirAndFile = (function(dir, file, fn) {
137
- // dir:required file:required fn:required
138
122
  var before = {
139
123
  dir: sibilant.dir,
140
124
  file: sibilant.file
@@ -148,7 +132,6 @@ var withDirAndFile = (function(dir, file, fn) {
148
132
  });
149
133
 
150
134
  sibilant.translateFile = (function(fileName) {
151
- // fileName:required
152
135
  return withDirAndFile(path.dirname(fileName), fileName, (function() {
153
136
  return sibilant.translateAll(sibilant.stripShebang(fs.readFileSync(fileName, "utf8")));
154
137
  }));
@@ -159,12 +142,10 @@ sibilant.version = (function() {
159
142
  });
160
143
 
161
144
  (require.extensions)[".sibilant"] = (function(module, filename) {
162
- // module:required filename:required
163
145
  var content = sibilant.translateFile(filename);
164
146
  return module._compile(content, filename);
165
147
  });
166
148
  sibilant.include = (function(file) {
167
- // file:required
168
149
  (function() {
169
150
  if ((!file.match((new RegExp(".sibilant$", undefined))))) {
170
151
  return file = (file + ".sibilant");
@@ -194,12 +175,10 @@ sibilant.include = (function(file) {
194
175
  (sibilant.tokens)["specialLiteral"] = (sibilant.tokens.special + sibilant.tokens.literal);
195
176
  (sibilant)["tokenPrecedence"] = [ "regex", "comment", "string", "number", "specialLiteral", "otherChar", "specialOpenParen", "closeParen", "alternativeParens" ];
196
177
  var tokenize = sibilant.tokenize = (function(string) {
197
- // string:required
198
178
  var tokens = [ ],
199
179
  parseStack = [ tokens ],
200
180
  specials = [ ];
201
181
  var acceptToken = (function(token) {
202
- // token:required
203
182
  return (parseStack)[0].push(token);
204
183
  });
205
184
  ;
@@ -220,7 +199,6 @@ var tokenize = sibilant.tokenize = (function(string) {
220
199
  });
221
200
  ;
222
201
  var handleToken = (function(token) {
223
- // token:required
224
202
  var special = (token)[0],
225
203
  token = token;
226
204
  (function() {
@@ -269,11 +247,10 @@ var tokenize = sibilant.tokenize = (function(string) {
269
247
  });
270
248
  ;
271
249
  var orderedRegexen = map(sibilant.tokenPrecedence, (function(x) {
272
- // x:required
273
250
  return (sibilant.tokens)[x];
274
251
  })),
275
252
  masterRegex = (new RegExp((orderedRegexen).join("|"), "g"));
276
- string // chain
253
+ string
277
254
  .match(masterRegex)
278
255
  .forEach(handleToken)
279
256
  ;
@@ -285,10 +262,9 @@ var tokenize = sibilant.tokenize = (function(string) {
285
262
  return tokens;
286
263
  });
287
264
  var indent = (function(args) {
288
- // args:rest
289
265
  var args = Array.prototype.slice.call(arguments, 0);
290
266
 
291
- return (compact(args) // chain
267
+ return (compact(args)
292
268
  .join("\n")
293
269
  .replace(/^/, "\n")
294
270
  .replace(/\n/g, "\n ")
@@ -296,9 +272,7 @@ var indent = (function(args) {
296
272
  });
297
273
 
298
274
  var constructHash = (function(arrayOfArrays) {
299
- // arrayOfArrays:required
300
275
  return inject({ }, arrayOfArrays, (function(object, item) {
301
- // object:required item:required
302
276
  (object)[(item)[0]] = (object)[(item)[1]];
303
277
  return object;
304
278
  }));
@@ -307,7 +281,6 @@ var constructHash = (function(arrayOfArrays) {
307
281
  var macros = { };
308
282
  (sibilant)["macros"] = macros;
309
283
  (macros)["return"] = (function(token) {
310
- // token:required
311
284
  var defaultReturn = ("return " + translate(token));
312
285
  return (function() {
313
286
  if ((token) && (token).constructor.name === "Array") {
@@ -361,41 +334,39 @@ var macros = { };
361
334
  })();
362
335
  });
363
336
  var asStatement = (function(string) {
364
- // string:required
365
- return string // chain
337
+ return string
366
338
  .toString()
367
339
  .replace(/;*\s*$/, ";")
368
340
  ;
369
341
  });
370
342
 
371
343
  macros.statement = (function(args) {
372
- // args:rest
373
344
  var args = Array.prototype.slice.call(arguments, 0);
374
345
 
375
346
  return (macros.call.apply(undefined, args) + ";\n");
376
347
  });
377
348
 
378
349
  macros.progn = (function(body) {
379
- // body:rest
380
350
  var body = Array.prototype.slice.call(arguments, 0);
381
351
 
382
352
  var lastIndex = Math.max(0, (body.length - 1));
383
353
  (body)[lastIndex] = [ "return", (body)[lastIndex] ];
384
354
  return (map(body, (function(arg) {
385
- // arg:required
386
355
  return (asStatement(translate(arg)));
387
356
  }))).join("\n");
388
357
  });
389
358
 
359
+ macros.emptyList = (function() {
360
+ return "null";
361
+ });
362
+
390
363
  macros.call = (function(fnName, args) {
391
- // fnName:required args:rest
392
364
  var args = Array.prototype.slice.call(arguments, 1);
393
365
 
394
366
  return (translate(fnName) + "(" + (map(args, translate)).join(", ") + ")");
395
367
  });
396
368
 
397
369
  macros.defun = (function(fnName, argsAndBody) {
398
- // fnName:required argsAndBody:rest
399
370
  var argsAndBody = Array.prototype.slice.call(arguments, 1);
400
371
 
401
372
  var fnNameTr = translate(fnName),
@@ -410,7 +381,6 @@ macros.defun = (function(fnName, argsAndBody) {
410
381
  });
411
382
 
412
383
  macros.defmacro = (function(name, argsAndBody) {
413
- // name:required argsAndBody:rest
414
384
  var argsAndBody = Array.prototype.slice.call(arguments, 1);
415
385
 
416
386
  var js = macros.lambda.apply(undefined, argsAndBody),
@@ -426,18 +396,15 @@ macros.defmacro = (function(name, argsAndBody) {
426
396
  });
427
397
 
428
398
  macros.concat = (function(args) {
429
- // args:rest
430
399
  var args = Array.prototype.slice.call(arguments, 0);
431
400
 
432
401
  return ("(" + (map(args, translate)).join(" + ") + ")");
433
402
  });
434
403
 
435
404
  var transformArgs = (function(arglist) {
436
- // arglist:required
437
405
  var last = undefined,
438
406
  args = [ ];
439
407
  arglist.forEach((function(arg) {
440
- // arg:required
441
408
  return (function() {
442
409
  if (((arg)[0] === "&")) {
443
410
  return last = arg.slice(1);
@@ -456,10 +423,8 @@ var transformArgs = (function(arglist) {
456
423
  });
457
424
 
458
425
  macros.reverse = (function(arr) {
459
- // arr:required
460
426
  var reversed = [ ];
461
427
  arr.forEach((function(item) {
462
- // item:required
463
428
  return reversed.unshift(item);
464
429
  }));
465
430
  return reversed;
@@ -467,17 +432,14 @@ macros.reverse = (function(arr) {
467
432
 
468
433
  var reverse = macros.reverse;
469
434
  var buildArgsString = (function(args, rest) {
470
- // args:required rest:required
471
435
  var argsString = "",
472
436
  optionalCount = 0;
473
437
  args.forEach((function(arg, optionIndex) {
474
- // arg:required optionIndex:required
475
438
  return (function() {
476
439
  if (((arg)[0] === "optional")) {
477
- argsString = (argsString + "if (arguments.length < " + (args.length - optionalCount) + ")" + " // if " + translate((arg)[1]) + " is missing" + indent(("var " + map(args.slice((optionIndex + 1)), (function(arg, argIndex) {
478
- // arg:required argIndex:required
440
+ argsString = (argsString + "if (arguments.length < " + (args.length - optionalCount) + ")" + indent(("var " + map(args.slice((optionIndex + 1)), (function(arg, argIndex) {
479
441
  return (translate((arg)[1]) + " = " + translate(((args)[(optionIndex + argIndex)])[1]));
480
- })) // chain
442
+ }))
481
443
  .reverse()
482
444
  .concat((translate((arg)[1]) + " = undefined"))
483
445
  .join(", ")
@@ -495,28 +457,11 @@ var buildArgsString = (function(args, rest) {
495
457
  })();
496
458
  });
497
459
 
498
- var buildCommentString = (function(args) {
499
- // args:required
500
- return (function() {
501
- if (((args).length === 0)) {
502
- return "";
503
- } else {
504
- return ("// " + (map(args, (function(arg) {
505
- // arg:required
506
- return (translate((arg)[1]) + ":" + (arg)[0]);
507
- }))).join(" "));
508
- }
509
- })();
510
- });
511
-
512
- // brain 'splode
513
460
  macros.lambda = (function(arglist, body) {
514
- // arglist:required body:rest
515
461
  var body = Array.prototype.slice.call(arguments, 1);
516
462
 
517
463
  var args = transformArgs(arglist),
518
464
  rest = (select(args, (function(arg) {
519
- // arg:required
520
465
  return ("rest" === (arg)[0]);
521
466
  })))[0],
522
467
  docString = undefined;
@@ -533,13 +478,10 @@ macros.lambda = (function(arglist, body) {
533
478
  return args;
534
479
  }
535
480
  })(),
536
- argsString = buildArgsString(noRestArgs, rest),
537
- commentString = buildCommentString(args);
481
+ argsString = buildArgsString(noRestArgs, rest);
538
482
  return ("(function(" + (map(args, (function(arg) {
539
- // arg:required
540
483
  return translate((arg)[1]);
541
- }))).join(", ") + ") {" + indent(commentString, docString, argsString, (map(body, (function(stmt) {
542
- // stmt:required
484
+ }))).join(", ") + ") {" + indent(docString, argsString, (map(body, (function(stmt) {
543
485
  var tstmt = translate(stmt);
544
486
  return (tstmt + (function() {
545
487
  if (((tstmt.slice(-1))[0] === ";")) {
@@ -552,7 +494,6 @@ macros.lambda = (function(arglist, body) {
552
494
  });
553
495
 
554
496
  macros.quote = (function(item) {
555
- // item:required
556
497
  return (function() {
557
498
  if (("Array" === item.constructor.name)) {
558
499
  return ("[ " + (map(item, macros.quote)).join(", ") + " ]");
@@ -569,7 +510,6 @@ macros.quote = (function(item) {
569
510
  });
570
511
 
571
512
  macros.hash = (function(pairs) {
572
- // pairs:rest
573
513
  var pairs = Array.prototype.slice.call(arguments, 0);
574
514
 
575
515
  (function() {
@@ -578,7 +518,6 @@ macros.hash = (function(pairs) {
578
518
  }
579
519
  })();
580
520
  var pairStrings = bulkMap(pairs, (function(key, value) {
581
- // key:required value:required
582
521
  return (translate(key) + ": " + translate(value));
583
522
  }));
584
523
  return (function() {
@@ -591,19 +530,57 @@ macros.hash = (function(pairs) {
591
530
  });
592
531
 
593
532
  var literal = (function(string) {
594
- // string:required
595
- return inject(string // chain
533
+ return inject(string
596
534
  .replace(/\*/g, "_")
597
535
  .replace(/\?$/, "__QUERY")
598
536
  .replace(/!$/, "__BANG")
599
537
  , string.match(/-(.)/g), (function(returnString, match) {
600
- // returnString:required match:required
601
538
  return returnString.replace(match, (match)[1].toUpperCase());
602
539
  }));
603
540
  });
604
541
 
542
+ var translateListToken = (function(token, hint) {
543
+ return (function() {
544
+ if (((token).length === 0)) {
545
+ return macros.emptyList();
546
+ } else {
547
+ return (function() {
548
+ if (typeof((macros)[translate((token)[0])]) !== 'undefined') {
549
+ return (macros)[translate((token)[0])].apply(undefined, token.slice(1));
550
+ } else {
551
+ return (macros)[(hint || "call")].apply(undefined, token);
552
+ }
553
+ })();
554
+ }
555
+ })();
556
+ });
557
+
558
+ var translateStringToken = (function(token, hint) {
559
+ return (function() {
560
+ if (token.match((new RegExp(("^" + sibilant.tokens.literal + "$"), undefined)))) {
561
+ return literal(token);
562
+ } else {
563
+ return (function() {
564
+ if (token.match((new RegExp("^;", undefined)))) {
565
+ return token.replace((new RegExp("^;+", undefined)), "//");
566
+ } else {
567
+ return (function() {
568
+ if (("\"" === (token)[0] &&
569
+ "\"" === (token.slice(-1))[0])) {
570
+ return token
571
+ .split("\n")
572
+ .join("\\n\" +\n\"");
573
+ } else {
574
+ return token;
575
+ }
576
+ })();
577
+ }
578
+ })();
579
+ }
580
+ })();
581
+ });
582
+
605
583
  var translate = (function(token, hint) {
606
- // token:required hint:required
607
584
  var hint = hint;
608
585
  (function() {
609
586
  if ((hint && typeof((macros)[hint]) === 'undefined')) {
@@ -621,34 +598,13 @@ var translate = (function(token, hint) {
621
598
  try {
622
599
  return (function() {
623
600
  if ((token) && (token).constructor.name === "Array") {
624
- return (function() {
625
- if (typeof((macros)[translate((token)[0])]) !== 'undefined') {
626
- return (macros)[translate((token)[0])].apply(undefined, token.slice(1));
627
- } else {
628
- return (macros)[(hint || "call")].apply(undefined, token);
629
- }
630
- })();
601
+ return translateListToken(token, hint);
631
602
  } else {
632
603
  return (function() {
633
- if ((typeof(token) === "string" && token.match((new RegExp(("^" + sibilant.tokens.literal + "$"), undefined))))) {
634
- return literal(token);
604
+ if (typeof(token) === "string") {
605
+ return translateStringToken(token, hint);
635
606
  } else {
636
- return (function() {
637
- if ((typeof(token) === "string" && token.match((new RegExp("^;", undefined))))) {
638
- return token.replace((new RegExp("^;+", undefined)), "//");
639
- } else {
640
- return (function() {
641
- if ((typeof(token) === "string" && ("\"" === (token)[0] &&
642
- "\"" === (token.slice(-1))[0]))) {
643
- return token // chain
644
- .split("\n")
645
- .join("\\n\" +\n\"");
646
- } else {
647
- return token;
648
- }
649
- })();
650
- }
651
- })();
607
+ return token;
652
608
  }
653
609
  })();
654
610
  }
@@ -663,10 +619,8 @@ var translate = (function(token, hint) {
663
619
 
664
620
  (sibilant)["translate"] = translate;
665
621
  var translateAll = (function(contents) {
666
- // contents:required
667
622
  var buffer = "";
668
623
  tokenize(contents).forEach((function(token) {
669
- // token:required
670
624
  var line = translate(token, "statement");
671
625
  return (function() {
672
626
  if (line) {
@@ -680,7 +634,6 @@ var translateAll = (function(contents) {
680
634
  (sibilant)["translateAll"] = translateAll;
681
635
 
682
636
  macros.include = (function(file) {
683
- // file:required
684
637
  return sibilant.include(eval(translate(file)));
685
638
  });
686
639
 
@@ -25,7 +25,7 @@
25
25
  (modify-syntax-entry ?\} "){" table)
26
26
  (modify-syntax-entry ?\[ "(]" table)
27
27
  (modify-syntax-entry ?\] ")[" table)
28
- (modify-syntax-entry ?/ "|" table)
28
+ (modify-syntax-entry ?/ "." table)
29
29
  table))
30
30
 
31
31
  ;;;###autoload
@@ -1,10 +1,10 @@
1
1
  {
2
2
  "name": "sibilant",
3
- "version": "0.1.3",
3
+ "version": "0.1.4",
4
4
  "keywords": [ "lisp", "javascript", "language" ],
5
5
  "description": "javascript with a lisp",
6
6
  "contributors": [ "Jacob Rothstein <hi@jbr.me> (http://jbr.me)", "Matthew Phillips (http://www.matthewphillips.info/)", "Yuest Wang (http://yue.st/)", "Lyndon Tremblay (http://www.hoovy.org)", "David Sargeant (https://github.com/dubiousdavid)" ],
7
- "repositories": {
7
+ "repository": {
8
8
  "type": "git",
9
9
  "url": "http://github.com/jbr/sibilant.git"
10
10
  },
@@ -14,6 +14,9 @@
14
14
  },
15
15
  "bin": { "sibilant": "./bin/sibilant" },
16
16
  "main": "./lib/sibilant",
17
- "scripts": { "test": "node ./bin/sibilant test/test.sibilant -x" }
17
+ "scripts": {
18
+ "test": "npm run-script build && node ./bin/sibilant test/test.sibilant -x",
19
+ "build": "bin/sibilant src/*.sibilant -o lib && bin/sibilant package.sibilant > package.json"
20
+ }
18
21
  }
19
22
 
@@ -1,5 +1,5 @@
1
1
  { 'name 'sibilant
2
- 'version "0.1.3"
2
+ 'version "0.1.4"
3
3
  'keywords '(lisp javascript language)
4
4
  'description "javascript with a lisp"
5
5
  'contributors [ "Jacob Rothstein <hi@jbr.me> (http://jbr.me)"
@@ -7,10 +7,11 @@
7
7
  "Yuest Wang (http://yue.st/)"
8
8
  "Lyndon Tremblay (http://www.hoovy.org)"
9
9
  "David Sargeant (https://github.com/dubiousdavid)" ]
10
- 'repositories { 'type 'git
10
+ 'repository { 'type 'git
11
11
  'url "http://github.com/jbr/sibilant.git" }
12
12
  'bugs { 'mail "sibilant@librelist.com"
13
13
  'url "http://github.com/jbr/sibilant/issues" }
14
14
  'bin { 'sibilant "./bin/sibilant" }
15
15
  'main "./lib/sibilant"
16
- 'scripts { 'test "node ./bin/sibilant test/test.sibilant -x" }}
16
+ 'scripts { 'test "npm run-script build && node ./bin/sibilant test/test.sibilant -x"
17
+ 'build "bin/sibilant src/*.sibilant -o lib && bin/sibilant package.sibilant > package.json" }}