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,104 @@
1
+ use :node;
2
+
3
+ fn Node() {
4
+ var self = this;
5
+ self.codeGenerated = false;
6
+ self.definedIdentifiers = [];
7
+
8
+ ::Object.defineProperty(self, 'parent', {
9
+ value: null,
10
+ writable: true,
11
+ configurable: true,
12
+ enumerable: false
13
+ });
14
+
15
+ self.getContext = () -> {
16
+ if self.type == 'Program' ||
17
+ self.type == 'BlockStatement' {
18
+ return {
19
+ node: self,
20
+ position: -1
21
+ };
22
+ }
23
+
24
+ if !self.parent? {
25
+ return null;
26
+ }
27
+
28
+ var context = self.parent.getContext();
29
+
30
+ if !context? {
31
+ return null;
32
+ }
33
+
34
+ if context.position == -1 {
35
+ return {
36
+ node: context.node,
37
+ position: context.node.body.indexOf(self)
38
+ };
39
+ } else {
40
+ return context;
41
+ }
42
+ };
43
+
44
+ self.defineIdentifier = (identifier) -> {
45
+ self.definedIdentifiers.push(identifier);
46
+ };
47
+
48
+ self.isIdentifierDefined = (name) -> {
49
+ var defined = false;
50
+
51
+ for identifier in self.definedIdentifiers {
52
+ if identifier.name == name {
53
+ defined = true;
54
+ }
55
+ }
56
+
57
+ return defined || (self.parent && self.parent.isIdentifierDefined(name));
58
+ };
59
+
60
+ self.getDefinedIdentifier = (name) -> {
61
+ var id;
62
+
63
+ for identifier in self.definedIdentifiers {
64
+ if identifier.name == name {
65
+ id = identifier;
66
+ }
67
+ }
68
+
69
+ return id ?? (self.parent.getDefinedIdentifier(name) if self.parent else null);
70
+ };
71
+
72
+ self.blockWrap = () -> {
73
+ if self.type == 'BlockStatement' {
74
+ return self;
75
+ }
76
+
77
+ var myParent = self.parent;
78
+ var blockStatement = module.require('./statements/BlockStatement');
79
+
80
+ var block = new blockStatement.BlockStatement([self]);
81
+ block.parent = myParent;
82
+
83
+ return block;
84
+ };
85
+ }
86
+
87
+ Node.prototype.codegen = () -> {
88
+ if this.codeGenerated {
89
+ return false;
90
+ }
91
+
92
+ this.codeGenerated = true;
93
+ return true;
94
+ };
95
+
96
+ Node.setErrorManager = (errorManager) -> {
97
+ this.errorManager = errorManager;
98
+ };
99
+
100
+ Node.getErrorManager = () -> {
101
+ return this.errorManager;
102
+ };
103
+
104
+ exports.Node = Node;
@@ -0,0 +1,233 @@
1
+ use :node;
2
+
3
+ var Node = module.require('./Node').Node;
4
+
5
+ fn Parameter(id, defaultValue, splat)
6
+ extends Node {
7
+
8
+ this.type = 'Parameter';
9
+ this.splat = splat;
10
+
11
+ this.id = id;
12
+ this.id.parent = this;
13
+
14
+ this.defaultValue = defaultValue;
15
+
16
+ if this.defaultValue? {
17
+ this.defaultValue.parent = this;
18
+ }
19
+ }
20
+
21
+ Parameter.prototype.codegen = () -> {
22
+ if !super.codegen() {
23
+ return;
24
+ }
25
+
26
+ this.id = this.id.codegen(false);
27
+
28
+ if this.defaultValue? {
29
+ this.defaultValue = this.defaultValue.codegen();
30
+ }
31
+
32
+ return this;
33
+ };
34
+
35
+
36
+ Parameter.prototype.hasCallExpression = () -> {
37
+ return false;
38
+ };
39
+
40
+ Parameter.generateFunctionBody = (func, params, body, defaults) -> {
41
+ var splatPosition = -1;
42
+
43
+ for param, i in params {
44
+ if param.splat {
45
+ if splatPosition != -1 {
46
+ Node.getErrorManager().error({
47
+ type: "MultipleSplatsDisallowed",
48
+ message: "multiple splats are disallowed in a function declaration",
49
+ loc: param.loc
50
+ });
51
+ }
52
+
53
+ splatPosition = i;
54
+ }
55
+
56
+ param = param.codegen();
57
+ defaults.push(param.defaultValue);
58
+ params[i] = param.id;
59
+ func.defineIdentifier(param.id);
60
+ }
61
+
62
+ if splatPosition != -1 {
63
+ var declarations = [{
64
+ "type": "VariableDeclarator",
65
+ "id": {
66
+ "type": "Identifier",
67
+ "name": "__splat"
68
+ },
69
+ "init": null
70
+ }];
71
+
72
+ for param, i in params {
73
+ var init;
74
+ if i < splatPosition {
75
+ init = {
76
+ "type": "MemberExpression",
77
+ "computed": true,
78
+ "object": {
79
+ "type": "Identifier",
80
+ "name": "arguments"
81
+ },
82
+ "property": {
83
+ "type": "Literal",
84
+ "value": i
85
+ }
86
+ };
87
+ } else if i == splatPosition {
88
+ init = {
89
+ "type": "ConditionalExpression",
90
+ "test": {
91
+ "type": "BinaryExpression",
92
+ "operator": "<=",
93
+ "left": {
94
+ "type": "Literal",
95
+ "value": params.length
96
+ },
97
+ "right": {
98
+ "type": "MemberExpression",
99
+ "computed": false,
100
+ "object": {
101
+ "type": "Identifier",
102
+ "name": "arguments"
103
+ },
104
+ "property": {
105
+ "type": "Identifier",
106
+ "name": "length"
107
+ }
108
+ }
109
+ },
110
+ "consequent": {
111
+ "type": "CallExpression",
112
+ "callee": {
113
+ "type": "MemberExpression",
114
+ "computed": false,
115
+ "object": {
116
+ "type": "MemberExpression",
117
+ "computed": false,
118
+ "object": {
119
+ "type": "ArrayExpression",
120
+ "elements": []
121
+ },
122
+ "property": {
123
+ "type": "Identifier",
124
+ "name": "slice"
125
+ }
126
+ },
127
+ "property": {
128
+ "type": "Identifier",
129
+ "name": "call"
130
+ }
131
+ },
132
+ "arguments": [{
133
+ "type": "Identifier",
134
+ "name": "arguments"
135
+ }, {
136
+ "type": "Literal",
137
+ "value": splatPosition
138
+ }]
139
+ },
140
+ "alternate": {
141
+ "type": "ArrayExpression",
142
+ "elements": []
143
+ }
144
+ };
145
+
146
+ if splatPosition < params.length - 1 {
147
+ init.consequent.arguments.push({
148
+ "type": "AssignmentExpression",
149
+ "operator": "=",
150
+ "left": {
151
+ "type": "Identifier",
152
+ "name": "__splat"
153
+ },
154
+ "right": {
155
+ "type": "BinaryExpression",
156
+ "operator": "-",
157
+ "left": {
158
+ "type": "MemberExpression",
159
+ "computed": false,
160
+ "object": {
161
+ "type": "Identifier",
162
+ "name": "arguments"
163
+ },
164
+ "property": {
165
+ "type": "Identifier",
166
+ "name": "length"
167
+ }
168
+ },
169
+ "right": {
170
+ "type": "Literal",
171
+ "value": params.length - splatPosition - 1
172
+ }
173
+ }
174
+ });
175
+
176
+ init.alternate = {
177
+ "type": "SequenceExpression",
178
+ "expressions": [{
179
+ "type": "AssignmentExpression",
180
+ "operator": "=",
181
+ "left": {
182
+ "type": "Identifier",
183
+ "name": "__splat"
184
+ },
185
+ "right": {
186
+ "type": "Literal",
187
+ "value": splatPosition
188
+ }
189
+ }, {
190
+ "type": "ArrayExpression",
191
+ "elements": []
192
+ }]
193
+ };
194
+ }
195
+ } else {
196
+ init = {
197
+ "type": "MemberExpression",
198
+ "computed": true,
199
+ "object": {
200
+ "type": "Identifier",
201
+ "name": "arguments"
202
+ },
203
+ "property": {
204
+ "type": "UpdateExpression",
205
+ "operator": "++",
206
+ "argument": {
207
+ "type": "Identifier",
208
+ "name": "__splat"
209
+ },
210
+ "prefix": false
211
+ }
212
+ };
213
+ }
214
+
215
+ declarations.push({
216
+ "type": "VariableDeclarator",
217
+ "id": param,
218
+ "init": init
219
+ });
220
+ }
221
+
222
+ body.body = [{
223
+ "type": "VariableDeclaration",
224
+ "codeGenerated": true,
225
+ "declarations": declarations,
226
+ "kind": "let"
227
+ }].concat(body.body);
228
+
229
+ params.length = 0;
230
+ }
231
+ };
232
+
233
+ exports.Parameter = Parameter;
@@ -0,0 +1,109 @@
1
+ use :node;
2
+
3
+ var Node = module.require('./Node').Node;
4
+
5
+ fn Program(body)
6
+ extends Node {
7
+
8
+ this.type = 'Program';
9
+ this.body = body;
10
+
11
+ for statement, i in body {
12
+ if statement? {
13
+ statement.parent = this;
14
+ } else {
15
+ body[i] = { type: 'EmptyStatement' };
16
+ }
17
+ }
18
+
19
+ this.definedIdentifiers = Program.prototype.generateIdentifiers(
20
+ 'Infinity',
21
+ 'NaN',
22
+ 'eval',
23
+ 'uneval',
24
+ 'isFinite',
25
+ 'isNaN',
26
+ 'parseFloat',
27
+ 'parseInt',
28
+ 'decodeURI',
29
+ 'decodeURIComponent',
30
+ 'encodeURI',
31
+ 'encodeURIComponent',
32
+ 'escape',
33
+ 'unescape',
34
+ 'Object',
35
+ 'Function',
36
+ 'Boolean',
37
+ 'Symbol',
38
+ 'Error',
39
+ 'EvalError',
40
+ 'InternalError',
41
+ 'RangeError',
42
+ 'ReferenceError',
43
+ 'StopIteration',
44
+ 'SyntaxError',
45
+ 'TypeError',
46
+ 'URIError',
47
+ 'Number',
48
+ 'Math',
49
+ 'Date',
50
+ 'String',
51
+ 'RegExp',
52
+ 'Array',
53
+ 'Int8Array',
54
+ 'Uint8Array',
55
+ 'Uint8ClampedArray',
56
+ 'Int16Array',
57
+ 'Uint16Array',
58
+ 'Int32Array',
59
+ 'Uint32Array',
60
+ 'Float32Array',
61
+ 'Float64Array',
62
+ 'Map',
63
+ 'Set',
64
+ 'WeakMap',
65
+ 'WeakSet',
66
+ 'ArrayBuffer',
67
+ 'DataView',
68
+ 'JSON',
69
+ 'Iterator',
70
+ 'Generator',
71
+ 'Promise',
72
+ 'arguments');
73
+ }
74
+
75
+ Program.prototype.codegen = () -> {
76
+ if !super.codegen() {
77
+ return;
78
+ }
79
+
80
+ var i = 0;
81
+ while (i < this.body.length) {
82
+ var statement = this.body[i];
83
+
84
+ if !statement || statement.codeGenerated {
85
+ i++;
86
+ continue;
87
+ }
88
+
89
+ if statement.codegen && statement.codegen() {
90
+ this.body[this.body.indexOf(statement)] = statement;
91
+ i++;
92
+ } else {
93
+ this.body.splice(i, 1);
94
+ }
95
+ }
96
+
97
+ return this;
98
+ };
99
+
100
+ Program.prototype.generateIdentifiers = (identifiers...) -> {
101
+ return identifiers.map((id) -> {
102
+ return {
103
+ "type": "Identifier",
104
+ "name": id
105
+ };
106
+ });
107
+ };
108
+
109
+ exports.Program = Program;
@@ -0,0 +1,36 @@
1
+ use :node;
2
+
3
+ var Node = module.require('./Node').Node;
4
+
5
+ fn Property(key, value, shorthand, method)
6
+ extends Node {
7
+
8
+ this.type = 'Property';
9
+ this.kind = 'init';
10
+ this.method = method;
11
+ this.shorthand = shorthand;
12
+ this.computed = false;
13
+
14
+ this.key = key;
15
+ this.key.parent = this;
16
+
17
+ this.value = value;
18
+ this.value.parent = this;
19
+ }
20
+
21
+ Property.prototype.codegen = () -> {
22
+ if !super.codegen() {
23
+ return;
24
+ }
25
+
26
+ this.key = this.key.codegen(false);
27
+ this.value = this.value.codegen(this.parent.type != "ObjectPattern");
28
+
29
+ return this;
30
+ };
31
+
32
+ Property.prototype.hasCallExpression = () -> {
33
+ return this.value.hasCallExpression();
34
+ };
35
+
36
+ exports.Property = Property;