diff options
| author | Baitinq <[email protected]> | 2025-07-13 23:41:40 +0200 |
|---|---|---|
| committer | Baitinq <[email protected]> | 2025-07-13 23:41:40 +0200 |
| commit | ed094396f380fb0679194b1e3c51faf996dc2bfe (patch) | |
| tree | f38e80a4ece3a7ee03f6c1abde80ac8d58c67be4 /src/bootstrap/parser.pry | |
| parent | Boostrap: Support newtype (diff) | |
| download | pry-lang-ed094396f380fb0679194b1e3c51faf996dc2bfe.tar.gz pry-lang-ed094396f380fb0679194b1e3c51faf996dc2bfe.tar.bz2 pry-lang-ed094396f380fb0679194b1e3c51faf996dc2bfe.zip | |
Boostrap: Support break and continue
Diffstat (limited to 'src/bootstrap/parser.pry')
| -rw-r--r-- | src/bootstrap/parser.pry | 33 |
1 files changed, 33 insertions, 0 deletions
diff --git a/src/bootstrap/parser.pry b/src/bootstrap/parser.pry index cf5cabd..f77bc77 100644 --- a/src/bootstrap/parser.pry +++ b/src/bootstrap/parser.pry @@ -1389,6 +1389,39 @@ let parser_parse_statement = (p: *parser) => *Node { }; return retu; }; + + /* Break and continue */ + let retu = parser_accept_parse(p, (ip: *parser) => *Node { + if parser_accept_token(ip, TOKEN_BREAK) == cast(*token, null) { + return cast(*Node, null); + }; + + let n = Node{}; + n.type = NODE_BREAK_STATEMENT; + return create_node(ip, n); + }); + if retu != cast(*Node, null) { + if parser_accept_token(p, TOKEN_SEMICOLON) == cast(*token, null) { + return cast(*Node, null); + }; + return retu; + }; + + let retu = parser_accept_parse(p, (ip: *parser) => *Node { + if parser_accept_token(ip, TOKEN_CONTINUE) == cast(*token, null) { + return cast(*Node, null); + }; + + let n = Node{}; + n.type = NODE_CONTINUE_STATEMENT; + return create_node(ip, n); + }); + if retu != cast(*Node, null) { + if parser_accept_token(p, TOKEN_SEMICOLON) == cast(*token, null) { + return cast(*Node, null); + }; + return retu; + }; printf("None\n"); |