Problems reported:

parser/error_recovery/reserved_words_top_level_fields: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_fields:1:1: Expected ';' after this.
int assert(int x) {
^^^

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

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

parser/error_recovery/reserved_words_top_level_fields: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_fields:6:1: Expected ';' after this.
int break(int x) {
^^^

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

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

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

parser/error_recovery/reserved_words_top_level_fields: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_fields:8:10: Expected ';' after this.
  return break(x-1) + 1;
         ^^^^^

parser/error_recovery/reserved_words_top_level_fields: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_fields:11:1: Expected ';' after this.
int case(int x) {
^^^

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

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

parser/error_recovery/reserved_words_top_level_fields: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_fields:16:1: Expected ';' after this.
int catch(int x) {
^^^

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

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

parser/error_recovery/reserved_words_top_level_fields: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_fields:21:1: Expected ';' after this.
int class(int x) {
^^^

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

parser/error_recovery/reserved_words_top_level_fields: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_fields:21:15: Expected ';' after this.
int class(int x) {
              ^

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

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

parser/error_recovery/reserved_words_top_level_fields: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_fields:26:1: Expected ';' after this.
int const(int x) {
^^^

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

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

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

parser/error_recovery/reserved_words_top_level_fields: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_fields:31:1: Expected ';' after this.
int continue(int x) {
^^^

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

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

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

parser/error_recovery/reserved_words_top_level_fields: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_fields:33:10: Expected ';' after this.
  return continue(x-1) + 1;
         ^^^^^^^^

parser/error_recovery/reserved_words_top_level_fields: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_fields:36:1: Expected ';' after this.
int default(int x) {
^^^

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

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

parser/error_recovery/reserved_words_top_level_fields: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_fields:41:1: Expected ';' after this.
int do(int x) {
^^^

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

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

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

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

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

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

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

parser/error_recovery/reserved_words_top_level_fields: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_fields:46:1: Expected ';' after this.
int else(int x) {
^^^

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

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

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

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

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

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

parser/error_recovery/reserved_words_top_level_fields: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_fields:51:1: Expected ';' after this.
int enum(int x) {
^^^

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

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

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

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

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

parser/error_recovery/reserved_words_top_level_fields: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_fields:56:1: Expected ';' after this.
int extends(int x) {
^^^

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

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

parser/error_recovery/reserved_words_top_level_fields: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_fields:61:1: Expected ';' after this.
int false(int x) {
^^^

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

parser/error_recovery/reserved_words_top_level_fields: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_fields:66:1: Expected ';' after this.
int final(int x) {
^^^

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

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

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

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

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

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

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

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

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

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

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

parser/error_recovery/reserved_words_top_level_fields: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_fields:71:1: Expected ';' after this.
int finally(int x) {
^^^

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

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

parser/error_recovery/reserved_words_top_level_fields: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_fields:76:1: Expected ';' after this.
int for(int x) {
^^^

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

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

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

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

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

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

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

parser/error_recovery/reserved_words_top_level_fields: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_fields:81:1: Expected ';' after this.
int if(int x) {
^^^

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

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

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

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

parser/error_recovery/reserved_words_top_level_fields: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_fields:86:1: Expected ';' after this.
int in(int x) {
^^^

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

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

parser/error_recovery/reserved_words_top_level_fields: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_fields:91:1: Expected ';' after this.
int is(int x) {
^^^

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

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

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

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

parser/error_recovery/reserved_words_top_level_fields: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_fields:96:1: Expected ';' after this.
int new(int x) {
^^^

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

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

parser/error_recovery/reserved_words_top_level_fields: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_fields:101:1: Expected ';' after this.
int null(int x) {
^^^

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

parser/error_recovery/reserved_words_top_level_fields: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_fields:106:1: Expected ';' after this.
int rethrow(int x) {
^^^

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

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

parser/error_recovery/reserved_words_top_level_fields: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_fields:111:1: Expected ';' after this.
int return(int x) {
^^^

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

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

parser/error_recovery/reserved_words_top_level_fields: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_fields:116:1: Expected ';' after this.
int super(int x) {
^^^

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

parser/error_recovery/reserved_words_top_level_fields: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_fields:121:1: Expected ';' after this.
int switch(int x) {
^^^

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

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

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

parser/error_recovery/reserved_words_top_level_fields: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_fields:123:22: '+' is not a prefix operator.
  return switch(x-1) + 1;
                     ^

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

parser/error_recovery/reserved_words_top_level_fields: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_fields:131:1: Expected ';' after this.
int throw(int x) {
^^^

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

parser/error_recovery/reserved_words_top_level_fields: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_fields:136:1: Expected ';' after this.
int true(int x) {
^^^

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

parser/error_recovery/reserved_words_top_level_fields: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_fields:141:1: Expected ';' after this.
int try(int x) {
^^^

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

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

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

parser/error_recovery/reserved_words_top_level_fields: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_fields: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_fields: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_fields:146:1: Expected ';' after this.
int var(int x) {
^^^

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

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

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

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

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

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

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

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

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

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

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

parser/error_recovery/reserved_words_top_level_fields: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_fields:151:1: Expected ';' after this.
int void(int x) {
^^^

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

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

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

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

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

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

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

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

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

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

parser/error_recovery/reserved_words_top_level_fields: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_fields:156:1: Expected ';' after this.
int while(int x) {
^^^

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

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

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

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

parser/error_recovery/reserved_words_top_level_fields: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_fields:161:1: Expected ';' after this.
int with(int x) {
^^^

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

parser/error_recovery/reserved_words_top_level_fields: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, )
