summaryrefslogtreecommitdiff
path: root/src/ast
diff options
context:
space:
mode:
Diffstat (limited to 'src/ast')
-rw-r--r--src/ast/dump.cpp5
-rw-r--r--src/ast/expr.cpp6
-rw-r--r--src/ast/expr.hpp7
3 files changed, 12 insertions, 6 deletions
diff --git a/src/ast/dump.cpp b/src/ast/dump.cpp
index 0d77054c..363123fa 100644
--- a/src/ast/dump.cpp
+++ b/src/ast/dump.cpp
@@ -404,8 +404,9 @@ public:
inc_indent();
for( const auto& i : n.m_values )
{
- m_os << indent() << i.first << ": ";
- AST::NodeVisitor::visit(i.second);
+ // TODO: Attributes
+ m_os << indent() << i.name << ": ";
+ AST::NodeVisitor::visit(i.value);
m_os << ",\n";
}
if( n.m_base_value.get() )
diff --git a/src/ast/expr.cpp b/src/ast/expr.cpp
index c1baf9b4..535c2e24 100644
--- a/src/ast/expr.cpp
+++ b/src/ast/expr.cpp
@@ -286,7 +286,7 @@ NODE(ExprNode_StructLiteral, {
os << m_path << " { ";
for(const auto& v : m_values)
{
- os << v.first << ": " << *v.second << ", ";
+ os << v.name << ": " << *v.value << ", ";
}
if(m_base_value)
{
@@ -297,7 +297,7 @@ NODE(ExprNode_StructLiteral, {
ExprNode_StructLiteral::t_values vals;
for(const auto& v : m_values) {
- vals.push_back( ::std::make_pair(v.first, v.second->clone()) );
+ vals.push_back({ v.attrs.clone(), v.name, v.value->clone() });
}
return NEWNODE(ExprNode_StructLiteral, AST::Path(m_path), OPT_CLONE(m_base_value), mv$(vals) );
@@ -550,7 +550,7 @@ NV(ExprNode_StructLiteral,
{
visit(node.m_base_value);
for( auto& val : node.m_values )
- visit(val.second);
+ visit(val.value);
})
NV(ExprNode_Array,
{
diff --git a/src/ast/expr.hpp b/src/ast/expr.hpp
index a6b58e03..2c9a1c35 100644
--- a/src/ast/expr.hpp
+++ b/src/ast/expr.hpp
@@ -417,7 +417,12 @@ struct ExprNode_Closure:
struct ExprNode_StructLiteral:
public ExprNode
{
- typedef ::std::vector< ::std::pair< ::std::string, unique_ptr<ExprNode> > > t_values;
+ struct Ent {
+ MetaItems attrs;
+ ::std::string name;
+ unique_ptr<ExprNode> value;
+ };
+ typedef ::std::vector<Ent> t_values;
Path m_path;
unique_ptr<ExprNode> m_base_value;
t_values m_values;