Skip to content

Commit b0618c0

Browse files
Feat: Posicional only parameters for functions.
1 parent 57f62e8 commit b0618c0

2 files changed

Lines changed: 20 additions & 0 deletions

File tree

compiler/src/modules/parser.rs

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1568,6 +1568,10 @@ impl<'src, I: Iterator<Item = Token>> Parser<'src, I> {
15681568
let mut params = Vec::new();
15691569
let mut defaults = 0u16;
15701570
while !matches!(self.peek(), Some(TokenType::Rpar) | None) {
1571+
if self.eat_if(TokenType::Slash) {
1572+
if matches!(self.peek(), Some(TokenType::Comma)) { self.advance(); }
1573+
continue;
1574+
}
15711575
if self.eat_if(TokenType::Star) {
15721576
let p = self.advance();
15731577
params.push(format!("*{}", self.lexeme(&p)));

compiler/tests/cases/parser_cases.json

Lines changed: 16 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1142,5 +1142,21 @@
11421142
"names": ["f_0"],
11431143
"instructions": [["LoadName",0], ["Call",0], ["Await",0], ["PopTop",0], ["ReturnValue",0]],
11441144
"annotations": {}
1145+
},
1146+
{
1147+
"src": "def f(a, b, /, c):\n pass",
1148+
"constants": [],
1149+
"names": ["f_1"],
1150+
"instructions": [["MakeFunction",0], ["StoreName",0], ["ReturnValue",0]],
1151+
"annotations": {},
1152+
"functions": 1
1153+
},
1154+
{
1155+
"src": "def f(a, /, b, *, c):\n pass",
1156+
"constants": [],
1157+
"names": ["f_1"],
1158+
"instructions": [["MakeFunction",0], ["StoreName",0], ["ReturnValue",0]],
1159+
"annotations": {},
1160+
"functions": 1
11451161
}
11461162
]

0 commit comments

Comments
 (0)