summaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
Diffstat (limited to 'src')
-rw-r--r--src/ast/expr.hpp5
-rw-r--r--src/parse/expr.cpp15
2 files changed, 19 insertions, 1 deletions
diff --git a/src/ast/expr.hpp b/src/ast/expr.hpp
index 96b83381..2b2a89f5 100644
--- a/src/ast/expr.hpp
+++ b/src/ast/expr.hpp
@@ -22,6 +22,7 @@ class ExprNode:
public Serialisable
{
TypeRef m_res_type;
+ MetaItems m_attrs;
Position m_pos;
public:
virtual ~ExprNode() = 0;
@@ -32,6 +33,10 @@ public:
void set_pos(Position p) { m_pos = ::std::move(p); }
const Position& get_pos() const { return m_pos; }
+
+ void set_attrs(MetaItems&& mi) {
+ m_attrs = mv$(mi);
+ }
TypeRef& get_res_type() { return m_res_type; }
diff --git a/src/parse/expr.cpp b/src/parse/expr.cpp
index f253293d..47443ee1 100644
--- a/src/parse/expr.cpp
+++ b/src/parse/expr.cpp
@@ -202,6 +202,8 @@ ExprNodeP Parse_ExprBlockNode(TokenStream& lex)
lex.putback(tok);
bool expect_end = false;
nodes.push_back(Parse_ExprBlockLine(lex, &expect_end));
+ // TODO: VVV
+ //nodes.back().set_attrs( item_attrs );
// Set to TRUE if there was no semicolon after a statement
if( expect_end )
{
@@ -615,6 +617,14 @@ ExprNodeP Parse_Expr0(TokenStream& lex)
{
TRACE_FUNCTION;
Token tok;
+
+ ::AST::MetaItems expr_attrs;
+ while( LOOK_AHEAD(lex) == TOK_ATTR_OPEN )
+ {
+ GET_TOK(tok, lex);
+ expr_attrs.push_back( Parse_MetaItem(lex) );
+ GET_CHECK_TOK(tok, lex, TOK_SQUARE_CLOSE);
+ }
ExprNodeP rv = Parse_Expr1(lex);
auto op = AST::ExprNode_Assign::NONE;
@@ -645,10 +655,13 @@ ExprNodeP Parse_Expr0(TokenStream& lex)
case TOK_EQUAL:
op = AST::ExprNode_Assign::NONE;
- return NEWNODE( AST::ExprNode_Assign, op, ::std::move(rv), Parse_Expr0(lex) );
+ rv = NEWNODE( AST::ExprNode_Assign, op, ::std::move(rv), Parse_Expr0(lex) );
+ rv->set_attrs(mv$(expr_attrs));
+ return rv;
default:
lex.putback(tok);
+ rv->set_attrs(mv$(expr_attrs));
return rv;
}
}