From cc507f3abde046575eaedf7e56fb5e48a60923cf Mon Sep 17 00:00:00 2001 From: Ayaz Hafiz Date: Sun, 24 Apr 2022 14:51:24 -0400 Subject: [PATCH] Revert "Mark introduced variables" This reverts commit 02038ea8bf525021f05061e4296749b01a4b9346. --- compiler/can/src/annotation.rs | 2 +- compiler/can/src/effect_module.rs | 76 ++++++++++--------------------- 2 files changed, 26 insertions(+), 52 deletions(-) diff --git a/compiler/can/src/annotation.rs b/compiler/can/src/annotation.rs index f24742a784..b6bdff3e87 100644 --- a/compiler/can/src/annotation.rs +++ b/compiler/can/src/annotation.rs @@ -125,7 +125,7 @@ impl IntroducedVariables { self.inferred.push(var); } - pub fn insert_lambda_set(&mut self, var: Variable) { + fn insert_lambda_set(&mut self, var: Variable) { self.debug_assert_not_already_present(var); self.lambda_sets.push(var); } diff --git a/compiler/can/src/effect_module.rs b/compiler/can/src/effect_module.rs index 5d673ace45..a9fb43e0b7 100644 --- a/compiler/can/src/effect_module.rs +++ b/compiler/can/src/effect_module.rs @@ -167,13 +167,11 @@ fn build_effect_always( }) }; - let mut introduced_variables = IntroducedVariables::default(); - // \value -> $Effect \{} -> value let (function_var, always_closure) = { // `$Effect \{} -> value` let (specialized_def_type, type_arguments, lambda_set_variables) = - build_fresh_opaque_variables(var_store, &mut introduced_variables); + build_fresh_opaque_variables(var_store); let body = Expr::OpaqueRef { opaque_var: var_store.fresh(), name: effect_symbol, @@ -204,6 +202,8 @@ fn build_effect_always( (function_var, closure) }; + let mut introduced_variables = IntroducedVariables::default(); + let signature = { // Effect.always : a -> Effect a let var_a = var_store.fresh(); @@ -327,8 +327,6 @@ fn build_effect_map( .unwrap() }; - let mut introduced_variables = IntroducedVariables::default(); - // \{} -> mapper (thunk {}) let inner_closure = { let arguments = vec![( @@ -354,7 +352,7 @@ fn build_effect_map( // \$Effect thunk, mapper let (specialized_def_type, type_arguments, lambda_set_variables) = - build_fresh_opaque_variables(var_store, &mut introduced_variables); + build_fresh_opaque_variables(var_store); let arguments = vec![ ( var_store.fresh(), @@ -378,7 +376,7 @@ fn build_effect_map( // `$Effect \{} -> (mapper (thunk {}))` let (specialized_def_type, type_arguments, lambda_set_variables) = - build_fresh_opaque_variables(var_store, &mut introduced_variables); + build_fresh_opaque_variables(var_store); let body = Expr::OpaqueRef { opaque_var: var_store.fresh(), name: effect_symbol, @@ -401,6 +399,8 @@ fn build_effect_map( loc_body: Box::new(Loc::at_zero(body)), }); + let mut introduced_variables = IntroducedVariables::default(); + let signature = { // Effect.map : Effect a, (a -> b) -> Effect b let var_a = var_store.fresh(); @@ -534,10 +534,8 @@ fn build_effect_after( Expr::Call(Box::new(boxed), arguments, CalledVia::Space) }; - let mut introduced_variables = IntroducedVariables::default(); - let (specialized_def_type, type_arguments, lambda_set_variables) = - build_fresh_opaque_variables(var_store, &mut introduced_variables); + build_fresh_opaque_variables(var_store); let arguments = vec![ ( @@ -573,6 +571,8 @@ fn build_effect_after( loc_body: Box::new(Loc::at_zero(to_effect_call)), }); + let mut introduced_variables = IntroducedVariables::default(); + let signature = { let var_a = var_store.fresh(); let var_b = var_store.fresh(); @@ -643,7 +643,6 @@ fn wrap_in_effect_thunk( closure_name: Symbol, captured_symbols: Vec, var_store: &mut VarStore, - introduced_variables: &mut IntroducedVariables, ) -> Expr { let captured_symbols: Vec<_> = captured_symbols .into_iter() @@ -673,7 +672,7 @@ fn wrap_in_effect_thunk( // `$Effect \{} -> value` let (specialized_def_type, type_arguments, lambda_set_variables) = - build_fresh_opaque_variables(var_store, introduced_variables); + build_fresh_opaque_variables(var_store); Expr::OpaqueRef { opaque_var: var_store.fresh(), name: effect_symbol, @@ -690,14 +689,13 @@ fn force_effect( effect_symbol: Symbol, thunk_symbol: Symbol, var_store: &mut VarStore, - introduced_variables: &mut IntroducedVariables, ) -> Expr { let whole_var = var_store.fresh(); let thunk_var = var_store.fresh(); let (specialized_def_type, type_arguments, lambda_set_variables) = - build_fresh_opaque_variables(var_store, introduced_variables); + build_fresh_opaque_variables(var_store); let pattern = Pattern::UnwrappedOpaque { whole_var, opaque: effect_symbol, @@ -813,17 +811,8 @@ fn build_effect_forever( .unwrap() }; - let mut introduced_variables = IntroducedVariables::default(); - - let body = build_effect_forever_body( - env, - scope, - effect_symbol, - forever_symbol, - effect, - var_store, - &mut introduced_variables, - ); + let body = + build_effect_forever_body(env, scope, effect_symbol, forever_symbol, effect, var_store); let arguments = vec![(var_store.fresh(), Loc::at_zero(Pattern::Identifier(effect)))]; @@ -840,6 +829,8 @@ fn build_effect_forever( loc_body: Box::new(Loc::at_zero(body)), }); + let mut introduced_variables = IntroducedVariables::default(); + let signature = { let var_a = var_store.fresh(); let var_b = var_store.fresh(); @@ -903,7 +894,6 @@ fn build_effect_forever_body( forever_symbol: Symbol, effect: Symbol, var_store: &mut VarStore, - introduced_variables: &mut IntroducedVariables, ) -> Expr { let closure_name = { scope @@ -923,7 +913,6 @@ fn build_effect_forever_body( forever_symbol, effect, var_store, - introduced_variables, ); let captured_symbols = vec![effect]; @@ -933,7 +922,6 @@ fn build_effect_forever_body( closure_name, captured_symbols, var_store, - introduced_variables, ) } @@ -944,7 +932,6 @@ fn build_effect_forever_inner_body( forever_symbol: Symbol, effect: Symbol, var_store: &mut VarStore, - introduced_variables: &mut IntroducedVariables, ) -> Expr { let thunk1_symbol = { scope @@ -975,7 +962,7 @@ fn build_effect_forever_inner_body( let thunk_var = var_store.fresh(); let (specialized_def_type, type_arguments, lambda_set_variables) = - build_fresh_opaque_variables(var_store, introduced_variables); + build_fresh_opaque_variables(var_store); let pattern = Pattern::UnwrappedOpaque { whole_var, opaque: effect_symbol, @@ -1043,7 +1030,6 @@ fn build_effect_forever_inner_body( effect_symbol, thunk2_symbol, var_store, - introduced_variables, )); Expr::LetNonRec( @@ -1067,8 +1053,6 @@ fn build_effect_loop( let state_symbol = new_symbol!(scope, env, "state"); let step_symbol = new_symbol!(scope, env, "step"); - let mut introduced_variables = IntroducedVariables::default(); - let body = build_effect_loop_body( env, scope, @@ -1077,7 +1061,6 @@ fn build_effect_loop( state_symbol, step_symbol, var_store, - &mut introduced_variables, ); let arguments = vec![ @@ -1104,6 +1087,8 @@ fn build_effect_loop( loc_body: Box::new(Loc::at_zero(body)), }); + let mut introduced_variables = IntroducedVariables::default(); + let signature = { let var_a = var_store.fresh(); let var_b = var_store.fresh(); @@ -1202,7 +1187,6 @@ fn build_effect_loop_body( state_symbol: Symbol, step_symbol: Symbol, var_store: &mut VarStore, - introduced_variables: &mut IntroducedVariables, ) -> Expr { let closure_name = { scope @@ -1223,7 +1207,6 @@ fn build_effect_loop_body( state_symbol, step_symbol, var_store, - introduced_variables, ); let captured_symbols = vec![state_symbol, step_symbol]; @@ -1233,7 +1216,6 @@ fn build_effect_loop_body( closure_name, captured_symbols, var_store, - introduced_variables, ) } @@ -1267,7 +1249,6 @@ fn build_effect_loop_inner_body( state_symbol: Symbol, step_symbol: Symbol, var_store: &mut VarStore, - introduced_variables: &mut IntroducedVariables, ) -> Expr { let thunk1_symbol = new_symbol!(scope, env, "thunk3"); let thunk2_symbol = new_symbol!(scope, env, "thunk4"); @@ -1282,7 +1263,7 @@ fn build_effect_loop_inner_body( let thunk_var = var_store.fresh(); let (specialized_def_type, type_arguments, lambda_set_variables) = - build_fresh_opaque_variables(var_store, introduced_variables); + build_fresh_opaque_variables(var_store); let pattern = Pattern::UnwrappedOpaque { whole_var, opaque: effect_symbol, @@ -1352,13 +1333,7 @@ fn build_effect_loop_inner_body( // $Effect thunk2 = loop effect // thunk2 {} // ``` - let force_thunk2 = force_effect( - loop_new_state_step, - effect_symbol, - thunk2_symbol, - var_store, - introduced_variables, - ); + let force_thunk2 = force_effect(loop_new_state_step, effect_symbol, thunk2_symbol, var_store); let step_branch = { let step_tag_name = TagName::Global("Step".into()); @@ -1602,7 +1577,7 @@ fn build_effect_opaque( introduced_variables: &mut IntroducedVariables, ) -> Type { let closure_var = var_store.fresh(); - introduced_variables.insert_lambda_set(closure_var); + introduced_variables.insert_wildcard(Loc::at_zero(closure_var)); let actual = Type::Function( vec![Type::EmptyRec], @@ -1621,14 +1596,13 @@ fn build_effect_opaque( fn build_fresh_opaque_variables( var_store: &mut VarStore, - introduced_variables: &mut IntroducedVariables, ) -> (Box, Vec<(Lowercase, Type)>, Vec) { - let a_var = var_store.fresh(); let closure_var = var_store.fresh(); - introduced_variables.insert_named("a".into(), Loc::at_zero(a_var)); - introduced_variables.insert_lambda_set(closure_var); + // NB: if there are bugs, check whether not introducing variables is a problem! + // introduced_variables.insert_wildcard(Loc::at_zero(closure_var)); + let a_var = var_store.fresh(); let actual = Type::Function( vec![Type::EmptyRec], Box::new(Type::Variable(closure_var)),