aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--frontend/transform.icl13
1 files changed, 7 insertions, 6 deletions
diff --git a/frontend/transform.icl b/frontend/transform.icl
index 80a6cdd..d6972ae 100644
--- a/frontend/transform.icl
+++ b/frontend/transform.icl
@@ -714,13 +714,13 @@ expandMacrosInBody fi_calls {cb_args,cb_rhs} fun_defs mod_index modules es=:{es_
# (prev_calls, fun_defs, es_symbol_table) = addFunctionCallsToSymbolTable fi_calls fun_defs es_symbol_table
([rhs:rhss], fun_defs, modules, (all_calls, es)) = expand cb_rhs fun_defs mod_index modules (prev_calls, { es & es_symbol_table = es_symbol_table })
(fun_defs, es_symbol_table) = removeFunctionCallsFromSymbolTable all_calls fun_defs es.es_symbol_table
- (merge_rhs, es_var_heap, es_symbol_heap, es_error) = mergeCases rhs rhss es.es_var_heap es.es_symbol_heap es.es_error
- (merge_rhs, new_args, local_vars, {cos_error, cos_var_heap, cos_symbol_heap}) = determineVariablesAndRefCounts cb_args merge_rhs
+ (merged_rhs, es_var_heap, es_symbol_heap, es_error) = mergeCases rhs rhss es.es_var_heap es.es_symbol_heap es.es_error
+ (new_rhs, new_args, local_vars, {cos_error, cos_var_heap, cos_symbol_heap}) = determineVariablesAndRefCounts cb_args merged_rhs
{ cos_error = es_error, cos_var_heap = es_var_heap, cos_symbol_heap = es_symbol_heap }
- = (new_args, merge_rhs, local_vars, all_calls, fun_defs, modules,
+ = (new_args, new_rhs, local_vars, all_calls, fun_defs, modules,
{ es & es_error = cos_error, es_var_heap = cos_var_heap, es_symbol_heap = cos_symbol_heap,
es_symbol_table = es_symbol_table })
-// ---> (cb_args, cb_rhs, new_args, local_vars, merge_rhs)
+// ---> ("expandMacrosInBody", (cb_args, cb_rhs, '\n'), ("merged_rhs", merged_rhs, '\n'), (new_args, new_rhs, '\n'))
cContainsFreeVars :== True
cContainsNoFreeVars :== False
@@ -1371,11 +1371,12 @@ where
instance collectVariables BoundVar
where
- collectVariables var=:{var_name,var_info_ptr} free_vars cos=:{cos_var_heap}
+ collectVariables var=:{var_name,var_info_ptr,var_expr_ptr} free_vars cos=:{cos_var_heap}
#! var_info = sreadPtr var_info_ptr cos_var_heap
= case var_info of
VI_Alias alias
- -> collectVariables alias free_vars cos
+ # (original, free_vars, cos) = collectVariables alias free_vars cos
+ -> ({ original & var_expr_ptr = var_expr_ptr }, free_vars, cos)
VI_Count count is_global
| count > 0 || is_global
-> (var, free_vars, { cos & cos_var_heap = writePtr var_info_ptr (VI_Count (inc count) is_global) cos.cos_var_heap })