dashed / esparser

JavaScript Parser in Rust
6 stars 0 forks source link

Build fails #55

Open micwoj92 opened 2 years ago

micwoj92 commented 2 years ago

Running cargo build --release on rust 1.62

warning: unused imports: `LineNumber`, `Numbering`
  --> src/parsers/mod.rs:21:46
   |
21 | use chomp::types::numbering::{InputPosition, LineNumber, Numbering};
   |                                              ^^^^^^^^^^  ^^^^^^^^^
   |
   = note: `#[warn(unused_imports)]` on by default

warning: unused import: `chomp::parsers::SimpleResult`
  --> src/parsers/mod.rs:25:5
   |
25 | use chomp::parsers::SimpleResult;
   |     ^^^^^^^^^^^^^^^^^^^^^^^^^^^^

warning: unnecessary parentheses around block return value
   --> src/june_2016/section_11.rs:732:9
    |
732 |         (b'0' <= c && c <= b'9')
    |         ^                      ^
    |
    = note: `#[warn(unused_parens)]` on by default
help: remove these parentheses
    |
732 -         (b'0' <= c && c <= b'9')
732 +         b'0' <= c && c <= b'9'
    | 

warning: unnecessary parentheses around block return value
   --> src/june_2016/section_11.rs:751:9
    |
751 |         (b'1' <= c && c <= b'9')
    |         ^                      ^
    |
help: remove these parentheses
    |
751 -         (b'1' <= c && c <= b'9')
751 +         b'1' <= c && c <= b'9'
    | 

warning: variant `e` should have an upper camel case name
   --> src/june_2016/section_11.rs:778:5
    |
778 |     e,
    |     ^ help: convert the identifier to upper camel case: `E`
    |
    = note: `#[warn(non_camel_case_types)]` on by default

warning: unnecessary parentheses around block return value
   --> src/june_2016/section_11.rs:873:9
    |
873 |         (b'0' <= c && c <= b'1')
    |         ^                      ^
    |
help: remove these parentheses
    |
873 -         (b'0' <= c && c <= b'1')
873 +         b'0' <= c && c <= b'1'
    | 

warning: unnecessary parentheses around block return value
   --> src/june_2016/section_11.rs:925:9
    |
925 |         (b'0' <= c && c <= b'7')
    |         ^                      ^
    |
help: remove these parentheses
    |
925 -         (b'0' <= c && c <= b'7')
925 +         b'0' <= c && c <= b'7'
    | 

warning: unused imports: `many1`, `parse_utf8_char`, `string_till`
  --> src/june_2016/section_12.rs:13:47
   |
13 | use parsers::{ESParseResult, ESInput, string, parse_utf8_char, on_error, many, many1, string_till,
   |                                               ^^^^^^^^^^^^^^^                  ^^^^^  ^^^^^^^^^^^

warning: unnecessary trailing semicolon
    --> src/june_2016/section_12.rs:2461:6
     |
2461 |     };
     |      ^ help: remove this semicolon
     |
     = note: `#[warn(redundant_semicolons)]` on by default

warning: unused imports: `Initializer`, `initializer`
  --> src/june_2016/section_14.rs:16:25
   |
16 | use super::section_12::{initializer, Initializer, binding_identifier, BindingIdentifier,
   |                         ^^^^^^^^^^^  ^^^^^^^^^^^

warning: `#[inline]` is ignored on function prototypes
   --> src/parsers/mod.rs:499:5
    |
499 |     #[inline]
    |     ^^^^^^^^^
    |
    = note: `#[warn(unused_attributes)]` on by default

error[E0518]: attribute should be applied to function or closure
    --> src/june_2016/section_12.rs:1064:5
     |
1064 |       #[inline]
     |       ^^^^^^^^^
1065 | /     let reducer = |i: ESInput<I>, accumulator: Accumulator| -> ESParseResult<I, ()> {
1066 | |
1067 | |         parse!{i;
1068 | |
...    |
1080 | |         }
1081 | |     };
     | |______- not a function or closure

error[E0518]: attribute should be applied to function or closure
    --> src/june_2016/section_12.rs:1194:5
     |
1194 |       #[inline]
     |       ^^^^^^^^^
1195 | /     let reducer = |i: ESInput<I>, accumulator: Accumulator| -> ESParseResult<I, ()> {
1196 | |
1197 | |         let is_initial = {
1198 | |             accumulator.borrow().is_initial()
...    |
1273 | |         }
1274 | |     };
     | |______- not a function or closure

error[E0518]: attribute should be applied to function or closure
    --> src/june_2016/section_12.rs:1520:5
     |
1520 |       #[inline]
     |       ^^^^^^^^^
1521 | /     let reducer = |i: ESInput<I>, accumulator: Accumulator| -> ESParseResult<I, ()> {
1522 | |
1523 | |         let is_initial = {
1524 | |             accumulator.borrow().is_initial()
...    |
1591 | |
1592 | |     };
     | |______- not a function or closure

error[E0518]: attribute should be applied to function or closure
    --> src/june_2016/section_12.rs:1761:5
     |
1761 |       #[inline]
     |       ^^^^^^^^^
1762 | /     let reducer = |i: ESInput<I>, accumulator: Accumulator| -> ESParseResult<I, ()> {
1763 | |
1764 | |         option(i,
1765 | |                |i| {
...    |
1781 | |             })
1782 | |     };
     | |______- not a function or closure

error[E0518]: attribute should be applied to function or closure
    --> src/june_2016/section_12.rs:2108:5
     |
2108 |       #[inline]
     |       ^^^^^^^^^
2109 | /     let reducer = |i: ESInput<I>, accumulator: Accumulator| -> ESParseResult<I, ()> {
2110 | |         parse!{i;
2111 | |             let rhs = exponentiation_expression(&params);
2112 | |             ret {
...    |
2116 | |         }
2117 | |     };
     | |______- not a function or closure

error[E0518]: attribute should be applied to function or closure
    --> src/june_2016/section_12.rs:2242:5
     |
2242 |       #[inline]
     |       ^^^^^^^^^
2243 | /     let reducer = |i: ESInput<I>, accumulator: Accumulator| -> ESParseResult<I, ()> {
2244 | |         parse!{i;
2245 | |             let rhs = multiplicative_expression(&params);
2246 | |             ret {
...    |
2250 | |         }
2251 | |     };
     | |______- not a function or closure

error[E0518]: attribute should be applied to function or closure
    --> src/june_2016/section_12.rs:2354:5
     |
2354 |       #[inline]
     |       ^^^^^^^^^
2355 | /     let reducer = |i: ESInput<I>, accumulator: Accumulator| -> ESParseResult<I, ()> {
2356 | |         parse!{i;
2357 | |             let rhs = additive_expression(&params);
2358 | |             ret {
...    |
2362 | |         }
2363 | |     };
     | |______- not a function or closure

error[E0518]: attribute should be applied to function or closure
    --> src/june_2016/section_12.rs:2491:5
     |
2491 |       #[inline]
     |       ^^^^^^^^^
2492 | /     let reducer = |i: ESInput<I>, accumulator: Accumulator| -> ESParseResult<I, ()> {
2493 | |         parse!{i;
2494 | |             let rhs = shift_expression(&shift_params);
2495 | |             ret {
...    |
2499 | |         }
2500 | |     };
     | |______- not a function or closure

error[E0518]: attribute should be applied to function or closure
    --> src/june_2016/section_12.rs:2610:5
     |
2610 |       #[inline]
     |       ^^^^^^^^^
2611 | /     let reducer = |i: ESInput<I>, accumulator: Accumulator| -> ESParseResult<I, ()> {
2612 | |         parse!{i;
2613 | |             let rhs = relational_expression(params);
2614 | |             ret {
...    |
2618 | |         }
2619 | |     };
     | |______- not a function or closure

error[E0518]: attribute should be applied to function or closure
    --> src/june_2016/section_12.rs:2707:5
     |
2707 |       #[inline]
     |       ^^^^^^^^^
2708 | /     let reducer = |i: ESInput<I>, accumulator: Accumulator| -> ESParseResult<I, ()> {
2709 | |         parse!{i;
2710 | |             let rhs = equality_expression(params);
2711 | |             ret {
...    |
2715 | |         }
2716 | |     };
     | |______- not a function or closure

error[E0518]: attribute should be applied to function or closure
    --> src/june_2016/section_12.rs:2802:5
     |
2802 |       #[inline]
     |       ^^^^^^^^^
2803 | /     let reducer = |i: ESInput<I>, accumulator: Accumulator| -> ESParseResult<I, ()> {
2804 | |         parse!{i;
2805 | |             let rhs = bitwise_and_expression(params);
2806 | |             ret {
...    |
2810 | |         }
2811 | |     };
     | |______- not a function or closure

error[E0518]: attribute should be applied to function or closure
    --> src/june_2016/section_12.rs:2897:5
     |
2897 |       #[inline]
     |       ^^^^^^^^^
2898 | /     let reducer = |i: ESInput<I>, accumulator: Accumulator| -> ESParseResult<I, ()> {
2899 | |         parse!{i;
2900 | |             let rhs = bitwise_xor_expression(params);
2901 | |             ret {
...    |
2905 | |         }
2906 | |     };
     | |______- not a function or closure

error[E0518]: attribute should be applied to function or closure
    --> src/june_2016/section_12.rs:2993:5
     |
2993 |       #[inline]
     |       ^^^^^^^^^
2994 | /     let reducer = |i: ESInput<I>, accumulator: Accumulator| -> ESParseResult<I, ()> {
2995 | |         parse!{i;
2996 | |             let rhs = bitwise_or_expression(params);
2997 | |             ret {
...    |
3001 | |         }
3002 | |     };
     | |______- not a function or closure

error[E0518]: attribute should be applied to function or closure
    --> src/june_2016/section_12.rs:3090:5
     |
3090 |       #[inline]
     |       ^^^^^^^^^
3091 | /     let reducer = |i: ESInput<I>, accumulator: Accumulator| -> ESParseResult<I, ()> {
3092 | |         parse!{i;
3093 | |             let rhs = logical_and_expression(params);
3094 | |             ret {
...    |
3098 | |         }
3099 | |     };
     | |______- not a function or closure

error[E0518]: attribute should be applied to function or closure
   --> src/june_2016/section_13.rs:264:5
    |
264 |       #[inline]
    |       ^^^^^^^^^
265 | /     let reducer = |i: ESInput<I>, accumulator: Accumulator| -> ESParseResult<I, ()> {
266 | |         statement_list_item(i, &params).bind(|i, rhs| {
267 | |             accumulator.borrow_mut().add_item(rhs);
268 | |             i.ret(())
269 | |         })
270 | |     };
    | |______- not a function or closure

error[E0518]: attribute should be applied to function or closure
   --> src/june_2016/section_13.rs:429:5
    |
429 |       #[inline]
    |       ^^^^^^^^^
430 | /     let reducer = |i: ESInput<I>, accumulator: Accumulator| -> ESParseResult<I, ()> {
431 | |         lexical_binding(i, &params).bind(|i, rhs| {
432 | |             accumulator.borrow_mut().add_item(rhs);
433 | |             i.ret(())
434 | |         })
435 | |     };
    | |______- not a function or closure

error[E0518]: attribute should be applied to function or closure
   --> src/june_2016/section_13.rs:634:5
    |
634 |       #[inline]
    |       ^^^^^^^^^
635 | /     let reducer = |i: ESInput<I>, accumulator: Accumulator| -> ESParseResult<I, ()> {
636 | |         variable_declaration(i, &params).bind(|i, rhs| {
637 | |             accumulator.borrow_mut().add_item(rhs);
638 | |             i.ret(())
639 | |         })
640 | |     };
    | |______- not a function or closure

error[E0518]: attribute should be applied to function or closure
   --> src/june_2016/section_13.rs:991:5
    |
991 |       #[inline]
    |       ^^^^^^^^^
992 | /     let reducer = |i: ESInput<I>, accumulator: Accumulator| -> ESParseResult<I, ()> {
993 | |         binding_property(i, &params).bind(|i, rhs| {
994 | |             accumulator.borrow_mut().add_item(rhs);
995 | |             i.ret(())
996 | |         })
997 | |     };
    | |______- not a function or closure

error[E0518]: attribute should be applied to function or closure
    --> src/june_2016/section_13.rs:1085:5
     |
1085 |       #[inline]
     |       ^^^^^^^^^
1086 | /     let reducer = |i: ESInput<I>, accumulator: Accumulator| -> ESParseResult<I, ()> {
1087 | |         binding_elision_element(i, &params).bind(|i, rhs| {
1088 | |             accumulator.borrow_mut().add_item(rhs);
1089 | |             i.ret(())
1090 | |         })
1091 | |     };
     | |______- not a function or closure

error[E0518]: attribute should be applied to function or closure
    --> src/june_2016/section_13.rs:2722:5
     |
2722 |       #[inline]
     |       ^^^^^^^^^
2723 | /     let reducer = |i: ESInput<I>, accumulator: Accumulator| -> ESParseResult<I, ()> {
2724 | |         case_clause(i, &params).bind(|i, rhs| {
2725 | |             accumulator.borrow_mut().add_item(rhs);
2726 | |             i.ret(())
2727 | |         })
2728 | |     };
     | |______- not a function or closure

error[E0518]: attribute should be applied to function or closure
   --> src/june_2016/section_14.rs:498:5
    |
498 |       #[inline]
    |       ^^^^^^^^^
499 | /     let reducer = |i: ESInput<I>, accumulator: Accumulator| -> ESParseResult<I, ()> {
500 | |         formal_parameter(i, &params).bind(|i, rhs| {
501 | |             accumulator.borrow_mut().add_item(rhs);
502 | |             i.ret(())
503 | |         })
504 | |     };
    | |______- not a function or closure

error[E0518]: attribute should be applied to function or closure
    --> src/june_2016/section_14.rs:1320:5
     |
1320 |       #[inline]
     |       ^^^^^^^^^
1321 | /     let reducer = |i: ESInput<I>, accumulator: Accumulator| -> ESParseResult<I, ()> {
1322 | |         class_element(i, &params).bind(|i, rhs| {
1323 | |             accumulator.borrow_mut().add_item(rhs);
1324 | |             i.ret(())
1325 | |         })
1326 | |     };
     | |______- not a function or closure

error[E0554]: `#![feature]` may not be used on the stable release channel
 --> src/lib.rs:2:12
  |
2 | #![feature(unicode)]
  |            ^^^^^^^

error[E0635]: unknown feature `unicode`
 --> src/lib.rs:2:12
  |
2 | #![feature(unicode)]
  |            ^^^^^^^

warning: trait objects without an explicit `dyn` are deprecated
   --> src/parsers/mod.rs:171:18
    |
171 |     current: Box<::std::error::Error>,
    |                  ^^^^^^^^^^^^^^^^^^^
    |
    = note: `#[warn(bare_trait_objects)]` on by default
    = warning: this is accepted in the current edition (Rust 2015) but is a hard error in Rust 2021!
    = note: for more information, see <https://doc.rust-lang.org/nightly/edition-guide/rust-2021/warnings-promoted-to-error.html>
help: use `dyn`
    |
171 |     current: Box<dyn (::std::error::Error)>,
    |                  +++++                   +

warning: trait objects without an explicit `dyn` are deprecated
   --> src/parsers/mod.rs:235:42
    |
235 | struct ErrorChainIter<'a>(pub Option<&'a ::std::error::Error>);
    |                                          ^^^^^^^^^^^^^^^^^^^
    |
    = warning: this is accepted in the current edition (Rust 2015) but is a hard error in Rust 2021!
    = note: for more information, see <https://doc.rust-lang.org/nightly/edition-guide/rust-2021/warnings-promoted-to-error.html>
help: use `dyn`
    |
235 | struct ErrorChainIter<'a>(pub Option<&'a dyn (::std::error::Error)>);
    |                                          +++++                   +

warning: trait objects without an explicit `dyn` are deprecated
  --> src/june_2016/section_15.rs:25:16
   |
25 |     Custom(Box<ScriptTrait>),
   |                ^^^^^^^^^^^
   |
   = warning: this is accepted in the current edition (Rust 2015) but is a hard error in Rust 2021!
   = note: for more information, see <https://doc.rust-lang.org/nightly/edition-guide/rust-2021/warnings-promoted-to-error.html>
help: use `dyn`
   |
25 -     Custom(Box<ScriptTrait>),
25 +     Custom(Box<dyn ScriptTrait>),
   | 

warning: trait objects without an explicit `dyn` are deprecated
  --> src/parsers/mod.rs:62:32
   |
62 |     fn cause(&self) -> Option<&::std::error::Error> {
   |                                ^^^^^^^^^^^^^^^^^^^
   |
   = warning: this is accepted in the current edition (Rust 2015) but is a hard error in Rust 2021!
   = note: for more information, see <https://doc.rust-lang.org/nightly/edition-guide/rust-2021/warnings-promoted-to-error.html>
help: use `dyn`
   |
62 |     fn cause(&self) -> Option<&dyn (::std::error::Error)> {
   |                                +++++                   +

warning: trait objects without an explicit `dyn` are deprecated
   --> src/parsers/mod.rs:136:32
    |
136 |     fn cause(&self) -> Option<&::std::error::Error> {
    |                                ^^^^^^^^^^^^^^^^^^^
    |
    = warning: this is accepted in the current edition (Rust 2015) but is a hard error in Rust 2021!
    = note: for more information, see <https://doc.rust-lang.org/nightly/edition-guide/rust-2021/warnings-promoted-to-error.html>
help: use `dyn`
    |
136 |     fn cause(&self) -> Option<&dyn (::std::error::Error)> {
    |                                +++++                   +

warning: trait objects without an explicit `dyn` are deprecated
   --> src/parsers/mod.rs:210:32
    |
210 |     fn cause(&self) -> Option<&::std::error::Error> {
    |                                ^^^^^^^^^^^^^^^^^^^
    |
    = warning: this is accepted in the current edition (Rust 2015) but is a hard error in Rust 2021!
    = note: for more information, see <https://doc.rust-lang.org/nightly/edition-guide/rust-2021/warnings-promoted-to-error.html>
help: use `dyn`
    |
210 |     fn cause(&self) -> Option<&dyn (::std::error::Error)> {
    |                                +++++                   +

warning: trait objects without an explicit `dyn` are deprecated
   --> src/parsers/mod.rs:238:21
    |
238 |     type Item = &'a ::std::error::Error;
    |                     ^^^^^^^^^^^^^^^^^^^
    |
    = warning: this is accepted in the current edition (Rust 2015) but is a hard error in Rust 2021!
    = note: for more information, see <https://doc.rust-lang.org/nightly/edition-guide/rust-2021/warnings-promoted-to-error.html>
help: use `dyn`
    |
238 |     type Item = &'a dyn (::std::error::Error);
    |                     +++++                   +

warning: trait objects without an explicit `dyn` are deprecated
   --> src/parsers/mod.rs:240:45
    |
240 |     fn next<'b>(&'b mut self) -> Option<&'a ::std::error::Error> {
    |                                             ^^^^^^^^^^^^^^^^^^^
    |
    = warning: this is accepted in the current edition (Rust 2015) but is a hard error in Rust 2021!
    = note: for more information, see <https://doc.rust-lang.org/nightly/edition-guide/rust-2021/warnings-promoted-to-error.html>
help: use `dyn`
    |
240 |     fn next<'b>(&'b mut self) -> Option<&'a dyn (::std::error::Error)> {
    |                                             +++++                   +

warning: trait objects without an explicit `dyn` are deprecated
  --> src/june_2016/section_15.rs:28:33
   |
28 | type ScriptTraitParser<I> = Box<FnMut(ESInput<I>) -> ESParseResult<I, Box<ScriptTrait>>>;
   |                                 ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
   |
   = warning: this is accepted in the current edition (Rust 2015) but is a hard error in Rust 2021!
   = note: for more information, see <https://doc.rust-lang.org/nightly/edition-guide/rust-2021/warnings-promoted-to-error.html>
help: use `dyn`
   |
28 - type ScriptTraitParser<I> = Box<FnMut(ESInput<I>) -> ESParseResult<I, Box<ScriptTrait>>>;
28 + type ScriptTraitParser<I> = Box<dyn FnMut(ESInput<I>) -> ESParseResult<I, Box<ScriptTrait>>>;
   | 

warning: trait objects without an explicit `dyn` are deprecated
  --> src/june_2016/section_15.rs:28:75
   |
28 | type ScriptTraitParser<I> = Box<FnMut(ESInput<I>) -> ESParseResult<I, Box<ScriptTrait>>>;
   |                                                                           ^^^^^^^^^^^
   |
   = warning: this is accepted in the current edition (Rust 2015) but is a hard error in Rust 2021!
   = note: for more information, see <https://doc.rust-lang.org/nightly/edition-guide/rust-2021/warnings-promoted-to-error.html>
help: use `dyn`
   |
28 - type ScriptTraitParser<I> = Box<FnMut(ESInput<I>) -> ESParseResult<I, Box<ScriptTrait>>>;
28 + type ScriptTraitParser<I> = Box<FnMut(ESInput<I>) -> ESParseResult<I, Box<dyn ScriptTrait>>>;
   | 

warning: use of deprecated associated function `std::error::Error::description`: use the Display impl or to_string()
  --> src/parsers/mod.rs:57:51
   |
57 |             ESParseError::Failure(ref err) => err.description(),
   |                                                   ^^^^^^^^^^^
   |
   = note: `#[warn(deprecated)]` on by default

warning: use of deprecated associated function `std::error::Error::description`: use the Display impl or to_string()
  --> src/parsers/mod.rs:58:49
   |
58 |             ESParseError::Error(ref err) => err.description(),
   |                                                 ^^^^^^^^^^^

warning: use of deprecated associated function `std::error::Error::cause`: replaced by Error::source, which can support downcasting
  --> src/parsers/mod.rs:64:51
   |
64 |             ESParseError::Failure(ref err) => err.cause(),
   |                                                   ^^^^^

warning: use of deprecated associated function `std::error::Error::cause`: replaced by Error::source, which can support downcasting
  --> src/parsers/mod.rs:65:49
   |
65 |             ESParseError::Error(ref err) => err.cause(),
   |                                                 ^^^^^

warning: use of deprecated associated function `std::error::Error::description`: use the Display impl or to_string()
   --> src/parsers/mod.rs:132:68
    |
132 |             ESError::SyntaxError(ref syntax_error) => syntax_error.description(),
    |                                                                    ^^^^^^^^^^^

warning: use of deprecated associated function `std::error::Error::cause`: replaced by Error::source, which can support downcasting
   --> src/parsers/mod.rs:138:68
    |
138 |             ESError::SyntaxError(ref syntax_error) => syntax_error.cause(),
    |                                                                    ^^^^^

warning: use of deprecated associated function `std::error::Error::description`: use the Display impl or to_string()
   --> src/parsers/mod.rs:207:22
    |
207 |         self.current.description()
    |                      ^^^^^^^^^^^

warning: use of deprecated associated function `std::error::Error::cause`: replaced by Error::source, which can support downcasting
   --> src/parsers/mod.rs:213:34
    |
213 |             None => self.current.cause(),
    |                                  ^^^^^

warning: use of deprecated associated function `std::error::Error::cause`: replaced by Error::source, which can support downcasting
   --> src/parsers/mod.rs:243:28
    |
243 |                 self.0 = e.cause();
    |                            ^^^^^

warning: unreachable statement
   --> src/parsers/mod.rs:813:9
    |
791 | /         match ::std::str::from_utf8(&internal_buf) {
792 | |             Err(_) => {
793 | |                 // not valid_utf8
794 | |                 result = None;
...   |
810 | |             }
811 | |         }
    | |_________- any code following this `match` expression is unreachable, as all arms diverge
812 | 
813 |           unreachable!();
    |           ^^^^^^^^^^^^^^ unreachable statement
    |
    = note: `#[warn(unreachable_code)]` on by default
    = note: this warning originates in the macro `unreachable` (in Nightly builds, run with -Z macro-backtrace for more info)

error[E0599]: no method named `is_xid_start` found for type `char` in the current scope
   --> src/june_2016/section_11.rs:399:14
    |
399 |         if c.is_xid_start() {
    |              ^^^^^^^^^^^^ method not found in `char`

error[E0599]: no method named `is_xid_continue` found for type `char` in the current scope
   --> src/june_2016/section_11.rs:454:14
    |
454 |         if c.is_xid_continue() {
    |              ^^^^^^^^^^^^^^^ method not found in `char`

warning: unused import: `Buffer`
  --> src/parsers/mod.rs:22:20
   |
22 | use chomp::types::{Buffer, Input, ParseResult, U8Input};
   |                    ^^^^^^

Some errors have detailed explanations: E0518, E0554, E0599, E0635.
For more information about an error, try `rustc --explain E0518`.
warning: `esparser` (lib) generated 32 warnings
error: could not compile `esparser` due to 26 previous errors; 32 warnings emitted