func (self Node) IsRaw() bool {
    return self.t&_V_RAW != 0
}
IsRaw returns true if node's underlying value is raw json
package ast
import (
	`encoding/json`
	`unsafe`
	`github.com/bytedance/sonic/decoder`
	`github.com/bytedance/sonic/internal/native/types`
	`github.com/bytedance/sonic/internal/rt`
	`github.com/bytedance/sonic/unquote`
)
const (
    _CAP_BITS          = 32
    _LEN_MASK          = 1 << _CAP_BITS - 1
    _NODE_SIZE = unsafe.Sizeof(Node{})
    _PAIR_SIZE = unsafe.Sizeof(Pair{})
)
const (
    _V_NONE         types.ValueType = 0
    _V_NODE_BASE    types.ValueType = 1<<5
    _V_LAZY         types.ValueType = 1 << 7
    _V_RAW          types.ValueType = 1 << 8
    _V_NUMBER                       = _V_NODE_BASE + 1
    _V_ARRAY_LAZY                   = _V_LAZY | types.V_ARRAY
    _V_OBJECT_LAZY                  = _V_LAZY | types.V_OBJECT
    _MASK_LAZY                      = _V_LAZY - 1
    _MASK_RAW                       = _V_RAW - 1
)
const (
    V_NONE   = 0
    V_ERROR  = 1
    V_NULL   = 2
    V_TRUE   = 3
    V_FALSE  = 4
    V_ARRAY  = 5
    V_OBJECT = 6
    V_STRING = 7
    V_NUMBER = int(_V_NUMBER)
)
type Node struct {
    v int64
    t types.ValueType
    p unsafe.Pointer
}
func (self Node) Type() int {
    return int(self.t & _MASK_LAZY & _MASK_RAW)
}
func (self Node) itype() types.ValueType {
    return self.t & _MASK_LAZY & _MASK_RAW
}
func (self *Node) Exists() bool {
    return self != nil && self.t != _V_NONE
}
func (self *Node) Valid() bool {
    if self == nil {
        return false
    }
    it := self.Type()
    return it >= V_NULL && it <= V_STRING || it == V_NUMBER
}
func (self *Node)  Check() error {
    if self == nil || self.t == V_NONE {
        return ErrNotExist
    } else if self.t != V_ERROR {
        return nil
    } else {
        return self
    }
}
func (self Node) Error() string {
    if self.t == V_NONE {
        return "unsupported type"
    } else if self.t != V_ERROR {
        return ""
    } else {
        return *(*string)(self.p)
    } 
}