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.cpp21
1 files changed, 20 insertions, 1 deletions
diff --git a/src/dump_as_rust.cpp b/src/dump_as_rust.cpp
index f3fd8f83..20dc3ab5 100644
--- a/src/dump_as_rust.cpp
+++ b/src/dump_as_rust.cpp
@@ -34,6 +34,10 @@ public:
virtual void visit(AST::ExprNode_Block& n) override {
m_os << "{";
inc_indent();
+ if( n.m_inner_mod.get() )
+ {
+ handle_module(*n.m_inner_mod);
+ }
bool is_first = true;
for( auto& child : n.m_nodes )
{
@@ -89,13 +93,28 @@ public:
m_expr_root = false;
m_os << "let ";
print_pattern(n.m_pat);
+ m_os << ": ";
+ print_type(n.m_type);
m_os << " = ";
AST::NodeVisitor::visit(n.m_value);
}
virtual void visit(AST::ExprNode_Assign& n) override {
m_expr_root = false;
AST::NodeVisitor::visit(n.m_slot);
- m_os << " = ";
+ switch(n.m_op)
+ {
+ case AST::ExprNode_Assign::NONE: m_os << " = "; break;
+ case AST::ExprNode_Assign::ADD: m_os << " += "; break;
+ case AST::ExprNode_Assign::SUB: m_os << " -= "; break;
+ case AST::ExprNode_Assign::MUL: m_os << " *= "; break;
+ case AST::ExprNode_Assign::DIV: m_os << " /= "; break;
+ case AST::ExprNode_Assign::MOD: m_os << " %= "; break;
+ case AST::ExprNode_Assign::AND: m_os << " &= "; break;
+ case AST::ExprNode_Assign::OR: m_os << " |= "; break;
+ case AST::ExprNode_Assign::XOR: m_os << " ^= "; break;
+ case AST::ExprNode_Assign::SHR: m_os << " >>= "; break;
+ case AST::ExprNode_Assign::SHL: m_os << " <<= "; break;
+ }
AST::NodeVisitor::visit(n.m_value);
}
virtual void visit(AST::ExprNode_CallPath& n) override {