| 147 | var errSkip = errors.New("skip stmt") |
| 148 | |
| 149 | func (p *Parser) Parse(r io.Reader) ([]ast.Statement, error) { |
| 150 | contents, err := io.ReadAll(r) |
| 151 | if err != nil { |
| 152 | return nil, err |
| 153 | } |
| 154 | tree, err := Parse(string(contents)) |
| 155 | if err != nil { |
| 156 | pErr := normalizeErr(err) |
| 157 | return nil, pErr |
| 158 | } |
| 159 | |
| 160 | var stmts []ast.Statement |
| 161 | for _, raw := range tree.Stmts { |
| 162 | n, err := translate(raw.Stmt) |
| 163 | if err == errSkip { |
| 164 | continue |
| 165 | } |
| 166 | if err != nil { |
| 167 | return nil, err |
| 168 | } |
| 169 | if n == nil { |
| 170 | return nil, fmt.Errorf("unexpected nil node") |
| 171 | } |
| 172 | stmts = append(stmts, ast.Statement{ |
| 173 | Raw: &ast.RawStmt{ |
| 174 | Stmt: n, |
| 175 | StmtLocation: int(raw.StmtLocation), |
| 176 | StmtLen: int(raw.StmtLen), |
| 177 | }, |
| 178 | }) |
| 179 | } |
| 180 | return stmts, nil |
| 181 | } |
| 182 | |
| 183 | func normalizeErr(err error) error { |
| 184 | //TODO: errors.As complains that *parser.Error does not implement error |