@@ -1,12 +1,10 @@
1−package main
1+package utils
5 "io/ioutil"
5 "io/ioutil"
7− "path/filepath"
7+ "github.com/replit/prybar/linenoise"
12type PluginBase interface {
10type PluginBase interface {
@@ -45,64 +43,20 @@ type PluginSetPrompts interface {
45 SetPrompts(ps1, ps2 string)
43 SetPrompts(ps1, ps2 string)
48−type Langauge struct {
46+type Language struct {
49 ptr PluginBase
47 ptr PluginBase
52−func finalizer(f *Langauge) {
53− fmt.Println("a finalizer has run.")
56−func GetLanguage(name string) *Langauge {
58− exe, err := os.Executable()
60− o, err := os.Readlink(exe)
68− base = filepath.Dir(exe)
69− plug, err := plugin.Open(base + "/plugins/" + name + ".so")
76− sym, err := plug.Lookup("Instance")
83− lang, ok := sym.(PluginBase)
85− fmt.Println("module did not export Language interface")
93− runtime.SetFinalizer(result, finalizer)
97−func (lang Langauge) Version() string {
51+func (lang Language) Version() string {
98 return lang.ptr.Version()
52 return lang.ptr.Version()
101−func (lang Langauge) Eval(code string) {
55+func (lang Language) Eval(code string) {
102 lang.ptr.(PluginEval).Eval(code)
56 lang.ptr.(PluginEval).Eval(code)
105−func (lang Langauge) EvalAndTryToPrint(code string) {
59+func (lang Language) EvalAndTryToPrint(code string) {
106 ee, ok := lang.ptr.(PluginEvalExpression)
60 ee, ok := lang.ptr.(PluginEvalExpression)
108 fmt.Println(ee.EvalExpression(code))
62 fmt.Println(ee.EvalExpression(code))
@@ -111,7 +65,7 @@ func (lang Langauge) EvalAndTryToPrint(code string) {
114−func (lang Langauge) REPLLikeEval(code string) {
68+func (lang Language) REPLLikeEval(code string) {
115 rle, ok := lang.ptr.(PluginREPLLikeEval)
69 rle, ok := lang.ptr.(PluginREPLLikeEval)
117 rle.REPLLikeEval(code)
71 rle.REPLLikeEval(code)
@@ -126,7 +80,7 @@ func (lang Langauge) REPLLikeEval(code string) {
129−func (lang Langauge) EvalFile(file string, args []string) {
83+func (lang Language) EvalFile(file string, args []string) {
130 pef, ok := lang.ptr.(PluginEvalFile)
84 pef, ok := lang.ptr.(PluginEvalFile)
132 pef.EvalFile(file, args)
86 pef.EvalFile(file, args)
@@ -139,7 +93,7 @@ func (lang Langauge) EvalFile(file string, args []string) {
142−func (lang Langauge) REPL() {
96+func (lang Language) REPL() {
143 repl, ok := lang.ptr.(PluginREPL)
97 repl, ok := lang.ptr.(PluginREPL)
145 repl.REPL()
99 repl.REPL()
@@ -148,18 +102,18 @@ func (lang Langauge) REPL() {
151−func (lang Langauge) InternalREPL() {
105+func (lang Language) InternalREPL() {
153− line, err := Linenoise(ps1)
107+ line, err := linenoise.Linenoise(lang.ps1)
154 if err != nil {
108 if err != nil {
157 lang.REPLLikeEval(line)
111 lang.REPLLikeEval(line)
158− LinenoiseHistoryAdd(line)
112+ linenoise.LinenoiseHistoryAdd(line)
162−func (lang Langauge) SetPrompts(ps1, ps2 string) {
116+func (lang Language) SetPrompts(ps1, ps2 string) {
163 ee, ok := lang.ptr.(PluginSetPrompts)
117 ee, ok := lang.ptr.(PluginSetPrompts)
165 ee.SetPrompts(ps1, ps2)
119 ee.SetPrompts(ps1, ps2)