diff options
| author | Paul Buetow <paul@buetow.org> | 2026-05-24 18:30:49 +0300 |
|---|---|---|
| committer | Paul Buetow <paul@buetow.org> | 2026-05-24 18:30:49 +0300 |
| commit | 8c3033c25cbb016f9cc2cf8220d2f28030401ce2 (patch) | |
| tree | deb79da58ed945918eacf67f0afff0746ddd827c | |
| parent | ddef6c380732097bf7813af6ee6e181877c80b56 (diff) | |
fix(rpn): extract setVariableResult helper for assignment paths (task bk)
| -rw-r--r-- | internal/rpn/rpn_parse.go | 36 |
1 files changed, 24 insertions, 12 deletions
diff --git a/internal/rpn/rpn_parse.go b/internal/rpn/rpn_parse.go index 2c37d3a..de9fce9 100644 --- a/internal/rpn/rpn_parse.go +++ b/internal/rpn/rpn_parse.go @@ -44,14 +44,23 @@ func tryAssignment(name, valueStr string, r *RPN, input, after string) (string, } varName := extractVariableName(name) - if err := r.vars.SetVariable(varName, val); err != nil { + result, err := r.setVariableResult(varName, val) + if err != nil { return "", false, err } if after == "" { - return fmt.Sprintf("%s = %.10g", varName, val), true, nil + return result, true, nil + } + evalResult, err := r.evaluate(input, strings.Fields(after)) + return evalResult, true, err +} + +// setVariableResult sets a variable and returns the formatted result string. +func (r *RPN) setVariableResult(name string, value float64) (string, error) { + if err := r.vars.SetVariable(name, value); err != nil { + return "", err } - result, err := r.evaluate(input, strings.Fields(after)) - return result, true, err + return fmt.Sprintf("%s = %.10g", name, value), nil } // handleAssignRight handles the := operator (right assignment). @@ -92,10 +101,11 @@ func handleStandardAssign(input string, r *RPN) (string, bool, error) { if err != nil { return "", false, nil } - if err := r.vars.SetVariable(name, val); err != nil { + result, err := r.setVariableResult(name, val) + if err != nil { return "", false, err } - return fmt.Sprintf("%s = %.10g", name, val), true, nil + return result, true, nil } // Handle assignment with expression: "name value = expression..." @@ -110,15 +120,16 @@ func handleStandardAssign(input string, r *RPN) (string, bool, error) { if err != nil { return "", false, nil } - if err := r.vars.SetVariable(name, val); err != nil { + result, err := r.setVariableResult(name, val) + if err != nil { return "", false, err } if len(afterTokens) == 0 { - return fmt.Sprintf("%s = %.10g", name, val), true, nil + return result, true, nil } - result, err := r.evaluate(input, afterTokens) - return result, true, err + evalResult, err := r.evaluate(input, afterTokens) + return evalResult, true, err } return "", false, nil @@ -595,10 +606,11 @@ func (r *RPN) handleInlineAssignment(stack *Stack, name, op string) (string, boo if err != nil { return "", false, fmt.Errorf("failed to get float64 value for variable %q: %w", name, err) } - if err := r.vars.SetVariable(name, valF); err != nil { + result, err := r.setVariableResult(name, valF) + if err != nil { return "", false, fmt.Errorf("failed to set variable %q: %w", name, err) } - return fmt.Sprintf("%s = %.10g", name, valF), true, nil + return result, true, nil } // handleMetricPrefix handles metric binary/decimal prefix mode switching. |
