summaryrefslogtreecommitdiff
path: root/src/expand/derive.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'src/expand/derive.cpp')
-rw-r--r--src/expand/derive.cpp21
1 files changed, 20 insertions, 1 deletions
diff --git a/src/expand/derive.cpp b/src/expand/derive.cpp
index 6b52982d..c14753e9 100644
--- a/src/expand/derive.cpp
+++ b/src/expand/derive.cpp
@@ -83,7 +83,26 @@ public:
node = NEWNODE(AST::ExprNode_CallMethod, mv$(node), AST::PathNode("finish",{}), {});
),
(Tuple,
- assert(!"TODO: derive() debug on tuple struct");
+ node = NEWNODE(AST::ExprNode_NamedValue, AST::Path("f"));
+ node = NEWNODE(AST::ExprNode_CallMethod,
+ mv$(node), AST::PathNode("debug_tuple",{}),
+ vec$( NEWNODE(AST::ExprNode_String, name) )
+ );
+ for( unsigned int idx = 0; idx < e.ents.size(); idx ++ )
+ {
+ node = NEWNODE(AST::ExprNode_CallMethod,
+ mv$(node), AST::PathNode("field",{}),
+ vec$(
+ NEWNODE(AST::ExprNode_UniOp, AST::ExprNode_UniOp::REF,
+ NEWNODE(AST::ExprNode_Field,
+ NEWNODE(AST::ExprNode_NamedValue, AST::Path("self")),
+ FMT(idx)
+ )
+ )
+ )
+ );
+ }
+ node = NEWNODE(AST::ExprNode_CallMethod, mv$(node), AST::PathNode("finish",{}), {});
)
)