Skip to content

Commit 95c97e3

Browse files
committed
Split dynamic x-strings to give each line a real source-line reference
1 parent dcf801c commit 95c97e3

File tree

2 files changed

+9
-4
lines changed

2 files changed

+9
-4
lines changed

lib/opal/nodes/literal.rb

Lines changed: 5 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -140,6 +140,8 @@ def compile
140140
end
141141

142142
class DynamicXStringNode < Base
143+
include XStringLineSplitter
144+
143145
handle :dxstr
144146

145147
def requires_semicolon(code)
@@ -151,12 +153,13 @@ def compile
151153

152154
children.each do |part|
153155
if String === part
154-
push part.to_s
156+
compile_split_lines(part.to_s, @sexp)
157+
155158
needs_semicolon = true if requires_semicolon(part.to_s)
156159
elsif part.type == :evstr
157160
push expr(part[1])
158161
elsif part.type == :str
159-
push part.last.to_s
162+
compile_split_lines(part.last.to_s, part)
160163
needs_semicolon = true if requires_semicolon(part.last.to_s)
161164
else
162165
raise "Bad dxstr part"

lib/opal/parser/lexer.rb

Lines changed: 4 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -15,6 +15,7 @@ def initialize(source, file)
1515
@cond = 0
1616
@cmdarg = 0
1717
@line = 1
18+
@tok_line = 1
1819
@column = 0
1920
@tok_column = 0
2021
@file = file
@@ -115,16 +116,17 @@ def matched
115116

116117
def line=(line)
117118
@column = @tok_column = 0
118-
@line = line
119+
@line = @tok_line = line
119120
end
120121

121122
def next_token
122123
token = self.yylex
123124
value = self.yylval
124-
location = [@line, @tok_column]
125+
location = [@tok_line, @tok_column]
125126

126127
# once location is stored, ensure next token starts in correct place
127128
@tok_column = @column
129+
@tok_line = @line
128130

129131
[token, [value, location]]
130132
end

0 commit comments

Comments
 (0)