8000 Split declaration; support 'for (int i = 0;...)' · python/cpython@5e90a22 · GitHub
[go: up one dir, main page]

Skip to content

Commit 5e90a22

Browse files
committed
Split declaration; support 'for (int i = 0;...)'
1 parent 9e9ddbd commit 5e90a22

File tree

1 file changed

+9
-6
lines changed

1 file changed

+9
-6
lines changed

Tools/cases_generator/sparser.py

Lines changed: 9 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -108,7 +108,7 @@ def stmt(self) -> Node | None:
108108
# TODO: switch, case, default, label
109109
if kind == lx.SEMI:
110110
return self.empty_stmt()
111-
if decl := self.declaration():
111+
if decl := self.decl_stmt():
112112
return decl
113113
return self.expr_stmt()
114114

@@ -126,7 +126,7 @@ def block(self):
126126
def for_stmt(self):
127127
if self.expect(lx.FOR):
128128
self.require(lx.LPAREN)
129-
init = self.expr()
129+
init = self.decl() or self.expr()
130130
self.require(lx.SEMI)
131131
cond = self.expr()
132132
self.require(lx.SEMI)
@@ -180,7 +180,13 @@ def expr_stmt(self):
180180
return expr
181181

182182
@contextual
183-
def declaration(self):
183+
def decl_stmt(self):
184+
if decl := self.decl():
185+
if self.expect(lx.SEMI):
186+
return decl
187+
188+
@contextual
189+
def decl(self):
184190
if not (type := self.type_name()):
185191
return None
186192
stars = 0
@@ -191,11 +197,8 @@ def declaration(self):
191197
init = self.expr()
192198
if not init:
193199
raise self.make_syntax_error("Expected initialization expression")
194-
self.require(lx.SEMI)
195200
else:
196201
init = None
197-
if not (self.expect(lx.SEMI)):
198-
return None
199202
return VarDecl(type, name, init)
200203

201204

0 commit comments

Comments
 (0)
0