spider-src 0.1.5
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +7 -0
- data/.gitignore +2 -0
- data/Gemfile +7 -0
- data/LICENSE.txt +74 -0
- data/README.md +37 -0
- data/Rakefile +25 -0
- data/lib/spider-src/support/spider/.eslintrc +17 -0
- data/lib/spider-src/support/spider/.npmignore +9 -0
- data/lib/spider-src/support/spider/.travis.yml +7 -0
- data/lib/spider-src/support/spider/.yo-rc.json +3 -0
- data/lib/spider-src/support/spider/CHANGELOG.md +64 -0
- data/lib/spider-src/support/spider/Gruntfile.js +97 -0
- data/lib/spider-src/support/spider/Gruntfile.spider +93 -0
- data/lib/spider-src/support/spider/LICENSE +201 -0
- data/lib/spider-src/support/spider/README.md +50 -0
- data/lib/spider-src/support/spider/cli.js +119 -0
- data/lib/spider-src/support/spider/lib/ast/CaseClause.js +179 -0
- data/lib/spider-src/support/spider/lib/ast/CatchClause.js +26 -0
- data/lib/spider-src/support/spider/lib/ast/ExportBatchSpecifier.js +19 -0
- data/lib/spider-src/support/spider/lib/ast/ExportSpecifier.js +33 -0
- data/lib/spider-src/support/spider/lib/ast/ImportDefaultSpecifier.js +23 -0
- data/lib/spider-src/support/spider/lib/ast/ImportNamespaceSpecifier.js +23 -0
- data/lib/spider-src/support/spider/lib/ast/ImportSpecifier.js +40 -0
- data/lib/spider-src/support/spider/lib/ast/Node.js +93 -0
- data/lib/spider-src/support/spider/lib/ast/Parameter.js +229 -0
- data/lib/spider-src/support/spider/lib/ast/Program.js +58 -0
- data/lib/spider-src/support/spider/lib/ast/Property.js +32 -0
- data/lib/spider-src/support/spider/lib/ast/Range.js +257 -0
- data/lib/spider-src/support/spider/lib/ast/VariableDeclarator.js +29 -0
- data/lib/spider-src/support/spider/lib/ast/expressions/ArrayExpression.js +41 -0
- data/lib/spider-src/support/spider/lib/ast/expressions/ArrayPattern.js +45 -0
- data/lib/spider-src/support/spider/lib/ast/expressions/AssignmentExpression.js +29 -0
- data/lib/spider-src/support/spider/lib/ast/expressions/BinaryExpression.js +104 -0
- data/lib/spider-src/support/spider/lib/ast/expressions/CallExpression.js +139 -0
- data/lib/spider-src/support/spider/lib/ast/expressions/ConditionalExpression.js +31 -0
- data/lib/spider-src/support/spider/lib/ast/expressions/CurryCallExpression.js +102 -0
- data/lib/spider-src/support/spider/lib/ast/expressions/ExistentialExpression.js +83 -0
- data/lib/spider-src/support/spider/lib/ast/expressions/ForInExpression.js +116 -0
- data/lib/spider-src/support/spider/lib/ast/expressions/FunctionExpression.js +157 -0
- data/lib/spider-src/support/spider/lib/ast/expressions/InExpression.js +99 -0
- data/lib/spider-src/support/spider/lib/ast/expressions/LogicalExpression.js +50 -0
- data/lib/spider-src/support/spider/lib/ast/expressions/MemberExpression.js +43 -0
- data/lib/spider-src/support/spider/lib/ast/expressions/NewExpression.js +46 -0
- data/lib/spider-src/support/spider/lib/ast/expressions/NullCheckCallExpression.js +132 -0
- data/lib/spider-src/support/spider/lib/ast/expressions/NullCoalescingExpression.js +114 -0
- data/lib/spider-src/support/spider/lib/ast/expressions/NullPropagatingExpression.js +161 -0
- data/lib/spider-src/support/spider/lib/ast/expressions/ObjectExpression.js +39 -0
- data/lib/spider-src/support/spider/lib/ast/expressions/ObjectPattern.js +49 -0
- data/lib/spider-src/support/spider/lib/ast/expressions/RangeMemberExpression.js +157 -0
- data/lib/spider-src/support/spider/lib/ast/expressions/SplatExpression.js +48 -0
- data/lib/spider-src/support/spider/lib/ast/expressions/SuperExpression.js +170 -0
- data/lib/spider-src/support/spider/lib/ast/expressions/ThisExpression.js +22 -0
- data/lib/spider-src/support/spider/lib/ast/expressions/UnaryExpression.js +147 -0
- data/lib/spider-src/support/spider/lib/ast/expressions/UpdateExpression.js +26 -0
- data/lib/spider-src/support/spider/lib/ast/literals/BooleanLiteral.js +24 -0
- data/lib/spider-src/support/spider/lib/ast/literals/Identifier.js +60 -0
- data/lib/spider-src/support/spider/lib/ast/literals/NullLiteral.js +24 -0
- data/lib/spider-src/support/spider/lib/ast/literals/NumberLiteral.js +24 -0
- data/lib/spider-src/support/spider/lib/ast/literals/RegularExpressionLiteral.js +25 -0
- data/lib/spider-src/support/spider/lib/ast/literals/StringLiteral.js +90 -0
- data/lib/spider-src/support/spider/lib/ast/literals/UndefinedLiteral.js +30 -0
- data/lib/spider-src/support/spider/lib/ast/statements/BlockStatement.js +47 -0
- data/lib/spider-src/support/spider/lib/ast/statements/BreakStatement.js +19 -0
- data/lib/spider-src/support/spider/lib/ast/statements/ContinueStatement.js +19 -0
- data/lib/spider-src/support/spider/lib/ast/statements/DebuggerStatement.js +19 -0
- data/lib/spider-src/support/spider/lib/ast/statements/DoWhileStatement.js +25 -0
- data/lib/spider-src/support/spider/lib/ast/statements/ExportDeclarationStatement.js +51 -0
- data/lib/spider-src/support/spider/lib/ast/statements/ExpressionStatement.js +22 -0
- data/lib/spider-src/support/spider/lib/ast/statements/FallthroughStatement.js +74 -0
- data/lib/spider-src/support/spider/lib/ast/statements/ForInStatement.js +79 -0
- data/lib/spider-src/support/spider/lib/ast/statements/ForOfStatement.js +98 -0
- data/lib/spider-src/support/spider/lib/ast/statements/ForStatement.js +43 -0
- data/lib/spider-src/support/spider/lib/ast/statements/FunctionDeclarationStatement.js +104 -0
- data/lib/spider-src/support/spider/lib/ast/statements/GoStatement.js +41 -0
- data/lib/spider-src/support/spider/lib/ast/statements/IfStatement.js +32 -0
- data/lib/spider-src/support/spider/lib/ast/statements/ImportDeclarationStatement.js +40 -0
- data/lib/spider-src/support/spider/lib/ast/statements/PushStatement.js +37 -0
- data/lib/spider-src/support/spider/lib/ast/statements/ReturnStatement.js +26 -0
- data/lib/spider-src/support/spider/lib/ast/statements/SwitchStatement.js +159 -0
- data/lib/spider-src/support/spider/lib/ast/statements/ThrowStatement.js +22 -0
- data/lib/spider-src/support/spider/lib/ast/statements/TryStatement.js +36 -0
- data/lib/spider-src/support/spider/lib/ast/statements/UntilStatement.js +31 -0
- data/lib/spider-src/support/spider/lib/ast/statements/UseStatement.js +49 -0
- data/lib/spider-src/support/spider/lib/ast/statements/VariableDeclarationStatement.js +36 -0
- data/lib/spider-src/support/spider/lib/ast/statements/WhileStatement.js +25 -0
- data/lib/spider-src/support/spider/lib/ast.js +16 -0
- data/lib/spider-src/support/spider/lib/parser.js +14878 -0
- data/lib/spider-src/support/spider/lib/spider.js +217 -0
- data/lib/spider-src/support/spider/package.json +61 -0
- data/lib/spider-src/support/spider/spider-script.js +6 -0
- data/lib/spider-src/support/spider/src/ast/CaseClause.spider +179 -0
- data/lib/spider-src/support/spider/src/ast/CatchClause.spider +30 -0
- data/lib/spider-src/support/spider/src/ast/ExportBatchSpecifier.spider +19 -0
- data/lib/spider-src/support/spider/src/ast/ExportSpecifier.spider +37 -0
- data/lib/spider-src/support/spider/src/ast/ImportDefaultSpecifier.spider +25 -0
- data/lib/spider-src/support/spider/src/ast/ImportNamespaceSpecifier.spider +25 -0
- data/lib/spider-src/support/spider/src/ast/ImportSpecifier.spider +44 -0
- data/lib/spider-src/support/spider/src/ast/Node.spider +104 -0
- data/lib/spider-src/support/spider/src/ast/Parameter.spider +233 -0
- data/lib/spider-src/support/spider/src/ast/Program.spider +109 -0
- data/lib/spider-src/support/spider/src/ast/Property.spider +36 -0
- data/lib/spider-src/support/spider/src/ast/Range.spider +291 -0
- data/lib/spider-src/support/spider/src/ast/VariableDeclarator.spider +33 -0
- data/lib/spider-src/support/spider/src/ast/expressions/ArrayExpression.spider +32 -0
- data/lib/spider-src/support/spider/src/ast/expressions/ArrayPattern.spider +37 -0
- data/lib/spider-src/support/spider/src/ast/expressions/AssignmentExpression.spider +34 -0
- data/lib/spider-src/support/spider/src/ast/expressions/BinaryExpression.spider +125 -0
- data/lib/spider-src/support/spider/src/ast/expressions/CallExpression.spider +149 -0
- data/lib/spider-src/support/spider/src/ast/expressions/ConditionalExpression.spider +34 -0
- data/lib/spider-src/support/spider/src/ast/expressions/CurryCallExpression.spider +109 -0
- data/lib/spider-src/support/spider/src/ast/expressions/ExistentialExpression.spider +102 -0
- data/lib/spider-src/support/spider/src/ast/expressions/ForInExpression.spider +140 -0
- data/lib/spider-src/support/spider/src/ast/expressions/FunctionExpression.spider +183 -0
- data/lib/spider-src/support/spider/src/ast/expressions/InExpression.spider +114 -0
- data/lib/spider-src/support/spider/src/ast/expressions/LogicalExpression.spider +62 -0
- data/lib/spider-src/support/spider/src/ast/expressions/MemberExpression.spider +57 -0
- data/lib/spider-src/support/spider/src/ast/expressions/NewExpression.spider +40 -0
- data/lib/spider-src/support/spider/src/ast/expressions/NullCheckCallExpression.spider +151 -0
- data/lib/spider-src/support/spider/src/ast/expressions/NullCoalescingExpression.spider +151 -0
- data/lib/spider-src/support/spider/src/ast/expressions/NullPropagatingExpression.spider +190 -0
- data/lib/spider-src/support/spider/src/ast/expressions/ObjectExpression.spider +30 -0
- data/lib/spider-src/support/spider/src/ast/expressions/ObjectPattern.spider +42 -0
- data/lib/spider-src/support/spider/src/ast/expressions/RangeMemberExpression.spider +179 -0
- data/lib/spider-src/support/spider/src/ast/expressions/SplatExpression.spider +49 -0
- data/lib/spider-src/support/spider/src/ast/expressions/SuperExpression.spider +235 -0
- data/lib/spider-src/support/spider/src/ast/expressions/ThisExpression.spider +21 -0
- data/lib/spider-src/support/spider/src/ast/expressions/UnaryExpression.spider +158 -0
- data/lib/spider-src/support/spider/src/ast/expressions/UpdateExpression.spider +28 -0
- data/lib/spider-src/support/spider/src/ast/literals/BooleanLiteral.spider +23 -0
- data/lib/spider-src/support/spider/src/ast/literals/Identifier.spider +68 -0
- data/lib/spider-src/support/spider/src/ast/literals/NullLiteral.spider +23 -0
- data/lib/spider-src/support/spider/src/ast/literals/NumberLiteral.spider +23 -0
- data/lib/spider-src/support/spider/src/ast/literals/RegularExpressionLiteral.spider +24 -0
- data/lib/spider-src/support/spider/src/ast/literals/StringLiteral.spider +91 -0
- data/lib/spider-src/support/spider/src/ast/literals/UndefinedLiteral.spider +30 -0
- data/lib/spider-src/support/spider/src/ast/statements/BlockStatement.spider +45 -0
- data/lib/spider-src/support/spider/src/ast/statements/BreakStatement.spider +19 -0
- data/lib/spider-src/support/spider/src/ast/statements/ContinueStatement.spider +19 -0
- data/lib/spider-src/support/spider/src/ast/statements/DebuggerStatement.spider +19 -0
- data/lib/spider-src/support/spider/src/ast/statements/DoWhileStatement.spider +28 -0
- data/lib/spider-src/support/spider/src/ast/statements/ExportDeclarationStatement.spider +46 -0
- data/lib/spider-src/support/spider/src/ast/statements/ExpressionStatement.spider +22 -0
- data/lib/spider-src/support/spider/src/ast/statements/FallthroughStatement.spider +85 -0
- data/lib/spider-src/support/spider/src/ast/statements/ForInStatement.spider +92 -0
- data/lib/spider-src/support/spider/src/ast/statements/ForOfStatement.spider +117 -0
- data/lib/spider-src/support/spider/src/ast/statements/ForStatement.spider +51 -0
- data/lib/spider-src/support/spider/src/ast/statements/FunctionDeclarationStatement.spider +115 -0
- data/lib/spider-src/support/spider/src/ast/statements/GoStatement.spider +44 -0
- data/lib/spider-src/support/spider/src/ast/statements/IfStatement.spider +38 -0
- data/lib/spider-src/support/spider/src/ast/statements/ImportDeclarationStatement.spider +33 -0
- data/lib/spider-src/support/spider/src/ast/statements/PushStatement.spider +40 -0
- data/lib/spider-src/support/spider/src/ast/statements/ReturnStatement.spider +28 -0
- data/lib/spider-src/support/spider/src/ast/statements/SwitchStatement.spider +161 -0
- data/lib/spider-src/support/spider/src/ast/statements/ThrowStatement.spider +23 -0
- data/lib/spider-src/support/spider/src/ast/statements/TryStatement.spider +42 -0
- data/lib/spider-src/support/spider/src/ast/statements/UntilStatement.spider +36 -0
- data/lib/spider-src/support/spider/src/ast/statements/UseStatement.spider +62 -0
- data/lib/spider-src/support/spider/src/ast/statements/VariableDeclarationStatement.spider +34 -0
- data/lib/spider-src/support/spider/src/ast/statements/WhileStatement.spider +28 -0
- data/lib/spider-src/support/spider/src/ast.spider +80 -0
- data/lib/spider-src/support/spider/src/spider.pegjs +1434 -0
- data/lib/spider-src/support/spider/src/spider.spider +276 -0
- data/lib/spider-src/support/spider/test/spider_test.js +1787 -0
- data/lib/spider-src/version.rb +5 -0
- data/lib/spider-src.rb +37 -0
- data/spider-src.gemspec +24 -0
- data/test/test_spider_src.rb +33 -0
- 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,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;
|