diff options
Diffstat (limited to 'src/convert/resolve.cpp')
-rw-r--r-- | src/convert/resolve.cpp | 43 |
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?
|