From 4dc8a922c9c802d4a3605d56da9eb62c741da94f Mon Sep 17 00:00:00 2001 From: HAYAMA_Kaoru Date: Tue, 3 Dec 2024 14:28:00 +0900 Subject: [PATCH] Implement `(setenv KEY VAL)` --- global.go | 19 +++++++++++++++++++ main.go | 1 + 2 files changed, 20 insertions(+) diff --git a/global.go b/global.go index 57269db..f253824 100644 --- a/global.go +++ b/global.go @@ -190,3 +190,22 @@ func (g *Global) getenv(ctx context.Context, w *gmnlisp.World, arg gmnlisp.Node) } return gmnlisp.String(value), nil } + +func (g *Global) setenv(ctx context.Context, w *gmnlisp.World, __key, __val gmnlisp.Node) (gmnlisp.Node, error) { + _key, err := gmnlisp.ExpectClass[gmnlisp.String](ctx, w, __key) + if err != nil { + return nil, err + } + key := string(_key) + + if gmnlisp.IsNull(__val) { + return gmnlisp.Null, os.Unsetenv(key) + } + _val, err := gmnlisp.ExpectClass[gmnlisp.String](ctx, w, __val) + if err != nil { + return nil, err + } + val := string(_val) + + return gmnlisp.Null, os.Setenv(key, val) +} diff --git a/main.go b/main.go index 68735c9..7254ffa 100644 --- a/main.go +++ b/main.go @@ -38,6 +38,7 @@ func mains(args []string) error { gmnlisp.NewSymbol("expect*"): gmnlisp.SpecialF(g.expectX), gmnlisp.NewSymbol("expect"): gmnlisp.SpecialF(g.expect), gmnlisp.NewSymbol("getenv"): gmnlisp.Function1(g.getenv), + gmnlisp.NewSymbol("setenv"): gmnlisp.Function2(g.setenv), }) if len(args) <= 0 {