github.com/sixexorg/magnetic-ring@v0.0.0-20191119090307-31705a21e419/vm/cvm/ast/misc.go (about) 1 package ast 2 3 import "github.com/sixexorg/magnetic-ring/common/sink" 4 5 type Field struct { 6 Key Expr 7 Value Expr 8 } 9 10 type ParList struct { 11 HasVargs bool 12 Names []string 13 } 14 15 type FuncName struct { 16 Func Expr 17 Receiver Expr 18 Method string 19 } 20 21 func (this *Field) Serialization(sk *sink.ZeroCopySink) { 22 this.Key.Serialization(sk) 23 this.Value.Serialization(sk) 24 } 25 func (this *Field) DeSerialization(source *sink.ZeroCopySource) (err error) { 26 this.Key, err = ExprDeserialize(source) 27 this.Value, err = ExprDeserialize(source) 28 return err 29 } 30 31 func (this *ParList) Serialization(sk *sink.ZeroCopySink) { 32 sk.WriteBool(this.HasVargs) 33 sk.WriteVarUint(uint64(len(this.Names))) 34 for _, name := range this.Names { 35 sk.WriteString(name) 36 } 37 } 38 func (this *ParList) DeSerialization(source *sink.ZeroCopySource) (err error) { 39 this.HasVargs, _, _ = source.NextBool() 40 len, _, _, _ := source.NextVarUint() 41 this.Names = make([]string, len) 42 var i uint64 43 for i = 0; i < len; i++ { 44 this.Names[i], _, _, _ = source.NextString() 45 } 46 return err 47 } 48 49 func (this *FuncName) Serialization(sk *sink.ZeroCopySink) { 50 this.Func.Serialization(sk) 51 if this.Receiver == nil { 52 sk.WriteByte(nilReceiver) 53 } else { 54 this.Receiver.Serialization(sk) 55 } 56 sk.WriteString(this.Method) 57 } 58 59 func (this *FuncName) DeSerialization(source *sink.ZeroCopySource) (err error) { 60 this.Func, err = ExprDeserialize(source) 61 this.Receiver, err = ExprDeserialize(source) 62 this.Method, _, _, _ = source.NextString() 63 return err 64 }