github.com/hirochachacha/plua@v0.0.0-20170217012138-c82f520cc725/runtime/util.go (about) 1 package runtime 2 3 import "github.com/hirochachacha/plua/object" 4 5 // for debug 6 func (th *thread) getFuncName(fn object.Value) string { 7 loaded := th.Loaded() 8 9 var key object.Value 10 var val object.Value 11 for { 12 key, val, _ = loaded.Next(key) 13 if val == nil { 14 break 15 } 16 17 if modname, ok := key.(object.String); ok { 18 if module, ok := val.(object.Table); ok { 19 var mkey object.Value 20 var mval object.Value 21 for { 22 mkey, mval, _ = module.Next(mkey) 23 if mval == nil { 24 break 25 } 26 27 if fname, ok := mkey.(object.String); ok { 28 if object.Equal(mval, fn) { 29 if modname == "_G" { 30 return string(fname) 31 } 32 return string(modname) + "." + string(fname) 33 } 34 } 35 } 36 } 37 } 38 } 39 40 return "?" 41 }