summaryrefslogtreecommitdiff
path: root/src/convert/resolve.cpp
diff options
context:
space:
mode:
authorJohn Hodge <tpg@mutabah.net>2015-03-26 09:48:23 +0800
committerJohn Hodge <tpg@mutabah.net>2015-03-26 09:48:23 +0800
commit100c843c70d9ee4c8e142cb45ba9b177b7da158d (patch)
treea9a12fc5357479eac1f8a26f7d39a11c5ce17dc3 /src/convert/resolve.cpp
parent0dec25af084dcb27500d840e4afabe6ad7e65a9e (diff)
downloadmrust-100c843c70d9ee4c8e142cb45ba9b177b7da158d.tar.gz
Cleaning up rust source output
Diffstat (limited to 'src/convert/resolve.cpp')
-rw-r--r--src/convert/resolve.cpp43
1 files changed, 42 insertions, 1 deletions
diff --git a/src/convert/resolve.cpp b/src/convert/resolve.cpp
index 62eb0bbf..d0edc165 100644
--- a/src/convert/resolve.cpp
+++ b/src/convert/resolve.cpp
@@ -187,9 +187,46 @@ public:
DEBUG("ExprNode_LetBinding");
AST::NodeVisitor::visit(node.m_value);
-
+ m_res.handle_type(node.m_type);
m_res.handle_pattern(node.m_pat, TypeRef());
}
+
+ void visit(AST::ExprNode_StructLiteral& node) override
+ {
+ DEBUG("ExprNode_StructLiteral");
+
+ m_res.handle_path(node.m_path, CASTIterator::MODE_EXPR);
+ AST::NodeVisitorDef::visit(node);
+ }
+
+ void visit(AST::ExprNode_Closure& node) override
+ {
+ DEBUG("ExprNode_Closure");
+ m_res.start_scope();
+ for( auto& param : node.m_args )
+ {
+ m_res.handle_type(param.second);
+ m_res.handle_pattern(param.first, param.second);
+ }
+ m_res.handle_type(node.m_return);
+ AST::NodeVisitor::visit(node.m_code);
+ m_res.end_scope();
+ }
+
+ void visit(AST::ExprNode_Cast& node) override
+ {
+ DEBUG("ExprNode_Cast");
+ m_res.handle_type(node.m_type);
+ AST::NodeVisitorDef::visit(node);
+ }
+
+ void visit(AST::ExprNode_CallMethod& node) override
+ {
+ DEBUG("ExprNode_CallMethod");
+ for( auto& arg : node.m_method.args() )
+ m_res.handle_type(arg);
+ AST::NodeVisitorDef::visit(node);
+ }
};
CPathResolver::CPathResolver(const AST::Crate& crate):
@@ -360,6 +397,10 @@ void CPathResolver::handle_path(AST::Path& path, CASTIterator::PathMode mode)
// - Switch the path to be a "LOCAL"
path.set_local();
return ;
+ // Binding is valid
+ case MODE_BIND:
+ //break ;
+ throw ParseError::Todo("TODO: MODE_BIND, but local hit, what do?");
}
// TODO: What about sub-types and methods on type params?