Problems reported:

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

parser/error_recovery/reserved_words_top_level_methods:1:1: Expected ';' after this.
int assert(int x) {
^^^

parser/error_recovery/reserved_words_top_level_methods:1:5: Expected an identifier, but got 'assert'.
int assert(int x) {
    ^^^^^^

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

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

parser/error_recovery/reserved_words_top_level_methods:6:1: Expected ';' after this.
int break(int x) {
^^^

parser/error_recovery/reserved_words_top_level_methods:6:5: Expected an identifier, but got 'break'.
int break(int x) {
    ^^^^^

parser/error_recovery/reserved_words_top_level_methods:8:10: Expected an identifier, but got 'break'.
  return break(x-1) + 1;
         ^^^^^

parser/error_recovery/reserved_words_top_level_methods:8:10: Expected ';' after this.
  return break(x-1) + 1;
         ^^^^^

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

parser/error_recovery/reserved_words_top_level_methods:8:10: Expected ';' after this.
  return break(x-1) + 1;
         ^^^^^

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

parser/error_recovery/reserved_words_top_level_methods:11:1: Expected ';' after this.
int case(int x) {
^^^

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

parser/error_recovery/reserved_words_top_level_methods:13:10: Expected an identifier, but got 'case'.
  return case(x-1) + 1;
         ^^^^

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

parser/error_recovery/reserved_words_top_level_methods:16:1: Expected ';' after this.
int catch(int x) {
^^^

parser/error_recovery/reserved_words_top_level_methods:16:5: Expected an identifier, but got 'catch'.
int catch(int x) {
    ^^^^^

parser/error_recovery/reserved_words_top_level_methods:18:10: Expected an identifier, but got 'catch'.
  return catch(x-1) + 1;
         ^^^^^

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

parser/error_recovery/reserved_words_top_level_methods:21:1: Expected ';' after this.
int class(int x) {
^^^

parser/error_recovery/reserved_words_top_level_methods:21:10: Expected an identifier, but got '('.
int class(int x) {
         ^

parser/error_recovery/reserved_words_top_level_methods:21:11: A class declaration must have a body, even if it is empty.
int class(int x) {
          ^^^

parser/error_recovery/reserved_words_top_level_methods:21:15: Expected ';' after this.
int class(int x) {
              ^

parser/error_recovery/reserved_words_top_level_methods:21:16: Expected a declaration, but got ')'.
int class(int x) {
               ^

parser/error_recovery/reserved_words_top_level_methods:21:18: Expected a declaration, but got '{'.
int class(int x) {
                 ^

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

parser/error_recovery/reserved_words_top_level_methods:26:1: Expected ';' after this.
int const(int x) {
^^^

parser/error_recovery/reserved_words_top_level_methods:26:10: Expected an identifier, but got '('.
int const(int x) {
         ^

parser/error_recovery/reserved_words_top_level_methods:26:5: Can't have modifier 'const' here.
int const(int x) {
    ^^^^^

parser/error_recovery/reserved_words_top_level_methods:28:15: Expected an identifier, but got '('.
  return const(x-1) + 1;
              ^

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

parser/error_recovery/reserved_words_top_level_methods:31:1: Expected ';' after this.
int continue(int x) {
^^^

parser/error_recovery/reserved_words_top_level_methods:31:5: Expected an identifier, but got 'continue'.
int continue(int x) {
    ^^^^^^^^

parser/error_recovery/reserved_words_top_level_methods:33:10: Expected an identifier, but got 'continue'.
  return continue(x-1) + 1;
         ^^^^^^^^

parser/error_recovery/reserved_words_top_level_methods:33:10: Expected ';' after this.
  return continue(x-1) + 1;
         ^^^^^^^^

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

parser/error_recovery/reserved_words_top_level_methods:33:10: Expected ';' after this.
  return continue(x-1) + 1;
         ^^^^^^^^

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

parser/error_recovery/reserved_words_top_level_methods:36:1: Expected ';' after this.
int default(int x) {
^^^

parser/error_recovery/reserved_words_top_level_methods:36:5: Expected an identifier, but got 'default'.
int default(int x) {
    ^^^^^^^

parser/error_recovery/reserved_words_top_level_methods:38:10: Expected an identifier, but got 'default'.
  return default(x-1) + 1;
         ^^^^^^^

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

parser/error_recovery/reserved_words_top_level_methods:41:1: Expected ';' after this.
int do(int x) {
^^^

parser/error_recovery/reserved_words_top_level_methods:41:5: Expected an identifier, but got 'do'.
int do(int x) {
    ^^

parser/error_recovery/reserved_words_top_level_methods:43:10: Expected an identifier, but got 'do'.
  return do(x-1) + 1;
         ^^

parser/error_recovery/reserved_words_top_level_methods:43:10: Expected ';' after this.
  return do(x-1) + 1;
         ^^

parser/error_recovery/reserved_words_top_level_methods:44:1: Expected 'while' before this.
}
^

parser/error_recovery/reserved_words_top_level_methods:44:1: Expected to find '('.
}
^

parser/error_recovery/reserved_words_top_level_methods:44:1: Expected an identifier, but got '}'.
}
^

parser/error_recovery/reserved_words_top_level_methods:44:1: Expected ';' after this.
}
^

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

parser/error_recovery/reserved_words_top_level_methods:46:1: Expected ';' after this.
int else(int x) {
^^^

parser/error_recovery/reserved_words_top_level_methods:46:5: Expected an identifier, but got 'else'.
int else(int x) {
    ^^^^

parser/error_recovery/reserved_words_top_level_methods:48:10: Expected an identifier, but got 'else'.
  return else(x-1) + 1;
         ^^^^

parser/error_recovery/reserved_words_top_level_methods:48:10: Expected ';' after this.
  return else(x-1) + 1;
         ^^^^

parser/error_recovery/reserved_words_top_level_methods:48:10: Expected an identifier, but got 'else'.
  return else(x-1) + 1;
         ^^^^

parser/error_recovery/reserved_words_top_level_methods:48:10: Expected ';' after this.
  return else(x-1) + 1;
         ^^^^

parser/error_recovery/reserved_words_top_level_methods:48:10: Unexpected token ';'.
  return else(x-1) + 1;
         ^^^^

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

parser/error_recovery/reserved_words_top_level_methods:51:1: Expected ';' after this.
int enum(int x) {
^^^

parser/error_recovery/reserved_words_top_level_methods:51:9: Expected an identifier, but got '('.
int enum(int x) {
        ^

parser/error_recovery/reserved_words_top_level_methods:51:10: Expected a enum body, but got 'int'.
int enum(int x) {
         ^^^

parser/error_recovery/reserved_words_top_level_methods:51:14: Expected ';' after this.
int enum(int x) {
             ^

parser/error_recovery/reserved_words_top_level_methods:51:15: Expected a declaration, but got ')'.
int enum(int x) {
              ^

parser/error_recovery/reserved_words_top_level_methods:51:17: Expected a declaration, but got '{'.
int enum(int x) {
                ^

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

parser/error_recovery/reserved_words_top_level_methods:56:1: Expected ';' after this.
int extends(int x) {
^^^

parser/error_recovery/reserved_words_top_level_methods:56:5: Expected an identifier, but got 'extends'.
int extends(int x) {
    ^^^^^^^

parser/error_recovery/reserved_words_top_level_methods:58:10: Expected an identifier, but got 'extends'.
  return extends(x-1) + 1;
         ^^^^^^^

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

parser/error_recovery/reserved_words_top_level_methods:61:1: Expected ';' after this.
int false(int x) {
^^^

parser/error_recovery/reserved_words_top_level_methods:61:5: Expected an identifier, but got 'false'.
int false(int x) {
    ^^^^^

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

parser/error_recovery/reserved_words_top_level_methods:66:1: Expected ';' after this.
int final(int x) {
^^^

parser/error_recovery/reserved_words_top_level_methods:66:10: Expected an identifier, but got '('.
int final(int x) {
         ^

parser/error_recovery/reserved_words_top_level_methods:66:5: Can't have modifier 'final' here.
int final(int x) {
    ^^^^^

parser/error_recovery/reserved_words_top_level_methods:68:10: Expected an identifier, but got 'final'.
  return final(x-1) + 1;
         ^^^^^

parser/error_recovery/reserved_words_top_level_methods:68:10: Expected ';' after this.
  return final(x-1) + 1;
         ^^^^^

parser/error_recovery/reserved_words_top_level_methods:68:15: Expected an identifier, but got '('.
  return final(x-1) + 1;
              ^

parser/error_recovery/reserved_words_top_level_methods:68:16: Expected ';' after this.
  return final(x-1) + 1;
               ^

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

parser/error_recovery/reserved_words_top_level_methods:68:19: Expected an identifier, but got ')'.
  return final(x-1) + 1;
                  ^

parser/error_recovery/reserved_words_top_level_methods:68:19: Expected ';' after this.
  return final(x-1) + 1;
                  ^

parser/error_recovery/reserved_words_top_level_methods:68:19: Unexpected token ';'.
  return final(x-1) + 1;
                  ^

parser/error_recovery/reserved_words_top_level_methods:68:21: '+' is not a prefix operator.
  return final(x-1) + 1;
                    ^

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

parser/error_recovery/reserved_words_top_level_methods:71:1: Expected ';' after this.
int finally(int x) {
^^^

parser/error_recovery/reserved_words_top_level_methods:71:5: Expected an identifier, but got 'finally'.
int finally(int x) {
    ^^^^^^^

parser/error_recovery/reserved_words_top_level_methods:73:10: Expected an identifier, but got 'finally'.
  return finally(x-1) + 1;
         ^^^^^^^

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

parser/error_recovery/reserved_words_top_level_methods:76:1: Expected ';' after this.
int for(int x) {
^^^

parser/error_recovery/reserved_words_top_level_methods:76:5: Expected an identifier, but got 'for'.
int for(int x) {
    ^^^

parser/error_recovery/reserved_words_top_level_methods:78:10: Expected an identifier, but got 'for'.
  return for(x-1) + 1;
         ^^^

parser/error_recovery/reserved_words_top_level_methods:78:10: Expected ';' after this.
  return for(x-1) + 1;
         ^^^

parser/error_recovery/reserved_words_top_level_methods:78:16: Expected ';' after this.
  return for(x-1) + 1;
               ^

parser/error_recovery/reserved_words_top_level_methods:78:17: Expected an identifier, but got ')'.
  return for(x-1) + 1;
                ^

parser/error_recovery/reserved_words_top_level_methods:78:17: Expected ';' after this.
  return for(x-1) + 1;
                ^

parser/error_recovery/reserved_words_top_level_methods:78:19: '+' is not a prefix operator.
  return for(x-1) + 1;
                  ^

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

parser/error_recovery/reserved_words_top_level_methods:81:1: Expected ';' after this.
int if(int x) {
^^^

parser/error_recovery/reserved_words_top_level_methods:81:5: Expected an identifier, but got 'if'.
int if(int x) {
    ^^

parser/error_recovery/reserved_words_top_level_methods:83:10: Expected an identifier, but got 'if'.
  return if(x-1) + 1;
         ^^

parser/error_recovery/reserved_words_top_level_methods:83:10: Expected ';' after this.
  return if(x-1) + 1;
         ^^

parser/error_recovery/reserved_words_top_level_methods:83:18: '+' is not a prefix operator.
  return if(x-1) + 1;
                 ^

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

parser/error_recovery/reserved_words_top_level_methods:86:1: Expected ';' after this.
int in(int x) {
^^^

parser/error_recovery/reserved_words_top_level_methods:86:5: Expected an identifier, but got 'in'.
int in(int x) {
    ^^

parser/error_recovery/reserved_words_top_level_methods:88:10: Expected an identifier, but got 'in'.
  return in(x-1) + 1;
         ^^

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

parser/error_recovery/reserved_words_top_level_methods:91:1: Expected ';' after this.
int is(int x) {
^^^

parser/error_recovery/reserved_words_top_level_methods:91:5: Expected an identifier, but got 'is'.
int is(int x) {
    ^^

parser/error_recovery/reserved_words_top_level_methods:93:10: Expected an identifier, but got 'is'.
  return is(x-1) + 1;
         ^^

parser/error_recovery/reserved_words_top_level_methods:93:12: Expected a type, but got '('.
  return is(x-1) + 1;
           ^

parser/error_recovery/reserved_words_top_level_methods:93:12: Expected ';' after this.
  return is(x-1) + 1;
           ^

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

parser/error_recovery/reserved_words_top_level_methods:96:1: Expected ';' after this.
int new(int x) {
^^^

parser/error_recovery/reserved_words_top_level_methods:96:5: Expected an identifier, but got 'new'.
int new(int x) {
    ^^^

parser/error_recovery/reserved_words_top_level_methods:98:13: Expected an identifier, but got '('.
  return new(x-1) + 1;
            ^

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

parser/error_recovery/reserved_words_top_level_methods:101:1: Expected ';' after this.
int null(int x) {
^^^

parser/error_recovery/reserved_words_top_level_methods:101:5: Expected an identifier, but got 'null'.
int null(int x) {
    ^^^^

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

parser/error_recovery/reserved_words_top_level_methods:106:1: Expected ';' after this.
int rethrow(int x) {
^^^

parser/error_recovery/reserved_words_top_level_methods:106:5: Expected an identifier, but got 'rethrow'.
int rethrow(int x) {
    ^^^^^^^

parser/error_recovery/reserved_words_top_level_methods:108:10: Expected an identifier, but got 'rethrow'.
  return rethrow(x-1) + 1;
         ^^^^^^^

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

parser/error_recovery/reserved_words_top_level_methods:111:1: Expected ';' after this.
int return(int x) {
^^^

parser/error_recovery/reserved_words_top_level_methods:111:5: Expected an identifier, but got 'return'.
int return(int x) {
    ^^^^^^

parser/error_recovery/reserved_words_top_level_methods:113:10: Unexpected token 'return'.
  return return(x-1) + 1;
         ^^^^^^

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

parser/error_recovery/reserved_words_top_level_methods:116:1: Expected ';' after this.
int super(int x) {
^^^

parser/error_recovery/reserved_words_top_level_methods:116:5: Expected an identifier, but got 'super'.
int super(int x) {
    ^^^^^

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

parser/error_recovery/reserved_words_top_level_methods:121:1: Expected ';' after this.
int switch(int x) {
^^^

parser/error_recovery/reserved_words_top_level_methods:121:5: Expected an identifier, but got 'switch'.
int switch(int x) {
    ^^^^^^

parser/error_recovery/reserved_words_top_level_methods:123:10: Expected an identifier, but got 'switch'.
  return switch(x-1) + 1;
         ^^^^^^

parser/error_recovery/reserved_words_top_level_methods:123:10: Expected ';' after this.
  return switch(x-1) + 1;
         ^^^^^^

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

parser/error_recovery/reserved_words_top_level_methods:123:22: '+' is not a prefix operator.
  return switch(x-1) + 1;
                     ^

parser/error_recovery/reserved_words_top_level_methods:126:5: Expected an identifier, but got 'this'.
int this(int x) {
    ^^^^

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

parser/error_recovery/reserved_words_top_level_methods:131:1: Expected ';' after this.
int throw(int x) {
^^^

parser/error_recovery/reserved_words_top_level_methods:131:5: Expected an identifier, but got 'throw'.
int throw(int x) {
    ^^^^^

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

parser/error_recovery/reserved_words_top_level_methods:136:1: Expected ';' after this.
int true(int x) {
^^^

parser/error_recovery/reserved_words_top_level_methods:136:5: Expected an identifier, but got 'true'.
int true(int x) {
    ^^^^

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

parser/error_recovery/reserved_words_top_level_methods:141:1: Expected ';' after this.
int try(int x) {
^^^

parser/error_recovery/reserved_words_top_level_methods:141:5: Expected an identifier, but got 'try'.
int try(int x) {
    ^^^

parser/error_recovery/reserved_words_top_level_methods:143:10: Expected an identifier, but got 'try'.
  return try(x-1) + 1;
         ^^^

parser/error_recovery/reserved_words_top_level_methods:143:10: Expected ';' after this.
  return try(x-1) + 1;
         ^^^

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

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

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

parser/error_recovery/reserved_words_top_level_methods:146:1: Expected ';' after this.
int var(int x) {
^^^

parser/error_recovery/reserved_words_top_level_methods:146:8: Expected an identifier, but got '('.
int var(int x) {
       ^

parser/error_recovery/reserved_words_top_level_methods:146:5: The return type can't be 'var'.
int var(int x) {
    ^^^

parser/error_recovery/reserved_words_top_level_methods:148:10: Expected an identifier, but got 'var'.
  return var(x-1) + 1;
         ^^^

parser/error_recovery/reserved_words_top_level_methods:148:10: Expected ';' after this.
  return var(x-1) + 1;
         ^^^

parser/error_recovery/reserved_words_top_level_methods:148:13: Expected an identifier, but got '('.
  return var(x-1) + 1;
            ^

parser/error_recovery/reserved_words_top_level_methods:148:14: Expected ';' after this.
  return var(x-1) + 1;
             ^

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

parser/error_recovery/reserved_words_top_level_methods:148:17: Expected an identifier, but got ')'.
  return var(x-1) + 1;
                ^

parser/error_recovery/reserved_words_top_level_methods:148:17: Expected ';' after this.
  return var(x-1) + 1;
                ^

parser/error_recovery/reserved_words_top_level_methods:148:17: Unexpected token ';'.
  return var(x-1) + 1;
                ^

parser/error_recovery/reserved_words_top_level_methods:148:19: '+' is not a prefix operator.
  return var(x-1) + 1;
                  ^

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

parser/error_recovery/reserved_words_top_level_methods:151:1: Expected ';' after this.
int void(int x) {
^^^

parser/error_recovery/reserved_words_top_level_methods:151:9: Expected an identifier, but got '('.
int void(int x) {
        ^

parser/error_recovery/reserved_words_top_level_methods:153:10: Expected an identifier, but got 'void'.
  return void(x-1) + 1;
         ^^^^

parser/error_recovery/reserved_words_top_level_methods:153:10: Expected ';' after this.
  return void(x-1) + 1;
         ^^^^

parser/error_recovery/reserved_words_top_level_methods:153:14: Expected an identifier, but got '('.
  return void(x-1) + 1;
             ^

parser/error_recovery/reserved_words_top_level_methods:153:15: Expected ';' after this.
  return void(x-1) + 1;
              ^

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

parser/error_recovery/reserved_words_top_level_methods:153:18: Expected an identifier, but got ')'.
  return void(x-1) + 1;
                 ^

parser/error_recovery/reserved_words_top_level_methods:153:18: Expected ';' after this.
  return void(x-1) + 1;
                 ^

parser/error_recovery/reserved_words_top_level_methods:153:18: Unexpected token ';'.
  return void(x-1) + 1;
                 ^

parser/error_recovery/reserved_words_top_level_methods:153:20: '+' is not a prefix operator.
  return void(x-1) + 1;
                   ^

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

parser/error_recovery/reserved_words_top_level_methods:156:1: Expected ';' after this.
int while(int x) {
^^^

parser/error_recovery/reserved_words_top_level_methods:156:5: Expected an identifier, but got 'while'.
int while(int x) {
    ^^^^^

parser/error_recovery/reserved_words_top_level_methods:158:10: Expected an identifier, but got 'while'.
  return while(x-1) + 1;
         ^^^^^

parser/error_recovery/reserved_words_top_level_methods:158:10: Expected ';' after this.
  return while(x-1) + 1;
         ^^^^^

parser/error_recovery/reserved_words_top_level_methods:158:21: '+' is not a prefix operator.
  return while(x-1) + 1;
                    ^

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

parser/error_recovery/reserved_words_top_level_methods:161:1: Expected ';' after this.
int with(int x) {
^^^

parser/error_recovery/reserved_words_top_level_methods:161:5: Expected an identifier, but got 'with'.
int with(int x) {
    ^^^^

parser/error_recovery/reserved_words_top_level_methods:163:10: Expected an identifier, but got 'with'.
  return with(x-1) + 1;
         ^^^^

beginCompilationUnit(int)
  beginMetadataStar(int)
  endMetadataStar(0)
  beginTopLevelMember(int)
    handleRecoverableError(MissingConstFinalVarOrType, int, int)
    handleNoType()
    handleIdentifier(int, topLevelVariableDeclaration)
    handleNoFieldInitializer(assert)
    handleRecoverableError(Message[ExpectedAfterButGot, Expected ';' after this., null, {string: ;}], int, int)
  endTopLevelFields(null, null, null, null, 1, int, ;)
endTopLevelDeclaration(assert)
beginMetadataStar(assert)
endMetadataStar(0)
beginTopLevelMember(assert)
  beginTopLevelMethod(;, null)
    handleNoType(;)
    handleRecoverableError(Message[ExpectedIdentifier, Expected an identifier, but got 'assert'., null, {token: assert}], assert, assert)
    handleIdentifier(assert, topLevelFunctionDeclaration)
    handleNoTypeVariables(()
    beginFormalParameters((, MemberKind.TopLevelMethod)
      beginMetadataStar(int)
      endMetadataStar(0)
      beginFormalParameter(int, MemberKind.TopLevelMethod, null, null, null)
        handleIdentifier(int, typeReference)
        handleNoTypeArguments(x)
        handleType(int, null)
        handleIdentifier(x, formalParameterDeclaration)
        handleFormalParameterWithoutValue())
      endFormalParameter(null, null, x, null, null, FormalParameterKind.mandatory, MemberKind.TopLevelMethod)
    endFormalParameters(1, (, ), MemberKind.TopLevelMethod)
    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, {, })
  endTopLevelMethod(assert, null, })
endTopLevelDeclaration(int)
beginMetadataStar(int)
endMetadataStar(0)
beginTopLevelMember(int)
  handleRecoverableError(MissingConstFinalVarOrType, int, int)
  handleNoType(})
  handleIdentifier(int, topLevelVariableDeclaration)
  handleNoFieldInitializer(break)
  handleRecoverableError(Message[ExpectedAfterButGot, Expected ';' after this., null, {string: ;}], int, int)
endTopLevelFields(null, null, null, null, 1, int, ;)
endTopLevelDeclaration(break)
beginMetadataStar(break)
endMetadataStar(0)
beginTopLevelMember(break)
beginTopLevelMethod(;, null)
  handleNoType(;)
  handleRecoverableError(Message[ExpectedIdentifier, Expected an identifier, but got 'break'., null, {token: break}], break, break)
  handleIdentifier(break, topLevelFunctionDeclaration)
  handleNoTypeVariables(()
  beginFormalParameters((, MemberKind.TopLevelMethod)
    beginMetadataStar(int)
    endMetadataStar(0)
    beginFormalParameter(int, MemberKind.TopLevelMethod, null, null, null)
      handleIdentifier(int, typeReference)
      handleNoTypeArguments(x)
      handleType(int, null)
      handleIdentifier(x, formalParameterDeclaration)
      handleFormalParameterWithoutValue())
    endFormalParameter(null, null, x, null, null, FormalParameterKind.mandatory, MemberKind.TopLevelMethod)
  endFormalParameters(1, (, ), MemberKind.TopLevelMethod)
  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, {, })
endTopLevelMethod(break, null, })
endTopLevelDeclaration(int)
beginMetadataStar(int)
endMetadataStar(0)
beginTopLevelMember(int)
handleRecoverableError(MissingConstFinalVarOrType, int, int)
handleNoType(})
handleIdentifier(int, topLevelVariableDeclaration)
handleNoFieldInitializer(case)
handleRecoverableError(Message[ExpectedAfterButGot, Expected ';' after this., null, {string: ;}], int, int)
endTopLevelFields(null, null, null, null, 1, int, ;)
endTopLevelDeclaration(case)
beginMetadataStar(case)
endMetadataStar(0)
beginTopLevelMember(case)
beginTopLevelMethod(;, null)
handleNoType(;)
handleRecoverableError(Message[ExpectedIdentifier, Expected an identifier, but got 'case'., null, {token: case}], case, case)
handleIdentifier(case, topLevelFunctionDeclaration)
handleNoTypeVariables(()
beginFormalParameters((, MemberKind.TopLevelMethod)
  beginMetadataStar(int)
  endMetadataStar(0)
  beginFormalParameter(int, MemberKind.TopLevelMethod, null, null, null)
    handleIdentifier(int, typeReference)
    handleNoTypeArguments(x)
    handleType(int, null)
    handleIdentifier(x, formalParameterDeclaration)
    handleFormalParameterWithoutValue())
  endFormalParameter(null, null, x, null, null, FormalParameterKind.mandatory, MemberKind.TopLevelMethod)
endFormalParameters(1, (, ), MemberKind.TopLevelMethod)
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, {, })
endTopLevelMethod(case, null, })
endTopLevelDeclaration(int)
beginMetadataStar(int)
endMetadataStar(0)
beginTopLevelMember(int)
handleRecoverableError(MissingConstFinalVarOrType, int, int)
handleNoType(})
handleIdentifier(int, topLevelVariableDeclaration)
handleNoFieldInitializer(catch)
handleRecoverableError(Message[ExpectedAfterButGot, Expected ';' after this., null, {string: ;}], int, int)
endTopLevelFields(null, null, null, null, 1, int, ;)
endTopLevelDeclaration(catch)
beginMetadataStar(catch)
endMetadataStar(0)
beginTopLevelMember(catch)
beginTopLevelMethod(;, null)
handleNoType(;)
handleRecoverableError(Message[ExpectedIdentifier, Expected an identifier, but got 'catch'., null, {token: catch}], catch, catch)
handleIdentifier(catch, topLevelFunctionDeclaration)
handleNoTypeVariables(()
beginFormalParameters((, MemberKind.TopLevelMethod)
beginMetadataStar(int)
endMetadataStar(0)
beginFormalParameter(int, MemberKind.TopLevelMethod, null, null, null)
  handleIdentifier(int, typeReference)
  handleNoTypeArguments(x)
  handleType(int, null)
  handleIdentifier(x, formalParameterDeclaration)
  handleFormalParameterWithoutValue())
endFormalParameter(null, null, x, null, null, FormalParameterKind.mandatory, MemberKind.TopLevelMethod)
endFormalParameters(1, (, ), MemberKind.TopLevelMethod)
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, {, })
endTopLevelMethod(catch, null, })
endTopLevelDeclaration(int)
beginMetadataStar(int)
endMetadataStar(0)
beginTopLevelMember(int)
handleRecoverableError(MissingConstFinalVarOrType, int, int)
handleNoType(})
handleIdentifier(int, topLevelVariableDeclaration)
handleNoFieldInitializer(class)
handleRecoverableError(Message[ExpectedAfterButGot, Expected ';' after this., null, {string: ;}], int, int)
endTopLevelFields(null, null, null, null, 1, int, ;)
endTopLevelDeclaration(class)
beginMetadataStar(class)
endMetadataStar(0)
beginClassOrNamedMixinApplicationPrelude(class)
handleRecoverableError(Message[ExpectedIdentifier, Expected an identifier, but got '('., null, {token: (}], (, ()
handleIdentifier(, classOrMixinDeclaration)
handleNoTypeVariables(int)
beginClassDeclaration(class, null, )
handleNoType()
handleClassExtends(null)
handleClassNoWithClause()
handleClassOrMixinImplements(null, 0)
handleClassHeader(class, class, null)
handleNoType()
handleClassExtends(null)
handleClassNoWithClause()
handleClassOrMixinImplements(null, 0)
handleRecoverClassHeader()
handleRecoverableError(Message[ExpectedClassOrMixinBody, A class declaration must have a body, even if it is empty., Try adding an empty body., {string: class declaration}], int, int)
beginClassOrMixinBody(DeclarationKind.Class, {)
endClassOrMixinBody(DeclarationKind.Class, 0, {, })
endClassDeclaration(class, })
endTopLevelDeclaration(int)
beginMetadataStar(int)
endMetadataStar(0)
beginTopLevelMember(int)
handleIdentifier(int, typeReference)
handleNoTypeArguments(x)
handleType(int, null)
handleIdentifier(x, topLevelVariableDeclaration)
handleNoFieldInitializer())
handleRecoverableError(Message[ExpectedAfterButGot, Expected ';' after this., null, {string: ;}], x, x)
endTopLevelFields(null, null, null, null, 1, int, ;)
endTopLevelDeclaration())
beginMetadataStar())
endMetadataStar(0)
beginTopLevelMember())
handleRecoverableError(Message[ExpectedDeclaration, Expected a declaration, but got ')'., null, {token: )}], ), ))
handleInvalidTopLevelDeclaration())
endTopLevelDeclaration({)
beginMetadataStar({)
endMetadataStar(0)
beginTopLevelMember({)
handleRecoverableError(Message[ExpectedDeclaration, Expected a declaration, but got '{'., null, {token: {}], {, {)
beginBlock({, BlockKind(invalid))
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(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, ;)
endBlock(2, {, }, BlockKind(invalid))
handleInvalidTopLevelBlock({)
handleInvalidTopLevelDeclaration(})
endTopLevelDeclaration(int)
beginMetadataStar(int)
endMetadataStar(0)
beginTopLevelMember(int)
handleRecoverableError(MissingConstFinalVarOrType, int, int)
handleNoType(})
handleIdentifier(int, topLevelVariableDeclaration)
handleNoFieldInitializer(const)
handleRecoverableError(Message[ExpectedAfterButGot, Expected ';' after this., null, {string: ;}], int, int)
endTopLevelFields(null, null, null, null, 1, int, ;)
endTopLevelDeclaration(const)
beginMetadataStar(const)
endMetadataStar(0)
beginTopLevelMember(const)
handleRecoverableError(Message[ExpectedIdentifier, Expected an identifier, but got '('., null, {token: (}], (, ()
handleRecoverableError(Message[ExtraneousModifier, Can't have modifier 'const' here., Try removing 'const'., {token: const}], const, const)
beginTopLevelMethod(;, null)
handleNoType(const)
handleIdentifier(, topLevelFunctionDeclaration)
handleNoTypeVariables(()
beginFormalParameters((, MemberKind.TopLevelMethod)
beginMetadataStar(int)
endMetadataStar(0)
beginFormalParameter(int, MemberKind.TopLevelMethod, null, null, null)
handleIdentifier(int, typeReference)
handleNoTypeArguments(x)
handleType(int, null)
handleIdentifier(x, formalParameterDeclaration)
handleFormalParameterWithoutValue())
endFormalParameter(null, null, x, null, null, FormalParameterKind.mandatory, MemberKind.TopLevelMethod)
endFormalParameters(1, (, ), MemberKind.TopLevelMethod)
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, {, })
endTopLevelMethod(const, null, })
endTopLevelDeclaration(int)
beginMetadataStar(int)
endMetadataStar(0)
beginTopLevelMember(int)
handleRecoverableError(MissingConstFinalVarOrType, int, int)
handleNoType(})
handleIdentifier(int, topLevelVariableDeclaration)
handleNoFieldInitializer(continue)
handleRecoverableError(Message[ExpectedAfterButGot, Expected ';' after this., null, {string: ;}], int, int)
endTopLevelFields(null, null, null, null, 1, int, ;)
endTopLevelDeclaration(continue)
beginMetadataStar(continue)
endMetadataStar(0)
beginTopLevelMember(continue)
beginTopLevelMethod(;, null)
handleNoType(;)
handleRecoverableError(Message[ExpectedIdentifier, Expected an identifier, but got 'continue'., null, {token: continue}], continue, continue)
handleIdentifier(continue, topLevelFunctionDeclaration)
handleNoTypeVariables(()
beginFormalParameters((, MemberKind.TopLevelMethod)
beginMetadataStar(int)
endMetadataStar(0)
beginFormalParameter(int, MemberKind.TopLevelMethod, null, null, null)
handleIdentifier(int, typeReference)
handleNoTypeArguments(x)
handleType(int, null)
handleIdentifier(x, formalParameterDeclaration)
handleFormalParameterWithoutValue())
endFormalParameter(null, null, x, null, null, FormalParameterKind.mandatory, MemberKind.TopLevelMethod)
endFormalParameters(1, (, ), MemberKind.TopLevelMethod)
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, {, })
endTopLevelMethod(continue, null, })
endTopLevelDeclaration(int)
beginMetadataStar(int)
endMetadataStar(0)
beginTopLevelMember(int)
handleRecoverableError(MissingConstFinalVarOrType, int, int)
handleNoType(})
handleIdentifier(int, topLevelVariableDeclaration)
handleNoFieldInitializer(default)
handleRecoverableError(Message[ExpectedAfterButGot, Expected ';' after this., null, {string: ;}], int, int)
endTopLevelFields(null, null, null, null, 1, int, ;)
endTopLevelDeclaration(default)
beginMetadataStar(default)
endMetadataStar(0)
beginTopLevelMember(default)
beginTopLevelMethod(;, null)
handleNoType(;)
handleRecoverableError(Message[ExpectedIdentifier, Expected an identifier, but got 'default'., null, {token: default}], default, default)
handleIdentifier(default, topLevelFunctionDeclaration)
handleNoTypeVariables(()
beginFormalParameters((, MemberKind.TopLevelMethod)
beginMetadataStar(int)
endMetadataStar(0)
beginFormalParameter(int, MemberKind.TopLevelMethod, null, null, null)
handleIdentifier(int, typeReference)
handleNoTypeArguments(x)
handleType(int, null)
handleIdentifier(x, formalParameterDeclaration)
handleFormalParameterWithoutValue())
endFormalParameter(null, null, x, null, null, FormalParameterKind.mandatory, MemberKind.TopLevelMethod)
endFormalParameters(1, (, ), MemberKind.TopLevelMethod)
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, {, })
endTopLevelMethod(default, null, })
endTopLevelDeclaration(int)
beginMetadataStar(int)
endMetadataStar(0)
beginTopLevelMember(int)
handleRecoverableError(MissingConstFinalVarOrType, int, int)
handleNoType(})
handleIdentifier(int, topLevelVariableDeclaration)
handleNoFieldInitializer(do)
handleRecoverableError(Message[ExpectedAfterButGot, Expected ';' after this., null, {string: ;}], int, int)
endTopLevelFields(null, null, null, null, 1, int, ;)
endTopLevelDeclaration(do)
beginMetadataStar(do)
endMetadataStar(0)
beginTopLevelMember(do)
beginTopLevelMethod(;, null)
handleNoType(;)
handleRecoverableError(Message[ExpectedIdentifier, Expected an identifier, but got 'do'., null, {token: do}], do, do)
handleIdentifier(do, topLevelFunctionDeclaration)
handleNoTypeVariables(()
beginFormalParameters((, MemberKind.TopLevelMethod)
beginMetadataStar(int)
endMetadataStar(0)
beginFormalParameter(int, MemberKind.TopLevelMethod, null, null, null)
handleIdentifier(int, typeReference)
handleNoTypeArguments(x)
handleType(int, null)
handleIdentifier(x, formalParameterDeclaration)
handleFormalParameterWithoutValue())
endFormalParameter(null, null, x, null, null, FormalParameterKind.mandatory, MemberKind.TopLevelMethod)
endFormalParameters(1, (, ), MemberKind.TopLevelMethod)
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, {, })
endTopLevelMethod(do, null, })
endTopLevelDeclaration(int)
beginMetadataStar(int)
endMetadataStar(0)
beginTopLevelMember(int)
handleRecoverableError(MissingConstFinalVarOrType, int, int)
handleNoType(})
handleIdentifier(int, topLevelVariableDeclaration)
handleNoFieldInitializer(else)
handleRecoverableError(Message[ExpectedAfterButGot, Expected ';' after this., null, {string: ;}], int, int)
endTopLevelFields(null, null, null, null, 1, int, ;)
endTopLevelDeclaration(else)
beginMetadataStar(else)
endMetadataStar(0)
beginTopLevelMember(else)
beginTopLevelMethod(;, null)
handleNoType(;)
handleRecoverableError(Message[ExpectedIdentifier, Expected an identifier, but got 'else'., null, {token: else}], else, else)
handleIdentifier(else, topLevelFunctionDeclaration)
handleNoTypeVariables(()
beginFormalParameters((, MemberKind.TopLevelMethod)
beginMetadataStar(int)
endMetadataStar(0)
beginFormalParameter(int, MemberKind.TopLevelMethod, null, null, null)
handleIdentifier(int, typeReference)
handleNoTypeArguments(x)
handleType(int, null)
handleIdentifier(x, formalParameterDeclaration)
handleFormalParameterWithoutValue())
endFormalParameter(null, null, x, null, null, FormalParameterKind.mandatory, MemberKind.TopLevelMethod)
endFormalParameters(1, (, ), MemberKind.TopLevelMethod)
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, {, })
endTopLevelMethod(else, null, })
endTopLevelDeclaration(int)
beginMetadataStar(int)
endMetadataStar(0)
beginTopLevelMember(int)
handleRecoverableError(MissingConstFinalVarOrType, int, int)
handleNoType(})
handleIdentifier(int, topLevelVariableDeclaration)
handleNoFieldInitializer(enum)
handleRecoverableError(Message[ExpectedAfterButGot, Expected ';' after this., null, {string: ;}], int, int)
endTopLevelFields(null, null, null, null, 1, int, ;)
endTopLevelDeclaration(enum)
beginMetadataStar(enum)
endMetadataStar(0)
beginEnum(enum)
handleRecoverableError(Message[ExpectedIdentifier, Expected an identifier, but got '('., null, {token: (}], (, ()
handleIdentifier(, enumDeclaration)
handleRecoverableError(Message[ExpectedEnumBody, Expected a enum body, but got 'int'., An enum definition must have a body with at least one constant name., {token: int}], int, int)
endEnum(enum, {, 0)
endTopLevelDeclaration(int)
beginMetadataStar(int)
endMetadataStar(0)
beginTopLevelMember(int)
handleIdentifier(int, typeReference)
handleNoTypeArguments(x)
handleType(int, null)
handleIdentifier(x, topLevelVariableDeclaration)
handleNoFieldInitializer())
handleRecoverableError(Message[ExpectedAfterButGot, Expected ';' after this., null, {string: ;}], x, x)
endTopLevelFields(null, null, null, null, 1, int, ;)
endTopLevelDeclaration())
beginMetadataStar())
endMetadataStar(0)
beginTopLevelMember())
handleRecoverableError(Message[ExpectedDeclaration, Expected a declaration, but got ')'., null, {token: )}], ), ))
handleInvalidTopLevelDeclaration())
endTopLevelDeclaration({)
beginMetadataStar({)
endMetadataStar(0)
beginTopLevelMember({)
handleRecoverableError(Message[ExpectedDeclaration, Expected a declaration, but got '{'., null, {token: {}], {, {)
beginBlock({, BlockKind(invalid))
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(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, ;)
endBlock(2, {, }, BlockKind(invalid))
handleInvalidTopLevelBlock({)
handleInvalidTopLevelDeclaration(})
endTopLevelDeclaration(int)
beginMetadataStar(int)
endMetadataStar(0)
beginTopLevelMember(int)
handleRecoverableError(MissingConstFinalVarOrType, int, int)
handleNoType(})
handleIdentifier(int, topLevelVariableDeclaration)
handleNoFieldInitializer(extends)
handleRecoverableError(Message[ExpectedAfterButGot, Expected ';' after this., null, {string: ;}], int, int)
endTopLevelFields(null, null, null, null, 1, int, ;)
endTopLevelDeclaration(extends)
beginMetadataStar(extends)
endMetadataStar(0)
beginTopLevelMember(extends)
beginTopLevelMethod(;, null)
handleNoType(;)
handleRecoverableError(Message[ExpectedIdentifier, Expected an identifier, but got 'extends'., null, {token: extends}], extends, extends)
handleIdentifier(extends, topLevelFunctionDeclaration)
handleNoTypeVariables(()
beginFormalParameters((, MemberKind.TopLevelMethod)
beginMetadataStar(int)
endMetadataStar(0)
beginFormalParameter(int, MemberKind.TopLevelMethod, null, null, null)
handleIdentifier(int, typeReference)
handleNoTypeArguments(x)
handleType(int, null)
handleIdentifier(x, formalParameterDeclaration)
handleFormalParameterWithoutValue())
endFormalParameter(null, null, x, null, null, FormalParameterKind.mandatory, MemberKind.TopLevelMethod)
endFormalParameters(1, (, ), MemberKind.TopLevelMethod)
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, {, })
endTopLevelMethod(extends, null, })
endTopLevelDeclaration(int)
beginMetadataStar(int)
endMetadataStar(0)
beginTopLevelMember(int)
handleRecoverableError(MissingConstFinalVarOrType, int, int)
handleNoType(})
handleIdentifier(int, topLevelVariableDeclaration)
handleNoFieldInitializer(false)
handleRecoverableError(Message[ExpectedAfterButGot, Expected ';' after this., null, {string: ;}], int, int)
endTopLevelFields(null, null, null, null, 1, int, ;)
endTopLevelDeclaration(false)
beginMetadataStar(false)
endMetadataStar(0)
beginTopLevelMember(false)
beginTopLevelMethod(;, null)
handleNoType(;)
handleRecoverableError(Message[ExpectedIdentifier, Expected an identifier, but got 'false'., null, {token: false}], false, false)
handleIdentifier(false, topLevelFunctionDeclaration)
handleNoTypeVariables(()
beginFormalParameters((, MemberKind.TopLevelMethod)
beginMetadataStar(int)
endMetadataStar(0)
beginFormalParameter(int, MemberKind.TopLevelMethod, null, null, null)
handleIdentifier(int, typeReference)
handleNoTypeArguments(x)
handleType(int, null)
handleIdentifier(x, formalParameterDeclaration)
handleFormalParameterWithoutValue())
endFormalParameter(null, null, x, null, null, FormalParameterKind.mandatory, MemberKind.TopLevelMethod)
endFormalParameters(1, (, ), MemberKind.TopLevelMethod)
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, {, })
endTopLevelMethod(false, null, })
endTopLevelDeclaration(int)
beginMetadataStar(int)
endMetadataStar(0)
beginTopLevelMember(int)
handleRecoverableError(MissingConstFinalVarOrType, int, int)
handleNoType(})
handleIdentifier(int, topLevelVariableDeclaration)
handleNoFieldInitializer(final)
handleRecoverableError(Message[ExpectedAfterButGot, Expected ';' after this., null, {string: ;}], int, int)
endTopLevelFields(null, null, null, null, 1, int, ;)
endTopLevelDeclaration(final)
beginMetadataStar(final)
endMetadataStar(0)
beginTopLevelMember(final)
handleRecoverableError(Message[ExpectedIdentifier, Expected an identifier, but got '('., null, {token: (}], (, ()
handleRecoverableError(Message[ExtraneousModifier, Can't have modifier 'final' here., Try removing 'final'., {token: final}], final, final)
beginTopLevelMethod(;, null)
handleNoType(final)
handleIdentifier(, topLevelFunctionDeclaration)
handleNoTypeVariables(()
beginFormalParameters((, MemberKind.TopLevelMethod)
beginMetadataStar(int)
endMetadataStar(0)
beginFormalParameter(int, MemberKind.TopLevelMethod, null, null, null)
handleIdentifier(int, typeReference)
handleNoTypeArguments(x)
handleType(int, null)
handleIdentifier(x, formalParameterDeclaration)
handleFormalParameterWithoutValue())
endFormalParameter(null, null, x, null, null, FormalParameterKind.mandatory, MemberKind.TopLevelMethod)
endFormalParameters(1, (, ), MemberKind.TopLevelMethod)
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, {, })
endTopLevelMethod(final, null, })
endTopLevelDeclaration(int)
beginMetadataStar(int)
endMetadataStar(0)
beginTopLevelMember(int)
handleRecoverableError(MissingConstFinalVarOrType, int, int)
handleNoType(})
handleIdentifier(int, topLevelVariableDeclaration)
handleNoFieldInitializer(finally)
handleRecoverableError(Message[ExpectedAfterButGot, Expected ';' after this., null, {string: ;}], int, int)
endTopLevelFields(null, null, null, null, 1, int, ;)
endTopLevelDeclaration(finally)
beginMetadataStar(finally)
endMetadataStar(0)
beginTopLevelMember(finally)
beginTopLevelMethod(;, null)
handleNoType(;)
handleRecoverableError(Message[ExpectedIdentifier, Expected an identifier, but got 'finally'., null, {token: finally}], finally, finally)
handleIdentifier(finally, topLevelFunctionDeclaration)
handleNoTypeVariables(()
beginFormalParameters((, MemberKind.TopLevelMethod)
beginMetadataStar(int)
endMetadataStar(0)
beginFormalParameter(int, MemberKind.TopLevelMethod, null, null, null)
handleIdentifier(int, typeReference)
handleNoTypeArguments(x)
handleType(int, null)
handleIdentifier(x, formalParameterDeclaration)
handleFormalParameterWithoutValue())
endFormalParameter(null, null, x, null, null, FormalParameterKind.mandatory, MemberKind.TopLevelMethod)
endFormalParameters(1, (, ), MemberKind.TopLevelMethod)
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, {, })
endTopLevelMethod(finally, null, })
endTopLevelDeclaration(int)
beginMetadataStar(int)
endMetadataStar(0)
beginTopLevelMember(int)
handleRecoverableError(MissingConstFinalVarOrType, int, int)
handleNoType(})
handleIdentifier(int, topLevelVariableDeclaration)
handleNoFieldInitializer(for)
handleRecoverableError(Message[ExpectedAfterButGot, Expected ';' after this., null, {string: ;}], int, int)
endTopLevelFields(null, null, null, null, 1, int, ;)
endTopLevelDeclaration(for)
beginMetadataStar(for)
endMetadataStar(0)
beginTopLevelMember(for)
beginTopLevelMethod(;, null)
handleNoType(;)
handleRecoverableError(Message[ExpectedIdentifier, Expected an identifier, but got 'for'., null, {token: for}], for, for)
handleIdentifier(for, topLevelFunctionDeclaration)
handleNoTypeVariables(()
beginFormalParameters((, MemberKind.TopLevelMethod)
beginMetadataStar(int)
endMetadataStar(0)
beginFormalParameter(int, MemberKind.TopLevelMethod, null, null, null)
handleIdentifier(int, typeReference)
handleNoTypeArguments(x)
handleType(int, null)
handleIdentifier(x, formalParameterDeclaration)
handleFormalParameterWithoutValue())
endFormalParameter(null, null, x, null, null, FormalParameterKind.mandatory, MemberKind.TopLevelMethod)
endFormalParameters(1, (, ), MemberKind.TopLevelMethod)
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, {, })
endTopLevelMethod(for, null, })
endTopLevelDeclaration(int)
beginMetadataStar(int)
endMetadataStar(0)
beginTopLevelMember(int)
handleRecoverableError(MissingConstFinalVarOrType, int, int)
handleNoType(})
handleIdentifier(int, topLevelVariableDeclaration)
handleNoFieldInitializer(if)
handleRecoverableError(Message[ExpectedAfterButGot, Expected ';' after this., null, {string: ;}], int, int)
endTopLevelFields(null, null, null, null, 1, int, ;)
endTopLevelDeclaration(if)
beginMetadataStar(if)
endMetadataStar(0)
beginTopLevelMember(if)
beginTopLevelMethod(;, null)
handleNoType(;)
handleRecoverableError(Message[ExpectedIdentifier, Expected an identifier, but got 'if'., null, {token: if}], if, if)
handleIdentifier(if, topLevelFunctionDeclaration)
handleNoTypeVariables(()
beginFormalParameters((, MemberKind.TopLevelMethod)
beginMetadataStar(int)
endMetadataStar(0)
beginFormalParameter(int, MemberKind.TopLevelMethod, null, null, null)
handleIdentifier(int, typeReference)
handleNoTypeArguments(x)
handleType(int, null)
handleIdentifier(x, formalParameterDeclaration)
handleFormalParameterWithoutValue())
endFormalParameter(null, null, x, null, null, FormalParameterKind.mandatory, MemberKind.TopLevelMethod)
endFormalParameters(1, (, ), MemberKind.TopLevelMethod)
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, {, })
endTopLevelMethod(if, null, })
endTopLevelDeclaration(int)
beginMetadataStar(int)
endMetadataStar(0)
beginTopLevelMember(int)
handleRecoverableError(MissingConstFinalVarOrType, int, int)
handleNoType(})
handleIdentifier(int, topLevelVariableDeclaration)
handleNoFieldInitializer(in)
handleRecoverableError(Message[ExpectedAfterButGot, Expected ';' after this., null, {string: ;}], int, int)
endTopLevelFields(null, null, null, null, 1, int, ;)
endTopLevelDeclaration(in)
beginMetadataStar(in)
endMetadataStar(0)
beginTopLevelMember(in)
beginTopLevelMethod(;, null)
handleNoType(;)
handleRecoverableError(Message[ExpectedIdentifier, Expected an identifier, but got 'in'., null, {token: in}], in, in)
handleIdentifier(in, topLevelFunctionDeclaration)
handleNoTypeVariables(()
beginFormalParameters((, MemberKind.TopLevelMethod)
beginMetadataStar(int)
endMetadataStar(0)
beginFormalParameter(int, MemberKind.TopLevelMethod, null, null, null)
handleIdentifier(int, typeReference)
handleNoTypeArguments(x)
handleType(int, null)
handleIdentifier(x, formalParameterDeclaration)
handleFormalParameterWithoutValue())
endFormalParameter(null, null, x, null, null, FormalParameterKind.mandatory, MemberKind.TopLevelMethod)
endFormalParameters(1, (, ), MemberKind.TopLevelMethod)
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, {, })
endTopLevelMethod(in, null, })
endTopLevelDeclaration(int)
beginMetadataStar(int)
endMetadataStar(0)
beginTopLevelMember(int)
handleRecoverableError(MissingConstFinalVarOrType, int, int)
handleNoType(})
handleIdentifier(int, topLevelVariableDeclaration)
handleNoFieldInitializer(is)
handleRecoverableError(Message[ExpectedAfterButGot, Expected ';' after this., null, {string: ;}], int, int)
endTopLevelFields(null, null, null, null, 1, int, ;)
endTopLevelDeclaration(is)
beginMetadataStar(is)
endMetadataStar(0)
beginTopLevelMember(is)
beginTopLevelMethod(;, null)
handleNoType(;)
handleRecoverableError(Message[ExpectedIdentifier, Expected an identifier, but got 'is'., null, {token: is}], is, is)
handleIdentifier(is, topLevelFunctionDeclaration)
handleNoTypeVariables(()
beginFormalParameters((, MemberKind.TopLevelMethod)
beginMetadataStar(int)
endMetadataStar(0)
beginFormalParameter(int, MemberKind.TopLevelMethod, null, null, null)
handleIdentifier(int, typeReference)
handleNoTypeArguments(x)
handleType(int, null)
handleIdentifier(x, formalParameterDeclaration)
handleFormalParameterWithoutValue())
endFormalParameter(null, null, x, null, null, FormalParameterKind.mandatory, MemberKind.TopLevelMethod)
endFormalParameters(1, (, ), MemberKind.TopLevelMethod)
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, {, })
endTopLevelMethod(is, null, })
endTopLevelDeclaration(int)
beginMetadataStar(int)
endMetadataStar(0)
beginTopLevelMember(int)
handleRecoverableError(MissingConstFinalVarOrType, int, int)
handleNoType(})
handleIdentifier(int, topLevelVariableDeclaration)
handleNoFieldInitializer(new)
handleRecoverableError(Message[ExpectedAfterButGot, Expected ';' after this., null, {string: ;}], int, int)
endTopLevelFields(null, null, null, null, 1, int, ;)
endTopLevelDeclaration(new)
beginMetadataStar(new)
endMetadataStar(0)
beginTopLevelMember(new)
beginTopLevelMethod(;, null)
handleNoType(;)
handleRecoverableError(Message[ExpectedIdentifier, Expected an identifier, but got 'new'., null, {token: new}], new, new)
handleIdentifier(new, topLevelFunctionDeclaration)
handleNoTypeVariables(()
beginFormalParameters((, MemberKind.TopLevelMethod)
beginMetadataStar(int)
endMetadataStar(0)
beginFormalParameter(int, MemberKind.TopLevelMethod, null, null, null)
handleIdentifier(int, typeReference)
handleNoTypeArguments(x)
handleType(int, null)
handleIdentifier(x, formalParameterDeclaration)
handleFormalParameterWithoutValue())
endFormalParameter(null, null, x, null, null, FormalParameterKind.mandatory, MemberKind.TopLevelMethod)
endFormalParameters(1, (, ), MemberKind.TopLevelMethod)
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, {, })
endTopLevelMethod(new, null, })
endTopLevelDeclaration(int)
beginMetadataStar(int)
endMetadataStar(0)
beginTopLevelMember(int)
handleRecoverableError(MissingConstFinalVarOrType, int, int)
handleNoType(})
handleIdentifier(int, topLevelVariableDeclaration)
handleNoFieldInitializer(null)
handleRecoverableError(Message[ExpectedAfterButGot, Expected ';' after this., null, {string: ;}], int, int)
endTopLevelFields(null, null, null, null, 1, int, ;)
endTopLevelDeclaration(null)
beginMetadataStar(null)
endMetadataStar(0)
beginTopLevelMember(null)
beginTopLevelMethod(;, null)
handleNoType(;)
handleRecoverableError(Message[ExpectedIdentifier, Expected an identifier, but got 'null'., null, {token: null}], null, null)
handleIdentifier(null, topLevelFunctionDeclaration)
handleNoTypeVariables(()
beginFormalParameters((, MemberKind.TopLevelMethod)
beginMetadataStar(int)
endMetadataStar(0)
beginFormalParameter(int, MemberKind.TopLevelMethod, null, null, null)
handleIdentifier(int, typeReference)
handleNoTypeArguments(x)
handleType(int, null)
handleIdentifier(x, formalParameterDeclaration)
handleFormalParameterWithoutValue())
endFormalParameter(null, null, x, null, null, FormalParameterKind.mandatory, MemberKind.TopLevelMethod)
endFormalParameters(1, (, ), MemberKind.TopLevelMethod)
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, {, })
endTopLevelMethod(null, null, })
endTopLevelDeclaration(int)
beginMetadataStar(int)
endMetadataStar(0)
beginTopLevelMember(int)
handleRecoverableError(MissingConstFinalVarOrType, int, int)
handleNoType(})
handleIdentifier(int, topLevelVariableDeclaration)
handleNoFieldInitializer(rethrow)
handleRecoverableError(Message[ExpectedAfterButGot, Expected ';' after this., null, {string: ;}], int, int)
endTopLevelFields(null, null, null, null, 1, int, ;)
endTopLevelDeclaration(rethrow)
beginMetadataStar(rethrow)
endMetadataStar(0)
beginTopLevelMember(rethrow)
beginTopLevelMethod(;, null)
handleNoType(;)
handleRecoverableError(Message[ExpectedIdentifier, Expected an identifier, but got 'rethrow'., null, {token: rethrow}], rethrow, rethrow)
handleIdentifier(rethrow, topLevelFunctionDeclaration)
handleNoTypeVariables(()
beginFormalParameters((, MemberKind.TopLevelMethod)
beginMetadataStar(int)
endMetadataStar(0)
beginFormalParameter(int, MemberKind.TopLevelMethod, null, null, null)
handleIdentifier(int, typeReference)
handleNoTypeArguments(x)
handleType(int, null)
handleIdentifier(x, formalParameterDeclaration)
handleFormalParameterWithoutValue())
endFormalParameter(null, null, x, null, null, FormalParameterKind.mandatory, MemberKind.TopLevelMethod)
endFormalParameters(1, (, ), MemberKind.TopLevelMethod)
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, {, })
endTopLevelMethod(rethrow, null, })
endTopLevelDeclaration(int)
beginMetadataStar(int)
endMetadataStar(0)
beginTopLevelMember(int)
handleRecoverableError(MissingConstFinalVarOrType, int, int)
handleNoType(})
handleIdentifier(int, topLevelVariableDeclaration)
handleNoFieldInitializer(return)
handleRecoverableError(Message[ExpectedAfterButGot, Expected ';' after this., null, {string: ;}], int, int)
endTopLevelFields(null, null, null, null, 1, int, ;)
endTopLevelDeclaration(return)
beginMetadataStar(return)
endMetadataStar(0)
beginTopLevelMember(return)
beginTopLevelMethod(;, null)
handleNoType(;)
handleRecoverableError(Message[ExpectedIdentifier, Expected an identifier, but got 'return'., null, {token: return}], return, return)
handleIdentifier(return, topLevelFunctionDeclaration)
handleNoTypeVariables(()
beginFormalParameters((, MemberKind.TopLevelMethod)
beginMetadataStar(int)
endMetadataStar(0)
beginFormalParameter(int, MemberKind.TopLevelMethod, null, null, null)
handleIdentifier(int, typeReference)
handleNoTypeArguments(x)
handleType(int, null)
handleIdentifier(x, formalParameterDeclaration)
handleFormalParameterWithoutValue())
endFormalParameter(null, null, x, null, null, FormalParameterKind.mandatory, MemberKind.TopLevelMethod)
endFormalParameters(1, (, ), MemberKind.TopLevelMethod)
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, {, })
endTopLevelMethod(return, null, })
endTopLevelDeclaration(int)
beginMetadataStar(int)
endMetadataStar(0)
beginTopLevelMember(int)
handleRecoverableError(MissingConstFinalVarOrType, int, int)
handleNoType(})
handleIdentifier(int, topLevelVariableDeclaration)
handleNoFieldInitializer(super)
handleRecoverableError(Message[ExpectedAfterButGot, Expected ';' after this., null, {string: ;}], int, int)
endTopLevelFields(null, null, null, null, 1, int, ;)
endTopLevelDeclaration(super)
beginMetadataStar(super)
endMetadataStar(0)
beginTopLevelMember(super)
beginTopLevelMethod(;, null)
handleNoType(;)
handleRecoverableError(Message[ExpectedIdentifier, Expected an identifier, but got 'super'., null, {token: super}], super, super)
handleIdentifier(super, topLevelFunctionDeclaration)
handleNoTypeVariables(()
beginFormalParameters((, MemberKind.TopLevelMethod)
beginMetadataStar(int)
endMetadataStar(0)
beginFormalParameter(int, MemberKind.TopLevelMethod, null, null, null)
handleIdentifier(int, typeReference)
handleNoTypeArguments(x)
handleType(int, null)
handleIdentifier(x, formalParameterDeclaration)
handleFormalParameterWithoutValue())
endFormalParameter(null, null, x, null, null, FormalParameterKind.mandatory, MemberKind.TopLevelMethod)
endFormalParameters(1, (, ), MemberKind.TopLevelMethod)
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, {, })
endTopLevelMethod(super, null, })
endTopLevelDeclaration(int)
beginMetadataStar(int)
endMetadataStar(0)
beginTopLevelMember(int)
handleRecoverableError(MissingConstFinalVarOrType, int, int)
handleNoType(})
handleIdentifier(int, topLevelVariableDeclaration)
handleNoFieldInitializer(switch)
handleRecoverableError(Message[ExpectedAfterButGot, Expected ';' after this., null, {string: ;}], int, int)
endTopLevelFields(null, null, null, null, 1, int, ;)
endTopLevelDeclaration(switch)
beginMetadataStar(switch)
endMetadataStar(0)
beginTopLevelMember(switch)
beginTopLevelMethod(;, null)
handleNoType(;)
handleRecoverableError(Message[ExpectedIdentifier, Expected an identifier, but got 'switch'., null, {token: switch}], switch, switch)
handleIdentifier(switch, topLevelFunctionDeclaration)
handleNoTypeVariables(()
beginFormalParameters((, MemberKind.TopLevelMethod)
beginMetadataStar(int)
endMetadataStar(0)
beginFormalParameter(int, MemberKind.TopLevelMethod, null, null, null)
handleIdentifier(int, typeReference)
handleNoTypeArguments(x)
handleType(int, null)
handleIdentifier(x, formalParameterDeclaration)
handleFormalParameterWithoutValue())
endFormalParameter(null, null, x, null, null, FormalParameterKind.mandatory, MemberKind.TopLevelMethod)
endFormalParameters(1, (, ), MemberKind.TopLevelMethod)
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, {, })
endTopLevelMethod(switch, null, })
endTopLevelDeclaration(int)
beginMetadataStar(int)
endMetadataStar(0)
beginTopLevelMember(int)
beginTopLevelMethod(}, null)
handleIdentifier(int, typeReference)
handleNoTypeArguments(this)
handleType(int, null)
handleRecoverableError(Message[ExpectedIdentifier, Expected an identifier, but got 'this'., null, {token: this}], this, this)
handleIdentifier(this, topLevelFunctionDeclaration)
handleNoTypeVariables(()
beginFormalParameters((, MemberKind.TopLevelMethod)
beginMetadataStar(int)
endMetadataStar(0)
beginFormalParameter(int, MemberKind.TopLevelMethod, null, null, null)
handleIdentifier(int, typeReference)
handleNoTypeArguments(x)
handleType(int, null)
handleIdentifier(x, formalParameterDeclaration)
handleFormalParameterWithoutValue())
endFormalParameter(null, null, x, null, null, FormalParameterKind.mandatory, MemberKind.TopLevelMethod)
endFormalParameters(1, (, ), MemberKind.TopLevelMethod)
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, {, })
endTopLevelMethod(int, null, })
endTopLevelDeclaration(int)
beginMetadataStar(int)
endMetadataStar(0)
beginTopLevelMember(int)
handleRecoverableError(MissingConstFinalVarOrType, int, int)
handleNoType(})
handleIdentifier(int, topLevelVariableDeclaration)
handleNoFieldInitializer(throw)
handleRecoverableError(Message[ExpectedAfterButGot, Expected ';' after this., null, {string: ;}], int, int)
endTopLevelFields(null, null, null, null, 1, int, ;)
endTopLevelDeclaration(throw)
beginMetadataStar(throw)
endMetadataStar(0)
beginTopLevelMember(throw)
beginTopLevelMethod(;, null)
handleNoType(;)
handleRecoverableError(Message[ExpectedIdentifier, Expected an identifier, but got 'throw'., null, {token: throw}], throw, throw)
handleIdentifier(throw, topLevelFunctionDeclaration)
handleNoTypeVariables(()
beginFormalParameters((, MemberKind.TopLevelMethod)
beginMetadataStar(int)
endMetadataStar(0)
beginFormalParameter(int, MemberKind.TopLevelMethod, null, null, null)
handleIdentifier(int, typeReference)
handleNoTypeArguments(x)
handleType(int, null)
handleIdentifier(x, formalParameterDeclaration)
handleFormalParameterWithoutValue())
endFormalParameter(null, null, x, null, null, FormalParameterKind.mandatory, MemberKind.TopLevelMethod)
endFormalParameters(1, (, ), MemberKind.TopLevelMethod)
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, {, })
endTopLevelMethod(throw, null, })
endTopLevelDeclaration(int)
beginMetadataStar(int)
endMetadataStar(0)
beginTopLevelMember(int)
handleRecoverableError(MissingConstFinalVarOrType, int, int)
handleNoType(})
handleIdentifier(int, topLevelVariableDeclaration)
handleNoFieldInitializer(true)
handleRecoverableError(Message[ExpectedAfterButGot, Expected ';' after this., null, {string: ;}], int, int)
endTopLevelFields(null, null, null, null, 1, int, ;)
endTopLevelDeclaration(true)
beginMetadataStar(true)
endMetadataStar(0)
beginTopLevelMember(true)
beginTopLevelMethod(;, null)
handleNoType(;)
handleRecoverableError(Message[ExpectedIdentifier, Expected an identifier, but got 'true'., null, {token: true}], true, true)
handleIdentifier(true, topLevelFunctionDeclaration)
handleNoTypeVariables(()
beginFormalParameters((, MemberKind.TopLevelMethod)
beginMetadataStar(int)
endMetadataStar(0)
beginFormalParameter(int, MemberKind.TopLevelMethod, null, null, null)
handleIdentifier(int, typeReference)
handleNoTypeArguments(x)
handleType(int, null)
handleIdentifier(x, formalParameterDeclaration)
handleFormalParameterWithoutValue())
endFormalParameter(null, null, x, null, null, FormalParameterKind.mandatory, MemberKind.TopLevelMethod)
endFormalParameters(1, (, ), MemberKind.TopLevelMethod)
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, {, })
endTopLevelMethod(true, null, })
endTopLevelDeclaration(int)
beginMetadataStar(int)
endMetadataStar(0)
beginTopLevelMember(int)
handleRecoverableError(MissingConstFinalVarOrType, int, int)
handleNoType(})
handleIdentifier(int, topLevelVariableDeclaration)
handleNoFieldInitializer(try)
handleRecoverableError(Message[ExpectedAfterButGot, Expected ';' after this., null, {string: ;}], int, int)
endTopLevelFields(null, null, null, null, 1, int, ;)
endTopLevelDeclaration(try)
beginMetadataStar(try)
endMetadataStar(0)
beginTopLevelMember(try)
beginTopLevelMethod(;, null)
handleNoType(;)
handleRecoverableError(Message[ExpectedIdentifier, Expected an identifier, but got 'try'., null, {token: try}], try, try)
handleIdentifier(try, topLevelFunctionDeclaration)
handleNoTypeVariables(()
beginFormalParameters((, MemberKind.TopLevelMethod)
beginMetadataStar(int)
endMetadataStar(0)
beginFormalParameter(int, MemberKind.TopLevelMethod, null, null, null)
handleIdentifier(int, typeReference)
handleNoTypeArguments(x)
handleType(int, null)
handleIdentifier(x, formalParameterDeclaration)
handleFormalParameterWithoutValue())
endFormalParameter(null, null, x, null, null, FormalParameterKind.mandatory, MemberKind.TopLevelMethod)
endFormalParameters(1, (, ), MemberKind.TopLevelMethod)
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, {, })
endTopLevelMethod(try, null, })
endTopLevelDeclaration(int)
beginMetadataStar(int)
endMetadataStar(0)
beginTopLevelMember(int)
handleRecoverableError(MissingConstFinalVarOrType, int, int)
handleNoType(})
handleIdentifier(int, topLevelVariableDeclaration)
handleNoFieldInitializer(var)
handleRecoverableError(Message[ExpectedAfterButGot, Expected ';' after this., null, {string: ;}], int, int)
endTopLevelFields(null, null, null, null, 1, int, ;)
endTopLevelDeclaration(var)
beginMetadataStar(var)
endMetadataStar(0)
beginTopLevelMember(var)
handleRecoverableError(Message[ExpectedIdentifier, Expected an identifier, but got '('., null, {token: (}], (, ()
handleRecoverableError(VarReturnType, var, var)
beginTopLevelMethod(;, null)
handleNoType(var)
handleIdentifier(, topLevelFunctionDeclaration)
handleNoTypeVariables(()
beginFormalParameters((, MemberKind.TopLevelMethod)
beginMetadataStar(int)
endMetadataStar(0)
beginFormalParameter(int, MemberKind.TopLevelMethod, null, null, null)
handleIdentifier(int, typeReference)
handleNoTypeArguments(x)
handleType(int, null)
handleIdentifier(x, formalParameterDeclaration)
handleFormalParameterWithoutValue())
endFormalParameter(null, null, x, null, null, FormalParameterKind.mandatory, MemberKind.TopLevelMethod)
endFormalParameters(1, (, ), MemberKind.TopLevelMethod)
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, {, })
endTopLevelMethod(var, null, })
endTopLevelDeclaration(int)
beginMetadataStar(int)
endMetadataStar(0)
beginTopLevelMember(int)
handleRecoverableError(MissingConstFinalVarOrType, int, int)
handleNoType(})
handleIdentifier(int, topLevelVariableDeclaration)
handleNoFieldInitializer(void)
handleRecoverableError(Message[ExpectedAfterButGot, Expected ';' after this., null, {string: ;}], int, int)
endTopLevelFields(null, null, null, null, 1, int, ;)
endTopLevelDeclaration(void)
beginMetadataStar(void)
endMetadataStar(0)
beginTopLevelMember(void)
handleRecoverableError(Message[ExpectedIdentifier, Expected an identifier, but got '('., null, {token: (}], (, ()
beginTopLevelMethod(;, null)
handleVoidKeyword(void)
handleIdentifier(, topLevelFunctionDeclaration)
handleNoTypeVariables(()
beginFormalParameters((, MemberKind.TopLevelMethod)
beginMetadataStar(int)
endMetadataStar(0)
beginFormalParameter(int, MemberKind.TopLevelMethod, null, null, null)
handleIdentifier(int, typeReference)
handleNoTypeArguments(x)
handleType(int, null)
handleIdentifier(x, formalParameterDeclaration)
handleFormalParameterWithoutValue())
endFormalParameter(null, null, x, null, null, FormalParameterKind.mandatory, MemberKind.TopLevelMethod)
endFormalParameters(1, (, ), MemberKind.TopLevelMethod)
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, {, })
endTopLevelMethod(void, null, })
endTopLevelDeclaration(int)
beginMetadataStar(int)
endMetadataStar(0)
beginTopLevelMember(int)
handleRecoverableError(MissingConstFinalVarOrType, int, int)
handleNoType(})
handleIdentifier(int, topLevelVariableDeclaration)
handleNoFieldInitializer(while)
handleRecoverableError(Message[ExpectedAfterButGot, Expected ';' after this., null, {string: ;}], int, int)
endTopLevelFields(null, null, null, null, 1, int, ;)
endTopLevelDeclaration(while)
beginMetadataStar(while)
endMetadataStar(0)
beginTopLevelMember(while)
beginTopLevelMethod(;, null)
handleNoType(;)
handleRecoverableError(Message[ExpectedIdentifier, Expected an identifier, but got 'while'., null, {token: while}], while, while)
handleIdentifier(while, topLevelFunctionDeclaration)
handleNoTypeVariables(()
beginFormalParameters((, MemberKind.TopLevelMethod)
beginMetadataStar(int)
endMetadataStar(0)
beginFormalParameter(int, MemberKind.TopLevelMethod, null, null, null)
handleIdentifier(int, typeReference)
handleNoTypeArguments(x)
handleType(int, null)
handleIdentifier(x, formalParameterDeclaration)
handleFormalParameterWithoutValue())
endFormalParameter(null, null, x, null, null, FormalParameterKind.mandatory, MemberKind.TopLevelMethod)
endFormalParameters(1, (, ), MemberKind.TopLevelMethod)
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, {, })
endTopLevelMethod(while, null, })
endTopLevelDeclaration(int)
beginMetadataStar(int)
endMetadataStar(0)
beginTopLevelMember(int)
handleRecoverableError(MissingConstFinalVarOrType, int, int)
handleNoType(})
handleIdentifier(int, topLevelVariableDeclaration)
handleNoFieldInitializer(with)
handleRecoverableError(Message[ExpectedAfterButGot, Expected ';' after this., null, {string: ;}], int, int)
endTopLevelFields(null, null, null, null, 1, int, ;)
endTopLevelDeclaration(with)
beginMetadataStar(with)
endMetadataStar(0)
beginTopLevelMember(with)
beginTopLevelMethod(;, null)
handleNoType(;)
handleRecoverableError(Message[ExpectedIdentifier, Expected an identifier, but got 'with'., null, {token: with}], with, with)
handleIdentifier(with, topLevelFunctionDeclaration)
handleNoTypeVariables(()
beginFormalParameters((, MemberKind.TopLevelMethod)
beginMetadataStar(int)
endMetadataStar(0)
beginFormalParameter(int, MemberKind.TopLevelMethod, null, null, null)
handleIdentifier(int, typeReference)
handleNoTypeArguments(x)
handleType(int, null)
handleIdentifier(x, formalParameterDeclaration)
handleFormalParameterWithoutValue())
endFormalParameter(null, null, x, null, null, FormalParameterKind.mandatory, MemberKind.TopLevelMethod)
endFormalParameters(1, (, ), MemberKind.TopLevelMethod)
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, {, })
endTopLevelMethod(with, null, })
endTopLevelDeclaration()
endCompilationUnit(71, )
