8
`github.com/bytedance/sonic/internal/native/types`
12
func newError(err types.ParsingError, msg string) *Node {
16
p: unsafe.Pointer(&msg),
20
// Error returns error message if the node is invalid
21
func (self Node) Error() string {
22
if self.t != V_ERROR {
25
return *(*string)(self.p)
29
func newSyntaxError(err SyntaxError) *Node {
30
msg := err.Description()
34
p: unsafe.Pointer(&msg),
38
func (self *Parser) syntaxError(err types.ParsingError) SyntaxError {
46
func unwrapError(err error) *Node {
47
if se, ok := err.(*Node); ok {
49
}else if sse, ok := err.(Node); ok {
55
p: unsafe.Pointer(&msg),
60
type SyntaxError struct {
63
Code types.ParsingError
67
func (self SyntaxError) Error() string {
68
return fmt.Sprintf("%q", self.Description())
71
func (self SyntaxError) Description() string {
72
return "Syntax error " + self.description()
75
func (self SyntaxError) description() string {
80
/* check for empty source */
82
return fmt.Sprintf("no sources available: %#v", self)
85
/* prevent slicing before the beginning */
87
p, q, i = 0, q - p, i + p
90
/* prevent slicing beyond the end */
91
if n := len(self.Src); q > n {
95
/* move the left bound if possible */
102
/* left and right length */
104
y := clamp_zero(q - p - i - 1)
106
/* compose the error description */
108
"at index %d: %s\n\n\t%s\n\t%s^%s\n",
112
strings.Repeat(".", x),
113
strings.Repeat(".", y),
117
func (self SyntaxError) Message() string {
119
return self.Code.Message()
124
func clamp_zero(v int) int {