Skip to content

Commit 19a08f4

Browse files
committedNov 22, 2013
Every token from lexer stores it original line number (and column)
1 parent fca7065 commit 19a08f4

File tree

6 files changed

+26
-39
lines changed

6 files changed

+26
-39
lines changed
 

Diff for: ‎lib/opal/compiler.rb

+3-5
Original file line numberDiff line numberDiff line change
@@ -107,9 +107,7 @@ def parser_indent
107107
# returns an array, it must be used incase the internal structure
108108
# of sexps does change.
109109
def s(*parts)
110-
sexp = Sexp.new(parts)
111-
sexp.line = @line
112-
sexp
110+
Sexp.new(parts)
113111
end
114112

115113
def fragment(str, sexp = nil)
@@ -181,7 +179,7 @@ def in_while?
181179
# and compiling it to fragments.
182180
def process(sexp, level = :expr)
183181
if handler = handlers[sexp.type]
184-
@line = sexp.line
182+
#@line = sexp.line
185183
return handler.new(sexp, level, self).compile_to_fragments
186184
else
187185
raise "Unsupported sexp: #{sexp.type}"
@@ -268,7 +266,7 @@ def returns(sexp)
268266
sexp
269267
else
270268
s(:js_return, sexp).tap { |s|
271-
s.line = sexp.line
269+
#s.line = sexp.line
272270
}
273271
end
274272
end

Diff for: ‎lib/opal/parser.rb

+8-6
Original file line numberDiff line numberDiff line change
@@ -434,7 +434,6 @@ def new_op_asgn(op, lhs, rhs)
434434

435435
end
436436

437-
result.line = lhs.line
438437
result
439438
end
440439

@@ -529,11 +528,14 @@ def new_var_ref(ref)
529528
# returns for __FILE__ as it is converted into str
530529
ref
531530
when :identifier
532-
if scope.has_local? ref[1]
533-
s(:lvar, ref[1])
534-
else
535-
s(:call, nil, ref[1], s(:arglist))
536-
end
531+
result = if scope.has_local? ref[1]
532+
s(:lvar, ref[1])
533+
else
534+
s(:call, nil, ref[1], s(:arglist))
535+
end
536+
537+
result.loc = ref.loc
538+
result
537539
else
538540
raise "Bad var_ref type: #{ref.type}"
539541
end

Diff for: ‎lib/opal/parser/grammar.rb

-12
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

Diff for: ‎lib/opal/parser/grammar.y

-12
Original file line numberDiff line numberDiff line change
@@ -175,12 +175,10 @@ rule
175175
| expr kAND expr
176176
{
177177
result = s(:and, val[0], val[2])
178-
result.line = val[0].line
179178
}
180179
| expr kOR expr
181180
{
182181
result = s(:or, val[0], val[2])
183-
result.line = val[0].line
184182
}
185183
| kNOT expr
186184
{
@@ -723,7 +721,6 @@ rule
723721
bodystmt kEND
724722
{
725723
result = s(:begin, val[2])
726-
result.line = val[1]
727724
}
728725
| tLPAREN_ARG expr opt_nl tRPAREN
729726
{
@@ -816,7 +813,6 @@ rule
816813
compstmt kEND
817814
{
818815
result = s(:while, val[2], val[5])
819-
result.line = val[1]
820816
}
821817
| kUNTIL
822818
{
@@ -830,22 +826,18 @@ rule
830826
compstmt kEND
831827
{
832828
result = s(:until, val[2], val[5])
833-
result.line = val[1]
834829
}
835830
| kCASE expr_value opt_terms case_body kEND
836831
{
837832
result = s(:case, val[1], *val[3])
838-
result.line = val[1].line
839833
}
840834
| kCASE opt_terms case_body kEND
841835
{
842836
result = s(:case, nil, *val[2])
843-
# result.line = val[2].line
844837
}
845838
| kCASE opt_terms kELSE compstmt kEND
846839
{
847840
result = s(:case, nil, val[3])
848-
# result.line = val[3].line
849841
}
850842
| kFOR mlhs kIN
851843
{
@@ -1065,7 +1057,6 @@ opt_block_args_tail: tCOMMA block_args_tail
10651057
opt_block_var compstmt kEND
10661058
{
10671059
result = new_iter val[2], val[3]
1068-
result.line = val[1]
10691060
pop_scope
10701061
}
10711062

@@ -1114,7 +1105,6 @@ opt_block_args_tail: tCOMMA block_args_tail
11141105
opt_block_var compstmt tRCURLY
11151106
{
11161107
result = new_iter val[2], val[3]
1117-
result.line = val[1]
11181108
pop_scope
11191109
}
11201110
| kDO
@@ -1125,7 +1115,6 @@ opt_block_args_tail: tCOMMA block_args_tail
11251115
opt_block_var compstmt kEND
11261116
{
11271117
result = new_iter val[2], val[3]
1128-
result.line = val[1]
11291118
pop_scope
11301119
}
11311120

@@ -1136,7 +1125,6 @@ opt_block_args_tail: tCOMMA block_args_tail
11361125
args then compstmt cases
11371126
{
11381127
part = s(:when, s(:array, *val[2]), val[4])
1139-
#part.line = val[2].line
11401128
result = [part]
11411129
result.push *val[5] if val[5]
11421130
}

Diff for: ‎lib/opal/parser/lexer.rb

+2-1
Original file line numberDiff line numberDiff line change
@@ -13,6 +13,7 @@ def initialize(source, file)
1313
@cond = 0
1414
@cmdarg = 0
1515
@line = 1
16+
@column = 0
1617
@file = file
1718

1819
@scanner = StringScanner.new(source)
@@ -97,7 +98,7 @@ def matched
9798

9899
def next_token
99100
old = self.yylex
100-
loc = []
101+
loc = [@line, @column]
101102
[old[0], [old[1], loc]]
102103
end
103104

Diff for: ‎lib/opal/parser/sexp.rb

+13-3
Original file line numberDiff line numberDiff line change
@@ -1,8 +1,6 @@
11
module Opal
22
class Sexp
33

4-
attr_accessor :line
5-
attr_accessor :end_line
64
attr_reader :array
75

86
attr_accessor :loc
@@ -55,8 +53,20 @@ def ==(other)
5553

5654
alias eql? ==
5755

56+
def line
57+
@loc && @loc[0]
58+
end
59+
60+
def column
61+
@loc && @loc[1]
62+
end
63+
5864
def inspect
59-
"(#{@array.map { |e| e.inspect }.join ' '})"
65+
"(#{@array.map { |e| e.inspect }.join ', '})"
66+
end
67+
68+
def pretty_inspect
69+
"(#{line ? "#{line} " : ''}#{@array.map { |e| e.inspect }.join ', '})"
6070
end
6171

6272
alias to_s inspect

0 commit comments

Comments
 (0)
Please sign in to comment.