diff options
Diffstat (limited to 'internal/rpn/operator_registry.go')
| -rw-r--r-- | internal/rpn/operator_registry.go | 16 |
1 files changed, 15 insertions, 1 deletions
diff --git a/internal/rpn/operator_registry.go b/internal/rpn/operator_registry.go index f2ea64f..9f8e9c8 100644 --- a/internal/rpn/operator_registry.go +++ b/internal/rpn/operator_registry.go @@ -54,7 +54,21 @@ func NewOperatorRegistry(op Operator) *OperatorRegistry { registry.registerStandardOperator("swap", func(stack *Stack) error { return op.Swap(stack) }) registry.registerStandardOperator("pop", func(stack *Stack) error { return op.Pop(stack) }) registry.registerStandardOperator("d", func(stack *Stack) error { - return fmt.Errorf("'d' command not supported as standalone token") + val, err := popStack(stack, "d") + if err != nil { + return err + } + // Extract variable name from the value + var name string + switch v := val.(type) { + case *Symbol: + name = v.Name() + case *StringNum: + name = v.String() + default: + return fmt.Errorf("delete expects a variable name, got %T", val) + } + return op.DeleteVariable(name) }) // Commands that return immediately |
