237 lines
3.9 KiB
Go
237 lines
3.9 KiB
Go
|
package main
|
||
|
|
||
|
import (
|
||
|
"bytes"
|
||
|
"fmt"
|
||
|
)
|
||
|
|
||
|
type annotationParams struct {
|
||
|
G *generator
|
||
|
Node *node
|
||
|
}
|
||
|
|
||
|
type constantsParams struct {
|
||
|
G *generator
|
||
|
Consts []*node
|
||
|
Vars []*node
|
||
|
}
|
||
|
|
||
|
type enumParams struct {
|
||
|
G *generator
|
||
|
Node *node
|
||
|
Annotations *annotations
|
||
|
EnumValues []enumval
|
||
|
}
|
||
|
|
||
|
type structTypesParams struct {
|
||
|
G *generator
|
||
|
Node *node
|
||
|
Annotations *annotations
|
||
|
BaseNode *node
|
||
|
}
|
||
|
|
||
|
func (p structTypesParams) IsBase() bool {
|
||
|
return p.Node == p.BaseNode
|
||
|
}
|
||
|
|
||
|
type baseStructFuncsParams struct {
|
||
|
G *generator
|
||
|
Node *node
|
||
|
StringMethod bool
|
||
|
}
|
||
|
|
||
|
type structFuncsParams struct {
|
||
|
G *generator
|
||
|
Node *node
|
||
|
}
|
||
|
|
||
|
type structGroupParams struct {
|
||
|
G *generator
|
||
|
Node *node
|
||
|
Group *node
|
||
|
Field field
|
||
|
}
|
||
|
|
||
|
type structFieldParams struct {
|
||
|
G *generator
|
||
|
Node *node
|
||
|
Field field
|
||
|
Annotations *annotations
|
||
|
FieldType string
|
||
|
}
|
||
|
|
||
|
type (
|
||
|
structFloatFieldParams structUintFieldParams
|
||
|
structInterfaceFieldParams structFieldParams
|
||
|
structVoidFieldParams structFieldParams
|
||
|
structListFieldParams structObjectFieldParams
|
||
|
structPointerFieldParams structObjectFieldParams
|
||
|
structStructFieldParams structObjectFieldParams
|
||
|
)
|
||
|
|
||
|
type structBoolFieldParams struct {
|
||
|
structFieldParams
|
||
|
Default bool
|
||
|
}
|
||
|
|
||
|
type structUintFieldParams struct {
|
||
|
structFieldParams
|
||
|
Bits uint
|
||
|
Default uint64
|
||
|
}
|
||
|
|
||
|
func (p structUintFieldParams) Offset() uint32 {
|
||
|
return p.Field.Slot().Offset() * uint32(p.Bits/8)
|
||
|
}
|
||
|
|
||
|
func (p structFloatFieldParams) Offset() uint32 {
|
||
|
return structUintFieldParams(p).Offset()
|
||
|
}
|
||
|
|
||
|
type structIntFieldParams struct {
|
||
|
structUintFieldParams
|
||
|
EnumName string
|
||
|
}
|
||
|
|
||
|
func (p structIntFieldParams) ReturnType() string {
|
||
|
if p.EnumName != "" {
|
||
|
return p.EnumName
|
||
|
}
|
||
|
return fmt.Sprintf("int%d", p.Bits)
|
||
|
}
|
||
|
|
||
|
type structTextFieldParams struct {
|
||
|
structFieldParams
|
||
|
Default string
|
||
|
}
|
||
|
|
||
|
type structDataFieldParams struct {
|
||
|
structFieldParams
|
||
|
Default []byte
|
||
|
}
|
||
|
|
||
|
type structObjectFieldParams struct {
|
||
|
structFieldParams
|
||
|
TypeNode *node
|
||
|
Default staticDataRef
|
||
|
}
|
||
|
|
||
|
type structListParams struct {
|
||
|
G *generator
|
||
|
Node *node
|
||
|
StringMethod bool
|
||
|
}
|
||
|
|
||
|
type structEnumsParams struct {
|
||
|
G *generator
|
||
|
Node *node
|
||
|
Fields []field
|
||
|
EnumString enumString
|
||
|
}
|
||
|
|
||
|
type promiseParams struct {
|
||
|
G *generator
|
||
|
Node *node
|
||
|
Fields []field
|
||
|
}
|
||
|
|
||
|
type promiseGroupParams struct {
|
||
|
G *generator
|
||
|
Node *node
|
||
|
Field field
|
||
|
Group *node
|
||
|
}
|
||
|
|
||
|
type promiseFieldStructParams struct {
|
||
|
G *generator
|
||
|
Node *node
|
||
|
Field field
|
||
|
Struct *node
|
||
|
Default staticDataRef
|
||
|
}
|
||
|
|
||
|
type promiseFieldAnyPointerParams struct {
|
||
|
G *generator
|
||
|
Node *node
|
||
|
Field field
|
||
|
}
|
||
|
|
||
|
type promiseFieldInterfaceParams struct {
|
||
|
G *generator
|
||
|
Node *node
|
||
|
Field field
|
||
|
Interface *node
|
||
|
}
|
||
|
|
||
|
type interfaceClientParams struct {
|
||
|
G *generator
|
||
|
Node *node
|
||
|
Annotations *annotations
|
||
|
Methods []interfaceMethod
|
||
|
}
|
||
|
|
||
|
type interfaceServerParams struct {
|
||
|
G *generator
|
||
|
Node *node
|
||
|
Annotations *annotations
|
||
|
Methods []interfaceMethod
|
||
|
}
|
||
|
|
||
|
type structValueParams struct {
|
||
|
G *generator
|
||
|
Node *node
|
||
|
Typ *node
|
||
|
Value staticDataRef
|
||
|
}
|
||
|
|
||
|
type pointerValueParams struct {
|
||
|
G *generator
|
||
|
Value staticDataRef
|
||
|
}
|
||
|
|
||
|
type listValueParams struct {
|
||
|
G *generator
|
||
|
Typ string
|
||
|
Value staticDataRef
|
||
|
}
|
||
|
|
||
|
type schemaVarParams struct {
|
||
|
G *generator
|
||
|
FileID uint64
|
||
|
NodeIDs []uint64
|
||
|
schema []byte
|
||
|
}
|
||
|
|
||
|
func (p schemaVarParams) SchemaLiteral() string {
|
||
|
const width = 16
|
||
|
var out bytes.Buffer
|
||
|
out.WriteByte('"')
|
||
|
for i, b := range p.schema {
|
||
|
if i > 0 && i%width == 0 {
|
||
|
out.WriteString("\" +\n\t\"")
|
||
|
}
|
||
|
switch {
|
||
|
case b < ' ' || b > '~':
|
||
|
// unprintable
|
||
|
out.WriteString("\\x")
|
||
|
out.WriteByte(hexdigit(b >> 4))
|
||
|
out.WriteByte(hexdigit(b & 0xf))
|
||
|
case b == '"':
|
||
|
out.WriteString("\\\"")
|
||
|
case b == '\\':
|
||
|
out.WriteString("\\\\")
|
||
|
default:
|
||
|
out.WriteByte(b)
|
||
|
}
|
||
|
}
|
||
|
out.WriteByte('"')
|
||
|
return out.String()
|
||
|
}
|
||
|
|
||
|
func hexdigit(b byte) byte {
|
||
|
if b < 10 {
|
||
|
return b + '0'
|
||
|
}
|
||
|
return (b - 10) + 'a'
|
||
|
}
|