diff --git a/README.md b/README.md index 8c36d72d0..f29638ef5 100644 --- a/README.md +++ b/README.md @@ -48,7 +48,7 @@ $ cd dist $ npm link ``` -If you do not wish to add \"js-slang\" to your PATH, replace \"js-slang\" with \"node dist/repl/repl.js\" in the following examples. +If you do not wish to add \"js-slang\" to your PATH, replace \"js-slang\" with \"node dist/repl\" in the following examples. To try out _Source_ in a REPL, run diff --git a/package.json b/package.json index 641d38c55..ca7b393fe 100644 --- a/package.json +++ b/package.json @@ -1,6 +1,6 @@ { "name": "js-slang", - "version": "1.0.75", + "version": "1.0.76", "license": "Apache-2.0", "description": "Javascript-based implementations of Source, written in Typescript", "keywords": [ diff --git a/src/cse-machine/__tests__/__snapshots__/cse-machine-heap.ts.snap b/src/cse-machine/__tests__/__snapshots__/cse-machine-heap.ts.snap index 6b2085f71..0e821542d 100644 --- a/src/cse-machine/__tests__/__snapshots__/cse-machine-heap.ts.snap +++ b/src/cse-machine/__tests__/__snapshots__/cse-machine-heap.ts.snap @@ -7467,7 +7467,7 @@ EnvTree { "type": "Literal", "value": [Function], }, - "isEnvDependent": true, + "isEnvDependent": false, "loc": undefined, "optional": false, "type": "CallExpression", @@ -8313,7 +8313,7 @@ EnvTree { "type": "Literal", "value": [Function], }, - "isEnvDependent": true, + "isEnvDependent": false, "loc": undefined, "optional": false, "type": "CallExpression", @@ -9258,7 +9258,7 @@ EnvTree { "type": "Literal", "value": [Function], }, - "isEnvDependent": true, + "isEnvDependent": false, "loc": undefined, "optional": false, "type": "CallExpression", @@ -10222,7 +10222,7 @@ EnvTree { "type": "Literal", "value": [Function], }, - "isEnvDependent": true, + "isEnvDependent": false, "loc": undefined, "optional": false, "type": "CallExpression", @@ -10976,7 +10976,7 @@ EnvTree { "type": "Literal", "value": [Function], }, - "isEnvDependent": true, + "isEnvDependent": false, "loc": undefined, "optional": false, "type": "CallExpression", @@ -11229,7 +11229,7 @@ EnvTree { "type": "Literal", "value": [Function], }, - "isEnvDependent": true, + "isEnvDependent": false, "loc": undefined, "optional": false, "type": "CallExpression", diff --git a/src/cse-machine/__tests__/__snapshots__/cse-machine-runtime-context.ts.snap b/src/cse-machine/__tests__/__snapshots__/cse-machine-runtime-context.ts.snap index f6c07808f..5ca51be75 100644 --- a/src/cse-machine/__tests__/__snapshots__/cse-machine-runtime-context.ts.snap +++ b/src/cse-machine/__tests__/__snapshots__/cse-machine-runtime-context.ts.snap @@ -1,2925 +1,2742 @@ // Jest Snapshot v1, https://goo.gl/fbAQLP -exports[`Avoid unnescessary environment instruction 1 1`] = ` -Control { - "numEnvDependentItems": 0, - "storage": Array [ - Object { - "instrType": "BinaryOperation", - "isEnvDependent": false, - "srcNode": Node { - "end": 53, - "isEnvDependent": true, - "left": Node { - "arguments": Array [ - Node { - "end": 48, - "isEnvDependent": true, - "left": Node { - "end": 46, - "isEnvDependent": true, - "loc": SourceLocation { - "end": Position { - "column": 7, - "line": 4, - }, - "start": Position { - "column": 6, - "line": 4, - }, - }, - "name": "n", - "start": 45, - "type": "Identifier", - }, - "loc": SourceLocation { - "end": Position { - "column": 9, - "line": 4, - }, - "start": Position { - "column": 6, - "line": 4, - }, - }, - "operator": "-", - "right": Node { - "end": 48, - "isEnvDependent": false, - "loc": SourceLocation { - "end": Position { - "column": 9, - "line": 4, - }, - "start": Position { - "column": 8, - "line": 4, - }, - }, - "raw": "1", - "start": 47, - "type": "Literal", - "value": 1, - }, - "start": 45, - "type": "BinaryExpression", - }, - ], - "callee": Node { - "end": 44, - "isEnvDependent": true, - "loc": SourceLocation { - "end": Position { - "column": 5, - "line": 4, - }, - "start": Position { - "column": 4, - "line": 4, - }, - }, - "name": "f", - "start": 43, - "type": "Identifier", - }, - "end": 49, - "isEnvDependent": true, - "loc": SourceLocation { - "end": Position { - "column": 10, - "line": 4, - }, - "start": Position { - "column": 4, - "line": 4, - }, - }, - "start": 43, - "type": "CallExpression", - }, - "loc": SourceLocation { - "end": Position { - "column": 14, - "line": 4, - }, - "start": Position { - "column": 4, - "line": 4, - }, - }, - "operator": "*", - "right": Node { - "end": 53, - "isEnvDependent": false, - "loc": SourceLocation { - "end": Position { - "column": 14, - "line": 4, - }, - "start": Position { - "column": 13, - "line": 4, - }, - }, - "raw": "2", - "start": 52, - "type": "Literal", - "value": 2, - }, - "start": 43, - "type": "BinaryExpression", - }, - "symbol": "*", - }, - Node { - "end": 53, - "isEnvDependent": false, - "loc": SourceLocation { - "end": Position { - "column": 14, - "line": 4, - }, - "start": Position { - "column": 13, - "line": 4, - }, - }, - "raw": "2", - "start": 52, - "type": "Literal", - "value": 2, - }, - Object { - "instrType": "BinaryOperation", - "isEnvDependent": false, - "srcNode": Node { - "end": 53, - "isEnvDependent": true, - "left": Node { - "arguments": Array [ - Node { - "end": 48, - "isEnvDependent": true, - "left": Node { - "end": 46, - "isEnvDependent": true, - "loc": SourceLocation { - "end": Position { - "column": 7, - "line": 4, - }, - "start": Position { - "column": 6, - "line": 4, - }, - }, - "name": "n", - "start": 45, - "type": "Identifier", - }, - "loc": SourceLocation { - "end": Position { - "column": 9, - "line": 4, - }, - "start": Position { - "column": 6, - "line": 4, - }, - }, - "operator": "-", - "right": Node { - "end": 48, - "isEnvDependent": false, - "loc": SourceLocation { - "end": Position { - "column": 9, - "line": 4, - }, - "start": Position { - "column": 8, - "line": 4, - }, - }, - "raw": "1", - "start": 47, - "type": "Literal", - "value": 1, - }, - "start": 45, - "type": "BinaryExpression", - }, - ], - "callee": Node { - "end": 44, - "isEnvDependent": true, - "loc": SourceLocation { - "end": Position { - "column": 5, - "line": 4, - }, - "start": Position { - "column": 4, - "line": 4, - }, - }, - "name": "f", - "start": 43, - "type": "Identifier", - }, - "end": 49, - "isEnvDependent": true, - "loc": SourceLocation { - "end": Position { - "column": 10, - "line": 4, - }, - "start": Position { - "column": 4, - "line": 4, - }, - }, - "start": 43, - "type": "CallExpression", - }, - "loc": SourceLocation { - "end": Position { - "column": 14, - "line": 4, - }, - "start": Position { - "column": 4, - "line": 4, - }, - }, - "operator": "*", - "right": Node { - "end": 53, - "isEnvDependent": false, - "loc": SourceLocation { - "end": Position { - "column": 14, - "line": 4, - }, - "start": Position { - "column": 13, - "line": 4, - }, - }, - "raw": "2", - "start": 52, - "type": "Literal", - "value": 2, - }, - "start": 43, - "type": "BinaryExpression", - }, - "symbol": "*", - }, - Node { - "end": 53, - "isEnvDependent": false, - "loc": SourceLocation { - "end": Position { - "column": 14, - "line": 4, - }, - "start": Position { - "column": 13, - "line": 4, - }, - }, - "raw": "2", - "start": 52, - "type": "Literal", - "value": 2, - }, - Object { - "instrType": "BinaryOperation", - "isEnvDependent": false, - "srcNode": Node { - "end": 53, - "isEnvDependent": true, - "left": Node { - "arguments": Array [ - Node { - "end": 48, - "isEnvDependent": true, - "left": Node { - "end": 46, - "isEnvDependent": true, - "loc": SourceLocation { - "end": Position { - "column": 7, - "line": 4, - }, - "start": Position { - "column": 6, - "line": 4, - }, - }, - "name": "n", - "start": 45, - "type": "Identifier", - }, - "loc": SourceLocation { - "end": Position { - "column": 9, - "line": 4, - }, - "start": Position { - "column": 6, - "line": 4, - }, - }, - "operator": "-", - "right": Node { - "end": 48, - "isEnvDependent": false, - "loc": SourceLocation { - "end": Position { - "column": 9, - "line": 4, - }, - "start": Position { - "column": 8, - "line": 4, - }, - }, - "raw": "1", - "start": 47, - "type": "Literal", - "value": 1, - }, - "start": 45, - "type": "BinaryExpression", - }, - ], - "callee": Node { - "end": 44, - "isEnvDependent": true, - "loc": SourceLocation { - "end": Position { - "column": 5, - "line": 4, - }, - "start": Position { - "column": 4, - "line": 4, - }, - }, - "name": "f", - "start": 43, - "type": "Identifier", - }, - "end": 49, - "isEnvDependent": true, - "loc": SourceLocation { - "end": Position { - "column": 10, - "line": 4, - }, - "start": Position { - "column": 4, - "line": 4, - }, - }, - "start": 43, - "type": "CallExpression", - }, - "loc": SourceLocation { - "end": Position { - "column": 14, - "line": 4, - }, - "start": Position { - "column": 4, - "line": 4, - }, - }, - "operator": "*", - "right": Node { - "end": 53, - "isEnvDependent": false, - "loc": SourceLocation { - "end": Position { - "column": 14, - "line": 4, - }, - "start": Position { - "column": 13, - "line": 4, - }, - }, - "raw": "2", - "start": 52, - "type": "Literal", - "value": 2, - }, - "start": 43, - "type": "BinaryExpression", - }, - "symbol": "*", - }, - ], -} -`; +exports[`Avoid unnescessary environment instruction 1`] = `1`; + +exports[`Avoid unnescessary environment instruction 2`] = `2`; + +exports[`Avoid unnescessary environment instruction 3`] = `2`; + +exports[`Avoid unnescessary environment instruction 4`] = `3`; + +exports[`Avoid unnescessary environment instruction 5`] = `2`; + +exports[`Avoid unnescessary environment instruction 6`] = `1`; + +exports[`Avoid unnescessary environment instruction 7`] = `1`; + +exports[`Avoid unnescessary environment instruction 8`] = `2`; + +exports[`Avoid unnescessary environment instruction 9`] = `1`; + +exports[`Avoid unnescessary environment instruction 10`] = `1`; + +exports[`Avoid unnescessary environment instruction 11`] = `1`; + +exports[`Avoid unnescessary environment instruction 12`] = `2`; + +exports[`Avoid unnescessary environment instruction 13`] = `2`; + +exports[`Avoid unnescessary environment instruction 14`] = `1`; + +exports[`Avoid unnescessary environment instruction 15`] = `1`; + +exports[`Avoid unnescessary environment instruction 16`] = `1`; + +exports[`Avoid unnescessary environment instruction 17`] = `1`; + +exports[`Avoid unnescessary environment instruction 18`] = `1`; + +exports[`Avoid unnescessary environment instruction 19`] = `3`; + +exports[`Avoid unnescessary environment instruction 20`] = `2`; + +exports[`Avoid unnescessary environment instruction 21`] = `2`; + +exports[`Avoid unnescessary environment instruction 22`] = `1`; + +exports[`Avoid unnescessary environment instruction 23`] = `1`; + +exports[`Avoid unnescessary environment instruction 24`] = `1`; + +exports[`Avoid unnescessary environment instruction 25`] = `1`; + +exports[`Avoid unnescessary environment instruction 26`] = `2`; + +exports[`Avoid unnescessary environment instruction 27`] = `2`; + +exports[`Avoid unnescessary environment instruction 28`] = `1`; + +exports[`Avoid unnescessary environment instruction 29`] = `1`; + +exports[`Avoid unnescessary environment instruction 30`] = `1`; + +exports[`Avoid unnescessary environment instruction 31`] = `1`; + +exports[`Avoid unnescessary environment instruction 32`] = `1`; + +exports[`Avoid unnescessary environment instruction 33`] = `3`; + +exports[`Avoid unnescessary environment instruction 34`] = `2`; + +exports[`Avoid unnescessary environment instruction 35`] = `2`; + +exports[`Avoid unnescessary environment instruction 36`] = `1`; + +exports[`Avoid unnescessary environment instruction 37`] = `1`; + +exports[`Avoid unnescessary environment instruction 38`] = `1`; + +exports[`Avoid unnescessary environment instruction 39`] = `1`; + +exports[`Avoid unnescessary environment instruction 40`] = `2`; + +exports[`Avoid unnescessary environment instruction 41`] = `2`; + +exports[`Avoid unnescessary environment instruction 42`] = `1`; + +exports[`Avoid unnescessary environment instruction 43`] = `1`; + +exports[`Avoid unnescessary environment instruction 44`] = `1`; + +exports[`Avoid unnescessary environment instruction 45`] = `1`; + +exports[`Avoid unnescessary environment instruction 46`] = `1`; + +exports[`Avoid unnescessary environment instruction 47`] = `3`; + +exports[`Avoid unnescessary environment instruction 48`] = `2`; + +exports[`Avoid unnescessary environment instruction 49`] = `2`; + +exports[`Avoid unnescessary environment instruction 50`] = `1`; + +exports[`Avoid unnescessary environment instruction 51`] = `1`; + +exports[`Avoid unnescessary environment instruction 52`] = `1`; + +exports[`Avoid unnescessary environment instruction 53`] = `1`; + +exports[`Avoid unnescessary environment instruction 54`] = `2`; + +exports[`Avoid unnescessary environment instruction 55`] = `2`; + +exports[`Avoid unnescessary environment instruction 56`] = `1`; + +exports[`Avoid unnescessary environment instruction 57`] = `1`; + +exports[`Avoid unnescessary environment instruction 58`] = `1`; + +exports[`Avoid unnescessary environment instruction 59`] = `0`; + +exports[`Avoid unnescessary environment instruction 60`] = `0`; + +exports[`Avoid unnescessary environment instruction 61`] = `0`; + +exports[`Avoid unnescessary environment instruction 62`] = `0`; + +exports[`Avoid unnescessary environment instruction 63`] = `0`; + +exports[`Avoid unnescessary environment instruction 64`] = `0`; + +exports[`Avoid unnescessary environment instruction 65`] = `0`; + +exports[`Avoid unnescessary environment instruction 66`] = `0`; + +exports[`Avoid unnescessary environment instruction 67`] = `1`; + +exports[`Avoid unnescessary environment instruction 68`] = `2`; + +exports[`Avoid unnescessary environment instruction 69`] = `2`; + +exports[`Avoid unnescessary environment instruction 70`] = `3`; + +exports[`Avoid unnescessary environment instruction 71`] = `2`; + +exports[`Avoid unnescessary environment instruction 72`] = `1`; + +exports[`Avoid unnescessary environment instruction 73`] = `1`; + +exports[`Avoid unnescessary environment instruction 74`] = `2`; + +exports[`Avoid unnescessary environment instruction 75`] = `1`; + +exports[`Avoid unnescessary environment instruction 76`] = `1`; + +exports[`Avoid unnescessary environment instruction 77`] = `1`; + +exports[`Avoid unnescessary environment instruction 78`] = `2`; + +exports[`Avoid unnescessary environment instruction 79`] = `2`; + +exports[`Avoid unnescessary environment instruction 80`] = `1`; + +exports[`Avoid unnescessary environment instruction 81`] = `1`; + +exports[`Avoid unnescessary environment instruction 82`] = `1`; + +exports[`Avoid unnescessary environment instruction 83`] = `1`; + +exports[`Avoid unnescessary environment instruction 84`] = `2`; + +exports[`Avoid unnescessary environment instruction 85`] = `1`; + +exports[`Avoid unnescessary environment instruction 86`] = `3`; + +exports[`Avoid unnescessary environment instruction 87`] = `2`; + +exports[`Avoid unnescessary environment instruction 88`] = `2`; + +exports[`Avoid unnescessary environment instruction 89`] = `1`; + +exports[`Avoid unnescessary environment instruction 90`] = `1`; + +exports[`Avoid unnescessary environment instruction 91`] = `1`; + +exports[`Avoid unnescessary environment instruction 92`] = `1`; + +exports[`Avoid unnescessary environment instruction 93`] = `2`; + +exports[`Avoid unnescessary environment instruction 94`] = `2`; + +exports[`Avoid unnescessary environment instruction 95`] = `1`; + +exports[`Avoid unnescessary environment instruction 96`] = `1`; + +exports[`Avoid unnescessary environment instruction 97`] = `1`; + +exports[`Avoid unnescessary environment instruction 98`] = `1`; + +exports[`Avoid unnescessary environment instruction 99`] = `2`; + +exports[`Avoid unnescessary environment instruction 100`] = `1`; + +exports[`Avoid unnescessary environment instruction 101`] = `3`; + +exports[`Avoid unnescessary environment instruction 102`] = `2`; + +exports[`Avoid unnescessary environment instruction 103`] = `2`; + +exports[`Avoid unnescessary environment instruction 104`] = `1`; + +exports[`Avoid unnescessary environment instruction 105`] = `1`; + +exports[`Avoid unnescessary environment instruction 106`] = `1`; + +exports[`Avoid unnescessary environment instruction 107`] = `1`; + +exports[`Avoid unnescessary environment instruction 108`] = `2`; + +exports[`Avoid unnescessary environment instruction 109`] = `2`; + +exports[`Avoid unnescessary environment instruction 110`] = `1`; + +exports[`Avoid unnescessary environment instruction 111`] = `1`; + +exports[`Avoid unnescessary environment instruction 112`] = `1`; + +exports[`Avoid unnescessary environment instruction 113`] = `1`; + +exports[`Avoid unnescessary environment instruction 114`] = `2`; + +exports[`Avoid unnescessary environment instruction 115`] = `1`; + +exports[`Avoid unnescessary environment instruction 116`] = `3`; + +exports[`Avoid unnescessary environment instruction 117`] = `2`; + +exports[`Avoid unnescessary environment instruction 118`] = `2`; + +exports[`Avoid unnescessary environment instruction 119`] = `1`; + +exports[`Avoid unnescessary environment instruction 120`] = `1`; + +exports[`Avoid unnescessary environment instruction 121`] = `1`; + +exports[`Avoid unnescessary environment instruction 122`] = `1`; + +exports[`Avoid unnescessary environment instruction 123`] = `2`; + +exports[`Avoid unnescessary environment instruction 124`] = `2`; + +exports[`Avoid unnescessary environment instruction 125`] = `1`; + +exports[`Avoid unnescessary environment instruction 126`] = `1`; + +exports[`Avoid unnescessary environment instruction 127`] = `1`; + +exports[`Avoid unnescessary environment instruction 128`] = `0`; + +exports[`Avoid unnescessary environment instruction 129`] = `0`; + +exports[`Avoid unnescessary environment instruction 130`] = `0`; + +exports[`Avoid unnescessary environment instruction 131`] = `0`; + +exports[`Avoid unnescessary environment instruction 132`] = `0`; + +exports[`Avoid unnescessary environment instruction 133`] = `1`; + +exports[`Avoid unnescessary environment instruction 134`] = `4`; + +exports[`Avoid unnescessary environment instruction 135`] = `4`; + +exports[`Avoid unnescessary environment instruction 136`] = `4`; + +exports[`Avoid unnescessary environment instruction 137`] = `3`; + +exports[`Avoid unnescessary environment instruction 138`] = `3`; + +exports[`Avoid unnescessary environment instruction 139`] = `3`; + +exports[`Avoid unnescessary environment instruction 140`] = `4`; + +exports[`Avoid unnescessary environment instruction 141`] = `3`; + +exports[`Avoid unnescessary environment instruction 142`] = `2`; + +exports[`Avoid unnescessary environment instruction 143`] = `2`; + +exports[`Avoid unnescessary environment instruction 144`] = `3`; + +exports[`Avoid unnescessary environment instruction 145`] = `2`; + +exports[`Avoid unnescessary environment instruction 146`] = `2`; + +exports[`Avoid unnescessary environment instruction 147`] = `2`; + +exports[`Avoid unnescessary environment instruction 148`] = `3`; + +exports[`Avoid unnescessary environment instruction 149`] = `3`; + +exports[`Avoid unnescessary environment instruction 150`] = `2`; + +exports[`Avoid unnescessary environment instruction 151`] = `2`; + +exports[`Avoid unnescessary environment instruction 152`] = `2`; + +exports[`Avoid unnescessary environment instruction 153`] = `2`; + +exports[`Avoid unnescessary environment instruction 154`] = `3`; + +exports[`Avoid unnescessary environment instruction 155`] = `2`; + +exports[`Avoid unnescessary environment instruction 156`] = `4`; + +exports[`Avoid unnescessary environment instruction 157`] = `3`; + +exports[`Avoid unnescessary environment instruction 158`] = `3`; + +exports[`Avoid unnescessary environment instruction 159`] = `2`; + +exports[`Avoid unnescessary environment instruction 160`] = `2`; + +exports[`Avoid unnescessary environment instruction 161`] = `2`; + +exports[`Avoid unnescessary environment instruction 162`] = `2`; + +exports[`Avoid unnescessary environment instruction 163`] = `3`; + +exports[`Avoid unnescessary environment instruction 164`] = `3`; + +exports[`Avoid unnescessary environment instruction 165`] = `2`; + +exports[`Avoid unnescessary environment instruction 166`] = `2`; + +exports[`Avoid unnescessary environment instruction 167`] = `2`; + +exports[`Avoid unnescessary environment instruction 168`] = `2`; + +exports[`Avoid unnescessary environment instruction 169`] = `3`; + +exports[`Avoid unnescessary environment instruction 170`] = `2`; + +exports[`Avoid unnescessary environment instruction 171`] = `4`; + +exports[`Avoid unnescessary environment instruction 172`] = `3`; + +exports[`Avoid unnescessary environment instruction 173`] = `3`; + +exports[`Avoid unnescessary environment instruction 174`] = `2`; + +exports[`Avoid unnescessary environment instruction 175`] = `2`; + +exports[`Avoid unnescessary environment instruction 176`] = `2`; + +exports[`Avoid unnescessary environment instruction 177`] = `2`; + +exports[`Avoid unnescessary environment instruction 178`] = `3`; + +exports[`Avoid unnescessary environment instruction 179`] = `3`; + +exports[`Avoid unnescessary environment instruction 180`] = `2`; + +exports[`Avoid unnescessary environment instruction 181`] = `2`; + +exports[`Avoid unnescessary environment instruction 182`] = `2`; + +exports[`Avoid unnescessary environment instruction 183`] = `2`; + +exports[`Avoid unnescessary environment instruction 184`] = `3`; + +exports[`Avoid unnescessary environment instruction 185`] = `2`; + +exports[`Avoid unnescessary environment instruction 186`] = `4`; + +exports[`Avoid unnescessary environment instruction 187`] = `3`; + +exports[`Avoid unnescessary environment instruction 188`] = `3`; + +exports[`Avoid unnescessary environment instruction 189`] = `2`; + +exports[`Avoid unnescessary environment instruction 190`] = `2`; + +exports[`Avoid unnescessary environment instruction 191`] = `2`; + +exports[`Avoid unnescessary environment instruction 192`] = `2`; + +exports[`Avoid unnescessary environment instruction 193`] = `3`; + +exports[`Avoid unnescessary environment instruction 194`] = `3`; + +exports[`Avoid unnescessary environment instruction 195`] = `2`; + +exports[`Avoid unnescessary environment instruction 196`] = `2`; + +exports[`Avoid unnescessary environment instruction 197`] = `2`; + +exports[`Avoid unnescessary environment instruction 198`] = `1`; + +exports[`Avoid unnescessary environment instruction 199`] = `1`; + +exports[`Avoid unnescessary environment instruction 200`] = `1`; + +exports[`Avoid unnescessary environment instruction 201`] = `1`; + +exports[`Avoid unnescessary environment instruction 202`] = `1`; + +exports[`Avoid unnescessary environment instruction 203`] = `1`; + +exports[`Avoid unnescessary environment instruction 204`] = `1`; + +exports[`Avoid unnescessary environment instruction 205`] = `1`; + +exports[`Avoid unnescessary environment instruction 206`] = `1`; + +exports[`Avoid unnescessary environment instruction 207`] = `1`; + +exports[`Avoid unnescessary environment instruction 208`] = `1`; + +exports[`Avoid unnescessary environment instruction 209`] = `1`; + +exports[`Avoid unnescessary environment instruction 210`] = `0`; + +exports[`Avoid unnescessary environment instruction 211`] = `1`; + +exports[`Avoid unnescessary environment instruction 212`] = `1`; + +exports[`Avoid unnescessary environment instruction 213`] = `1`; + +exports[`Avoid unnescessary environment instruction 214`] = `2`; + +exports[`Avoid unnescessary environment instruction 215`] = `2`; + +exports[`Avoid unnescessary environment instruction 216`] = `2`; + +exports[`Avoid unnescessary environment instruction 217`] = `1`; + +exports[`Avoid unnescessary environment instruction 218`] = `1`; + +exports[`Avoid unnescessary environment instruction 219`] = `1`; + +exports[`Avoid unnescessary environment instruction 220`] = `1`; + +exports[`Avoid unnescessary environment instruction 221`] = `0`; + +exports[`Avoid unnescessary environment instruction 222`] = `0`; + +exports[`Avoid unnescessary environment instruction 223`] = `0`; + +exports[`Avoid unnescessary environment instruction 224`] = `0`; + +exports[`Avoid unnescessary environment instruction 225`] = `0`; + +exports[`Avoid unnescessary environment instruction 226`] = `0`; + +exports[`Avoid unnescessary environment instruction 227`] = `0`; + +exports[`Avoid unnescessary environment instruction 228`] = `0`; + +exports[`Avoid unnescessary environment instruction 229`] = `0`; + +exports[`Avoid unnescessary environment instruction 230`] = `1`; + +exports[`Avoid unnescessary environment instruction 231`] = `6`; + +exports[`Avoid unnescessary environment instruction 232`] = `6`; + +exports[`Avoid unnescessary environment instruction 233`] = `7`; + +exports[`Avoid unnescessary environment instruction 234`] = `7`; + +exports[`Avoid unnescessary environment instruction 235`] = `7`; + +exports[`Avoid unnescessary environment instruction 236`] = `7`; + +exports[`Avoid unnescessary environment instruction 237`] = `6`; + +exports[`Avoid unnescessary environment instruction 238`] = `5`; + +exports[`Avoid unnescessary environment instruction 239`] = `5`; + +exports[`Avoid unnescessary environment instruction 240`] = `6`; + +exports[`Avoid unnescessary environment instruction 241`] = `7`; + +exports[`Avoid unnescessary environment instruction 242`] = `6`; + +exports[`Avoid unnescessary environment instruction 243`] = `6`; + +exports[`Avoid unnescessary environment instruction 244`] = `6`; + +exports[`Avoid unnescessary environment instruction 245`] = `5`; + +exports[`Avoid unnescessary environment instruction 246`] = `5`; + +exports[`Avoid unnescessary environment instruction 247`] = `4`; + +exports[`Avoid unnescessary environment instruction 248`] = `4`; + +exports[`Avoid unnescessary environment instruction 249`] = `4`; + +exports[`Avoid unnescessary environment instruction 250`] = `4`; + +exports[`Avoid unnescessary environment instruction 251`] = `3`; + +exports[`Avoid unnescessary environment instruction 252`] = `3`; + +exports[`Avoid unnescessary environment instruction 253`] = `3`; + +exports[`Avoid unnescessary environment instruction 254`] = `4`; + +exports[`Avoid unnescessary environment instruction 255`] = `3`; + +exports[`Avoid unnescessary environment instruction 256`] = `2`; + +exports[`Avoid unnescessary environment instruction 257`] = `2`; + +exports[`Avoid unnescessary environment instruction 258`] = `2`; + +exports[`Avoid unnescessary environment instruction 259`] = `2`; + +exports[`Avoid unnescessary environment instruction 260`] = `3`; + +exports[`Avoid unnescessary environment instruction 261`] = `3`; + +exports[`Avoid unnescessary environment instruction 262`] = `3`; + +exports[`Avoid unnescessary environment instruction 263`] = `2`; + +exports[`Avoid unnescessary environment instruction 264`] = `2`; + +exports[`Avoid unnescessary environment instruction 265`] = `5`; + +exports[`Avoid unnescessary environment instruction 266`] = `4`; + +exports[`Avoid unnescessary environment instruction 267`] = `4`; + +exports[`Avoid unnescessary environment instruction 268`] = `4`; + +exports[`Avoid unnescessary environment instruction 269`] = `3`; + +exports[`Avoid unnescessary environment instruction 270`] = `3`; + +exports[`Avoid unnescessary environment instruction 271`] = `3`; + +exports[`Avoid unnescessary environment instruction 272`] = `2`; + +exports[`Avoid unnescessary environment instruction 273`] = `2`; + +exports[`Avoid unnescessary environment instruction 274`] = `2`; + +exports[`Avoid unnescessary environment instruction 275`] = `5`; + +exports[`Avoid unnescessary environment instruction 276`] = `5`; + +exports[`Avoid unnescessary environment instruction 277`] = `5`; + +exports[`Avoid unnescessary environment instruction 278`] = `6`; + +exports[`Avoid unnescessary environment instruction 279`] = `7`; + +exports[`Avoid unnescessary environment instruction 280`] = `6`; + +exports[`Avoid unnescessary environment instruction 281`] = `5`; + +exports[`Avoid unnescessary environment instruction 282`] = `5`; + +exports[`Avoid unnescessary environment instruction 283`] = `5`; + +exports[`Avoid unnescessary environment instruction 284`] = `6`; + +exports[`Avoid unnescessary environment instruction 285`] = `7`; + +exports[`Avoid unnescessary environment instruction 286`] = `6`; + +exports[`Avoid unnescessary environment instruction 287`] = `5`; + +exports[`Avoid unnescessary environment instruction 288`] = `5`; + +exports[`Avoid unnescessary environment instruction 289`] = `5`; + +exports[`Avoid unnescessary environment instruction 290`] = `7`; + +exports[`Avoid unnescessary environment instruction 291`] = `7`; + +exports[`Avoid unnescessary environment instruction 292`] = `7`; + +exports[`Avoid unnescessary environment instruction 293`] = `6`; + +exports[`Avoid unnescessary environment instruction 294`] = `6`; + +exports[`Avoid unnescessary environment instruction 295`] = `8`; + +exports[`Avoid unnescessary environment instruction 296`] = `7`; + +exports[`Avoid unnescessary environment instruction 297`] = `8`; + +exports[`Avoid unnescessary environment instruction 298`] = `7`; + +exports[`Avoid unnescessary environment instruction 299`] = `6`; + +exports[`Avoid unnescessary environment instruction 300`] = `6`; + +exports[`Avoid unnescessary environment instruction 301`] = `8`; + +exports[`Avoid unnescessary environment instruction 302`] = `8`; + +exports[`Avoid unnescessary environment instruction 303`] = `9`; + +exports[`Avoid unnescessary environment instruction 304`] = `10`; + +exports[`Avoid unnescessary environment instruction 305`] = `13`; + +exports[`Avoid unnescessary environment instruction 306`] = `12`; + +exports[`Avoid unnescessary environment instruction 307`] = `11`; + +exports[`Avoid unnescessary environment instruction 308`] = `10`; + +exports[`Avoid unnescessary environment instruction 309`] = `10`; + +exports[`Avoid unnescessary environment instruction 310`] = `11`; + +exports[`Avoid unnescessary environment instruction 311`] = `10`; + +exports[`Avoid unnescessary environment instruction 312`] = `9`; + +exports[`Avoid unnescessary environment instruction 313`] = `9`; + +exports[`Avoid unnescessary environment instruction 314`] = `9`; + +exports[`Avoid unnescessary environment instruction 315`] = `8`; + +exports[`Avoid unnescessary environment instruction 316`] = `8`; + +exports[`Avoid unnescessary environment instruction 317`] = `9`; + +exports[`Avoid unnescessary environment instruction 318`] = `9`; + +exports[`Avoid unnescessary environment instruction 319`] = `8`; + +exports[`Avoid unnescessary environment instruction 320`] = `8`; + +exports[`Avoid unnescessary environment instruction 321`] = `8`; + +exports[`Avoid unnescessary environment instruction 322`] = `7`; + +exports[`Avoid unnescessary environment instruction 323`] = `8`; + +exports[`Avoid unnescessary environment instruction 324`] = `7`; + +exports[`Avoid unnescessary environment instruction 325`] = `6`; + +exports[`Avoid unnescessary environment instruction 326`] = `6`; + +exports[`Avoid unnescessary environment instruction 327`] = `5`; + +exports[`Avoid unnescessary environment instruction 328`] = `5`; + +exports[`Avoid unnescessary environment instruction 329`] = `6`; + +exports[`Avoid unnescessary environment instruction 330`] = `6`; + +exports[`Avoid unnescessary environment instruction 331`] = `7`; + +exports[`Avoid unnescessary environment instruction 332`] = `7`; + +exports[`Avoid unnescessary environment instruction 333`] = `6`; + +exports[`Avoid unnescessary environment instruction 334`] = `6`; + +exports[`Avoid unnescessary environment instruction 335`] = `6`; + +exports[`Avoid unnescessary environment instruction 336`] = `5`; + +exports[`Avoid unnescessary environment instruction 337`] = `5`; + +exports[`Avoid unnescessary environment instruction 338`] = `5`; + +exports[`Avoid unnescessary environment instruction 339`] = `4`; + +exports[`Avoid unnescessary environment instruction 340`] = `4`; + +exports[`Avoid unnescessary environment instruction 341`] = `5`; + +exports[`Avoid unnescessary environment instruction 342`] = `5`; + +exports[`Avoid unnescessary environment instruction 343`] = `4`; + +exports[`Avoid unnescessary environment instruction 344`] = `4`; + +exports[`Avoid unnescessary environment instruction 345`] = `4`; + +exports[`Avoid unnescessary environment instruction 346`] = `3`; + +exports[`Avoid unnescessary environment instruction 347`] = `3`; + +exports[`Avoid unnescessary environment instruction 348`] = `3`; + +exports[`Avoid unnescessary environment instruction 349`] = `2`; + +exports[`Avoid unnescessary environment instruction 350`] = `2`; + +exports[`Avoid unnescessary environment instruction 351`] = `2`; + +exports[`Avoid unnescessary environment instruction 352`] = `5`; + +exports[`Avoid unnescessary environment instruction 353`] = `5`; + +exports[`Avoid unnescessary environment instruction 354`] = `5`; + +exports[`Avoid unnescessary environment instruction 355`] = `6`; + +exports[`Avoid unnescessary environment instruction 356`] = `7`; + +exports[`Avoid unnescessary environment instruction 357`] = `6`; + +exports[`Avoid unnescessary environment instruction 358`] = `5`; + +exports[`Avoid unnescessary environment instruction 359`] = `5`; + +exports[`Avoid unnescessary environment instruction 360`] = `5`; + +exports[`Avoid unnescessary environment instruction 361`] = `6`; + +exports[`Avoid unnescessary environment instruction 362`] = `7`; + +exports[`Avoid unnescessary environment instruction 363`] = `6`; + +exports[`Avoid unnescessary environment instruction 364`] = `5`; + +exports[`Avoid unnescessary environment instruction 365`] = `5`; + +exports[`Avoid unnescessary environment instruction 366`] = `5`; + +exports[`Avoid unnescessary environment instruction 367`] = `7`; + +exports[`Avoid unnescessary environment instruction 368`] = `7`; + +exports[`Avoid unnescessary environment instruction 369`] = `7`; + +exports[`Avoid unnescessary environment instruction 370`] = `6`; + +exports[`Avoid unnescessary environment instruction 371`] = `6`; + +exports[`Avoid unnescessary environment instruction 372`] = `8`; + +exports[`Avoid unnescessary environment instruction 373`] = `7`; + +exports[`Avoid unnescessary environment instruction 374`] = `8`; + +exports[`Avoid unnescessary environment instruction 375`] = `7`; + +exports[`Avoid unnescessary environment instruction 376`] = `6`; + +exports[`Avoid unnescessary environment instruction 377`] = `6`; + +exports[`Avoid unnescessary environment instruction 378`] = `8`; + +exports[`Avoid unnescessary environment instruction 379`] = `8`; + +exports[`Avoid unnescessary environment instruction 380`] = `9`; + +exports[`Avoid unnescessary environment instruction 381`] = `10`; + +exports[`Avoid unnescessary environment instruction 382`] = `13`; + +exports[`Avoid unnescessary environment instruction 383`] = `12`; + +exports[`Avoid unnescessary environment instruction 384`] = `11`; + +exports[`Avoid unnescessary environment instruction 385`] = `10`; + +exports[`Avoid unnescessary environment instruction 386`] = `10`; + +exports[`Avoid unnescessary environment instruction 387`] = `11`; + +exports[`Avoid unnescessary environment instruction 388`] = `10`; + +exports[`Avoid unnescessary environment instruction 389`] = `9`; + +exports[`Avoid unnescessary environment instruction 390`] = `9`; + +exports[`Avoid unnescessary environment instruction 391`] = `9`; + +exports[`Avoid unnescessary environment instruction 392`] = `8`; + +exports[`Avoid unnescessary environment instruction 393`] = `8`; + +exports[`Avoid unnescessary environment instruction 394`] = `9`; + +exports[`Avoid unnescessary environment instruction 395`] = `9`; + +exports[`Avoid unnescessary environment instruction 396`] = `8`; + +exports[`Avoid unnescessary environment instruction 397`] = `8`; + +exports[`Avoid unnescessary environment instruction 398`] = `8`; + +exports[`Avoid unnescessary environment instruction 399`] = `7`; + +exports[`Avoid unnescessary environment instruction 400`] = `8`; + +exports[`Avoid unnescessary environment instruction 401`] = `7`; + +exports[`Avoid unnescessary environment instruction 402`] = `6`; + +exports[`Avoid unnescessary environment instruction 403`] = `6`; + +exports[`Avoid unnescessary environment instruction 404`] = `8`; + +exports[`Avoid unnescessary environment instruction 405`] = `8`; + +exports[`Avoid unnescessary environment instruction 406`] = `9`; + +exports[`Avoid unnescessary environment instruction 407`] = `10`; + +exports[`Avoid unnescessary environment instruction 408`] = `13`; + +exports[`Avoid unnescessary environment instruction 409`] = `12`; + +exports[`Avoid unnescessary environment instruction 410`] = `11`; + +exports[`Avoid unnescessary environment instruction 411`] = `10`; + +exports[`Avoid unnescessary environment instruction 412`] = `10`; + +exports[`Avoid unnescessary environment instruction 413`] = `11`; + +exports[`Avoid unnescessary environment instruction 414`] = `10`; + +exports[`Avoid unnescessary environment instruction 415`] = `9`; + +exports[`Avoid unnescessary environment instruction 416`] = `9`; + +exports[`Avoid unnescessary environment instruction 417`] = `9`; + +exports[`Avoid unnescessary environment instruction 418`] = `8`; + +exports[`Avoid unnescessary environment instruction 419`] = `8`; + +exports[`Avoid unnescessary environment instruction 420`] = `9`; + +exports[`Avoid unnescessary environment instruction 421`] = `9`; + +exports[`Avoid unnescessary environment instruction 422`] = `8`; + +exports[`Avoid unnescessary environment instruction 423`] = `8`; + +exports[`Avoid unnescessary environment instruction 424`] = `8`; + +exports[`Avoid unnescessary environment instruction 425`] = `7`; + +exports[`Avoid unnescessary environment instruction 426`] = `8`; + +exports[`Avoid unnescessary environment instruction 427`] = `7`; + +exports[`Avoid unnescessary environment instruction 428`] = `6`; + +exports[`Avoid unnescessary environment instruction 429`] = `6`; + +exports[`Avoid unnescessary environment instruction 430`] = `5`; + +exports[`Avoid unnescessary environment instruction 431`] = `5`; + +exports[`Avoid unnescessary environment instruction 432`] = `6`; + +exports[`Avoid unnescessary environment instruction 433`] = `6`; + +exports[`Avoid unnescessary environment instruction 434`] = `7`; + +exports[`Avoid unnescessary environment instruction 435`] = `7`; + +exports[`Avoid unnescessary environment instruction 436`] = `6`; + +exports[`Avoid unnescessary environment instruction 437`] = `6`; + +exports[`Avoid unnescessary environment instruction 438`] = `6`; + +exports[`Avoid unnescessary environment instruction 439`] = `5`; + +exports[`Avoid unnescessary environment instruction 440`] = `5`; + +exports[`Avoid unnescessary environment instruction 441`] = `5`; + +exports[`Avoid unnescessary environment instruction 442`] = `4`; + +exports[`Avoid unnescessary environment instruction 443`] = `4`; + +exports[`Avoid unnescessary environment instruction 444`] = `5`; + +exports[`Avoid unnescessary environment instruction 445`] = `5`; + +exports[`Avoid unnescessary environment instruction 446`] = `4`; + +exports[`Avoid unnescessary environment instruction 447`] = `4`; + +exports[`Avoid unnescessary environment instruction 448`] = `4`; + +exports[`Avoid unnescessary environment instruction 449`] = `3`; + +exports[`Avoid unnescessary environment instruction 450`] = `3`; + +exports[`Avoid unnescessary environment instruction 451`] = `3`; + +exports[`Avoid unnescessary environment instruction 452`] = `2`; + +exports[`Avoid unnescessary environment instruction 453`] = `2`; + +exports[`Avoid unnescessary environment instruction 454`] = `2`; + +exports[`Avoid unnescessary environment instruction 455`] = `5`; + +exports[`Avoid unnescessary environment instruction 456`] = `5`; + +exports[`Avoid unnescessary environment instruction 457`] = `5`; + +exports[`Avoid unnescessary environment instruction 458`] = `6`; + +exports[`Avoid unnescessary environment instruction 459`] = `7`; + +exports[`Avoid unnescessary environment instruction 460`] = `6`; + +exports[`Avoid unnescessary environment instruction 461`] = `5`; + +exports[`Avoid unnescessary environment instruction 462`] = `5`; + +exports[`Avoid unnescessary environment instruction 463`] = `5`; + +exports[`Avoid unnescessary environment instruction 464`] = `6`; + +exports[`Avoid unnescessary environment instruction 465`] = `7`; + +exports[`Avoid unnescessary environment instruction 466`] = `6`; + +exports[`Avoid unnescessary environment instruction 467`] = `5`; + +exports[`Avoid unnescessary environment instruction 468`] = `5`; + +exports[`Avoid unnescessary environment instruction 469`] = `5`; + +exports[`Avoid unnescessary environment instruction 470`] = `7`; + +exports[`Avoid unnescessary environment instruction 471`] = `7`; + +exports[`Avoid unnescessary environment instruction 472`] = `7`; + +exports[`Avoid unnescessary environment instruction 473`] = `6`; + +exports[`Avoid unnescessary environment instruction 474`] = `6`; + +exports[`Avoid unnescessary environment instruction 475`] = `8`; + +exports[`Avoid unnescessary environment instruction 476`] = `7`; + +exports[`Avoid unnescessary environment instruction 477`] = `8`; + +exports[`Avoid unnescessary environment instruction 478`] = `7`; + +exports[`Avoid unnescessary environment instruction 479`] = `6`; + +exports[`Avoid unnescessary environment instruction 480`] = `6`; + +exports[`Avoid unnescessary environment instruction 481`] = `8`; + +exports[`Avoid unnescessary environment instruction 482`] = `8`; + +exports[`Avoid unnescessary environment instruction 483`] = `9`; + +exports[`Avoid unnescessary environment instruction 484`] = `10`; + +exports[`Avoid unnescessary environment instruction 485`] = `13`; + +exports[`Avoid unnescessary environment instruction 486`] = `12`; + +exports[`Avoid unnescessary environment instruction 487`] = `11`; + +exports[`Avoid unnescessary environment instruction 488`] = `10`; + +exports[`Avoid unnescessary environment instruction 489`] = `10`; + +exports[`Avoid unnescessary environment instruction 490`] = `11`; + +exports[`Avoid unnescessary environment instruction 491`] = `10`; + +exports[`Avoid unnescessary environment instruction 492`] = `9`; + +exports[`Avoid unnescessary environment instruction 493`] = `9`; + +exports[`Avoid unnescessary environment instruction 494`] = `9`; + +exports[`Avoid unnescessary environment instruction 495`] = `8`; + +exports[`Avoid unnescessary environment instruction 496`] = `8`; + +exports[`Avoid unnescessary environment instruction 497`] = `9`; + +exports[`Avoid unnescessary environment instruction 498`] = `9`; + +exports[`Avoid unnescessary environment instruction 499`] = `8`; + +exports[`Avoid unnescessary environment instruction 500`] = `8`; + +exports[`Avoid unnescessary environment instruction 501`] = `8`; + +exports[`Avoid unnescessary environment instruction 502`] = `7`; + +exports[`Avoid unnescessary environment instruction 503`] = `8`; + +exports[`Avoid unnescessary environment instruction 504`] = `7`; + +exports[`Avoid unnescessary environment instruction 505`] = `6`; + +exports[`Avoid unnescessary environment instruction 506`] = `6`; + +exports[`Avoid unnescessary environment instruction 507`] = `8`; + +exports[`Avoid unnescessary environment instruction 508`] = `8`; + +exports[`Avoid unnescessary environment instruction 509`] = `9`; + +exports[`Avoid unnescessary environment instruction 510`] = `10`; + +exports[`Avoid unnescessary environment instruction 511`] = `13`; + +exports[`Avoid unnescessary environment instruction 512`] = `12`; + +exports[`Avoid unnescessary environment instruction 513`] = `11`; + +exports[`Avoid unnescessary environment instruction 514`] = `10`; + +exports[`Avoid unnescessary environment instruction 515`] = `10`; + +exports[`Avoid unnescessary environment instruction 516`] = `11`; + +exports[`Avoid unnescessary environment instruction 517`] = `10`; + +exports[`Avoid unnescessary environment instruction 518`] = `9`; + +exports[`Avoid unnescessary environment instruction 519`] = `9`; + +exports[`Avoid unnescessary environment instruction 520`] = `9`; + +exports[`Avoid unnescessary environment instruction 521`] = `8`; + +exports[`Avoid unnescessary environment instruction 522`] = `8`; + +exports[`Avoid unnescessary environment instruction 523`] = `9`; + +exports[`Avoid unnescessary environment instruction 524`] = `9`; + +exports[`Avoid unnescessary environment instruction 525`] = `8`; + +exports[`Avoid unnescessary environment instruction 526`] = `8`; + +exports[`Avoid unnescessary environment instruction 527`] = `8`; + +exports[`Avoid unnescessary environment instruction 528`] = `7`; + +exports[`Avoid unnescessary environment instruction 529`] = `8`; + +exports[`Avoid unnescessary environment instruction 530`] = `7`; + +exports[`Avoid unnescessary environment instruction 531`] = `6`; + +exports[`Avoid unnescessary environment instruction 532`] = `6`; + +exports[`Avoid unnescessary environment instruction 533`] = `8`; + +exports[`Avoid unnescessary environment instruction 534`] = `8`; + +exports[`Avoid unnescessary environment instruction 535`] = `9`; + +exports[`Avoid unnescessary environment instruction 536`] = `10`; + +exports[`Avoid unnescessary environment instruction 537`] = `13`; + +exports[`Avoid unnescessary environment instruction 538`] = `12`; + +exports[`Avoid unnescessary environment instruction 539`] = `11`; + +exports[`Avoid unnescessary environment instruction 540`] = `10`; + +exports[`Avoid unnescessary environment instruction 541`] = `10`; + +exports[`Avoid unnescessary environment instruction 542`] = `11`; + +exports[`Avoid unnescessary environment instruction 543`] = `10`; + +exports[`Avoid unnescessary environment instruction 544`] = `9`; + +exports[`Avoid unnescessary environment instruction 545`] = `9`; + +exports[`Avoid unnescessary environment instruction 546`] = `9`; + +exports[`Avoid unnescessary environment instruction 547`] = `8`; + +exports[`Avoid unnescessary environment instruction 548`] = `8`; + +exports[`Avoid unnescessary environment instruction 549`] = `9`; + +exports[`Avoid unnescessary environment instruction 550`] = `9`; + +exports[`Avoid unnescessary environment instruction 551`] = `8`; + +exports[`Avoid unnescessary environment instruction 552`] = `8`; + +exports[`Avoid unnescessary environment instruction 553`] = `8`; + +exports[`Avoid unnescessary environment instruction 554`] = `7`; + +exports[`Avoid unnescessary environment instruction 555`] = `8`; + +exports[`Avoid unnescessary environment instruction 556`] = `7`; + +exports[`Avoid unnescessary environment instruction 557`] = `6`; + +exports[`Avoid unnescessary environment instruction 558`] = `6`; + +exports[`Avoid unnescessary environment instruction 559`] = `5`; + +exports[`Avoid unnescessary environment instruction 560`] = `5`; + +exports[`Avoid unnescessary environment instruction 561`] = `6`; + +exports[`Avoid unnescessary environment instruction 562`] = `6`; + +exports[`Avoid unnescessary environment instruction 563`] = `7`; + +exports[`Avoid unnescessary environment instruction 564`] = `7`; + +exports[`Avoid unnescessary environment instruction 565`] = `6`; + +exports[`Avoid unnescessary environment instruction 566`] = `6`; + +exports[`Avoid unnescessary environment instruction 567`] = `6`; + +exports[`Avoid unnescessary environment instruction 568`] = `5`; + +exports[`Avoid unnescessary environment instruction 569`] = `5`; + +exports[`Avoid unnescessary environment instruction 570`] = `5`; + +exports[`Avoid unnescessary environment instruction 571`] = `4`; + +exports[`Avoid unnescessary environment instruction 572`] = `4`; + +exports[`Avoid unnescessary environment instruction 573`] = `5`; + +exports[`Avoid unnescessary environment instruction 574`] = `5`; + +exports[`Avoid unnescessary environment instruction 575`] = `4`; + +exports[`Avoid unnescessary environment instruction 576`] = `4`; + +exports[`Avoid unnescessary environment instruction 577`] = `4`; + +exports[`Avoid unnescessary environment instruction 578`] = `3`; + +exports[`Avoid unnescessary environment instruction 579`] = `3`; + +exports[`Avoid unnescessary environment instruction 580`] = `3`; + +exports[`Avoid unnescessary environment instruction 581`] = `2`; + +exports[`Avoid unnescessary environment instruction 582`] = `2`; + +exports[`Avoid unnescessary environment instruction 583`] = `2`; + +exports[`Avoid unnescessary environment instruction 584`] = `5`; + +exports[`Avoid unnescessary environment instruction 585`] = `5`; + +exports[`Avoid unnescessary environment instruction 586`] = `5`; + +exports[`Avoid unnescessary environment instruction 587`] = `6`; + +exports[`Avoid unnescessary environment instruction 588`] = `7`; + +exports[`Avoid unnescessary environment instruction 589`] = `6`; + +exports[`Avoid unnescessary environment instruction 590`] = `5`; + +exports[`Avoid unnescessary environment instruction 591`] = `5`; + +exports[`Avoid unnescessary environment instruction 592`] = `5`; + +exports[`Avoid unnescessary environment instruction 593`] = `6`; + +exports[`Avoid unnescessary environment instruction 594`] = `7`; + +exports[`Avoid unnescessary environment instruction 595`] = `6`; + +exports[`Avoid unnescessary environment instruction 596`] = `5`; + +exports[`Avoid unnescessary environment instruction 597`] = `5`; + +exports[`Avoid unnescessary environment instruction 598`] = `5`; + +exports[`Avoid unnescessary environment instruction 599`] = `7`; + +exports[`Avoid unnescessary environment instruction 600`] = `7`; + +exports[`Avoid unnescessary environment instruction 601`] = `7`; + +exports[`Avoid unnescessary environment instruction 602`] = `6`; + +exports[`Avoid unnescessary environment instruction 603`] = `6`; + +exports[`Avoid unnescessary environment instruction 604`] = `8`; + +exports[`Avoid unnescessary environment instruction 605`] = `7`; + +exports[`Avoid unnescessary environment instruction 606`] = `8`; + +exports[`Avoid unnescessary environment instruction 607`] = `7`; + +exports[`Avoid unnescessary environment instruction 608`] = `6`; + +exports[`Avoid unnescessary environment instruction 609`] = `6`; + +exports[`Avoid unnescessary environment instruction 610`] = `8`; + +exports[`Avoid unnescessary environment instruction 611`] = `8`; + +exports[`Avoid unnescessary environment instruction 612`] = `9`; + +exports[`Avoid unnescessary environment instruction 613`] = `10`; + +exports[`Avoid unnescessary environment instruction 614`] = `13`; + +exports[`Avoid unnescessary environment instruction 615`] = `12`; + +exports[`Avoid unnescessary environment instruction 616`] = `11`; + +exports[`Avoid unnescessary environment instruction 617`] = `10`; + +exports[`Avoid unnescessary environment instruction 618`] = `10`; + +exports[`Avoid unnescessary environment instruction 619`] = `11`; + +exports[`Avoid unnescessary environment instruction 620`] = `10`; + +exports[`Avoid unnescessary environment instruction 621`] = `9`; + +exports[`Avoid unnescessary environment instruction 622`] = `9`; + +exports[`Avoid unnescessary environment instruction 623`] = `9`; + +exports[`Avoid unnescessary environment instruction 624`] = `8`; + +exports[`Avoid unnescessary environment instruction 625`] = `8`; + +exports[`Avoid unnescessary environment instruction 626`] = `9`; + +exports[`Avoid unnescessary environment instruction 627`] = `9`; + +exports[`Avoid unnescessary environment instruction 628`] = `8`; + +exports[`Avoid unnescessary environment instruction 629`] = `8`; + +exports[`Avoid unnescessary environment instruction 630`] = `8`; + +exports[`Avoid unnescessary environment instruction 631`] = `7`; + +exports[`Avoid unnescessary environment instruction 632`] = `8`; + +exports[`Avoid unnescessary environment instruction 633`] = `7`; + +exports[`Avoid unnescessary environment instruction 634`] = `6`; + +exports[`Avoid unnescessary environment instruction 635`] = `6`; + +exports[`Avoid unnescessary environment instruction 636`] = `8`; + +exports[`Avoid unnescessary environment instruction 637`] = `8`; + +exports[`Avoid unnescessary environment instruction 638`] = `9`; + +exports[`Avoid unnescessary environment instruction 639`] = `10`; + +exports[`Avoid unnescessary environment instruction 640`] = `13`; + +exports[`Avoid unnescessary environment instruction 641`] = `12`; + +exports[`Avoid unnescessary environment instruction 642`] = `11`; + +exports[`Avoid unnescessary environment instruction 643`] = `10`; + +exports[`Avoid unnescessary environment instruction 644`] = `10`; + +exports[`Avoid unnescessary environment instruction 645`] = `11`; + +exports[`Avoid unnescessary environment instruction 646`] = `10`; + +exports[`Avoid unnescessary environment instruction 647`] = `9`; + +exports[`Avoid unnescessary environment instruction 648`] = `9`; + +exports[`Avoid unnescessary environment instruction 649`] = `9`; + +exports[`Avoid unnescessary environment instruction 650`] = `8`; + +exports[`Avoid unnescessary environment instruction 651`] = `8`; + +exports[`Avoid unnescessary environment instruction 652`] = `9`; + +exports[`Avoid unnescessary environment instruction 653`] = `9`; + +exports[`Avoid unnescessary environment instruction 654`] = `8`; + +exports[`Avoid unnescessary environment instruction 655`] = `8`; + +exports[`Avoid unnescessary environment instruction 656`] = `8`; + +exports[`Avoid unnescessary environment instruction 657`] = `7`; + +exports[`Avoid unnescessary environment instruction 658`] = `8`; + +exports[`Avoid unnescessary environment instruction 659`] = `7`; + +exports[`Avoid unnescessary environment instruction 660`] = `6`; + +exports[`Avoid unnescessary environment instruction 661`] = `6`; + +exports[`Avoid unnescessary environment instruction 662`] = `8`; + +exports[`Avoid unnescessary environment instruction 663`] = `8`; + +exports[`Avoid unnescessary environment instruction 664`] = `9`; + +exports[`Avoid unnescessary environment instruction 665`] = `10`; + +exports[`Avoid unnescessary environment instruction 666`] = `13`; + +exports[`Avoid unnescessary environment instruction 667`] = `12`; + +exports[`Avoid unnescessary environment instruction 668`] = `11`; + +exports[`Avoid unnescessary environment instruction 669`] = `10`; + +exports[`Avoid unnescessary environment instruction 670`] = `10`; + +exports[`Avoid unnescessary environment instruction 671`] = `11`; + +exports[`Avoid unnescessary environment instruction 672`] = `10`; + +exports[`Avoid unnescessary environment instruction 673`] = `9`; + +exports[`Avoid unnescessary environment instruction 674`] = `9`; + +exports[`Avoid unnescessary environment instruction 675`] = `9`; + +exports[`Avoid unnescessary environment instruction 676`] = `8`; + +exports[`Avoid unnescessary environment instruction 677`] = `8`; + +exports[`Avoid unnescessary environment instruction 678`] = `9`; + +exports[`Avoid unnescessary environment instruction 679`] = `9`; + +exports[`Avoid unnescessary environment instruction 680`] = `8`; + +exports[`Avoid unnescessary environment instruction 681`] = `8`; + +exports[`Avoid unnescessary environment instruction 682`] = `8`; + +exports[`Avoid unnescessary environment instruction 683`] = `7`; + +exports[`Avoid unnescessary environment instruction 684`] = `8`; + +exports[`Avoid unnescessary environment instruction 685`] = `7`; + +exports[`Avoid unnescessary environment instruction 686`] = `6`; + +exports[`Avoid unnescessary environment instruction 687`] = `6`; + +exports[`Avoid unnescessary environment instruction 688`] = `8`; + +exports[`Avoid unnescessary environment instruction 689`] = `8`; + +exports[`Avoid unnescessary environment instruction 690`] = `9`; + +exports[`Avoid unnescessary environment instruction 691`] = `10`; + +exports[`Avoid unnescessary environment instruction 692`] = `13`; + +exports[`Avoid unnescessary environment instruction 693`] = `12`; + +exports[`Avoid unnescessary environment instruction 694`] = `11`; + +exports[`Avoid unnescessary environment instruction 695`] = `10`; + +exports[`Avoid unnescessary environment instruction 696`] = `10`; + +exports[`Avoid unnescessary environment instruction 697`] = `11`; + +exports[`Avoid unnescessary environment instruction 698`] = `10`; + +exports[`Avoid unnescessary environment instruction 699`] = `9`; + +exports[`Avoid unnescessary environment instruction 700`] = `9`; + +exports[`Avoid unnescessary environment instruction 701`] = `9`; + +exports[`Avoid unnescessary environment instruction 702`] = `8`; + +exports[`Avoid unnescessary environment instruction 703`] = `8`; + +exports[`Avoid unnescessary environment instruction 704`] = `9`; + +exports[`Avoid unnescessary environment instruction 705`] = `9`; + +exports[`Avoid unnescessary environment instruction 706`] = `8`; + +exports[`Avoid unnescessary environment instruction 707`] = `8`; + +exports[`Avoid unnescessary environment instruction 708`] = `8`; + +exports[`Avoid unnescessary environment instruction 709`] = `7`; + +exports[`Avoid unnescessary environment instruction 710`] = `8`; + +exports[`Avoid unnescessary environment instruction 711`] = `7`; + +exports[`Avoid unnescessary environment instruction 712`] = `6`; + +exports[`Avoid unnescessary environment instruction 713`] = `6`; + +exports[`Avoid unnescessary environment instruction 714`] = `5`; + +exports[`Avoid unnescessary environment instruction 715`] = `5`; + +exports[`Avoid unnescessary environment instruction 716`] = `6`; + +exports[`Avoid unnescessary environment instruction 717`] = `6`; + +exports[`Avoid unnescessary environment instruction 718`] = `7`; + +exports[`Avoid unnescessary environment instruction 719`] = `7`; + +exports[`Avoid unnescessary environment instruction 720`] = `6`; + +exports[`Avoid unnescessary environment instruction 721`] = `6`; + +exports[`Avoid unnescessary environment instruction 722`] = `6`; + +exports[`Avoid unnescessary environment instruction 723`] = `5`; + +exports[`Avoid unnescessary environment instruction 724`] = `5`; + +exports[`Avoid unnescessary environment instruction 725`] = `5`; + +exports[`Avoid unnescessary environment instruction 726`] = `4`; + +exports[`Avoid unnescessary environment instruction 727`] = `4`; + +exports[`Avoid unnescessary environment instruction 728`] = `5`; + +exports[`Avoid unnescessary environment instruction 729`] = `5`; + +exports[`Avoid unnescessary environment instruction 730`] = `4`; + +exports[`Avoid unnescessary environment instruction 731`] = `4`; + +exports[`Avoid unnescessary environment instruction 732`] = `4`; + +exports[`Avoid unnescessary environment instruction 733`] = `3`; + +exports[`Avoid unnescessary environment instruction 734`] = `3`; + +exports[`Avoid unnescessary environment instruction 735`] = `3`; + +exports[`Avoid unnescessary environment instruction 736`] = `2`; + +exports[`Avoid unnescessary environment instruction 737`] = `2`; + +exports[`Avoid unnescessary environment instruction 738`] = `2`; + +exports[`Avoid unnescessary environment instruction 739`] = `5`; + +exports[`Avoid unnescessary environment instruction 740`] = `5`; + +exports[`Avoid unnescessary environment instruction 741`] = `5`; + +exports[`Avoid unnescessary environment instruction 742`] = `6`; + +exports[`Avoid unnescessary environment instruction 743`] = `7`; + +exports[`Avoid unnescessary environment instruction 744`] = `6`; + +exports[`Avoid unnescessary environment instruction 745`] = `5`; + +exports[`Avoid unnescessary environment instruction 746`] = `5`; + +exports[`Avoid unnescessary environment instruction 747`] = `5`; + +exports[`Avoid unnescessary environment instruction 748`] = `6`; + +exports[`Avoid unnescessary environment instruction 749`] = `7`; + +exports[`Avoid unnescessary environment instruction 750`] = `6`; + +exports[`Avoid unnescessary environment instruction 751`] = `5`; + +exports[`Avoid unnescessary environment instruction 752`] = `5`; + +exports[`Avoid unnescessary environment instruction 753`] = `5`; + +exports[`Avoid unnescessary environment instruction 754`] = `7`; + +exports[`Avoid unnescessary environment instruction 755`] = `7`; + +exports[`Avoid unnescessary environment instruction 756`] = `7`; + +exports[`Avoid unnescessary environment instruction 757`] = `6`; + +exports[`Avoid unnescessary environment instruction 758`] = `6`; + +exports[`Avoid unnescessary environment instruction 759`] = `8`; + +exports[`Avoid unnescessary environment instruction 760`] = `7`; + +exports[`Avoid unnescessary environment instruction 761`] = `8`; + +exports[`Avoid unnescessary environment instruction 762`] = `7`; + +exports[`Avoid unnescessary environment instruction 763`] = `6`; + +exports[`Avoid unnescessary environment instruction 764`] = `6`; + +exports[`Avoid unnescessary environment instruction 765`] = `8`; + +exports[`Avoid unnescessary environment instruction 766`] = `8`; + +exports[`Avoid unnescessary environment instruction 767`] = `9`; + +exports[`Avoid unnescessary environment instruction 768`] = `10`; + +exports[`Avoid unnescessary environment instruction 769`] = `13`; + +exports[`Avoid unnescessary environment instruction 770`] = `12`; + +exports[`Avoid unnescessary environment instruction 771`] = `11`; + +exports[`Avoid unnescessary environment instruction 772`] = `10`; + +exports[`Avoid unnescessary environment instruction 773`] = `10`; + +exports[`Avoid unnescessary environment instruction 774`] = `11`; + +exports[`Avoid unnescessary environment instruction 775`] = `10`; + +exports[`Avoid unnescessary environment instruction 776`] = `9`; + +exports[`Avoid unnescessary environment instruction 777`] = `9`; + +exports[`Avoid unnescessary environment instruction 778`] = `9`; + +exports[`Avoid unnescessary environment instruction 779`] = `8`; + +exports[`Avoid unnescessary environment instruction 780`] = `8`; + +exports[`Avoid unnescessary environment instruction 781`] = `9`; + +exports[`Avoid unnescessary environment instruction 782`] = `9`; + +exports[`Avoid unnescessary environment instruction 783`] = `8`; + +exports[`Avoid unnescessary environment instruction 784`] = `8`; + +exports[`Avoid unnescessary environment instruction 785`] = `8`; + +exports[`Avoid unnescessary environment instruction 786`] = `7`; + +exports[`Avoid unnescessary environment instruction 787`] = `8`; + +exports[`Avoid unnescessary environment instruction 788`] = `7`; + +exports[`Avoid unnescessary environment instruction 789`] = `6`; + +exports[`Avoid unnescessary environment instruction 790`] = `6`; + +exports[`Avoid unnescessary environment instruction 791`] = `8`; + +exports[`Avoid unnescessary environment instruction 792`] = `8`; + +exports[`Avoid unnescessary environment instruction 793`] = `9`; + +exports[`Avoid unnescessary environment instruction 794`] = `10`; + +exports[`Avoid unnescessary environment instruction 795`] = `13`; + +exports[`Avoid unnescessary environment instruction 796`] = `12`; + +exports[`Avoid unnescessary environment instruction 797`] = `11`; + +exports[`Avoid unnescessary environment instruction 798`] = `10`; + +exports[`Avoid unnescessary environment instruction 799`] = `10`; + +exports[`Avoid unnescessary environment instruction 800`] = `11`; + +exports[`Avoid unnescessary environment instruction 801`] = `10`; + +exports[`Avoid unnescessary environment instruction 802`] = `9`; + +exports[`Avoid unnescessary environment instruction 803`] = `9`; + +exports[`Avoid unnescessary environment instruction 804`] = `9`; + +exports[`Avoid unnescessary environment instruction 805`] = `8`; + +exports[`Avoid unnescessary environment instruction 806`] = `8`; + +exports[`Avoid unnescessary environment instruction 807`] = `9`; + +exports[`Avoid unnescessary environment instruction 808`] = `9`; + +exports[`Avoid unnescessary environment instruction 809`] = `8`; + +exports[`Avoid unnescessary environment instruction 810`] = `8`; + +exports[`Avoid unnescessary environment instruction 811`] = `8`; + +exports[`Avoid unnescessary environment instruction 812`] = `7`; + +exports[`Avoid unnescessary environment instruction 813`] = `8`; + +exports[`Avoid unnescessary environment instruction 814`] = `7`; + +exports[`Avoid unnescessary environment instruction 815`] = `6`; + +exports[`Avoid unnescessary environment instruction 816`] = `6`; + +exports[`Avoid unnescessary environment instruction 817`] = `8`; + +exports[`Avoid unnescessary environment instruction 818`] = `8`; + +exports[`Avoid unnescessary environment instruction 819`] = `9`; + +exports[`Avoid unnescessary environment instruction 820`] = `10`; + +exports[`Avoid unnescessary environment instruction 821`] = `13`; + +exports[`Avoid unnescessary environment instruction 822`] = `12`; + +exports[`Avoid unnescessary environment instruction 823`] = `11`; + +exports[`Avoid unnescessary environment instruction 824`] = `10`; + +exports[`Avoid unnescessary environment instruction 825`] = `10`; + +exports[`Avoid unnescessary environment instruction 826`] = `11`; + +exports[`Avoid unnescessary environment instruction 827`] = `10`; + +exports[`Avoid unnescessary environment instruction 828`] = `9`; + +exports[`Avoid unnescessary environment instruction 829`] = `9`; + +exports[`Avoid unnescessary environment instruction 830`] = `9`; + +exports[`Avoid unnescessary environment instruction 831`] = `8`; + +exports[`Avoid unnescessary environment instruction 832`] = `8`; + +exports[`Avoid unnescessary environment instruction 833`] = `9`; + +exports[`Avoid unnescessary environment instruction 834`] = `9`; + +exports[`Avoid unnescessary environment instruction 835`] = `8`; + +exports[`Avoid unnescessary environment instruction 836`] = `8`; + +exports[`Avoid unnescessary environment instruction 837`] = `8`; + +exports[`Avoid unnescessary environment instruction 838`] = `7`; + +exports[`Avoid unnescessary environment instruction 839`] = `8`; + +exports[`Avoid unnescessary environment instruction 840`] = `7`; + +exports[`Avoid unnescessary environment instruction 841`] = `6`; + +exports[`Avoid unnescessary environment instruction 842`] = `6`; + +exports[`Avoid unnescessary environment instruction 843`] = `8`; + +exports[`Avoid unnescessary environment instruction 844`] = `8`; + +exports[`Avoid unnescessary environment instruction 845`] = `9`; + +exports[`Avoid unnescessary environment instruction 846`] = `10`; + +exports[`Avoid unnescessary environment instruction 847`] = `13`; + +exports[`Avoid unnescessary environment instruction 848`] = `12`; + +exports[`Avoid unnescessary environment instruction 849`] = `11`; + +exports[`Avoid unnescessary environment instruction 850`] = `10`; + +exports[`Avoid unnescessary environment instruction 851`] = `10`; + +exports[`Avoid unnescessary environment instruction 852`] = `11`; + +exports[`Avoid unnescessary environment instruction 853`] = `10`; + +exports[`Avoid unnescessary environment instruction 854`] = `9`; + +exports[`Avoid unnescessary environment instruction 855`] = `9`; + +exports[`Avoid unnescessary environment instruction 856`] = `9`; + +exports[`Avoid unnescessary environment instruction 857`] = `8`; + +exports[`Avoid unnescessary environment instruction 858`] = `8`; + +exports[`Avoid unnescessary environment instruction 859`] = `9`; + +exports[`Avoid unnescessary environment instruction 860`] = `9`; + +exports[`Avoid unnescessary environment instruction 861`] = `8`; + +exports[`Avoid unnescessary environment instruction 862`] = `8`; + +exports[`Avoid unnescessary environment instruction 863`] = `8`; + +exports[`Avoid unnescessary environment instruction 864`] = `7`; + +exports[`Avoid unnescessary environment instruction 865`] = `8`; + +exports[`Avoid unnescessary environment instruction 866`] = `7`; + +exports[`Avoid unnescessary environment instruction 867`] = `6`; + +exports[`Avoid unnescessary environment instruction 868`] = `6`; + +exports[`Avoid unnescessary environment instruction 869`] = `8`; + +exports[`Avoid unnescessary environment instruction 870`] = `8`; + +exports[`Avoid unnescessary environment instruction 871`] = `9`; + +exports[`Avoid unnescessary environment instruction 872`] = `10`; + +exports[`Avoid unnescessary environment instruction 873`] = `13`; + +exports[`Avoid unnescessary environment instruction 874`] = `12`; + +exports[`Avoid unnescessary environment instruction 875`] = `11`; + +exports[`Avoid unnescessary environment instruction 876`] = `10`; + +exports[`Avoid unnescessary environment instruction 877`] = `10`; + +exports[`Avoid unnescessary environment instruction 878`] = `11`; + +exports[`Avoid unnescessary environment instruction 879`] = `10`; + +exports[`Avoid unnescessary environment instruction 880`] = `9`; + +exports[`Avoid unnescessary environment instruction 881`] = `9`; + +exports[`Avoid unnescessary environment instruction 882`] = `9`; + +exports[`Avoid unnescessary environment instruction 883`] = `8`; + +exports[`Avoid unnescessary environment instruction 884`] = `8`; + +exports[`Avoid unnescessary environment instruction 885`] = `9`; + +exports[`Avoid unnescessary environment instruction 886`] = `9`; + +exports[`Avoid unnescessary environment instruction 887`] = `8`; + +exports[`Avoid unnescessary environment instruction 888`] = `8`; + +exports[`Avoid unnescessary environment instruction 889`] = `8`; + +exports[`Avoid unnescessary environment instruction 890`] = `7`; + +exports[`Avoid unnescessary environment instruction 891`] = `8`; + +exports[`Avoid unnescessary environment instruction 892`] = `7`; + +exports[`Avoid unnescessary environment instruction 893`] = `6`; + +exports[`Avoid unnescessary environment instruction 894`] = `6`; + +exports[`Avoid unnescessary environment instruction 895`] = `5`; + +exports[`Avoid unnescessary environment instruction 896`] = `5`; + +exports[`Avoid unnescessary environment instruction 897`] = `6`; + +exports[`Avoid unnescessary environment instruction 898`] = `6`; + +exports[`Avoid unnescessary environment instruction 899`] = `7`; + +exports[`Avoid unnescessary environment instruction 900`] = `7`; + +exports[`Avoid unnescessary environment instruction 901`] = `6`; + +exports[`Avoid unnescessary environment instruction 902`] = `6`; + +exports[`Avoid unnescessary environment instruction 903`] = `6`; + +exports[`Avoid unnescessary environment instruction 904`] = `5`; + +exports[`Avoid unnescessary environment instruction 905`] = `5`; + +exports[`Avoid unnescessary environment instruction 906`] = `5`; + +exports[`Avoid unnescessary environment instruction 907`] = `4`; + +exports[`Avoid unnescessary environment instruction 908`] = `4`; + +exports[`Avoid unnescessary environment instruction 909`] = `5`; + +exports[`Avoid unnescessary environment instruction 910`] = `5`; + +exports[`Avoid unnescessary environment instruction 911`] = `4`; + +exports[`Avoid unnescessary environment instruction 912`] = `4`; + +exports[`Avoid unnescessary environment instruction 913`] = `4`; + +exports[`Avoid unnescessary environment instruction 914`] = `3`; + +exports[`Avoid unnescessary environment instruction 915`] = `3`; + +exports[`Avoid unnescessary environment instruction 916`] = `3`; + +exports[`Avoid unnescessary environment instruction 917`] = `2`; + +exports[`Avoid unnescessary environment instruction 918`] = `2`; + +exports[`Avoid unnescessary environment instruction 919`] = `2`; + +exports[`Avoid unnescessary environment instruction 920`] = `5`; + +exports[`Avoid unnescessary environment instruction 921`] = `5`; + +exports[`Avoid unnescessary environment instruction 922`] = `5`; + +exports[`Avoid unnescessary environment instruction 923`] = `6`; + +exports[`Avoid unnescessary environment instruction 924`] = `7`; + +exports[`Avoid unnescessary environment instruction 925`] = `6`; + +exports[`Avoid unnescessary environment instruction 926`] = `5`; + +exports[`Avoid unnescessary environment instruction 927`] = `5`; + +exports[`Avoid unnescessary environment instruction 928`] = `5`; + +exports[`Avoid unnescessary environment instruction 929`] = `6`; + +exports[`Avoid unnescessary environment instruction 930`] = `7`; + +exports[`Avoid unnescessary environment instruction 931`] = `6`; + +exports[`Avoid unnescessary environment instruction 932`] = `5`; + +exports[`Avoid unnescessary environment instruction 933`] = `5`; + +exports[`Avoid unnescessary environment instruction 934`] = `5`; + +exports[`Avoid unnescessary environment instruction 935`] = `7`; + +exports[`Avoid unnescessary environment instruction 936`] = `7`; + +exports[`Avoid unnescessary environment instruction 937`] = `7`; + +exports[`Avoid unnescessary environment instruction 938`] = `6`; + +exports[`Avoid unnescessary environment instruction 939`] = `6`; + +exports[`Avoid unnescessary environment instruction 940`] = `8`; + +exports[`Avoid unnescessary environment instruction 941`] = `7`; + +exports[`Avoid unnescessary environment instruction 942`] = `8`; + +exports[`Avoid unnescessary environment instruction 943`] = `7`; + +exports[`Avoid unnescessary environment instruction 944`] = `6`; + +exports[`Avoid unnescessary environment instruction 945`] = `6`; + +exports[`Avoid unnescessary environment instruction 946`] = `8`; + +exports[`Avoid unnescessary environment instruction 947`] = `8`; + +exports[`Avoid unnescessary environment instruction 948`] = `9`; + +exports[`Avoid unnescessary environment instruction 949`] = `10`; + +exports[`Avoid unnescessary environment instruction 950`] = `13`; + +exports[`Avoid unnescessary environment instruction 951`] = `12`; + +exports[`Avoid unnescessary environment instruction 952`] = `11`; + +exports[`Avoid unnescessary environment instruction 953`] = `10`; + +exports[`Avoid unnescessary environment instruction 954`] = `10`; + +exports[`Avoid unnescessary environment instruction 955`] = `11`; + +exports[`Avoid unnescessary environment instruction 956`] = `10`; + +exports[`Avoid unnescessary environment instruction 957`] = `9`; + +exports[`Avoid unnescessary environment instruction 958`] = `9`; + +exports[`Avoid unnescessary environment instruction 959`] = `9`; + +exports[`Avoid unnescessary environment instruction 960`] = `8`; + +exports[`Avoid unnescessary environment instruction 961`] = `8`; + +exports[`Avoid unnescessary environment instruction 962`] = `9`; + +exports[`Avoid unnescessary environment instruction 963`] = `9`; + +exports[`Avoid unnescessary environment instruction 964`] = `8`; + +exports[`Avoid unnescessary environment instruction 965`] = `8`; + +exports[`Avoid unnescessary environment instruction 966`] = `8`; + +exports[`Avoid unnescessary environment instruction 967`] = `7`; + +exports[`Avoid unnescessary environment instruction 968`] = `8`; + +exports[`Avoid unnescessary environment instruction 969`] = `7`; + +exports[`Avoid unnescessary environment instruction 970`] = `6`; + +exports[`Avoid unnescessary environment instruction 971`] = `6`; + +exports[`Avoid unnescessary environment instruction 972`] = `8`; + +exports[`Avoid unnescessary environment instruction 973`] = `8`; + +exports[`Avoid unnescessary environment instruction 974`] = `9`; + +exports[`Avoid unnescessary environment instruction 975`] = `10`; + +exports[`Avoid unnescessary environment instruction 976`] = `13`; + +exports[`Avoid unnescessary environment instruction 977`] = `12`; + +exports[`Avoid unnescessary environment instruction 978`] = `11`; + +exports[`Avoid unnescessary environment instruction 979`] = `10`; + +exports[`Avoid unnescessary environment instruction 980`] = `10`; + +exports[`Avoid unnescessary environment instruction 981`] = `11`; + +exports[`Avoid unnescessary environment instruction 982`] = `10`; + +exports[`Avoid unnescessary environment instruction 983`] = `9`; + +exports[`Avoid unnescessary environment instruction 984`] = `9`; + +exports[`Avoid unnescessary environment instruction 985`] = `9`; + +exports[`Avoid unnescessary environment instruction 986`] = `8`; + +exports[`Avoid unnescessary environment instruction 987`] = `8`; + +exports[`Avoid unnescessary environment instruction 988`] = `9`; + +exports[`Avoid unnescessary environment instruction 989`] = `9`; + +exports[`Avoid unnescessary environment instruction 990`] = `8`; + +exports[`Avoid unnescessary environment instruction 991`] = `8`; + +exports[`Avoid unnescessary environment instruction 992`] = `8`; + +exports[`Avoid unnescessary environment instruction 993`] = `7`; + +exports[`Avoid unnescessary environment instruction 994`] = `8`; + +exports[`Avoid unnescessary environment instruction 995`] = `7`; + +exports[`Avoid unnescessary environment instruction 996`] = `6`; + +exports[`Avoid unnescessary environment instruction 997`] = `6`; + +exports[`Avoid unnescessary environment instruction 998`] = `8`; + +exports[`Avoid unnescessary environment instruction 999`] = `8`; + +exports[`Avoid unnescessary environment instruction 1000`] = `9`; + +exports[`Avoid unnescessary environment instruction 1001`] = `10`; + +exports[`Avoid unnescessary environment instruction 1002`] = `13`; + +exports[`Avoid unnescessary environment instruction 1003`] = `12`; + +exports[`Avoid unnescessary environment instruction 1004`] = `11`; + +exports[`Avoid unnescessary environment instruction 1005`] = `10`; + +exports[`Avoid unnescessary environment instruction 1006`] = `10`; + +exports[`Avoid unnescessary environment instruction 1007`] = `11`; + +exports[`Avoid unnescessary environment instruction 1008`] = `10`; + +exports[`Avoid unnescessary environment instruction 1009`] = `9`; + +exports[`Avoid unnescessary environment instruction 1010`] = `9`; + +exports[`Avoid unnescessary environment instruction 1011`] = `9`; + +exports[`Avoid unnescessary environment instruction 1012`] = `8`; + +exports[`Avoid unnescessary environment instruction 1013`] = `8`; + +exports[`Avoid unnescessary environment instruction 1014`] = `9`; + +exports[`Avoid unnescessary environment instruction 1015`] = `9`; + +exports[`Avoid unnescessary environment instruction 1016`] = `8`; + +exports[`Avoid unnescessary environment instruction 1017`] = `8`; + +exports[`Avoid unnescessary environment instruction 1018`] = `8`; + +exports[`Avoid unnescessary environment instruction 1019`] = `7`; + +exports[`Avoid unnescessary environment instruction 1020`] = `8`; + +exports[`Avoid unnescessary environment instruction 1021`] = `7`; + +exports[`Avoid unnescessary environment instruction 1022`] = `6`; + +exports[`Avoid unnescessary environment instruction 1023`] = `6`; + +exports[`Avoid unnescessary environment instruction 1024`] = `8`; + +exports[`Avoid unnescessary environment instruction 1025`] = `8`; + +exports[`Avoid unnescessary environment instruction 1026`] = `9`; + +exports[`Avoid unnescessary environment instruction 1027`] = `10`; + +exports[`Avoid unnescessary environment instruction 1028`] = `13`; + +exports[`Avoid unnescessary environment instruction 1029`] = `12`; + +exports[`Avoid unnescessary environment instruction 1030`] = `11`; + +exports[`Avoid unnescessary environment instruction 1031`] = `10`; + +exports[`Avoid unnescessary environment instruction 1032`] = `10`; + +exports[`Avoid unnescessary environment instruction 1033`] = `11`; + +exports[`Avoid unnescessary environment instruction 1034`] = `10`; + +exports[`Avoid unnescessary environment instruction 1035`] = `9`; + +exports[`Avoid unnescessary environment instruction 1036`] = `9`; + +exports[`Avoid unnescessary environment instruction 1037`] = `9`; + +exports[`Avoid unnescessary environment instruction 1038`] = `8`; + +exports[`Avoid unnescessary environment instruction 1039`] = `8`; + +exports[`Avoid unnescessary environment instruction 1040`] = `9`; + +exports[`Avoid unnescessary environment instruction 1041`] = `9`; + +exports[`Avoid unnescessary environment instruction 1042`] = `8`; + +exports[`Avoid unnescessary environment instruction 1043`] = `8`; + +exports[`Avoid unnescessary environment instruction 1044`] = `8`; + +exports[`Avoid unnescessary environment instruction 1045`] = `7`; + +exports[`Avoid unnescessary environment instruction 1046`] = `8`; + +exports[`Avoid unnescessary environment instruction 1047`] = `7`; + +exports[`Avoid unnescessary environment instruction 1048`] = `6`; + +exports[`Avoid unnescessary environment instruction 1049`] = `6`; + +exports[`Avoid unnescessary environment instruction 1050`] = `8`; + +exports[`Avoid unnescessary environment instruction 1051`] = `8`; + +exports[`Avoid unnescessary environment instruction 1052`] = `9`; + +exports[`Avoid unnescessary environment instruction 1053`] = `10`; + +exports[`Avoid unnescessary environment instruction 1054`] = `13`; + +exports[`Avoid unnescessary environment instruction 1055`] = `12`; + +exports[`Avoid unnescessary environment instruction 1056`] = `11`; + +exports[`Avoid unnescessary environment instruction 1057`] = `10`; + +exports[`Avoid unnescessary environment instruction 1058`] = `10`; + +exports[`Avoid unnescessary environment instruction 1059`] = `11`; + +exports[`Avoid unnescessary environment instruction 1060`] = `10`; + +exports[`Avoid unnescessary environment instruction 1061`] = `9`; + +exports[`Avoid unnescessary environment instruction 1062`] = `9`; + +exports[`Avoid unnescessary environment instruction 1063`] = `9`; + +exports[`Avoid unnescessary environment instruction 1064`] = `8`; + +exports[`Avoid unnescessary environment instruction 1065`] = `8`; + +exports[`Avoid unnescessary environment instruction 1066`] = `9`; + +exports[`Avoid unnescessary environment instruction 1067`] = `9`; + +exports[`Avoid unnescessary environment instruction 1068`] = `8`; + +exports[`Avoid unnescessary environment instruction 1069`] = `8`; + +exports[`Avoid unnescessary environment instruction 1070`] = `8`; + +exports[`Avoid unnescessary environment instruction 1071`] = `7`; + +exports[`Avoid unnescessary environment instruction 1072`] = `8`; + +exports[`Avoid unnescessary environment instruction 1073`] = `7`; + +exports[`Avoid unnescessary environment instruction 1074`] = `6`; + +exports[`Avoid unnescessary environment instruction 1075`] = `6`; + +exports[`Avoid unnescessary environment instruction 1076`] = `8`; + +exports[`Avoid unnescessary environment instruction 1077`] = `8`; + +exports[`Avoid unnescessary environment instruction 1078`] = `9`; + +exports[`Avoid unnescessary environment instruction 1079`] = `10`; + +exports[`Avoid unnescessary environment instruction 1080`] = `13`; + +exports[`Avoid unnescessary environment instruction 1081`] = `12`; + +exports[`Avoid unnescessary environment instruction 1082`] = `11`; + +exports[`Avoid unnescessary environment instruction 1083`] = `10`; + +exports[`Avoid unnescessary environment instruction 1084`] = `10`; + +exports[`Avoid unnescessary environment instruction 1085`] = `11`; + +exports[`Avoid unnescessary environment instruction 1086`] = `10`; + +exports[`Avoid unnescessary environment instruction 1087`] = `9`; + +exports[`Avoid unnescessary environment instruction 1088`] = `9`; + +exports[`Avoid unnescessary environment instruction 1089`] = `9`; + +exports[`Avoid unnescessary environment instruction 1090`] = `8`; + +exports[`Avoid unnescessary environment instruction 1091`] = `8`; + +exports[`Avoid unnescessary environment instruction 1092`] = `9`; + +exports[`Avoid unnescessary environment instruction 1093`] = `9`; + +exports[`Avoid unnescessary environment instruction 1094`] = `8`; + +exports[`Avoid unnescessary environment instruction 1095`] = `8`; + +exports[`Avoid unnescessary environment instruction 1096`] = `8`; + +exports[`Avoid unnescessary environment instruction 1097`] = `7`; + +exports[`Avoid unnescessary environment instruction 1098`] = `8`; + +exports[`Avoid unnescessary environment instruction 1099`] = `7`; + +exports[`Avoid unnescessary environment instruction 1100`] = `6`; + +exports[`Avoid unnescessary environment instruction 1101`] = `6`; + +exports[`Avoid unnescessary environment instruction 1102`] = `5`; + +exports[`Avoid unnescessary environment instruction 1103`] = `5`; + +exports[`Avoid unnescessary environment instruction 1104`] = `6`; + +exports[`Avoid unnescessary environment instruction 1105`] = `6`; + +exports[`Avoid unnescessary environment instruction 1106`] = `7`; + +exports[`Avoid unnescessary environment instruction 1107`] = `7`; + +exports[`Avoid unnescessary environment instruction 1108`] = `6`; + +exports[`Avoid unnescessary environment instruction 1109`] = `6`; + +exports[`Avoid unnescessary environment instruction 1110`] = `6`; + +exports[`Avoid unnescessary environment instruction 1111`] = `5`; + +exports[`Avoid unnescessary environment instruction 1112`] = `5`; + +exports[`Avoid unnescessary environment instruction 1113`] = `5`; -exports[`Avoid unnescessary environment instruction 2 1`] = ` -Control { - "numEnvDependentItems": 0, - "storage": Array [ - Object { - "instrType": "BinaryOperation", - "isEnvDependent": false, - "srcNode": Node { - "end": 53, - "isEnvDependent": true, - "left": Node { - "end": 44, - "isEnvDependent": true, - "loc": SourceLocation { - "end": Position { - "column": 5, - "line": 4, - }, - "start": Position { - "column": 4, - "line": 4, - }, - }, - "name": "n", - "start": 43, - "type": "Identifier", - }, - "loc": SourceLocation { - "end": Position { - "column": 14, - "line": 4, - }, - "start": Position { - "column": 4, - "line": 4, - }, - }, - "operator": "*", - "right": Node { - "arguments": Array [ - Node { - "end": 52, - "isEnvDependent": true, - "left": Node { - "end": 50, - "isEnvDependent": true, - "loc": SourceLocation { - "end": Position { - "column": 11, - "line": 4, - }, - "start": Position { - "column": 10, - "line": 4, - }, - }, - "name": "n", - "start": 49, - "type": "Identifier", - }, - "loc": SourceLocation { - "end": Position { - "column": 13, - "line": 4, - }, - "start": Position { - "column": 10, - "line": 4, - }, - }, - "operator": "-", - "right": Node { - "end": 52, - "isEnvDependent": false, - "loc": SourceLocation { - "end": Position { - "column": 13, - "line": 4, - }, - "start": Position { - "column": 12, - "line": 4, - }, - }, - "raw": "1", - "start": 51, - "type": "Literal", - "value": 1, - }, - "start": 49, - "type": "BinaryExpression", - }, - ], - "callee": Node { - "end": 48, - "isEnvDependent": true, - "loc": SourceLocation { - "end": Position { - "column": 9, - "line": 4, - }, - "start": Position { - "column": 8, - "line": 4, - }, - }, - "name": "f", - "start": 47, - "type": "Identifier", - }, - "end": 53, - "isEnvDependent": true, - "loc": SourceLocation { - "end": Position { - "column": 14, - "line": 4, - }, - "start": Position { - "column": 8, - "line": 4, - }, - }, - "start": 47, - "type": "CallExpression", - }, - "start": 43, - "type": "BinaryExpression", - }, - "symbol": "*", - }, - Object { - "instrType": "BinaryOperation", - "isEnvDependent": false, - "srcNode": Node { - "end": 53, - "isEnvDependent": true, - "left": Node { - "end": 44, - "isEnvDependent": true, - "loc": SourceLocation { - "end": Position { - "column": 5, - "line": 4, - }, - "start": Position { - "column": 4, - "line": 4, - }, - }, - "name": "n", - "start": 43, - "type": "Identifier", - }, - "loc": SourceLocation { - "end": Position { - "column": 14, - "line": 4, - }, - "start": Position { - "column": 4, - "line": 4, - }, - }, - "operator": "*", - "right": Node { - "arguments": Array [ - Node { - "end": 52, - "isEnvDependent": true, - "left": Node { - "end": 50, - "isEnvDependent": true, - "loc": SourceLocation { - "end": Position { - "column": 11, - "line": 4, - }, - "start": Position { - "column": 10, - "line": 4, - }, - }, - "name": "n", - "start": 49, - "type": "Identifier", - }, - "loc": SourceLocation { - "end": Position { - "column": 13, - "line": 4, - }, - "start": Position { - "column": 10, - "line": 4, - }, - }, - "operator": "-", - "right": Node { - "end": 52, - "isEnvDependent": false, - "loc": SourceLocation { - "end": Position { - "column": 13, - "line": 4, - }, - "start": Position { - "column": 12, - "line": 4, - }, - }, - "raw": "1", - "start": 51, - "type": "Literal", - "value": 1, - }, - "start": 49, - "type": "BinaryExpression", - }, - ], - "callee": Node { - "end": 48, - "isEnvDependent": true, - "loc": SourceLocation { - "end": Position { - "column": 9, - "line": 4, - }, - "start": Position { - "column": 8, - "line": 4, - }, - }, - "name": "f", - "start": 47, - "type": "Identifier", - }, - "end": 53, - "isEnvDependent": true, - "loc": SourceLocation { - "end": Position { - "column": 14, - "line": 4, - }, - "start": Position { - "column": 8, - "line": 4, - }, - }, - "start": 47, - "type": "CallExpression", - }, - "start": 43, - "type": "BinaryExpression", - }, - "symbol": "*", - }, - Object { - "instrType": "BinaryOperation", - "isEnvDependent": false, - "srcNode": Node { - "end": 53, - "isEnvDependent": true, - "left": Node { - "end": 44, - "isEnvDependent": true, - "loc": SourceLocation { - "end": Position { - "column": 5, - "line": 4, - }, - "start": Position { - "column": 4, - "line": 4, - }, - }, - "name": "n", - "start": 43, - "type": "Identifier", - }, - "loc": SourceLocation { - "end": Position { - "column": 14, - "line": 4, - }, - "start": Position { - "column": 4, - "line": 4, - }, - }, - "operator": "*", - "right": Node { - "arguments": Array [ - Node { - "end": 52, - "isEnvDependent": true, - "left": Node { - "end": 50, - "isEnvDependent": true, - "loc": SourceLocation { - "end": Position { - "column": 11, - "line": 4, - }, - "start": Position { - "column": 10, - "line": 4, - }, - }, - "name": "n", - "start": 49, - "type": "Identifier", - }, - "loc": SourceLocation { - "end": Position { - "column": 13, - "line": 4, - }, - "start": Position { - "column": 10, - "line": 4, - }, - }, - "operator": "-", - "right": Node { - "end": 52, - "isEnvDependent": false, - "loc": SourceLocation { - "end": Position { - "column": 13, - "line": 4, - }, - "start": Position { - "column": 12, - "line": 4, - }, - }, - "raw": "1", - "start": 51, - "type": "Literal", - "value": 1, - }, - "start": 49, - "type": "BinaryExpression", - }, - ], - "callee": Node { - "end": 48, - "isEnvDependent": true, - "loc": SourceLocation { - "end": Position { - "column": 9, - "line": 4, - }, - "start": Position { - "column": 8, - "line": 4, - }, - }, - "name": "f", - "start": 47, - "type": "Identifier", - }, - "end": 53, - "isEnvDependent": true, - "loc": SourceLocation { - "end": Position { - "column": 14, - "line": 4, - }, - "start": Position { - "column": 8, - "line": 4, - }, - }, - "start": 47, - "type": "CallExpression", - }, - "start": 43, - "type": "BinaryExpression", - }, - "symbol": "*", - }, - ], -} -`; +exports[`Avoid unnescessary environment instruction 1114`] = `4`; -exports[`Avoid unnescessary environment instruction 3 1`] = ` -Control { - "numEnvDependentItems": 5, - "storage": Array [ - Node { - "end": 86, - "expression": Node { - "end": 85, - "isEnvDependent": true, - "left": Node { - "end": 81, - "loc": SourceLocation { - "end": Position { - "column": 1, - "line": 8, - }, - "start": Position { - "column": 0, - "line": 8, - }, - }, - "name": "a", - "start": 80, - "type": "Identifier", - }, - "loc": SourceLocation { - "end": Position { - "column": 5, - "line": 8, - }, - "start": Position { - "column": 0, - "line": 8, - }, - }, - "operator": "=", - "right": Node { - "end": 85, - "loc": SourceLocation { - "end": Position { - "column": 5, - "line": 8, - }, - "start": Position { - "column": 4, - "line": 8, - }, - }, - "raw": "2", - "start": 84, - "type": "Literal", - "value": 2, - }, - "start": 80, - "type": "AssignmentExpression", - }, - "isEnvDependent": true, - "loc": SourceLocation { - "end": Position { - "column": 6, - "line": 8, - }, - "start": Position { - "column": 0, - "line": 8, - }, - }, - "start": 80, - "type": "ExpressionStatement", - }, - Object { - "instrType": "Pop", - "isEnvDependent": false, - "srcNode": Node { - "end": 86, - "expression": Node { - "end": 85, - "isEnvDependent": true, - "left": Node { - "end": 81, - "loc": SourceLocation { - "end": Position { - "column": 1, - "line": 8, - }, - "start": Position { - "column": 0, - "line": 8, - }, - }, - "name": "a", - "start": 80, - "type": "Identifier", - }, - "loc": SourceLocation { - "end": Position { - "column": 5, - "line": 8, - }, - "start": Position { - "column": 0, - "line": 8, - }, - }, - "operator": "=", - "right": Node { - "end": 85, - "loc": SourceLocation { - "end": Position { - "column": 5, - "line": 8, - }, - "start": Position { - "column": 4, - "line": 8, - }, - }, - "raw": "2", - "start": 84, - "type": "Literal", - "value": 2, - }, - "start": 80, - "type": "AssignmentExpression", - }, - "isEnvDependent": true, - "loc": SourceLocation { - "end": Position { - "column": 6, - "line": 8, - }, - "start": Position { - "column": 0, - "line": 8, - }, - }, - "start": 80, - "type": "ExpressionStatement", - }, - }, - Object { - "env": Object { - "head": Object { - "a": 1, - "f": [Function], - }, - "heap": Heap { - "storage": Set { - [Function], - }, - }, - "id": "47", - "name": "programEnvironment", - "tail": Object { - "head": Object { - "$accumulate": [Function], - "$append": [Function], - "$build_list": [Function], - "$enum_list": [Function], - "$filter": [Function], - "$length": [Function], - "$list_to_string": [Function], - "$map": [Function], - "$remove": [Function], - "$remove_all": [Function], - "$reverse": [Function], - "__access_export__": [Function], - "__access_named_export__": [Function], - "accumulate": [Function], - "append": [Function], - "build_list": [Function], - "build_stream": [Function], - "enum_list": [Function], - "enum_stream": [Function], - "equal": [Function], - "eval_stream": [Function], - "filter": [Function], - "for_each": [Function], - "integers_from": [Function], - "is_stream": [Function], - "length": [Function], - "list_ref": [Function], - "list_to_stream": [Function], - "list_to_string": [Function], - "map": [Function], - "member": [Function], - "remove": [Function], - "remove_all": [Function], - "reverse": [Function], - "stream_append": [Function], - "stream_filter": [Function], - "stream_for_each": [Function], - "stream_length": [Function], - "stream_map": [Function], - "stream_member": [Function], - "stream_ref": [Function], - "stream_remove": [Function], - "stream_remove_all": [Function], - "stream_reverse": [Function], - "stream_tail": [Function], - "stream_to_list": [Function], - }, - "heap": Heap { - "storage": Set { - [Function], - [Function], - [Function], - [Function], - [Function], - [Function], - [Function], - [Function], - [Function], - [Function], - [Function], - [Function], - [Function], - [Function], - [Function], - [Function], - [Function], - [Function], - [Function], - [Function], - [Function], - [Function], - [Function], - [Function], - [Function], - [Function], - [Function], - [Function], - [Function], - [Function], - [Function], - [Function], - [Function], - [Function], - [Function], - [Function], - [Function], - [Function], - [Function], - [Function], - [Function], - [Function], - [Function], - [Function], - [Function], - [Function], - }, - }, - "id": "0", - "name": "prelude", - "tail": Object { - "head": Object { - "Infinity": Infinity, - "NaN": NaN, - "apply_in_underlying_javascript": [Function], - "arity": [Function], - "array_length": [Function], - "call_cc": [Function], - "char_at": [Function], - "display": [Function], - "display_list": [Function], - "draw_data": [Function], - "error": [Function], - "get_time": [Function], - "head": [Function], - "is_array": [Function], - "is_boolean": [Function], - "is_function": [Function], - "is_list": [Function], - "is_null": [Function], - "is_number": [Function], - "is_pair": [Function], - "is_string": [Function], - "is_undefined": [Function], - "list": [Function], - "math_E": 2.718281828459045, - "math_LN10": 2.302585092994046, - "math_LN2": 0.6931471805599453, - "math_LOG10E": 0.4342944819032518, - "math_LOG2E": 1.4426950408889634, - "math_PI": 3.141592653589793, - "math_SQRT1_2": 0.7071067811865476, - "math_SQRT2": 1.4142135623730951, - "math_abs": [Function], - "math_acos": [Function], - "math_acosh": [Function], - "math_asin": [Function], - "math_asinh": [Function], - "math_atan": [Function], - "math_atan2": [Function], - "math_atanh": [Function], - "math_cbrt": [Function], - "math_ceil": [Function], - "math_clz32": [Function], - "math_cos": [Function], - "math_cosh": [Function], - "math_exp": [Function], - "math_expm1": [Function], - "math_floor": [Function], - "math_fround": [Function], - "math_hypot": [Function], - "math_imul": [Function], - "math_log": [Function], - "math_log10": [Function], - "math_log1p": [Function], - "math_log2": [Function], - "math_max": [Function], - "math_min": [Function], - "math_pow": [Function], - "math_random": [Function], - "math_round": [Function], - "math_sign": [Function], - "math_sin": [Function], - "math_sinh": [Function], - "math_sqrt": [Function], - "math_tan": [Function], - "math_tanh": [Function], - "math_trunc": [Function], - "pair": [Function], - "parse": [Function], - "parse_int": [Function], - "prompt": [Function], - "raw_display": [Function], - "set_head": [Function], - "set_tail": [Function], - "stream": [Function], - "stringify": [Function], - "tail": [Function], - "tokenize": [Function], - "undefined": undefined, - }, - "heap": Heap { - "storage": null, - }, - "id": "-1", - "name": "global", - "tail": null, - }, - }, - }, - "instrType": "Environment", - "isEnvDependent": true, - "srcNode": Node { - "arguments": Array [ - Node { - "end": 77, - "isEnvDependent": false, - "loc": SourceLocation { - "end": Position { - "column": 3, - "line": 7, - }, - "start": Position { - "column": 2, - "line": 7, - }, - }, - "raw": "3", - "start": 76, - "type": "Literal", - "value": 3, - }, - ], - "callee": Node { - "end": 75, - "isEnvDependent": true, - "loc": SourceLocation { - "end": Position { - "column": 1, - "line": 7, - }, - "start": Position { - "column": 0, - "line": 7, - }, - }, - "name": "f", - "start": 74, - "type": "Identifier", - }, - "end": 78, - "isEnvDependent": true, - "loc": SourceLocation { - "end": Position { - "column": 4, - "line": 7, - }, - "start": Position { - "column": 0, - "line": 7, - }, - }, - "start": 74, - "type": "CallExpression", - }, - }, - Object { - "instrType": "BinaryOperation", - "isEnvDependent": false, - "srcNode": Node { - "end": 70, - "isEnvDependent": true, - "left": Node { - "end": 61, - "isEnvDependent": true, - "loc": SourceLocation { - "end": Position { - "column": 7, - "line": 5, - }, - "start": Position { - "column": 6, - "line": 5, - }, - }, - "name": "n", - "start": 60, - "type": "Identifier", - }, - "loc": SourceLocation { - "end": Position { - "column": 16, - "line": 5, - }, - "start": Position { - "column": 6, - "line": 5, - }, - }, - "operator": "*", - "right": Node { - "arguments": Array [ - Node { - "end": 69, - "isEnvDependent": true, - "left": Node { - "end": 67, - "isEnvDependent": true, - "loc": SourceLocation { - "end": Position { - "column": 13, - "line": 5, - }, - "start": Position { - "column": 12, - "line": 5, - }, - }, - "name": "n", - "start": 66, - "type": "Identifier", - }, - "loc": SourceLocation { - "end": Position { - "column": 15, - "line": 5, - }, - "start": Position { - "column": 12, - "line": 5, - }, - }, - "operator": "-", - "right": Node { - "end": 69, - "isEnvDependent": false, - "loc": SourceLocation { - "end": Position { - "column": 15, - "line": 5, - }, - "start": Position { - "column": 14, - "line": 5, - }, - }, - "raw": "1", - "start": 68, - "type": "Literal", - "value": 1, - }, - "start": 66, - "type": "BinaryExpression", - }, - ], - "callee": Node { - "end": 65, - "isEnvDependent": true, - "loc": SourceLocation { - "end": Position { - "column": 11, - "line": 5, - }, - "start": Position { - "column": 10, - "line": 5, - }, - }, - "name": "f", - "start": 64, - "type": "Identifier", - }, - "end": 70, - "isEnvDependent": true, - "loc": SourceLocation { - "end": Position { - "column": 16, - "line": 5, - }, - "start": Position { - "column": 10, - "line": 5, - }, - }, - "start": 64, - "type": "CallExpression", - }, - "start": 60, - "type": "BinaryExpression", - }, - "symbol": "*", - }, - Object { - "env": Object { - "callExpression": Object { - "arguments": Array [ - Object { - "loc": undefined, - "type": "Literal", - "value": 3, - }, - ], - "callee": Node { - "end": 75, - "isEnvDependent": true, - "loc": SourceLocation { - "end": Position { - "column": 1, - "line": 7, - }, - "start": Position { - "column": 0, - "line": 7, - }, - }, - "name": "f", - "start": 74, - "type": "Identifier", - }, - "end": 78, - "isEnvDependent": true, - "loc": SourceLocation { - "end": Position { - "column": 4, - "line": 7, - }, - "start": Position { - "column": 0, - "line": 7, - }, - }, - "start": 74, - "type": "CallExpression", - }, - "head": Object { - "n": 3, - }, - "heap": Heap { - "storage": null, - }, - "id": "49", - "name": "f", - "tail": Object { - "head": Object { - "a": 1, - "f": [Function], - }, - "heap": Heap { - "storage": Set { - [Function], - }, - }, - "id": "47", - "name": "programEnvironment", - "tail": Object { - "head": Object { - "$accumulate": [Function], - "$append": [Function], - "$build_list": [Function], - "$enum_list": [Function], - "$filter": [Function], - "$length": [Function], - "$list_to_string": [Function], - "$map": [Function], - "$remove": [Function], - "$remove_all": [Function], - "$reverse": [Function], - "__access_export__": [Function], - "__access_named_export__": [Function], - "accumulate": [Function], - "append": [Function], - "build_list": [Function], - "build_stream": [Function], - "enum_list": [Function], - "enum_stream": [Function], - "equal": [Function], - "eval_stream": [Function], - "filter": [Function], - "for_each": [Function], - "integers_from": [Function], - "is_stream": [Function], - "length": [Function], - "list_ref": [Function], - "list_to_stream": [Function], - "list_to_string": [Function], - "map": [Function], - "member": [Function], - "remove": [Function], - "remove_all": [Function], - "reverse": [Function], - "stream_append": [Function], - "stream_filter": [Function], - "stream_for_each": [Function], - "stream_length": [Function], - "stream_map": [Function], - "stream_member": [Function], - "stream_ref": [Function], - "stream_remove": [Function], - "stream_remove_all": [Function], - "stream_reverse": [Function], - "stream_tail": [Function], - "stream_to_list": [Function], - }, - "heap": Heap { - "storage": Set { - [Function], - [Function], - [Function], - [Function], - [Function], - [Function], - [Function], - [Function], - [Function], - [Function], - [Function], - [Function], - [Function], - [Function], - [Function], - [Function], - [Function], - [Function], - [Function], - [Function], - [Function], - [Function], - [Function], - [Function], - [Function], - [Function], - [Function], - [Function], - [Function], - [Function], - [Function], - [Function], - [Function], - [Function], - [Function], - [Function], - [Function], - [Function], - [Function], - [Function], - [Function], - [Function], - [Function], - [Function], - [Function], - [Function], - }, - }, - "id": "0", - "name": "prelude", - "tail": Object { - "head": Object { - "Infinity": Infinity, - "NaN": NaN, - "apply_in_underlying_javascript": [Function], - "arity": [Function], - "array_length": [Function], - "call_cc": [Function], - "char_at": [Function], - "display": [Function], - "display_list": [Function], - "draw_data": [Function], - "error": [Function], - "get_time": [Function], - "head": [Function], - "is_array": [Function], - "is_boolean": [Function], - "is_function": [Function], - "is_list": [Function], - "is_null": [Function], - "is_number": [Function], - "is_pair": [Function], - "is_string": [Function], - "is_undefined": [Function], - "list": [Function], - "math_E": 2.718281828459045, - "math_LN10": 2.302585092994046, - "math_LN2": 0.6931471805599453, - "math_LOG10E": 0.4342944819032518, - "math_LOG2E": 1.4426950408889634, - "math_PI": 3.141592653589793, - "math_SQRT1_2": 0.7071067811865476, - "math_SQRT2": 1.4142135623730951, - "math_abs": [Function], - "math_acos": [Function], - "math_acosh": [Function], - "math_asin": [Function], - "math_asinh": [Function], - "math_atan": [Function], - "math_atan2": [Function], - "math_atanh": [Function], - "math_cbrt": [Function], - "math_ceil": [Function], - "math_clz32": [Function], - "math_cos": [Function], - "math_cosh": [Function], - "math_exp": [Function], - "math_expm1": [Function], - "math_floor": [Function], - "math_fround": [Function], - "math_hypot": [Function], - "math_imul": [Function], - "math_log": [Function], - "math_log10": [Function], - "math_log1p": [Function], - "math_log2": [Function], - "math_max": [Function], - "math_min": [Function], - "math_pow": [Function], - "math_random": [Function], - "math_round": [Function], - "math_sign": [Function], - "math_sin": [Function], - "math_sinh": [Function], - "math_sqrt": [Function], - "math_tan": [Function], - "math_tanh": [Function], - "math_trunc": [Function], - "pair": [Function], - "parse": [Function], - "parse_int": [Function], - "prompt": [Function], - "raw_display": [Function], - "set_head": [Function], - "set_tail": [Function], - "stream": [Function], - "stringify": [Function], - "tail": [Function], - "tokenize": [Function], - "undefined": undefined, - }, - "heap": Heap { - "storage": null, - }, - "id": "-1", - "name": "global", - "tail": null, - }, - }, - }, - }, - "instrType": "Environment", - "isEnvDependent": true, - "srcNode": Node { - "arguments": Array [ - Node { - "end": 69, - "isEnvDependent": true, - "left": Node { - "end": 67, - "isEnvDependent": true, - "loc": SourceLocation { - "end": Position { - "column": 13, - "line": 5, - }, - "start": Position { - "column": 12, - "line": 5, - }, - }, - "name": "n", - "start": 66, - "type": "Identifier", - }, - "loc": SourceLocation { - "end": Position { - "column": 15, - "line": 5, - }, - "start": Position { - "column": 12, - "line": 5, - }, - }, - "operator": "-", - "right": Node { - "end": 69, - "isEnvDependent": false, - "loc": SourceLocation { - "end": Position { - "column": 15, - "line": 5, - }, - "start": Position { - "column": 14, - "line": 5, - }, - }, - "raw": "1", - "start": 68, - "type": "Literal", - "value": 1, - }, - "start": 66, - "type": "BinaryExpression", - }, - ], - "callee": Node { - "end": 65, - "isEnvDependent": true, - "loc": SourceLocation { - "end": Position { - "column": 11, - "line": 5, - }, - "start": Position { - "column": 10, - "line": 5, - }, - }, - "name": "f", - "start": 64, - "type": "Identifier", - }, - "end": 70, - "isEnvDependent": true, - "loc": SourceLocation { - "end": Position { - "column": 16, - "line": 5, - }, - "start": Position { - "column": 10, - "line": 5, - }, - }, - "start": 64, - "type": "CallExpression", - }, - }, - Object { - "instrType": "BinaryOperation", - "isEnvDependent": false, - "srcNode": Node { - "end": 70, - "isEnvDependent": true, - "left": Node { - "end": 61, - "isEnvDependent": true, - "loc": SourceLocation { - "end": Position { - "column": 7, - "line": 5, - }, - "start": Position { - "column": 6, - "line": 5, - }, - }, - "name": "n", - "start": 60, - "type": "Identifier", - }, - "loc": SourceLocation { - "end": Position { - "column": 16, - "line": 5, - }, - "start": Position { - "column": 6, - "line": 5, - }, - }, - "operator": "*", - "right": Node { - "arguments": Array [ - Node { - "end": 69, - "isEnvDependent": true, - "left": Node { - "end": 67, - "isEnvDependent": true, - "loc": SourceLocation { - "end": Position { - "column": 13, - "line": 5, - }, - "start": Position { - "column": 12, - "line": 5, - }, - }, - "name": "n", - "start": 66, - "type": "Identifier", - }, - "loc": SourceLocation { - "end": Position { - "column": 15, - "line": 5, - }, - "start": Position { - "column": 12, - "line": 5, - }, - }, - "operator": "-", - "right": Node { - "end": 69, - "isEnvDependent": false, - "loc": SourceLocation { - "end": Position { - "column": 15, - "line": 5, - }, - "start": Position { - "column": 14, - "line": 5, - }, - }, - "raw": "1", - "start": 68, - "type": "Literal", - "value": 1, - }, - "start": 66, - "type": "BinaryExpression", - }, - ], - "callee": Node { - "end": 65, - "isEnvDependent": true, - "loc": SourceLocation { - "end": Position { - "column": 11, - "line": 5, - }, - "start": Position { - "column": 10, - "line": 5, - }, - }, - "name": "f", - "start": 64, - "type": "Identifier", - }, - "end": 70, - "isEnvDependent": true, - "loc": SourceLocation { - "end": Position { - "column": 16, - "line": 5, - }, - "start": Position { - "column": 10, - "line": 5, - }, - }, - "start": 64, - "type": "CallExpression", - }, - "start": 60, - "type": "BinaryExpression", - }, - "symbol": "*", - }, - Object { - "env": Object { - "callExpression": Object { - "arguments": Array [ - Object { - "loc": undefined, - "type": "Literal", - "value": 2, - }, - ], - "callee": Node { - "end": 65, - "isEnvDependent": true, - "loc": SourceLocation { - "end": Position { - "column": 11, - "line": 5, - }, - "start": Position { - "column": 10, - "line": 5, - }, - }, - "name": "f", - "start": 64, - "type": "Identifier", - }, - "end": 70, - "isEnvDependent": true, - "loc": SourceLocation { - "end": Position { - "column": 16, - "line": 5, - }, - "start": Position { - "column": 10, - "line": 5, - }, - }, - "start": 64, - "type": "CallExpression", - }, - "head": Object { - "n": 2, - }, - "heap": Heap { - "storage": null, - }, - "id": "50", - "name": "f", - "tail": Object { - "head": Object { - "a": 1, - "f": [Function], - }, - "heap": Heap { - "storage": Set { - [Function], - }, - }, - "id": "47", - "name": "programEnvironment", - "tail": Object { - "head": Object { - "$accumulate": [Function], - "$append": [Function], - "$build_list": [Function], - "$enum_list": [Function], - "$filter": [Function], - "$length": [Function], - "$list_to_string": [Function], - "$map": [Function], - "$remove": [Function], - "$remove_all": [Function], - "$reverse": [Function], - "__access_export__": [Function], - "__access_named_export__": [Function], - "accumulate": [Function], - "append": [Function], - "build_list": [Function], - "build_stream": [Function], - "enum_list": [Function], - "enum_stream": [Function], - "equal": [Function], - "eval_stream": [Function], - "filter": [Function], - "for_each": [Function], - "integers_from": [Function], - "is_stream": [Function], - "length": [Function], - "list_ref": [Function], - "list_to_stream": [Function], - "list_to_string": [Function], - "map": [Function], - "member": [Function], - "remove": [Function], - "remove_all": [Function], - "reverse": [Function], - "stream_append": [Function], - "stream_filter": [Function], - "stream_for_each": [Function], - "stream_length": [Function], - "stream_map": [Function], - "stream_member": [Function], - "stream_ref": [Function], - "stream_remove": [Function], - "stream_remove_all": [Function], - "stream_reverse": [Function], - "stream_tail": [Function], - "stream_to_list": [Function], - }, - "heap": Heap { - "storage": Set { - [Function], - [Function], - [Function], - [Function], - [Function], - [Function], - [Function], - [Function], - [Function], - [Function], - [Function], - [Function], - [Function], - [Function], - [Function], - [Function], - [Function], - [Function], - [Function], - [Function], - [Function], - [Function], - [Function], - [Function], - [Function], - [Function], - [Function], - [Function], - [Function], - [Function], - [Function], - [Function], - [Function], - [Function], - [Function], - [Function], - [Function], - [Function], - [Function], - [Function], - [Function], - [Function], - [Function], - [Function], - [Function], - [Function], - }, - }, - "id": "0", - "name": "prelude", - "tail": Object { - "head": Object { - "Infinity": Infinity, - "NaN": NaN, - "apply_in_underlying_javascript": [Function], - "arity": [Function], - "array_length": [Function], - "call_cc": [Function], - "char_at": [Function], - "display": [Function], - "display_list": [Function], - "draw_data": [Function], - "error": [Function], - "get_time": [Function], - "head": [Function], - "is_array": [Function], - "is_boolean": [Function], - "is_function": [Function], - "is_list": [Function], - "is_null": [Function], - "is_number": [Function], - "is_pair": [Function], - "is_string": [Function], - "is_undefined": [Function], - "list": [Function], - "math_E": 2.718281828459045, - "math_LN10": 2.302585092994046, - "math_LN2": 0.6931471805599453, - "math_LOG10E": 0.4342944819032518, - "math_LOG2E": 1.4426950408889634, - "math_PI": 3.141592653589793, - "math_SQRT1_2": 0.7071067811865476, - "math_SQRT2": 1.4142135623730951, - "math_abs": [Function], - "math_acos": [Function], - "math_acosh": [Function], - "math_asin": [Function], - "math_asinh": [Function], - "math_atan": [Function], - "math_atan2": [Function], - "math_atanh": [Function], - "math_cbrt": [Function], - "math_ceil": [Function], - "math_clz32": [Function], - "math_cos": [Function], - "math_cosh": [Function], - "math_exp": [Function], - "math_expm1": [Function], - "math_floor": [Function], - "math_fround": [Function], - "math_hypot": [Function], - "math_imul": [Function], - "math_log": [Function], - "math_log10": [Function], - "math_log1p": [Function], - "math_log2": [Function], - "math_max": [Function], - "math_min": [Function], - "math_pow": [Function], - "math_random": [Function], - "math_round": [Function], - "math_sign": [Function], - "math_sin": [Function], - "math_sinh": [Function], - "math_sqrt": [Function], - "math_tan": [Function], - "math_tanh": [Function], - "math_trunc": [Function], - "pair": [Function], - "parse": [Function], - "parse_int": [Function], - "prompt": [Function], - "raw_display": [Function], - "set_head": [Function], - "set_tail": [Function], - "stream": [Function], - "stringify": [Function], - "tail": [Function], - "tokenize": [Function], - "undefined": undefined, - }, - "heap": Heap { - "storage": null, - }, - "id": "-1", - "name": "global", - "tail": null, - }, - }, - }, - }, - "instrType": "Environment", - "isEnvDependent": true, - "srcNode": Node { - "arguments": Array [ - Node { - "end": 69, - "isEnvDependent": true, - "left": Node { - "end": 67, - "isEnvDependent": true, - "loc": SourceLocation { - "end": Position { - "column": 13, - "line": 5, - }, - "start": Position { - "column": 12, - "line": 5, - }, - }, - "name": "n", - "start": 66, - "type": "Identifier", - }, - "loc": SourceLocation { - "end": Position { - "column": 15, - "line": 5, - }, - "start": Position { - "column": 12, - "line": 5, - }, - }, - "operator": "-", - "right": Node { - "end": 69, - "isEnvDependent": false, - "loc": SourceLocation { - "end": Position { - "column": 15, - "line": 5, - }, - "start": Position { - "column": 14, - "line": 5, - }, - }, - "raw": "1", - "start": 68, - "type": "Literal", - "value": 1, - }, - "start": 66, - "type": "BinaryExpression", - }, - ], - "callee": Node { - "end": 65, - "isEnvDependent": true, - "loc": SourceLocation { - "end": Position { - "column": 11, - "line": 5, - }, - "start": Position { - "column": 10, - "line": 5, - }, - }, - "name": "f", - "start": 64, - "type": "Identifier", - }, - "end": 70, - "isEnvDependent": true, - "loc": SourceLocation { - "end": Position { - "column": 16, - "line": 5, - }, - "start": Position { - "column": 10, - "line": 5, - }, - }, - "start": 64, - "type": "CallExpression", - }, - }, - Object { - "instrType": "BinaryOperation", - "isEnvDependent": false, - "srcNode": Node { - "end": 70, - "isEnvDependent": true, - "left": Node { - "end": 61, - "isEnvDependent": true, - "loc": SourceLocation { - "end": Position { - "column": 7, - "line": 5, - }, - "start": Position { - "column": 6, - "line": 5, - }, - }, - "name": "n", - "start": 60, - "type": "Identifier", - }, - "loc": SourceLocation { - "end": Position { - "column": 16, - "line": 5, - }, - "start": Position { - "column": 6, - "line": 5, - }, - }, - "operator": "*", - "right": Node { - "arguments": Array [ - Node { - "end": 69, - "isEnvDependent": true, - "left": Node { - "end": 67, - "isEnvDependent": true, - "loc": SourceLocation { - "end": Position { - "column": 13, - "line": 5, - }, - "start": Position { - "column": 12, - "line": 5, - }, - }, - "name": "n", - "start": 66, - "type": "Identifier", - }, - "loc": SourceLocation { - "end": Position { - "column": 15, - "line": 5, - }, - "start": Position { - "column": 12, - "line": 5, - }, - }, - "operator": "-", - "right": Node { - "end": 69, - "isEnvDependent": false, - "loc": SourceLocation { - "end": Position { - "column": 15, - "line": 5, - }, - "start": Position { - "column": 14, - "line": 5, - }, - }, - "raw": "1", - "start": 68, - "type": "Literal", - "value": 1, - }, - "start": 66, - "type": "BinaryExpression", - }, - ], - "callee": Node { - "end": 65, - "isEnvDependent": true, - "loc": SourceLocation { - "end": Position { - "column": 11, - "line": 5, - }, - "start": Position { - "column": 10, - "line": 5, - }, - }, - "name": "f", - "start": 64, - "type": "Identifier", - }, - "end": 70, - "isEnvDependent": true, - "loc": SourceLocation { - "end": Position { - "column": 16, - "line": 5, - }, - "start": Position { - "column": 10, - "line": 5, - }, - }, - "start": 64, - "type": "CallExpression", - }, - "start": 60, - "type": "BinaryExpression", - }, - "symbol": "*", - }, - Object { - "env": Object { - "callExpression": Object { - "arguments": Array [ - Object { - "loc": undefined, - "type": "Literal", - "value": 1, - }, - ], - "callee": Node { - "end": 65, - "isEnvDependent": true, - "loc": SourceLocation { - "end": Position { - "column": 11, - "line": 5, - }, - "start": Position { - "column": 10, - "line": 5, - }, - }, - "name": "f", - "start": 64, - "type": "Identifier", - }, - "end": 70, - "isEnvDependent": true, - "loc": SourceLocation { - "end": Position { - "column": 16, - "line": 5, - }, - "start": Position { - "column": 10, - "line": 5, - }, - }, - "start": 64, - "type": "CallExpression", - }, - "head": Object { - "n": 1, - }, - "heap": Heap { - "storage": null, - }, - "id": "51", - "name": "f", - "tail": Object { - "head": Object { - "a": 1, - "f": [Function], - }, - "heap": Heap { - "storage": Set { - [Function], - }, - }, - "id": "47", - "name": "programEnvironment", - "tail": Object { - "head": Object { - "$accumulate": [Function], - "$append": [Function], - "$build_list": [Function], - "$enum_list": [Function], - "$filter": [Function], - "$length": [Function], - "$list_to_string": [Function], - "$map": [Function], - "$remove": [Function], - "$remove_all": [Function], - "$reverse": [Function], - "__access_export__": [Function], - "__access_named_export__": [Function], - "accumulate": [Function], - "append": [Function], - "build_list": [Function], - "build_stream": [Function], - "enum_list": [Function], - "enum_stream": [Function], - "equal": [Function], - "eval_stream": [Function], - "filter": [Function], - "for_each": [Function], - "integers_from": [Function], - "is_stream": [Function], - "length": [Function], - "list_ref": [Function], - "list_to_stream": [Function], - "list_to_string": [Function], - "map": [Function], - "member": [Function], - "remove": [Function], - "remove_all": [Function], - "reverse": [Function], - "stream_append": [Function], - "stream_filter": [Function], - "stream_for_each": [Function], - "stream_length": [Function], - "stream_map": [Function], - "stream_member": [Function], - "stream_ref": [Function], - "stream_remove": [Function], - "stream_remove_all": [Function], - "stream_reverse": [Function], - "stream_tail": [Function], - "stream_to_list": [Function], - }, - "heap": Heap { - "storage": Set { - [Function], - [Function], - [Function], - [Function], - [Function], - [Function], - [Function], - [Function], - [Function], - [Function], - [Function], - [Function], - [Function], - [Function], - [Function], - [Function], - [Function], - [Function], - [Function], - [Function], - [Function], - [Function], - [Function], - [Function], - [Function], - [Function], - [Function], - [Function], - [Function], - [Function], - [Function], - [Function], - [Function], - [Function], - [Function], - [Function], - [Function], - [Function], - [Function], - [Function], - [Function], - [Function], - [Function], - [Function], - [Function], - [Function], - }, - }, - "id": "0", - "name": "prelude", - "tail": Object { - "head": Object { - "Infinity": Infinity, - "NaN": NaN, - "apply_in_underlying_javascript": [Function], - "arity": [Function], - "array_length": [Function], - "call_cc": [Function], - "char_at": [Function], - "display": [Function], - "display_list": [Function], - "draw_data": [Function], - "error": [Function], - "get_time": [Function], - "head": [Function], - "is_array": [Function], - "is_boolean": [Function], - "is_function": [Function], - "is_list": [Function], - "is_null": [Function], - "is_number": [Function], - "is_pair": [Function], - "is_string": [Function], - "is_undefined": [Function], - "list": [Function], - "math_E": 2.718281828459045, - "math_LN10": 2.302585092994046, - "math_LN2": 0.6931471805599453, - "math_LOG10E": 0.4342944819032518, - "math_LOG2E": 1.4426950408889634, - "math_PI": 3.141592653589793, - "math_SQRT1_2": 0.7071067811865476, - "math_SQRT2": 1.4142135623730951, - "math_abs": [Function], - "math_acos": [Function], - "math_acosh": [Function], - "math_asin": [Function], - "math_asinh": [Function], - "math_atan": [Function], - "math_atan2": [Function], - "math_atanh": [Function], - "math_cbrt": [Function], - "math_ceil": [Function], - "math_clz32": [Function], - "math_cos": [Function], - "math_cosh": [Function], - "math_exp": [Function], - "math_expm1": [Function], - "math_floor": [Function], - "math_fround": [Function], - "math_hypot": [Function], - "math_imul": [Function], - "math_log": [Function], - "math_log10": [Function], - "math_log1p": [Function], - "math_log2": [Function], - "math_max": [Function], - "math_min": [Function], - "math_pow": [Function], - "math_random": [Function], - "math_round": [Function], - "math_sign": [Function], - "math_sin": [Function], - "math_sinh": [Function], - "math_sqrt": [Function], - "math_tan": [Function], - "math_tanh": [Function], - "math_trunc": [Function], - "pair": [Function], - "parse": [Function], - "parse_int": [Function], - "prompt": [Function], - "raw_display": [Function], - "set_head": [Function], - "set_tail": [Function], - "stream": [Function], - "stringify": [Function], - "tail": [Function], - "tokenize": [Function], - "undefined": undefined, - }, - "heap": Heap { - "storage": null, - }, - "id": "-1", - "name": "global", - "tail": null, - }, - }, - }, - }, - "instrType": "Environment", - "isEnvDependent": true, - "srcNode": Node { - "arguments": Array [ - Node { - "end": 69, - "isEnvDependent": true, - "left": Node { - "end": 67, - "isEnvDependent": true, - "loc": SourceLocation { - "end": Position { - "column": 13, - "line": 5, - }, - "start": Position { - "column": 12, - "line": 5, - }, - }, - "name": "n", - "start": 66, - "type": "Identifier", - }, - "loc": SourceLocation { - "end": Position { - "column": 15, - "line": 5, - }, - "start": Position { - "column": 12, - "line": 5, - }, - }, - "operator": "-", - "right": Node { - "end": 69, - "isEnvDependent": false, - "loc": SourceLocation { - "end": Position { - "column": 15, - "line": 5, - }, - "start": Position { - "column": 14, - "line": 5, - }, - }, - "raw": "1", - "start": 68, - "type": "Literal", - "value": 1, - }, - "start": 66, - "type": "BinaryExpression", - }, - ], - "callee": Node { - "end": 65, - "isEnvDependent": true, - "loc": SourceLocation { - "end": Position { - "column": 11, - "line": 5, - }, - "start": Position { - "column": 10, - "line": 5, - }, - }, - "name": "f", - "start": 64, - "type": "Identifier", - }, - "end": 70, - "isEnvDependent": true, - "loc": SourceLocation { - "end": Position { - "column": 16, - "line": 5, - }, - "start": Position { - "column": 10, - "line": 5, - }, - }, - "start": 64, - "type": "CallExpression", - }, - }, - Node { - "end": 53, - "isEnvDependent": false, - "loc": SourceLocation { - "end": Position { - "column": 7, - "line": 4, - }, - "start": Position { - "column": 6, - "line": 4, - }, - }, - "raw": "1", - "start": 52, - "type": "Literal", - "value": 1, - }, - ], -} -`; +exports[`Avoid unnescessary environment instruction 1115`] = `4`; -exports[`Avoid unnescessary environment instruction 4 1`] = ` -Control { - "numEnvDependentItems": 0, - "storage": Array [ - Object { - "body": Array [ - Node { - "end": 43, - "expression": Node { - "end": 42, - "isEnvDependent": false, - "left": Node { - "end": 38, - "isEnvDependent": false, - "loc": SourceLocation { - "end": Position { - "column": 5, - "line": 7, - }, - "start": Position { - "column": 4, - "line": 7, - }, - }, - "raw": "1", - "start": 37, - "type": "Literal", - "value": 1, - }, - "loc": SourceLocation { - "end": Position { - "column": 9, - "line": 7, - }, - "start": Position { - "column": 4, - "line": 7, - }, - }, - "operator": "+", - "right": Node { - "end": 42, - "isEnvDependent": false, - "loc": SourceLocation { - "end": Position { - "column": 9, - "line": 7, - }, - "start": Position { - "column": 8, - "line": 7, - }, - }, - "raw": "2", - "start": 41, - "type": "Literal", - "value": 2, - }, - "start": 37, - "type": "BinaryExpression", - }, - "isEnvDependent": false, - "loc": SourceLocation { - "end": Position { - "column": 10, - "line": 7, - }, - "start": Position { - "column": 4, - "line": 7, - }, - }, - "start": 37, - "type": "ExpressionStatement", - }, - Node { - "end": 50, - "expression": Node { - "end": 49, - "isEnvDependent": false, - "loc": SourceLocation { - "end": Position { - "column": 5, - "line": 8, - }, - "start": Position { - "column": 4, - "line": 8, - }, - }, - "raw": "3", - "start": 48, - "type": "Literal", - "value": 3, - }, - "isEnvDependent": false, - "loc": SourceLocation { - "end": Position { - "column": 6, - "line": 8, - }, - "start": Position { - "column": 4, - "line": 8, - }, - }, - "start": 48, - "type": "ExpressionStatement", - }, - ], - "isEnvDependent": false, - "loc": SourceLocation { - "end": Position { - "column": 1, - "line": 9, - }, - "start": Position { - "column": 0, - "line": 6, - }, - }, - "type": "StatementSequence", - }, - Object { - "body": Array [ - Node { - "declarations": Array [ - Node { - "end": 13, - "id": Node { - "end": 9, - "loc": SourceLocation { - "end": Position { - "column": 7, - "line": 2, - }, - "start": Position { - "column": 6, - "line": 2, - }, - }, - "name": "a", - "start": 8, - "type": "Identifier", - }, - "init": Node { - "end": 13, - "loc": SourceLocation { - "end": Position { - "column": 11, - "line": 2, - }, - "start": Position { - "column": 10, - "line": 2, - }, - }, - "raw": "1", - "start": 12, - "type": "Literal", - "value": 1, - }, - "loc": SourceLocation { - "end": Position { - "column": 11, - "line": 2, - }, - "start": Position { - "column": 6, - "line": 2, - }, - }, - "start": 8, - "type": "VariableDeclarator", - }, - ], - "end": 14, - "isEnvDependent": true, - "kind": "let", - "loc": SourceLocation { - "end": Position { - "column": 12, - "line": 2, - }, - "start": Position { - "column": 2, - "line": 2, - }, - }, - "start": 4, - "typability": "NotYetTyped", - "type": "VariableDeclaration", - }, - Node { - "declarations": Array [ - Node { - "end": 26, - "id": Node { - "end": 22, - "loc": SourceLocation { - "end": Position { - "column": 7, - "line": 3, - }, - "start": Position { - "column": 6, - "line": 3, - }, - }, - "name": "b", - "start": 21, - "type": "Identifier", - }, - "init": Node { - "end": 26, - "loc": SourceLocation { - "end": Position { - "column": 11, - "line": 3, - }, - "start": Position { - "column": 10, - "line": 3, - }, - }, - "raw": "2", - "start": 25, - "type": "Literal", - "value": 2, - }, - "loc": SourceLocation { - "end": Position { - "column": 11, - "line": 3, - }, - "start": Position { - "column": 6, - "line": 3, - }, - }, - "start": 21, - "type": "VariableDeclarator", - }, - ], - "end": 27, - "kind": "let", - "loc": SourceLocation { - "end": Position { - "column": 12, - "line": 3, - }, - "start": Position { - "column": 2, - "line": 3, - }, - }, - "start": 17, - "typability": "NotYetTyped", - "type": "VariableDeclaration", - }, - ], - "isEnvDependent": false, - "loc": SourceLocation { - "end": Position { - "column": 1, - "line": 4, - }, - "start": Position { - "column": 0, - "line": 1, - }, - }, - "type": "StatementSequence", - }, - ], -} -`; +exports[`Avoid unnescessary environment instruction 1116`] = `5`; + +exports[`Avoid unnescessary environment instruction 1117`] = `5`; + +exports[`Avoid unnescessary environment instruction 1118`] = `4`; + +exports[`Avoid unnescessary environment instruction 1119`] = `4`; + +exports[`Avoid unnescessary environment instruction 1120`] = `4`; + +exports[`Avoid unnescessary environment instruction 1121`] = `3`; + +exports[`Avoid unnescessary environment instruction 1122`] = `3`; + +exports[`Avoid unnescessary environment instruction 1123`] = `3`; + +exports[`Avoid unnescessary environment instruction 1124`] = `2`; + +exports[`Avoid unnescessary environment instruction 1125`] = `2`; + +exports[`Avoid unnescessary environment instruction 1126`] = `2`; + +exports[`Avoid unnescessary environment instruction 1127`] = `5`; + +exports[`Avoid unnescessary environment instruction 1128`] = `5`; + +exports[`Avoid unnescessary environment instruction 1129`] = `5`; + +exports[`Avoid unnescessary environment instruction 1130`] = `6`; + +exports[`Avoid unnescessary environment instruction 1131`] = `7`; + +exports[`Avoid unnescessary environment instruction 1132`] = `6`; + +exports[`Avoid unnescessary environment instruction 1133`] = `5`; + +exports[`Avoid unnescessary environment instruction 1134`] = `5`; + +exports[`Avoid unnescessary environment instruction 1135`] = `5`; + +exports[`Avoid unnescessary environment instruction 1136`] = `6`; + +exports[`Avoid unnescessary environment instruction 1137`] = `7`; + +exports[`Avoid unnescessary environment instruction 1138`] = `6`; + +exports[`Avoid unnescessary environment instruction 1139`] = `5`; + +exports[`Avoid unnescessary environment instruction 1140`] = `5`; + +exports[`Avoid unnescessary environment instruction 1141`] = `5`; + +exports[`Avoid unnescessary environment instruction 1142`] = `7`; + +exports[`Avoid unnescessary environment instruction 1143`] = `7`; + +exports[`Avoid unnescessary environment instruction 1144`] = `7`; + +exports[`Avoid unnescessary environment instruction 1145`] = `6`; + +exports[`Avoid unnescessary environment instruction 1146`] = `6`; + +exports[`Avoid unnescessary environment instruction 1147`] = `8`; + +exports[`Avoid unnescessary environment instruction 1148`] = `7`; + +exports[`Avoid unnescessary environment instruction 1149`] = `8`; + +exports[`Avoid unnescessary environment instruction 1150`] = `7`; + +exports[`Avoid unnescessary environment instruction 1151`] = `6`; + +exports[`Avoid unnescessary environment instruction 1152`] = `6`; + +exports[`Avoid unnescessary environment instruction 1153`] = `8`; + +exports[`Avoid unnescessary environment instruction 1154`] = `8`; + +exports[`Avoid unnescessary environment instruction 1155`] = `9`; + +exports[`Avoid unnescessary environment instruction 1156`] = `10`; + +exports[`Avoid unnescessary environment instruction 1157`] = `13`; + +exports[`Avoid unnescessary environment instruction 1158`] = `12`; + +exports[`Avoid unnescessary environment instruction 1159`] = `11`; + +exports[`Avoid unnescessary environment instruction 1160`] = `10`; + +exports[`Avoid unnescessary environment instruction 1161`] = `10`; + +exports[`Avoid unnescessary environment instruction 1162`] = `11`; + +exports[`Avoid unnescessary environment instruction 1163`] = `10`; + +exports[`Avoid unnescessary environment instruction 1164`] = `9`; + +exports[`Avoid unnescessary environment instruction 1165`] = `9`; + +exports[`Avoid unnescessary environment instruction 1166`] = `9`; + +exports[`Avoid unnescessary environment instruction 1167`] = `8`; + +exports[`Avoid unnescessary environment instruction 1168`] = `8`; + +exports[`Avoid unnescessary environment instruction 1169`] = `9`; + +exports[`Avoid unnescessary environment instruction 1170`] = `9`; + +exports[`Avoid unnescessary environment instruction 1171`] = `8`; + +exports[`Avoid unnescessary environment instruction 1172`] = `8`; + +exports[`Avoid unnescessary environment instruction 1173`] = `8`; + +exports[`Avoid unnescessary environment instruction 1174`] = `7`; + +exports[`Avoid unnescessary environment instruction 1175`] = `8`; + +exports[`Avoid unnescessary environment instruction 1176`] = `7`; + +exports[`Avoid unnescessary environment instruction 1177`] = `6`; + +exports[`Avoid unnescessary environment instruction 1178`] = `6`; + +exports[`Avoid unnescessary environment instruction 1179`] = `8`; + +exports[`Avoid unnescessary environment instruction 1180`] = `8`; + +exports[`Avoid unnescessary environment instruction 1181`] = `9`; + +exports[`Avoid unnescessary environment instruction 1182`] = `10`; + +exports[`Avoid unnescessary environment instruction 1183`] = `13`; + +exports[`Avoid unnescessary environment instruction 1184`] = `12`; + +exports[`Avoid unnescessary environment instruction 1185`] = `11`; + +exports[`Avoid unnescessary environment instruction 1186`] = `10`; + +exports[`Avoid unnescessary environment instruction 1187`] = `10`; + +exports[`Avoid unnescessary environment instruction 1188`] = `11`; + +exports[`Avoid unnescessary environment instruction 1189`] = `10`; + +exports[`Avoid unnescessary environment instruction 1190`] = `9`; + +exports[`Avoid unnescessary environment instruction 1191`] = `9`; + +exports[`Avoid unnescessary environment instruction 1192`] = `9`; + +exports[`Avoid unnescessary environment instruction 1193`] = `8`; + +exports[`Avoid unnescessary environment instruction 1194`] = `8`; + +exports[`Avoid unnescessary environment instruction 1195`] = `9`; + +exports[`Avoid unnescessary environment instruction 1196`] = `9`; + +exports[`Avoid unnescessary environment instruction 1197`] = `8`; + +exports[`Avoid unnescessary environment instruction 1198`] = `8`; + +exports[`Avoid unnescessary environment instruction 1199`] = `8`; + +exports[`Avoid unnescessary environment instruction 1200`] = `7`; + +exports[`Avoid unnescessary environment instruction 1201`] = `8`; + +exports[`Avoid unnescessary environment instruction 1202`] = `7`; + +exports[`Avoid unnescessary environment instruction 1203`] = `6`; + +exports[`Avoid unnescessary environment instruction 1204`] = `6`; + +exports[`Avoid unnescessary environment instruction 1205`] = `8`; + +exports[`Avoid unnescessary environment instruction 1206`] = `8`; + +exports[`Avoid unnescessary environment instruction 1207`] = `9`; + +exports[`Avoid unnescessary environment instruction 1208`] = `10`; + +exports[`Avoid unnescessary environment instruction 1209`] = `13`; + +exports[`Avoid unnescessary environment instruction 1210`] = `12`; + +exports[`Avoid unnescessary environment instruction 1211`] = `11`; + +exports[`Avoid unnescessary environment instruction 1212`] = `10`; + +exports[`Avoid unnescessary environment instruction 1213`] = `10`; + +exports[`Avoid unnescessary environment instruction 1214`] = `11`; + +exports[`Avoid unnescessary environment instruction 1215`] = `10`; + +exports[`Avoid unnescessary environment instruction 1216`] = `9`; + +exports[`Avoid unnescessary environment instruction 1217`] = `9`; + +exports[`Avoid unnescessary environment instruction 1218`] = `9`; + +exports[`Avoid unnescessary environment instruction 1219`] = `8`; + +exports[`Avoid unnescessary environment instruction 1220`] = `8`; + +exports[`Avoid unnescessary environment instruction 1221`] = `9`; + +exports[`Avoid unnescessary environment instruction 1222`] = `9`; + +exports[`Avoid unnescessary environment instruction 1223`] = `8`; + +exports[`Avoid unnescessary environment instruction 1224`] = `8`; + +exports[`Avoid unnescessary environment instruction 1225`] = `8`; + +exports[`Avoid unnescessary environment instruction 1226`] = `7`; + +exports[`Avoid unnescessary environment instruction 1227`] = `8`; + +exports[`Avoid unnescessary environment instruction 1228`] = `7`; + +exports[`Avoid unnescessary environment instruction 1229`] = `6`; + +exports[`Avoid unnescessary environment instruction 1230`] = `6`; + +exports[`Avoid unnescessary environment instruction 1231`] = `8`; + +exports[`Avoid unnescessary environment instruction 1232`] = `8`; + +exports[`Avoid unnescessary environment instruction 1233`] = `9`; + +exports[`Avoid unnescessary environment instruction 1234`] = `10`; + +exports[`Avoid unnescessary environment instruction 1235`] = `13`; + +exports[`Avoid unnescessary environment instruction 1236`] = `12`; + +exports[`Avoid unnescessary environment instruction 1237`] = `11`; + +exports[`Avoid unnescessary environment instruction 1238`] = `10`; + +exports[`Avoid unnescessary environment instruction 1239`] = `10`; + +exports[`Avoid unnescessary environment instruction 1240`] = `11`; + +exports[`Avoid unnescessary environment instruction 1241`] = `10`; + +exports[`Avoid unnescessary environment instruction 1242`] = `9`; + +exports[`Avoid unnescessary environment instruction 1243`] = `9`; + +exports[`Avoid unnescessary environment instruction 1244`] = `9`; + +exports[`Avoid unnescessary environment instruction 1245`] = `8`; + +exports[`Avoid unnescessary environment instruction 1246`] = `8`; + +exports[`Avoid unnescessary environment instruction 1247`] = `9`; + +exports[`Avoid unnescessary environment instruction 1248`] = `9`; + +exports[`Avoid unnescessary environment instruction 1249`] = `8`; + +exports[`Avoid unnescessary environment instruction 1250`] = `8`; + +exports[`Avoid unnescessary environment instruction 1251`] = `8`; + +exports[`Avoid unnescessary environment instruction 1252`] = `7`; + +exports[`Avoid unnescessary environment instruction 1253`] = `8`; + +exports[`Avoid unnescessary environment instruction 1254`] = `7`; + +exports[`Avoid unnescessary environment instruction 1255`] = `6`; + +exports[`Avoid unnescessary environment instruction 1256`] = `6`; + +exports[`Avoid unnescessary environment instruction 1257`] = `8`; + +exports[`Avoid unnescessary environment instruction 1258`] = `8`; + +exports[`Avoid unnescessary environment instruction 1259`] = `9`; + +exports[`Avoid unnescessary environment instruction 1260`] = `10`; + +exports[`Avoid unnescessary environment instruction 1261`] = `13`; + +exports[`Avoid unnescessary environment instruction 1262`] = `12`; + +exports[`Avoid unnescessary environment instruction 1263`] = `11`; + +exports[`Avoid unnescessary environment instruction 1264`] = `10`; + +exports[`Avoid unnescessary environment instruction 1265`] = `10`; + +exports[`Avoid unnescessary environment instruction 1266`] = `11`; + +exports[`Avoid unnescessary environment instruction 1267`] = `10`; + +exports[`Avoid unnescessary environment instruction 1268`] = `9`; + +exports[`Avoid unnescessary environment instruction 1269`] = `9`; + +exports[`Avoid unnescessary environment instruction 1270`] = `9`; + +exports[`Avoid unnescessary environment instruction 1271`] = `8`; + +exports[`Avoid unnescessary environment instruction 1272`] = `8`; + +exports[`Avoid unnescessary environment instruction 1273`] = `9`; + +exports[`Avoid unnescessary environment instruction 1274`] = `9`; + +exports[`Avoid unnescessary environment instruction 1275`] = `8`; + +exports[`Avoid unnescessary environment instruction 1276`] = `8`; + +exports[`Avoid unnescessary environment instruction 1277`] = `8`; + +exports[`Avoid unnescessary environment instruction 1278`] = `7`; + +exports[`Avoid unnescessary environment instruction 1279`] = `8`; + +exports[`Avoid unnescessary environment instruction 1280`] = `7`; + +exports[`Avoid unnescessary environment instruction 1281`] = `6`; + +exports[`Avoid unnescessary environment instruction 1282`] = `6`; + +exports[`Avoid unnescessary environment instruction 1283`] = `8`; + +exports[`Avoid unnescessary environment instruction 1284`] = `8`; + +exports[`Avoid unnescessary environment instruction 1285`] = `9`; + +exports[`Avoid unnescessary environment instruction 1286`] = `10`; + +exports[`Avoid unnescessary environment instruction 1287`] = `13`; + +exports[`Avoid unnescessary environment instruction 1288`] = `12`; + +exports[`Avoid unnescessary environment instruction 1289`] = `11`; + +exports[`Avoid unnescessary environment instruction 1290`] = `10`; + +exports[`Avoid unnescessary environment instruction 1291`] = `10`; + +exports[`Avoid unnescessary environment instruction 1292`] = `11`; + +exports[`Avoid unnescessary environment instruction 1293`] = `10`; + +exports[`Avoid unnescessary environment instruction 1294`] = `9`; + +exports[`Avoid unnescessary environment instruction 1295`] = `9`; + +exports[`Avoid unnescessary environment instruction 1296`] = `9`; + +exports[`Avoid unnescessary environment instruction 1297`] = `8`; + +exports[`Avoid unnescessary environment instruction 1298`] = `8`; + +exports[`Avoid unnescessary environment instruction 1299`] = `9`; + +exports[`Avoid unnescessary environment instruction 1300`] = `9`; + +exports[`Avoid unnescessary environment instruction 1301`] = `8`; + +exports[`Avoid unnescessary environment instruction 1302`] = `8`; + +exports[`Avoid unnescessary environment instruction 1303`] = `8`; + +exports[`Avoid unnescessary environment instruction 1304`] = `7`; + +exports[`Avoid unnescessary environment instruction 1305`] = `8`; + +exports[`Avoid unnescessary environment instruction 1306`] = `7`; + +exports[`Avoid unnescessary environment instruction 1307`] = `6`; + +exports[`Avoid unnescessary environment instruction 1308`] = `6`; + +exports[`Avoid unnescessary environment instruction 1309`] = `8`; + +exports[`Avoid unnescessary environment instruction 1310`] = `8`; + +exports[`Avoid unnescessary environment instruction 1311`] = `9`; + +exports[`Avoid unnescessary environment instruction 1312`] = `10`; + +exports[`Avoid unnescessary environment instruction 1313`] = `13`; + +exports[`Avoid unnescessary environment instruction 1314`] = `12`; + +exports[`Avoid unnescessary environment instruction 1315`] = `11`; + +exports[`Avoid unnescessary environment instruction 1316`] = `10`; + +exports[`Avoid unnescessary environment instruction 1317`] = `10`; + +exports[`Avoid unnescessary environment instruction 1318`] = `11`; + +exports[`Avoid unnescessary environment instruction 1319`] = `10`; + +exports[`Avoid unnescessary environment instruction 1320`] = `9`; + +exports[`Avoid unnescessary environment instruction 1321`] = `9`; + +exports[`Avoid unnescessary environment instruction 1322`] = `9`; + +exports[`Avoid unnescessary environment instruction 1323`] = `8`; + +exports[`Avoid unnescessary environment instruction 1324`] = `8`; + +exports[`Avoid unnescessary environment instruction 1325`] = `9`; + +exports[`Avoid unnescessary environment instruction 1326`] = `9`; + +exports[`Avoid unnescessary environment instruction 1327`] = `8`; + +exports[`Avoid unnescessary environment instruction 1328`] = `8`; + +exports[`Avoid unnescessary environment instruction 1329`] = `8`; + +exports[`Avoid unnescessary environment instruction 1330`] = `7`; + +exports[`Avoid unnescessary environment instruction 1331`] = `8`; + +exports[`Avoid unnescessary environment instruction 1332`] = `7`; + +exports[`Avoid unnescessary environment instruction 1333`] = `6`; + +exports[`Avoid unnescessary environment instruction 1334`] = `6`; + +exports[`Avoid unnescessary environment instruction 1335`] = `5`; + +exports[`Avoid unnescessary environment instruction 1336`] = `5`; + +exports[`Avoid unnescessary environment instruction 1337`] = `6`; + +exports[`Avoid unnescessary environment instruction 1338`] = `6`; + +exports[`Avoid unnescessary environment instruction 1339`] = `7`; + +exports[`Avoid unnescessary environment instruction 1340`] = `7`; + +exports[`Avoid unnescessary environment instruction 1341`] = `6`; + +exports[`Avoid unnescessary environment instruction 1342`] = `6`; + +exports[`Avoid unnescessary environment instruction 1343`] = `6`; + +exports[`Avoid unnescessary environment instruction 1344`] = `6`; + +exports[`Avoid unnescessary environment instruction 1345`] = `6`; + +exports[`Avoid unnescessary environment instruction 1346`] = `5`; + +exports[`Avoid unnescessary environment instruction 1347`] = `5`; + +exports[`Avoid unnescessary environment instruction 1348`] = `5`; + +exports[`Avoid unnescessary environment instruction 1349`] = `5`; + +exports[`Avoid unnescessary environment instruction 1350`] = `5`; + +exports[`Avoid unnescessary environment instruction 1351`] = `6`; + +exports[`Avoid unnescessary environment instruction 1352`] = `5`; + +exports[`Avoid unnescessary environment instruction 1353`] = `5`; + +exports[`Avoid unnescessary environment instruction 1354`] = `4`; + +exports[`Avoid unnescessary environment instruction 1355`] = `4`; + +exports[`Avoid unnescessary environment instruction 1356`] = `4`; + +exports[`Avoid unnescessary environment instruction 1357`] = `4`; + +exports[`Avoid unnescessary environment instruction 1358`] = `4`; + +exports[`Avoid unnescessary environment instruction 1359`] = `3`; + +exports[`Avoid unnescessary environment instruction 1360`] = `3`; + +exports[`Avoid unnescessary environment instruction 1361`] = `2`; + +exports[`Avoid unnescessary environment instruction 1362`] = `1`; + +exports[`Avoid unnescessary environment instruction 1363`] = `1`; + +exports[`Avoid unnescessary environment instruction 1364`] = `1`; + +exports[`Avoid unnescessary environment instruction 1365`] = `1`; + +exports[`Avoid unnescessary environment instruction 1366`] = `3`; + +exports[`Avoid unnescessary environment instruction 1367`] = `2`; + +exports[`Avoid unnescessary environment instruction 1368`] = `1`; + +exports[`Avoid unnescessary environment instruction 1369`] = `0`; exports[`Breakpoint steps match 1`] = ` Array [ diff --git a/src/cse-machine/__tests__/cse-machine-runtime-context.ts b/src/cse-machine/__tests__/cse-machine-runtime-context.ts index 5169d186d..ba1cfdf62 100644 --- a/src/cse-machine/__tests__/cse-machine-runtime-context.ts +++ b/src/cse-machine/__tests__/cse-machine-runtime-context.ts @@ -1,8 +1,11 @@ +import type * as es from 'estree' import type { IOptions } from '../..' import { mockContext } from '../../mocks/context' +import { parse } from '../../parser/parser' import { runCodeInSource } from '../../runner' import { Chapter, type RecursivePartial } from '../../types' import { stripIndent } from '../../utils/formatters' +import { Control, Stash, generateCSEMachineStateStream } from '../interpreter' const getContextFrom = async (code: string, steps?: number) => { const context = mockContext(Chapter.SOURCE_4) @@ -14,6 +17,25 @@ const getContextFrom = async (code: string, steps?: number) => { return context } +const evaluateCode = (code: string) => { + const context = mockContext(Chapter.SOURCE_4) + const options: RecursivePartial = { executionMethod: 'cse-machine' } + const program = parse(code, context) + context.runtime.isRunning = true + context.runtime.control = new Control(program as es.Program) + context.runtime.stash = new Stash() + + const CSEState = generateCSEMachineStateStream( + context, + context.runtime.control, + context.runtime.stash, + options.envSteps ?? -1, + options.stepLimit ?? -1, + options.isPrelude + ) + return CSEState +} + const codeSamples = [ ` function create(n) { @@ -72,75 +94,117 @@ for (const context of contexts) { expect((await context).runtime.changepointSteps).toMatchSnapshot() }) } -test('Avoid unnescessary environment instruction 1', async () => { - const context = getContextFrom( +test('Avoid unnescessary environment instruction', () => { + const CSEState = evaluateCode( stripIndent( ` - function f(n) { - return n === 0 - ? 1 - : f(n-1) * 2; - } - f(3); - ` - ), - 61 + function f(n) { + return n === 0 + ? 1 + : f(n-1) * 2; + } + f(3); + ` + ) ) - expect((await context).runtime.control).toMatchSnapshot() + + for (const state of CSEState) { + expect(state.control.getNumEnvDependentItems()).toMatchSnapshot() + } }) -test('Avoid unnescessary environment instruction 2', async () => { - const context = getContextFrom( +test('Avoid unnescessary environment instruction', () => { + const CSEState = evaluateCode( stripIndent( ` - function f(n) { - return n === 0 - ? 1 - : n * f(n-1); - } - f(3); - ` - ), - 63 + function f(n) { + return n === 0 + ? 1 + : n * f(n-1); + } + f(3); + ` + ) + ) + + for (const state of CSEState) { + expect(state.control.getNumEnvDependentItems()).toMatchSnapshot() + } +}) + +test('Avoid unnescessary environment instruction', () => { + const CSEState = evaluateCode( + stripIndent( + ` + let a = 1; + function f(n) { + return n === 0 + ? 1 + : n * f(n-1); + } + f(3); + a = 2; + ` + ) ) - expect((await context).runtime.control).toMatchSnapshot() + + for (const state of CSEState) { + expect(state.control.getNumEnvDependentItems()).toMatchSnapshot() + } }) -test('Avoid unnescessary environment instruction 3', async () => { - const context = getContextFrom( +test('Avoid unnescessary environment instruction', () => { + const CSEState = evaluateCode( stripIndent( ` - let a = 1; - function f(n) { - return n === 0 - ? 1 - : n * f(n-1); - } - f(3); - a = 2; + { + let a = 1; + let b = 2; + } + + { + 1 + 2; + 3; + } ` - ), - 66 + ) ) - expect((await context).runtime.control).toMatchSnapshot() + + for (const state of CSEState) { + expect(state.control.getNumEnvDependentItems()).toMatchSnapshot() + } }) -test('Avoid unnescessary environment instruction 4', async () => { - const context = getContextFrom( +test('Avoid unnescessary environment instruction', () => { + const CSEState = evaluateCode( stripIndent( ` - { - let a = 1; - let b = 2; + import "rune"; + const arr = [1,2,3]; + const c = (x => x)(1); + let sum = 0; + + function add(x, y) { + return x + y; } - - { - 1 + 2; - 3; + + for(let i = 1; i < 10; i = i + 1) { + let j = 0; + while(j < i) { + sum = add(sum, i); + j = j + 1; + } + if (sum > 100 && sum < 200) { + arr[0] = sum; + break; + } } + display(sum); ` - ), - 3 + ) ) - expect((await context).runtime.control).toMatchSnapshot() + + for (const state of CSEState) { + expect(state.control.getNumEnvDependentItems()).toMatchSnapshot() + } }) diff --git a/src/cse-machine/interpreter.ts b/src/cse-machine/interpreter.ts index 91925f65b..18e750541 100644 --- a/src/cse-machine/interpreter.ts +++ b/src/cse-machine/interpreter.ts @@ -103,6 +103,11 @@ export class Control extends Stack { return this.numEnvDependentItems === 0 } + // For testing purposes + public getNumEnvDependentItems(): number { + return this.numEnvDependentItems + } + public pop(): ControlItem | undefined { const item = super.pop() if (item !== undefined && isEnvDependent(item)) { @@ -457,7 +462,7 @@ const cmdEvaluators: { [type: string]: CmdEvaluator } = { // Push ENVIRONMENT instruction if needed - if next control stack item // exists and is not an environment instruction, OR the control only contains - // environment indepedent item + // environment indepedent items if ( next && !(isInstr(next) && next.instrType === InstrType.ENVIRONMENT) && @@ -1005,7 +1010,7 @@ const cmdEvaluators: { [type: string]: CmdEvaluator } = { // Push ENVIRONMENT instruction if needed - if next control stack item // exists and is not an environment instruction, OR the control only contains - // environment indepedent item + // environment indepedent items if ( next && !(isInstr(next) && next.instrType === InstrType.ENVIRONMENT) && diff --git a/src/cse-machine/types.ts b/src/cse-machine/types.ts index 2e7b3802f..aa847fe38 100644 --- a/src/cse-machine/types.ts +++ b/src/cse-machine/types.ts @@ -28,6 +28,7 @@ export enum InstrType { interface BaseInstr { instrType: InstrType srcNode: Node + isEnvDependent?: boolean } export interface WhileInstr extends BaseInstr { diff --git a/src/cse-machine/utils.ts b/src/cse-machine/utils.ts index 9930c8357..cd10faea6 100644 --- a/src/cse-machine/utils.ts +++ b/src/cse-machine/utils.ts @@ -9,7 +9,16 @@ import * as ast from '../utils/ast/astCreator' import Heap from './heap' import * as instr from './instrCreator' import { Control } from './interpreter' -import { AppInstr, EnvArray, ControlItem, Instr, InstrType } from './types' +import { + AppInstr, + EnvArray, + ControlItem, + Instr, + InstrType, + BranchInstr, + WhileInstr, + ForInstr +} from './types' import Closure from './closure' import { Continuation, isCallWithCurrentContinuation } from './continuations' @@ -673,68 +682,245 @@ export const hasContinueStatement = (block: es.BlockStatement | StatementSequenc return hasContinue } +type PropertySetter = Map +type Transformer = (item: ControlItem) => ControlItem + +const setToTrue = (item: ControlItem): ControlItem => { + item.isEnvDependent = true + return item +} + +const setToFalse = (item: ControlItem): ControlItem => { + item.isEnvDependent = false + return item +} + +const propertySetter: PropertySetter = new Map([ + [ + 'Program', + (node: Node) => { + node = node as es.Program + node.isEnvDependent = node.body.some(elem => isEnvDependent(elem)) + return node + } + ], + ['Literal', setToFalse], + ['ImportDeclaration', setToFalse], + ['BreakStatement', setToFalse], + ['ContinueStatement', setToFalse], + ['DebuggerStatement', setToFalse], + ['VariableDeclaration', setToTrue], + ['FunctionDeclaration', setToTrue], + ['ArrowFunctionExpression', setToTrue], + ['Identifier', setToTrue], + [ + 'LogicalExpression', + (node: Node) => { + node = node as es.LogicalExpression + node.isEnvDependent = isEnvDependent(node.left) || isEnvDependent(node.right) + return node + } + ], + [ + 'BinaryExpression', + (node: Node) => { + node = node as es.BinaryExpression + node.isEnvDependent = isEnvDependent(node.left) || isEnvDependent(node.right) + return node + } + ], + [ + 'UnaryExpression', + (node: Node) => { + node = node as es.UnaryExpression + node.isEnvDependent = isEnvDependent(node.argument) + return node + } + ], + [ + 'ConditionalExpression', + (node: Node) => { + node = node as es.ConditionalExpression + node.isEnvDependent = + isEnvDependent(node.consequent) || + isEnvDependent(node.alternate) || + isEnvDependent(node.test) + return node + } + ], + [ + 'MemberExpression', + (node: Node) => { + node = node as es.MemberExpression + node.isEnvDependent = isEnvDependent(node.property) || isEnvDependent(node.object) + return node + } + ], + [ + 'ArrayExpression', + (node: Node) => { + node = node as es.ArrayExpression + node.isEnvDependent = node.elements.some(elem => isEnvDependent(elem)) + return node + } + ], + [ + 'AssignmentExpression', + (node: Node) => { + node = node as es.AssignmentExpression + node.isEnvDependent = isEnvDependent(node.left) || isEnvDependent(node.right) + return node + } + ], + [ + 'ReturnStatement', + (node: Node) => { + node = node as es.ReturnStatement + node.isEnvDependent = isEnvDependent(node.argument) + return node + } + ], + [ + 'CallExpression', + (node: Node) => { + node = node as es.CallExpression + node.isEnvDependent = + isEnvDependent(node.callee) || node.arguments.some(arg => isEnvDependent(arg)) + return node + } + ], + [ + 'ExpressionStatement', + (node: Node) => { + node = node as es.ExpressionStatement + node.isEnvDependent = isEnvDependent(node.expression) + return node + } + ], + [ + 'IfStatement', + (node: Node) => { + node = node as es.IfStatement + node.isEnvDependent = + isEnvDependent(node.test) || + isEnvDependent(node.consequent) || + isEnvDependent(node.alternate) + return node + } + ], + [ + 'ForStatement', + (node: Node) => { + node = node as es.ForStatement + node.isEnvDependent = + isEnvDependent(node.body) || + isEnvDependent(node.init) || + isEnvDependent(node.test) || + isEnvDependent(node.update) + return node + } + ], + [ + 'WhileStatement', + (node: Node) => { + node = node as es.WhileStatement + node.isEnvDependent = isEnvDependent(node.body) || isEnvDependent(node.test) + return node + } + ], + [ + 'BlockStatement', + (node: Node) => { + node = node as es.BlockStatement + node.isEnvDependent = node.body.some(stm => isEnvDependent(stm)) + return node + } + ], + [ + 'StatementSequence', + (node: Node) => { + node = node as StatementSequence + node.isEnvDependent = node.body.some(stm => isEnvDependent(stm)) + return node + } + ], + + [ + 'ImportDeclaration', + (node: Node) => { + node = node as es.ImportDeclaration + node.isEnvDependent = node.specifiers.some(x => isEnvDependent(x)) + return node + } + ], + + ['ImportSpecifier', setToTrue], + + ['ImportDefaultSpecifier', setToTrue], + + //Instruction + [InstrType.RESET, setToFalse], + [InstrType.UNARY_OP, setToFalse], + [InstrType.BINARY_OP, setToFalse], + [InstrType.POP, setToFalse], + [InstrType.ARRAY_ACCESS, setToFalse], + [InstrType.ARRAY_ASSIGNMENT, setToFalse], + [InstrType.CONTINUE, setToFalse], + [InstrType.CONTINUE_MARKER, setToFalse], + [InstrType.BREAK_MARKER, setToFalse], + [InstrType.MARKER, setToFalse], + [InstrType.ENVIRONMENT, setToFalse], + [InstrType.APPLICATION, setToTrue], + [InstrType.ASSIGNMENT, setToTrue], + [InstrType.ARRAY_LITERAL, setToTrue], + [ + InstrType.WHILE, + (instr: WhileInstr) => { + instr.isEnvDependent = isEnvDependent(instr.test) || isEnvDependent(instr.body) + return instr + } + ], + [ + InstrType.FOR, + (instr: ForInstr) => { + instr.isEnvDependent = + isEnvDependent(instr.init) || + isEnvDependent(instr.test) || + isEnvDependent(instr.update) || + isEnvDependent(instr.body) + return instr + } + ], + [ + InstrType.BRANCH, + (instr: BranchInstr) => { + instr.isEnvDependent = isEnvDependent(instr.consequent) || isEnvDependent(instr.alternate) + return instr + } + ] +]) + /** - * Checks whether the evaluation of the given command depends on the current environment. - * @param command The command to be checked - * @return `true` if the command is environment depedent, else `false`. - * NOTE: this check is meant to detect and avoid pushing environment instruction onto the - * control in SIMPLE CASES, so it might not be exhaustive + * Checks whether the evaluation of the given control item depends on the current environment. + * The item is also considered environment dependent if its evaluation introduces + * environment dependent items + * @param item The control item to be checked + * @return `true` if the item is environment depedent, else `false`. */ -export const isEnvDependent = (command: ControlItem): boolean => { - // If the result is already calculated, return it - if (command.isEnvDependent != undefined) { - return command.isEnvDependent + +export function isEnvDependent(item: ControlItem | null | undefined): boolean { + if (item === null || item === undefined) { + return false + } + // If result is already calculated, return it + if (item.isEnvDependent !== undefined) { + return item.isEnvDependent } + const setter = isNode(item) ? propertySetter.get(item.type) : propertySetter.get(item.instrType) - // Otherwise, calculate and store the result - let isDependent = true - if (isInstr(command)) { - const type = command.instrType - isDependent = !( - type === InstrType.UNARY_OP || - type === InstrType.BINARY_OP || - type === InstrType.POP || - type === InstrType.ARRAY_ACCESS || - type === InstrType.ARRAY_ASSIGNMENT || - type === InstrType.RESET || - type === InstrType.CONTINUE_MARKER || - type === InstrType.BREAK_MARKER - ) - } else { - const type = command.type - switch (type) { - case 'StatementSequence': - isDependent = command.body.some((statement: es.Statement) => isEnvDependent(statement)) - case 'Literal': - isDependent = false - break - case 'BinaryExpression': - isDependent = isEnvDependent(command.left) || isEnvDependent(command.right) - break - case 'LogicalExpression': - isDependent = isEnvDependent(command.left) || isEnvDependent(command.right) - break - case 'UnaryExpression': - isDependent = isEnvDependent(command.argument) - break - case 'ExpressionStatement': - isDependent = isEnvDependent(command.expression) - break - default: - break - } + if (setter) { + return setter(item)?.isEnvDependent ?? false } - command.isEnvDependent = isDependent - return isDependent -} -/** - * Checks whether an environment instruction needs to be pushed onto the control. - * @param control The current control to be checked - * @return `true` if the environment instruction can be avoided, else `false`. - * NOTE: this check is meant to detect and avoid pushing environment instruction onto the - * control in SIMPLE CASES, so it might not be exhaustive - */ -export const canAvoidEnvInstr = (control: Control): boolean => { - return !control.getStack().some((command: ControlItem) => isEnvDependent(command)) + return false } diff --git a/src/errors/errors.ts b/src/errors/errors.ts index 0647cff8a..3ea1c41d7 100644 --- a/src/errors/errors.ts +++ b/src/errors/errors.ts @@ -10,8 +10,8 @@ import { RuntimeSourceError } from './runtimeSourceError' //Wrap build-in function error in SourceError export class BuiltInFunctionError extends RuntimeSourceError { - constructor(node: Node, private explanation: String) { - super(node) + constructor(private explanation: String) { + super(undefined) this.explanation = explanation } diff --git a/src/stepper/__tests__/__snapshots__/stepper.ts.snap b/src/stepper/__tests__/__snapshots__/stepper.ts.snap index 92bf982bf..2eb75f7a2 100644 --- a/src/stepper/__tests__/__snapshots__/stepper.ts.snap +++ b/src/stepper/__tests__/__snapshots__/stepper.ts.snap @@ -2821,217 +2821,731 @@ undefined; " `; +<<<<<<< HEAD exports[`Snapshot code snippets Infinite recursion 1`] = ` -"function f() { - return f(); +======= +exports[`Statements: Blocks Block-statement-empty-reduce test case 2 1`] = ` +"{ + { + {} + {} + } + { + {} + {} + } } -f(); -function f() { - return f(); +{ + { + {} + {} + } + { + {} + {} + } } -f(); -f(); - -f(); - -f(); - -f(); +{ + { + {} + } + { + {} + {} + } +} -f(); +{ + { + {} + } + { + {} + {} + } +} -f(); +{ + {} + { + {} + {} + } +} -f(); +{ + {} + { + {} + {} + } +} -f(); +{ + { + {} + {} + } +} -f(); +{ + { + {} + {} + } +} -f(); +{ + { + {} + } +} -f(); +{ + { + {} + } +} -f(); +{ + {} +} -f(); +{ + {} +} -f(); +{} -f(); +{} -f(); -f(); +undefined; +" +`; -f(); +exports[`Statements: Blocks Block-statement-intro test case 1`] = ` +"{ + 1 + 1; +} -f(); +{ + 1 + 1; +} -f(); +{ + 2; +} -f(); +{ + 2; +} -f(); +2; -f(); +2; +" +`; -f(); +exports[`Statements: Blocks Block-statement-single-reduce test case 1`] = ` +"{ + 1; +} -f(); +{ + 1; +} -f(); +1; -f(); +1; +" +`; -f(); +exports[`Statements: Conditionals Conditional-statement-alternative test case 1`] = ` +"if (false) { + 1; +} else { + 2; +} -f(); +if (false) { + 1; +} else { + 2; +} -f(); +{ + undefined; + 2; +} -f(); +{ + undefined; + 2; +} -f(); +{ + 2; +} -f(); +{ + 2; +} -f(); +2; -f(); +2; +" +`; -f(); +exports[`Statements: Conditionals Conditional-statement-blockexpr-alternative test case 1 1`] = ` +"function foo(x) { + if (false) { + 1; + } else { + 2; + } +} +foo(0); -f(); +function foo(x) { + if (false) { + 1; + } else { + 2; + } +} +foo(0); -f(); +foo(0); -f(); +foo(0); -f(); +{ + if (false) { + 1; + } else { + 2; + } +}; -f(); +{ + if (false) { + 1; + } else { + 2; + } +}; -f(); +{ + { + 2; + } +}; -f(); +{ + { + 2; + } +}; -f(); +{ + 2; +}; -f(); +{ + 2; +}; -f(); +undefined; -f(); +undefined; +" +`; -f(); +exports[`Statements: Conditionals Conditional-statement-blockexpr-alternative test case 2 1`] = ` +"function foo(x) { + 3; + if (false) { + 1; + } else { + 2; + } +} +foo(0); -f(); +function foo(x) { + 3; + if (false) { + 1; + } else { + 2; + } +} +foo(0); -f(); +foo(0); -f(); +foo(0); -f(); +{ + 3; + if (false) { + 1; + } else { + 2; + } +}; -f(); +{ + 3; + if (false) { + 1; + } else { + 2; + } +}; -f(); +{ + 3; + { + 2; + } +}; -f(); +{ + 3; + { + 2; + } +}; -f(); +{ + 3; + 2; +}; -f(); +{ + 3; + 2; +}; -f(); +{ + 2; +}; -f(); +{ + 2; +}; -f(); +undefined; -f(); +undefined; +" +`; -f(); +exports[`Statements: Conditionals Conditional-statement-blockexpr-consequent test case 1 1`] = ` +"function foo(x) { + if (true) { + 1; + } else { + 2; + } +} +foo(0); -f(); +function foo(x) { + if (true) { + 1; + } else { + 2; + } +} +foo(0); -f(); +foo(0); -f(); +foo(0); -f(); +{ + if (true) { + 1; + } else { + 2; + } +}; -f(); +{ + if (true) { + 1; + } else { + 2; + } +}; -f(); +{ + { + 1; + } +}; -f(); +{ + { + 1; + } +}; -f(); +{ + 1; +}; -f(); +{ + 1; +}; -f(); +undefined; -f(); +undefined; +" +`; -f(); +exports[`Statements: Conditionals Conditional-statement-blockexpr-consequent test case 2 1`] = ` +"function foo(x) { + 3; + if (true) { + 1; + } else { + 2; + } +} +foo(0); -f(); +function foo(x) { + 3; + if (true) { + 1; + } else { + 2; + } +} +foo(0); -f(); +foo(0); -f(); +foo(0); -f(); +{ + 3; + if (true) { + 1; + } else { + 2; + } +}; -f(); +{ + 3; + if (true) { + 1; + } else { + 2; + } +}; -f(); +{ + 3; + { + 1; + } +}; -f(); +{ + 3; + { + 1; + } +}; -f(); +{ + 3; + 1; +}; -f(); +{ + 3; + 1; +}; -f(); +{ + 1; +}; -f(); +{ + 1; +}; -f(); +undefined; -f(); +undefined; +" +`; -f(); +exports[`Statements: Conditionals Conditional-statement-consequent test case 1`] = ` +"if (true) { + 1; +} else { + 2; +} -f(); +if (true) { + 1; +} else { + 2; +} -f(); +{ + undefined; + 1; +} -f(); +{ + undefined; + 1; +} -f(); +{ + 1; +} -f(); +{ + 1; +} -f(); +1; -f(); +1; +" +`; -f(); +exports[`Statements: Conditionals Conditional-statement-predicate test case 1`] = ` +"if (1 + 2 + 3 === 1) {} else {} -f(); +if (1 + 2 + 3 === 1) {} else {} -f(); +if (3 + 3 === 1) {} else {} -f(); +if (3 + 3 === 1) {} else {} + +if (6 === 1) {} else {} + +if (6 === 1) {} else {} + +if (false) {} else {} + +if (false) {} else {} + +{ + undefined; +} + +{ + undefined; +} + +undefined; + +undefined; +" +`; + +exports[`Statements: Constant declarations Evaluate-constant-declaration test case 1`] = ` +"const x = 1 + 2 + 3; + +const x = 1 + 2 + 3; + +const x = 3 + 3; + +const x = 3 + 3; + +const x = 6; + +const x = 6; + + +undefined; +" +`; + +exports[`Statements: Expression statements Expression-statement-reduce test case 1`] = ` +"1 + 2 + 3; + +1 + 2 + 3; + +3 + 3; + +3 + 3; + +6; + +6; +" +`; + +exports[`Test calling functions Argument reduction steps 1`] = ` +"(1 * 3)(2 * 3 + 10); + +(1 * 3)(2 * 3 + 10); + +(3)(2 * 3 + 10); + +(3)(2 * 3 + 10); + +(3)(6 + 10); + +(3)(6 + 10); + +(3)(16); + +(3)(16); +" +`; + +exports[`Test calling functions Built-in function 1`] = ` +"is_boolean(false); + +is_boolean(false); + +true; + +true; +" +`; + +exports[`Test calling functions Function that exists 1`] = ` +"function foo(x) { + return x; +} +foo(1 + 2); + +function foo(x) { + return x; +} +foo(1 + 2); + +foo(1 + 2); + +foo(1 + 2); + +foo(3); + +foo(3); + +3; + +3; +" +`; + +exports[`Test calling functions Imported module function 1`] = ` +"pair(1, 1); + +pair(1, 1); + +[1, 1]; + +[1, 1]; +" +`; + +exports[`Test calling functions Incorrect number of argument (less) 1`] = ` +"Start of evaluation +Function foo declared, parameter(s) a required +Function foo declared, parameter(s) a required +Line 5: Expected 1 arguments, but got 0." +`; + +exports[`Test calling functions Incorrect number of argument (more) 1`] = ` +"Start of evaluation +Function foo declared, parameter(s) a required +Function foo declared, parameter(s) a required +Line 5: Expected 1 arguments, but got 3." +`; + +exports[`Test calling functions Literal function should error 1`] = ` +"Start of evaluation +Line 2: Calling non-function value 1." +`; + +exports[`Test calling functions Math function 1`] = ` +"math_abs(-1); + +math_abs(-1); + +1; + +1; +" +`; + +exports[`Test catching errors from built in function Incorrect number of arguments 1`] = ` +"Start of evaluation +Expected 2 arguments, but got 1" +`; + +exports[`Test catching errors from built in function Incorrect type of argument for math function 1`] = ` +"Start of evaluation +Math functions must be called with number arguments" +`; + +exports[`Test catching errors from built in function Incorrect type of arguments for module function 1`] = ` +"Start of evaluation +" +`; + +exports[`Test catching of undeclared variable error Variable not declared in block statement 1`] = `"Line 3: Name undeclared_variable not declared."`; + +exports[`Test catching of undeclared variable error Variable not declared in function declaration 1`] = `"Line 3: Name undeclared_variable not declared."`; + +exports[`Test catching of undeclared variable error Variable not declared in program 1`] = `"Line 2: Name undeclared_variable not declared."`; + +exports[`Test correct evaluation sequence when first statement is a value Irreducible second statement in block 1`] = ` +"{ + 'value'; + 'also a value'; +} + +{ + 'value'; + 'also a value'; +} + +{ + 'also a value'; +} + +{ + 'also a value'; +} + +'also a value'; + +'also a value'; +" +`; +exports[`Test correct evaluation sequence when first statement is a value Irreducible second statement in functions 1`] = ` +>>>>>>> origin/master +"function f() { + return f(); +} f(); +function f() { + return f(); +} f(); f(); @@ -4826,296 +5340,1386 @@ f(); f(); -" -`; +f(); -exports[`Snapshot code snippets const declarations in blocks subst into call expressions 1`] = ` -"const z = 1; -function f(g) { - const z = 3; - return (y => z + z)(z); -} -f(undefined); +f(); -const z = 1; -function f(g) { - const z = 3; - return (y => z + z)(z); -} -f(undefined); +f(); -function f(g) { - const z = 3; - return (y => z + z)(z); -} -f(undefined); +f(); -function f(g) { - const z = 3; - return (y => z + z)(z); -} -f(undefined); +f(); -f(undefined); +f(); -f(undefined); +f(); -{ - const z = 3; - return (y => z + z)(z); -}; +f(); -{ - const z = 3; - return (y => z + z)(z); -}; +f(); -{ - return (y => 3 + 3)(3); -}; +f(); -{ - return (y => 3 + 3)(3); -}; +f(); -(y => 3 + 3)(3); +f(); -(y => 3 + 3)(3); +f(); -3 + 3; +f(); -3 + 3; +f(); + +f(); + +f(); + +f(); + +f(); + +f(); + +f(); + +f(); + +f(); + +f(); + +f(); + +f(); + +f(); + +f(); + +f(); + +f(); + +f(); + +f(); + +f(); + +f(); + +f(); + +f(); + +f(); + +f(); + +f(); + +f(); + +f(); + +f(); + +f(); + +f(); + +f(); + +f(); + +f(); + +f(); + +f(); + +f(); + +f(); + +f(); + +f(); + +f(); + +f(); + +f(); + +f(); + +f(); + +f(); + +f(); + +f(); + +f(); + +f(); + +f(); + +f(); + +f(); + +f(); + +f(); + +f(); + +f(); + +f(); + +f(); + +f(); + +f(); + +f(); + +f(); + +f(); + +f(); + +f(); + +f(); + +f(); + +f(); + +f(); + +f(); + +f(); + +f(); + +f(); + +f(); + +f(); + +f(); + +f(); + +f(); + +f(); + +f(); + +f(); + +f(); + +f(); + +f(); + +f(); + +f(); + +f(); + +" +`; + +exports[`Snapshot code snippets const declarations in blocks subst into call expressions 1`] = ` +"const z = 1; +function f(g) { + const z = 3; + return (y => z + z)(z); +} +f(undefined); + +const z = 1; +function f(g) { + const z = 3; + return (y => z + z)(z); +} +f(undefined); + +function f(g) { + const z = 3; + return (y => z + z)(z); +} +f(undefined); + +function f(g) { + const z = 3; + return (y => z + z)(z); +} +f(undefined); + +f(undefined); + +f(undefined); + +{ + const z = 3; + return (y => z + z)(z); +}; + +{ + const z = 3; + return (y => z + z)(z); +}; + +{ + return (y => 3 + 3)(3); +}; + +{ + return (y => 3 + 3)(3); +}; + +(y => 3 + 3)(3); + +(y => 3 + 3)(3); + +3 + 3; + +3 + 3; + +6; + +6; +" +`; + +exports[`Snapshot code snippets expmod 1`] = ` +"function is_even(n) { + return n % 2 === 0; +} +function expmod(base, exp, m) { + if (exp === 0) { + return 1; + } else { + if (is_even(exp)) { + const to_half = expmod(base, exp / 2, m); + return to_half * to_half % m; + } else { + return base * expmod(base, exp - 1, m) % m; + } + } +} +expmod(4, 3, 5); + +function is_even(n) { + return n % 2 === 0; +} +function expmod(base, exp, m) { + if (exp === 0) { + return 1; + } else { + if (is_even(exp)) { + const to_half = expmod(base, exp / 2, m); + return to_half * to_half % m; + } else { + return base * expmod(base, exp - 1, m) % m; + } + } +} +expmod(4, 3, 5); + +function expmod(base, exp, m) { + if (exp === 0) { + return 1; + } else { + if (is_even(exp)) { + const to_half = expmod(base, exp / 2, m); + return to_half * to_half % m; + } else { + return base * expmod(base, exp - 1, m) % m; + } + } +} +expmod(4, 3, 5); + +function expmod(base, exp, m) { + if (exp === 0) { + return 1; + } else { + if (is_even(exp)) { + const to_half = expmod(base, exp / 2, m); + return to_half * to_half % m; + } else { + return base * expmod(base, exp - 1, m) % m; + } + } +} +expmod(4, 3, 5); + +expmod(4, 3, 5); + +expmod(4, 3, 5); + +{ + if (3 === 0) { + return 1; + } else { + if (is_even(3)) { + const to_half = expmod(4, 3 / 2, 5); + return to_half * to_half % 5; + } else { + return 4 * expmod(4, 3 - 1, 5) % 5; + } + } +}; + +{ + if (3 === 0) { + return 1; + } else { + if (is_even(3)) { + const to_half = expmod(4, 3 / 2, 5); + return to_half * to_half % 5; + } else { + return 4 * expmod(4, 3 - 1, 5) % 5; + } + } +}; + +{ + if (false) { + return 1; + } else { + if (is_even(3)) { + const to_half = expmod(4, 3 / 2, 5); + return to_half * to_half % 5; + } else { + return 4 * expmod(4, 3 - 1, 5) % 5; + } + } +}; + +{ + if (false) { + return 1; + } else { + if (is_even(3)) { + const to_half = expmod(4, 3 / 2, 5); + return to_half * to_half % 5; + } else { + return 4 * expmod(4, 3 - 1, 5) % 5; + } + } +}; + +{ + { + if (is_even(3)) { + const to_half = expmod(4, 3 / 2, 5); + return to_half * to_half % 5; + } else { + return 4 * expmod(4, 3 - 1, 5) % 5; + } + } +}; + +{ + { + if (is_even(3)) { + const to_half = expmod(4, 3 / 2, 5); + return to_half * to_half % 5; + } else { + return 4 * expmod(4, 3 - 1, 5) % 5; + } + } +}; + +{ + { + if (3 % 2 === 0) { + const to_half = expmod(4, 3 / 2, 5); + return to_half * to_half % 5; + } else { + return 4 * expmod(4, 3 - 1, 5) % 5; + } + } +}; + +{ + { + if (3 % 2 === 0) { + const to_half = expmod(4, 3 / 2, 5); + return to_half * to_half % 5; + } else { + return 4 * expmod(4, 3 - 1, 5) % 5; + } + } +}; + +{ + { + if (1 === 0) { + const to_half = expmod(4, 3 / 2, 5); + return to_half * to_half % 5; + } else { + return 4 * expmod(4, 3 - 1, 5) % 5; + } + } +}; + +{ + { + if (1 === 0) { + const to_half = expmod(4, 3 / 2, 5); + return to_half * to_half % 5; + } else { + return 4 * expmod(4, 3 - 1, 5) % 5; + } + } +}; + +{ + { + if (false) { + const to_half = expmod(4, 3 / 2, 5); + return to_half * to_half % 5; + } else { + return 4 * expmod(4, 3 - 1, 5) % 5; + } + } +}; + +{ + { + if (false) { + const to_half = expmod(4, 3 / 2, 5); + return to_half * to_half % 5; + } else { + return 4 * expmod(4, 3 - 1, 5) % 5; + } + } +}; + +{ + { + { + undefined; + return 4 * expmod(4, 3 - 1, 5) % 5; + } + } +}; + +{ + { + { + undefined; + return 4 * expmod(4, 3 - 1, 5) % 5; + } + } +}; + +{ + { + { + return 4 * expmod(4, 3 - 1, 5) % 5; + } + } +}; + +{ + { + { + return 4 * expmod(4, 3 - 1, 5) % 5; + } + } +}; + +{ + { + return 4 * expmod(4, 3 - 1, 5) % 5; + } +}; + +{ + { + return 4 * expmod(4, 3 - 1, 5) % 5; + } +}; + +{ + return 4 * expmod(4, 3 - 1, 5) % 5; +}; + +{ + return 4 * expmod(4, 3 - 1, 5) % 5; +}; + +4 * expmod(4, 3 - 1, 5) % 5; + +4 * expmod(4, 3 - 1, 5) % 5; + +4 * expmod(4, 2, 5) % 5; + +4 * expmod(4, 2, 5) % 5; + +4 * { + if (2 === 0) { + return 1; + } else { + if (is_even(2)) { + const to_half = expmod(4, 2 / 2, 5); + return to_half * to_half % 5; + } else { + return 4 * expmod(4, 2 - 1, 5) % 5; + } + } +} % 5; + +4 * { + if (2 === 0) { + return 1; + } else { + if (is_even(2)) { + const to_half = expmod(4, 2 / 2, 5); + return to_half * to_half % 5; + } else { + return 4 * expmod(4, 2 - 1, 5) % 5; + } + } +} % 5; + +4 * { + if (false) { + return 1; + } else { + if (is_even(2)) { + const to_half = expmod(4, 2 / 2, 5); + return to_half * to_half % 5; + } else { + return 4 * expmod(4, 2 - 1, 5) % 5; + } + } +} % 5; + +4 * { + if (false) { + return 1; + } else { + if (is_even(2)) { + const to_half = expmod(4, 2 / 2, 5); + return to_half * to_half % 5; + } else { + return 4 * expmod(4, 2 - 1, 5) % 5; + } + } +} % 5; + +4 * { + { + if (is_even(2)) { + const to_half = expmod(4, 2 / 2, 5); + return to_half * to_half % 5; + } else { + return 4 * expmod(4, 2 - 1, 5) % 5; + } + } +} % 5; + +4 * { + { + if (is_even(2)) { + const to_half = expmod(4, 2 / 2, 5); + return to_half * to_half % 5; + } else { + return 4 * expmod(4, 2 - 1, 5) % 5; + } + } +} % 5; + +4 * { + { + if (2 % 2 === 0) { + const to_half = expmod(4, 2 / 2, 5); + return to_half * to_half % 5; + } else { + return 4 * expmod(4, 2 - 1, 5) % 5; + } + } +} % 5; + +4 * { + { + if (2 % 2 === 0) { + const to_half = expmod(4, 2 / 2, 5); + return to_half * to_half % 5; + } else { + return 4 * expmod(4, 2 - 1, 5) % 5; + } + } +} % 5; + +4 * { + { + if (0 === 0) { + const to_half = expmod(4, 2 / 2, 5); + return to_half * to_half % 5; + } else { + return 4 * expmod(4, 2 - 1, 5) % 5; + } + } +} % 5; + +4 * { + { + if (0 === 0) { + const to_half = expmod(4, 2 / 2, 5); + return to_half * to_half % 5; + } else { + return 4 * expmod(4, 2 - 1, 5) % 5; + } + } +} % 5; + +4 * { + { + if (true) { + const to_half = expmod(4, 2 / 2, 5); + return to_half * to_half % 5; + } else { + return 4 * expmod(4, 2 - 1, 5) % 5; + } + } +} % 5; + +4 * { + { + if (true) { + const to_half = expmod(4, 2 / 2, 5); + return to_half * to_half % 5; + } else { + return 4 * expmod(4, 2 - 1, 5) % 5; + } + } +} % 5; + +4 * { + { + { + undefined; + const to_half = expmod(4, 2 / 2, 5); + return to_half * to_half % 5; + } + } +} % 5; + +4 * { + { + { + undefined; + const to_half = expmod(4, 2 / 2, 5); + return to_half * to_half % 5; + } + } +} % 5; + +4 * { + { + { + undefined; + const to_half = expmod(4, 1, 5); + return to_half * to_half % 5; + } + } +} % 5; + +4 * { + { + { + undefined; + const to_half = expmod(4, 1, 5); + return to_half * to_half % 5; + } + } +} % 5; + +4 * { + { + { + undefined; + const to_half = { + if (1 === 0) { + return 1; + } else { + if (is_even(1)) { + const to_half = expmod(4, 1 / 2, 5); + return to_half * to_half % 5; + } else { + return 4 * expmod(4, 1 - 1, 5) % 5; + } + } + }; + return to_half * to_half % 5; + } + } +} % 5; + +4 * { + { + { + undefined; + const to_half = { + if (1 === 0) { + return 1; + } else { + if (is_even(1)) { + const to_half = expmod(4, 1 / 2, 5); + return to_half * to_half % 5; + } else { + return 4 * expmod(4, 1 - 1, 5) % 5; + } + } + }; + return to_half * to_half % 5; + } + } +} % 5; + +4 * { + { + { + undefined; + const to_half = { + if (false) { + return 1; + } else { + if (is_even(1)) { + const to_half = expmod(4, 1 / 2, 5); + return to_half * to_half % 5; + } else { + return 4 * expmod(4, 1 - 1, 5) % 5; + } + } + }; + return to_half * to_half % 5; + } + } +} % 5; + +4 * { + { + { + undefined; + const to_half = { + if (false) { + return 1; + } else { + if (is_even(1)) { + const to_half = expmod(4, 1 / 2, 5); + return to_half * to_half % 5; + } else { + return 4 * expmod(4, 1 - 1, 5) % 5; + } + } + }; + return to_half * to_half % 5; + } + } +} % 5; + +4 * { + { + { + undefined; + const to_half = { + { + if (is_even(1)) { + const to_half = expmod(4, 1 / 2, 5); + return to_half * to_half % 5; + } else { + return 4 * expmod(4, 1 - 1, 5) % 5; + } + } + }; + return to_half * to_half % 5; + } + } +} % 5; + +4 * { + { + { + undefined; + const to_half = { + { + if (is_even(1)) { + const to_half = expmod(4, 1 / 2, 5); + return to_half * to_half % 5; + } else { + return 4 * expmod(4, 1 - 1, 5) % 5; + } + } + }; + return to_half * to_half % 5; + } + } +} % 5; + +4 * { + { + { + undefined; + const to_half = { + { + if (1 % 2 === 0) { + const to_half = expmod(4, 1 / 2, 5); + return to_half * to_half % 5; + } else { + return 4 * expmod(4, 1 - 1, 5) % 5; + } + } + }; + return to_half * to_half % 5; + } + } +} % 5; + +4 * { + { + { + undefined; + const to_half = { + { + if (1 % 2 === 0) { + const to_half = expmod(4, 1 / 2, 5); + return to_half * to_half % 5; + } else { + return 4 * expmod(4, 1 - 1, 5) % 5; + } + } + }; + return to_half * to_half % 5; + } + } +} % 5; + +4 * { + { + { + undefined; + const to_half = { + { + if (1 === 0) { + const to_half = expmod(4, 1 / 2, 5); + return to_half * to_half % 5; + } else { + return 4 * expmod(4, 1 - 1, 5) % 5; + } + } + }; + return to_half * to_half % 5; + } + } +} % 5; + +4 * { + { + { + undefined; + const to_half = { + { + if (1 === 0) { + const to_half = expmod(4, 1 / 2, 5); + return to_half * to_half % 5; + } else { + return 4 * expmod(4, 1 - 1, 5) % 5; + } + } + }; + return to_half * to_half % 5; + } + } +} % 5; + +4 * { + { + { + undefined; + const to_half = { + { + if (false) { + const to_half = expmod(4, 1 / 2, 5); + return to_half * to_half % 5; + } else { + return 4 * expmod(4, 1 - 1, 5) % 5; + } + } + }; + return to_half * to_half % 5; + } + } +} % 5; + +4 * { + { + { + undefined; + const to_half = { + { + if (false) { + const to_half = expmod(4, 1 / 2, 5); + return to_half * to_half % 5; + } else { + return 4 * expmod(4, 1 - 1, 5) % 5; + } + } + }; + return to_half * to_half % 5; + } + } +} % 5; + +4 * { + { + { + undefined; + const to_half = { + { + { + undefined; + return 4 * expmod(4, 1 - 1, 5) % 5; + } + } + }; + return to_half * to_half % 5; + } + } +} % 5; + +4 * { + { + { + undefined; + const to_half = { + { + { + undefined; + return 4 * expmod(4, 1 - 1, 5) % 5; + } + } + }; + return to_half * to_half % 5; + } + } +} % 5; + +4 * { + { + { + undefined; + const to_half = { + { + { + return 4 * expmod(4, 1 - 1, 5) % 5; + } + } + }; + return to_half * to_half % 5; + } + } +} % 5; + +4 * { + { + { + undefined; + const to_half = { + { + { + return 4 * expmod(4, 1 - 1, 5) % 5; + } + } + }; + return to_half * to_half % 5; + } + } +} % 5; + +4 * { + { + { + undefined; + const to_half = { + { + return 4 * expmod(4, 1 - 1, 5) % 5; + } + }; + return to_half * to_half % 5; + } + } +} % 5; + +4 * { + { + { + undefined; + const to_half = { + { + return 4 * expmod(4, 1 - 1, 5) % 5; + } + }; + return to_half * to_half % 5; + } + } +} % 5; -6; +4 * { + { + { + undefined; + const to_half = { + return 4 * expmod(4, 1 - 1, 5) % 5; + }; + return to_half * to_half % 5; + } + } +} % 5; -6; -" -`; +4 * { + { + { + undefined; + const to_half = { + return 4 * expmod(4, 1 - 1, 5) % 5; + }; + return to_half * to_half % 5; + } + } +} % 5; -exports[`Snapshot code snippets expmod 1`] = ` -"function is_even(n) { - return n % 2 === 0; -} -function expmod(base, exp, m) { - if (exp === 0) { - return 1; - } else { - if (is_even(exp)) { - const to_half = expmod(base, exp / 2, m); - return to_half * to_half % m; - } else { - return base * expmod(base, exp - 1, m) % m; +4 * { + { + { + undefined; + const to_half = 4 * expmod(4, 1 - 1, 5) % 5; + return to_half * to_half % 5; } } -} -expmod(4, 3, 5); +} % 5; -function is_even(n) { - return n % 2 === 0; -} -function expmod(base, exp, m) { - if (exp === 0) { - return 1; - } else { - if (is_even(exp)) { - const to_half = expmod(base, exp / 2, m); - return to_half * to_half % m; - } else { - return base * expmod(base, exp - 1, m) % m; +4 * { + { + { + undefined; + const to_half = 4 * expmod(4, 1 - 1, 5) % 5; + return to_half * to_half % 5; } } -} -expmod(4, 3, 5); +} % 5; -function expmod(base, exp, m) { - if (exp === 0) { - return 1; - } else { - if (is_even(exp)) { - const to_half = expmod(base, exp / 2, m); - return to_half * to_half % m; - } else { - return base * expmod(base, exp - 1, m) % m; +4 * { + { + { + undefined; + const to_half = 4 * expmod(4, 0, 5) % 5; + return to_half * to_half % 5; } } -} -expmod(4, 3, 5); +} % 5; -function expmod(base, exp, m) { - if (exp === 0) { - return 1; - } else { - if (is_even(exp)) { - const to_half = expmod(base, exp / 2, m); - return to_half * to_half % m; - } else { - return base * expmod(base, exp - 1, m) % m; +4 * { + { + { + undefined; + const to_half = 4 * expmod(4, 0, 5) % 5; + return to_half * to_half % 5; } } -} -expmod(4, 3, 5); +} % 5; -expmod(4, 3, 5); +4 * { + { + { + undefined; + const to_half = 4 * { + if (0 === 0) { + return 1; + } else { + if (is_even(0)) { + const to_half = expmod(4, 0 / 2, 5); + return to_half * to_half % 5; + } else { + return 4 * expmod(4, 0 - 1, 5) % 5; + } + } + } % 5; + return to_half * to_half % 5; + } + } +} % 5; -expmod(4, 3, 5); +4 * { + { + { + undefined; + const to_half = 4 * { + if (0 === 0) { + return 1; + } else { + if (is_even(0)) { + const to_half = expmod(4, 0 / 2, 5); + return to_half * to_half % 5; + } else { + return 4 * expmod(4, 0 - 1, 5) % 5; + } + } + } % 5; + return to_half * to_half % 5; + } + } +} % 5; -{ - if (3 === 0) { - return 1; - } else { - if (is_even(3)) { - const to_half = expmod(4, 3 / 2, 5); +4 * { + { + { + undefined; + const to_half = 4 * { + if (true) { + return 1; + } else { + if (is_even(0)) { + const to_half = expmod(4, 0 / 2, 5); + return to_half * to_half % 5; + } else { + return 4 * expmod(4, 0 - 1, 5) % 5; + } + } + } % 5; return to_half * to_half % 5; - } else { - return 4 * expmod(4, 3 - 1, 5) % 5; } } -}; +} % 5; -{ - if (3 === 0) { - return 1; - } else { - if (is_even(3)) { - const to_half = expmod(4, 3 / 2, 5); +4 * { + { + { + undefined; + const to_half = 4 * { + if (true) { + return 1; + } else { + if (is_even(0)) { + const to_half = expmod(4, 0 / 2, 5); + return to_half * to_half % 5; + } else { + return 4 * expmod(4, 0 - 1, 5) % 5; + } + } + } % 5; return to_half * to_half % 5; - } else { - return 4 * expmod(4, 3 - 1, 5) % 5; } } -}; +} % 5; -{ - if (false) { - return 1; - } else { - if (is_even(3)) { - const to_half = expmod(4, 3 / 2, 5); +4 * { + { + { + undefined; + const to_half = 4 * { + { + return 1; + } + } % 5; return to_half * to_half % 5; - } else { - return 4 * expmod(4, 3 - 1, 5) % 5; } } -}; +} % 5; -{ - if (false) { - return 1; - } else { - if (is_even(3)) { - const to_half = expmod(4, 3 / 2, 5); +4 * { + { + { + undefined; + const to_half = 4 * { + { + return 1; + } + } % 5; return to_half * to_half % 5; - } else { - return 4 * expmod(4, 3 - 1, 5) % 5; } } -}; +} % 5; -{ +4 * { { - if (is_even(3)) { - const to_half = expmod(4, 3 / 2, 5); + { + undefined; + const to_half = 4 * { + return 1; + } % 5; return to_half * to_half % 5; - } else { - return 4 * expmod(4, 3 - 1, 5) % 5; } } -}; +} % 5; -{ +4 * { { - if (is_even(3)) { - const to_half = expmod(4, 3 / 2, 5); + { + undefined; + const to_half = 4 * { + return 1; + } % 5; return to_half * to_half % 5; - } else { - return 4 * expmod(4, 3 - 1, 5) % 5; } } -}; +} % 5; -{ +4 * { { - if (3 % 2 === 0) { - const to_half = expmod(4, 3 / 2, 5); + { + undefined; + const to_half = 4 * 1 % 5; return to_half * to_half % 5; - } else { - return 4 * expmod(4, 3 - 1, 5) % 5; } } -}; +} % 5; -{ +4 * { { - if (3 % 2 === 0) { - const to_half = expmod(4, 3 / 2, 5); + { + undefined; + const to_half = 4 * 1 % 5; return to_half * to_half % 5; - } else { - return 4 * expmod(4, 3 - 1, 5) % 5; } } -}; +} % 5; -{ +4 * { { - if (1 === 0) { - const to_half = expmod(4, 3 / 2, 5); + { + undefined; + const to_half = 4 % 5; return to_half * to_half % 5; - } else { - return 4 * expmod(4, 3 - 1, 5) % 5; } } -}; +} % 5; -{ +4 * { { - if (1 === 0) { - const to_half = expmod(4, 3 / 2, 5); + { + undefined; + const to_half = 4 % 5; return to_half * to_half % 5; - } else { - return 4 * expmod(4, 3 - 1, 5) % 5; } } -}; +} % 5; -{ +4 * { { - if (false) { - const to_half = expmod(4, 3 / 2, 5); + { + undefined; + const to_half = 4; return to_half * to_half % 5; - } else { - return 4 * expmod(4, 3 - 1, 5) % 5; } } -}; +} % 5; -{ +4 * { { - if (false) { - const to_half = expmod(4, 3 / 2, 5); + { + undefined; + const to_half = 4; return to_half * to_half % 5; - } else { - return 4 * expmod(4, 3 - 1, 5) % 5; } } -}; +} % 5; -{ +4 * { { { undefined; - return 4 * expmod(4, 3 - 1, 5) % 5; + return 4 * 4 % 5; } } -}; +} % 5; -{ +4 * { { { undefined; - return 4 * expmod(4, 3 - 1, 5) % 5; + return 4 * 4 % 5; } } -}; +} % 5; + +4 * { + { + { + return 4 * 4 % 5; + } + } +} % 5; + +4 * { + { + { + return 4 * 4 % 5; + } + } +} % 5; + +4 * { + { + return 4 * 4 % 5; + } +} % 5; + +4 * { + { + return 4 * 4 % 5; + } +} % 5; + +4 * { + return 4 * 4 % 5; +} % 5; + +4 * { + return 4 * 4 % 5; +} % 5; + +4 * (4 * 4 % 5) % 5; + +4 * (4 * 4 % 5) % 5; + +4 * (16 % 5) % 5; + +4 * (16 % 5) % 5; + +4 * 1 % 5; + +4 * 1 % 5; + +4 % 5; + +4 % 5; + +4; + +4; " `; diff --git a/src/stepper/lib.ts b/src/stepper/lib.ts index c73947667..c2e2d73f9 100644 --- a/src/stepper/lib.ts +++ b/src/stepper/lib.ts @@ -3,6 +3,7 @@ import * as es from 'estree' import * as misc from '../stdlib/misc' import { Context, substituterNodes } from '../types' import * as ast from '../utils/ast/astCreator' +import { BuiltInFunctionError } from '../errors/errors' import { nodeToValue, nodeToValueWithContext, valueToExpression } from './converter' import { codify } from './stepper' import { isBuiltinFunction, isNumber } from './util' @@ -30,13 +31,13 @@ export function stringify(val: substituterNodes): es.Literal { // defineBuiltin(context, 'error(str)', misc.error_message) export function error(val: substituterNodes, str?: substituterNodes) { const output = (str === undefined ? '' : str + ' ') + stringify(val) - throw new Error(output) + throw new BuiltInFunctionError(output) } // defineBuiltin(context, 'prompt(str)', prompt) export function prompt(str: substituterNodes): es.Literal { if (str.type !== 'Literal' || typeof str.value !== 'string') { - throw new Error('Argument to error must be a string.') + throw new BuiltInFunctionError('Argument to error must be a string.') } const result = window.prompt(str.value as string) return ast.literal((result ? result : null) as string) @@ -99,9 +100,9 @@ export function parse_int(str: substituterNodes, radix: substituterNodes): es.Ex export function evaluateMath(mathFn: string, ...args: substituterNodes[]): es.Expression { const fn = Math[mathFn.split('_')[1]] if (!fn) { - throw new Error(`Math function ${mathFn} not found.`) + throw new BuiltInFunctionError(`Math function ${mathFn} not found.`) } else if (args.some(arg => !isNumber(arg))) { - throw new Error(`Math functions must be called with number arguments`) + throw new BuiltInFunctionError(`Math functions must be called with number arguments`) } const jsArgs = args.map(nodeToValue) return valueToExpression(fn(...jsArgs)) @@ -115,7 +116,7 @@ export function evaluateModuleFunction( ): es.Expression { const fn = context.runtime.environments[0].head[moduleFn] if (!fn) { - throw new Error(`Module function ${moduleFn} not found.`) + throw new BuiltInFunctionError(`Module function ${moduleFn} not found.`) } const jsArgs = args.map(arg => nodeToValueWithContext(arg, context)) return valueToExpression(fn(...jsArgs), context) @@ -126,7 +127,7 @@ export function evaluateModuleFunction( // defineBuiltin(context, 'pair(left, right)', list.pair) export function pair(left: substituterNodes, right: substituterNodes): es.ArrayExpression { if (left == null || right == null) { - throw new Error( + throw new BuiltInFunctionError( //Count the number of arguments that are not undefined `Expected 2 arguments, but got ${[left, right].filter(x => x != undefined).length}` ) @@ -136,13 +137,16 @@ export function pair(left: substituterNodes, right: substituterNodes): es.ArrayE // defineBuiltin(context, 'is_pair(val)', list.is_pair) export function is_pair(val: substituterNodes): es.Literal { + if (val == null) { + throw new BuiltInFunctionError('Expected 1 argument, but got 0') + } return ast.literal(val.type === 'ArrayExpression' && val.elements.length === 2) } // defineBuiltin(context, 'head(xs)', list.head) export function head(xs: substituterNodes): es.Expression { if (is_pair(xs).value === false) { - throw new Error(`${codify(xs)} is not a pair`) + throw new BuiltInFunctionError(`${codify(xs)} is not a pair`) } return (xs as es.ArrayExpression).elements[0] as es.Expression } @@ -150,7 +154,7 @@ export function head(xs: substituterNodes): es.Expression { // defineBuiltin(context, 'tail(xs)', list.tail) export function tail(xs: substituterNodes): es.Expression { if (is_pair(xs).value === false) { - throw new Error(`${codify(xs)} is not a pair`) + throw new BuiltInFunctionError(`${codify(xs)} is not a pair`) } return (xs as es.ArrayExpression).elements[1] as es.Expression } diff --git a/src/stepper/stepper.ts b/src/stepper/stepper.ts index 8645d6dfc..1cab80886 100644 --- a/src/stepper/stepper.ts +++ b/src/stepper/stepper.ts @@ -1751,7 +1751,9 @@ function reduceMain( ] } }, - + /** + * Please refer to reduction of Program in stepper specification + */ Program( node: es.Program, context: Context, @@ -1974,7 +1976,9 @@ function reduceMain( ] } }, - + /** + * Please refer to reduction of BlockStatement in stepper specification + */ BlockStatement( node: es.BlockStatement, context: Context, @@ -2032,8 +2036,9 @@ function reduceMain( const stmt = ast.expressionStatement(firstStatement.expression) return [stmt, context, paths, explain(node)] } else if ( - secondStatement.type == 'ExpressionStatement' && - isIrreducible(secondStatement.expression, context) + (secondStatement.type == 'ExpressionStatement' && + isIrreducible(secondStatement.expression, context)) || + secondStatement.type == 'ReturnStatement' ) { paths[0].push('body[0]') paths.push([]) @@ -2194,7 +2199,10 @@ function reduceMain( ] } }, - + /** + * Please refer to reduction of BlockExpression in stepper specification + * This is related to function application + */ BlockExpression( node: BlockExpression, context: Context, @@ -3345,6 +3353,7 @@ export function getEvaluationSteps( const steps: [es.Program, string[][], string][] = [] try { checkProgramForUndefinedVariables(program, context) + //reading the step limit const limit = stepLimit === undefined ? 1000 : stepLimit % 2 === 0 ? stepLimit : stepLimit + 1 evaluateImports(program, context) // starts with substituting predefined constants @@ -3361,6 +3370,9 @@ export function getEvaluationSteps( [], 'Start of evaluation' ] + /** + * push the content into frontend for showing contents in the webpage + */ steps.push([ reducedWithPath[0] as es.Program, reducedWithPath[2].length > 1 ? reducedWithPath[2].slice(1) : reducedWithPath[2], @@ -3372,6 +3384,10 @@ export function getEvaluationSteps( // odd steps: program after reduction let i = 1 let limitExceeded = false + /** + * This is the start of actual reduction, calling reduceMain function in each iteration + * cause the program get reduced by one step at one iteration + */ while (isStatementsReducible(reducedWithPath[0] as es.Program, context)) { //Should work on isReducibleStatement instead of checking body.length if (steps.length === limit) { @@ -3379,6 +3395,7 @@ export function getEvaluationSteps( limitExceeded = true break } + //the program reduce by one step here reducedWithPath = reduceMain(reducedWithPath[0], context) steps.push([ reducedWithPath[0] as es.Program, @@ -3405,9 +3422,6 @@ export function getEvaluationSteps( ]) } } - if (steps.length === 0) { - steps.push([reducedWithPath[0] as es.Program, [], 'Nothing to evaluate']) - } return steps } catch (error) { if (error instanceof RuntimeSourceError) { diff --git a/src/stepper/util.ts b/src/stepper/util.ts index 4246c5611..c30800f0b 100644 --- a/src/stepper/util.ts +++ b/src/stepper/util.ts @@ -4,10 +4,13 @@ import { Context } from '..' import * as errors from '../errors/errors' import { RuntimeSourceError } from '../errors/runtimeSourceError' import { BlockExpression, Environment, Node, substituterNodes, Value } from '../types' +import { UNKNOWN_LOCATION } from '../constants' import * as builtin from './lib' export function prettyPrintError(error: RuntimeSourceError): string { - return `Line ${error.location.start.line}: ${error.explain()}` + return error.location == UNKNOWN_LOCATION + ? error.explain() + : `Line ${error.location.start.line}: ${error.explain()}` } export function isBuiltinFunction(node: substituterNodes): boolean { diff --git a/src/types.ts b/src/types.ts index 0dbf7424e..10cd80453 100644 --- a/src/types.ts +++ b/src/types.ts @@ -286,11 +286,12 @@ export interface StatementSequence extends es.BaseStatement { /** * js-slang's custom Node type - this should be used wherever es.Node is used. */ -export type Node = +export type Node = { isEnvDependent?: boolean } & ( | es.Node | StatementSequence | es.MaybeNamedClassDeclaration | es.MaybeNamedFunctionDeclaration +) /* Although the ESTree specifications supposedly provide a Directive interface, the index file does not seem to export it. As such this interface was created here to fulfil the same purpose.