herb 0.7.1-x86_64-linux-gnu → 0.7.3-x86_64-linux-gnu
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- checksums.yaml +4 -4
- data/Makefile +2 -0
- data/README.md +1 -1
- data/Rakefile +46 -1
- data/config.yml +714 -0
- data/ext/herb/error_helpers.c +27 -27
- data/ext/herb/extconf.rb +2 -1
- data/ext/herb/extension.c +6 -6
- data/ext/herb/extension_helpers.c +3 -3
- data/ext/herb/nodes.c +35 -35
- data/herb.gemspec +3 -0
- data/lib/herb/3.0/herb.so +0 -0
- data/lib/herb/3.1/herb.so +0 -0
- data/lib/herb/3.2/herb.so +0 -0
- data/lib/herb/3.3/herb.so +0 -0
- data/lib/herb/3.4/herb.so +0 -0
- data/lib/herb/engine/debug_visitor.rb +41 -21
- data/lib/herb/engine.rb +20 -6
- data/lib/herb/version.rb +1 -1
- data/sig/herb/engine/debug_visitor.rbs +3 -3
- data/sig/herb/engine.rbs +5 -0
- data/src/analyze.c +5 -9
- data/src/analyze_helpers.c +17 -6
- data/src/include/pretty_print.h +1 -1
- data/src/include/version.h +1 -1
- data/src/parser.c +6 -9
- data/src/pretty_print.c +1 -1
- data/templates/ext/herb/error_helpers.c.erb +85 -0
- data/templates/ext/herb/error_helpers.h.erb +12 -0
- data/templates/ext/herb/nodes.c.erb +90 -0
- data/templates/ext/herb/nodes.h.erb +9 -0
- data/templates/javascript/packages/core/src/errors.ts.erb +193 -0
- data/templates/javascript/packages/core/src/node-type-guards.ts.erb +325 -0
- data/templates/javascript/packages/core/src/nodes.ts.erb +414 -0
- data/templates/javascript/packages/core/src/visitor.ts.erb +29 -0
- data/templates/javascript/packages/node/extension/error_helpers.cpp.erb +113 -0
- data/templates/javascript/packages/node/extension/error_helpers.h.erb +17 -0
- data/templates/javascript/packages/node/extension/nodes.cpp.erb +111 -0
- data/templates/javascript/packages/node/extension/nodes.h.erb +17 -0
- data/templates/lib/herb/ast/nodes.rb.erb +117 -0
- data/templates/lib/herb/errors.rb.erb +106 -0
- data/templates/lib/herb/visitor.rb.erb +28 -0
- data/templates/sig/serialized_ast_errors.rbs.erb +10 -0
- data/templates/sig/serialized_ast_nodes.rbs.erb +10 -0
- data/templates/src/ast_nodes.c.erb +145 -0
- data/templates/src/ast_pretty_print.c.erb +97 -0
- data/templates/src/errors.c.erb +245 -0
- data/templates/src/include/ast_nodes.h.erb +46 -0
- data/templates/src/include/ast_pretty_print.h.erb +14 -0
- data/templates/src/include/errors.h.erb +58 -0
- data/templates/src/visitor.c.erb +47 -0
- data/templates/template.rb +406 -0
- data/templates/wasm/error_helpers.cpp.erb +93 -0
- data/templates/wasm/error_helpers.h.erb +15 -0
- data/templates/wasm/nodes.cpp.erb +79 -0
- data/templates/wasm/nodes.h.erb +15 -0
- data/vendor/prism/Rakefile +75 -0
- data/vendor/prism/config.yml +4713 -0
- data/vendor/prism/include/prism/ast.h +8190 -0
- data/vendor/prism/include/prism/defines.h +260 -0
- data/vendor/prism/include/prism/diagnostic.h +455 -0
- data/vendor/prism/include/prism/encoding.h +283 -0
- data/vendor/prism/include/prism/node.h +129 -0
- data/vendor/prism/include/prism/options.h +482 -0
- data/vendor/prism/include/prism/pack.h +163 -0
- data/vendor/prism/include/prism/parser.h +933 -0
- data/vendor/prism/include/prism/prettyprint.h +34 -0
- data/vendor/prism/include/prism/regexp.h +43 -0
- data/vendor/prism/include/prism/static_literals.h +121 -0
- data/vendor/prism/include/prism/util/pm_buffer.h +236 -0
- data/vendor/prism/include/prism/util/pm_char.h +204 -0
- data/vendor/prism/include/prism/util/pm_constant_pool.h +218 -0
- data/vendor/prism/include/prism/util/pm_integer.h +130 -0
- data/vendor/prism/include/prism/util/pm_list.h +103 -0
- data/vendor/prism/include/prism/util/pm_memchr.h +29 -0
- data/vendor/prism/include/prism/util/pm_newline_list.h +113 -0
- data/vendor/prism/include/prism/util/pm_string.h +200 -0
- data/vendor/prism/include/prism/util/pm_strncasecmp.h +32 -0
- data/vendor/prism/include/prism/util/pm_strpbrk.h +46 -0
- data/vendor/prism/include/prism/version.h +29 -0
- data/vendor/prism/include/prism.h +408 -0
- data/vendor/prism/src/diagnostic.c +848 -0
- data/vendor/prism/src/encoding.c +5235 -0
- data/vendor/prism/src/node.c +8676 -0
- data/vendor/prism/src/options.c +328 -0
- data/vendor/prism/src/pack.c +509 -0
- data/vendor/prism/src/prettyprint.c +8941 -0
- data/vendor/prism/src/prism.c +23302 -0
- data/vendor/prism/src/regexp.c +790 -0
- data/vendor/prism/src/serialize.c +2268 -0
- data/vendor/prism/src/static_literals.c +617 -0
- data/vendor/prism/src/token_type.c +703 -0
- data/vendor/prism/src/util/pm_buffer.c +357 -0
- data/vendor/prism/src/util/pm_char.c +318 -0
- data/vendor/prism/src/util/pm_constant_pool.c +342 -0
- data/vendor/prism/src/util/pm_integer.c +670 -0
- data/vendor/prism/src/util/pm_list.c +49 -0
- data/vendor/prism/src/util/pm_memchr.c +35 -0
- data/vendor/prism/src/util/pm_newline_list.c +125 -0
- data/vendor/prism/src/util/pm_string.c +383 -0
- data/vendor/prism/src/util/pm_strncasecmp.c +36 -0
- data/vendor/prism/src/util/pm_strpbrk.c +206 -0
- data/vendor/prism/templates/ext/prism/api_node.c.erb +282 -0
- data/vendor/prism/templates/include/prism/ast.h.erb +226 -0
- data/vendor/prism/templates/include/prism/diagnostic.h.erb +130 -0
- data/vendor/prism/templates/java/org/prism/AbstractNodeVisitor.java.erb +22 -0
- data/vendor/prism/templates/java/org/prism/Loader.java.erb +434 -0
- data/vendor/prism/templates/java/org/prism/Nodes.java.erb +403 -0
- data/vendor/prism/templates/javascript/src/deserialize.js.erb +448 -0
- data/vendor/prism/templates/javascript/src/nodes.js.erb +197 -0
- data/vendor/prism/templates/javascript/src/visitor.js.erb +78 -0
- data/vendor/prism/templates/lib/prism/compiler.rb.erb +43 -0
- data/vendor/prism/templates/lib/prism/dispatcher.rb.erb +103 -0
- data/vendor/prism/templates/lib/prism/dot_visitor.rb.erb +189 -0
- data/vendor/prism/templates/lib/prism/dsl.rb.erb +133 -0
- data/vendor/prism/templates/lib/prism/inspect_visitor.rb.erb +131 -0
- data/vendor/prism/templates/lib/prism/mutation_compiler.rb.erb +19 -0
- data/vendor/prism/templates/lib/prism/node.rb.erb +515 -0
- data/vendor/prism/templates/lib/prism/reflection.rb.erb +136 -0
- data/vendor/prism/templates/lib/prism/serialize.rb.erb +602 -0
- data/vendor/prism/templates/lib/prism/visitor.rb.erb +55 -0
- data/vendor/prism/templates/rbi/prism/dsl.rbi.erb +68 -0
- data/vendor/prism/templates/rbi/prism/node.rbi.erb +164 -0
- data/vendor/prism/templates/rbi/prism/visitor.rbi.erb +18 -0
- data/vendor/prism/templates/sig/prism/_private/dot_visitor.rbs.erb +45 -0
- data/vendor/prism/templates/sig/prism/dsl.rbs.erb +31 -0
- data/vendor/prism/templates/sig/prism/mutation_compiler.rbs.erb +7 -0
- data/vendor/prism/templates/sig/prism/node.rbs.erb +132 -0
- data/vendor/prism/templates/sig/prism/visitor.rbs.erb +17 -0
- data/vendor/prism/templates/sig/prism.rbs.erb +89 -0
- data/vendor/prism/templates/src/diagnostic.c.erb +523 -0
- data/vendor/prism/templates/src/node.c.erb +333 -0
- data/vendor/prism/templates/src/prettyprint.c.erb +166 -0
- data/vendor/prism/templates/src/serialize.c.erb +406 -0
- data/vendor/prism/templates/src/token_type.c.erb +369 -0
- data/vendor/prism/templates/template.rb +689 -0
- metadata +112 -2
@@ -0,0 +1,403 @@
|
|
1
|
+
<%- string_type = Prism::Template::JAVA_STRING_TYPE -%>
|
2
|
+
package org.prism;
|
3
|
+
|
4
|
+
import java.lang.Override;
|
5
|
+
import java.lang.String;
|
6
|
+
import java.lang.StringBuilder;
|
7
|
+
import java.lang.annotation.ElementType;
|
8
|
+
import java.lang.annotation.Retention;
|
9
|
+
import java.lang.annotation.RetentionPolicy;
|
10
|
+
import java.lang.annotation.Target;
|
11
|
+
import java.nio.charset.StandardCharsets;
|
12
|
+
import java.util.ArrayList;
|
13
|
+
import java.util.Arrays;
|
14
|
+
|
15
|
+
// GENERATED BY <%= File.basename(__FILE__) %>
|
16
|
+
// @formatter:off
|
17
|
+
public abstract class Nodes {
|
18
|
+
|
19
|
+
public static final <%= string_type %>[] EMPTY_STRING_ARRAY = {};
|
20
|
+
|
21
|
+
@Target(ElementType.FIELD)
|
22
|
+
@Retention(RetentionPolicy.SOURCE)
|
23
|
+
public @interface Nullable {
|
24
|
+
}
|
25
|
+
|
26
|
+
@Target(ElementType.FIELD)
|
27
|
+
@Retention(RetentionPolicy.SOURCE)
|
28
|
+
public @interface UnionType {
|
29
|
+
Class<? extends Node>[] value();
|
30
|
+
}
|
31
|
+
|
32
|
+
public static final class Location {
|
33
|
+
|
34
|
+
public static final Location[] EMPTY_ARRAY = {};
|
35
|
+
|
36
|
+
public final int startOffset;
|
37
|
+
public final int length;
|
38
|
+
|
39
|
+
public Location(int startOffset, int length) {
|
40
|
+
this.startOffset = startOffset;
|
41
|
+
this.length = length;
|
42
|
+
}
|
43
|
+
|
44
|
+
public int endOffset() {
|
45
|
+
return startOffset + length;
|
46
|
+
}
|
47
|
+
}
|
48
|
+
|
49
|
+
public static final class Source {
|
50
|
+
public final byte[] bytes;
|
51
|
+
private int startLine = 1;
|
52
|
+
private int[] lineOffsets = null;
|
53
|
+
|
54
|
+
Source(byte[] bytes) {
|
55
|
+
this.bytes = bytes;
|
56
|
+
}
|
57
|
+
|
58
|
+
void setStartLine(int startLine) {
|
59
|
+
this.startLine = startLine;
|
60
|
+
}
|
61
|
+
|
62
|
+
void setLineOffsets(int[] lineOffsets) {
|
63
|
+
this.lineOffsets = lineOffsets;
|
64
|
+
}
|
65
|
+
|
66
|
+
// 1-based
|
67
|
+
public int line(int byteOffset) {
|
68
|
+
return startLine + findLine(byteOffset);
|
69
|
+
}
|
70
|
+
|
71
|
+
// 0-based
|
72
|
+
public int findLine(int byteOffset) {
|
73
|
+
if (byteOffset >= bytes.length) byteOffset = bytes.length - 1;
|
74
|
+
assert byteOffset >= 0 : byteOffset;
|
75
|
+
int index = Arrays.binarySearch(lineOffsets, byteOffset);
|
76
|
+
int line;
|
77
|
+
if (index < 0) {
|
78
|
+
line = -index - 2;
|
79
|
+
} else {
|
80
|
+
line = index;
|
81
|
+
}
|
82
|
+
assert line >= 0 && line <= getLineCount() : line;
|
83
|
+
return line;
|
84
|
+
}
|
85
|
+
|
86
|
+
public int getLineCount() {
|
87
|
+
return lineOffsets.length;
|
88
|
+
}
|
89
|
+
}
|
90
|
+
|
91
|
+
public static abstract class Node {
|
92
|
+
|
93
|
+
public static final Node[] EMPTY_ARRAY = {};
|
94
|
+
|
95
|
+
<%- if Prism::Template::INCLUDE_NODE_ID -%>
|
96
|
+
public final int nodeId;
|
97
|
+
<%- end -%>
|
98
|
+
public final int startOffset;
|
99
|
+
public final int length;
|
100
|
+
private boolean newLineFlag = false;
|
101
|
+
|
102
|
+
<%- if Prism::Template::INCLUDE_NODE_ID -%>
|
103
|
+
public Node(int nodeId, int startOffset, int length) {
|
104
|
+
this.nodeId = nodeId;
|
105
|
+
<%- else -%>
|
106
|
+
public Node(int startOffset, int length) {
|
107
|
+
<%- end -%>
|
108
|
+
this.startOffset = startOffset;
|
109
|
+
this.length = length;
|
110
|
+
}
|
111
|
+
|
112
|
+
public final int endOffset() {
|
113
|
+
return startOffset + length;
|
114
|
+
}
|
115
|
+
|
116
|
+
public final boolean hasNewLineFlag() {
|
117
|
+
return newLineFlag;
|
118
|
+
}
|
119
|
+
|
120
|
+
public void setNewLineFlag(Source source, boolean[] newlineMarked) {
|
121
|
+
int line = source.findLine(this.startOffset);
|
122
|
+
if (!newlineMarked[line]) {
|
123
|
+
newlineMarked[line] = true;
|
124
|
+
this.newLineFlag = true;
|
125
|
+
}
|
126
|
+
}
|
127
|
+
|
128
|
+
public void setNewLineFlag(boolean newLineFlag) {
|
129
|
+
this.newLineFlag = newLineFlag;
|
130
|
+
}
|
131
|
+
|
132
|
+
public abstract <T> T accept(AbstractNodeVisitor<T> visitor);
|
133
|
+
|
134
|
+
public abstract <T> void visitChildNodes(AbstractNodeVisitor<T> visitor);
|
135
|
+
|
136
|
+
public abstract Node[] childNodes();
|
137
|
+
|
138
|
+
@Override
|
139
|
+
public String toString() {
|
140
|
+
return toString("");
|
141
|
+
}
|
142
|
+
|
143
|
+
protected abstract String toString(String indent);
|
144
|
+
}
|
145
|
+
<%# FLAGS -%>
|
146
|
+
<%- flags.each do |flag| -%>
|
147
|
+
|
148
|
+
/**
|
149
|
+
* <%= Prism::Template::JavaDoc.escape(flag.comment) %>
|
150
|
+
*/
|
151
|
+
public static final class <%= flag.name %> implements Comparable<<%= flag.name %>> {
|
152
|
+
<%- flag.values.each_with_index do |value, index| -%>
|
153
|
+
|
154
|
+
// <%= value.comment %>
|
155
|
+
public static final short <%= value.name %> = 1 << <%= index + Prism::Template::COMMON_FLAGS_COUNT %>;
|
156
|
+
<%- end -%>
|
157
|
+
|
158
|
+
<%- flag.values.each do |value| -%>
|
159
|
+
public static boolean is<%= value.camelcase %>(short flags) {
|
160
|
+
return (flags & <%= value.name %>) != 0;
|
161
|
+
}
|
162
|
+
|
163
|
+
<%- end -%>
|
164
|
+
private final short flags;
|
165
|
+
|
166
|
+
public <%= flag.name %>(short flags) {
|
167
|
+
this.flags = flags;
|
168
|
+
}
|
169
|
+
|
170
|
+
@Override
|
171
|
+
public int hashCode() {
|
172
|
+
return flags;
|
173
|
+
}
|
174
|
+
|
175
|
+
@Override
|
176
|
+
public boolean equals(Object other) {
|
177
|
+
if (!(other instanceof <%= flag.name %>)) {
|
178
|
+
return false;
|
179
|
+
}
|
180
|
+
|
181
|
+
return flags == ((<%= flag.name %>) other).flags;
|
182
|
+
}
|
183
|
+
|
184
|
+
@Override
|
185
|
+
public int compareTo(<%= flag.name %> other) {
|
186
|
+
return flags - other.flags;
|
187
|
+
}
|
188
|
+
|
189
|
+
<%- flag.values.each do |value| -%>
|
190
|
+
public boolean is<%= value.camelcase %>() {
|
191
|
+
return (flags & <%= value.name %>) != 0;
|
192
|
+
}
|
193
|
+
|
194
|
+
<%- end -%>
|
195
|
+
}
|
196
|
+
<%- end -%>
|
197
|
+
<%# NODES -%>
|
198
|
+
<%- nodes.each do |node| -%>
|
199
|
+
|
200
|
+
/**
|
201
|
+
* <pre>
|
202
|
+
<%- node.each_comment_java_line do |line| -%>
|
203
|
+
*<%= line %>
|
204
|
+
<%- end -%>
|
205
|
+
* </pre>
|
206
|
+
*/
|
207
|
+
public static final class <%= node.name -%> extends Node {
|
208
|
+
<%- if node.needs_serialized_length? -%>
|
209
|
+
public final int serializedLength;
|
210
|
+
<%- end -%>
|
211
|
+
<%- if node.flags -%>
|
212
|
+
public final short flags;
|
213
|
+
<%- end -%>
|
214
|
+
<%- node.semantic_fields.each do |field| -%>
|
215
|
+
<%- if field.comment -%>
|
216
|
+
/**
|
217
|
+
* <pre>
|
218
|
+
<%- field.each_comment_java_line do |line| -%>
|
219
|
+
*<%= line %>
|
220
|
+
<%- end -%>
|
221
|
+
* </pre>
|
222
|
+
*/
|
223
|
+
<%- end -%>
|
224
|
+
<%- if field.class.name.include?("Optional") -%>
|
225
|
+
@Nullable
|
226
|
+
<%- end -%>
|
227
|
+
<%- if field.respond_to?(:union_kind) && field.union_kind -%>
|
228
|
+
@UnionType({ <%= field.union_kind.map { |t| "#{t}.class" }.join(", ") %> })
|
229
|
+
<%- end -%>
|
230
|
+
public final <%= field.java_type %> <%= field.name %>;
|
231
|
+
<%- end -%>
|
232
|
+
|
233
|
+
<%-
|
234
|
+
params = []
|
235
|
+
params << "int nodeId" if Prism::Template::INCLUDE_NODE_ID
|
236
|
+
params << "int startOffset" << "int length"
|
237
|
+
params << "int serializedLength" if node.needs_serialized_length?
|
238
|
+
params << "short flags" if node.flags
|
239
|
+
params.concat(node.semantic_fields.map { |field| "#{field.java_type} #{field.name}" })
|
240
|
+
-%>
|
241
|
+
public <%= node.name -%>(<%= params.join(", ") %>) {
|
242
|
+
<%- if Prism::Template::INCLUDE_NODE_ID -%>
|
243
|
+
super(nodeId, startOffset, length);
|
244
|
+
<%- else -%>
|
245
|
+
super(startOffset, length);
|
246
|
+
<%- end -%>
|
247
|
+
<%- if node.needs_serialized_length? -%>
|
248
|
+
this.serializedLength = serializedLength;
|
249
|
+
<%- end -%>
|
250
|
+
<%- if node.flags -%>
|
251
|
+
this.flags = flags;
|
252
|
+
<%- end -%>
|
253
|
+
<%- node.semantic_fields.each do |field| -%>
|
254
|
+
this.<%= field.name %> = <%= field.name %>;
|
255
|
+
<%- end -%>
|
256
|
+
}
|
257
|
+
<%# methods for flags -%>
|
258
|
+
<%- if (node_flags = node.flags) -%>
|
259
|
+
<%- node_flags.values.each do |value| -%>
|
260
|
+
|
261
|
+
public boolean is<%= value.camelcase %>() {
|
262
|
+
return <%= node_flags.name %>.is<%= value.camelcase %>(flags);
|
263
|
+
}
|
264
|
+
<%- end -%>
|
265
|
+
<%- end -%>
|
266
|
+
<%# potential override of setNewLineFlag() -%>
|
267
|
+
<%- if node.newline == false -%>
|
268
|
+
|
269
|
+
@Override
|
270
|
+
public void setNewLineFlag(Source source, boolean[] newlineMarked) {
|
271
|
+
// Never mark <%= node.name %> with a newline flag, mark children instead
|
272
|
+
}
|
273
|
+
<%- elsif node.newline.is_a?(String) -%>
|
274
|
+
|
275
|
+
@Override
|
276
|
+
public void setNewLineFlag(Source source, boolean[] newlineMarked) {
|
277
|
+
<%- field = node.semantic_fields.find { |f| f.name == node.newline } or raise node.newline -%>
|
278
|
+
<%- case field -%>
|
279
|
+
<%- when Prism::Template::NodeField -%>
|
280
|
+
this.<%= field.name %>.setNewLineFlag(source, newlineMarked);
|
281
|
+
<%- when Prism::Template::NodeListField -%>
|
282
|
+
Node first = this.<%= field.name %>.length > 0 ? this.<%= field.name %>[0] : null;
|
283
|
+
if (first != null) {
|
284
|
+
first.setNewLineFlag(source, newlineMarked);
|
285
|
+
}
|
286
|
+
<%- else raise field.class.name -%>
|
287
|
+
<%- end -%>
|
288
|
+
}
|
289
|
+
<%- end -%>
|
290
|
+
|
291
|
+
public <T> void visitChildNodes(AbstractNodeVisitor<T> visitor) {
|
292
|
+
<%- node.semantic_fields.each do |field| -%>
|
293
|
+
<%- case field -%>
|
294
|
+
<%- when Prism::Template::NodeListField -%>
|
295
|
+
for (Nodes.Node child : this.<%= field.name %>) {
|
296
|
+
child.accept(visitor);
|
297
|
+
}
|
298
|
+
<%- when Prism::Template::NodeField -%>
|
299
|
+
this.<%= field.name %>.accept(visitor);
|
300
|
+
<%- when Prism::Template::OptionalNodeField -%>
|
301
|
+
if (this.<%= field.name %> != null) {
|
302
|
+
this.<%= field.name %>.accept(visitor);
|
303
|
+
}
|
304
|
+
<%- end -%>
|
305
|
+
<%- end -%>
|
306
|
+
}
|
307
|
+
|
308
|
+
public Node[] childNodes() {
|
309
|
+
<%- if node.semantic_fields.none?(Prism::Template::NodeListField) and node.semantic_fields.none?(Prism::Template::NodeKindField) -%>
|
310
|
+
return EMPTY_ARRAY;
|
311
|
+
<%- elsif node.semantic_fields.one?(Prism::Template::NodeListField) and node.semantic_fields.none?(Prism::Template::NodeKindField) -%>
|
312
|
+
return this.<%= node.semantic_fields.grep(Prism::Template::NodeListField).first.name %>;
|
313
|
+
<%- elsif node.semantic_fields.none?(Prism::Template::NodeListField) -%>
|
314
|
+
return new Node[] { <%= node.semantic_fields.grep(Prism::Template::NodeKindField).map { |field| "this.#{field.name}" }.join(', ') %> };
|
315
|
+
<%- else -%>
|
316
|
+
ArrayList<Node> childNodes = new ArrayList<>();
|
317
|
+
<%- node.semantic_fields.each do |field| -%>
|
318
|
+
<%- case field -%>
|
319
|
+
<%- when Prism::Template::NodeField, Prism::Template::OptionalNodeField -%>
|
320
|
+
childNodes.add(this.<%= field.name %>);
|
321
|
+
<%- when Prism::Template::NodeListField -%>
|
322
|
+
childNodes.addAll(Arrays.asList(this.<%= field.name %>));
|
323
|
+
<%- end -%>
|
324
|
+
<%- end -%>
|
325
|
+
return childNodes.toArray(EMPTY_ARRAY);
|
326
|
+
<%- end -%>
|
327
|
+
}
|
328
|
+
|
329
|
+
public <T> T accept(AbstractNodeVisitor<T> visitor) {
|
330
|
+
return visitor.visit<%= node.name -%>(this);
|
331
|
+
}
|
332
|
+
|
333
|
+
@Override
|
334
|
+
protected String toString(String indent) {
|
335
|
+
StringBuilder builder = new StringBuilder();
|
336
|
+
builder.append(this.getClass().getSimpleName());
|
337
|
+
if (hasNewLineFlag()) {
|
338
|
+
builder.append("[Li]");
|
339
|
+
}
|
340
|
+
builder.append('\n');
|
341
|
+
String nextIndent = indent + " ";
|
342
|
+
<%- if node.fields.any?(Prism::Template::NodeListField) or node.fields.any?(Prism::Template::ConstantListField) -%>
|
343
|
+
String nextNextIndent = nextIndent + " ";
|
344
|
+
<%- end -%>
|
345
|
+
<%- [*node.flags, *node.fields.grep_v(Prism::Template::LocationField).grep_v(Prism::Template::OptionalLocationField)].each do |field| -%>
|
346
|
+
builder.append(nextIndent);
|
347
|
+
builder.append("<%= field.name %>: ");
|
348
|
+
<%- case field -%>
|
349
|
+
<%- when Prism::Template::NodeField -%>
|
350
|
+
builder.append(this.<%= field.name %>.toString(nextIndent));
|
351
|
+
<%- when Prism::Template::OptionalNodeField -%>
|
352
|
+
builder.append(this.<%= field.name %> == null ? "null\n" : this.<%= field.name %>.toString(nextIndent));
|
353
|
+
<%- when Prism::Template::NodeListField -%>
|
354
|
+
builder.append('\n');
|
355
|
+
for (Node child : this.<%= field.name %>) {
|
356
|
+
builder.append(nextNextIndent).append(child.toString(nextNextIndent));
|
357
|
+
}
|
358
|
+
<%- when Prism::Template::StringField -%>
|
359
|
+
builder.append('"' + new String(this.<%= field.name %>, StandardCharsets.UTF_8) + '"');
|
360
|
+
builder.append('\n');
|
361
|
+
<%- when Prism::Template::ConstantField -%>
|
362
|
+
builder.append('"').append(this.<%= field.name %>).append('"');
|
363
|
+
builder.append('\n');
|
364
|
+
<%- when Prism::Template::OptionalConstantField -%>
|
365
|
+
builder.append(this.<%= field.name %> == null ? "null" : "\"" + this.<%= field.name %> + "\"");
|
366
|
+
builder.append('\n');
|
367
|
+
<%- when Prism::Template::ConstantListField -%>
|
368
|
+
builder.append('\n');
|
369
|
+
for (<%= string_type %> constant : this.<%= field.name %>) {
|
370
|
+
builder.append(nextNextIndent).append('"').append(constant).append('"').append('\n');
|
371
|
+
}
|
372
|
+
<%- when Prism::Template::Flags -%>
|
373
|
+
builder.append(flags);
|
374
|
+
builder.append('\n');
|
375
|
+
<%- when Prism::Template::UInt8Field, Prism::Template::UInt32Field, Prism::Template::IntegerField, Prism::Template::DoubleField -%>
|
376
|
+
builder.append(this.<%= field.name %>);
|
377
|
+
builder.append('\n');
|
378
|
+
<%- else -%>
|
379
|
+
<%- raise field.class.name -%>
|
380
|
+
<%- end -%>
|
381
|
+
<%- end -%>
|
382
|
+
return builder.toString();
|
383
|
+
}
|
384
|
+
}
|
385
|
+
<%- end -%>
|
386
|
+
|
387
|
+
public enum ErrorType {
|
388
|
+
<%- errors.each do |error| -%>
|
389
|
+
<%= error.name %>,
|
390
|
+
<%- end -%>
|
391
|
+
}
|
392
|
+
|
393
|
+
public static ErrorType[] ERROR_TYPES = ErrorType.values();
|
394
|
+
|
395
|
+
public enum WarningType {
|
396
|
+
<%- warnings.each do |warning| -%>
|
397
|
+
<%= warning.name %>,
|
398
|
+
<%- end -%>
|
399
|
+
}
|
400
|
+
|
401
|
+
public static WarningType[] WARNING_TYPES = WarningType.values();
|
402
|
+
}
|
403
|
+
// @formatter:on
|