summaryrefslogtreecommitdiff
path: root/src/dump_as_rust.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'src/dump_as_rust.cpp')
-rw-r--r--src/dump_as_rust.cpp27
1 files changed, 21 insertions, 6 deletions
diff --git a/src/dump_as_rust.cpp b/src/dump_as_rust.cpp
index e1c32a69..a1fac249 100644
--- a/src/dump_as_rust.cpp
+++ b/src/dump_as_rust.cpp
@@ -132,9 +132,22 @@ public:
}
m_os << ")";
}
- virtual void visit(AST::ExprNode_CallObject&) override {
+ virtual void visit(AST::ExprNode_CallObject& n) override {
m_expr_root = false;
- throw ::std::runtime_error("unimplemented ExprNode_CallObject");
+ m_os << "(";
+ AST::NodeVisitor::visit(n.m_val);
+ m_os << ")(";
+ bool is_first = true;
+ for( auto& arg : n.m_args )
+ {
+ if(is_first) {
+ is_first = false;
+ } else {
+ m_os << ", ";
+ }
+ AST::NodeVisitor::visit(arg);
+ }
+ m_os << ")";
}
virtual void visit(AST::ExprNode_Loop& n) override {
bool expr_root = m_expr_root;
@@ -408,9 +421,11 @@ public:
AST::NodeVisitor::visit(n.m_idx);
m_os << "]";
}
- virtual void visit(AST::ExprNode_Deref&) override {
+ virtual void visit(AST::ExprNode_Deref& n) override {
m_expr_root = false;
- throw ::std::runtime_error("unimplemented ExprNode_Deref");
+ m_os << "*(";
+ AST::NodeVisitor::visit(n.m_value);
+ m_os << ")";
}
virtual void visit(AST::ExprNode_Cast& n) override {
m_expr_root = false;
@@ -644,7 +659,7 @@ void RustPrinter::print_bounds(const AST::TypeParams& params)
for( const auto& b : params.bounds() )
{
if( !is_first )
- m_os << ", ";
+ m_os << ",\n";
is_first = false;
m_os << indent() << b.test() << ": ";
@@ -652,8 +667,8 @@ void RustPrinter::print_bounds(const AST::TypeParams& params)
m_os << b.bound();
else
m_os << b.lifetime();
- m_os << "\n";
}
+ m_os << "\n";
dec_indent();
}