aboutsummaryrefslogtreecommitdiff
path: root/boot/materialization.cc
diff options
context:
space:
mode:
Diffstat (limited to 'boot/materialization.cc')
-rw-r--r--boot/materialization.cc17
1 files changed, 17 insertions, 0 deletions
diff --git a/boot/materialization.cc b/boot/materialization.cc
index c7296f9..fd2558b 100644
--- a/boot/materialization.cc
+++ b/boot/materialization.cc
@@ -39,6 +39,8 @@ namespace elna::boot
return "Local symbols cannot be extern";
case variable_generic:
return "Variables cannot have generic parameters";
+ case constant_generic:
+ return "Constants cannot have generic parameters";
}
__builtin_unreachable();
}
@@ -91,6 +93,21 @@ namespace elna::boot
}
}
+ void materialization_visitor::visit(constant_declaration *declaration)
+ {
+ walking_visitor::visit(declaration);
+ if (!this->in_global_scope && declaration->identifier.exported())
+ {
+ add_error<materialization_error>(declaration->identifier.id().position(),
+ materialization_error::kind::local_export);
+ }
+ if (!declaration->identifier.parameters.empty())
+ {
+ add_error<materialization_error>(declaration->identifier.id().position(),
+ materialization_error::kind::constant_generic);
+ }
+ }
+
void materialization_visitor::visit(literal<integer_literal> *literal)
{
switch (literal->wants_signed)