multiline support

This commit is contained in:
blueloveTH 2022-11-29 01:51:02 +08:00
parent ef407a8326
commit 42f3742fe7
3 changed files with 34 additions and 3 deletions

View File

@ -471,9 +471,9 @@ public:
}
void exprGrouping() {
matchNewLines();
matchNewLines(mode()==SINGLE_MODE);
EXPR_TUPLE();
matchNewLines();
matchNewLines(mode()==SINGLE_MODE);
consume(TK(")"));
}
@ -525,6 +525,7 @@ __LISTCOMP:
emitCode(OP_JUMP_ABSOLUTE, loop.start); keepOpcodeLine();
patchJump(patch);
exitLoop();
matchNewLines(mode()==SINGLE_MODE);
consume(TK("]"));
}

View File

@ -106,6 +106,7 @@ struct Parser {
int brackets_level_0 = 0;
int brackets_level_1 = 0;
int brackets_level_2 = 0;
Token nextToken(){
if(nexts.empty()) return makeErrToken();
@ -141,7 +142,7 @@ struct Parser {
}
bool eatIndentation(){
if(brackets_level_0 > 0 || brackets_level_1 > 0) return true;
if(brackets_level_0 > 0 || brackets_level_1 > 0 || brackets_level_2 > 0) return true;
int spaces = eatSpaces();
// https://docs.python.org/3/reference/lexical_analysis.html#indentation
if(spaces > indents.top()){
@ -271,6 +272,8 @@ struct Parser {
case TK(")"): brackets_level_0--; break;
case TK("["): brackets_level_1++; break;
case TK("]"): brackets_level_1--; break;
case TK("{"): brackets_level_2++; break;
case TK("}"): brackets_level_2--; break;
}
nexts.push( Token{

27
tests/multiline.py Normal file
View File

@ -0,0 +1,27 @@
a = [
1,2,3,
4,5,6
]
assert sum(a) == 21
c = [
i for i in range(10)
if i % 2 == 0
]
assert sum(c) == 20
d = (
1,2,3
)
assert sum(d) == 6
b = {
'a': 1,
'b': 2,
'c': 3
}
assert sum(b.values()) == 6