# Tenko parser test case

- Path: tests/testcases/operator_precedent/various_priority_checks_GENERATED/order_3_28generated_-_3d3d_7c_2a2a_25_5e_7c7c_2626_instanceof_26_3e3e3e29.md

> :: operator precedent : various priority checks GENERATED
>
> ::> order 3 28generated - 3d3d 7c 2a2a 25 5e 7c7c 2626 instanceof 26 3e3e3e29

## Input

`````js
a >>> b & c instanceof d && e || f ^ g % h ** i | j == k
`````

## Output

_Note: the whole output block is auto-generated.  Manual changes will be overwritten!_ 

Below follow outputs in five parsing modes: sloppy, sloppy+annexb, strict script, module, module+annexb. 

Note that the output parts are auto-generated by the test runner to reflect actual result. 

### Sloppy mode

Parsed with script goal and as if the code did not start with strict mode header. 

`````
ast: {
  type: 'Program',
  loc:{start:{line:1,column:0},end:{line:1,column:56},source:''},
  body: [
    {
      type: 'ExpressionStatement',
      loc:{start:{line:1,column:0},end:{line:1,column:56},source:''},
      expression: {
        type: 'LogicalExpression',
        loc:{start:{line:1,column:0},end:{line:1,column:56},source:''},
        left: {
          type: 'LogicalExpression',
          loc:{start:{line:1,column:0},end:{line:1,column:29},source:''},
          left: {
            type: 'BinaryExpression',
            loc:{start:{line:1,column:0},end:{line:1,column:24},source:''},
            left: {
              type: 'BinaryExpression',
              loc:{start:{line:1,column:0},end:{line:1,column:7},source:''},
              left: {
                type: 'Identifier',
                loc:{start:{line:1,column:0},end:{line:1,column:1},source:''},
                name: 'a'
              },
              operator: '>>>',
              right: {
                type: 'Identifier',
                loc:{start:{line:1,column:6},end:{line:1,column:7},source:''},
                name: 'b'
              }
            },
            operator: '&',
            right: {
              type: 'BinaryExpression',
              loc:{start:{line:1,column:10},end:{line:1,column:24},source:''},
              left: {
                type: 'Identifier',
                loc:{start:{line:1,column:10},end:{line:1,column:11},source:''},
                name: 'c'
              },
              operator: 'instanceof',
              right: {
                type: 'Identifier',
                loc:{start:{line:1,column:23},end:{line:1,column:24},source:''},
                name: 'd'
              }
            }
          },
          operator: '&&',
          right: {
            type: 'Identifier',
            loc:{start:{line:1,column:28},end:{line:1,column:29},source:''},
            name: 'e'
          }
        },
        operator: '||',
        right: {
          type: 'BinaryExpression',
          loc:{start:{line:1,column:33},end:{line:1,column:56},source:''},
          left: {
            type: 'BinaryExpression',
            loc:{start:{line:1,column:33},end:{line:1,column:47},source:''},
            left: {
              type: 'Identifier',
              loc:{start:{line:1,column:33},end:{line:1,column:34},source:''},
              name: 'f'
            },
            operator: '^',
            right: {
              type: 'BinaryExpression',
              loc:{start:{line:1,column:37},end:{line:1,column:47},source:''},
              left: {
                type: 'Identifier',
                loc:{start:{line:1,column:37},end:{line:1,column:38},source:''},
                name: 'g'
              },
              operator: '%',
              right: {
                type: 'BinaryExpression',
                loc:{start:{line:1,column:41},end:{line:1,column:47},source:''},
                left: {
                  type: 'Identifier',
                  loc:{start:{line:1,column:41},end:{line:1,column:42},source:''},
                  name: 'h'
                },
                operator: '**',
                right: {
                  type: 'Identifier',
                  loc:{start:{line:1,column:46},end:{line:1,column:47},source:''},
                  name: 'i'
                }
              }
            }
          },
          operator: '|',
          right: {
            type: 'BinaryExpression',
            loc:{start:{line:1,column:50},end:{line:1,column:56},source:''},
            left: {
              type: 'Identifier',
              loc:{start:{line:1,column:50},end:{line:1,column:51},source:''},
              name: 'j'
            },
            operator: '==',
            right: {
              type: 'Identifier',
              loc:{start:{line:1,column:55},end:{line:1,column:56},source:''},
              name: 'k'
            }
          }
        }
      }
    }
  ]
}

tokens (23x):
       IDENT PUNC_GT_GT_GT IDENT PUNC_AND IDENT ID_instanceof IDENT
       PUNC_AND_AND IDENT PUNC_OR_OR IDENT PUNC_CARET IDENT
       PUNC_PERCENT IDENT PUNC_STAR_STAR IDENT PUNC_OR IDENT
       PUNC_EQ_EQ IDENT ASI
`````

### Strict mode

Parsed with script goal but as if it was starting with `"use strict"` at the top. 

_Output same as sloppy mode._ 

### Module goal

Parsed with the module goal. 

_Output same as sloppy mode._ 

### Sloppy mode with AnnexB

Parsed with script goal with AnnexB rules enabled and as if the code did not start with strict mode header. 

_Output same as sloppy mode._ 

### Module goal with AnnexB

Parsed with the module goal with AnnexB rules enabled. 

_Output same as sloppy mode._ 

## AST Printer

Printer output different from input [sloppy][annexb:no]:

````js
(((((a >>> b) & (c instanceof d)) && e)) || ((f ^ (g % (h ** i))) | (j == k)));
````

Produces same AST
