script

package
v0.0.0-...-8e17a21 Latest Latest
Warning

This package is not in the latest version of its module.

Go to latest
Published: Jan 7, 2020 License: GPL-2.0 Imports: 17 Imported by: 15

Documentation

Index

Constants

View Source
const (
	DtBool uint32 = iota + 1
	DtBytes
	DtInt
	DtAddress
	DtArray
	DtMap
	DtMoney
	DtFloat
	DtString
	DtFile
)
View Source
const (

	// Decimal is the constant string for decimal type
	Decimal = `decimal.Decimal`
	// Interface is the constant string for interface type
	Interface = `interface`
	File      = `*types.Map`

	MaxErrLen = 150
)
View Source
const (

	// ObjUnknown is an unknown object. It means something wrong.
	ObjUnknown = iota
	// ObjContract is a contract object.
	ObjContract
	// ObjFunc is a function object. myfunc()
	ObjFunc
	// ObjExtFunc is an extended function object. $myfunc()
	ObjExtFunc
	// ObjVar is a variable. myvar
	ObjVar
	// ObjExtend is an extended variable. $myvar
	ObjExtend

	// CostCall is the cost of the function calling
	CostCall = 50
	// CostContract is the cost of the contract calling
	CostContract = 100
	// CostExtend is the cost of the extend function calling
	CostExtend = 10

	// VMTypeSmart is smart vm type
	VMTypeSmart VMType = 1
	// VMTypeOBS is obs vm type
	VMTypeOBS VMType = 2
	// VMTypeOBSMaster is OBSMaster type
	VMTypeOBSMaster VMType = 3

	TagFile      = "file"
	TagAddress   = "address"
	TagSignature = "signature"
	TagOptional  = "optional"
)

Variables

View Source
var (
	ErrMemoryLimit = errors.New("Memory limit exceeded")
	ErrVMTimeLimit = errors.New(`time limit exceeded`)
)

Functions

func ContractsList

func ContractsList(value string) ([]string, error)

ContractsList returns list of contracts names from source of code

func ExContract

func ExContract(rt *RunTime, state uint32, name string, params *types.Map) (interface{}, error)

ExContract executes the name contract in the state with specified parameters

func ExecContract

func ExecContract(rt *RunTime, name, txs string, params ...interface{}) (interface{}, error)

ExecContract runs the name contract where txs contains the list of parameters and params are the values of parameters

func GetSettings

func GetSettings(rt *RunTime, cntname, name string) (interface{}, error)

GetSettings returns the value of the parameter

func MemoryUsage

func MemoryUsage(rt *RunTime) int64

func OriginalToString

func OriginalToString(original uint32) string

func SetVMError

func SetVMError(eType string, eText interface{}) error

SetVMError sets error of VM

func StateName

func StateName(state uint32, name string) string

StateName checks the name of the contract and modifies it to @[state]name if it is necessary.

func ValueToDecimal

func ValueToDecimal(v interface{}) (ret decimal.Decimal, err error)

ValueToDecimal converts interface (string, float64, Decimal or int64) to Decimal

func ValueToFloat

func ValueToFloat(v interface{}) (ret float64)

ValueToFloat converts interface (string, float64 or int64) to float64

Types

type Block

type Block struct {
	Objects  map[string]*ObjInfo
	Type     int
	Owner    *OwnerInfo
	Info     interface{}
	Parent   *Block
	Vars     []reflect.Type
	Code     ByteCodes
	Children Blocks
}

Block contains all information about compiled block {...} and its children

type Blocks

type Blocks []*Block

Blocks is a slice of blocks

type ByteCode

type ByteCode struct {
	Cmd   uint16
	Line  uint16
	Value interface{}
}

ByteCode stores a command and an additional parameter.

type ByteCodes

type ByteCodes []*ByteCode

ByteCodes is the slice of ByteCode items

type ContractInfo

type ContractInfo struct {
	ID       uint32
	Name     string
	Owner    *OwnerInfo
	Used     map[string]bool // Called contracts
	Tx       *[]*FieldInfo
	Settings map[string]interface{}
	CanWrite bool // If the function can update DB
}

ContractInfo contains the contract information

type ErrInfo

type ErrInfo struct {
	Name string
	Line uint16
}

ErrInfo stores info about current contract or function

type ExtFuncInfo

type ExtFuncInfo struct {
	Name     string
	Params   []reflect.Type
	Results  []reflect.Type
	Auto     []string
	Variadic bool
	Func     interface{}
	CanWrite bool // If the function can update DB
}

ExtFuncInfo is the structure for the extrended function

type ExtendData

type ExtendData struct {
	Objects    map[string]interface{}
	AutoPars   map[string]string
	WriteFuncs map[string]struct{}
}

ExtendData is used for the definition of the extended functions and variables

type FieldInfo

type FieldInfo struct {
	Name     string
	Type     reflect.Type
	Original uint32
	Tags     string
}

FieldInfo describes the field of the data structure

func (*FieldInfo) ContainsTag

func (fi *FieldInfo) ContainsTag(tag string) bool

ContainsTag returns whether the tag is contained in this field

type FuncInfo

type FuncInfo struct {
	Params   []reflect.Type
	Results  []reflect.Type
	Names    *map[string]FuncName
	Variadic bool
	ID       uint32
	CanWrite bool // If the function can update DB
}

FuncInfo contains the function information

type FuncName

type FuncName struct {
	Params   []reflect.Type
	Offset   []int
	Variadic bool
}

FuncName is storing param of FuncName

type FuncNameCmd

type FuncNameCmd struct {
	Name  string
	Count int
}

FuncNameCmd for cmdFuncName

type IndexInfo

type IndexInfo struct {
	VarOffset int
	Owner     *Block
	Extend    string
}

IndexInfo contains the information for SetIndex

type Lexem

type Lexem struct {
	Type   uint32 // Type of the lexem
	Ext    uint32
	Value  interface{} // Value of lexem
	Line   uint16      // Line of the lexem
	Column uint32      // Position inside the line
}

Lexem contains information about language item

func (Lexem) GetLogger

func (l Lexem) GetLogger() *log.Entry

GetLogger returns logger

type Lexems

type Lexems []*Lexem

Lexems is a slice of lexems

type ObjInfo

type ObjInfo struct {
	Type  int
	Value interface{}
}

ObjInfo is the common object type

type OwnerInfo

type OwnerInfo struct {
	StateID  uint32 `json:"state"`
	Active   bool   `json:"active"`
	TableID  int64  `json:"tableid"`
	WalletID int64  `json:"walletid"`
	TokenID  int64  `json:"tokenid"`
}

OwnerInfo storing info about owner

type RunTime

type RunTime struct {
	// contains filtered or unexported fields
}

RunTime is needed for the execution of the byte-code

func (*RunTime) Cost

func (rt *RunTime) Cost() int64

Cost return the remain cost of the execution.

func (*RunTime) Run

func (rt *RunTime) Run(block *Block, params []interface{}, extend *map[string]interface{}) (ret []interface{}, err error)

Run executes Block with the specified parameters and extended variables and functions

func (*RunTime) RunCode

func (rt *RunTime) RunCode(block *Block) (status int, err error)

RunCode executes Block

func (*RunTime) SetCost

func (rt *RunTime) SetCost(cost int64)

SetCost sets the max cost of the execution.

type Stacker

type Stacker interface {
	AppendStack(fn string) error
	PopStack(fn string)
}

Stacker represents interface for working with call stack

type VM

type VM struct {
	Block
	ExtCost       func(string) int64
	FuncCallsDB   map[string]struct{}
	Extern        bool  // extern mode of compilation
	ShiftContract int64 // id of the first contract
	// contains filtered or unexported fields
}

VM is the main type of the virtual machine

func NewVM

func NewVM() *VM

NewVM creates a new virtual machine

func (*VM) Call

func (vm *VM) Call(name string, params []interface{}, extend *map[string]interface{}) (ret []interface{}, err error)

Call executes the name object with the specified params and extended variables and functions

func (*VM) Compile

func (vm *VM) Compile(input []rune, owner *OwnerInfo) error

Compile compiles a source code and loads the byte-code into the virtual machine

func (*VM) CompileBlock

func (vm *VM) CompileBlock(input []rune, owner *OwnerInfo) (*Block, error)

CompileBlock compile the source code into the Block structure with a byte-code

func (*VM) CompileEval

func (vm *VM) CompileEval(input string, state uint32) error

CompileEval compiles conditional exppression

func (*VM) EvalIf

func (vm *VM) EvalIf(input string, state uint32, vars *map[string]interface{}) (bool, error)

EvalIf runs the conditional expression. It compiles the source code before that if that's necessary.

func (*VM) Extend

func (vm *VM) Extend(ext *ExtendData)

Extend sets the extended variables and functions

func (*VM) FlushBlock

func (vm *VM) FlushBlock(root *Block)

FlushBlock loads the compiled Block into the virtual machine

func (*VM) FlushExtern

func (vm *VM) FlushExtern()

FlushExtern switches off the extern mode of the compilation

func (*VM) RunInit

func (vm *VM) RunInit(cost int64) *RunTime

RunInit creates a new RunTime for the virtual machine

type VMError

type VMError struct {
	Type  string `json:"type"`
	Error string `json:"error"`
}

VMError represents error of VM

type VMType

type VMType int

VMType is virtual machine type

type VarInfo

type VarInfo struct {
	Obj   *ObjInfo
	Owner *Block
}

VarInfo contains the variable information

Directories

Path Synopsis

Jump to

Keyboard shortcuts

? : This menu
/ : Search site
f or F : Jump to
y or Y : Canonical URL