mirror of https://github.com/miguelmota/cointop
You cannot select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
172 lines
2.0 KiB
Go
172 lines
2.0 KiB
Go
package ast
|
|
|
|
import (
|
|
"reflect"
|
|
"regexp"
|
|
|
|
"github.com/antonmedv/expr/file"
|
|
)
|
|
|
|
// Node represents items of abstract syntax tree.
|
|
type Node interface {
|
|
Location() file.Location
|
|
SetLocation(file.Location)
|
|
Type() reflect.Type
|
|
SetType(reflect.Type)
|
|
}
|
|
|
|
func Patch(node *Node, newNode Node) {
|
|
newNode.SetType((*node).Type())
|
|
newNode.SetLocation((*node).Location())
|
|
*node = newNode
|
|
}
|
|
|
|
type base struct {
|
|
loc file.Location
|
|
nodeType reflect.Type
|
|
}
|
|
|
|
func (n *base) Location() file.Location {
|
|
return n.loc
|
|
}
|
|
|
|
func (n *base) SetLocation(loc file.Location) {
|
|
n.loc = loc
|
|
}
|
|
|
|
func (n *base) Type() reflect.Type {
|
|
return n.nodeType
|
|
}
|
|
|
|
func (n *base) SetType(t reflect.Type) {
|
|
n.nodeType = t
|
|
}
|
|
|
|
type NilNode struct {
|
|
base
|
|
}
|
|
|
|
type IdentifierNode struct {
|
|
base
|
|
Value string
|
|
NilSafe bool
|
|
}
|
|
|
|
type IntegerNode struct {
|
|
base
|
|
Value int
|
|
}
|
|
|
|
type FloatNode struct {
|
|
base
|
|
Value float64
|
|
}
|
|
|
|
type BoolNode struct {
|
|
base
|
|
Value bool
|
|
}
|
|
|
|
type StringNode struct {
|
|
base
|
|
Value string
|
|
}
|
|
|
|
type ConstantNode struct {
|
|
base
|
|
Value interface{}
|
|
}
|
|
|
|
type UnaryNode struct {
|
|
base
|
|
Operator string
|
|
Node Node
|
|
}
|
|
|
|
type BinaryNode struct {
|
|
base
|
|
Operator string
|
|
Left Node
|
|
Right Node
|
|
}
|
|
|
|
type MatchesNode struct {
|
|
base
|
|
Regexp *regexp.Regexp
|
|
Left Node
|
|
Right Node
|
|
}
|
|
|
|
type PropertyNode struct {
|
|
base
|
|
Node Node
|
|
Property string
|
|
NilSafe bool
|
|
}
|
|
|
|
type IndexNode struct {
|
|
base
|
|
Node Node
|
|
Index Node
|
|
}
|
|
|
|
type SliceNode struct {
|
|
base
|
|
Node Node
|
|
From Node
|
|
To Node
|
|
}
|
|
|
|
type MethodNode struct {
|
|
base
|
|
Node Node
|
|
Method string
|
|
Arguments []Node
|
|
NilSafe bool
|
|
}
|
|
|
|
type FunctionNode struct {
|
|
base
|
|
Name string
|
|
Arguments []Node
|
|
Fast bool
|
|
}
|
|
|
|
type BuiltinNode struct {
|
|
base
|
|
Name string
|
|
Arguments []Node
|
|
}
|
|
|
|
type ClosureNode struct {
|
|
base
|
|
Node Node
|
|
}
|
|
|
|
type PointerNode struct {
|
|
base
|
|
}
|
|
|
|
type ConditionalNode struct {
|
|
base
|
|
Cond Node
|
|
Exp1 Node
|
|
Exp2 Node
|
|
}
|
|
|
|
type ArrayNode struct {
|
|
base
|
|
Nodes []Node
|
|
}
|
|
|
|
type MapNode struct {
|
|
base
|
|
Pairs []Node
|
|
}
|
|
|
|
type PairNode struct {
|
|
base
|
|
Key Node
|
|
Value Node
|
|
}
|