diff --git a/src/mir/join_ir/frontend/ast_lowerer/loop_patterns/continue_pattern.rs b/src/mir/join_ir/frontend/ast_lowerer/loop_patterns/continue_pattern.rs index 533d208d..b234c16a 100644 --- a/src/mir/join_ir/frontend/ast_lowerer/loop_patterns/continue_pattern.rs +++ b/src/mir/join_ir/frontend/ast_lowerer/loop_patterns/continue_pattern.rs @@ -182,7 +182,12 @@ fn create_loop_step_function_continue( .iter() .find(|stmt| stmt["type"].as_str() == Some("Local") && stmt["name"].as_str() == Some("i")) .ok_or_else(|| LoweringError::InvalidLoopBody { - message: "Continue pattern must have i increment as first Local".to_string(), + message: format!( + "Continue pattern validation failed: missing 'i' increment.\n\ + Expected: First statement in loop body must be 'local i = i + K' where K is a constant.\n\ + Found: Loop body does not contain 'local i = ...' statement.\n\ + Hint: Add 'i = i + 1' as the first statement inside the loop body." + ), })?; let i_expr = &first_local["expr"]; @@ -226,13 +231,32 @@ fn create_loop_step_function_continue( .iter() .find(|stmt| stmt["type"].as_str() == Some("Local") && stmt["name"].as_str() == Some("i")) { - let base_k = extract_add_i_const(i_expr).ok_or_else(|| LoweringError::InvalidLoopBody { - message: "Continue pattern requires i update of form (i + const)".to_string(), + let base_k = extract_add_i_const(i_expr).ok_or_else(|| { + let expr_debug = serde_json::to_string(i_expr) + .unwrap_or_else(|_| "".to_string()); + LoweringError::InvalidLoopBody { + message: format!( + "Continue pattern validation failed: invalid step increment form.\n\ + Expected: i = i + const (e.g., 'i = i + 1', 'i = i + 2').\n\ + Found: {}\n\ + Hint: Change the 'i' update to addition form 'i = i + K' where K is a constant integer.", + expr_debug + ), + } + })?; + let then_k = extract_add_i_const(&then_i_local["expr"]).ok_or_else(|| { + let expr_debug = serde_json::to_string(&then_i_local["expr"]) + .unwrap_or_else(|_| "".to_string()); + LoweringError::InvalidLoopBody { + message: format!( + "Continue pattern validation failed: invalid 'then' branch step increment.\n\ + Expected: In 'if ... {{ continue }}' block, 'i = i + const' (e.g., 'i = i + 2').\n\ + Found: {}\n\ + Hint: Ensure the continue block updates 'i' using addition form 'i = i + K'.", + expr_debug + ), + } })?; - let then_k = - extract_add_i_const(&then_i_local["expr"]).ok_or_else(|| LoweringError::InvalidLoopBody { - message: "Continue pattern requires then i update of form (i + const)".to_string(), - })?; let delta = then_k - base_k; if delta != 0 { let delta_const = step_ctx.alloc_var(); @@ -261,7 +285,12 @@ fn create_loop_step_function_continue( .iter() .find(|stmt| stmt["type"].as_str() == Some("Local") && stmt["name"].as_str() == Some("acc")) .ok_or_else(|| LoweringError::InvalidLoopBody { - message: "Continue pattern must have acc update Local".to_string(), + message: format!( + "Continue pattern validation failed: missing accumulator update.\n\ + Expected: Loop body must contain 'local acc = ...' statement.\n\ + Found: No 'acc' update found in loop body.\n\ + Hint: Add 'acc = acc + ' or similar accumulator update." + ), })?; let acc_expr = &acc_update_local["expr"];