@@ -1,12 +1,8 @@
1−package main
1+package utils
22
33import (
44 "fmt"
55 "io/ioutil"
6− "os"
7− "path/filepath"
8− "plugin"
9− "runtime"
106
117 "github.com/replit/prybar/linenoise"
128)
@@ -47,64 +43,20 @@ type PluginSetPrompts interface {
4743 SetPrompts(ps1, ps2 string)
4844}
4945
50−type Langauge struct {
46+type Language struct {
5147 ptr PluginBase
48+ ps1 string
5249}
5350
54−func finalizer(f *Langauge) {
55− fmt.Println("a finalizer has run.")
56−}
57−
58−func GetLanguage(name string) *Langauge {
59− base := "."
60− exe, err := os.Executable()
61− for {
62− o, err := os.Readlink(exe)
63− if err == nil {
64− exe = o
65− } else {
66− break
67− }
68− }
69−
70− base = filepath.Dir(exe)
71− plug, err := plugin.Open(base + "/plugins/" + name + ".so")
72−
73− if err != nil {
74− fmt.Println(err)
75− os.Exit(1)
76− }
77−
78− sym, err := plug.Lookup("Instance")
79− if err != nil {
80− fmt.Println(err)
81− os.Exit(1)
82− }
83−
84− var lang PluginBase
85− lang, ok := sym.(PluginBase)
86− if !ok {
87− fmt.Println("module did not export Language interface")
88− os.Exit(1)
89− }
90−
91− result := &Langauge{
92− ptr: lang,
93− }
94− lang.Open()
95− runtime.SetFinalizer(result, finalizer)
96− return result
97−}
98−
99−func (lang Langauge) Version() string {
51+func (lang Language) Version() string {
10052 return lang.ptr.Version()
10153}
10254
103−func (lang Langauge) Eval(code string) {
55+func (lang Language) Eval(code string) {
10456 lang.ptr.(PluginEval).Eval(code)
10557}
10658
107−func (lang Langauge) EvalAndTryToPrint(code string) {
59+func (lang Language) EvalAndTryToPrint(code string) {
10860 ee, ok := lang.ptr.(PluginEvalExpression)
10961 if ok {
11062 fmt.Println(ee.EvalExpression(code))
@@ -113,7 +65,7 @@ func (lang Langauge) EvalAndTryToPrint(code string) {
11365 }
11466}
11567
116−func (lang Langauge) REPLLikeEval(code string) {
68+func (lang Language) REPLLikeEval(code string) {
11769 rle, ok := lang.ptr.(PluginREPLLikeEval)
11870 if ok {
11971 rle.REPLLikeEval(code)
@@ -128,7 +80,7 @@ func (lang Langauge) REPLLikeEval(code string) {
12880 }
12981}
13082
131−func (lang Langauge) EvalFile(file string, args []string) {
83+func (lang Language) EvalFile(file string, args []string) {
13284 pef, ok := lang.ptr.(PluginEvalFile)
13385 if ok {
13486 pef.EvalFile(file, args)
@@ -141,7 +93,7 @@ func (lang Langauge) EvalFile(file string, args []string) {
14193 }
14294}
14395
144−func (lang Langauge) REPL() {
96+func (lang Language) REPL() {
14597 repl, ok := lang.ptr.(PluginREPL)
14698 if ok {
14799 repl.REPL()
@@ -150,9 +102,9 @@ func (lang Langauge) REPL() {
150102 }
151103}
152104
153−func (lang Langauge) InternalREPL() {
105+func (lang Language) InternalREPL() {
154106 for {
155− line, err := linenoise.Linenoise(ps1)
107+ line, err := linenoise.Linenoise(lang.ps1)
156108 if err != nil {
157109 break
158110 }
@@ -161,7 +113,7 @@ func (lang Langauge) InternalREPL() {
161113 }
162114}
163115
164−func (lang Langauge) SetPrompts(ps1, ps2 string) {
116+func (lang Language) SetPrompts(ps1, ps2 string) {
165117 ee, ok := lang.ptr.(PluginSetPrompts)
166118 if ok {
167119 ee.SetPrompts(ps1, ps2)