about summary refs log tree commit diff
path: root/src/bootstrap/parser.pry
diff options
context:
space:
mode:
authorBaitinq <[email protected]>2025-07-13 23:41:40 +0200
committerBaitinq <[email protected]>2025-07-13 23:41:40 +0200
commited094396f380fb0679194b1e3c51faf996dc2bfe (patch)
treef38e80a4ece3a7ee03f6c1abde80ac8d58c67be4 /src/bootstrap/parser.pry
parentBoostrap: Support newtype (diff)
downloadpry-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.pry33
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");