diff --git a/golibs/bait/bait.go b/golibs/bait/bait.go index 1db1960f..6f3edf6b 100644 --- a/golibs/bait/bait.go +++ b/golibs/bait/bait.go @@ -213,8 +213,8 @@ func (b *Bait) callRecoverer(event string, handler *Listener, err interface{}) { func (b *Bait) Loader(rtm *moonlight.Runtime) moonlight.Value { exports := map[string]moonlight.Export{ + "catch": {b.bcatch, 2, false}, /* - "catch": {b.bcatch, 2, false}, "catchOnce": util.LuaExport{b.bcatchOnce, 2, false}, "throw": util.LuaExport{b.bthrow, 1, true}, "release": util.LuaExport{b.brelease, 2, false}, @@ -261,15 +261,15 @@ bait.catch('hilbish.exit', function() end) #example */ -func (b *Bait) bcatch(mlr *moonlight.Runtime, c *moonlight.GoCont) (moonlight.Cont, error) { +func (b *Bait) bcatch(mlr *moonlight.Runtime) error { name, catcher, err := util.HandleStrCallback(mlr) if err != nil { - return nil, err + return err } b.OnLua(name, catcher) - return c.Next(), nil + return nil } /* diff --git a/moonlight/closure_clua.go b/moonlight/closure_clua.go index 6259c273..190c9308 100644 --- a/moonlight/closure_clua.go +++ b/moonlight/closure_clua.go @@ -2,10 +2,6 @@ package moonlight -import ( - "fmt" -) - type Callable interface { Continuation(*Runtime, Cont) Cont } @@ -16,8 +12,6 @@ type Closure struct { } func (mlr *Runtime) ClosureArg(num int) (*Closure, error) { - fmt.Println("type at ", num, "is", mlr.state.LTypename(num)) - return &Closure{ refIdx: -1, }, nil diff --git a/moonlight/runtime_clua.go b/moonlight/runtime_clua.go index c251cc05..9813381e 100644 --- a/moonlight/runtime_clua.go +++ b/moonlight/runtime_clua.go @@ -4,6 +4,7 @@ package moonlight import ( "fmt" + "os" "github.com/aarzilli/golua/lua" ) @@ -17,9 +18,39 @@ func NewRuntime() *Runtime { L := lua.NewState() L.OpenLibs() - return &Runtime{ + mlr := &Runtime{ state: L, } + + mlr.Extras() + + return mlr +} + +func (mlr *Runtime) Extras() { + mlr.state.GetGlobal("os") + mlr.pushToState(FunctionValue(mlr.GoFunction(setenv))) + mlr.state.SetField(-2, "setenv") +} + +func setenv(mlr *Runtime) error { + if err := mlr.CheckNArgs(2); err != nil { + return err + } + + env, err := mlr.StringArg(0) + if err != nil { + return err + } + + varr, err := mlr.StringArg(1) + if err != nil { + return err + } + + os.Setenv(env, varr) + + return nil } func (mlr *Runtime) PushNext1(v Value) { diff --git a/nature/init.lua b/nature/init.lua index 716c8da2..c900c688 100644 --- a/nature/init.lua +++ b/nature/init.lua @@ -1,7 +1,7 @@ -- Prelude initializes everything else for our shell local _ = require 'succulent' -- Function additions local bait = require 'bait' ---local fs = require 'fs' +local fs = require 'fs' package.path = package.path .. ';' .. hilbish.dataDir .. '/?/init.lua' .. ';' .. hilbish.dataDir .. '/?/?.lua' .. ";" .. hilbish.dataDir .. '/?.lua' @@ -66,6 +66,7 @@ do }) end +--[[ do local startSearchPath = hilbish.userDir.data .. '/hilbish/start/?/init.lua;' .. hilbish.userDir.data .. '/hilbish/start/?.lua' @@ -82,6 +83,7 @@ do package.path = package.path .. ';' .. startSearchPath end +]]-- bait.catch('error', function(event, handler, err) print(string.format('Encountered an error in %s handler\n%s', event, err:sub(8)))