Skip to content

Commit 16ab69a

Browse files
committed
[GR-38748] Use original python grammar and replace source offsets with SourceRange in SST nodes
PullRequest: graalpython/2267
2 parents de1733d + d2d117a commit 16ab69a

File tree

36 files changed

+1633
-1248
lines changed

36 files changed

+1633
-1248
lines changed

graalpython/com.oracle.graal.python.pegparser.generator/diff_generator.py

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -129,6 +129,7 @@ def visit_Rule(self, node: Rule):
129129
def visit_Alt(self, node: Alt):
130130
action = re.sub(r" ([\.,\(\)\[\]]) ", r"\1", str(node.action)) # shorten action string
131131
self.actions[" ".join(str(item) for item in node.items)] = action
132+
self.generic_visit(node)
132133

133134

134135
def main():

graalpython/com.oracle.graal.python.pegparser.generator/pegjava/java_generator.py

Lines changed: 382 additions & 37 deletions
Large diffs are not rendered by default.

graalpython/com.oracle.graal.python.pegparser.test/src/com/oracle/graal/python/pegparser/AtomsTests.java

Lines changed: 10 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -102,7 +102,16 @@ public void atomString7() throws Exception {
102102
@Test
103103
public void atomFString() throws Exception {
104104
checkTreeResult("f'a{b!r}'");
105-
checkError("f'a{b!g}'", "Generic[0:4]:f-string: invalid conversion character: expected 's', 'r', or 'a'");
105+
checkError("f'a{b!g}'", "Generic[2:9]:f-string: invalid conversion character: expected 's', 'r', or 'a'");
106+
}
107+
108+
@Test
109+
public void atomFStringMultiline() throws Exception {
110+
checkTreeResult("f\"\"\"First line.{\n" +
111+
" v1\n" +
112+
"+\n" +
113+
"v2}\n" +
114+
"Another line.\"\"\"");
106115
}
107116

108117
@Test

graalpython/com.oracle.graal.python.pegparser.test/src/com/oracle/graal/python/pegparser/ParserTestBase.java

Lines changed: 5 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -54,6 +54,7 @@
5454
import java.util.Arrays;
5555
import java.util.List;
5656

57+
import com.oracle.graal.python.pegparser.tokenizer.SourceRange;
5758
import org.junit.Rule;
5859
import org.junit.rules.TestName;
5960

@@ -97,7 +98,7 @@ public ModTy parse(String src, String moduleName, int mode) {
9798

9899
FExprParser fexpParser = new FExprParser() {
99100
@Override
100-
public ExprTy parse(String code) {
101+
public ExprTy parse(String code, SourceRange sourceRange) {
101102
ParserTokenizer tok = new ParserTokenizer(code);
102103
return (ExprTy) new Parser(tok, factory, this).parse(InputType.FSTRING);
103104
}
@@ -203,13 +204,13 @@ public void checkError(String source, String... expectedErrors) {
203204
ArrayList<String> errors = new ArrayList<>();
204205
ParserErrorCallback errorCb = new ParserErrorCallback() {
205206
@Override
206-
public void onError(ParserErrorCallback.ErrorType type, int start, int end, String message) {
207-
errors.add(String.format("%s[%d:%d]:%s", type.name(), start, end, message));
207+
public void onError(ParserErrorCallback.ErrorType type, SourceRange sourceRange, String message) {
208+
errors.add(String.format("%s[%d:%d]:%s", type.name(), sourceRange.startOffset, sourceRange.endOffset, message));
208209
}
209210
};
210211
FExprParser fexpParser = new FExprParser() {
211212
@Override
212-
public ExprTy parse(String code) {
213+
public ExprTy parse(String code, SourceRange range) {
213214
ParserTokenizer tok = new ParserTokenizer(code);
214215
return (ExprTy) new Parser(tok, factory, this, errorCb).parse(InputType.FSTRING);
215216
}

graalpython/com.oracle.graal.python.pegparser.test/src/com/oracle/graal/python/pegparser/sst/SSTTreePrinterVisitor.java

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -59,8 +59,8 @@ private String indent() {
5959

6060
private static String addHeader(SSTNode node) {
6161
StringBuilder sb = new StringBuilder();
62-
sb.append(node.getClass().getSimpleName()).append("[").append(node.getStartOffset());
63-
sb.append(", ").append(node.getEndOffset()).append("]");
62+
sb.append(node.getClass().getSimpleName()).append("[").append(node.getSourceRange().startOffset);
63+
sb.append(", ").append(node.getSourceRange().endOffset).append("]");
6464
return sb.toString();
6565
}
6666

@@ -224,8 +224,8 @@ public String visit(ExprTy.Compare node) {
224224
@Override
225225
public String visit(ExprTy.Constant node) {
226226
StringBuilder sb = new StringBuilder();
227-
sb.append(node.kind).append("[").append(node.getStartOffset());
228-
sb.append(", ").append(node.getEndOffset()).append("]");
227+
sb.append(node.kind).append("[").append(node.getSourceRange().startOffset);
228+
sb.append(", ").append(node.getSourceRange().endOffset).append("]");
229229
sb.append(" Value: ");
230230
switch (node.kind) {
231231
case LONG:

graalpython/com.oracle.graal.python.pegparser.test/src/com/oracle/graal/python/tokenizer/TokenizerTest.java

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -470,8 +470,8 @@ private void checkTokensFromTestDataFile() throws Exception {
470470
sb.append("exact_type:").append(getCPythonValueOfTokenType(token.type));
471471
sb.append(" (").append(token.typeName()).append(") ");
472472
}
473-
sb.append("start:[").append(token.startLine).append(", ").append(token.startColumn).append("] ");
474-
sb.append("end:[").append(token.endLine).append(", ").append(token.endColumn).append("] ");
473+
sb.append("start:[").append(token.sourceRange.startLine).append(", ").append(token.sourceRange.startColumn).append("] ");
474+
sb.append("end:[").append(token.sourceRange.endLine).append(", ").append(token.sourceRange.endColumn).append("] ");
475475
sb.append("string:'").append(tokenizer.getTokenString(token)).append("'");
476476
String goldenToken = goldenResult.get(goldenResultIndex);
477477
assertEquals("Code: '" + line + "'", goldenToken, sb.toString());
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,13 @@
1+
Module[0, 45]
2+
JoinedStr[0, 45]
3+
Values:
4+
RAW[4, 15] Value: First line.
5+
FormattedValue[16, 27]
6+
Value:
7+
BinOp[5, 12]
8+
Op: ADD
9+
LHS: Name[5, 7] Value: "v1"
10+
RHS: Name[10, 12] Value: "v2"
11+
Conversion: NONE
12+
RAW[28, 42] Value:
13+
Another line.

graalpython/com.oracle.graal.python.pegparser.test/testData/parser/goldenFiles/BasicTests/call09.tast

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -3,4 +3,5 @@ Module[0, 12]
33
Target: Name[0, 3] Value: "foo"
44
Args:
55
Starred[4, 11]
6+
Context: Load
67
Expr: Name[5, 11] Value: "mylist"

graalpython/com.oracle.graal.python.pegparser.test/testData/parser/goldenFiles/BasicTests/call10.tast

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -3,6 +3,8 @@ Module[0, 23]
33
Target: Name[0, 3] Value: "foo"
44
Args:
55
Starred[4, 12]
6+
Context: Load
67
Expr: Name[5, 12] Value: "mylist1"
78
Starred[14, 22]
9+
Context: Load
810
Expr: Name[15, 22] Value: "mylist2"

graalpython/com.oracle.graal.python.pegparser.test/testData/parser/goldenFiles/ClassDefTests/classDef08.tast

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -24,6 +24,7 @@ Module[0, 128]
2424
Target: Name[109, 113] Value: "self"
2525
Args:
2626
Starred[114, 119]
27+
Context: Load
2728
Expr: Name[115, 119] Value: "args"
2829
KWArgs:
2930
KeywordTy[121, 127]

0 commit comments

Comments
 (0)