Problems reported:

parser/error_recovery/reserved_words_class_methods:2:3: Variables must be declared using the keywords 'const', 'final', 'var' or a type name.
  int assert(int x) {
  ^^^

parser/error_recovery/reserved_words_class_methods:2:3: Expected ';' after this.
  int assert(int x) {
  ^^^

parser/error_recovery/reserved_words_class_methods:2:7: Expected a class member, but got 'assert'.
  int assert(int x) {
      ^^^^^^

parser/error_recovery/reserved_words_class_methods:2:13: Expected an identifier, but got '('.
  int assert(int x) {
            ^

parser/error_recovery/reserved_words_class_methods:4:12: `assert` can't be used as an expression.
    return assert(x-1) + 1;
           ^^^^^^

parser/error_recovery/reserved_words_class_methods:7:3: Variables must be declared using the keywords 'const', 'final', 'var' or a type name.
  int break(int x) {
  ^^^

parser/error_recovery/reserved_words_class_methods:7:3: Expected ';' after this.
  int break(int x) {
  ^^^

parser/error_recovery/reserved_words_class_methods:7:7: Expected a class member, but got 'break'.
  int break(int x) {
      ^^^^^

parser/error_recovery/reserved_words_class_methods:7:12: Expected an identifier, but got '('.
  int break(int x) {
           ^

parser/error_recovery/reserved_words_class_methods:9:12: Expected an identifier, but got 'break'.
    return break(x-1) + 1;
           ^^^^^

parser/error_recovery/reserved_words_class_methods:9:12: Expected ';' after this.
    return break(x-1) + 1;
           ^^^^^

parser/error_recovery/reserved_words_class_methods:9:12: A break statement can't be used outside of a loop or switch statement.
    return break(x-1) + 1;
           ^^^^^

parser/error_recovery/reserved_words_class_methods:9:12: Expected ';' after this.
    return break(x-1) + 1;
           ^^^^^

parser/error_recovery/reserved_words_class_methods:12:3: Variables must be declared using the keywords 'const', 'final', 'var' or a type name.
  int case(int x) {
  ^^^

parser/error_recovery/reserved_words_class_methods:12:3: Expected ';' after this.
  int case(int x) {
  ^^^

parser/error_recovery/reserved_words_class_methods:12:7: Expected a class member, but got 'case'.
  int case(int x) {
      ^^^^

parser/error_recovery/reserved_words_class_methods:12:11: Expected an identifier, but got '('.
  int case(int x) {
          ^

parser/error_recovery/reserved_words_class_methods:14:12: Expected an identifier, but got 'case'.
    return case(x-1) + 1;
           ^^^^

parser/error_recovery/reserved_words_class_methods:17:3: Variables must be declared using the keywords 'const', 'final', 'var' or a type name.
  int catch(int x) {
  ^^^

parser/error_recovery/reserved_words_class_methods:17:3: Expected ';' after this.
  int catch(int x) {
  ^^^

parser/error_recovery/reserved_words_class_methods:17:7: Expected a class member, but got 'catch'.
  int catch(int x) {
      ^^^^^

parser/error_recovery/reserved_words_class_methods:17:12: Expected an identifier, but got '('.
  int catch(int x) {
           ^

parser/error_recovery/reserved_words_class_methods:19:12: Expected an identifier, but got 'catch'.
    return catch(x-1) + 1;
           ^^^^^

parser/error_recovery/reserved_words_class_methods:22:3: Variables must be declared using the keywords 'const', 'final', 'var' or a type name.
  int class(int x) {
  ^^^

parser/error_recovery/reserved_words_class_methods:22:3: Expected ';' after this.
  int class(int x) {
  ^^^

parser/error_recovery/reserved_words_class_methods:22:7: Classes can't be declared inside other classes.
  int class(int x) {
      ^^^^^

parser/error_recovery/reserved_words_class_methods:22:12: Expected an identifier, but got '('.
  int class(int x) {
           ^

parser/error_recovery/reserved_words_class_methods:24:12: Expected an identifier, but got 'class'.
    return class(x-1) + 1;
           ^^^^^

parser/error_recovery/reserved_words_class_methods:27:3: Variables must be declared using the keywords 'const', 'final', 'var' or a type name.
  int const(int x) {
  ^^^

parser/error_recovery/reserved_words_class_methods:27:3: Expected ';' after this.
  int const(int x) {
  ^^^

parser/error_recovery/reserved_words_class_methods:27:12: Expected an identifier, but got '('.
  int const(int x) {
           ^

parser/error_recovery/reserved_words_class_methods:29:17: Expected an identifier, but got '('.
    return const(x-1) + 1;
                ^

parser/error_recovery/reserved_words_class_methods:27:7: Getters, setters and methods can't be declared to be 'const'.
  int const(int x) {
      ^^^^^

parser/error_recovery/reserved_words_class_methods:32:3: Variables must be declared using the keywords 'const', 'final', 'var' or a type name.
  int continue(int x) {
  ^^^

parser/error_recovery/reserved_words_class_methods:32:3: Expected ';' after this.
  int continue(int x) {
  ^^^

parser/error_recovery/reserved_words_class_methods:32:7: Expected a class member, but got 'continue'.
  int continue(int x) {
      ^^^^^^^^

parser/error_recovery/reserved_words_class_methods:32:15: Expected an identifier, but got '('.
  int continue(int x) {
              ^

parser/error_recovery/reserved_words_class_methods:34:12: Expected an identifier, but got 'continue'.
    return continue(x-1) + 1;
           ^^^^^^^^

parser/error_recovery/reserved_words_class_methods:34:12: Expected ';' after this.
    return continue(x-1) + 1;
           ^^^^^^^^

parser/error_recovery/reserved_words_class_methods:34:12: A continue statement can't be used outside of a loop or switch statement.
    return continue(x-1) + 1;
           ^^^^^^^^

parser/error_recovery/reserved_words_class_methods:34:12: Expected ';' after this.
    return continue(x-1) + 1;
           ^^^^^^^^

parser/error_recovery/reserved_words_class_methods:37:3: Variables must be declared using the keywords 'const', 'final', 'var' or a type name.
  int default(int x) {
  ^^^

parser/error_recovery/reserved_words_class_methods:37:3: Expected ';' after this.
  int default(int x) {
  ^^^

parser/error_recovery/reserved_words_class_methods:37:7: Expected a class member, but got 'default'.
  int default(int x) {
      ^^^^^^^

parser/error_recovery/reserved_words_class_methods:37:14: Expected an identifier, but got '('.
  int default(int x) {
             ^

parser/error_recovery/reserved_words_class_methods:39:12: Expected an identifier, but got 'default'.
    return default(x-1) + 1;
           ^^^^^^^

parser/error_recovery/reserved_words_class_methods:42:3: Variables must be declared using the keywords 'const', 'final', 'var' or a type name.
  int do(int x) {
  ^^^

parser/error_recovery/reserved_words_class_methods:42:3: Expected ';' after this.
  int do(int x) {
  ^^^

parser/error_recovery/reserved_words_class_methods:42:7: Expected a class member, but got 'do'.
  int do(int x) {
      ^^

parser/error_recovery/reserved_words_class_methods:42:9: Expected an identifier, but got '('.
  int do(int x) {
        ^

parser/error_recovery/reserved_words_class_methods:44:12: Expected an identifier, but got 'do'.
    return do(x-1) + 1;
           ^^

parser/error_recovery/reserved_words_class_methods:44:12: Expected ';' after this.
    return do(x-1) + 1;
           ^^

parser/error_recovery/reserved_words_class_methods:45:3: Expected 'while' before this.
  }
  ^

parser/error_recovery/reserved_words_class_methods:45:3: Expected to find '('.
  }
  ^

parser/error_recovery/reserved_words_class_methods:45:3: Expected an identifier, but got '}'.
  }
  ^

parser/error_recovery/reserved_words_class_methods:45:3: Expected ';' after this.
  }
  ^

parser/error_recovery/reserved_words_class_methods:47:3: Variables must be declared using the keywords 'const', 'final', 'var' or a type name.
  int else(int x) {
  ^^^

parser/error_recovery/reserved_words_class_methods:47:3: Expected ';' after this.
  int else(int x) {
  ^^^

parser/error_recovery/reserved_words_class_methods:47:7: Expected a class member, but got 'else'.
  int else(int x) {
      ^^^^

parser/error_recovery/reserved_words_class_methods:47:11: Expected an identifier, but got '('.
  int else(int x) {
          ^

parser/error_recovery/reserved_words_class_methods:49:12: Expected an identifier, but got 'else'.
    return else(x-1) + 1;
           ^^^^

parser/error_recovery/reserved_words_class_methods:49:12: Expected ';' after this.
    return else(x-1) + 1;
           ^^^^

parser/error_recovery/reserved_words_class_methods:49:12: Expected an identifier, but got 'else'.
    return else(x-1) + 1;
           ^^^^

parser/error_recovery/reserved_words_class_methods:49:12: Expected ';' after this.
    return else(x-1) + 1;
           ^^^^

parser/error_recovery/reserved_words_class_methods:49:12: Unexpected token ';'.
    return else(x-1) + 1;
           ^^^^

parser/error_recovery/reserved_words_class_methods:52:3: Variables must be declared using the keywords 'const', 'final', 'var' or a type name.
  int enum(int x) {
  ^^^

parser/error_recovery/reserved_words_class_methods:52:3: Expected ';' after this.
  int enum(int x) {
  ^^^

parser/error_recovery/reserved_words_class_methods:52:7: Enums can't be declared inside classes.
  int enum(int x) {
      ^^^^

parser/error_recovery/reserved_words_class_methods:52:11: Expected an identifier, but got '('.
  int enum(int x) {
          ^

parser/error_recovery/reserved_words_class_methods:54:12: Expected an identifier, but got 'enum'.
    return enum(x-1) + 1;
           ^^^^

parser/error_recovery/reserved_words_class_methods:57:3: Variables must be declared using the keywords 'const', 'final', 'var' or a type name.
  int extends(int x) {
  ^^^

parser/error_recovery/reserved_words_class_methods:57:3: Expected ';' after this.
  int extends(int x) {
  ^^^

parser/error_recovery/reserved_words_class_methods:57:7: Expected a class member, but got 'extends'.
  int extends(int x) {
      ^^^^^^^

parser/error_recovery/reserved_words_class_methods:57:14: Expected an identifier, but got '('.
  int extends(int x) {
             ^

parser/error_recovery/reserved_words_class_methods:59:12: Expected an identifier, but got 'extends'.
    return extends(x-1) + 1;
           ^^^^^^^

parser/error_recovery/reserved_words_class_methods:62:3: Variables must be declared using the keywords 'const', 'final', 'var' or a type name.
  int false(int x) {
  ^^^

parser/error_recovery/reserved_words_class_methods:62:3: Expected ';' after this.
  int false(int x) {
  ^^^

parser/error_recovery/reserved_words_class_methods:62:7: Expected a class member, but got 'false'.
  int false(int x) {
      ^^^^^

parser/error_recovery/reserved_words_class_methods:62:12: Expected an identifier, but got '('.
  int false(int x) {
           ^

parser/error_recovery/reserved_words_class_methods:67:3: Variables must be declared using the keywords 'const', 'final', 'var' or a type name.
  int final(int x) {
  ^^^

parser/error_recovery/reserved_words_class_methods:67:3: Expected ';' after this.
  int final(int x) {
  ^^^

parser/error_recovery/reserved_words_class_methods:67:7: Can't have modifier 'final' here.
  int final(int x) {
      ^^^^^

parser/error_recovery/reserved_words_class_methods:67:12: Expected an identifier, but got '('.
  int final(int x) {
           ^

parser/error_recovery/reserved_words_class_methods:69:12: Expected an identifier, but got 'final'.
    return final(x-1) + 1;
           ^^^^^

parser/error_recovery/reserved_words_class_methods:69:12: Expected ';' after this.
    return final(x-1) + 1;
           ^^^^^

parser/error_recovery/reserved_words_class_methods:69:17: Expected an identifier, but got '('.
    return final(x-1) + 1;
                ^

parser/error_recovery/reserved_words_class_methods:69:18: Expected ';' after this.
    return final(x-1) + 1;
                 ^

parser/error_recovery/reserved_words_class_methods:69:20: Expected ';' after this.
    return final(x-1) + 1;
                   ^

parser/error_recovery/reserved_words_class_methods:69:21: Expected an identifier, but got ')'.
    return final(x-1) + 1;
                    ^

parser/error_recovery/reserved_words_class_methods:69:21: Expected ';' after this.
    return final(x-1) + 1;
                    ^

parser/error_recovery/reserved_words_class_methods:69:21: Unexpected token ';'.
    return final(x-1) + 1;
                    ^

parser/error_recovery/reserved_words_class_methods:69:23: '+' is not a prefix operator.
    return final(x-1) + 1;
                      ^

parser/error_recovery/reserved_words_class_methods:72:3: Variables must be declared using the keywords 'const', 'final', 'var' or a type name.
  int finally(int x) {
  ^^^

parser/error_recovery/reserved_words_class_methods:72:3: Expected ';' after this.
  int finally(int x) {
  ^^^

parser/error_recovery/reserved_words_class_methods:72:7: Expected a class member, but got 'finally'.
  int finally(int x) {
      ^^^^^^^

parser/error_recovery/reserved_words_class_methods:72:14: Expected an identifier, but got '('.
  int finally(int x) {
             ^

parser/error_recovery/reserved_words_class_methods:74:12: Expected an identifier, but got 'finally'.
    return finally(x-1) + 1;
           ^^^^^^^

parser/error_recovery/reserved_words_class_methods:77:3: Variables must be declared using the keywords 'const', 'final', 'var' or a type name.
  int for(int x) {
  ^^^

parser/error_recovery/reserved_words_class_methods:77:3: Expected ';' after this.
  int for(int x) {
  ^^^

parser/error_recovery/reserved_words_class_methods:77:7: Expected a class member, but got 'for'.
  int for(int x) {
      ^^^

parser/error_recovery/reserved_words_class_methods:77:10: Expected an identifier, but got '('.
  int for(int x) {
         ^

parser/error_recovery/reserved_words_class_methods:79:12: Expected an identifier, but got 'for'.
    return for(x-1) + 1;
           ^^^

parser/error_recovery/reserved_words_class_methods:79:12: Expected ';' after this.
    return for(x-1) + 1;
           ^^^

parser/error_recovery/reserved_words_class_methods:79:18: Expected ';' after this.
    return for(x-1) + 1;
                 ^

parser/error_recovery/reserved_words_class_methods:79:19: Expected an identifier, but got ')'.
    return for(x-1) + 1;
                  ^

parser/error_recovery/reserved_words_class_methods:79:19: Expected ';' after this.
    return for(x-1) + 1;
                  ^

parser/error_recovery/reserved_words_class_methods:79:21: '+' is not a prefix operator.
    return for(x-1) + 1;
                    ^

parser/error_recovery/reserved_words_class_methods:82:3: Variables must be declared using the keywords 'const', 'final', 'var' or a type name.
  int if(int x) {
  ^^^

parser/error_recovery/reserved_words_class_methods:82:3: Expected ';' after this.
  int if(int x) {
  ^^^

parser/error_recovery/reserved_words_class_methods:82:7: Expected a class member, but got 'if'.
  int if(int x) {
      ^^

parser/error_recovery/reserved_words_class_methods:82:9: Expected an identifier, but got '('.
  int if(int x) {
        ^

parser/error_recovery/reserved_words_class_methods:84:12: Expected an identifier, but got 'if'.
    return if(x-1) + 1;
           ^^

parser/error_recovery/reserved_words_class_methods:84:12: Expected ';' after this.
    return if(x-1) + 1;
           ^^

parser/error_recovery/reserved_words_class_methods:84:20: '+' is not a prefix operator.
    return if(x-1) + 1;
                   ^

parser/error_recovery/reserved_words_class_methods:87:3: Variables must be declared using the keywords 'const', 'final', 'var' or a type name.
  int in(int x) {
  ^^^

parser/error_recovery/reserved_words_class_methods:87:3: Expected ';' after this.
  int in(int x) {
  ^^^

parser/error_recovery/reserved_words_class_methods:87:7: Expected a class member, but got 'in'.
  int in(int x) {
      ^^

parser/error_recovery/reserved_words_class_methods:87:9: Expected an identifier, but got '('.
  int in(int x) {
        ^

parser/error_recovery/reserved_words_class_methods:89:12: Expected an identifier, but got 'in'.
    return in(x-1) + 1;
           ^^

parser/error_recovery/reserved_words_class_methods:92:3: Variables must be declared using the keywords 'const', 'final', 'var' or a type name.
  int is(int x) {
  ^^^

parser/error_recovery/reserved_words_class_methods:92:3: Expected ';' after this.
  int is(int x) {
  ^^^

parser/error_recovery/reserved_words_class_methods:92:7: Expected a class member, but got 'is'.
  int is(int x) {
      ^^

parser/error_recovery/reserved_words_class_methods:92:9: Expected an identifier, but got '('.
  int is(int x) {
        ^

parser/error_recovery/reserved_words_class_methods:94:12: Expected an identifier, but got 'is'.
    return is(x-1) + 1;
           ^^

parser/error_recovery/reserved_words_class_methods:94:14: Expected a type, but got '('.
    return is(x-1) + 1;
             ^

parser/error_recovery/reserved_words_class_methods:94:14: Expected ';' after this.
    return is(x-1) + 1;
             ^

parser/error_recovery/reserved_words_class_methods:97:3: Variables must be declared using the keywords 'const', 'final', 'var' or a type name.
  int new(int x) {
  ^^^

parser/error_recovery/reserved_words_class_methods:97:3: Expected ';' after this.
  int new(int x) {
  ^^^

parser/error_recovery/reserved_words_class_methods:97:7: Expected a class member, but got 'new'.
  int new(int x) {
      ^^^

parser/error_recovery/reserved_words_class_methods:97:10: Expected an identifier, but got '('.
  int new(int x) {
         ^

parser/error_recovery/reserved_words_class_methods:99:15: Expected an identifier, but got '('.
    return new(x-1) + 1;
              ^

parser/error_recovery/reserved_words_class_methods:102:3: Variables must be declared using the keywords 'const', 'final', 'var' or a type name.
  int null(int x) {
  ^^^

parser/error_recovery/reserved_words_class_methods:102:3: Expected ';' after this.
  int null(int x) {
  ^^^

parser/error_recovery/reserved_words_class_methods:102:7: Expected a class member, but got 'null'.
  int null(int x) {
      ^^^^

parser/error_recovery/reserved_words_class_methods:102:11: Expected an identifier, but got '('.
  int null(int x) {
          ^

parser/error_recovery/reserved_words_class_methods:107:3: Variables must be declared using the keywords 'const', 'final', 'var' or a type name.
  int rethrow(int x) {
  ^^^

parser/error_recovery/reserved_words_class_methods:107:3: Expected ';' after this.
  int rethrow(int x) {
  ^^^

parser/error_recovery/reserved_words_class_methods:107:7: Expected a class member, but got 'rethrow'.
  int rethrow(int x) {
      ^^^^^^^

parser/error_recovery/reserved_words_class_methods:107:14: Expected an identifier, but got '('.
  int rethrow(int x) {
             ^

parser/error_recovery/reserved_words_class_methods:109:12: Expected an identifier, but got 'rethrow'.
    return rethrow(x-1) + 1;
           ^^^^^^^

parser/error_recovery/reserved_words_class_methods:112:3: Variables must be declared using the keywords 'const', 'final', 'var' or a type name.
  int return(int x) {
  ^^^

parser/error_recovery/reserved_words_class_methods:112:3: Expected ';' after this.
  int return(int x) {
  ^^^

parser/error_recovery/reserved_words_class_methods:112:7: Expected a class member, but got 'return'.
  int return(int x) {
      ^^^^^^

parser/error_recovery/reserved_words_class_methods:112:13: Expected an identifier, but got '('.
  int return(int x) {
            ^

parser/error_recovery/reserved_words_class_methods:114:12: Unexpected token 'return'.
    return return(x-1) + 1;
           ^^^^^^

parser/error_recovery/reserved_words_class_methods:117:3: Variables must be declared using the keywords 'const', 'final', 'var' or a type name.
  int super(int x) {
  ^^^

parser/error_recovery/reserved_words_class_methods:117:3: Expected ';' after this.
  int super(int x) {
  ^^^

parser/error_recovery/reserved_words_class_methods:117:7: Expected a class member, but got 'super'.
  int super(int x) {
      ^^^^^

parser/error_recovery/reserved_words_class_methods:117:12: Expected an identifier, but got '('.
  int super(int x) {
           ^

parser/error_recovery/reserved_words_class_methods:122:3: Variables must be declared using the keywords 'const', 'final', 'var' or a type name.
  int switch(int x) {
  ^^^

parser/error_recovery/reserved_words_class_methods:122:3: Expected ';' after this.
  int switch(int x) {
  ^^^

parser/error_recovery/reserved_words_class_methods:122:7: Expected a class member, but got 'switch'.
  int switch(int x) {
      ^^^^^^

parser/error_recovery/reserved_words_class_methods:122:13: Expected an identifier, but got '('.
  int switch(int x) {
            ^

parser/error_recovery/reserved_words_class_methods:124:12: Expected an identifier, but got 'switch'.
    return switch(x-1) + 1;
           ^^^^^^

parser/error_recovery/reserved_words_class_methods:124:12: Expected ';' after this.
    return switch(x-1) + 1;
           ^^^^^^

parser/error_recovery/reserved_words_class_methods:124:22: A switch statement must have a body, even if it is empty.
    return switch(x-1) + 1;
                     ^

parser/error_recovery/reserved_words_class_methods:124:24: '+' is not a prefix operator.
    return switch(x-1) + 1;
                       ^

parser/error_recovery/reserved_words_class_methods:127:7: Expected an identifier, but got 'this'.
  int this(int x) {
      ^^^^

parser/error_recovery/reserved_words_class_methods:127:7: Expected ';' after this.
  int this(int x) {
      ^^^^

parser/error_recovery/reserved_words_class_methods:127:11: Expected an identifier, but got '('.
  int this(int x) {
          ^

parser/error_recovery/reserved_words_class_methods:132:3: Variables must be declared using the keywords 'const', 'final', 'var' or a type name.
  int throw(int x) {
  ^^^

parser/error_recovery/reserved_words_class_methods:132:3: Expected ';' after this.
  int throw(int x) {
  ^^^

parser/error_recovery/reserved_words_class_methods:132:7: Expected a class member, but got 'throw'.
  int throw(int x) {
      ^^^^^

parser/error_recovery/reserved_words_class_methods:132:12: Expected an identifier, but got '('.
  int throw(int x) {
           ^

parser/error_recovery/reserved_words_class_methods:137:3: Variables must be declared using the keywords 'const', 'final', 'var' or a type name.
  int true(int x) {
  ^^^

parser/error_recovery/reserved_words_class_methods:137:3: Expected ';' after this.
  int true(int x) {
  ^^^

parser/error_recovery/reserved_words_class_methods:137:7: Expected a class member, but got 'true'.
  int true(int x) {
      ^^^^

parser/error_recovery/reserved_words_class_methods:137:11: Expected an identifier, but got '('.
  int true(int x) {
          ^

parser/error_recovery/reserved_words_class_methods:142:3: Variables must be declared using the keywords 'const', 'final', 'var' or a type name.
  int try(int x) {
  ^^^

parser/error_recovery/reserved_words_class_methods:142:3: Expected ';' after this.
  int try(int x) {
  ^^^

parser/error_recovery/reserved_words_class_methods:142:7: Expected a class member, but got 'try'.
  int try(int x) {
      ^^^

parser/error_recovery/reserved_words_class_methods:142:10: Expected an identifier, but got '('.
  int try(int x) {
         ^

parser/error_recovery/reserved_words_class_methods:144:12: Expected an identifier, but got 'try'.
    return try(x-1) + 1;
           ^^^

parser/error_recovery/reserved_words_class_methods:144:12: Expected ';' after this.
    return try(x-1) + 1;
           ^^^

parser/error_recovery/reserved_words_class_methods:144:12: A try statement must have a body, even if it is empty.
    return try(x-1) + 1;
           ^^^

parser/error_recovery/reserved_words_class_methods:144:12: A try block must be followed by an 'on', 'catch', or 'finally' clause.
    return try(x-1) + 1;
           ^^^

parser/error_recovery/reserved_words_class_methods:147:3: Variables must be declared using the keywords 'const', 'final', 'var' or a type name.
  int var(int x) {
  ^^^

parser/error_recovery/reserved_words_class_methods:147:3: Expected ';' after this.
  int var(int x) {
  ^^^

parser/error_recovery/reserved_words_class_methods:147:7: The return type can't be 'var'.
  int var(int x) {
      ^^^

parser/error_recovery/reserved_words_class_methods:147:10: Expected an identifier, but got '('.
  int var(int x) {
         ^

parser/error_recovery/reserved_words_class_methods:149:12: Expected an identifier, but got 'var'.
    return var(x-1) + 1;
           ^^^

parser/error_recovery/reserved_words_class_methods:149:12: Expected ';' after this.
    return var(x-1) + 1;
           ^^^

parser/error_recovery/reserved_words_class_methods:149:15: Expected an identifier, but got '('.
    return var(x-1) + 1;
              ^

parser/error_recovery/reserved_words_class_methods:149:16: Expected ';' after this.
    return var(x-1) + 1;
               ^

parser/error_recovery/reserved_words_class_methods:149:18: Expected ';' after this.
    return var(x-1) + 1;
                 ^

parser/error_recovery/reserved_words_class_methods:149:19: Expected an identifier, but got ')'.
    return var(x-1) + 1;
                  ^

parser/error_recovery/reserved_words_class_methods:149:19: Expected ';' after this.
    return var(x-1) + 1;
                  ^

parser/error_recovery/reserved_words_class_methods:149:19: Unexpected token ';'.
    return var(x-1) + 1;
                  ^

parser/error_recovery/reserved_words_class_methods:149:21: '+' is not a prefix operator.
    return var(x-1) + 1;
                    ^

parser/error_recovery/reserved_words_class_methods:152:3: Variables must be declared using the keywords 'const', 'final', 'var' or a type name.
  int void(int x) {
  ^^^

parser/error_recovery/reserved_words_class_methods:152:3: Expected ';' after this.
  int void(int x) {
  ^^^

parser/error_recovery/reserved_words_class_methods:152:11: Expected an identifier, but got '('.
  int void(int x) {
          ^

parser/error_recovery/reserved_words_class_methods:154:12: Expected an identifier, but got 'void'.
    return void(x-1) + 1;
           ^^^^

parser/error_recovery/reserved_words_class_methods:154:12: Expected ';' after this.
    return void(x-1) + 1;
           ^^^^

parser/error_recovery/reserved_words_class_methods:154:16: Expected an identifier, but got '('.
    return void(x-1) + 1;
               ^

parser/error_recovery/reserved_words_class_methods:154:17: Expected ';' after this.
    return void(x-1) + 1;
                ^

parser/error_recovery/reserved_words_class_methods:154:19: Expected ';' after this.
    return void(x-1) + 1;
                  ^

parser/error_recovery/reserved_words_class_methods:154:20: Expected an identifier, but got ')'.
    return void(x-1) + 1;
                   ^

parser/error_recovery/reserved_words_class_methods:154:20: Expected ';' after this.
    return void(x-1) + 1;
                   ^

parser/error_recovery/reserved_words_class_methods:154:20: Unexpected token ';'.
    return void(x-1) + 1;
                   ^

parser/error_recovery/reserved_words_class_methods:154:22: '+' is not a prefix operator.
    return void(x-1) + 1;
                     ^

parser/error_recovery/reserved_words_class_methods:157:3: Variables must be declared using the keywords 'const', 'final', 'var' or a type name.
  int while(int x) {
  ^^^

parser/error_recovery/reserved_words_class_methods:157:3: Expected ';' after this.
  int while(int x) {
  ^^^

parser/error_recovery/reserved_words_class_methods:157:7: Expected a class member, but got 'while'.
  int while(int x) {
      ^^^^^

parser/error_recovery/reserved_words_class_methods:157:12: Expected an identifier, but got '('.
  int while(int x) {
           ^

parser/error_recovery/reserved_words_class_methods:159:12: Expected an identifier, but got 'while'.
    return while(x-1) + 1;
           ^^^^^

parser/error_recovery/reserved_words_class_methods:159:12: Expected ';' after this.
    return while(x-1) + 1;
           ^^^^^

parser/error_recovery/reserved_words_class_methods:159:23: '+' is not a prefix operator.
    return while(x-1) + 1;
                      ^

parser/error_recovery/reserved_words_class_methods:162:3: Variables must be declared using the keywords 'const', 'final', 'var' or a type name.
  int with(int x) {
  ^^^

parser/error_recovery/reserved_words_class_methods:162:3: Expected ';' after this.
  int with(int x) {
  ^^^

parser/error_recovery/reserved_words_class_methods:162:7: Expected a class member, but got 'with'.
  int with(int x) {
      ^^^^

parser/error_recovery/reserved_words_class_methods:162:11: Expected an identifier, but got '('.
  int with(int x) {
          ^

parser/error_recovery/reserved_words_class_methods:164:12: Expected an identifier, but got 'with'.
    return with(x-1) + 1;
           ^^^^

beginCompilationUnit(class)
  beginMetadataStar(class)
  endMetadataStar(0)
  beginClassOrNamedMixinApplicationPrelude(class)
    handleIdentifier(WrapperClass, classOrMixinDeclaration)
    handleNoTypeVariables({)
    beginClassDeclaration(class, null, WrapperClass)
      handleNoType(WrapperClass)
      handleClassExtends(null)
      handleClassNoWithClause()
      handleClassOrMixinImplements(null, 0)
      handleClassHeader(class, class, null)
      beginClassOrMixinBody(DeclarationKind.Class, {)
        beginMetadataStar(int)
        endMetadataStar(0)
        beginMember()
          handleRecoverableError(MissingConstFinalVarOrType, int, int)
          handleNoType({)
          handleIdentifier(int, fieldDeclaration)
          handleNoFieldInitializer(assert)
          handleRecoverableError(Message[ExpectedAfterButGot, Expected ';' after this., null, {string: ;}], int, int)
        endClassFields(null, null, null, null, 1, int, ;)
      endMember()
      beginMetadataStar(assert)
      endMetadataStar(0)
      beginMember()
        handleRecoverableError(Message[ExpectedClassMember, Expected a class member, but got 'assert'., null, {token: assert}], assert, assert)
        handleInvalidMember(assert)
      endMember()
      beginMetadataStar(()
      endMetadataStar(0)
      beginMember()
        beginMethod(null, null, null, null, null, ()
          handleNoType(assert)
          handleRecoverableError(Message[ExpectedIdentifier, Expected an identifier, but got '('., null, {token: (}], (, ()
          handleIdentifier(, methodDeclaration)
          handleNoTypeVariables(()
          beginFormalParameters((, MemberKind.NonStaticMethod)
            beginMetadataStar(int)
            endMetadataStar(0)
            beginFormalParameter(int, MemberKind.NonStaticMethod, null, null, null)
              handleIdentifier(int, typeReference)
              handleNoTypeArguments(x)
              handleType(int, null)
              handleIdentifier(x, formalParameterDeclaration)
              handleFormalParameterWithoutValue())
            endFormalParameter(null, null, x, null, null, FormalParameterKind.mandatory, MemberKind.NonStaticMethod)
          endFormalParameters(1, (, ), MemberKind.NonStaticMethod)
          handleNoInitializers()
          handleAsyncModifier(null, null)
          beginBlockFunctionBody({)
            beginIfStatement(if)
              handleIdentifier(x, expression)
              handleNoTypeArguments(==)
              handleNoArguments(==)
              handleSend(x, ==)
              beginBinaryExpression(==)
              handleLiteralInt(0)
              endBinaryExpression(==)
              handleParenthesizedCondition(()
              beginThenStatement(return)
                beginReturnStatement(return)
                  handleLiteralInt(42)
                endReturnStatement(true, return, ;)
              endThenStatement(;)
            endIfStatement(if, null)
            beginReturnStatement(return)
              beginAssert(assert, Assert.Expression)
                handleIdentifier(x, expression)
                handleNoTypeArguments(-)
                handleNoArguments(-)
                handleSend(x, -)
                beginBinaryExpression(-)
                handleLiteralInt(1)
                endBinaryExpression(-)
                handleRecoverableError(AssertAsExpression, assert, assert)
              endAssert(assert, Assert.Expression, (, null, +)
              beginBinaryExpression(+)
              handleLiteralInt(1)
              endBinaryExpression(+)
            endReturnStatement(true, return, ;)
          endBlockFunctionBody(2, {, })
        endClassMethod(null, , (, null, })
      endMember()
      beginMetadataStar(int)
      endMetadataStar(0)
      beginMember()
        handleRecoverableError(MissingConstFinalVarOrType, int, int)
        handleNoType(})
        handleIdentifier(int, fieldDeclaration)
        handleNoFieldInitializer(break)
        handleRecoverableError(Message[ExpectedAfterButGot, Expected ';' after this., null, {string: ;}], int, int)
      endClassFields(null, null, null, null, 1, int, ;)
    endMember()
    beginMetadataStar(break)
    endMetadataStar(0)
    beginMember()
      handleRecoverableError(Message[ExpectedClassMember, Expected a class member, but got 'break'., null, {token: break}], break, break)
      handleInvalidMember(break)
    endMember()
    beginMetadataStar(()
    endMetadataStar(0)
    beginMember()
      beginMethod(null, null, null, null, null, ()
        handleNoType(break)
        handleRecoverableError(Message[ExpectedIdentifier, Expected an identifier, but got '('., null, {token: (}], (, ()
        handleIdentifier(, methodDeclaration)
        handleNoTypeVariables(()
        beginFormalParameters((, MemberKind.NonStaticMethod)
          beginMetadataStar(int)
          endMetadataStar(0)
          beginFormalParameter(int, MemberKind.NonStaticMethod, null, null, null)
            handleIdentifier(int, typeReference)
            handleNoTypeArguments(x)
            handleType(int, null)
            handleIdentifier(x, formalParameterDeclaration)
            handleFormalParameterWithoutValue())
          endFormalParameter(null, null, x, null, null, FormalParameterKind.mandatory, MemberKind.NonStaticMethod)
        endFormalParameters(1, (, ), MemberKind.NonStaticMethod)
        handleNoInitializers()
        handleAsyncModifier(null, null)
        beginBlockFunctionBody({)
          beginIfStatement(if)
            handleIdentifier(x, expression)
            handleNoTypeArguments(==)
            handleNoArguments(==)
            handleSend(x, ==)
            beginBinaryExpression(==)
            handleLiteralInt(0)
            endBinaryExpression(==)
            handleParenthesizedCondition(()
            beginThenStatement(return)
              beginReturnStatement(return)
                handleLiteralInt(42)
              endReturnStatement(true, return, ;)
            endThenStatement(;)
          endIfStatement(if, null)
          beginReturnStatement(return)
            handleRecoverableError(Message[ExpectedIdentifier, Expected an identifier, but got 'break'., null, {token: break}], break, break)
            handleIdentifier(, expression)
            handleNoTypeArguments(break)
            handleNoArguments(break)
            handleSend(, break)
            handleRecoverableError(Message[ExpectedAfterButGot, Expected ';' after this., null, {string: ;}], break, break)
          endReturnStatement(true, return, ;)
          handleRecoverableError(BreakOutsideOfLoop, break, break)
          handleRecoverableError(Message[ExpectedAfterButGot, Expected ';' after this., null, {string: ;}], break, break)
          handleBreakStatement(false, break, ;)
          handleIdentifier(x, expression)
          handleNoTypeArguments(-)
          handleNoArguments(-)
          handleSend(x, -)
          beginBinaryExpression(-)
          handleLiteralInt(1)
          endBinaryExpression(-)
          handleParenthesizedExpression(()
          beginBinaryExpression(+)
          handleLiteralInt(1)
          endBinaryExpression(+)
          handleExpressionStatement(;)
        endBlockFunctionBody(4, {, })
      endClassMethod(null, , (, null, })
    endMember()
    beginMetadataStar(int)
    endMetadataStar(0)
    beginMember()
      handleRecoverableError(MissingConstFinalVarOrType, int, int)
      handleNoType(})
      handleIdentifier(int, fieldDeclaration)
      handleNoFieldInitializer(case)
      handleRecoverableError(Message[ExpectedAfterButGot, Expected ';' after this., null, {string: ;}], int, int)
    endClassFields(null, null, null, null, 1, int, ;)
  endMember()
  beginMetadataStar(case)
  endMetadataStar(0)
  beginMember()
    handleRecoverableError(Message[ExpectedClassMember, Expected a class member, but got 'case'., null, {token: case}], case, case)
    handleInvalidMember(case)
  endMember()
  beginMetadataStar(()
  endMetadataStar(0)
  beginMember()
    beginMethod(null, null, null, null, null, ()
      handleNoType(case)
      handleRecoverableError(Message[ExpectedIdentifier, Expected an identifier, but got '('., null, {token: (}], (, ()
      handleIdentifier(, methodDeclaration)
      handleNoTypeVariables(()
      beginFormalParameters((, MemberKind.NonStaticMethod)
        beginMetadataStar(int)
        endMetadataStar(0)
        beginFormalParameter(int, MemberKind.NonStaticMethod, null, null, null)
          handleIdentifier(int, typeReference)
          handleNoTypeArguments(x)
          handleType(int, null)
          handleIdentifier(x, formalParameterDeclaration)
          handleFormalParameterWithoutValue())
        endFormalParameter(null, null, x, null, null, FormalParameterKind.mandatory, MemberKind.NonStaticMethod)
      endFormalParameters(1, (, ), MemberKind.NonStaticMethod)
      handleNoInitializers()
      handleAsyncModifier(null, null)
      beginBlockFunctionBody({)
        beginIfStatement(if)
          handleIdentifier(x, expression)
          handleNoTypeArguments(==)
          handleNoArguments(==)
          handleSend(x, ==)
          beginBinaryExpression(==)
          handleLiteralInt(0)
          endBinaryExpression(==)
          handleParenthesizedCondition(()
          beginThenStatement(return)
            beginReturnStatement(return)
              handleLiteralInt(42)
            endReturnStatement(true, return, ;)
          endThenStatement(;)
        endIfStatement(if, null)
        beginReturnStatement(return)
          handleRecoverableError(Message[ExpectedIdentifier, Expected an identifier, but got 'case'., null, {token: case}], case, case)
          handleIdentifier(case, expression)
          handleNoTypeArguments(()
          beginArguments(()
            handleIdentifier(x, expression)
            handleNoTypeArguments(-)
            handleNoArguments(-)
            handleSend(x, -)
            beginBinaryExpression(-)
            handleLiteralInt(1)
            endBinaryExpression(-)
          endArguments(1, (, ))
          handleSend(case, +)
          beginBinaryExpression(+)
          handleLiteralInt(1)
          endBinaryExpression(+)
        endReturnStatement(true, return, ;)
      endBlockFunctionBody(2, {, })
    endClassMethod(null, , (, null, })
  endMember()
  beginMetadataStar(int)
  endMetadataStar(0)
  beginMember()
    handleRecoverableError(MissingConstFinalVarOrType, int, int)
    handleNoType(})
    handleIdentifier(int, fieldDeclaration)
    handleNoFieldInitializer(catch)
    handleRecoverableError(Message[ExpectedAfterButGot, Expected ';' after this., null, {string: ;}], int, int)
  endClassFields(null, null, null, null, 1, int, ;)
endMember()
beginMetadataStar(catch)
endMetadataStar(0)
beginMember()
  handleRecoverableError(Message[ExpectedClassMember, Expected a class member, but got 'catch'., null, {token: catch}], catch, catch)
  handleInvalidMember(catch)
endMember()
beginMetadataStar(()
endMetadataStar(0)
beginMember()
  beginMethod(null, null, null, null, null, ()
    handleNoType(catch)
    handleRecoverableError(Message[ExpectedIdentifier, Expected an identifier, but got '('., null, {token: (}], (, ()
    handleIdentifier(, methodDeclaration)
    handleNoTypeVariables(()
    beginFormalParameters((, MemberKind.NonStaticMethod)
      beginMetadataStar(int)
      endMetadataStar(0)
      beginFormalParameter(int, MemberKind.NonStaticMethod, null, null, null)
        handleIdentifier(int, typeReference)
        handleNoTypeArguments(x)
        handleType(int, null)
        handleIdentifier(x, formalParameterDeclaration)
        handleFormalParameterWithoutValue())
      endFormalParameter(null, null, x, null, null, FormalParameterKind.mandatory, MemberKind.NonStaticMethod)
    endFormalParameters(1, (, ), MemberKind.NonStaticMethod)
    handleNoInitializers()
    handleAsyncModifier(null, null)
    beginBlockFunctionBody({)
      beginIfStatement(if)
        handleIdentifier(x, expression)
        handleNoTypeArguments(==)
        handleNoArguments(==)
        handleSend(x, ==)
        beginBinaryExpression(==)
        handleLiteralInt(0)
        endBinaryExpression(==)
        handleParenthesizedCondition(()
        beginThenStatement(return)
          beginReturnStatement(return)
            handleLiteralInt(42)
          endReturnStatement(true, return, ;)
        endThenStatement(;)
      endIfStatement(if, null)
      beginReturnStatement(return)
        handleRecoverableError(Message[ExpectedIdentifier, Expected an identifier, but got 'catch'., null, {token: catch}], catch, catch)
        handleIdentifier(catch, expression)
        handleNoTypeArguments(()
        beginArguments(()
          handleIdentifier(x, expression)
          handleNoTypeArguments(-)
          handleNoArguments(-)
          handleSend(x, -)
          beginBinaryExpression(-)
          handleLiteralInt(1)
          endBinaryExpression(-)
        endArguments(1, (, ))
        handleSend(catch, +)
        beginBinaryExpression(+)
        handleLiteralInt(1)
        endBinaryExpression(+)
      endReturnStatement(true, return, ;)
    endBlockFunctionBody(2, {, })
  endClassMethod(null, , (, null, })
endMember()
beginMetadataStar(int)
endMetadataStar(0)
beginMember()
  handleRecoverableError(MissingConstFinalVarOrType, int, int)
  handleNoType(})
  handleIdentifier(int, fieldDeclaration)
  handleNoFieldInitializer(class)
  handleRecoverableError(Message[ExpectedAfterButGot, Expected ';' after this., null, {string: ;}], int, int)
endClassFields(null, null, null, null, 1, int, ;)
endMember()
beginMetadataStar(class)
endMetadataStar(0)
beginMember()
handleRecoverableError(ClassInClass, class, class)
handleInvalidMember(class)
beginMetadataStar(()
endMetadataStar(0)
beginMember()
  beginMethod(null, null, null, null, null, ()
    handleNoType(class)
    handleRecoverableError(Message[ExpectedIdentifier, Expected an identifier, but got '('., null, {token: (}], (, ()
    handleIdentifier(, methodDeclaration)
    handleNoTypeVariables(()
    beginFormalParameters((, MemberKind.NonStaticMethod)
      beginMetadataStar(int)
      endMetadataStar(0)
      beginFormalParameter(int, MemberKind.NonStaticMethod, null, null, null)
        handleIdentifier(int, typeReference)
        handleNoTypeArguments(x)
        handleType(int, null)
        handleIdentifier(x, formalParameterDeclaration)
        handleFormalParameterWithoutValue())
      endFormalParameter(null, null, x, null, null, FormalParameterKind.mandatory, MemberKind.NonStaticMethod)
    endFormalParameters(1, (, ), MemberKind.NonStaticMethod)
    handleNoInitializers()
    handleAsyncModifier(null, null)
    beginBlockFunctionBody({)
      beginIfStatement(if)
        handleIdentifier(x, expression)
        handleNoTypeArguments(==)
        handleNoArguments(==)
        handleSend(x, ==)
        beginBinaryExpression(==)
        handleLiteralInt(0)
        endBinaryExpression(==)
        handleParenthesizedCondition(()
        beginThenStatement(return)
          beginReturnStatement(return)
            handleLiteralInt(42)
          endReturnStatement(true, return, ;)
        endThenStatement(;)
      endIfStatement(if, null)
      beginReturnStatement(return)
        handleRecoverableError(Message[ExpectedIdentifier, Expected an identifier, but got 'class'., null, {token: class}], class, class)
        handleIdentifier(class, expression)
        handleNoTypeArguments(()
        beginArguments(()
          handleIdentifier(x, expression)
          handleNoTypeArguments(-)
          handleNoArguments(-)
          handleSend(x, -)
          beginBinaryExpression(-)
          handleLiteralInt(1)
          endBinaryExpression(-)
        endArguments(1, (, ))
        handleSend(class, +)
        beginBinaryExpression(+)
        handleLiteralInt(1)
        endBinaryExpression(+)
      endReturnStatement(true, return, ;)
    endBlockFunctionBody(2, {, })
  endClassMethod(null, , (, null, })
endMember()
beginMetadataStar(int)
endMetadataStar(0)
beginMember()
  handleRecoverableError(MissingConstFinalVarOrType, int, int)
  handleNoType(})
  handleIdentifier(int, fieldDeclaration)
  handleNoFieldInitializer(const)
  handleRecoverableError(Message[ExpectedAfterButGot, Expected ';' after this., null, {string: ;}], int, int)
endClassFields(null, null, null, null, 1, int, ;)
endMember()
beginMetadataStar(const)
endMetadataStar(0)
beginMember()
beginMethod(null, null, null, const, null, ()
  handleNoType(const)
  handleRecoverableError(Message[ExpectedIdentifier, Expected an identifier, but got '('., null, {token: (}], (, ()
  handleIdentifier(, methodDeclaration)
  handleNoTypeVariables(()
  beginFormalParameters((, MemberKind.NonStaticMethod)
    beginMetadataStar(int)
    endMetadataStar(0)
    beginFormalParameter(int, MemberKind.NonStaticMethod, null, null, null)
      handleIdentifier(int, typeReference)
      handleNoTypeArguments(x)
      handleType(int, null)
      handleIdentifier(x, formalParameterDeclaration)
      handleFormalParameterWithoutValue())
    endFormalParameter(null, null, x, null, null, FormalParameterKind.mandatory, MemberKind.NonStaticMethod)
  endFormalParameters(1, (, ), MemberKind.NonStaticMethod)
  handleNoInitializers()
  handleAsyncModifier(null, null)
  beginBlockFunctionBody({)
    beginIfStatement(if)
      handleIdentifier(x, expression)
      handleNoTypeArguments(==)
      handleNoArguments(==)
      handleSend(x, ==)
      beginBinaryExpression(==)
      handleLiteralInt(0)
      endBinaryExpression(==)
      handleParenthesizedCondition(()
      beginThenStatement(return)
        beginReturnStatement(return)
          handleLiteralInt(42)
        endReturnStatement(true, return, ;)
      endThenStatement(;)
    endIfStatement(if, null)
    beginReturnStatement(return)
      beginConstExpression(const)
        handleRecoverableError(Message[ExpectedIdentifier, Expected an identifier, but got '('., null, {token: (}], (, ()
        handleIdentifier(, constructorReference)
        beginConstructorReference()
          handleNoTypeArguments(()
          handleNoConstructorReferenceContinuationAfterTypeArguments(()
        endConstructorReference(, null, ()
        beginArguments(()
          handleIdentifier(x, expression)
          handleNoTypeArguments(-)
          handleNoArguments(-)
          handleSend(x, -)
          beginBinaryExpression(-)
          handleLiteralInt(1)
          endBinaryExpression(-)
        endArguments(1, (, ))
      endConstExpression(const)
      beginBinaryExpression(+)
      handleLiteralInt(1)
      endBinaryExpression(+)
    endReturnStatement(true, return, ;)
  endBlockFunctionBody(2, {, })
  handleRecoverableError(ConstMethod, const, const)
endClassMethod(null, const, (, null, })
endMember()
beginMetadataStar(int)
endMetadataStar(0)
beginMember()
handleRecoverableError(MissingConstFinalVarOrType, int, int)
handleNoType(})
handleIdentifier(int, fieldDeclaration)
handleNoFieldInitializer(continue)
handleRecoverableError(Message[ExpectedAfterButGot, Expected ';' after this., null, {string: ;}], int, int)
endClassFields(null, null, null, null, 1, int, ;)
endMember()
beginMetadataStar(continue)
endMetadataStar(0)
beginMember()
handleRecoverableError(Message[ExpectedClassMember, Expected a class member, but got 'continue'., null, {token: continue}], continue, continue)
handleInvalidMember(continue)
endMember()
beginMetadataStar(()
endMetadataStar(0)
beginMember()
beginMethod(null, null, null, null, null, ()
handleNoType(continue)
handleRecoverableError(Message[ExpectedIdentifier, Expected an identifier, but got '('., null, {token: (}], (, ()
handleIdentifier(, methodDeclaration)
handleNoTypeVariables(()
beginFormalParameters((, MemberKind.NonStaticMethod)
  beginMetadataStar(int)
  endMetadataStar(0)
  beginFormalParameter(int, MemberKind.NonStaticMethod, null, null, null)
    handleIdentifier(int, typeReference)
    handleNoTypeArguments(x)
    handleType(int, null)
    handleIdentifier(x, formalParameterDeclaration)
    handleFormalParameterWithoutValue())
  endFormalParameter(null, null, x, null, null, FormalParameterKind.mandatory, MemberKind.NonStaticMethod)
endFormalParameters(1, (, ), MemberKind.NonStaticMethod)
handleNoInitializers()
handleAsyncModifier(null, null)
beginBlockFunctionBody({)
  beginIfStatement(if)
    handleIdentifier(x, expression)
    handleNoTypeArguments(==)
    handleNoArguments(==)
    handleSend(x, ==)
    beginBinaryExpression(==)
    handleLiteralInt(0)
    endBinaryExpression(==)
    handleParenthesizedCondition(()
    beginThenStatement(return)
      beginReturnStatement(return)
        handleLiteralInt(42)
      endReturnStatement(true, return, ;)
    endThenStatement(;)
  endIfStatement(if, null)
  beginReturnStatement(return)
    handleRecoverableError(Message[ExpectedIdentifier, Expected an identifier, but got 'continue'., null, {token: continue}], continue, continue)
    handleIdentifier(, expression)
    handleNoTypeArguments(continue)
    handleNoArguments(continue)
    handleSend(, continue)
    handleRecoverableError(Message[ExpectedAfterButGot, Expected ';' after this., null, {string: ;}], continue, continue)
  endReturnStatement(true, return, ;)
  handleRecoverableError(ContinueOutsideOfLoop, continue, continue)
  handleRecoverableError(Message[ExpectedAfterButGot, Expected ';' after this., null, {string: ;}], continue, continue)
  handleContinueStatement(false, continue, ;)
  handleIdentifier(x, expression)
  handleNoTypeArguments(-)
  handleNoArguments(-)
  handleSend(x, -)
  beginBinaryExpression(-)
  handleLiteralInt(1)
  endBinaryExpression(-)
  handleParenthesizedExpression(()
  beginBinaryExpression(+)
  handleLiteralInt(1)
  endBinaryExpression(+)
  handleExpressionStatement(;)
endBlockFunctionBody(4, {, })
endClassMethod(null, , (, null, })
endMember()
beginMetadataStar(int)
endMetadataStar(0)
beginMember()
handleRecoverableError(MissingConstFinalVarOrType, int, int)
handleNoType(})
handleIdentifier(int, fieldDeclaration)
handleNoFieldInitializer(default)
handleRecoverableError(Message[ExpectedAfterButGot, Expected ';' after this., null, {string: ;}], int, int)
endClassFields(null, null, null, null, 1, int, ;)
endMember()
beginMetadataStar(default)
endMetadataStar(0)
beginMember()
handleRecoverableError(Message[ExpectedClassMember, Expected a class member, but got 'default'., null, {token: default}], default, default)
handleInvalidMember(default)
endMember()
beginMetadataStar(()
endMetadataStar(0)
beginMember()
beginMethod(null, null, null, null, null, ()
handleNoType(default)
handleRecoverableError(Message[ExpectedIdentifier, Expected an identifier, but got '('., null, {token: (}], (, ()
handleIdentifier(, methodDeclaration)
handleNoTypeVariables(()
beginFormalParameters((, MemberKind.NonStaticMethod)
beginMetadataStar(int)
endMetadataStar(0)
beginFormalParameter(int, MemberKind.NonStaticMethod, null, null, null)
  handleIdentifier(int, typeReference)
  handleNoTypeArguments(x)
  handleType(int, null)
  handleIdentifier(x, formalParameterDeclaration)
  handleFormalParameterWithoutValue())
endFormalParameter(null, null, x, null, null, FormalParameterKind.mandatory, MemberKind.NonStaticMethod)
endFormalParameters(1, (, ), MemberKind.NonStaticMethod)
handleNoInitializers()
handleAsyncModifier(null, null)
beginBlockFunctionBody({)
beginIfStatement(if)
  handleIdentifier(x, expression)
  handleNoTypeArguments(==)
  handleNoArguments(==)
  handleSend(x, ==)
  beginBinaryExpression(==)
  handleLiteralInt(0)
  endBinaryExpression(==)
  handleParenthesizedCondition(()
  beginThenStatement(return)
    beginReturnStatement(return)
      handleLiteralInt(42)
    endReturnStatement(true, return, ;)
  endThenStatement(;)
endIfStatement(if, null)
beginReturnStatement(return)
  handleRecoverableError(Message[ExpectedIdentifier, Expected an identifier, but got 'default'., null, {token: default}], default, default)
  handleIdentifier(default, expression)
  handleNoTypeArguments(()
  beginArguments(()
    handleIdentifier(x, expression)
    handleNoTypeArguments(-)
    handleNoArguments(-)
    handleSend(x, -)
    beginBinaryExpression(-)
    handleLiteralInt(1)
    endBinaryExpression(-)
  endArguments(1, (, ))
  handleSend(default, +)
  beginBinaryExpression(+)
  handleLiteralInt(1)
  endBinaryExpression(+)
endReturnStatement(true, return, ;)
endBlockFunctionBody(2, {, })
endClassMethod(null, , (, null, })
endMember()
beginMetadataStar(int)
endMetadataStar(0)
beginMember()
handleRecoverableError(MissingConstFinalVarOrType, int, int)
handleNoType(})
handleIdentifier(int, fieldDeclaration)
handleNoFieldInitializer(do)
handleRecoverableError(Message[ExpectedAfterButGot, Expected ';' after this., null, {string: ;}], int, int)
endClassFields(null, null, null, null, 1, int, ;)
endMember()
beginMetadataStar(do)
endMetadataStar(0)
beginMember()
handleRecoverableError(Message[ExpectedClassMember, Expected a class member, but got 'do'., null, {token: do}], do, do)
handleInvalidMember(do)
endMember()
beginMetadataStar(()
endMetadataStar(0)
beginMember()
beginMethod(null, null, null, null, null, ()
handleNoType(do)
handleRecoverableError(Message[ExpectedIdentifier, Expected an identifier, but got '('., null, {token: (}], (, ()
handleIdentifier(, methodDeclaration)
handleNoTypeVariables(()
beginFormalParameters((, MemberKind.NonStaticMethod)
beginMetadataStar(int)
endMetadataStar(0)
beginFormalParameter(int, MemberKind.NonStaticMethod, null, null, null)
handleIdentifier(int, typeReference)
handleNoTypeArguments(x)
handleType(int, null)
handleIdentifier(x, formalParameterDeclaration)
handleFormalParameterWithoutValue())
endFormalParameter(null, null, x, null, null, FormalParameterKind.mandatory, MemberKind.NonStaticMethod)
endFormalParameters(1, (, ), MemberKind.NonStaticMethod)
handleNoInitializers()
handleAsyncModifier(null, null)
beginBlockFunctionBody({)
beginIfStatement(if)
handleIdentifier(x, expression)
handleNoTypeArguments(==)
handleNoArguments(==)
handleSend(x, ==)
beginBinaryExpression(==)
handleLiteralInt(0)
endBinaryExpression(==)
handleParenthesizedCondition(()
beginThenStatement(return)
  beginReturnStatement(return)
    handleLiteralInt(42)
  endReturnStatement(true, return, ;)
endThenStatement(;)
endIfStatement(if, null)
beginReturnStatement(return)
handleRecoverableError(Message[ExpectedIdentifier, Expected an identifier, but got 'do'., null, {token: do}], do, do)
handleIdentifier(, expression)
handleNoTypeArguments(do)
handleNoArguments(do)
handleSend(, do)
handleRecoverableError(Message[ExpectedAfterButGot, Expected ';' after this., null, {string: ;}], do, do)
endReturnStatement(true, return, ;)
beginDoWhileStatement(do)
beginDoWhileStatementBody(()
  handleIdentifier(x, expression)
  handleNoTypeArguments(-)
  handleNoArguments(-)
  handleSend(x, -)
  beginBinaryExpression(-)
  handleLiteralInt(1)
  endBinaryExpression(-)
  handleParenthesizedExpression(()
  beginBinaryExpression(+)
  handleLiteralInt(1)
  endBinaryExpression(+)
  handleExpressionStatement(;)
endDoWhileStatementBody(;)
handleRecoverableError(Message[ExpectedButGot, Expected 'while' before this., null, {string: while}], }, })
handleRecoverableError(Message[ExpectedToken, Expected to find '('., null, {string: (}], }, })
handleRecoverableError(Message[ExpectedIdentifier, Expected an identifier, but got '}'., null, {token: }}], }, })
handleIdentifier(, expression)
handleNoTypeArguments())
handleNoArguments())
handleSend(, ))
handleParenthesizedCondition(()
handleRecoverableError(Message[ExpectedAfterButGot, Expected ';' after this., null, {string: ;}], }, })
endDoWhileStatement(do, while, ;)
endBlockFunctionBody(3, {, })
endClassMethod(null, , (, null, })
endMember()
beginMetadataStar(int)
endMetadataStar(0)
beginMember()
handleRecoverableError(MissingConstFinalVarOrType, int, int)
handleNoType(})
handleIdentifier(int, fieldDeclaration)
handleNoFieldInitializer(else)
handleRecoverableError(Message[ExpectedAfterButGot, Expected ';' after this., null, {string: ;}], int, int)
endClassFields(null, null, null, null, 1, int, ;)
endMember()
beginMetadataStar(else)
endMetadataStar(0)
beginMember()
handleRecoverableError(Message[ExpectedClassMember, Expected a class member, but got 'else'., null, {token: else}], else, else)
handleInvalidMember(else)
endMember()
beginMetadataStar(()
endMetadataStar(0)
beginMember()
beginMethod(null, null, null, null, null, ()
handleNoType(else)
handleRecoverableError(Message[ExpectedIdentifier, Expected an identifier, but got '('., null, {token: (}], (, ()
handleIdentifier(, methodDeclaration)
handleNoTypeVariables(()
beginFormalParameters((, MemberKind.NonStaticMethod)
beginMetadataStar(int)
endMetadataStar(0)
beginFormalParameter(int, MemberKind.NonStaticMethod, null, null, null)
handleIdentifier(int, typeReference)
handleNoTypeArguments(x)
handleType(int, null)
handleIdentifier(x, formalParameterDeclaration)
handleFormalParameterWithoutValue())
endFormalParameter(null, null, x, null, null, FormalParameterKind.mandatory, MemberKind.NonStaticMethod)
endFormalParameters(1, (, ), MemberKind.NonStaticMethod)
handleNoInitializers()
handleAsyncModifier(null, null)
beginBlockFunctionBody({)
beginIfStatement(if)
handleIdentifier(x, expression)
handleNoTypeArguments(==)
handleNoArguments(==)
handleSend(x, ==)
beginBinaryExpression(==)
handleLiteralInt(0)
endBinaryExpression(==)
handleParenthesizedCondition(()
beginThenStatement(return)
beginReturnStatement(return)
  handleLiteralInt(42)
endReturnStatement(true, return, ;)
endThenStatement(;)
endIfStatement(if, null)
beginReturnStatement(return)
handleRecoverableError(Message[ExpectedIdentifier, Expected an identifier, but got 'else'., null, {token: else}], else, else)
handleIdentifier(, expression)
handleNoTypeArguments(else)
handleNoArguments(else)
handleSend(, else)
handleRecoverableError(Message[ExpectedAfterButGot, Expected ';' after this., null, {string: ;}], else, else)
endReturnStatement(true, return, ;)
handleRecoverableError(Message[ExpectedIdentifier, Expected an identifier, but got 'else'., null, {token: else}], else, else)
handleIdentifier(, expression)
handleNoTypeArguments(else)
handleNoArguments(else)
handleSend(, else)
handleRecoverableError(Message[ExpectedAfterButGot, Expected ';' after this., null, {string: ;}], else, else)
handleExpressionStatement(;)
handleRecoverableError(Message[UnexpectedToken, Unexpected token ';'., null, {token: ;}], else, else)
handleIdentifier(x, expression)
handleNoTypeArguments(-)
handleNoArguments(-)
handleSend(x, -)
beginBinaryExpression(-)
handleLiteralInt(1)
endBinaryExpression(-)
handleParenthesizedExpression(()
beginBinaryExpression(+)
handleLiteralInt(1)
endBinaryExpression(+)
handleExpressionStatement(;)
endBlockFunctionBody(4, {, })
endClassMethod(null, , (, null, })
endMember()
beginMetadataStar(int)
endMetadataStar(0)
beginMember()
handleRecoverableError(MissingConstFinalVarOrType, int, int)
handleNoType(})
handleIdentifier(int, fieldDeclaration)
handleNoFieldInitializer(enum)
handleRecoverableError(Message[ExpectedAfterButGot, Expected ';' after this., null, {string: ;}], int, int)
endClassFields(null, null, null, null, 1, int, ;)
endMember()
beginMetadataStar(enum)
endMetadataStar(0)
beginMember()
handleRecoverableError(EnumInClass, enum, enum)
handleInvalidMember(enum)
beginMetadataStar(()
endMetadataStar(0)
beginMember()
beginMethod(null, null, null, null, null, ()
handleNoType(enum)
handleRecoverableError(Message[ExpectedIdentifier, Expected an identifier, but got '('., null, {token: (}], (, ()
handleIdentifier(, methodDeclaration)
handleNoTypeVariables(()
beginFormalParameters((, MemberKind.NonStaticMethod)
beginMetadataStar(int)
endMetadataStar(0)
beginFormalParameter(int, MemberKind.NonStaticMethod, null, null, null)
handleIdentifier(int, typeReference)
handleNoTypeArguments(x)
handleType(int, null)
handleIdentifier(x, formalParameterDeclaration)
handleFormalParameterWithoutValue())
endFormalParameter(null, null, x, null, null, FormalParameterKind.mandatory, MemberKind.NonStaticMethod)
endFormalParameters(1, (, ), MemberKind.NonStaticMethod)
handleNoInitializers()
handleAsyncModifier(null, null)
beginBlockFunctionBody({)
beginIfStatement(if)
handleIdentifier(x, expression)
handleNoTypeArguments(==)
handleNoArguments(==)
handleSend(x, ==)
beginBinaryExpression(==)
handleLiteralInt(0)
endBinaryExpression(==)
handleParenthesizedCondition(()
beginThenStatement(return)
beginReturnStatement(return)
  handleLiteralInt(42)
endReturnStatement(true, return, ;)
endThenStatement(;)
endIfStatement(if, null)
beginReturnStatement(return)
handleRecoverableError(Message[ExpectedIdentifier, Expected an identifier, but got 'enum'., null, {token: enum}], enum, enum)
handleIdentifier(enum, expression)
handleNoTypeArguments(()
beginArguments(()
handleIdentifier(x, expression)
handleNoTypeArguments(-)
handleNoArguments(-)
handleSend(x, -)
beginBinaryExpression(-)
handleLiteralInt(1)
endBinaryExpression(-)
endArguments(1, (, ))
handleSend(enum, +)
beginBinaryExpression(+)
handleLiteralInt(1)
endBinaryExpression(+)
endReturnStatement(true, return, ;)
endBlockFunctionBody(2, {, })
endClassMethod(null, , (, null, })
endMember()
beginMetadataStar(int)
endMetadataStar(0)
beginMember()
handleRecoverableError(MissingConstFinalVarOrType, int, int)
handleNoType(})
handleIdentifier(int, fieldDeclaration)
handleNoFieldInitializer(extends)
handleRecoverableError(Message[ExpectedAfterButGot, Expected ';' after this., null, {string: ;}], int, int)
endClassFields(null, null, null, null, 1, int, ;)
endMember()
beginMetadataStar(extends)
endMetadataStar(0)
beginMember()
handleRecoverableError(Message[ExpectedClassMember, Expected a class member, but got 'extends'., null, {token: extends}], extends, extends)
handleInvalidMember(extends)
endMember()
beginMetadataStar(()
endMetadataStar(0)
beginMember()
beginMethod(null, null, null, null, null, ()
handleNoType(extends)
handleRecoverableError(Message[ExpectedIdentifier, Expected an identifier, but got '('., null, {token: (}], (, ()
handleIdentifier(, methodDeclaration)
handleNoTypeVariables(()
beginFormalParameters((, MemberKind.NonStaticMethod)
beginMetadataStar(int)
endMetadataStar(0)
beginFormalParameter(int, MemberKind.NonStaticMethod, null, null, null)
handleIdentifier(int, typeReference)
handleNoTypeArguments(x)
handleType(int, null)
handleIdentifier(x, formalParameterDeclaration)
handleFormalParameterWithoutValue())
endFormalParameter(null, null, x, null, null, FormalParameterKind.mandatory, MemberKind.NonStaticMethod)
endFormalParameters(1, (, ), MemberKind.NonStaticMethod)
handleNoInitializers()
handleAsyncModifier(null, null)
beginBlockFunctionBody({)
beginIfStatement(if)
handleIdentifier(x, expression)
handleNoTypeArguments(==)
handleNoArguments(==)
handleSend(x, ==)
beginBinaryExpression(==)
handleLiteralInt(0)
endBinaryExpression(==)
handleParenthesizedCondition(()
beginThenStatement(return)
beginReturnStatement(return)
handleLiteralInt(42)
endReturnStatement(true, return, ;)
endThenStatement(;)
endIfStatement(if, null)
beginReturnStatement(return)
handleRecoverableError(Message[ExpectedIdentifier, Expected an identifier, but got 'extends'., null, {token: extends}], extends, extends)
handleIdentifier(extends, expression)
handleNoTypeArguments(()
beginArguments(()
handleIdentifier(x, expression)
handleNoTypeArguments(-)
handleNoArguments(-)
handleSend(x, -)
beginBinaryExpression(-)
handleLiteralInt(1)
endBinaryExpression(-)
endArguments(1, (, ))
handleSend(extends, +)
beginBinaryExpression(+)
handleLiteralInt(1)
endBinaryExpression(+)
endReturnStatement(true, return, ;)
endBlockFunctionBody(2, {, })
endClassMethod(null, , (, null, })
endMember()
beginMetadataStar(int)
endMetadataStar(0)
beginMember()
handleRecoverableError(MissingConstFinalVarOrType, int, int)
handleNoType(})
handleIdentifier(int, fieldDeclaration)
handleNoFieldInitializer(false)
handleRecoverableError(Message[ExpectedAfterButGot, Expected ';' after this., null, {string: ;}], int, int)
endClassFields(null, null, null, null, 1, int, ;)
endMember()
beginMetadataStar(false)
endMetadataStar(0)
beginMember()
handleRecoverableError(Message[ExpectedClassMember, Expected a class member, but got 'false'., null, {token: false}], false, false)
handleInvalidMember(false)
endMember()
beginMetadataStar(()
endMetadataStar(0)
beginMember()
beginMethod(null, null, null, null, null, ()
handleNoType(false)
handleRecoverableError(Message[ExpectedIdentifier, Expected an identifier, but got '('., null, {token: (}], (, ()
handleIdentifier(, methodDeclaration)
handleNoTypeVariables(()
beginFormalParameters((, MemberKind.NonStaticMethod)
beginMetadataStar(int)
endMetadataStar(0)
beginFormalParameter(int, MemberKind.NonStaticMethod, null, null, null)
handleIdentifier(int, typeReference)
handleNoTypeArguments(x)
handleType(int, null)
handleIdentifier(x, formalParameterDeclaration)
handleFormalParameterWithoutValue())
endFormalParameter(null, null, x, null, null, FormalParameterKind.mandatory, MemberKind.NonStaticMethod)
endFormalParameters(1, (, ), MemberKind.NonStaticMethod)
handleNoInitializers()
handleAsyncModifier(null, null)
beginBlockFunctionBody({)
beginIfStatement(if)
handleIdentifier(x, expression)
handleNoTypeArguments(==)
handleNoArguments(==)
handleSend(x, ==)
beginBinaryExpression(==)
handleLiteralInt(0)
endBinaryExpression(==)
handleParenthesizedCondition(()
beginThenStatement(return)
beginReturnStatement(return)
handleLiteralInt(42)
endReturnStatement(true, return, ;)
endThenStatement(;)
endIfStatement(if, null)
beginReturnStatement(return)
handleLiteralBool(false)
handleNoTypeArguments(()
beginArguments(()
handleIdentifier(x, expression)
handleNoTypeArguments(-)
handleNoArguments(-)
handleSend(x, -)
beginBinaryExpression(-)
handleLiteralInt(1)
endBinaryExpression(-)
endArguments(1, (, ))
handleSend((, ))
beginBinaryExpression(+)
handleLiteralInt(1)
endBinaryExpression(+)
endReturnStatement(true, return, ;)
endBlockFunctionBody(2, {, })
endClassMethod(null, , (, null, })
endMember()
beginMetadataStar(int)
endMetadataStar(0)
beginMember()
handleRecoverableError(MissingConstFinalVarOrType, int, int)
handleNoType(})
handleIdentifier(int, fieldDeclaration)
handleNoFieldInitializer(final)
handleRecoverableError(Message[ExpectedAfterButGot, Expected ';' after this., null, {string: ;}], int, int)
endClassFields(null, null, null, null, 1, int, ;)
endMember()
beginMetadataStar(final)
endMetadataStar(0)
beginMember()
handleRecoverableError(Message[ExtraneousModifier, Can't have modifier 'final' here., Try removing 'final'., {token: final}], final, final)
beginMethod(null, null, null, null, null, ()
handleNoType(final)
handleRecoverableError(Message[ExpectedIdentifier, Expected an identifier, but got '('., null, {token: (}], (, ()
handleIdentifier(, methodDeclaration)
handleNoTypeVariables(()
beginFormalParameters((, MemberKind.NonStaticMethod)
beginMetadataStar(int)
endMetadataStar(0)
beginFormalParameter(int, MemberKind.NonStaticMethod, null, null, null)
handleIdentifier(int, typeReference)
handleNoTypeArguments(x)
handleType(int, null)
handleIdentifier(x, formalParameterDeclaration)
handleFormalParameterWithoutValue())
endFormalParameter(null, null, x, null, null, FormalParameterKind.mandatory, MemberKind.NonStaticMethod)
endFormalParameters(1, (, ), MemberKind.NonStaticMethod)
handleNoInitializers()
handleAsyncModifier(null, null)
beginBlockFunctionBody({)
beginIfStatement(if)
handleIdentifier(x, expression)
handleNoTypeArguments(==)
handleNoArguments(==)
handleSend(x, ==)
beginBinaryExpression(==)
handleLiteralInt(0)
endBinaryExpression(==)
handleParenthesizedCondition(()
beginThenStatement(return)
beginReturnStatement(return)
handleLiteralInt(42)
endReturnStatement(true, return, ;)
endThenStatement(;)
endIfStatement(if, null)
beginReturnStatement(return)
handleRecoverableError(Message[ExpectedIdentifier, Expected an identifier, but got 'final'., null, {token: final}], final, final)
handleIdentifier(, expression)
handleNoTypeArguments(final)
handleNoArguments(final)
handleSend(, final)
handleRecoverableError(Message[ExpectedAfterButGot, Expected ';' after this., null, {string: ;}], final, final)
endReturnStatement(true, return, ;)
beginMetadataStar(final)
endMetadataStar(0)
handleNoType(final)
beginVariablesDeclaration((, null, final)
handleRecoverableError(Message[ExpectedIdentifier, Expected an identifier, but got '('., null, {token: (}], (, ()
handleIdentifier(, localVariableDeclaration)
beginInitializedIdentifier()
handleNoVariableInitializer(x)
endInitializedIdentifier()
handleRecoverableError(Message[ExpectedAfterButGot, Expected ';' after this., null, {string: ;}], x, x)
endVariablesDeclaration(1, ;)
handleIdentifier(x, expression)
handleNoTypeArguments(-)
handleNoArguments(-)
handleSend(x, -)
beginBinaryExpression(-)
handleLiteralInt(1)
endBinaryExpression(-)
handleRecoverableError(Message[ExpectedAfterButGot, Expected ';' after this., null, {string: ;}], 1, 1)
handleExpressionStatement(;)
handleRecoverableError(Message[ExpectedIdentifier, Expected an identifier, but got ')'., null, {token: )}], ), ))
handleIdentifier(, expression)
handleNoTypeArguments())
handleNoArguments())
handleSend(, ))
handleRecoverableError(Message[ExpectedAfterButGot, Expected ';' after this., null, {string: ;}], ), ))
handleExpressionStatement(;)
handleRecoverableError(Message[UnexpectedToken, Unexpected token ';'., null, {token: ;}], ), ))
handleRecoverableError(UnsupportedPrefixPlus, +, +)
handleIdentifier(, expression)
handleNoTypeArguments(+)
handleNoArguments(+)
handleSend(, +)
beginBinaryExpression(+)
handleLiteralInt(1)
endBinaryExpression(+)
handleExpressionStatement(;)
endBlockFunctionBody(6, {, })
endClassMethod(null, final, (, null, })
endMember()
beginMetadataStar(int)
endMetadataStar(0)
beginMember()
handleRecoverableError(MissingConstFinalVarOrType, int, int)
handleNoType(})
handleIdentifier(int, fieldDeclaration)
handleNoFieldInitializer(finally)
handleRecoverableError(Message[ExpectedAfterButGot, Expected ';' after this., null, {string: ;}], int, int)
endClassFields(null, null, null, null, 1, int, ;)
endMember()
beginMetadataStar(finally)
endMetadataStar(0)
beginMember()
handleRecoverableError(Message[ExpectedClassMember, Expected a class member, but got 'finally'., null, {token: finally}], finally, finally)
handleInvalidMember(finally)
endMember()
beginMetadataStar(()
endMetadataStar(0)
beginMember()
beginMethod(null, null, null, null, null, ()
handleNoType(finally)
handleRecoverableError(Message[ExpectedIdentifier, Expected an identifier, but got '('., null, {token: (}], (, ()
handleIdentifier(, methodDeclaration)
handleNoTypeVariables(()
beginFormalParameters((, MemberKind.NonStaticMethod)
beginMetadataStar(int)
endMetadataStar(0)
beginFormalParameter(int, MemberKind.NonStaticMethod, null, null, null)
handleIdentifier(int, typeReference)
handleNoTypeArguments(x)
handleType(int, null)
handleIdentifier(x, formalParameterDeclaration)
handleFormalParameterWithoutValue())
endFormalParameter(null, null, x, null, null, FormalParameterKind.mandatory, MemberKind.NonStaticMethod)
endFormalParameters(1, (, ), MemberKind.NonStaticMethod)
handleNoInitializers()
handleAsyncModifier(null, null)
beginBlockFunctionBody({)
beginIfStatement(if)
handleIdentifier(x, expression)
handleNoTypeArguments(==)
handleNoArguments(==)
handleSend(x, ==)
beginBinaryExpression(==)
handleLiteralInt(0)
endBinaryExpression(==)
handleParenthesizedCondition(()
beginThenStatement(return)
beginReturnStatement(return)
handleLiteralInt(42)
endReturnStatement(true, return, ;)
endThenStatement(;)
endIfStatement(if, null)
beginReturnStatement(return)
handleRecoverableError(Message[ExpectedIdentifier, Expected an identifier, but got 'finally'., null, {token: finally}], finally, finally)
handleIdentifier(finally, expression)
handleNoTypeArguments(()
beginArguments(()
handleIdentifier(x, expression)
handleNoTypeArguments(-)
handleNoArguments(-)
handleSend(x, -)
beginBinaryExpression(-)
handleLiteralInt(1)
endBinaryExpression(-)
endArguments(1, (, ))
handleSend(finally, +)
beginBinaryExpression(+)
handleLiteralInt(1)
endBinaryExpression(+)
endReturnStatement(true, return, ;)
endBlockFunctionBody(2, {, })
endClassMethod(null, , (, null, })
endMember()
beginMetadataStar(int)
endMetadataStar(0)
beginMember()
handleRecoverableError(MissingConstFinalVarOrType, int, int)
handleNoType(})
handleIdentifier(int, fieldDeclaration)
handleNoFieldInitializer(for)
handleRecoverableError(Message[ExpectedAfterButGot, Expected ';' after this., null, {string: ;}], int, int)
endClassFields(null, null, null, null, 1, int, ;)
endMember()
beginMetadataStar(for)
endMetadataStar(0)
beginMember()
handleRecoverableError(Message[ExpectedClassMember, Expected a class member, but got 'for'., null, {token: for}], for, for)
handleInvalidMember(for)
endMember()
beginMetadataStar(()
endMetadataStar(0)
beginMember()
beginMethod(null, null, null, null, null, ()
handleNoType(for)
handleRecoverableError(Message[ExpectedIdentifier, Expected an identifier, but got '('., null, {token: (}], (, ()
handleIdentifier(, methodDeclaration)
handleNoTypeVariables(()
beginFormalParameters((, MemberKind.NonStaticMethod)
beginMetadataStar(int)
endMetadataStar(0)
beginFormalParameter(int, MemberKind.NonStaticMethod, null, null, null)
handleIdentifier(int, typeReference)
handleNoTypeArguments(x)
handleType(int, null)
handleIdentifier(x, formalParameterDeclaration)
handleFormalParameterWithoutValue())
endFormalParameter(null, null, x, null, null, FormalParameterKind.mandatory, MemberKind.NonStaticMethod)
endFormalParameters(1, (, ), MemberKind.NonStaticMethod)
handleNoInitializers()
handleAsyncModifier(null, null)
beginBlockFunctionBody({)
beginIfStatement(if)
handleIdentifier(x, expression)
handleNoTypeArguments(==)
handleNoArguments(==)
handleSend(x, ==)
beginBinaryExpression(==)
handleLiteralInt(0)
endBinaryExpression(==)
handleParenthesizedCondition(()
beginThenStatement(return)
beginReturnStatement(return)
handleLiteralInt(42)
endReturnStatement(true, return, ;)
endThenStatement(;)
endIfStatement(if, null)
beginReturnStatement(return)
handleRecoverableError(Message[ExpectedIdentifier, Expected an identifier, but got 'for'., null, {token: for}], for, for)
handleIdentifier(, expression)
handleNoTypeArguments(for)
handleNoArguments(for)
handleSend(, for)
handleRecoverableError(Message[ExpectedAfterButGot, Expected ';' after this., null, {string: ;}], for, for)
endReturnStatement(true, return, ;)
beginForStatement(for)
handleIdentifier(x, expression)
handleNoTypeArguments(-)
handleNoArguments(-)
handleSend(x, -)
beginBinaryExpression(-)
handleLiteralInt(1)
endBinaryExpression(-)
handleForInitializerExpressionStatement(1, false)
handleRecoverableError(Message[ExpectedAfterButGot, Expected ';' after this., null, {string: ;}], 1, 1)
handleRecoverableError(Message[ExpectedIdentifier, Expected an identifier, but got ')'., null, {token: )}], ), ))
handleIdentifier(, expression)
handleNoTypeArguments())
handleNoArguments())
handleSend(, ))
handleRecoverableError(Message[ExpectedAfterButGot, Expected ';' after this., null, {string: ;}], ), ))
handleExpressionStatement(;)
handleForLoopParts(for, (, ;, 0)
beginForStatementBody(+)
handleRecoverableError(UnsupportedPrefixPlus, +, +)
handleIdentifier(, expression)
handleNoTypeArguments(+)
handleNoArguments(+)
handleSend(, +)
beginBinaryExpression(+)
handleLiteralInt(1)
endBinaryExpression(+)
handleExpressionStatement(;)
endForStatementBody(})
endForStatement(})
endBlockFunctionBody(3, {, })
endClassMethod(null, , (, null, })
endMember()
beginMetadataStar(int)
endMetadataStar(0)
beginMember()
handleRecoverableError(MissingConstFinalVarOrType, int, int)
handleNoType(})
handleIdentifier(int, fieldDeclaration)
handleNoFieldInitializer(if)
handleRecoverableError(Message[ExpectedAfterButGot, Expected ';' after this., null, {string: ;}], int, int)
endClassFields(null, null, null, null, 1, int, ;)
endMember()
beginMetadataStar(if)
endMetadataStar(0)
beginMember()
handleRecoverableError(Message[ExpectedClassMember, Expected a class member, but got 'if'., null, {token: if}], if, if)
handleInvalidMember(if)
endMember()
beginMetadataStar(()
endMetadataStar(0)
beginMember()
beginMethod(null, null, null, null, null, ()
handleNoType(if)
handleRecoverableError(Message[ExpectedIdentifier, Expected an identifier, but got '('., null, {token: (}], (, ()
handleIdentifier(, methodDeclaration)
handleNoTypeVariables(()
beginFormalParameters((, MemberKind.NonStaticMethod)
beginMetadataStar(int)
endMetadataStar(0)
beginFormalParameter(int, MemberKind.NonStaticMethod, null, null, null)
handleIdentifier(int, typeReference)
handleNoTypeArguments(x)
handleType(int, null)
handleIdentifier(x, formalParameterDeclaration)
handleFormalParameterWithoutValue())
endFormalParameter(null, null, x, null, null, FormalParameterKind.mandatory, MemberKind.NonStaticMethod)
endFormalParameters(1, (, ), MemberKind.NonStaticMethod)
handleNoInitializers()
handleAsyncModifier(null, null)
beginBlockFunctionBody({)
beginIfStatement(if)
handleIdentifier(x, expression)
handleNoTypeArguments(==)
handleNoArguments(==)
handleSend(x, ==)
beginBinaryExpression(==)
handleLiteralInt(0)
endBinaryExpression(==)
handleParenthesizedCondition(()
beginThenStatement(return)
beginReturnStatement(return)
handleLiteralInt(42)
endReturnStatement(true, return, ;)
endThenStatement(;)
endIfStatement(if, null)
beginReturnStatement(return)
handleRecoverableError(Message[ExpectedIdentifier, Expected an identifier, but got 'if'., null, {token: if}], if, if)
handleIdentifier(, expression)
handleNoTypeArguments(if)
handleNoArguments(if)
handleSend(, if)
handleRecoverableError(Message[ExpectedAfterButGot, Expected ';' after this., null, {string: ;}], if, if)
endReturnStatement(true, return, ;)
beginIfStatement(if)
handleIdentifier(x, expression)
handleNoTypeArguments(-)
handleNoArguments(-)
handleSend(x, -)
beginBinaryExpression(-)
handleLiteralInt(1)
endBinaryExpression(-)
handleParenthesizedCondition(()
beginThenStatement(+)
handleRecoverableError(UnsupportedPrefixPlus, +, +)
handleIdentifier(, expression)
handleNoTypeArguments(+)
handleNoArguments(+)
handleSend(, +)
beginBinaryExpression(+)
handleLiteralInt(1)
endBinaryExpression(+)
handleExpressionStatement(;)
endThenStatement(;)
endIfStatement(if, null)
endBlockFunctionBody(3, {, })
endClassMethod(null, , (, null, })
endMember()
beginMetadataStar(int)
endMetadataStar(0)
beginMember()
handleRecoverableError(MissingConstFinalVarOrType, int, int)
handleNoType(})
handleIdentifier(int, fieldDeclaration)
handleNoFieldInitializer(in)
handleRecoverableError(Message[ExpectedAfterButGot, Expected ';' after this., null, {string: ;}], int, int)
endClassFields(null, null, null, null, 1, int, ;)
endMember()
beginMetadataStar(in)
endMetadataStar(0)
beginMember()
handleRecoverableError(Message[ExpectedClassMember, Expected a class member, but got 'in'., null, {token: in}], in, in)
handleInvalidMember(in)
endMember()
beginMetadataStar(()
endMetadataStar(0)
beginMember()
beginMethod(null, null, null, null, null, ()
handleNoType(in)
handleRecoverableError(Message[ExpectedIdentifier, Expected an identifier, but got '('., null, {token: (}], (, ()
handleIdentifier(, methodDeclaration)
handleNoTypeVariables(()
beginFormalParameters((, MemberKind.NonStaticMethod)
beginMetadataStar(int)
endMetadataStar(0)
beginFormalParameter(int, MemberKind.NonStaticMethod, null, null, null)
handleIdentifier(int, typeReference)
handleNoTypeArguments(x)
handleType(int, null)
handleIdentifier(x, formalParameterDeclaration)
handleFormalParameterWithoutValue())
endFormalParameter(null, null, x, null, null, FormalParameterKind.mandatory, MemberKind.NonStaticMethod)
endFormalParameters(1, (, ), MemberKind.NonStaticMethod)
handleNoInitializers()
handleAsyncModifier(null, null)
beginBlockFunctionBody({)
beginIfStatement(if)
handleIdentifier(x, expression)
handleNoTypeArguments(==)
handleNoArguments(==)
handleSend(x, ==)
beginBinaryExpression(==)
handleLiteralInt(0)
endBinaryExpression(==)
handleParenthesizedCondition(()
beginThenStatement(return)
beginReturnStatement(return)
handleLiteralInt(42)
endReturnStatement(true, return, ;)
endThenStatement(;)
endIfStatement(if, null)
beginReturnStatement(return)
handleRecoverableError(Message[ExpectedIdentifier, Expected an identifier, but got 'in'., null, {token: in}], in, in)
handleIdentifier(in, expression)
handleNoTypeArguments(()
beginArguments(()
handleIdentifier(x, expression)
handleNoTypeArguments(-)
handleNoArguments(-)
handleSend(x, -)
beginBinaryExpression(-)
handleLiteralInt(1)
endBinaryExpression(-)
endArguments(1, (, ))
handleSend(in, +)
beginBinaryExpression(+)
handleLiteralInt(1)
endBinaryExpression(+)
endReturnStatement(true, return, ;)
endBlockFunctionBody(2, {, })
endClassMethod(null, , (, null, })
endMember()
beginMetadataStar(int)
endMetadataStar(0)
beginMember()
handleRecoverableError(MissingConstFinalVarOrType, int, int)
handleNoType(})
handleIdentifier(int, fieldDeclaration)
handleNoFieldInitializer(is)
handleRecoverableError(Message[ExpectedAfterButGot, Expected ';' after this., null, {string: ;}], int, int)
endClassFields(null, null, null, null, 1, int, ;)
endMember()
beginMetadataStar(is)
endMetadataStar(0)
beginMember()
handleRecoverableError(Message[ExpectedClassMember, Expected a class member, but got 'is'., null, {token: is}], is, is)
handleInvalidMember(is)
endMember()
beginMetadataStar(()
endMetadataStar(0)
beginMember()
beginMethod(null, null, null, null, null, ()
handleNoType(is)
handleRecoverableError(Message[ExpectedIdentifier, Expected an identifier, but got '('., null, {token: (}], (, ()
handleIdentifier(, methodDeclaration)
handleNoTypeVariables(()
beginFormalParameters((, MemberKind.NonStaticMethod)
beginMetadataStar(int)
endMetadataStar(0)
beginFormalParameter(int, MemberKind.NonStaticMethod, null, null, null)
handleIdentifier(int, typeReference)
handleNoTypeArguments(x)
handleType(int, null)
handleIdentifier(x, formalParameterDeclaration)
handleFormalParameterWithoutValue())
endFormalParameter(null, null, x, null, null, FormalParameterKind.mandatory, MemberKind.NonStaticMethod)
endFormalParameters(1, (, ), MemberKind.NonStaticMethod)
handleNoInitializers()
handleAsyncModifier(null, null)
beginBlockFunctionBody({)
beginIfStatement(if)
handleIdentifier(x, expression)
handleNoTypeArguments(==)
handleNoArguments(==)
handleSend(x, ==)
beginBinaryExpression(==)
handleLiteralInt(0)
endBinaryExpression(==)
handleParenthesizedCondition(()
beginThenStatement(return)
beginReturnStatement(return)
handleLiteralInt(42)
endReturnStatement(true, return, ;)
endThenStatement(;)
endIfStatement(if, null)
beginReturnStatement(return)
handleRecoverableError(Message[ExpectedIdentifier, Expected an identifier, but got 'is'., null, {token: is}], is, is)
handleIdentifier(, expression)
handleNoTypeArguments(is)
handleNoArguments(is)
handleSend(, is)
beginIsOperatorType(is)
handleRecoverableError(Message[ExpectedType, Expected a type, but got '('., null, {token: (}], (, ()
handleIdentifier(, typeReference)
handleNoTypeArguments(()
handleType(, null)
endIsOperatorType(is)
handleIsOperator(is, null)
handleRecoverableError(Message[ExpectedAfterButGot, Expected ';' after this., null, {string: ;}], (, ()
endReturnStatement(true, return, ;)
handleIdentifier(x, expression)
handleNoTypeArguments(-)
handleNoArguments(-)
handleSend(x, -)
beginBinaryExpression(-)
handleLiteralInt(1)
endBinaryExpression(-)
handleParenthesizedExpression(()
beginBinaryExpression(+)
handleLiteralInt(1)
endBinaryExpression(+)
handleExpressionStatement(;)
endBlockFunctionBody(3, {, })
endClassMethod(null, , (, null, })
endMember()
beginMetadataStar(int)
endMetadataStar(0)
beginMember()
handleRecoverableError(MissingConstFinalVarOrType, int, int)
handleNoType(})
handleIdentifier(int, fieldDeclaration)
handleNoFieldInitializer(new)
handleRecoverableError(Message[ExpectedAfterButGot, Expected ';' after this., null, {string: ;}], int, int)
endClassFields(null, null, null, null, 1, int, ;)
endMember()
beginMetadataStar(new)
endMetadataStar(0)
beginMember()
handleRecoverableError(Message[ExpectedClassMember, Expected a class member, but got 'new'., null, {token: new}], new, new)
handleInvalidMember(new)
endMember()
beginMetadataStar(()
endMetadataStar(0)
beginMember()
beginMethod(null, null, null, null, null, ()
handleNoType(new)
handleRecoverableError(Message[ExpectedIdentifier, Expected an identifier, but got '('., null, {token: (}], (, ()
handleIdentifier(, methodDeclaration)
handleNoTypeVariables(()
beginFormalParameters((, MemberKind.NonStaticMethod)
beginMetadataStar(int)
endMetadataStar(0)
beginFormalParameter(int, MemberKind.NonStaticMethod, null, null, null)
handleIdentifier(int, typeReference)
handleNoTypeArguments(x)
handleType(int, null)
handleIdentifier(x, formalParameterDeclaration)
handleFormalParameterWithoutValue())
endFormalParameter(null, null, x, null, null, FormalParameterKind.mandatory, MemberKind.NonStaticMethod)
endFormalParameters(1, (, ), MemberKind.NonStaticMethod)
handleNoInitializers()
handleAsyncModifier(null, null)
beginBlockFunctionBody({)
beginIfStatement(if)
handleIdentifier(x, expression)
handleNoTypeArguments(==)
handleNoArguments(==)
handleSend(x, ==)
beginBinaryExpression(==)
handleLiteralInt(0)
endBinaryExpression(==)
handleParenthesizedCondition(()
beginThenStatement(return)
beginReturnStatement(return)
handleLiteralInt(42)
endReturnStatement(true, return, ;)
endThenStatement(;)
endIfStatement(if, null)
beginReturnStatement(return)
beginNewExpression(new)
handleRecoverableError(Message[ExpectedIdentifier, Expected an identifier, but got '('., null, {token: (}], (, ()
handleIdentifier(, constructorReference)
beginConstructorReference()
handleNoTypeArguments(()
handleNoConstructorReferenceContinuationAfterTypeArguments(()
endConstructorReference(, null, ()
beginArguments(()
handleIdentifier(x, expression)
handleNoTypeArguments(-)
handleNoArguments(-)
handleSend(x, -)
beginBinaryExpression(-)
handleLiteralInt(1)
endBinaryExpression(-)
endArguments(1, (, ))
endNewExpression(new)
beginBinaryExpression(+)
handleLiteralInt(1)
endBinaryExpression(+)
endReturnStatement(true, return, ;)
endBlockFunctionBody(2, {, })
endClassMethod(null, , (, null, })
endMember()
beginMetadataStar(int)
endMetadataStar(0)
beginMember()
handleRecoverableError(MissingConstFinalVarOrType, int, int)
handleNoType(})
handleIdentifier(int, fieldDeclaration)
handleNoFieldInitializer(null)
handleRecoverableError(Message[ExpectedAfterButGot, Expected ';' after this., null, {string: ;}], int, int)
endClassFields(null, null, null, null, 1, int, ;)
endMember()
beginMetadataStar(null)
endMetadataStar(0)
beginMember()
handleRecoverableError(Message[ExpectedClassMember, Expected a class member, but got 'null'., null, {token: null}], null, null)
handleInvalidMember(null)
endMember()
beginMetadataStar(()
endMetadataStar(0)
beginMember()
beginMethod(null, null, null, null, null, ()
handleNoType(null)
handleRecoverableError(Message[ExpectedIdentifier, Expected an identifier, but got '('., null, {token: (}], (, ()
handleIdentifier(, methodDeclaration)
handleNoTypeVariables(()
beginFormalParameters((, MemberKind.NonStaticMethod)
beginMetadataStar(int)
endMetadataStar(0)
beginFormalParameter(int, MemberKind.NonStaticMethod, null, null, null)
handleIdentifier(int, typeReference)
handleNoTypeArguments(x)
handleType(int, null)
handleIdentifier(x, formalParameterDeclaration)
handleFormalParameterWithoutValue())
endFormalParameter(null, null, x, null, null, FormalParameterKind.mandatory, MemberKind.NonStaticMethod)
endFormalParameters(1, (, ), MemberKind.NonStaticMethod)
handleNoInitializers()
handleAsyncModifier(null, null)
beginBlockFunctionBody({)
beginIfStatement(if)
handleIdentifier(x, expression)
handleNoTypeArguments(==)
handleNoArguments(==)
handleSend(x, ==)
beginBinaryExpression(==)
handleLiteralInt(0)
endBinaryExpression(==)
handleParenthesizedCondition(()
beginThenStatement(return)
beginReturnStatement(return)
handleLiteralInt(42)
endReturnStatement(true, return, ;)
endThenStatement(;)
endIfStatement(if, null)
beginReturnStatement(return)
handleLiteralNull(null)
handleNoTypeArguments(()
beginArguments(()
handleIdentifier(x, expression)
handleNoTypeArguments(-)
handleNoArguments(-)
handleSend(x, -)
beginBinaryExpression(-)
handleLiteralInt(1)
endBinaryExpression(-)
endArguments(1, (, ))
handleSend((, ))
beginBinaryExpression(+)
handleLiteralInt(1)
endBinaryExpression(+)
endReturnStatement(true, return, ;)
endBlockFunctionBody(2, {, })
endClassMethod(null, , (, null, })
endMember()
beginMetadataStar(int)
endMetadataStar(0)
beginMember()
handleRecoverableError(MissingConstFinalVarOrType, int, int)
handleNoType(})
handleIdentifier(int, fieldDeclaration)
handleNoFieldInitializer(rethrow)
handleRecoverableError(Message[ExpectedAfterButGot, Expected ';' after this., null, {string: ;}], int, int)
endClassFields(null, null, null, null, 1, int, ;)
endMember()
beginMetadataStar(rethrow)
endMetadataStar(0)
beginMember()
handleRecoverableError(Message[ExpectedClassMember, Expected a class member, but got 'rethrow'., null, {token: rethrow}], rethrow, rethrow)
handleInvalidMember(rethrow)
endMember()
beginMetadataStar(()
endMetadataStar(0)
beginMember()
beginMethod(null, null, null, null, null, ()
handleNoType(rethrow)
handleRecoverableError(Message[ExpectedIdentifier, Expected an identifier, but got '('., null, {token: (}], (, ()
handleIdentifier(, methodDeclaration)
handleNoTypeVariables(()
beginFormalParameters((, MemberKind.NonStaticMethod)
beginMetadataStar(int)
endMetadataStar(0)
beginFormalParameter(int, MemberKind.NonStaticMethod, null, null, null)
handleIdentifier(int, typeReference)
handleNoTypeArguments(x)
handleType(int, null)
handleIdentifier(x, formalParameterDeclaration)
handleFormalParameterWithoutValue())
endFormalParameter(null, null, x, null, null, FormalParameterKind.mandatory, MemberKind.NonStaticMethod)
endFormalParameters(1, (, ), MemberKind.NonStaticMethod)
handleNoInitializers()
handleAsyncModifier(null, null)
beginBlockFunctionBody({)
beginIfStatement(if)
handleIdentifier(x, expression)
handleNoTypeArguments(==)
handleNoArguments(==)
handleSend(x, ==)
beginBinaryExpression(==)
handleLiteralInt(0)
endBinaryExpression(==)
handleParenthesizedCondition(()
beginThenStatement(return)
beginReturnStatement(return)
handleLiteralInt(42)
endReturnStatement(true, return, ;)
endThenStatement(;)
endIfStatement(if, null)
beginReturnStatement(return)
handleRecoverableError(Message[ExpectedIdentifier, Expected an identifier, but got 'rethrow'., null, {token: rethrow}], rethrow, rethrow)
handleIdentifier(rethrow, expression)
handleNoTypeArguments(()
beginArguments(()
handleIdentifier(x, expression)
handleNoTypeArguments(-)
handleNoArguments(-)
handleSend(x, -)
beginBinaryExpression(-)
handleLiteralInt(1)
endBinaryExpression(-)
endArguments(1, (, ))
handleSend(rethrow, +)
beginBinaryExpression(+)
handleLiteralInt(1)
endBinaryExpression(+)
endReturnStatement(true, return, ;)
endBlockFunctionBody(2, {, })
endClassMethod(null, , (, null, })
endMember()
beginMetadataStar(int)
endMetadataStar(0)
beginMember()
handleRecoverableError(MissingConstFinalVarOrType, int, int)
handleNoType(})
handleIdentifier(int, fieldDeclaration)
handleNoFieldInitializer(return)
handleRecoverableError(Message[ExpectedAfterButGot, Expected ';' after this., null, {string: ;}], int, int)
endClassFields(null, null, null, null, 1, int, ;)
endMember()
beginMetadataStar(return)
endMetadataStar(0)
beginMember()
handleRecoverableError(Message[ExpectedClassMember, Expected a class member, but got 'return'., null, {token: return}], return, return)
handleInvalidMember(return)
endMember()
beginMetadataStar(()
endMetadataStar(0)
beginMember()
beginMethod(null, null, null, null, null, ()
handleNoType(return)
handleRecoverableError(Message[ExpectedIdentifier, Expected an identifier, but got '('., null, {token: (}], (, ()
handleIdentifier(, methodDeclaration)
handleNoTypeVariables(()
beginFormalParameters((, MemberKind.NonStaticMethod)
beginMetadataStar(int)
endMetadataStar(0)
beginFormalParameter(int, MemberKind.NonStaticMethod, null, null, null)
handleIdentifier(int, typeReference)
handleNoTypeArguments(x)
handleType(int, null)
handleIdentifier(x, formalParameterDeclaration)
handleFormalParameterWithoutValue())
endFormalParameter(null, null, x, null, null, FormalParameterKind.mandatory, MemberKind.NonStaticMethod)
endFormalParameters(1, (, ), MemberKind.NonStaticMethod)
handleNoInitializers()
handleAsyncModifier(null, null)
beginBlockFunctionBody({)
beginIfStatement(if)
handleIdentifier(x, expression)
handleNoTypeArguments(==)
handleNoArguments(==)
handleSend(x, ==)
beginBinaryExpression(==)
handleLiteralInt(0)
endBinaryExpression(==)
handleParenthesizedCondition(()
beginThenStatement(return)
beginReturnStatement(return)
handleLiteralInt(42)
endReturnStatement(true, return, ;)
endThenStatement(;)
endIfStatement(if, null)
beginReturnStatement(return)
handleRecoverableError(Message[UnexpectedToken, Unexpected token 'return'., null, {token: return}], return, return)
handleIdentifier(x, expression)
handleNoTypeArguments(-)
handleNoArguments(-)
handleSend(x, -)
beginBinaryExpression(-)
handleLiteralInt(1)
endBinaryExpression(-)
handleParenthesizedExpression(()
beginBinaryExpression(+)
handleLiteralInt(1)
endBinaryExpression(+)
endReturnStatement(true, return, ;)
endBlockFunctionBody(2, {, })
endClassMethod(null, , (, null, })
endMember()
beginMetadataStar(int)
endMetadataStar(0)
beginMember()
handleRecoverableError(MissingConstFinalVarOrType, int, int)
handleNoType(})
handleIdentifier(int, fieldDeclaration)
handleNoFieldInitializer(super)
handleRecoverableError(Message[ExpectedAfterButGot, Expected ';' after this., null, {string: ;}], int, int)
endClassFields(null, null, null, null, 1, int, ;)
endMember()
beginMetadataStar(super)
endMetadataStar(0)
beginMember()
handleRecoverableError(Message[ExpectedClassMember, Expected a class member, but got 'super'., null, {token: super}], super, super)
handleInvalidMember(super)
endMember()
beginMetadataStar(()
endMetadataStar(0)
beginMember()
beginMethod(null, null, null, null, null, ()
handleNoType(super)
handleRecoverableError(Message[ExpectedIdentifier, Expected an identifier, but got '('., null, {token: (}], (, ()
handleIdentifier(, methodDeclaration)
handleNoTypeVariables(()
beginFormalParameters((, MemberKind.NonStaticMethod)
beginMetadataStar(int)
endMetadataStar(0)
beginFormalParameter(int, MemberKind.NonStaticMethod, null, null, null)
handleIdentifier(int, typeReference)
handleNoTypeArguments(x)
handleType(int, null)
handleIdentifier(x, formalParameterDeclaration)
handleFormalParameterWithoutValue())
endFormalParameter(null, null, x, null, null, FormalParameterKind.mandatory, MemberKind.NonStaticMethod)
endFormalParameters(1, (, ), MemberKind.NonStaticMethod)
handleNoInitializers()
handleAsyncModifier(null, null)
beginBlockFunctionBody({)
beginIfStatement(if)
handleIdentifier(x, expression)
handleNoTypeArguments(==)
handleNoArguments(==)
handleSend(x, ==)
beginBinaryExpression(==)
handleLiteralInt(0)
endBinaryExpression(==)
handleParenthesizedCondition(()
beginThenStatement(return)
beginReturnStatement(return)
handleLiteralInt(42)
endReturnStatement(true, return, ;)
endThenStatement(;)
endIfStatement(if, null)
beginReturnStatement(return)
handleSuperExpression(super, expression)
handleNoTypeArguments(()
beginArguments(()
handleIdentifier(x, expression)
handleNoTypeArguments(-)
handleNoArguments(-)
handleSend(x, -)
beginBinaryExpression(-)
handleLiteralInt(1)
endBinaryExpression(-)
endArguments(1, (, ))
handleSend(super, +)
beginBinaryExpression(+)
handleLiteralInt(1)
endBinaryExpression(+)
endReturnStatement(true, return, ;)
endBlockFunctionBody(2, {, })
endClassMethod(null, , (, null, })
endMember()
beginMetadataStar(int)
endMetadataStar(0)
beginMember()
handleRecoverableError(MissingConstFinalVarOrType, int, int)
handleNoType(})
handleIdentifier(int, fieldDeclaration)
handleNoFieldInitializer(switch)
handleRecoverableError(Message[ExpectedAfterButGot, Expected ';' after this., null, {string: ;}], int, int)
endClassFields(null, null, null, null, 1, int, ;)
endMember()
beginMetadataStar(switch)
endMetadataStar(0)
beginMember()
handleRecoverableError(Message[ExpectedClassMember, Expected a class member, but got 'switch'., null, {token: switch}], switch, switch)
handleInvalidMember(switch)
endMember()
beginMetadataStar(()
endMetadataStar(0)
beginMember()
beginMethod(null, null, null, null, null, ()
handleNoType(switch)
handleRecoverableError(Message[ExpectedIdentifier, Expected an identifier, but got '('., null, {token: (}], (, ()
handleIdentifier(, methodDeclaration)
handleNoTypeVariables(()
beginFormalParameters((, MemberKind.NonStaticMethod)
beginMetadataStar(int)
endMetadataStar(0)
beginFormalParameter(int, MemberKind.NonStaticMethod, null, null, null)
handleIdentifier(int, typeReference)
handleNoTypeArguments(x)
handleType(int, null)
handleIdentifier(x, formalParameterDeclaration)
handleFormalParameterWithoutValue())
endFormalParameter(null, null, x, null, null, FormalParameterKind.mandatory, MemberKind.NonStaticMethod)
endFormalParameters(1, (, ), MemberKind.NonStaticMethod)
handleNoInitializers()
handleAsyncModifier(null, null)
beginBlockFunctionBody({)
beginIfStatement(if)
handleIdentifier(x, expression)
handleNoTypeArguments(==)
handleNoArguments(==)
handleSend(x, ==)
beginBinaryExpression(==)
handleLiteralInt(0)
endBinaryExpression(==)
handleParenthesizedCondition(()
beginThenStatement(return)
beginReturnStatement(return)
handleLiteralInt(42)
endReturnStatement(true, return, ;)
endThenStatement(;)
endIfStatement(if, null)
beginReturnStatement(return)
handleRecoverableError(Message[ExpectedIdentifier, Expected an identifier, but got 'switch'., null, {token: switch}], switch, switch)
handleIdentifier(, expression)
handleNoTypeArguments(switch)
handleNoArguments(switch)
handleSend(, switch)
handleRecoverableError(Message[ExpectedAfterButGot, Expected ';' after this., null, {string: ;}], switch, switch)
endReturnStatement(true, return, ;)
beginSwitchStatement(switch)
handleIdentifier(x, expression)
handleNoTypeArguments(-)
handleNoArguments(-)
handleSend(x, -)
beginBinaryExpression(-)
handleLiteralInt(1)
endBinaryExpression(-)
handleParenthesizedCondition(()
handleRecoverableError(Message[ExpectedClassOrMixinBody, A switch statement must have a body, even if it is empty., Try adding an empty body., {string: switch statement}], ), ))
beginSwitchBlock({)
endSwitchBlock(0, {, })
endSwitchStatement(switch, })
handleRecoverableError(UnsupportedPrefixPlus, +, +)
handleIdentifier(, expression)
handleNoTypeArguments(+)
handleNoArguments(+)
handleSend(, +)
beginBinaryExpression(+)
handleLiteralInt(1)
endBinaryExpression(+)
handleExpressionStatement(;)
endBlockFunctionBody(4, {, })
endClassMethod(null, , (, null, })
endMember()
beginMetadataStar(int)
endMetadataStar(0)
beginMember()
handleIdentifier(int, typeReference)
handleNoTypeArguments(this)
handleType(int, null)
handleRecoverableError(Message[ExpectedIdentifier, Expected an identifier, but got 'this'., null, {token: this}], this, this)
handleIdentifier(this, fieldDeclaration)
handleNoFieldInitializer(()
handleRecoverableError(Message[ExpectedAfterButGot, Expected ';' after this., null, {string: ;}], this, this)
endClassFields(null, null, null, null, 1, int, ;)
endMember()
beginMetadataStar(()
endMetadataStar(0)
beginMember()
beginMethod(null, null, null, null, null, ()
handleNoType(;)
handleRecoverableError(Message[ExpectedIdentifier, Expected an identifier, but got '('., null, {token: (}], (, ()
handleIdentifier(, methodDeclaration)
handleNoTypeVariables(()
beginFormalParameters((, MemberKind.NonStaticMethod)
beginMetadataStar(int)
endMetadataStar(0)
beginFormalParameter(int, MemberKind.NonStaticMethod, null, null, null)
handleIdentifier(int, typeReference)
handleNoTypeArguments(x)
handleType(int, null)
handleIdentifier(x, formalParameterDeclaration)
handleFormalParameterWithoutValue())
endFormalParameter(null, null, x, null, null, FormalParameterKind.mandatory, MemberKind.NonStaticMethod)
endFormalParameters(1, (, ), MemberKind.NonStaticMethod)
handleNoInitializers()
handleAsyncModifier(null, null)
beginBlockFunctionBody({)
beginIfStatement(if)
handleIdentifier(x, expression)
handleNoTypeArguments(==)
handleNoArguments(==)
handleSend(x, ==)
beginBinaryExpression(==)
handleLiteralInt(0)
endBinaryExpression(==)
handleParenthesizedCondition(()
beginThenStatement(return)
beginReturnStatement(return)
handleLiteralInt(42)
endReturnStatement(true, return, ;)
endThenStatement(;)
endIfStatement(if, null)
beginReturnStatement(return)
handleThisExpression(this, expression)
handleNoTypeArguments(()
beginArguments(()
handleIdentifier(x, expression)
handleNoTypeArguments(-)
handleNoArguments(-)
handleSend(x, -)
beginBinaryExpression(-)
handleLiteralInt(1)
endBinaryExpression(-)
endArguments(1, (, ))
handleSend(this, +)
beginBinaryExpression(+)
handleLiteralInt(1)
endBinaryExpression(+)
endReturnStatement(true, return, ;)
endBlockFunctionBody(2, {, })
endClassMethod(null, , (, null, })
endMember()
beginMetadataStar(int)
endMetadataStar(0)
beginMember()
handleRecoverableError(MissingConstFinalVarOrType, int, int)
handleNoType(})
handleIdentifier(int, fieldDeclaration)
handleNoFieldInitializer(throw)
handleRecoverableError(Message[ExpectedAfterButGot, Expected ';' after this., null, {string: ;}], int, int)
endClassFields(null, null, null, null, 1, int, ;)
endMember()
beginMetadataStar(throw)
endMetadataStar(0)
beginMember()
handleRecoverableError(Message[ExpectedClassMember, Expected a class member, but got 'throw'., null, {token: throw}], throw, throw)
handleInvalidMember(throw)
endMember()
beginMetadataStar(()
endMetadataStar(0)
beginMember()
beginMethod(null, null, null, null, null, ()
handleNoType(throw)
handleRecoverableError(Message[ExpectedIdentifier, Expected an identifier, but got '('., null, {token: (}], (, ()
handleIdentifier(, methodDeclaration)
handleNoTypeVariables(()
beginFormalParameters((, MemberKind.NonStaticMethod)
beginMetadataStar(int)
endMetadataStar(0)
beginFormalParameter(int, MemberKind.NonStaticMethod, null, null, null)
handleIdentifier(int, typeReference)
handleNoTypeArguments(x)
handleType(int, null)
handleIdentifier(x, formalParameterDeclaration)
handleFormalParameterWithoutValue())
endFormalParameter(null, null, x, null, null, FormalParameterKind.mandatory, MemberKind.NonStaticMethod)
endFormalParameters(1, (, ), MemberKind.NonStaticMethod)
handleNoInitializers()
handleAsyncModifier(null, null)
beginBlockFunctionBody({)
beginIfStatement(if)
handleIdentifier(x, expression)
handleNoTypeArguments(==)
handleNoArguments(==)
handleSend(x, ==)
beginBinaryExpression(==)
handleLiteralInt(0)
endBinaryExpression(==)
handleParenthesizedCondition(()
beginThenStatement(return)
beginReturnStatement(return)
handleLiteralInt(42)
endReturnStatement(true, return, ;)
endThenStatement(;)
endIfStatement(if, null)
beginReturnStatement(return)
handleIdentifier(x, expression)
handleNoTypeArguments(-)
handleNoArguments(-)
handleSend(x, -)
beginBinaryExpression(-)
handleLiteralInt(1)
endBinaryExpression(-)
handleParenthesizedExpression(()
beginBinaryExpression(+)
handleLiteralInt(1)
endBinaryExpression(+)
handleThrowExpression(throw, ;)
endReturnStatement(true, return, ;)
endBlockFunctionBody(2, {, })
endClassMethod(null, , (, null, })
endMember()
beginMetadataStar(int)
endMetadataStar(0)
beginMember()
handleRecoverableError(MissingConstFinalVarOrType, int, int)
handleNoType(})
handleIdentifier(int, fieldDeclaration)
handleNoFieldInitializer(true)
handleRecoverableError(Message[ExpectedAfterButGot, Expected ';' after this., null, {string: ;}], int, int)
endClassFields(null, null, null, null, 1, int, ;)
endMember()
beginMetadataStar(true)
endMetadataStar(0)
beginMember()
handleRecoverableError(Message[ExpectedClassMember, Expected a class member, but got 'true'., null, {token: true}], true, true)
handleInvalidMember(true)
endMember()
beginMetadataStar(()
endMetadataStar(0)
beginMember()
beginMethod(null, null, null, null, null, ()
handleNoType(true)
handleRecoverableError(Message[ExpectedIdentifier, Expected an identifier, but got '('., null, {token: (}], (, ()
handleIdentifier(, methodDeclaration)
handleNoTypeVariables(()
beginFormalParameters((, MemberKind.NonStaticMethod)
beginMetadataStar(int)
endMetadataStar(0)
beginFormalParameter(int, MemberKind.NonStaticMethod, null, null, null)
handleIdentifier(int, typeReference)
handleNoTypeArguments(x)
handleType(int, null)
handleIdentifier(x, formalParameterDeclaration)
handleFormalParameterWithoutValue())
endFormalParameter(null, null, x, null, null, FormalParameterKind.mandatory, MemberKind.NonStaticMethod)
endFormalParameters(1, (, ), MemberKind.NonStaticMethod)
handleNoInitializers()
handleAsyncModifier(null, null)
beginBlockFunctionBody({)
beginIfStatement(if)
handleIdentifier(x, expression)
handleNoTypeArguments(==)
handleNoArguments(==)
handleSend(x, ==)
beginBinaryExpression(==)
handleLiteralInt(0)
endBinaryExpression(==)
handleParenthesizedCondition(()
beginThenStatement(return)
beginReturnStatement(return)
handleLiteralInt(42)
endReturnStatement(true, return, ;)
endThenStatement(;)
endIfStatement(if, null)
beginReturnStatement(return)
handleLiteralBool(true)
handleNoTypeArguments(()
beginArguments(()
handleIdentifier(x, expression)
handleNoTypeArguments(-)
handleNoArguments(-)
handleSend(x, -)
beginBinaryExpression(-)
handleLiteralInt(1)
endBinaryExpression(-)
endArguments(1, (, ))
handleSend((, ))
beginBinaryExpression(+)
handleLiteralInt(1)
endBinaryExpression(+)
endReturnStatement(true, return, ;)
endBlockFunctionBody(2, {, })
endClassMethod(null, , (, null, })
endMember()
beginMetadataStar(int)
endMetadataStar(0)
beginMember()
handleRecoverableError(MissingConstFinalVarOrType, int, int)
handleNoType(})
handleIdentifier(int, fieldDeclaration)
handleNoFieldInitializer(try)
handleRecoverableError(Message[ExpectedAfterButGot, Expected ';' after this., null, {string: ;}], int, int)
endClassFields(null, null, null, null, 1, int, ;)
endMember()
beginMetadataStar(try)
endMetadataStar(0)
beginMember()
handleRecoverableError(Message[ExpectedClassMember, Expected a class member, but got 'try'., null, {token: try}], try, try)
handleInvalidMember(try)
endMember()
beginMetadataStar(()
endMetadataStar(0)
beginMember()
beginMethod(null, null, null, null, null, ()
handleNoType(try)
handleRecoverableError(Message[ExpectedIdentifier, Expected an identifier, but got '('., null, {token: (}], (, ()
handleIdentifier(, methodDeclaration)
handleNoTypeVariables(()
beginFormalParameters((, MemberKind.NonStaticMethod)
beginMetadataStar(int)
endMetadataStar(0)
beginFormalParameter(int, MemberKind.NonStaticMethod, null, null, null)
handleIdentifier(int, typeReference)
handleNoTypeArguments(x)
handleType(int, null)
handleIdentifier(x, formalParameterDeclaration)
handleFormalParameterWithoutValue())
endFormalParameter(null, null, x, null, null, FormalParameterKind.mandatory, MemberKind.NonStaticMethod)
endFormalParameters(1, (, ), MemberKind.NonStaticMethod)
handleNoInitializers()
handleAsyncModifier(null, null)
beginBlockFunctionBody({)
beginIfStatement(if)
handleIdentifier(x, expression)
handleNoTypeArguments(==)
handleNoArguments(==)
handleSend(x, ==)
beginBinaryExpression(==)
handleLiteralInt(0)
endBinaryExpression(==)
handleParenthesizedCondition(()
beginThenStatement(return)
beginReturnStatement(return)
handleLiteralInt(42)
endReturnStatement(true, return, ;)
endThenStatement(;)
endIfStatement(if, null)
beginReturnStatement(return)
handleRecoverableError(Message[ExpectedIdentifier, Expected an identifier, but got 'try'., null, {token: try}], try, try)
handleIdentifier(, expression)
handleNoTypeArguments(try)
handleNoArguments(try)
handleSend(, try)
handleRecoverableError(Message[ExpectedAfterButGot, Expected ';' after this., null, {string: ;}], try, try)
endReturnStatement(true, return, ;)
beginTryStatement(try)
handleRecoverableError(Message[ExpectedClassOrMixinBody, A try statement must have a body, even if it is empty., Try adding an empty body., {string: try statement}], try, try)
beginBlock({, BlockKind(try statement))
endBlock(0, {, }, BlockKind(try statement))
handleRecoverableError(OnlyTry, try, try)
endTryStatement(0, try, null)
handleIdentifier(x, expression)
handleNoTypeArguments(-)
handleNoArguments(-)
handleSend(x, -)
beginBinaryExpression(-)
handleLiteralInt(1)
endBinaryExpression(-)
handleParenthesizedExpression(()
beginBinaryExpression(+)
handleLiteralInt(1)
endBinaryExpression(+)
handleExpressionStatement(;)
endBlockFunctionBody(4, {, })
endClassMethod(null, , (, null, })
endMember()
beginMetadataStar(int)
endMetadataStar(0)
beginMember()
handleRecoverableError(MissingConstFinalVarOrType, int, int)
handleNoType(})
handleIdentifier(int, fieldDeclaration)
handleNoFieldInitializer(var)
handleRecoverableError(Message[ExpectedAfterButGot, Expected ';' after this., null, {string: ;}], int, int)
endClassFields(null, null, null, null, 1, int, ;)
endMember()
beginMetadataStar(var)
endMetadataStar(0)
beginMember()
handleRecoverableError(VarReturnType, var, var)
beginMethod(null, null, null, null, null, ()
handleNoType(var)
handleRecoverableError(Message[ExpectedIdentifier, Expected an identifier, but got '('., null, {token: (}], (, ()
handleIdentifier(, methodDeclaration)
handleNoTypeVariables(()
beginFormalParameters((, MemberKind.NonStaticMethod)
beginMetadataStar(int)
endMetadataStar(0)
beginFormalParameter(int, MemberKind.NonStaticMethod, null, null, null)
handleIdentifier(int, typeReference)
handleNoTypeArguments(x)
handleType(int, null)
handleIdentifier(x, formalParameterDeclaration)
handleFormalParameterWithoutValue())
endFormalParameter(null, null, x, null, null, FormalParameterKind.mandatory, MemberKind.NonStaticMethod)
endFormalParameters(1, (, ), MemberKind.NonStaticMethod)
handleNoInitializers()
handleAsyncModifier(null, null)
beginBlockFunctionBody({)
beginIfStatement(if)
handleIdentifier(x, expression)
handleNoTypeArguments(==)
handleNoArguments(==)
handleSend(x, ==)
beginBinaryExpression(==)
handleLiteralInt(0)
endBinaryExpression(==)
handleParenthesizedCondition(()
beginThenStatement(return)
beginReturnStatement(return)
handleLiteralInt(42)
endReturnStatement(true, return, ;)
endThenStatement(;)
endIfStatement(if, null)
beginReturnStatement(return)
handleRecoverableError(Message[ExpectedIdentifier, Expected an identifier, but got 'var'., null, {token: var}], var, var)
handleIdentifier(, expression)
handleNoTypeArguments(var)
handleNoArguments(var)
handleSend(, var)
handleRecoverableError(Message[ExpectedAfterButGot, Expected ';' after this., null, {string: ;}], var, var)
endReturnStatement(true, return, ;)
beginMetadataStar(var)
endMetadataStar(0)
handleNoType(var)
beginVariablesDeclaration((, null, var)
handleRecoverableError(Message[ExpectedIdentifier, Expected an identifier, but got '('., null, {token: (}], (, ()
handleIdentifier(, localVariableDeclaration)
beginInitializedIdentifier()
handleNoVariableInitializer(x)
endInitializedIdentifier()
handleRecoverableError(Message[ExpectedAfterButGot, Expected ';' after this., null, {string: ;}], x, x)
endVariablesDeclaration(1, ;)
handleIdentifier(x, expression)
handleNoTypeArguments(-)
handleNoArguments(-)
handleSend(x, -)
beginBinaryExpression(-)
handleLiteralInt(1)
endBinaryExpression(-)
handleRecoverableError(Message[ExpectedAfterButGot, Expected ';' after this., null, {string: ;}], 1, 1)
handleExpressionStatement(;)
handleRecoverableError(Message[ExpectedIdentifier, Expected an identifier, but got ')'., null, {token: )}], ), ))
handleIdentifier(, expression)
handleNoTypeArguments())
handleNoArguments())
handleSend(, ))
handleRecoverableError(Message[ExpectedAfterButGot, Expected ';' after this., null, {string: ;}], ), ))
handleExpressionStatement(;)
handleRecoverableError(Message[UnexpectedToken, Unexpected token ';'., null, {token: ;}], ), ))
handleRecoverableError(UnsupportedPrefixPlus, +, +)
handleIdentifier(, expression)
handleNoTypeArguments(+)
handleNoArguments(+)
handleSend(, +)
beginBinaryExpression(+)
handleLiteralInt(1)
endBinaryExpression(+)
handleExpressionStatement(;)
endBlockFunctionBody(6, {, })
endClassMethod(null, var, (, null, })
endMember()
beginMetadataStar(int)
endMetadataStar(0)
beginMember()
handleRecoverableError(MissingConstFinalVarOrType, int, int)
handleNoType(})
handleIdentifier(int, fieldDeclaration)
handleNoFieldInitializer(void)
handleRecoverableError(Message[ExpectedAfterButGot, Expected ';' after this., null, {string: ;}], int, int)
endClassFields(null, null, null, null, 1, int, ;)
endMember()
beginMetadataStar(void)
endMetadataStar(0)
beginMember()
beginMethod(null, null, null, null, null, ()
handleVoidKeyword(void)
handleRecoverableError(Message[ExpectedIdentifier, Expected an identifier, but got '('., null, {token: (}], (, ()
handleIdentifier(, methodDeclaration)
handleNoTypeVariables(()
beginFormalParameters((, MemberKind.NonStaticMethod)
beginMetadataStar(int)
endMetadataStar(0)
beginFormalParameter(int, MemberKind.NonStaticMethod, null, null, null)
handleIdentifier(int, typeReference)
handleNoTypeArguments(x)
handleType(int, null)
handleIdentifier(x, formalParameterDeclaration)
handleFormalParameterWithoutValue())
endFormalParameter(null, null, x, null, null, FormalParameterKind.mandatory, MemberKind.NonStaticMethod)
endFormalParameters(1, (, ), MemberKind.NonStaticMethod)
handleNoInitializers()
handleAsyncModifier(null, null)
beginBlockFunctionBody({)
beginIfStatement(if)
handleIdentifier(x, expression)
handleNoTypeArguments(==)
handleNoArguments(==)
handleSend(x, ==)
beginBinaryExpression(==)
handleLiteralInt(0)
endBinaryExpression(==)
handleParenthesizedCondition(()
beginThenStatement(return)
beginReturnStatement(return)
handleLiteralInt(42)
endReturnStatement(true, return, ;)
endThenStatement(;)
endIfStatement(if, null)
beginReturnStatement(return)
handleRecoverableError(Message[ExpectedIdentifier, Expected an identifier, but got 'void'., null, {token: void}], void, void)
handleIdentifier(, expression)
handleNoTypeArguments(void)
handleNoArguments(void)
handleSend(, void)
handleRecoverableError(Message[ExpectedAfterButGot, Expected ';' after this., null, {string: ;}], void, void)
endReturnStatement(true, return, ;)
beginMetadataStar(void)
endMetadataStar(0)
handleVoidKeyword(void)
beginVariablesDeclaration((, null, null)
handleRecoverableError(Message[ExpectedIdentifier, Expected an identifier, but got '('., null, {token: (}], (, ()
handleIdentifier(, localVariableDeclaration)
beginInitializedIdentifier()
handleNoVariableInitializer(x)
endInitializedIdentifier()
handleRecoverableError(Message[ExpectedAfterButGot, Expected ';' after this., null, {string: ;}], x, x)
endVariablesDeclaration(1, ;)
handleIdentifier(x, expression)
handleNoTypeArguments(-)
handleNoArguments(-)
handleSend(x, -)
beginBinaryExpression(-)
handleLiteralInt(1)
endBinaryExpression(-)
handleRecoverableError(Message[ExpectedAfterButGot, Expected ';' after this., null, {string: ;}], 1, 1)
handleExpressionStatement(;)
handleRecoverableError(Message[ExpectedIdentifier, Expected an identifier, but got ')'., null, {token: )}], ), ))
handleIdentifier(, expression)
handleNoTypeArguments())
handleNoArguments())
handleSend(, ))
handleRecoverableError(Message[ExpectedAfterButGot, Expected ';' after this., null, {string: ;}], ), ))
handleExpressionStatement(;)
handleRecoverableError(Message[UnexpectedToken, Unexpected token ';'., null, {token: ;}], ), ))
handleRecoverableError(UnsupportedPrefixPlus, +, +)
handleIdentifier(, expression)
handleNoTypeArguments(+)
handleNoArguments(+)
handleSend(, +)
beginBinaryExpression(+)
handleLiteralInt(1)
endBinaryExpression(+)
handleExpressionStatement(;)
endBlockFunctionBody(6, {, })
endClassMethod(null, void, (, null, })
endMember()
beginMetadataStar(int)
endMetadataStar(0)
beginMember()
handleRecoverableError(MissingConstFinalVarOrType, int, int)
handleNoType(})
handleIdentifier(int, fieldDeclaration)
handleNoFieldInitializer(while)
handleRecoverableError(Message[ExpectedAfterButGot, Expected ';' after this., null, {string: ;}], int, int)
endClassFields(null, null, null, null, 1, int, ;)
endMember()
beginMetadataStar(while)
endMetadataStar(0)
beginMember()
handleRecoverableError(Message[ExpectedClassMember, Expected a class member, but got 'while'., null, {token: while}], while, while)
handleInvalidMember(while)
endMember()
beginMetadataStar(()
endMetadataStar(0)
beginMember()
beginMethod(null, null, null, null, null, ()
handleNoType(while)
handleRecoverableError(Message[ExpectedIdentifier, Expected an identifier, but got '('., null, {token: (}], (, ()
handleIdentifier(, methodDeclaration)
handleNoTypeVariables(()
beginFormalParameters((, MemberKind.NonStaticMethod)
beginMetadataStar(int)
endMetadataStar(0)
beginFormalParameter(int, MemberKind.NonStaticMethod, null, null, null)
handleIdentifier(int, typeReference)
handleNoTypeArguments(x)
handleType(int, null)
handleIdentifier(x, formalParameterDeclaration)
handleFormalParameterWithoutValue())
endFormalParameter(null, null, x, null, null, FormalParameterKind.mandatory, MemberKind.NonStaticMethod)
endFormalParameters(1, (, ), MemberKind.NonStaticMethod)
handleNoInitializers()
handleAsyncModifier(null, null)
beginBlockFunctionBody({)
beginIfStatement(if)
handleIdentifier(x, expression)
handleNoTypeArguments(==)
handleNoArguments(==)
handleSend(x, ==)
beginBinaryExpression(==)
handleLiteralInt(0)
endBinaryExpression(==)
handleParenthesizedCondition(()
beginThenStatement(return)
beginReturnStatement(return)
handleLiteralInt(42)
endReturnStatement(true, return, ;)
endThenStatement(;)
endIfStatement(if, null)
beginReturnStatement(return)
handleRecoverableError(Message[ExpectedIdentifier, Expected an identifier, but got 'while'., null, {token: while}], while, while)
handleIdentifier(, expression)
handleNoTypeArguments(while)
handleNoArguments(while)
handleSend(, while)
handleRecoverableError(Message[ExpectedAfterButGot, Expected ';' after this., null, {string: ;}], while, while)
endReturnStatement(true, return, ;)
beginWhileStatement(while)
handleIdentifier(x, expression)
handleNoTypeArguments(-)
handleNoArguments(-)
handleSend(x, -)
beginBinaryExpression(-)
handleLiteralInt(1)
endBinaryExpression(-)
handleParenthesizedCondition(()
beginWhileStatementBody(+)
handleRecoverableError(UnsupportedPrefixPlus, +, +)
handleIdentifier(, expression)
handleNoTypeArguments(+)
handleNoArguments(+)
handleSend(, +)
beginBinaryExpression(+)
handleLiteralInt(1)
endBinaryExpression(+)
handleExpressionStatement(;)
endWhileStatementBody(})
endWhileStatement(while, })
endBlockFunctionBody(3, {, })
endClassMethod(null, , (, null, })
endMember()
beginMetadataStar(int)
endMetadataStar(0)
beginMember()
handleRecoverableError(MissingConstFinalVarOrType, int, int)
handleNoType(})
handleIdentifier(int, fieldDeclaration)
handleNoFieldInitializer(with)
handleRecoverableError(Message[ExpectedAfterButGot, Expected ';' after this., null, {string: ;}], int, int)
endClassFields(null, null, null, null, 1, int, ;)
endMember()
beginMetadataStar(with)
endMetadataStar(0)
beginMember()
handleRecoverableError(Message[ExpectedClassMember, Expected a class member, but got 'with'., null, {token: with}], with, with)
handleInvalidMember(with)
endMember()
beginMetadataStar(()
endMetadataStar(0)
beginMember()
beginMethod(null, null, null, null, null, ()
handleNoType(with)
handleRecoverableError(Message[ExpectedIdentifier, Expected an identifier, but got '('., null, {token: (}], (, ()
handleIdentifier(, methodDeclaration)
handleNoTypeVariables(()
beginFormalParameters((, MemberKind.NonStaticMethod)
beginMetadataStar(int)
endMetadataStar(0)
beginFormalParameter(int, MemberKind.NonStaticMethod, null, null, null)
handleIdentifier(int, typeReference)
handleNoTypeArguments(x)
handleType(int, null)
handleIdentifier(x, formalParameterDeclaration)
handleFormalParameterWithoutValue())
endFormalParameter(null, null, x, null, null, FormalParameterKind.mandatory, MemberKind.NonStaticMethod)
endFormalParameters(1, (, ), MemberKind.NonStaticMethod)
handleNoInitializers()
handleAsyncModifier(null, null)
beginBlockFunctionBody({)
beginIfStatement(if)
handleIdentifier(x, expression)
handleNoTypeArguments(==)
handleNoArguments(==)
handleSend(x, ==)
beginBinaryExpression(==)
handleLiteralInt(0)
endBinaryExpression(==)
handleParenthesizedCondition(()
beginThenStatement(return)
beginReturnStatement(return)
handleLiteralInt(42)
endReturnStatement(true, return, ;)
endThenStatement(;)
endIfStatement(if, null)
beginReturnStatement(return)
handleRecoverableError(Message[ExpectedIdentifier, Expected an identifier, but got 'with'., null, {token: with}], with, with)
handleIdentifier(with, expression)
handleNoTypeArguments(()
beginArguments(()
handleIdentifier(x, expression)
handleNoTypeArguments(-)
handleNoArguments(-)
handleSend(x, -)
beginBinaryExpression(-)
handleLiteralInt(1)
endBinaryExpression(-)
endArguments(1, (, ))
handleSend(with, +)
beginBinaryExpression(+)
handleLiteralInt(1)
endBinaryExpression(+)
endReturnStatement(true, return, ;)
endBlockFunctionBody(2, {, })
endClassMethod(null, , (, null, })
endMember()
endClassOrMixinBody(DeclarationKind.Class, 94, {, })
endClassDeclaration(class, })
endTopLevelDeclaration()
endCompilationUnit(1, )
