summaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
Diffstat (limited to 'src')
-rw-r--r--src/validator.cc13
1 files changed, 12 insertions, 1 deletions
diff --git a/src/validator.cc b/src/validator.cc
index d63e6a3c..d1f8cf26 100644
--- a/src/validator.cc
+++ b/src/validator.cc
@@ -728,7 +728,18 @@ Result Validator::OnSelectExpr(SelectExpr* expr) {
Result Validator::OnSetGlobalExpr(SetGlobalExpr* expr) {
expr_loc_ = &expr->loc;
- typechecker_.OnSetGlobal(GetGlobalVarTypeOrAny(&expr->var));
+ Type type = Type::Any;
+ const Global* global;
+ Index global_index;
+ if (Succeeded(CheckGlobalVar(&expr->var, &global, &global_index))) {
+ if (!global->mutable_) {
+ PrintError(&expr->loc,
+ "can't set_global on immutable global at index %" PRIindex ".",
+ global_index);
+ }
+ type = global->type;
+ }
+ typechecker_.OnSetGlobal(type);
return Result::Ok;
}