43 lines
695 B
Go
43 lines
695 B
Go
|
package ast
|
||
|
|
||
|
import (
|
||
|
"fmt"
|
||
|
)
|
||
|
|
||
|
// UnaryArithmetic represents a node where the result is arithmetic of
|
||
|
// one operands
|
||
|
type UnaryArithmetic struct {
|
||
|
Op ArithmeticOp
|
||
|
Expr Node
|
||
|
Posx Pos
|
||
|
}
|
||
|
|
||
|
func (n *UnaryArithmetic) Accept(v Visitor) Node {
|
||
|
n.Expr = n.Expr.Accept(v)
|
||
|
|
||
|
return v(n)
|
||
|
}
|
||
|
|
||
|
func (n *UnaryArithmetic) Pos() Pos {
|
||
|
return n.Posx
|
||
|
}
|
||
|
|
||
|
func (n *UnaryArithmetic) GoString() string {
|
||
|
return fmt.Sprintf("*%#v", *n)
|
||
|
}
|
||
|
|
||
|
func (n *UnaryArithmetic) String() string {
|
||
|
var sign rune
|
||
|
switch n.Op {
|
||
|
case ArithmeticOpAdd:
|
||
|
sign = '+'
|
||
|
case ArithmeticOpSub:
|
||
|
sign = '-'
|
||
|
}
|
||
|
return fmt.Sprintf("%c%s", sign, n.Expr)
|
||
|
}
|
||
|
|
||
|
func (n *UnaryArithmetic) Type(Scope) (Type, error) {
|
||
|
return TypeInt, nil
|
||
|
}
|