on master help sign in
address comments
commitbe744f24d99143790576059735769c1fe6dd99e1 authorMason Clayton <masongclayton@gmail.com> dateFri 19 Oct 2018, 20:26 (8 years ago) parent5962a8c
11 files changed+59−102
Makefile+1−1 extract.sh+1−1 inject_launch.go+3−1 languages/R/main.go+8−13 languages/lua/main.go+2−10 languages/python2/main.go+13−18 languages/python3/main.go+3−8 languages/ruby/main.go+10−15 languages/spidermonkey/main.go+6−13 languages/tcl/main.go+9−13 utils/utils.go+3−9
Makefile+1−1
@@ -8,7 +8,7 @@ default: $(BINS)
88
99prybar-%: ./languages/$(*) ./utils/* ./linenoise/* ./languages/$(*)/*
1010 cp inject_launch.go ./languages/$(*)/inject_launch.go
11− go build -o prybar-$(*) ./languages/$(*)
11+ CGO_LDFLAGS_ALLOW=".*" go build -o prybar-$(*) ./languages/$(*)
1212 rm ./languages/$(*)/inject_launch.go
1313
1414clean:
extract.sh+1−1
@@ -1,3 +1,3 @@
11#!/bin/sh
22docker build -t prybar .
3−docker run prybar tar -zc prybar plugins > prybar.tar.gz
3+docker run prybar bash -c 'tar -zc prybar-*' > prybar.tar.gz
inject_launch.go+3−1
@@ -3,4 +3,6 @@ package main
33
44import "github.com/replit/prybar/utils"
55
6−func main() { utils.DoCli() }
6+func main() {
7+ utils.DoCli(Instance)
8+}
languages/R/main.go+8−13
@@ -37,36 +37,31 @@ import "C"
3737
3838import (
3939 "unsafe"
40−
41− "github.com/replit/prybar/utils"
42− //"strings"
4340)
4441
45−func init() {
46− utils.Register(&Language{})
47−}
48−
49−type Language struct {
42+type R struct {
5043}
5144
52−func (p Language) Open() {
45+func (p R) Open() {
5346 C.pry_open()
5447}
5548
56−func (p Language) Version() string {
49+func (p R) Version() string {
5750 return C.GoString(C.pry_version())
5851}
5952
60−func (p Language) Eval(code string) {
53+func (p R) Eval(code string) {
6154 ccode := C.CString(code)
6255 defer C.free(unsafe.Pointer(ccode))
6356 C.pry_eval(ccode)
6457}
6558
66−func (p Language) REPL() {
59+func (p R) REPL() {
6760 C.pry_repl()
6861}
6962
70−func (p Language) Close() {
63+func (p R) Close() {
7164 C.Rf_endEmbeddedR(0)
7265}
66+
67+var Instance = R{}
languages/lua/main.go+2−10
@@ -18,16 +18,9 @@ import "C"
1818import (
1919 "strings"
2020 "unsafe"
21−
22− "github.com/replit/prybar/utils"
2321)
2422
25−func init() {
26− utils.Register(&Lua{})
27−}
28−
29−type Lua struct {
30−}
23+type Lua struct{}
3124
3225func (p Lua) Open() {
3326 C.pry_init()
@@ -62,5 +55,4 @@ func (p Lua) Close() {
6255 C.lua_close(C.pry_L)
6356}
6457
65−// exported
66−var Instance Lua
58+var Instance = Lua{}
languages/python2/main.go+13−18
@@ -9,38 +9,31 @@ import "C"
99import (
1010 "strings"
1111 "unsafe"
12−
13− "github.com/replit/prybar/utils"
1412)
1513
16−func init() {
17− utils.Register(&Language{})
18−}
14+type Python struct{}
1915
20−type Language struct {
21−}
22−
23−func (p Language) Open() {
16+func (p Python) Open() {
2417 C.Py_Initialize()
2518}
2619
27−func (p Language) Version() string {
20+func (p Python) Version() string {
2821 return "Python " + C.GoString(C.Py_GetVersion()) + " on " + C.GoString(C.Py_GetPlatform())
2922}
3023
31−func (p Language) Eval(code string) {
24+func (p Python) Eval(code string) {
3225 ccode := C.CString(code)
3326 defer C.free(unsafe.Pointer(ccode))
3427 C.GoString(C.pry_eval(ccode, C.Py_file_input))
3528}
3629
37−func (p Language) EvalExpression(code string) string {
30+func (p Python) EvalExpression(code string) string {
3831 ccode := C.CString(code)
3932 defer C.free(unsafe.Pointer(ccode))
4033 return C.GoString(C.pry_eval(ccode, C.Py_eval_input))
4134}
4235
43−func (p Language) EvalFile(file string, args []string) {
36+func (p Python) EvalFile(file string, args []string) {
4437 handle := C.stdin
4538 cfile := C.CString(file)
4639 defer C.free(unsafe.Pointer(cfile))
@@ -58,19 +51,19 @@ func (p Language) EvalFile(file string, args []string) {
5851 C.pry_eval_file(handle, cfile, C.int(len(args)+1), argv)
5952}
6053
61−func (p Language) REPLLikeEval(code string) {
54+func (p Python) REPLLikeEval(code string) {
6255 ccode := C.CString(code)
6356 defer C.free(unsafe.Pointer(ccode))
6457 C.pry_eval(ccode, C.Py_single_input)
6558}
6659
67−func (p Language) LoadModule(mod string) {
60+func (p Python) LoadModule(mod string) {
6861 cmode := C.CString(mod)
6962 defer C.free(unsafe.Pointer(cmode))
7063 C.PyImport_ImportModule(cmode)
7164}
7265
73−func (p Language) REPL() {
66+func (p Python) REPL() {
7467 p.LoadModule("readline")
7568
7669 fn := C.CString("<stdin>")
@@ -78,7 +71,7 @@ func (p Language) REPL() {
7871 C.PyRun_InteractiveLoopFlags(C.stdin, fn, nil)
7972}
8073
81−func (p Language) SetPrompts(ps1, ps2 string) {
74+func (p Python) SetPrompts(ps1, ps2 string) {
8275 cps1 := C.CString(ps1)
8376 defer C.free(unsafe.Pointer(cps1))
8477 cps2 := C.CString(ps2)
@@ -87,6 +80,8 @@ func (p Language) SetPrompts(ps1, ps2 string) {
8780 C.pry_set_prompts(cps1, cps2)
8881}
8982
90−func (p Language) Close() {
83+func (p Python) Close() {
9184 C.Py_Finalize()
9285}
86+
87+var Instance = Python{}
languages/python3/main.go+3−8
@@ -10,16 +10,9 @@ import "C"
1010import (
1111 "strings"
1212 "unsafe"
13−
14− "github.com/replit/prybar/utils"
1513)
1614
17−func init() {
18− utils.Register(&Python{})
19−}
20−
21−type Python struct {
22−}
15+type Python struct{}
2316
2417func (p Python) Open() {
2518 C.Py_Initialize()
@@ -85,3 +78,5 @@ func (p Python) SetPrompts(ps1, ps2 string) {
8578func (p Python) Close() {
8679 C.Py_Finalize()
8780}
81+
82+var Instance = Python{}
languages/ruby/main.go+10−15
@@ -8,46 +8,41 @@ import "C"
88
99import (
1010 "unsafe"
11−
12− "github.com/replit/prybar/utils"
1311)
1412
15−func init() {
16− utils.Register(&Language{})
17−}
18−
19−/* */
20−type Language struct {
13+type Ruby struct {
2114}
2215
23−func (p Language) Open() {
16+func (p Ruby) Open() {
2417 C.pry_open()
2518}
2619
27−func (p Language) Version() string {
20+func (p Ruby) Version() string {
2821 return C.GoString(C.pry_ruby_version())
2922}
3023
31−func (p Language) Eval(code string) {
24+func (p Ruby) Eval(code string) {
3225 p.EvalExpression(code)
3326}
3427
35−func (p Language) EvalExpression(code string) string {
28+func (p Ruby) EvalExpression(code string) string {
3629 ccode := C.CString(code)
3730 defer C.free(unsafe.Pointer(ccode))
3831 res := C.pry_eval(ccode)
3932 return C.GoString(res)
4033}
4134
42−func (p Language) EvalFile(file string, args []string) {
35+func (p Ruby) EvalFile(file string, args []string) {
4336 cfile := C.CString(file)
4437 defer C.free(unsafe.Pointer(cfile))
4538 C.pry_eval_file(cfile)
4639}
4740
48−func (p Language) REPL() {
41+func (p Ruby) REPL() {
4942 p.Eval("require 'irb'\nbinding.irb")
5043}
51−func (p Language) Close() {
44+func (p Ruby) Close() {
5245 C.ruby_cleanup(0)
5346}
47+
48+var Instance = Ruby{}
languages/spidermonkey/main.go+6−13
@@ -63,33 +63,26 @@ import "C"
6363
6464import (
6565 "unsafe"
66−
67− "github.com/replit/prybar/utils"
6866)
6967
70−func init() {
71− utils.Register(&Language{})
72−}
73−
74−type Language struct{}
68+type SpiderMonkey struct{}
7569
76−func (p Language) Open() {
70+func (p SpiderMonkey) Open() {
7771 C.pry_open()
7872}
7973
80−func (p Language) Version() string {
74+func (p SpiderMonkey) Version() string {
8175 return C.GoString(C.JS_GetImplementationVersion())
8276}
8377
84−func (p Language) Eval(code string) {
78+func (p SpiderMonkey) Eval(code string) {
8579 ccode := C.CString(code)
8680 defer C.free(unsafe.Pointer(ccode))
8781 C.pry_eval(ccode)
8882}
8983
90−func (p Language) Close() {
84+func (p SpiderMonkey) Close() {
9185 C.pry_close()
9286}
9387
94−// exported
95−var Instance Language
88+var Instance = SpiderMonkey{}
languages/tcl/main.go+9−13
@@ -9,39 +9,35 @@ import "C"
99
1010import (
1111 "unsafe"
12−
13− "github.com/replit/prybar/utils"
1412)
1513
16−func init() {
17− utils.Register(&Language{})
18−}
19−
20−type Language struct{}
14+type Tcl struct{}
2115
22−func (p Language) Open() {
16+func (p Tcl) Open() {
2317 C.pry_open()
2418}
2519
26−func (p Language) Version() string {
20+func (p Tcl) Version() string {
2721 cver := C.pry_version()
2822 ver := C.GoString(cver)
2923 C.free(unsafe.Pointer(cver))
30− return "Language " + ver
24+ return "TCL " + ver
3125}
3226
33−func (p Language) Eval(code string) {
27+func (p Tcl) Eval(code string) {
3428 ccode := C.CString(code)
3529 defer C.free(unsafe.Pointer(ccode))
3630 C.pry_eval(ccode)
3731}
3832
39−func (p Language) EvalExpression(code string) string {
33+func (p Tcl) EvalExpression(code string) string {
4034 ccode := C.CString(code)
4135 defer C.free(unsafe.Pointer(ccode))
4236 return C.GoString(C.pry_eval(ccode))
4337}
4438
45−func (p Language) Close() {
39+func (p Tcl) Close() {
4640 C.pry_close()
4741}
42+
43+var Instance = Tcl{}
utils/utils.go+3−9
@@ -8,12 +8,6 @@ import (
88 "syscall"
99)
1010
11−var instance PluginBase
12−
13−func Register(b PluginBase) {
14− instance = b
15−}
16−
1711type Red struct {
1812 parent io.Writer
1913}
@@ -25,7 +19,7 @@ func (r *Red) Write(p []byte) (n int, err error) {
2519 return n, err
2620}
2721
28−func DoCli() {
22+func DoCli(p PluginBase) {
2923 var interactive, ourInteractive bool
3024 var code string
3125 var quiet bool
@@ -49,8 +43,8 @@ func DoCli() {
4943
5044 args := flag.Args()
5145
52− instance.Open()
53− lang := &Language{ptr: instance, ps1: ps1}
46+ p.Open()
47+ lang := &Language{ptr: p, ps1: ps1}
5448
5549 if !quiet {
5650 fmt.Println(lang.Version())