summaryrefslogtreecommitdiff
path: root/src/expand/derive.cpp
diff options
context:
space:
mode:
authorJohn Hodge <tpg@mutabah.net>2016-03-16 18:36:22 +0800
committerJohn Hodge <tpg@mutabah.net>2016-03-16 18:36:22 +0800
commita3d37e1f829fc974238815a9d9d468c9087048b4 (patch)
treeacf322854baa582943e4886a2648a61f9f74f34b /src/expand/derive.cpp
parent967a2fd0b278c3e8f19bf8fd189304cb36000acf (diff)
downloadmrust-a3d37e1f829fc974238815a9d9d468c9087048b4.tar.gz
AST - Rework struct/enum fields
Diffstat (limited to 'src/expand/derive.cpp')
-rw-r--r--src/expand/derive.cpp45
1 files changed, 26 insertions, 19 deletions
diff --git a/src/expand/derive.cpp b/src/expand/derive.cpp
index 028a8d9b..0096f809 100644
--- a/src/expand/derive.cpp
+++ b/src/expand/derive.cpp
@@ -58,27 +58,34 @@ public:
// Generate code for Debug
AST::ExprNodeP node;
- node = NEWNODE(AST::ExprNode_NamedValue, AST::Path("f"));
- node = NEWNODE(AST::ExprNode_CallMethod,
- mv$(node), AST::PathNode("debug_struct",{}),
- vec$( NEWNODE(AST::ExprNode_String, name) )
- );
- for( const auto& fld : str.fields() )
- {
+ TU_MATCH(AST::StructData, (str.m_data), (e),
+ (Struct,
+ node = NEWNODE(AST::ExprNode_NamedValue, AST::Path("f"));
node = NEWNODE(AST::ExprNode_CallMethod,
- mv$(node), AST::PathNode("field",{}),
- vec$(
- NEWNODE(AST::ExprNode_String, fld.name),
- NEWNODE(AST::ExprNode_UniOp, AST::ExprNode_UniOp::REF,
- NEWNODE(AST::ExprNode_Field,
- NEWNODE(AST::ExprNode_NamedValue, AST::Path("self")),
- fld.name
- )
- )
- )
+ mv$(node), AST::PathNode("debug_struct",{}),
+ vec$( NEWNODE(AST::ExprNode_String, name) )
);
- }
- node = NEWNODE(AST::ExprNode_CallMethod, mv$(node), AST::PathNode("finish",{}), {});
+ for( const auto& fld : e.ents )
+ {
+ node = NEWNODE(AST::ExprNode_CallMethod,
+ mv$(node), AST::PathNode("field",{}),
+ vec$(
+ NEWNODE(AST::ExprNode_String, fld.m_name),
+ NEWNODE(AST::ExprNode_UniOp, AST::ExprNode_UniOp::REF,
+ NEWNODE(AST::ExprNode_Field,
+ NEWNODE(AST::ExprNode_NamedValue, AST::Path("self")),
+ fld.m_name
+ )
+ )
+ )
+ );
+ }
+ node = NEWNODE(AST::ExprNode_CallMethod, mv$(node), AST::PathNode("finish",{}), {});
+ ),
+ (Tuple,
+ assert(!"TODO: derive() debug on tuple struct");
+ )
+ )
DEBUG("node = " << *node);