|
1 | 1 | <%- string_type = Prism::Template::JAVA_STRING_TYPE -%> |
2 | 2 | package org.ruby_lang.prism; |
3 | 3 |
|
4 | | -import org.ruby_lang.prism.Nodes; |
5 | | - |
6 | 4 | import java.lang.Short; |
7 | 5 | import java.math.BigInteger; |
8 | 6 | import java.nio.ByteBuffer; |
@@ -76,13 +74,14 @@ public class Loader { |
76 | 74 | private Charset encodingCharset; |
77 | 75 | <%- end -%> |
78 | 76 | private ConstantPool constantPool; |
| 77 | + private Nodes.Source source = null; |
79 | 78 |
|
80 | 79 | protected Loader(byte[] serialized) { |
81 | 80 | this.buffer = ByteBuffer.wrap(serialized).order(ByteOrder.nativeOrder()); |
82 | 81 | } |
83 | 82 |
|
84 | 83 | protected ParseResult load() { |
85 | | - Nodes.Source source = new Nodes.Source(); |
| 84 | + this.source = new Nodes.Source(); |
86 | 85 |
|
87 | 86 | expect((byte) 'P', "incorrect prism header"); |
88 | 87 | expect((byte) 'R', "incorrect prism header"); |
@@ -127,8 +126,7 @@ public class Loader { |
127 | 126 | throw new Error("Expected to consume all bytes while deserializing but there were " + left + " bytes left"); |
128 | 127 | } |
129 | 128 |
|
130 | | - boolean[] newlineMarked = new boolean[1 + source.getLineCount()]; |
131 | | - MarkNewlinesVisitor visitor = new MarkNewlinesVisitor(source, newlineMarked); |
| 129 | + MarkNewlinesVisitor visitor = new MarkNewlinesVisitor(source); |
132 | 130 | node.accept(visitor); |
133 | 131 | } else { |
134 | 132 | node = null; |
@@ -407,11 +405,17 @@ public class Loader { |
407 | 405 | } |
408 | 406 |
|
409 | 407 | Nodes.DefNode createDefNodeFromSavedPosition(<%= base_params_sig -%>, int bufferPosition) { |
| 408 | + Nodes.DefNode node; |
410 | 409 | // This method mutates the buffer position and may be called from different threads so we must synchronize |
411 | 410 | synchronized (this) { |
412 | 411 | buffer.position(bufferPosition); |
413 | | - return createDefNode(<%= base_params.join(", ") -%>); |
| 412 | + node = createDefNode(<%= base_params.join(", ") -%>); |
414 | 413 | } |
| 414 | + |
| 415 | + MarkNewlinesVisitor visitor = new MarkNewlinesVisitor(source); |
| 416 | + node.accept(visitor); |
| 417 | + |
| 418 | + return node; |
415 | 419 | } |
416 | 420 | <%- array_types.uniq.each do |type| -%> |
417 | 421 |
|
|
0 commit comments