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