aboutsummaryrefslogtreecommitdiff
path: root/boot/dependency.cc
diff options
context:
space:
mode:
Diffstat (limited to 'boot/dependency.cc')
-rw-r--r--boot/dependency.cc15
1 files changed, 12 insertions, 3 deletions
diff --git a/boot/dependency.cc b/boot/dependency.cc
index 9ab5141..bd1251a 100644
--- a/boot/dependency.cc
+++ b/boot/dependency.cc
@@ -18,6 +18,7 @@ along with GCC; see the file COPYING3. If not see
#include "elna/boot/dependency.h"
#include "elna/boot/driver.h"
+#include "elna/boot/materialization.h"
#include "elna/boot/name_analysis.h"
#include "elna/boot/type_check.h"
#include "elna/boot/validation.h"
@@ -25,7 +26,7 @@ along with GCC; see the file COPYING3. If not see
namespace elna::boot
{
- dependency read_source(std::istream& entry_point)
+ dependency read_source(std::istream& entry_point, const target_info& target)
{
driver parse_driver;
lexer tokenizer(entry_point);
@@ -41,10 +42,18 @@ namespace elna::boot
{
std::swap(outcome.tree, parse_driver.tree);
}
- declaration_visitor declaration_visitor;
+ materialization_visitor materialization_visitor(target);
+ outcome.tree->accept(&materialization_visitor);
+
+ if (materialization_visitor.has_errors())
+ {
+ std::swap(outcome.errors(), materialization_visitor.errors());
+ return outcome;
+ }
+ declaration_visitor declaration_visitor{};
outcome.tree->accept(&declaration_visitor);
- if (!declaration_visitor.errors().empty())
+ if (declaration_visitor.has_errors())
{
std::swap(outcome.errors(), declaration_visitor.errors());
}