]> git.xonotic.org Git - xonotic/gmqcc.git/blobdiff - parser.c
ast_label, and labels later used for goto
[xonotic/gmqcc.git] / parser.c
index 945ddbf76c8ee0b4ff513e3f339b1ea4a6ddd9ee..1d752c409688c4f1270aa7a7cc1c3cd0b6832254 100644 (file)
--- a/parser.c
+++ b/parser.c
@@ -2336,6 +2336,27 @@ static bool parse_statement(parser_t *parser, ast_block *block, ast_expression *
         *out = (ast_expression*)inner;
         return true;
     }
+    else if (parser->tok == ':')
+    {
+        ast_label *label;
+        if (!parser_next(parser)) {
+            parseerror(parser, "expected label name");
+            return false;
+        }
+        if (parser->tok != TOKEN_IDENT) {
+            parseerror(parser, "label must be an identifier");
+            return false;
+        }
+        label = ast_label_new(parser_ctx(parser), parser_tokval(parser));
+        if (!label)
+            return false;
+        *out = (ast_expression*)label;
+        if (!parser_next(parser)) {
+            parseerror(parser, "parse error after label");
+            return false;
+        }
+        return true;
+    }
     else if (parser->tok == ';')
     {
         if (!parser_next(parser)) {