gmoonscript
August 30, 2021 ยท View on GitHub
Moonscript compiler for the Gopher Lua VM
Very experimental... use with caution. This module provides methods for compiling Moonscript code to Lua from Go or Lua (Gopher-Lua) programs. Additionally this repository contains an amalgamation bundle of the Moonscript Lua library (modified to use only pure-Lua modules) that can be used in Lua or LuaJIT programs without any external dependencies (see examples/pure_example.lua for usage).
See the godoc for documentation...
Installation
go get -v -u github.com/rucuriousyet/gmoonscript
Usage
Example usage from Gopher-Lua:
package main
import (
"github.com/cosmotek/gmoonscript"
lua "github.com/yuin/gopher-lua"
)
func main() {
state := lua.NewState()
state.PreloadModule("moonc", gmoonscript.Loader)
err := state.DoString(`
local moonscript_code = [[
class Thing
name: "unknown"
class Person extends Thing
say_name: => print "Hello, I am #{@name}!"
with Person!
.name = "MoonScript"
\say_name!
]]
local moonc = require("moonc")
lua_code, err = moonc.compile(moonscript_code)
if err ~= nil then
print(err)
else
loadstring(lua_code)()
end
`)
if err != nil {
panic(err)
}
}
Example usage from Go
package main
import lua "github.com/yuin/gopher-lua"
import "github.com/cosmotek/gmoonscript"
func main() {
state := lua.NewState()
moonCode := `
class Thing
name: "unknown"
class Person extends Thing
say_name: => print "Hello, I am #{@name}!"
with Person!
.name = "MoonScript"
\say_name!
`
luaCode, err := gmoonscript.Compile(state, moonCode)
if err != nil {
panic(err)
}
err = state.DoString(luaCode)
if err != nil {
panic(err)
}
}