-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathmain.go
50 lines (44 loc) · 795 Bytes
/
main.go
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
package main
import (
"fmt"
"log"
"github.com/goplus/igop"
_ "github.com/goplus/igop/pkg/fmt"
)
var source = `
package bar
var index int = 100
var pindex *int = &index
func show() {
println(index)
}
`
func main() {
ctx := igop.NewContext(0)
pkg, err := ctx.LoadFile("main.go", source)
if err != nil {
log.Panicln("load", err)
}
interp, err := ctx.NewInterp(pkg)
if err != nil {
log.Panicln("interp", err)
}
if err := interp.RunInit(); err != nil {
log.Panicln("init", err)
}
if v, ok := interp.GetVarAddr("index"); ok {
if p, ok := v.(*int); ok {
fmt.Println(*p)
*p = 200
}
}
if v, ok := interp.GetVarAddr("pindex"); ok {
if p, ok := v.(**int); ok {
fmt.Println(**p)
**p = 300
}
}
if fn, ok := interp.GetFunc("show"); ok {
fn.(func())()
}
}