github.com/hirochachacha/plua@v0.0.0-20170217012138-c82f520cc725/object/type.go (about) 1 package object 2 3 import ( 4 "fmt" 5 "unsafe" 6 ) 7 8 type Integer int64 9 10 func (i Integer) Type() Type { 11 return TNUMBER 12 } 13 14 func (i Integer) String() string { 15 s, _ := ToGoString(i) 16 return s 17 } 18 19 type Number float64 20 21 func (n Number) Type() Type { 22 return TNUMBER 23 } 24 25 func (n Number) String() string { 26 s, _ := ToGoString(n) 27 return s 28 } 29 30 type String string 31 32 func (s String) Type() Type { 33 return TSTRING 34 } 35 36 func (s String) String() string { 37 return string(s) 38 } 39 40 type Boolean bool 41 42 func (b Boolean) Type() Type { 43 return TBOOLEAN 44 } 45 46 func (b Boolean) String() string { 47 if b { 48 return "true" 49 } 50 51 return "false" 52 } 53 54 type LightUserdata struct { 55 Pointer unsafe.Pointer 56 } 57 58 func (lud LightUserdata) Type() Type { 59 return TUSERDATA 60 } 61 62 func (lud LightUserdata) String() string { 63 return fmt.Sprintf("userdata: %p", lud.Pointer) 64 } 65 66 // GoFunction represents functions that can be called by Lua VM. 67 type GoFunction func(th Thread, args ...Value) (rets []Value, err *RuntimeError) 68 69 func (fn GoFunction) Type() Type { 70 return TFUNCTION 71 } 72 73 func (fn GoFunction) String() string { 74 return fmt.Sprintf("function: %p", fn) 75 } 76 77 type Userdata struct { 78 Value interface{} 79 Metatable Table 80 } 81 82 func (ud *Userdata) Type() Type { 83 return TUSERDATA 84 } 85 86 func (ud *Userdata) String() string { 87 return fmt.Sprintf("userdata: %p", ud) 88 } 89 90 type Type int 91 92 func (t Type) String() string { 93 return typeNames[t+1] 94 } 95 96 const ( 97 TNIL Type = iota 98 TBOOLEAN 99 TLIGHTUSERDATA 100 TNUMBER 101 TSTRING 102 TTABLE 103 TFUNCTION 104 TUSERDATA 105 TTHREAD 106 107 MaxType 108 ) 109 110 const ( 111 TSHRSTR Type = TSTRING 112 TLNGSTR Type = TSTRING | (1 << 4) 113 114 TNUMFLT Type = TNUMBER 115 TNUMINT Type = TNUMBER | (1 << 4) 116 ) 117 118 var typeNames = [...]string{ 119 TNIL + 1: "nil", 120 TBOOLEAN + 1: "boolean", 121 TLIGHTUSERDATA + 1: "userdata", 122 TNUMBER + 1: "number", 123 TSTRING + 1: "string", 124 TTABLE + 1: "table", 125 TFUNCTION + 1: "function", 126 TUSERDATA + 1: "userdata", 127 TTHREAD + 1: "thread", 128 TNUMINT + 1: "integer", 129 }