-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathparser_error.go
More file actions
59 lines (45 loc) · 1.51 KB
/
Copy pathparser_error.go
File metadata and controls
59 lines (45 loc) · 1.51 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
package libparser
import (
"fmt"
"io"
liberrors "github.com/tomefile/lib-errors"
)
var EOF = &liberrors.DetailedError{Name: "EOF", Details: "End of File"}
var UNEXPECTED_EOF = &liberrors.DetailedError{Name: "EOF", Details: "Unexpected End of File"}
var EOB = &liberrors.DetailedError{Name: "EOB", Details: "End of Block"}
var EOA = &liberrors.DetailedError{Name: "EOA", Details: "End of Arguments"}
func (parser *Parser) fillErrorTrace(derr *liberrors.DetailedError) {
derr.AddTraceItem(liberrors.TraceItem{
Name: parser.File.Name(),
Col: parser.reader.PrevCol,
Row: parser.reader.PrevRow,
})
if parser.Parent != nil {
parser.Parent.fillErrorTrace(derr)
}
}
func (parser *Parser) fail(at uint, name, details string) *liberrors.DetailedError {
derr := &liberrors.DetailedError{
Name: name,
Details: details,
Trace: nil,
Context: parser.reader.Context(at),
}
parser.fillErrorTrace(derr)
return derr
}
func (parser *Parser) failReading(err error) *liberrors.DetailedError {
if err == io.EOF {
return EOF
}
if derr, ok := err.(*liberrors.DetailedError); ok {
return derr
}
return parser.fail(parser.reader.Offset-1, liberrors.ERROR_READING, err.Error())
}
func (parser *Parser) failSyntax(at uint, format string, args ...any) *liberrors.DetailedError {
return parser.fail(at, liberrors.ERROR_SYNTAX, fmt.Sprintf(format, args...))
}
func (parser *Parser) failSyntaxHere(format string, args ...any) *liberrors.DetailedError {
return parser.failSyntax(parser.reader.Offset-1, format, args...)
}