@@ -151,6 +151,7 @@ pub enum Expr {
151
151
Box < ( Variable , Loc < Expr > , Variable , Variable ) > ,
152
152
Vec < ( Variable , Loc < Expr > ) > ,
153
153
CalledVia ,
154
+ bool ,
154
155
) ,
155
156
RunLowLevel {
156
157
op : LowLevel ,
@@ -315,7 +316,7 @@ impl Expr {
315
316
Self :: If { .. } => Category :: If ,
316
317
Self :: LetRec ( _, expr, _) => expr. value . category ( ) ,
317
318
Self :: LetNonRec ( _, expr) => expr. value . category ( ) ,
318
- & Self :: Call ( _, _, called_via) => Category :: CallResult ( None , called_via) ,
319
+ & Self :: Call ( _, _, called_via, _ ) => Category :: CallResult ( None , called_via) ,
319
320
& Self :: RunLowLevel { op, .. } => Category :: LowLevelOpResult ( op) ,
320
321
Self :: ForeignCall { .. } => Category :: ForeignCall ,
321
322
Self :: Closure ( ..) => Category :: Lambda ,
@@ -970,6 +971,7 @@ pub fn canonicalize_expr<'a>(
970
971
) ) ,
971
972
args,
972
973
* application_style,
974
+ true ,
973
975
)
974
976
}
975
977
RuntimeError ( _) => {
@@ -1009,6 +1011,7 @@ pub fn canonicalize_expr<'a>(
1009
1011
) ) ,
1010
1012
args,
1011
1013
* application_style,
1014
+ false ,
1012
1015
)
1013
1016
}
1014
1017
} ;
@@ -2292,7 +2295,7 @@ pub fn inline_calls(var_store: &mut VarStore, expr: Expr) -> Expr {
2292
2295
) ;
2293
2296
}
2294
2297
2295
- Call ( boxed_tuple, args, called_via) => {
2298
+ Call ( boxed_tuple, args, called_via, tail_call ) => {
2296
2299
let ( fn_var, loc_expr, closure_var, expr_var) = * boxed_tuple;
2297
2300
2298
2301
match loc_expr. value {
@@ -2367,6 +2370,7 @@ pub fn inline_calls(var_store: &mut VarStore, expr: Expr) -> Expr {
2367
2370
Box :: new ( ( fn_var, loc_expr, closure_var, expr_var) ) ,
2368
2371
args,
2369
2372
called_via,
2373
+ tail_call,
2370
2374
)
2371
2375
}
2372
2376
}
@@ -2663,6 +2667,7 @@ fn desugar_str_segments(var_store: &mut VarStore, segments: Vec<StrSegment>) ->
2663
2667
( var_store. fresh( ) , loc_expr) ,
2664
2668
] ,
2665
2669
CalledVia :: StringInterpolation ,
2670
+ false ,
2666
2671
) ;
2667
2672
2668
2673
loc_expr = Loc :: at ( Region :: zero ( ) , expr) ;
@@ -3177,7 +3182,7 @@ pub(crate) fn get_lookup_symbols(expr: &Expr) -> Vec<ExpectLookup> {
3177
3182
stack. push ( & def. loc_expr . value ) ;
3178
3183
stack. push ( & expr. value ) ;
3179
3184
}
3180
- Expr :: Call ( boxed_expr, args, _called_via) => {
3185
+ Expr :: Call ( boxed_expr, args, _called_via, tail_call ) => {
3181
3186
stack. reserve ( 1 + args. len ( ) ) ;
3182
3187
3183
3188
match & boxed_expr. 1 . value {
0 commit comments