diff options
| -rw-r--r-- | calc.go | 11 | ||||
| -rw-r--r-- | ui.go | 2 |
2 files changed, 13 insertions, 0 deletions
@@ -40,6 +40,17 @@ func (c *Calculator) swap() { } } +// dup duplicates the value at the bottom of the stack. +func (c *Calculator) dup() { + v, err := c.stack.pop() + if err != nil { + // empty + return + } + c.stack.push(v) + c.stack.push(v) +} + // negate negates the number in the buffer, if any; or the bottom number on the // stack, if any. func (c *Calculator) negate() { @@ -64,6 +64,8 @@ func (ui UI) Update(msg tea.Msg) (tea.Model, tea.Cmd) { fn(&ui.calc) } else if v, err := ui.calc.parseBuffer(); err == nil { ui.calc.stack.push(v) + } else if ui.calc.buf == "" { + ui.calc.dup() } ui.calc.buf = "" default: |