Skip to content

Commit 1084af1

Browse files
committed
Fix for some offset problems -- the biggest one being dedents now take on the
offset values of the previous token.
1 parent e8adedc commit 1084af1

File tree

3 files changed

+21
-4
lines changed

3 files changed

+21
-4
lines changed

grammar/Python.g

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -284,6 +284,12 @@ file_input
284284
List stypes = new ArrayList();
285285
}
286286
@after {
287+
if (!stypes.isEmpty()) {
288+
//The EOF token messes up the end offsets, so set them manually.
289+
PythonTree stop = (PythonTree)stypes.get(stypes.size() -1);
290+
mtype.setCharStopIndex(stop.getCharStopIndex());
291+
mtype.setTokenStopIndex(stop.getTokenStopIndex());
292+
}
287293
$file_input.tree = mtype;
288294
}
289295
: (NEWLINE

src/org/python/antlr/PythonTokenSource.java

Lines changed: 13 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -157,14 +157,18 @@ protected void insertImaginaryIndentDedentTokens() {
157157
stream.consume();
158158

159159
if (t.getType() == Token.EOF) {
160+
Token prev = stream.LT(-1);
160161
if (!inSingle) {
161-
Token prev = stream.LT(-1);
162162
if (prev == null || prev.getType() != PythonLexer.NEWLINE) {
163163
generateNewline(t);
164164
}
165165
}
166-
167-
handleDedents(-1, (CommonToken)t);
166+
if (prev != null) {
167+
((CommonToken)t).setStopIndex(((CommonToken)prev).getStopIndex());
168+
handleDedents(-1, (CommonToken)prev);
169+
} else {
170+
handleDedents(-1, (CommonToken)t);
171+
}
168172
enqueue(t);
169173
} else if (t.getType() == PythonLexer.NEWLINE) {
170174
// save NEWLINE in the queue
@@ -203,7 +207,12 @@ else if (t.getType() == PythonLexer.LEADING_WS) {
203207
handleIndents(cpos, (CommonToken)t);
204208
}
205209
else if (cpos < lastIndent) { // they dedented
206-
handleDedents(cpos, (CommonToken)t);
210+
Token prev = stream.LT(-1);
211+
if (prev != null) {
212+
handleDedents(cpos, (CommonToken)prev);
213+
} else {
214+
handleDedents(cpos, (CommonToken)t);
215+
}
207216
}
208217

209218
if (t.getType() == Token.EOF && inSingle) {

src/org/python/antlr/PythonTreeAdaptor.java

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -12,6 +12,8 @@ public void setTokenBoundaries(Object t, Token startToken, Token stopToken) {
1212
if (t==null) {
1313
return;
1414
}
15+
//System.out.println("setting boundries on '"+t+"' with start: '" + startToken + "' and '" +
16+
// stopToken + "'");
1517
int start = 0;
1618
int stop = 0;
1719
int startChar = 0;

0 commit comments

Comments
 (0)