Skip to content
This repository was archived by the owner on Oct 3, 2021. It is now read-only.

Commit d31d8ac

Browse files
committed
feat: allow running executable files
1 parent a354cca commit d31d8ac

1 file changed

Lines changed: 40 additions & 1 deletion

File tree

main.go

Lines changed: 40 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,10 +1,49 @@
11
package main
22

33
import (
4+
"bytes"
5+
"encoding/gob"
6+
"fmt"
7+
"github.com/looplanguage/compiler/compiler"
48
"github.com/looplanguage/lpvm/repl"
9+
"github.com/looplanguage/lpvm/vm"
10+
"io/ioutil"
11+
"log"
512
"os"
613
)
714

815
func main() {
9-
repl.Start(os.Stdin, os.Stdout)
16+
if len(os.Args) != 2 {
17+
repl.Start(os.Stdin, os.Stdout)
18+
return
19+
}
20+
21+
compiler.RegisterGobTypes()
22+
bts, err := ioutil.ReadFile(os.Args[1])
23+
24+
if err != nil {
25+
log.Fatalln(err)
26+
}
27+
28+
var constantBytes bytes.Buffer
29+
constantBytes.Write(bts)
30+
31+
dec := gob.NewDecoder(&constantBytes)
32+
var Bytecode compiler.Bytecode
33+
err = dec.Decode(&Bytecode)
34+
35+
if err != nil {
36+
log.Fatal(err)
37+
}
38+
39+
machine := vm.Create(&Bytecode)
40+
err = machine.Run()
41+
42+
if err != nil {
43+
log.Fatal(err)
44+
}
45+
46+
if machine.LastPoppedStackElem() != nil {
47+
fmt.Println(machine.LastPoppedStackElem().Inspect())
48+
}
1049
}

0 commit comments

Comments
 (0)