Add effect_type to can ClosureData

This commit is contained in:
Agus Zubiaga 2024-10-04 20:30:56 -03:00
parent d692fc7c42
commit 386a5055ee
No known key found for this signature in database
13 changed files with 40 additions and 0 deletions

View file

@ -446,6 +446,7 @@ fn defn_help(
function_type: var_store.fresh(),
closure_type: var_store.fresh(),
return_type: ret_var,
effect_type: Variable::PURE,
early_returns: vec![],
name: fn_name,
captured_symbols: Vec::new(),

View file

@ -456,6 +456,7 @@ fn deep_copy_expr_help<C: CopyEnv>(env: &mut C, copied: &mut Vec<Variable>, expr
function_type,
closure_type,
return_type,
effect_type,
early_returns,
name,
captured_symbols,
@ -466,6 +467,7 @@ fn deep_copy_expr_help<C: CopyEnv>(env: &mut C, copied: &mut Vec<Variable>, expr
function_type: sub!(*function_type),
closure_type: sub!(*closure_type),
return_type: sub!(*return_type),
effect_type: sub!(*effect_type),
early_returns: early_returns
.iter()
.map(|(var, region)| (sub!(*var), *region))

View file

@ -2354,6 +2354,7 @@ fn canonicalize_pending_value_def<'a>(
function_type: var_store.fresh(),
closure_type: var_store.fresh(),
return_type: var_store.fresh(),
effect_type: var_store.fresh(),
early_returns: scope.early_returns.clone(),
name: symbol,
captured_symbols: Vec::new(),

View file

@ -407,6 +407,7 @@ pub struct ClosureData {
pub function_type: Variable,
pub closure_type: Variable,
pub return_type: Variable,
pub effect_type: Variable,
pub early_returns: Vec<(Variable, Region)>,
pub name: Symbol,
pub captured_symbols: Vec<(Symbol, Variable)>,
@ -484,6 +485,7 @@ impl StructAccessorData {
function_type: function_var,
closure_type: closure_var,
return_type: field_var,
effect_type: Variable::PURE,
early_returns: vec![],
name,
captured_symbols: vec![],
@ -558,6 +560,7 @@ impl OpaqueWrapFunctionData {
function_type: function_var,
closure_type: closure_var,
return_type: opaque_var,
effect_type: Variable::PURE,
early_returns: vec![],
name: function_name,
captured_symbols: vec![],
@ -1687,6 +1690,7 @@ fn canonicalize_closure_body<'a>(
function_type: var_store.fresh(),
closure_type: var_store.fresh(),
return_type: return_type_var,
effect_type: var_store.fresh(),
early_returns: scope.early_returns.clone(),
name: symbol,
captured_symbols,
@ -2317,6 +2321,7 @@ pub fn inline_calls(var_store: &mut VarStore, expr: Expr) -> Expr {
function_type,
closure_type,
return_type,
effect_type,
early_returns,
recursive,
name,
@ -2334,6 +2339,7 @@ pub fn inline_calls(var_store: &mut VarStore, expr: Expr) -> Expr {
function_type,
closure_type,
return_type,
effect_type,
early_returns,
recursive,
name,
@ -3184,6 +3190,7 @@ impl Declarations {
function_type: var_store.fresh(),
closure_type: var_store.fresh(),
return_type: var_store.fresh(),
effect_type: var_store.fresh(),
early_returns: vec![],
name: self.symbols[index].value,
captured_symbols: vec![],

View file

@ -72,6 +72,7 @@ pub fn build_host_exposed_def(
function_type: var_store.fresh(),
closure_type: var_store.fresh(),
return_type: var_store.fresh(),
effect_type: var_store.fresh(),
early_returns: vec![],
name: task_closure_symbol,
captured_symbols,
@ -99,6 +100,7 @@ pub fn build_host_exposed_def(
function_type: var_store.fresh(),
closure_type: var_store.fresh(),
return_type: var_store.fresh(),
effect_type: var_store.fresh(),
early_returns: vec![],
name: symbol,
captured_symbols: std::vec::Vec::new(),
@ -128,6 +130,7 @@ pub fn build_host_exposed_def(
function_type: var_store.fresh(),
closure_type: var_store.fresh(),
return_type: var_store.fresh(),
effect_type: var_store.fresh(),
early_returns: vec![],
name: task_closure_symbol,
captured_symbols,