sibilant 0.0.2 → 0.0.3

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -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" }}