Fix bug with typecheckign for-loops
This commit is contained in:
parent
941e19d4dd
commit
9817d9b8b6
@ -645,20 +645,22 @@ namespace AST {
|
|||||||
auto bool_ty = std::shared_ptr<types::Type>{
|
auto bool_ty = std::shared_ptr<types::Type>{
|
||||||
new types::FundamentalType{ false, types::FundamentalTypeKind::Bool } };
|
new types::FundamentalType{ false, types::FundamentalTypeKind::Bool } };
|
||||||
|
|
||||||
|
typecheck::Scope inner_scope{ scope };
|
||||||
|
|
||||||
if (this->m_init)
|
if (this->m_init)
|
||||||
(*this->m_init)->typecheck(state, scope);
|
(*this->m_init)->typecheck(state, inner_scope);
|
||||||
|
|
||||||
if (this->m_cond) {
|
if (this->m_cond) {
|
||||||
auto cond_ty = (*this->m_cond)->typecheck(state, scope, bool_ty).type;
|
auto cond_ty = (*this->m_cond)->typecheck(state, inner_scope, bool_ty).type;
|
||||||
|
|
||||||
auto check_res = check_type(state, cond_ty, bool_ty);
|
auto check_res = check_type(state, cond_ty, bool_ty);
|
||||||
this->m_cond = handle_res(std::move(*this->m_cond), check_res, state);
|
this->m_cond = handle_res(std::move(*this->m_cond), check_res, state);
|
||||||
}
|
}
|
||||||
|
|
||||||
if (this->m_after)
|
if (this->m_after)
|
||||||
(*this->m_after)->typecheck(state, scope, {});
|
(*this->m_after)->typecheck(state, inner_scope, {});
|
||||||
|
|
||||||
this->m_loop->typecheck(state, scope);
|
this->m_loop->typecheck(state, inner_scope);
|
||||||
}
|
}
|
||||||
|
|
||||||
void Function::typecheck_preprocess(typecheck::Scope& scope) {
|
void Function::typecheck_preprocess(typecheck::Scope& scope) {
|
||||||
|
|||||||
Loading…
Reference in New Issue
Block a user