spider-src 0.1.5

Sign up to get free protection for your applications and to get access to all the features.
Files changed (168) hide show
  1. checksums.yaml +7 -0
  2. data/.gitignore +2 -0
  3. data/Gemfile +7 -0
  4. data/LICENSE.txt +74 -0
  5. data/README.md +37 -0
  6. data/Rakefile +25 -0
  7. data/lib/spider-src/support/spider/.eslintrc +17 -0
  8. data/lib/spider-src/support/spider/.npmignore +9 -0
  9. data/lib/spider-src/support/spider/.travis.yml +7 -0
  10. data/lib/spider-src/support/spider/.yo-rc.json +3 -0
  11. data/lib/spider-src/support/spider/CHANGELOG.md +64 -0
  12. data/lib/spider-src/support/spider/Gruntfile.js +97 -0
  13. data/lib/spider-src/support/spider/Gruntfile.spider +93 -0
  14. data/lib/spider-src/support/spider/LICENSE +201 -0
  15. data/lib/spider-src/support/spider/README.md +50 -0
  16. data/lib/spider-src/support/spider/cli.js +119 -0
  17. data/lib/spider-src/support/spider/lib/ast/CaseClause.js +179 -0
  18. data/lib/spider-src/support/spider/lib/ast/CatchClause.js +26 -0
  19. data/lib/spider-src/support/spider/lib/ast/ExportBatchSpecifier.js +19 -0
  20. data/lib/spider-src/support/spider/lib/ast/ExportSpecifier.js +33 -0
  21. data/lib/spider-src/support/spider/lib/ast/ImportDefaultSpecifier.js +23 -0
  22. data/lib/spider-src/support/spider/lib/ast/ImportNamespaceSpecifier.js +23 -0
  23. data/lib/spider-src/support/spider/lib/ast/ImportSpecifier.js +40 -0
  24. data/lib/spider-src/support/spider/lib/ast/Node.js +93 -0
  25. data/lib/spider-src/support/spider/lib/ast/Parameter.js +229 -0
  26. data/lib/spider-src/support/spider/lib/ast/Program.js +58 -0
  27. data/lib/spider-src/support/spider/lib/ast/Property.js +32 -0
  28. data/lib/spider-src/support/spider/lib/ast/Range.js +257 -0
  29. data/lib/spider-src/support/spider/lib/ast/VariableDeclarator.js +29 -0
  30. data/lib/spider-src/support/spider/lib/ast/expressions/ArrayExpression.js +41 -0
  31. data/lib/spider-src/support/spider/lib/ast/expressions/ArrayPattern.js +45 -0
  32. data/lib/spider-src/support/spider/lib/ast/expressions/AssignmentExpression.js +29 -0
  33. data/lib/spider-src/support/spider/lib/ast/expressions/BinaryExpression.js +104 -0
  34. data/lib/spider-src/support/spider/lib/ast/expressions/CallExpression.js +139 -0
  35. data/lib/spider-src/support/spider/lib/ast/expressions/ConditionalExpression.js +31 -0
  36. data/lib/spider-src/support/spider/lib/ast/expressions/CurryCallExpression.js +102 -0
  37. data/lib/spider-src/support/spider/lib/ast/expressions/ExistentialExpression.js +83 -0
  38. data/lib/spider-src/support/spider/lib/ast/expressions/ForInExpression.js +116 -0
  39. data/lib/spider-src/support/spider/lib/ast/expressions/FunctionExpression.js +157 -0
  40. data/lib/spider-src/support/spider/lib/ast/expressions/InExpression.js +99 -0
  41. data/lib/spider-src/support/spider/lib/ast/expressions/LogicalExpression.js +50 -0
  42. data/lib/spider-src/support/spider/lib/ast/expressions/MemberExpression.js +43 -0
  43. data/lib/spider-src/support/spider/lib/ast/expressions/NewExpression.js +46 -0
  44. data/lib/spider-src/support/spider/lib/ast/expressions/NullCheckCallExpression.js +132 -0
  45. data/lib/spider-src/support/spider/lib/ast/expressions/NullCoalescingExpression.js +114 -0
  46. data/lib/spider-src/support/spider/lib/ast/expressions/NullPropagatingExpression.js +161 -0
  47. data/lib/spider-src/support/spider/lib/ast/expressions/ObjectExpression.js +39 -0
  48. data/lib/spider-src/support/spider/lib/ast/expressions/ObjectPattern.js +49 -0
  49. data/lib/spider-src/support/spider/lib/ast/expressions/RangeMemberExpression.js +157 -0
  50. data/lib/spider-src/support/spider/lib/ast/expressions/SplatExpression.js +48 -0
  51. data/lib/spider-src/support/spider/lib/ast/expressions/SuperExpression.js +170 -0
  52. data/lib/spider-src/support/spider/lib/ast/expressions/ThisExpression.js +22 -0
  53. data/lib/spider-src/support/spider/lib/ast/expressions/UnaryExpression.js +147 -0
  54. data/lib/spider-src/support/spider/lib/ast/expressions/UpdateExpression.js +26 -0
  55. data/lib/spider-src/support/spider/lib/ast/literals/BooleanLiteral.js +24 -0
  56. data/lib/spider-src/support/spider/lib/ast/literals/Identifier.js +60 -0
  57. data/lib/spider-src/support/spider/lib/ast/literals/NullLiteral.js +24 -0
  58. data/lib/spider-src/support/spider/lib/ast/literals/NumberLiteral.js +24 -0
  59. data/lib/spider-src/support/spider/lib/ast/literals/RegularExpressionLiteral.js +25 -0
  60. data/lib/spider-src/support/spider/lib/ast/literals/StringLiteral.js +90 -0
  61. data/lib/spider-src/support/spider/lib/ast/literals/UndefinedLiteral.js +30 -0
  62. data/lib/spider-src/support/spider/lib/ast/statements/BlockStatement.js +47 -0
  63. data/lib/spider-src/support/spider/lib/ast/statements/BreakStatement.js +19 -0
  64. data/lib/spider-src/support/spider/lib/ast/statements/ContinueStatement.js +19 -0
  65. data/lib/spider-src/support/spider/lib/ast/statements/DebuggerStatement.js +19 -0
  66. data/lib/spider-src/support/spider/lib/ast/statements/DoWhileStatement.js +25 -0
  67. data/lib/spider-src/support/spider/lib/ast/statements/ExportDeclarationStatement.js +51 -0
  68. data/lib/spider-src/support/spider/lib/ast/statements/ExpressionStatement.js +22 -0
  69. data/lib/spider-src/support/spider/lib/ast/statements/FallthroughStatement.js +74 -0
  70. data/lib/spider-src/support/spider/lib/ast/statements/ForInStatement.js +79 -0
  71. data/lib/spider-src/support/spider/lib/ast/statements/ForOfStatement.js +98 -0
  72. data/lib/spider-src/support/spider/lib/ast/statements/ForStatement.js +43 -0
  73. data/lib/spider-src/support/spider/lib/ast/statements/FunctionDeclarationStatement.js +104 -0
  74. data/lib/spider-src/support/spider/lib/ast/statements/GoStatement.js +41 -0
  75. data/lib/spider-src/support/spider/lib/ast/statements/IfStatement.js +32 -0
  76. data/lib/spider-src/support/spider/lib/ast/statements/ImportDeclarationStatement.js +40 -0
  77. data/lib/spider-src/support/spider/lib/ast/statements/PushStatement.js +37 -0
  78. data/lib/spider-src/support/spider/lib/ast/statements/ReturnStatement.js +26 -0
  79. data/lib/spider-src/support/spider/lib/ast/statements/SwitchStatement.js +159 -0
  80. data/lib/spider-src/support/spider/lib/ast/statements/ThrowStatement.js +22 -0
  81. data/lib/spider-src/support/spider/lib/ast/statements/TryStatement.js +36 -0
  82. data/lib/spider-src/support/spider/lib/ast/statements/UntilStatement.js +31 -0
  83. data/lib/spider-src/support/spider/lib/ast/statements/UseStatement.js +49 -0
  84. data/lib/spider-src/support/spider/lib/ast/statements/VariableDeclarationStatement.js +36 -0
  85. data/lib/spider-src/support/spider/lib/ast/statements/WhileStatement.js +25 -0
  86. data/lib/spider-src/support/spider/lib/ast.js +16 -0
  87. data/lib/spider-src/support/spider/lib/parser.js +14878 -0
  88. data/lib/spider-src/support/spider/lib/spider.js +217 -0
  89. data/lib/spider-src/support/spider/package.json +61 -0
  90. data/lib/spider-src/support/spider/spider-script.js +6 -0
  91. data/lib/spider-src/support/spider/src/ast/CaseClause.spider +179 -0
  92. data/lib/spider-src/support/spider/src/ast/CatchClause.spider +30 -0
  93. data/lib/spider-src/support/spider/src/ast/ExportBatchSpecifier.spider +19 -0
  94. data/lib/spider-src/support/spider/src/ast/ExportSpecifier.spider +37 -0
  95. data/lib/spider-src/support/spider/src/ast/ImportDefaultSpecifier.spider +25 -0
  96. data/lib/spider-src/support/spider/src/ast/ImportNamespaceSpecifier.spider +25 -0
  97. data/lib/spider-src/support/spider/src/ast/ImportSpecifier.spider +44 -0
  98. data/lib/spider-src/support/spider/src/ast/Node.spider +104 -0
  99. data/lib/spider-src/support/spider/src/ast/Parameter.spider +233 -0
  100. data/lib/spider-src/support/spider/src/ast/Program.spider +109 -0
  101. data/lib/spider-src/support/spider/src/ast/Property.spider +36 -0
  102. data/lib/spider-src/support/spider/src/ast/Range.spider +291 -0
  103. data/lib/spider-src/support/spider/src/ast/VariableDeclarator.spider +33 -0
  104. data/lib/spider-src/support/spider/src/ast/expressions/ArrayExpression.spider +32 -0
  105. data/lib/spider-src/support/spider/src/ast/expressions/ArrayPattern.spider +37 -0
  106. data/lib/spider-src/support/spider/src/ast/expressions/AssignmentExpression.spider +34 -0
  107. data/lib/spider-src/support/spider/src/ast/expressions/BinaryExpression.spider +125 -0
  108. data/lib/spider-src/support/spider/src/ast/expressions/CallExpression.spider +149 -0
  109. data/lib/spider-src/support/spider/src/ast/expressions/ConditionalExpression.spider +34 -0
  110. data/lib/spider-src/support/spider/src/ast/expressions/CurryCallExpression.spider +109 -0
  111. data/lib/spider-src/support/spider/src/ast/expressions/ExistentialExpression.spider +102 -0
  112. data/lib/spider-src/support/spider/src/ast/expressions/ForInExpression.spider +140 -0
  113. data/lib/spider-src/support/spider/src/ast/expressions/FunctionExpression.spider +183 -0
  114. data/lib/spider-src/support/spider/src/ast/expressions/InExpression.spider +114 -0
  115. data/lib/spider-src/support/spider/src/ast/expressions/LogicalExpression.spider +62 -0
  116. data/lib/spider-src/support/spider/src/ast/expressions/MemberExpression.spider +57 -0
  117. data/lib/spider-src/support/spider/src/ast/expressions/NewExpression.spider +40 -0
  118. data/lib/spider-src/support/spider/src/ast/expressions/NullCheckCallExpression.spider +151 -0
  119. data/lib/spider-src/support/spider/src/ast/expressions/NullCoalescingExpression.spider +151 -0
  120. data/lib/spider-src/support/spider/src/ast/expressions/NullPropagatingExpression.spider +190 -0
  121. data/lib/spider-src/support/spider/src/ast/expressions/ObjectExpression.spider +30 -0
  122. data/lib/spider-src/support/spider/src/ast/expressions/ObjectPattern.spider +42 -0
  123. data/lib/spider-src/support/spider/src/ast/expressions/RangeMemberExpression.spider +179 -0
  124. data/lib/spider-src/support/spider/src/ast/expressions/SplatExpression.spider +49 -0
  125. data/lib/spider-src/support/spider/src/ast/expressions/SuperExpression.spider +235 -0
  126. data/lib/spider-src/support/spider/src/ast/expressions/ThisExpression.spider +21 -0
  127. data/lib/spider-src/support/spider/src/ast/expressions/UnaryExpression.spider +158 -0
  128. data/lib/spider-src/support/spider/src/ast/expressions/UpdateExpression.spider +28 -0
  129. data/lib/spider-src/support/spider/src/ast/literals/BooleanLiteral.spider +23 -0
  130. data/lib/spider-src/support/spider/src/ast/literals/Identifier.spider +68 -0
  131. data/lib/spider-src/support/spider/src/ast/literals/NullLiteral.spider +23 -0
  132. data/lib/spider-src/support/spider/src/ast/literals/NumberLiteral.spider +23 -0
  133. data/lib/spider-src/support/spider/src/ast/literals/RegularExpressionLiteral.spider +24 -0
  134. data/lib/spider-src/support/spider/src/ast/literals/StringLiteral.spider +91 -0
  135. data/lib/spider-src/support/spider/src/ast/literals/UndefinedLiteral.spider +30 -0
  136. data/lib/spider-src/support/spider/src/ast/statements/BlockStatement.spider +45 -0
  137. data/lib/spider-src/support/spider/src/ast/statements/BreakStatement.spider +19 -0
  138. data/lib/spider-src/support/spider/src/ast/statements/ContinueStatement.spider +19 -0
  139. data/lib/spider-src/support/spider/src/ast/statements/DebuggerStatement.spider +19 -0
  140. data/lib/spider-src/support/spider/src/ast/statements/DoWhileStatement.spider +28 -0
  141. data/lib/spider-src/support/spider/src/ast/statements/ExportDeclarationStatement.spider +46 -0
  142. data/lib/spider-src/support/spider/src/ast/statements/ExpressionStatement.spider +22 -0
  143. data/lib/spider-src/support/spider/src/ast/statements/FallthroughStatement.spider +85 -0
  144. data/lib/spider-src/support/spider/src/ast/statements/ForInStatement.spider +92 -0
  145. data/lib/spider-src/support/spider/src/ast/statements/ForOfStatement.spider +117 -0
  146. data/lib/spider-src/support/spider/src/ast/statements/ForStatement.spider +51 -0
  147. data/lib/spider-src/support/spider/src/ast/statements/FunctionDeclarationStatement.spider +115 -0
  148. data/lib/spider-src/support/spider/src/ast/statements/GoStatement.spider +44 -0
  149. data/lib/spider-src/support/spider/src/ast/statements/IfStatement.spider +38 -0
  150. data/lib/spider-src/support/spider/src/ast/statements/ImportDeclarationStatement.spider +33 -0
  151. data/lib/spider-src/support/spider/src/ast/statements/PushStatement.spider +40 -0
  152. data/lib/spider-src/support/spider/src/ast/statements/ReturnStatement.spider +28 -0
  153. data/lib/spider-src/support/spider/src/ast/statements/SwitchStatement.spider +161 -0
  154. data/lib/spider-src/support/spider/src/ast/statements/ThrowStatement.spider +23 -0
  155. data/lib/spider-src/support/spider/src/ast/statements/TryStatement.spider +42 -0
  156. data/lib/spider-src/support/spider/src/ast/statements/UntilStatement.spider +36 -0
  157. data/lib/spider-src/support/spider/src/ast/statements/UseStatement.spider +62 -0
  158. data/lib/spider-src/support/spider/src/ast/statements/VariableDeclarationStatement.spider +34 -0
  159. data/lib/spider-src/support/spider/src/ast/statements/WhileStatement.spider +28 -0
  160. data/lib/spider-src/support/spider/src/ast.spider +80 -0
  161. data/lib/spider-src/support/spider/src/spider.pegjs +1434 -0
  162. data/lib/spider-src/support/spider/src/spider.spider +276 -0
  163. data/lib/spider-src/support/spider/test/spider_test.js +1787 -0
  164. data/lib/spider-src/version.rb +5 -0
  165. data/lib/spider-src.rb +37 -0
  166. data/spider-src.gemspec +24 -0
  167. data/test/test_spider_src.rb +33 -0
  168. metadata +225 -0
@@ -0,0 +1,217 @@
1
+ $traceurRuntime.ModuleStore.getAnonymousModule(function() {
2
+ "use strict";
3
+ var parser = module.require("./parser"),
4
+ escodegen = require("escodegen"),
5
+ ast = module.require("./ast"),
6
+ traceur = require("traceur"),
7
+ chalk = require("chalk"),
8
+ transfer = require("multi-stage-sourcemap").transfer;
9
+ exports.compile = function(options) {
10
+ var result = {
11
+ errors: [],
12
+ result: null,
13
+ sourceMap: null
14
+ };
15
+ options.fileName = options.fileName == null ? "tmp" : options.fileName;
16
+ var outFileNameWithoutExtension = options.fileName.substring(0, options.fileName.lastIndexOf("."));
17
+ var outFileName = outFileNameWithoutExtension + ".js";
18
+ var mapFileName = outFileNameWithoutExtension + ".map";
19
+ resetVariableNames();
20
+ ast.Node.setErrorManager(new ErrorManager(result.errors));
21
+ var parsed;
22
+ try {
23
+ parsed = parser.parse(options.text);
24
+ } catch (e) {
25
+ result.errors.push(getParsingError(e));
26
+ }
27
+ if (!parsed) {
28
+ return result;
29
+ }
30
+ var tree = parsed.codegen();
31
+ if (options.target !== "ES5") {
32
+ tree = wrapCode(tree, options.useStrict == null ? true : options.useStrict, options.iifi == null ? true : options.iifi);
33
+ }
34
+ var output = escodegen.generate(tree, {
35
+ sourceMap: options.generateSourceMap ? options.fileName : null,
36
+ sourceMapWithCode: options.generateSourceMap,
37
+ format: {quotes: "double"}
38
+ });
39
+ if (options.generateSourceMap) {
40
+ result.result = output.code;
41
+ result.sourceMap = output.map.toString();
42
+ } else {
43
+ result.result = output;
44
+ }
45
+ if (options.target === "ES5") {
46
+ var traceurCompiler = new traceur.NodeCompiler({
47
+ sourceMaps: options.generateSourceMap,
48
+ asyncFunctions: true
49
+ });
50
+ result.result = traceurCompiler.compile(result.result, options.fileName, outFileName);
51
+ if (options.generateSourceMap) {
52
+ result.sourceMap = transfer({
53
+ toSourceMap: result.sourceMap,
54
+ fromSourceMap: traceurCompiler.getSourceMap().toString()
55
+ });
56
+ }
57
+ } else {
58
+ if (options.generateSourceMap) {
59
+ result.result = result.result + "\n\n//# sourceMappingURL=" + mapFileName;
60
+ }
61
+ }
62
+ if (options.verbose) {
63
+ console.log(JSON.stringify(parsed, null, 4));
64
+ console.log(result.result);
65
+ }
66
+ return result;
67
+ };
68
+ exports.formatErrors = function(fileName, content, errors) {
69
+ var output = [];
70
+ var maxCol = 0;
71
+ var maxLine = 0;
72
+ output.push(chalk.white(fileName), "\n");
73
+ var lines = content.split("\n");
74
+ var tabCharacter = "__SPIDER_TAB";
75
+ var errorIndex = 0;
76
+ for (var $__0 = errors[$traceurRuntime.toProperty(Symbol.iterator)](),
77
+ $__1; !($__1 = $__0.next()).done; ) {
78
+ var error = $__1.value;
79
+ {
80
+ var line = error.loc.start.line;
81
+ var column = error.loc.start.column + 1;
82
+ var lineCharCount = line.toString().length;
83
+ var columnCharCount = column.toString().length;
84
+ maxCol = Math.max(maxCol, columnCharCount);
85
+ maxLine = Math.max(maxCol, lineCharCount);
86
+ output.push(tabCharacter);
87
+ output.push(chalk.gray("line", line));
88
+ output.push(tabCharacter, lineCharCount);
89
+ output.push(chalk.gray("col", column));
90
+ output.push(tabCharacter, columnCharCount);
91
+ output.push(chalk.red(error.message), "\n");
92
+ if (typeof error.loc !== "undefined" && error.loc !== null ? error.loc.start : void 0) {
93
+ var start = error.loc.start;
94
+ var end = error.loc.end;
95
+ if (0 < start.line <= lines.length) {
96
+ output.push(tabCharacter, tabCharacter, tabCharacter);
97
+ output.push(chalk.green(lines[start.line - 1].replace(/(\r\n|\n|\r)/gm, ""), "\n", tabCharacter, tabCharacter));
98
+ output.push(chalk.red(generateErrorColumnString(start.column, end ? end.column - 1 : 0)));
99
+ }
100
+ }
101
+ output.push("\n");
102
+ errorIndex++;
103
+ }
104
+ }
105
+ var str = output.join("");
106
+ var tabLength = Math.max(maxLine, maxCol);
107
+ for (var i = 1; i <= tabLength; i++) {
108
+ var regex = new RegExp(tabCharacter + i, "g");
109
+ str = str.replace(regex, generateSpace(Math.max(2 + tabLength - i, 2)));
110
+ }
111
+ return str.replace(new RegExp(tabCharacter, "g"), generateSpace(2));
112
+ };
113
+ function ErrorManager(errors) {
114
+ this.errors = errors;
115
+ }
116
+ ErrorManager.prototype.error = function(e) {
117
+ this.errors.push(e);
118
+ };
119
+ function getParsingError(e) {
120
+ var message;
121
+ if (e.expected) {
122
+ if (e.found) {
123
+ message = "unexpected " + e.found;
124
+ } else {
125
+ message = "unexpected end of input";
126
+ }
127
+ } else {
128
+ message = e.message;
129
+ }
130
+ return {
131
+ type: "SyntaxError",
132
+ message: message,
133
+ loc: {start: {
134
+ line: e.line,
135
+ column: e.column - 1
136
+ }}
137
+ };
138
+ }
139
+ function resetVariableNames() {
140
+ ast.NullPropagatingExpression.resetVariableNames();
141
+ ast.NullCoalescingExpression.resetVariableNames();
142
+ ast.NullCheckCallExpression.resetVariableNames();
143
+ ast.ExistentialExpression.resetVariableNames();
144
+ ast.FunctionExpression.resetVariableNames();
145
+ ast.ForOfStatement.resetVariableNames();
146
+ ast.ForInExpression.resetVariableNames();
147
+ ast.FallthroughStatement.resetVariableNames();
148
+ ast.SwitchStatement.resetVariableNames();
149
+ }
150
+ function wrapCode(tree) {
151
+ var useStrict = arguments[1] !== (void 0) ? arguments[1] : false;
152
+ var iifi = arguments[2] !== (void 0) ? arguments[2] : false;
153
+ if (!!iifi || !!useStrict) {
154
+ var body = [];
155
+ if (useStrict) {
156
+ body.push({
157
+ "type": "ExpressionStatement",
158
+ "expression": {
159
+ "type": "Literal",
160
+ "value": "use strict"
161
+ }
162
+ });
163
+ }
164
+ if (iifi) {
165
+ body.push({
166
+ "type": "ExpressionStatement",
167
+ "expression": {
168
+ "type": "CallExpression",
169
+ "callee": {
170
+ "type": "FunctionExpression",
171
+ "id": null,
172
+ "params": [],
173
+ "defaults": [],
174
+ "body": {
175
+ "type": "BlockStatement",
176
+ "body": tree.body
177
+ },
178
+ "rest": null,
179
+ "generator": false,
180
+ "expression": false
181
+ },
182
+ "arguments": []
183
+ }
184
+ });
185
+ }
186
+ tree = {
187
+ "type": "Program",
188
+ "body": body
189
+ };
190
+ }
191
+ return tree;
192
+ }
193
+ function generateSpace(len) {
194
+ var chars = [];
195
+ for (var i = 0; i < len; i++) {
196
+ chars.push(" ");
197
+ }
198
+ return chars.join("");
199
+ }
200
+ function generateErrorColumnString(errorStartIndex, errorEndIndex) {
201
+ var chars = [];
202
+ var i = 0;
203
+ if (!errorEndIndex) {
204
+ errorEndIndex = errorStartIndex;
205
+ }
206
+ for (; i < errorStartIndex; i++) {
207
+ chars.push(" ");
208
+ }
209
+ for (i = errorStartIndex; i <= errorEndIndex; i++) {
210
+ chars.push("^");
211
+ }
212
+ return chars.join("");
213
+ }
214
+ return {};
215
+ });
216
+
217
+ //# sourceMappingURL=spider.map
@@ -0,0 +1,61 @@
1
+ {
2
+ "name": "spider-script",
3
+ "version": "0.1.5",
4
+ "main": "spider-script.js",
5
+ "description": "The Next-Gen Programming Language for the Web",
6
+ "homepage": "http://spiderlang.org",
7
+ "bugs": "https://github.com/alongubkin/spider/issues",
8
+ "author": {
9
+ "name": "Alon Gubkin",
10
+ "email": "alon.gubkin@gmail.com"
11
+ },
12
+ "repository": {
13
+ "type": "git",
14
+ "url": "https://github.com/alongubkin/spider"
15
+ },
16
+ "license": "Apache",
17
+ "files": [
18
+ "lib",
19
+ "cli.js",
20
+ "spider-script.js"
21
+ ],
22
+ "keywords": [
23
+ "spider",
24
+ ""
25
+ ],
26
+ "devDependencies": {
27
+ "coveralls": "~2.11.2",
28
+ "grunt-contrib-clean": "~0.6.0",
29
+ "grunt-contrib-copy": "~0.7.0",
30
+ "grunt-contrib-nodeunit": "^0.3.3",
31
+ "grunt-contrib-watch": "^0.6.1",
32
+ "grunt-eslint": "~2.0.0",
33
+ "grunt-mocha-cli": "^1.9.0",
34
+ "grunt-mocha-istanbul": "~2.2.0",
35
+ "grunt-peg": "~1.5.0",
36
+ "grunt-spider-script": "0.0.9",
37
+ "istanbul": "~0.3.2",
38
+ "load-grunt-tasks": "^0.4.0",
39
+ "mocha": "~2.0.1",
40
+ "mocha-lcov-reporter": "0.0.1",
41
+ "shelljs-nodecli": "~0.1.1",
42
+ "should": "~4.1.0",
43
+ "time-grunt": "^0.3.1",
44
+ "grunt": "~0.4.5"
45
+ },
46
+ "scripts": {
47
+ "test": "grunt"
48
+ },
49
+ "bin": {
50
+ "spider": "cli.js"
51
+ },
52
+ "preferGlobal": "true",
53
+ "dependencies": {
54
+ "escodegen": "estools/escodegen#21a9331",
55
+ "pegjs": "~0.8.0",
56
+ "nomnom": "~1.8.1",
57
+ "chalk": "~0.5.1",
58
+ "traceur": "0.0.74",
59
+ "multi-stage-sourcemap": "~0.2.1"
60
+ }
61
+ }
@@ -0,0 +1,6 @@
1
+ require("traceur");
2
+
3
+ var spider = require("./lib/spider");
4
+ for (var prop in spider) {
5
+ exports[prop] = spider[prop];
6
+ }
@@ -0,0 +1,179 @@
1
+ use :node;
2
+
3
+ var Node = module.require('./Node').Node;
4
+
5
+ fn CaseClause(tests, body)
6
+ extends Node {
7
+
8
+ this.type = 'CaseClause';
9
+
10
+ this.body = body;
11
+ this.body.parent = this;
12
+
13
+ this.tests = tests;
14
+ if this.tests? {
15
+ for test in this.tests {
16
+ test.parent = this;
17
+ }
18
+ }
19
+ }
20
+
21
+ CaseClause.prototype.codegen = (branchFallthrough) -> {
22
+ if !super.codegen() {
23
+ return;
24
+ }
25
+
26
+ if !this.tests? and !branchFallthrough {
27
+ return this.body.codegen();
28
+ }
29
+
30
+ this.type = "IfStatement";
31
+ this.switchCase = true;
32
+
33
+ var rangeError = false;
34
+
35
+ if this.tests? {
36
+ for test in this.tests {
37
+ var equalsToDiscriminant;
38
+
39
+ if test.type == "Range" {
40
+ var fromCheck;
41
+ if test.start {
42
+ fromCheck = {
43
+ "type": "BinaryExpression",
44
+ "operator": ">=",
45
+ "left": this.parent.discriminant,
46
+ "right": test.start
47
+ };
48
+ }
49
+
50
+ var toCheck;
51
+ if test.to {
52
+ toCheck = {
53
+ "type": "BinaryExpression",
54
+ "operator": "<" + ("=" if test.operator == ".." else ""),
55
+ "left": this.parent.discriminant,
56
+ "right": test.to
57
+ };
58
+ }
59
+
60
+ if fromCheck && toCheck {
61
+ equalsToDiscriminant = {
62
+ "type": "LogicalExpression",
63
+ "operator": "&&",
64
+ "left": fromCheck,
65
+ "right": toCheck
66
+ };
67
+ } else if fromCheck || toCheck {
68
+ equalsToDiscriminant = fromCheck ?? toCheck;
69
+ } else {
70
+ rangeError = test;
71
+ break;
72
+ }
73
+ } else if test.type == "ArrayExpression" {
74
+ test = test.codegen();
75
+
76
+ equalsToDiscriminant = {
77
+ "type": "BinaryExpression",
78
+ "operator": ">=",
79
+ "left": {
80
+ "type": "MemberExpression",
81
+ "computed": false,
82
+ "object": this.parent.discriminant,
83
+ "property": {
84
+ "type": "Identifier",
85
+ "name": "length"
86
+ }
87
+ },
88
+ "right": {
89
+ "type": "Literal",
90
+ "value": test.elements.length
91
+ }
92
+ };
93
+
94
+ for element, i in test.elements {
95
+ if element? {
96
+ equalsToDiscriminant = {
97
+ "type": "LogicalExpression",
98
+ "operator": "&&",
99
+ "left": equalsToDiscriminant,
100
+ "right": {
101
+ "type": "BinaryExpression",
102
+ "operator": "===",
103
+ "left": {
104
+ "type": "MemberExpression",
105
+ "computed": true,
106
+ "object": this.parent.discriminant,
107
+ "property": {
108
+ "type": "Literal",
109
+ "value": i
110
+ }
111
+ },
112
+ "right": element
113
+ }
114
+ };
115
+ }
116
+ }
117
+ } else {
118
+ equalsToDiscriminant = {
119
+ "type": "BinaryExpression",
120
+ "operator": "===",
121
+ "left": this.parent.discriminant,
122
+ "right": test.codegen()
123
+ };
124
+ }
125
+
126
+ if !this.test {
127
+ this.test = equalsToDiscriminant;
128
+ } else {
129
+ this.test = {
130
+ "type": "LogicalExpression",
131
+ "operator": "||",
132
+ "left": this.test,
133
+ "right": equalsToDiscriminant
134
+ };
135
+ }
136
+ }
137
+ }
138
+
139
+ if rangeError {
140
+ Node.getErrorManager().error({
141
+ type: "EmptyRange",
142
+ message: "empty range in case clause is disallowed.",
143
+ loc: rangeError.loc
144
+ });
145
+
146
+ return null;
147
+ }
148
+
149
+ this.consequent = this.body.codegen();
150
+
151
+ if branchFallthrough {
152
+ var fallthroughTest = {
153
+ "type": "BinaryExpression",
154
+ "left": this.parent.fallthroughId,
155
+ "operator": "<",
156
+ "right": {
157
+ "type": "Literal",
158
+ "value": 2
159
+ }
160
+ };
161
+
162
+ if !this.tests? {
163
+ this.test = fallthroughTest;
164
+ } else {
165
+ this.test = {
166
+ "type": "LogicalExpression",
167
+ "operator": "&&",
168
+ "left": fallthroughTest,
169
+ "right": this.test
170
+ };
171
+ }
172
+ }
173
+
174
+ this.alternate = null;
175
+
176
+ return this;
177
+ };
178
+
179
+ exports.CaseClause = CaseClause;
@@ -0,0 +1,30 @@
1
+ use :node;
2
+
3
+ var Node = module.require('./Node').Node;
4
+
5
+ fn CatchClause(param, body)
6
+ extends Node {
7
+
8
+ this.type = 'CatchClause';
9
+
10
+ this.param = param;
11
+ this.param.parent = this;
12
+
13
+ this.body = body;
14
+ this.body.parent = this;
15
+ }
16
+
17
+ CatchClause.prototype.codegen = () -> {
18
+ if !super.codegen() {
19
+ return;
20
+ }
21
+
22
+ this.param = this.param.codegen(false);
23
+ this.defineIdentifier(this.param);
24
+
25
+ this.body = this.body.codegen();
26
+
27
+ return this;
28
+ };
29
+
30
+ exports.CatchClause = CatchClause;
@@ -0,0 +1,19 @@
1
+ use :node;
2
+
3
+ var Node = module.require('./Node').Node;
4
+
5
+ fn ExportBatchSpecifier()
6
+ extends Node {
7
+
8
+ this.type = "ExportBatchSpecifier";
9
+ }
10
+
11
+ ExportBatchSpecifier.prototype.codegen = () -> {
12
+ if !super.codegen() {
13
+ return;
14
+ }
15
+
16
+ return this;
17
+ };
18
+
19
+ exports.ExportBatchSpecifier = ExportBatchSpecifier;
@@ -0,0 +1,37 @@
1
+ use :node;
2
+
3
+ var Node = module.require('./Node').Node;
4
+
5
+ fn ExportSpecifier(id, alias)
6
+ extends Node {
7
+
8
+ this.type = "ExportSpecifier";
9
+
10
+ this.id = id;
11
+ this.id.parent = this;
12
+
13
+ if alias? {
14
+ this.alias = alias;
15
+ this.alias.parent = this;
16
+ }
17
+ }
18
+
19
+ ExportSpecifier.prototype.codegen = () -> {
20
+ if !super.codegen() {
21
+ return;
22
+ }
23
+
24
+ this.id = this.id.codegen(false);
25
+
26
+ ::Object.defineProperty(this, 'name', {
27
+ value: {
28
+ "type": "Identifier",
29
+ "name": this.alias.name
30
+ } if this.alias? else null,
31
+ enumerable: true
32
+ });
33
+
34
+ return this;
35
+ };
36
+
37
+ exports.ExportSpecifier = ExportSpecifier;
@@ -0,0 +1,25 @@
1
+ use :node;
2
+
3
+ var Node = module.require('./Node').Node;
4
+
5
+ fn ImportDefaultSpecifier(id)
6
+ extends Node {
7
+
8
+ this.type = "ImportDefaultSpecifier";
9
+
10
+ this.id = id;
11
+ this.id.parent = this;
12
+ }
13
+
14
+ ImportDefaultSpecifier.prototype.codegen = () -> {
15
+ if !super.codegen() {
16
+ return;
17
+ }
18
+
19
+ this.id = this.id.codegen(false);
20
+ this.getContext().node.defineIdentifier(this.id);
21
+
22
+ return this;
23
+ };
24
+
25
+ exports.ImportDefaultSpecifier = ImportDefaultSpecifier;
@@ -0,0 +1,25 @@
1
+ use :node;
2
+
3
+ var Node = module.require('./Node').Node;
4
+
5
+ fn ImportNamespaceSpecifier(id)
6
+ extends Node {
7
+
8
+ this.type = "ImportNamespaceSpecifier";
9
+
10
+ this.id = id;
11
+ this.id.parent = this;
12
+ }
13
+
14
+ ImportNamespaceSpecifier.prototype.codegen = () -> {
15
+ if !super.codegen() {
16
+ return;
17
+ }
18
+
19
+ this.id = this.id.codegen(false);
20
+ this.getContext().node.defineIdentifier(this.id);
21
+
22
+ return this;
23
+ };
24
+
25
+ exports.ImportNamespaceSpecifier = ImportNamespaceSpecifier;
@@ -0,0 +1,44 @@
1
+ use :node;
2
+
3
+ var Node = module.require('./Node').Node;
4
+
5
+ fn ImportSpecifier(id, alias)
6
+ extends Node {
7
+
8
+ this.type = "ImportSpecifier";
9
+
10
+ if id? {
11
+ this.id = id;
12
+ this.id.parent = this;
13
+ }
14
+
15
+ if alias? {
16
+ this.alias = alias;
17
+ this.alias.parent = this;
18
+ }
19
+ }
20
+
21
+ ImportSpecifier.prototype.codegen = () -> {
22
+ if !super.codegen() {
23
+ return;
24
+ }
25
+
26
+ if this.id? {
27
+ this.id = this.id.codegen(false);
28
+ } else {
29
+ this.type = "ImportNamespaceSpecifier";
30
+ }
31
+
32
+ ::Object.defineProperty(this, 'name', {
33
+ value: {
34
+ "type": "Identifier",
35
+ "name": this.alias.name
36
+ } if this.alias? else null,
37
+ enumerable: true
38
+ });
39
+
40
+ this.getContext().node.defineIdentifier(this.alias ?? this.id);
41
+ return this;
42
+ };
43
+
44
+ exports.ImportSpecifier = ImportSpecifier;