summaryrefslogtreecommitdiff
path: root/src/convert/resolve.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'src/convert/resolve.cpp')
-rw-r--r--src/convert/resolve.cpp47
1 files changed, 47 insertions, 0 deletions
diff --git a/src/convert/resolve.cpp b/src/convert/resolve.cpp
new file mode 100644
index 00000000..0d79f1cd
--- /dev/null
+++ b/src/convert/resolve.cpp
@@ -0,0 +1,47 @@
+
+#include "../common.hpp"
+#include "../ast/ast.hpp"
+#include "../parse/parseerror.hpp"
+
+// Path resolution checking
+void ResolvePaths(AST::Crate& crate);
+void ResolvePaths_HandleFunction(const AST::Crate& crate, AST::Function& fcn);
+
+class CResolvePaths_NodeVisitor:
+ public AST::NodeVisitor
+{
+ const AST::Crate& m_crate;
+public:
+ CResolvePaths_NodeVisitor(const AST::Crate& crate):
+ m_crate(crate)
+ {
+ }
+
+ void visit(AST::ExprNode::TagNamedValue, AST::ExprNode& node) {
+ // TODO: Convert into a real absolute path
+ throw ParseError::Todo("CResolvePaths_NodeVisitor::visit(TagNamedValue)");
+ }
+};
+
+void ResolvePaths_Type(TypeRef& type)
+{
+ // TODO: Convert type into absolute
+ throw ParseError::Todo("ResolvePaths_Type");
+}
+
+void ResolvePaths_HandleFunction(const AST::Crate& crate, const AST::Module& module, AST::Function& fcn)
+{
+ fcn.code().visit_nodes( CResolvePaths_NodeVisitor(crate, module) );
+
+ ResolvePaths_Type(crate, module, fcn.rettype());
+
+ FOREACH_M(AST::Function::Arglist, arg, fcn.args())
+ {
+ ResolvePaths_Type(arg->second);
+ }
+}
+
+void ResolvePaths(AST::Crate& crate)
+{
+ crate.iterate_functions(ResolvePaths_HandleFunction);
+}