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,276 @@
|
|
1
|
+
use :node;
|
2
|
+
|
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
|
+
|
10
|
+
/**
|
11
|
+
* Compiles Spider code to JavaScript.
|
12
|
+
*
|
13
|
+
* @param {string} options.text
|
14
|
+
* @param {string} options.fileName
|
15
|
+
* @param {string} options.target
|
16
|
+
* @param {boolean} [options.verbose]
|
17
|
+
* @param {boolean} [options.generateSourceMap]
|
18
|
+
* @param {boolean} [options.iifi]
|
19
|
+
* @param {boolean} [options.useStrict]
|
20
|
+
*/
|
21
|
+
exports.compile = fn (options) {
|
22
|
+
var result = {
|
23
|
+
errors: [],
|
24
|
+
result: null,
|
25
|
+
sourceMap: null
|
26
|
+
};
|
27
|
+
|
28
|
+
options.fileName = options.fileName ?? "tmp";
|
29
|
+
|
30
|
+
var outFileNameWithoutExtension = options.fileName.substring(0,
|
31
|
+
options.fileName.lastIndexOf('.'));
|
32
|
+
|
33
|
+
var outFileName = outFileNameWithoutExtension + ".js";
|
34
|
+
var mapFileName = outFileNameWithoutExtension + ".map";
|
35
|
+
|
36
|
+
::resetVariableNames();
|
37
|
+
ast.Node.setErrorManager(new ::ErrorManager(result.errors));
|
38
|
+
|
39
|
+
var parsed;
|
40
|
+
|
41
|
+
try {
|
42
|
+
parsed = parser.parse(options.text);
|
43
|
+
} catch e {
|
44
|
+
result.errors.push(::getParsingError(e));
|
45
|
+
}
|
46
|
+
|
47
|
+
if not parsed {
|
48
|
+
return result;
|
49
|
+
}
|
50
|
+
|
51
|
+
var tree = parsed.codegen();
|
52
|
+
if options.target != "ES5" {
|
53
|
+
tree = ::wrapCode(tree,
|
54
|
+
options.useStrict ?? true,
|
55
|
+
options.iifi ?? true);
|
56
|
+
}
|
57
|
+
|
58
|
+
var output = escodegen.generate(tree, {
|
59
|
+
sourceMap: options.fileName if options.generateSourceMap else null,
|
60
|
+
sourceMapWithCode: options.generateSourceMap,
|
61
|
+
format: {
|
62
|
+
quotes: 'double'
|
63
|
+
}
|
64
|
+
});
|
65
|
+
|
66
|
+
if options.generateSourceMap {
|
67
|
+
result.result = output.code;
|
68
|
+
result.sourceMap = output.map.toString();
|
69
|
+
} else {
|
70
|
+
result.result = output;
|
71
|
+
}
|
72
|
+
|
73
|
+
if options.target == "ES5" {
|
74
|
+
var traceurCompiler = new traceur.NodeCompiler({
|
75
|
+
sourceMaps: options.generateSourceMap,
|
76
|
+
asyncFunctions: true
|
77
|
+
});
|
78
|
+
|
79
|
+
result.result = traceurCompiler.compile(result.result, options.fileName, outFileName);
|
80
|
+
|
81
|
+
if options.generateSourceMap {
|
82
|
+
result.sourceMap = transfer({
|
83
|
+
toSourceMap: result.sourceMap,
|
84
|
+
fromSourceMap: traceurCompiler.getSourceMap().toString()
|
85
|
+
});
|
86
|
+
}
|
87
|
+
} else if options.generateSourceMap {
|
88
|
+
result.result = result.result + "\n\n//# sourceMappingURL=" + mapFileName;
|
89
|
+
}
|
90
|
+
|
91
|
+
if options.verbose {
|
92
|
+
console.log(JSON.stringify(parsed, null, 4));
|
93
|
+
console.log(result.result);
|
94
|
+
}
|
95
|
+
|
96
|
+
return result;
|
97
|
+
};
|
98
|
+
|
99
|
+
/**
|
100
|
+
* Format errors array with colors
|
101
|
+
*/
|
102
|
+
exports.formatErrors = fn (fileName, content, errors) {
|
103
|
+
var output = [];
|
104
|
+
|
105
|
+
var maxCol = 0;
|
106
|
+
var maxLine = 0;
|
107
|
+
|
108
|
+
output.push(chalk.white(fileName), "\n");
|
109
|
+
|
110
|
+
var lines = content.split("\n");
|
111
|
+
var tabCharacter = "__SPIDER_TAB";
|
112
|
+
|
113
|
+
for error, errorIndex in errors {
|
114
|
+
var line = error.loc.start.line;
|
115
|
+
var column = error.loc.start.column + 1;
|
116
|
+
|
117
|
+
var lineCharCount = line.toString().length;
|
118
|
+
var columnCharCount = column.toString().length;
|
119
|
+
|
120
|
+
maxCol = Math.max(maxCol, columnCharCount);
|
121
|
+
maxLine = Math.max(maxCol, lineCharCount);
|
122
|
+
|
123
|
+
output.push(tabCharacter);
|
124
|
+
output.push(chalk.gray("line", line));
|
125
|
+
output.push(tabCharacter, lineCharCount);
|
126
|
+
output.push(chalk.gray("col", column));
|
127
|
+
output.push(tabCharacter, columnCharCount);
|
128
|
+
|
129
|
+
output.push(chalk.red(error.message), "\n");
|
130
|
+
|
131
|
+
if error.loc?.start {
|
132
|
+
var start = error.loc.start;
|
133
|
+
var end = error.loc.end;
|
134
|
+
|
135
|
+
if 0 < start.line <= lines.length {
|
136
|
+
output.push(tabCharacter, tabCharacter, tabCharacter);
|
137
|
+
|
138
|
+
output.push(chalk.green(lines[start.line - 1].replace(/(\r\n|\n|\r)/gm, ""),
|
139
|
+
"\n", tabCharacter, tabCharacter));
|
140
|
+
output.push(chalk.red(::generateErrorColumnString(start.column, end.column - 1 if end else 0)));
|
141
|
+
}
|
142
|
+
}
|
143
|
+
|
144
|
+
output.push("\n");
|
145
|
+
}
|
146
|
+
|
147
|
+
var str = output.join("");
|
148
|
+
var tabLength = Math.max(maxLine, maxCol);
|
149
|
+
|
150
|
+
for var i = 1; i <= tabLength; i++ {
|
151
|
+
var regex = new RegExp(tabCharacter + i, "g");
|
152
|
+
str = str.replace(regex, ::generateSpace(Math.max(2 + tabLength - i, 2)));
|
153
|
+
}
|
154
|
+
|
155
|
+
return str.replace(new RegExp(tabCharacter, "g"), ::generateSpace(2));
|
156
|
+
};
|
157
|
+
|
158
|
+
fn ErrorManager(errors) {
|
159
|
+
this.errors = errors;
|
160
|
+
}
|
161
|
+
|
162
|
+
ErrorManager.prototype.error = (e) -> {
|
163
|
+
this.errors.push(e);
|
164
|
+
};
|
165
|
+
|
166
|
+
fn getParsingError(e) {
|
167
|
+
var message;
|
168
|
+
|
169
|
+
if e.expected {
|
170
|
+
if e.found {
|
171
|
+
message = "unexpected " + e.found;
|
172
|
+
} else {
|
173
|
+
message = "unexpected end of input";
|
174
|
+
}
|
175
|
+
} else {
|
176
|
+
message = e.message;
|
177
|
+
}
|
178
|
+
|
179
|
+
return {
|
180
|
+
type: "SyntaxError",
|
181
|
+
message: message,
|
182
|
+
loc: {
|
183
|
+
start: {
|
184
|
+
line: e.line,
|
185
|
+
column: e.column - 1
|
186
|
+
}
|
187
|
+
}
|
188
|
+
};
|
189
|
+
}
|
190
|
+
|
191
|
+
fn resetVariableNames() {
|
192
|
+
ast.NullPropagatingExpression.resetVariableNames();
|
193
|
+
ast.NullCoalescingExpression.resetVariableNames();
|
194
|
+
ast.NullCheckCallExpression.resetVariableNames();
|
195
|
+
ast.ExistentialExpression.resetVariableNames();
|
196
|
+
ast.FunctionExpression.resetVariableNames();
|
197
|
+
ast.ForOfStatement.resetVariableNames();
|
198
|
+
ast.ForInExpression.resetVariableNames();
|
199
|
+
ast.FallthroughStatement.resetVariableNames();
|
200
|
+
ast.SwitchStatement.resetVariableNames();
|
201
|
+
}
|
202
|
+
|
203
|
+
fn wrapCode(tree, useStrict = false, iifi = false) {
|
204
|
+
if iifi or useStrict {
|
205
|
+
var body = [];
|
206
|
+
|
207
|
+
if useStrict {
|
208
|
+
body.push({
|
209
|
+
"type": "ExpressionStatement",
|
210
|
+
"expression": {
|
211
|
+
"type": "Literal",
|
212
|
+
"value": "use strict"
|
213
|
+
}
|
214
|
+
});
|
215
|
+
}
|
216
|
+
|
217
|
+
// Add (function () { ... })()
|
218
|
+
if iifi {
|
219
|
+
body.push({
|
220
|
+
"type": "ExpressionStatement",
|
221
|
+
"expression": {
|
222
|
+
"type": "CallExpression",
|
223
|
+
"callee": {
|
224
|
+
"type": "FunctionExpression",
|
225
|
+
"id": null,
|
226
|
+
"params": [],
|
227
|
+
"defaults": [],
|
228
|
+
"body": {
|
229
|
+
"type": "BlockStatement",
|
230
|
+
"body": tree.body
|
231
|
+
},
|
232
|
+
"rest": null,
|
233
|
+
"generator": false,
|
234
|
+
"expression": false
|
235
|
+
},
|
236
|
+
"arguments": []
|
237
|
+
}
|
238
|
+
});
|
239
|
+
}
|
240
|
+
|
241
|
+
tree = {
|
242
|
+
"type": "Program",
|
243
|
+
"body": body
|
244
|
+
};
|
245
|
+
}
|
246
|
+
|
247
|
+
return tree;
|
248
|
+
}
|
249
|
+
|
250
|
+
fn generateSpace(len) {
|
251
|
+
var chars = [];
|
252
|
+
for var i = 0; i < len; i++ {
|
253
|
+
chars.push(' ');
|
254
|
+
}
|
255
|
+
|
256
|
+
return chars.join('');
|
257
|
+
}
|
258
|
+
|
259
|
+
fn generateErrorColumnString(errorStartIndex, errorEndIndex) {
|
260
|
+
var chars = [];
|
261
|
+
var i = 0;
|
262
|
+
|
263
|
+
if (!errorEndIndex) {
|
264
|
+
errorEndIndex = errorStartIndex;
|
265
|
+
}
|
266
|
+
|
267
|
+
for ; i < errorStartIndex; i++ {
|
268
|
+
chars.push(' ');
|
269
|
+
}
|
270
|
+
|
271
|
+
for i = errorStartIndex; i <= errorEndIndex; i++ {
|
272
|
+
chars.push('^');
|
273
|
+
}
|
274
|
+
|
275
|
+
return chars.join('');
|
276
|
+
}
|