From 9189b055b3cf6c9f281c513d46e0e011218a9034 Mon Sep 17 00:00:00 2001
From: Kubat <mael.martin31@gmail.com>
Date: Thu, 10 Feb 2022 23:01:20 +0100
Subject: [PATCH] FIX: Parse flag like IrAttribute

---
 src/Lib/Script/Ast/IrAttribute.cc | 29 +++++++++++++++++------------
 1 file changed, 17 insertions(+), 12 deletions(-)

diff --git a/src/Lib/Script/Ast/IrAttribute.cc b/src/Lib/Script/Ast/IrAttribute.cc
index 40c26dbd..25453e71 100644
--- a/src/Lib/Script/Ast/IrAttribute.cc
+++ b/src/Lib/Script/Ast/IrAttribute.cc
@@ -55,22 +55,27 @@ IrAttribute::parse(std::vector<Token> *tokens)
         parentAttributes.push_back(std::make_pair(name, valueToken.asQName()));
     };
 
-    getInnerTokenOpt(tokenListPop(tokens)).assertTypeSimple(TOKEN_COL);
+    if (getInnerTokenOpt(tokenListPop(tokens)).isSimple(TOKEN_COL)) {
+        /* Attributes can be a list: `#(name: [ v1, v2 ])` */
+        if (getInnerTokenOpt(tokenListPeek(tokens)).isSimple(TOKEN_BRACKET_LEFT)) {
+            do {
+                tokenListPop(tokens); /* Pop [ or , */
+                getValueAndAddAttribute(false);
+            } while (getInnerTokenOpt(tokenListPeek(tokens)).isSimple(TOKEN_COMMA));
+            getInnerTokenOpt(tokenListPop(tokens)).assertTypeSimple(TOKEN_BRACKET_RIGHT);
+            getInnerTokenOpt(tokenListPop(tokens)).assertTypeSimple(TOKEN_PARENT_RIGHT);
+        }
 
-    /* Attributes can be a list: `#(name: [ v1, v2 ])` */
-    if (getInnerTokenOpt(tokenListPeek(tokens)).isSimple(TOKEN_BRACKET_LEFT)) {
-        do {
-            tokenListPop(tokens); /* Pop [ or , */
-            getValueAndAddAttribute(false);
-        } while (getInnerTokenOpt(tokenListPeek(tokens)).isSimple(TOKEN_COMMA));
-        getInnerTokenOpt(tokenListPop(tokens)).assertTypeSimple(TOKEN_BRACKET_RIGHT);
-        getInnerTokenOpt(tokenListPop(tokens)).assertTypeSimple(TOKEN_PARENT_RIGHT);
+        /* Attribute can be simple elements: `#(name: value)` */
+        else {
+            getValueAndAddAttribute(true);
+            getInnerTokenOpt(tokenListPop(tokens)).assertTypeSimple(TOKEN_PARENT_RIGHT);
+        }
     }
 
-    /* Attribute can be simple elements: `#(name: value)` */
+    /* Attribute as a flag: `#(name)` */
     else {
-        getValueAndAddAttribute(true);
-        getInnerTokenOpt(tokenListPop(tokens)).assertTypeSimple(TOKEN_PARENT_RIGHT);
+        parentAttributes.push_back(std::make_pair(name, name));
     }
 }
 }
-- 
GitLab