Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Allow return without expression #602

Open
wants to merge 3 commits into
base: master
Choose a base branch
from
Open
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
6 changes: 4 additions & 2 deletions ngc_flowctrl.c
Original file line number Diff line number Diff line change
Expand Up @@ -689,11 +689,13 @@ status_code_t ngc_flowctrl (uint32_t o_label, char *line, uint_fast8_t *pos, boo
else if((g65_return = !!grbl.on_macro_return))
ngc_flowctrl_unwind_stack(stack[stack_idx].file);

if(ngc_eval_expression(line, pos, &value) == Status_OK) {
if(ngc_read_real_value(line, pos, &value) == Status_OK) {
Copy link
Contributor Author

@skasti skasti Nov 11, 2024

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

ngc_read_real_value will call ngc_eval_expression if the first character encountered is [, so this should not break compatibility with current usage. It only adds some flexibility 😅

ngc_named_param_set("_value", value);
ngc_named_param_set("_value_returned", 1.0f);
} else
} else {
ngc_named_param_set("_value", 0.0f);
Copy link
Contributor Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

The reason for setting _value to 0 here, is that just setting it when a macro/subroutine starts does not ensure it is 0 when returning if the macro/subroutine also calls other subroutines or macros. In that case you risk "leaking" the returned _value of an internally called macro/subroutine.

If this is also how it works in other gcode dialects, and it is done on purpose as a feature, I will agree that setting it to zero is a breaking change, and I will remove it 😅

ngc_named_param_set("_value_returned", 0.0f);
}

if(g65_return)
grbl.on_macro_return();
Expand Down