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  }