diff options
Diffstat (limited to 'src')
-rw-r--r-- | src/validator.cc | 13 |
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; } |