mirror of https://github.com/subgraph/fw-daemon
You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
55 lines
903 B
55 lines
903 B
package toml
|
|
|
|
import (
|
|
"fmt"
|
|
|
|
"github.com/naoina/toml/ast"
|
|
)
|
|
|
|
// Parse returns an AST representation of TOML.
|
|
// The toplevel is represented by a table.
|
|
func Parse(data []byte) (*ast.Table, error) {
|
|
d := &parseState{p: &tomlParser{Buffer: string(data)}}
|
|
d.init()
|
|
|
|
if err := d.parse(); err != nil {
|
|
return nil, err
|
|
}
|
|
|
|
return d.p.toml.table, nil
|
|
}
|
|
|
|
type parseState struct {
|
|
p *tomlParser
|
|
}
|
|
|
|
func (d *parseState) init() {
|
|
d.p.Init()
|
|
d.p.toml.init(d.p.buffer)
|
|
}
|
|
|
|
func (d *parseState) parse() error {
|
|
if err := d.p.Parse(); err != nil {
|
|
if err, ok := err.(*parseError); ok {
|
|
return fmt.Errorf("toml: line %d: parse error", err.Line())
|
|
}
|
|
return err
|
|
}
|
|
return d.execute()
|
|
}
|
|
|
|
func (d *parseState) execute() (err error) {
|
|
defer func() {
|
|
e := recover()
|
|
if e != nil {
|
|
cerr, ok := e.(convertError)
|
|
if !ok {
|
|
panic(e)
|
|
}
|
|
err = cerr.err
|
|
}
|
|
}()
|
|
d.p.Execute()
|
|
return nil
|
|
}
|