diff --git a/bin/elara-linux-amd64 b/bin/elara-linux-amd64 new file mode 100755 index 0000000..afd7c96 Binary files /dev/null and b/bin/elara-linux-amd64 differ diff --git a/bin/elara-windows-amd64.exe b/bin/elara-windows-amd64.exe new file mode 100755 index 0000000..2a7cb2f Binary files /dev/null and b/bin/elara-windows-amd64.exe differ diff --git a/bin/elara.el b/bin/elara.el new file mode 100644 index 0000000..d0ccb4c --- /dev/null +++ b/bin/elara.el @@ -0,0 +1,15 @@ +namespace examples/main +import elara/std + +struct Test { + String name +} + +extend Test { + let b = 3 + let print-name => print(name) +} + +let test = Test("Test Struct") +test.print-name() +print(test.b) \ No newline at end of file diff --git a/bin/stdlib/base.el b/bin/stdlib/base.el new file mode 100644 index 0000000..ddcda01 --- /dev/null +++ b/bin/stdlib/base.el @@ -0,0 +1,9 @@ +namespace elara/std + +let print = (Any msg) => Unit { + print-raw(msg + "\n") +} + +let print-raw = (Any msg) => { + stdout.write(msg) +} diff --git a/build.sh b/build.sh new file mode 100755 index 0000000..c9537ed --- /dev/null +++ b/build.sh @@ -0,0 +1,14 @@ +echo 'Cleaning Up...' +rm -rf bin/ +mkdir bin +echo 'Moving Standard Library...' +cp -r stdlib bin/ +cp elara.el bin/ + +echo 'Building Windows amd64...' +env GOOS=linux GOARCH=amd64 go build -o bin/elara-linux-amd64 + +echo 'Building Linux amd64...' +env GOOS=windows GOARCH=amd64 go build -o bin/elara-windows-amd64.exe + +echo 'Done!' diff --git a/elara.go b/elara.go index b4e5e5b..d164fde 100644 --- a/elara.go +++ b/elara.go @@ -38,24 +38,37 @@ func main() { func loadStdLib() { goPath := os.Getenv("GOPATH") filePath := path.Join(goPath, "stdlib/") - filepath.Walk(filePath, func(path string, info os.FileInfo, err error) error { + defer func() { + err := recover() + if err == nil { + return + } + //Maybe it's not present in GOPATH, let's try in working directory + cur, err := os.Executable() if err != nil { panic(err) } - if info.IsDir() { - return nil - } - _, content := loadFile(path) - base.Execute(&path, string(content), false) + filePath = path.Join(filepath.Dir(cur), "stdlib/") + filepath.Walk(filePath, loadWalkedFile) + }() + filepath.Walk(filePath, loadWalkedFile) +} + +func loadWalkedFile(path string, info os.FileInfo, err error) error { + if err != nil { + panic(err) + } + if info.IsDir() { return nil - }) + } + _, content := loadFile(path) + base.Execute(&path, string(content), false) + return nil } func loadFile(fileName string) (string, []byte) { - goPath := os.Getenv("GOPATH") - filePath := path.Join(goPath, fileName) - input, err := ioutil.ReadFile(filePath) + input, err := ioutil.ReadFile(fileName) if err != nil { panic(err) diff --git a/parser/parser.go b/parser/parser.go index a88c609..c2ac852 100644 --- a/parser/parser.go +++ b/parser/parser.go @@ -1,6 +1,5 @@ package parser -import "C" import ( "fmt" "github.com/ElaraLang/elara/lexer"