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

Conversation

skasti
Copy link
Contributor

@skasti skasti commented Oct 9, 2024

Small change to allow writing return #5070 instead of return [#5070] and similar.
Still allows the old way of returning only using expressions, but I find this syntax less error-prone.

Also explicitly setting _value to 0 if no value is returned, as I have had some confusion where I get a unexpected _value but _value_returned is 0 😅

@terjeio
Copy link
Contributor

terjeio commented Oct 10, 2024

This is a breaking change? Returning an explicit value with e.g. return [123.456] will no longer work?
I am currently without access to a controller so cannot check.

FYI I am going to add expresssion support to ENDSUB and clearing of _value and _value_returned on CALL since these were not in compliance with the LinuxCNC spec.

@skasti
Copy link
Contributor Author

skasti commented Oct 11, 2024

This is a breaking change? Returning an explicit value with e.g. return [123.456] will no longer work? I am currently without access to a controller so cannot check.

No, it just means you can use any of:

return 1
return [1]
return #5070
return [#<something>+10]
etc

FYI I am going to add expresssion support to ENDSUB and clearing of _value and _value_returned on CALL since these were not in compliance with the LinuxCNC spec.

I don't think I understand. Will read again tomorrow and see if brain is braining :P

@skasti
Copy link
Contributor Author

skasti commented Nov 10, 2024

@terjeio Do you think this can get merged? I can't see that it is breaking anything from using it for a while 🤔

@terjeio
Copy link
Contributor

terjeio commented Nov 10, 2024

I am a bit hesitant to add this as it breaks compatibility with LinuxCNC and is not a neccessary change. I'll come back to it a bit later.

@skasti
Copy link
Contributor Author

skasti commented Nov 10, 2024

I don't see how this breaks compatibility with anything? it just extends the current mode of operation so that you do not need to encapsulate your return value with []

@@ -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 😅

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

Successfully merging this pull request may close these issues.

2 participants