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  }