diff options
Diffstat (limited to 'convert/resolve.cpp')
-rw-r--r-- | convert/resolve.cpp | 38 |
1 files changed, 38 insertions, 0 deletions
diff --git a/convert/resolve.cpp b/convert/resolve.cpp new file mode 100644 index 00000000..23d49726 --- /dev/null +++ b/convert/resolve.cpp @@ -0,0 +1,38 @@ +
+#include "../ast/ast.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
+ }
+};
+
+void ResolvePaths_HandleFunction(const AST::Crate& crate, AST::Function& fcn)
+{
+ fcn.code().visit_nodes( CResolvePaths_NodeVisitor(crate) );
+
+ ResolvePaths_Type(fcn.rettype());
+
+ FOREACH(arg, fcn.args())
+ {
+ ResolvePaths_Type(arg.type());
+ }
+}
+
+void ResolvePaths(AST::Crate& crate)
+{
+ crate.iterate_functions(ResolvePaths_HandleFunction);
+}
|