@ -34,9 +34,9 @@ describe( "compiler pass |generateBytecode|", function () {
"c = 'c'"
] . join ( "\n" ) , {
rules : [
{ bytecode : [ 18, 0 , 2 , 2 , 22 , 0 , 2 3, 1 ] } ,
{ bytecode : [ 18, 2 , 2 , 2 , 22 , 2 , 23 , 3 ] } ,
{ bytecode : [ 18, 4 , 2 , 2 , 22 , 4 , 2 3, 5 ] }
{ bytecode : [ 23, 1 , 18, 0 , 2 , 1 , 22 , 0 , 3 ] } ,
{ bytecode : [ 23, 3 , 18 , 2 , 2 , 1 , 22 , 2 , 3 ] } ,
{ bytecode : [ 23, 5 , 18, 4 , 2 , 1 , 22 , 4 , 3 ] }
]
} ) ;
@ -66,7 +66,7 @@ describe( "compiler pass |generateBytecode|", function () {
it ( "generates correct bytecode" , function ( ) {
expect ( pass ) . to . changeAST ( "start = 'a'" , bytecodeDetails ( [
18, 0 , 2 , 2 , 22 , 0 , 2 3, 1 // <expression>
23, 1 , 18, 0 , 2 , 1 , 22 , 0 , 3 // <expression>
] ) ) ;
} ) ;
@ -80,11 +80,10 @@ describe( "compiler pass |generateBytecode|", function () {
it ( "generates correct bytecode" , function ( ) {
expect ( pass ) . to . changeAST ( grammar , bytecodeDetails ( [
28 , // SILENT_FAILS_ON
18 , 1 , 2 , 2 , 22 , 1 , 23 , 2 , // <expression>
29 , // SILENT_FAILS_OFF
14 , 2 , 0 , // IF_ERROR
23 , 0 // * FAIL
23 , 0 , // EXPECT <0>
28 , // SILENT_FAILS_ON
23 , 2 , 18 , 1 , 2 , 1 , 22 , 1 , 3 , // <expression>
29 // SILENT_FAILS_OFF
] ) ) ;
} ) ;
@ -106,13 +105,13 @@ describe( "compiler pass |generateBytecode|", function () {
it ( "generates correct bytecode" , function ( ) {
expect ( pass ) . to . changeAST ( "start = 'a' / 'b' / 'c'" , bytecodeDetails ( [
18, 0 , 2 , 2, 22 , 0 , 23 , 1 , // <alternatives[0]>
14 , 2 1, 0 , // IF_ERROR
6 , // * POP
18, 2 , 2 , 2 , 22 , 2 , 23 , 3 , // <alternatives[1]>
14 , 9 , 0 , // IF_ERROR
6 , // * POP
18, 4 , 2 , 2, 22 , 4 , 23 , 5 // <alternatives[2]>
23, 1 , 18, 0 , 2 , 1, 22 , 0 , 3 , // <alternatives[0]>
14 , 2 3, 0 , // IF_ERROR
6 , // * POP
23, 3 , 18 , 2 , 2 , 1 , 22 , 2 , 3 , // <alternatives[1]>
14 , 10 , 0 , // IF_ERROR
6 , // * POP
23, 5 , 18, 4 , 2 , 1, 22 , 4 , 3 // <alternatives[2]>
] ) ) ;
} ) ;
@ -128,12 +127,12 @@ describe( "compiler pass |generateBytecode|", function () {
it ( "generates correct bytecode" , function ( ) {
expect ( pass ) . to . changeAST ( grammar , bytecodeDetails ( [
5 , // PUSH_CURR_POS
18, 0 , 2 , 2, 22 , 0 , 23 , 1 , // <expression>
15 , 6 , 0 , // IF_NOT_ERROR
24 , 1 , // * LOAD_SAVED_POS
26 , 2 , 1 , 0 , // CALL
9 // NIP
5 , // PUSH_CURR_POS
23, 1 , 18, 0 , 2 , 1, 22 , 0 , 3 , // <expression>
15 , 6 , 0 , // IF_NOT_ERROR
24 , 1 , // * LOAD_SAVED_POS
26 , 2 , 1 , 0 , // CALL
9 // NIP
] ) ) ;
} ) ;
@ -157,12 +156,12 @@ describe( "compiler pass |generateBytecode|", function () {
it ( "generates correct bytecode" , function ( ) {
expect ( pass ) . to . changeAST ( grammar , bytecodeDetails ( [
5 , // PUSH_CURR_POS
18, 0 , 2 , 2, 22 , 0 , 23 , 1 , // <expression>
15 , 7 , 0 , // IF_NOT_ERROR
24 , 1 , // * LOAD_SAVED_POS
26 , 2 , 1 , 1 , 0 , // CALL
9 // NIP
5 , // PUSH_CURR_POS
23, 1 , 18, 0 , 2 , 1, 22 , 0 , 3 , // <expression>
15 , 7 , 0 , // IF_NOT_ERROR
24 , 1 , // * LOAD_SAVED_POS
26 , 2 , 1 , 1 , 0 , // CALL
9 // NIP
] ) ) ;
} ) ;
@ -186,24 +185,24 @@ describe( "compiler pass |generateBytecode|", function () {
it ( "generates correct bytecode" , function ( ) {
expect ( pass ) . to . changeAST ( grammar , bytecodeDetails ( [
5 , // PUSH_CURR_POS
18, 0 , 2 , 2, 22 , 0 , 23 , 1 , // <elements[0]>
15 , 39, 3 , // IF_NOT_ERROR
18, 2 , 2 , 2 , 22 , 2 , 23 , 3 , // * <elements[1]>
15 , 2 4, 4 , // IF_NOT_ERROR
18, 4 , 2 , 2, 22 , 4 , 23 , 5 , // * <elements[2]>
15 , 9 , 4 , // IF_NOT_ERROR
24 , 3 , // * LOAD_SAVED_POS
26 , 6 , 4 , 3 , 2 , 1 , 0 , // CALL <6>
8 , 3 , // * POP_N
7 , // POP_CURR_POS
3 , // PUSH_FAILED
8 , 2 , // * POP_N
7 , // POP_CURR_POS
3 , // PUSH_FAILED
6 , // * POP
7 , // POP_CURR_POS
3 // PUSH_FAILED
5 , // PUSH_CURR_POS
23, 1 , 18, 0 , 2 , 1, 22 , 0 , 3 , // <elements[0]>
15 , 41, 3 , // IF_NOT_ERROR
23, 3 , 18 , 2 , 2 , 1 , 22 , 2 , 3 , // * <elements[1]>
15 , 2 5, 4 , // IF_NOT_ERROR
23, 5 , 18, 4 , 2 , 1, 22 , 4 , 3 , // * <elements[2]>
15 , 9 , 4 , // IF_NOT_ERROR
24 , 3 , // * LOAD_SAVED_POS
26 , 6 , 4 , 3 , 2 , 1 , 0 , // CALL <6>
8 , 3 , // * POP_N
7 , // POP_CURR_POS
3 , // PUSH_FAILED
8 , 2 , // * POP_N
7 , // POP_CURR_POS
3 , // PUSH_FAILED
6 , // * POP
7 , // POP_CURR_POS
3 // PUSH_FAILED
] ) ) ;
} ) ;
@ -233,24 +232,24 @@ describe( "compiler pass |generateBytecode|", function () {
it ( "generates correct bytecode" , function ( ) {
expect ( pass ) . to . changeAST ( grammar , bytecodeDetails ( [
5 , // PUSH_CURR_POS
18, 0 , 2 , 2, 22 , 0 , 23 , 1 , // <elements[0]>
15 , 3 3, 3 , // IF_NOT_ERROR
18, 2 , 2 , 2 , 22 , 2 , 23 , 3 , // * <elements[1]>
15 , 1 8, 4 , // IF_NOT_ERROR
18, 4 , 2 , 2, 22 , 4 , 23 , 5 , // * <elements[2]>
15 , 3 , 4 , // IF_NOT_ERROR
11 , 3 , // * WRAP
9 , // NIP
8 , 3 , // * POP_N
7 , // POP_CURR_POS
3 , // PUSH_FAILED
8 , 2 , // * POP_N
7 , // POP_CURR_POS
3 , // PUSH_FAILED
6 , // * POP
7 , // POP_CURR_POS
3 // PUSH_FAILED
5 , // PUSH_CURR_POS
23, 1 , 18, 0 , 2 , 1, 22 , 0 , 3 , // <elements[0]>
15 , 3 5, 3 , // IF_NOT_ERROR
23, 3 , 18 , 2 , 2 , 1 , 22 , 2 , 3 , // * <elements[1]>
15 , 1 9, 4 , // IF_NOT_ERROR
23, 5 , 18, 4 , 2 , 1, 22 , 4 , 3 , // * <elements[2]>
15 , 3 , 4 , // IF_NOT_ERROR
11 , 3 , // * WRAP
9 , // NIP
8 , 3 , // * POP_N
7 , // POP_CURR_POS
3 , // PUSH_FAILED
8 , 2 , // * POP_N
7 , // POP_CURR_POS
3 , // PUSH_FAILED
6 , // * POP
7 , // POP_CURR_POS
3 // PUSH_FAILED
] ) ) ;
} ) ;
@ -275,7 +274,7 @@ describe( "compiler pass |generateBytecode|", function () {
it ( "generates correct bytecode" , function ( ) {
expect ( pass ) . to . changeAST ( "start = a:'a'" , bytecodeDetails ( [
18, 0 , 2 , 2 , 22 , 0 , 2 3, 1 // <expression>
23, 1 , 18, 0 , 2 , 1 , 22 , 0 , 3 // <expression>
] ) ) ;
} ) ;
@ -287,12 +286,12 @@ describe( "compiler pass |generateBytecode|", function () {
it ( "generates correct bytecode" , function ( ) {
expect ( pass ) . to . changeAST ( "start = $'a'" , bytecodeDetails ( [
5 , // PUSH_CURR_POS
18, 0 , 2 , 2, 22 , 0 , 23 , 1 , // <expression>
15 , 2 , 1 , // IF_NOT_ERROR
6 , // * POP
12 , // TEXT
9 // * NIP
5 , // PUSH_CURR_POS
23, 1 , 18, 0 , 2 , 1, 22 , 0 , 3 , // <expression>
15 , 2 , 1 , // IF_NOT_ERROR
6 , // * POP
12 , // TEXT
9 // * NIP
] ) ) ;
} ) ;
@ -306,17 +305,17 @@ describe( "compiler pass |generateBytecode|", function () {
it ( "generates correct bytecode" , function ( ) {
expect ( pass ) . to . changeAST ( grammar , bytecodeDetails ( [
5 , // PUSH_CURR_POS
28, // SILENT_FAILS_O N
18, 0 , 2 , 2, 22 , 0 , 23 , 1 , // <expression>
29, // SILENT_FAILS_OFF
15 , 3 , 3 , // IF_NOT_ERROR
6 , // * POP
7 , // POP_CURR_POS
1 , // PUSH_UNDEFINED
6 , // * POP
6 , // POP
3 // PUSH_FAILED
5 , // PUSH_CURR_POS
38, // EXPECT_NS_BEGI N
23, 1 , 18, 0 , 2 , 1, 22 , 0 , 3 , // <expression>
39, 0 , // EXPECT_NS_END <false>
15 , 3 , 3 , // IF_NOT_ERROR
6 , // * POP
7 , // POP_CURR_POS
1 , // PUSH_UNDEFINED
6 , // * POP
6 , // POP
3 // PUSH_FAILED
] ) ) ;
} ) ;
@ -339,17 +338,17 @@ describe( "compiler pass |generateBytecode|", function () {
it ( "generates correct bytecode" , function ( ) {
expect ( pass ) . to . changeAST ( grammar , bytecodeDetails ( [
5 , // PUSH_CURR_POS
28, // SILENT_FAILS_O N
18, 0 , 2 , 2, 22 , 0 , 23 , 1 , // <expression>
29, // SILENT_FAILS_OFF
14 , 3 , 3 , // IF_ERROR
6 , // * POP
6 , // POP
1 , // PUSH_UNDEFINED
6 , // * POP
7 , // POP_CURR_POS
3 // PUSH_FAILED
5 , // PUSH_CURR_POS
38, // EXPECT_NS_BEGI N
23, 1 , 18, 0 , 2 , 1, 22 , 0 , 3 , // <expression>
39, 1 , // EXPECT_NS_END <true>
14 , 3 , 3 , // IF_ERROR
6 , // * POP
6 , // POP
1 , // PUSH_UNDEFINED
6 , // * POP
7 , // POP_CURR_POS
3 // PUSH_FAILED
] ) ) ;
} ) ;
@ -372,10 +371,10 @@ describe( "compiler pass |generateBytecode|", function () {
it ( "generates correct bytecode" , function ( ) {
expect ( pass ) . to . changeAST ( grammar , bytecodeDetails ( [
18, 0 , 2 , 2, 22 , 0 , 23 , 1 , // <expression>
14 , 2 , 0 , // IF_ERROR
6 , // * POP
2 // PUSH_NULL
23, 1 , 18, 0 , 2 , 1, 22 , 0 , 3 , // <expression>
14 , 2 , 0 , // IF_ERROR
6 , // * POP
2 // PUSH_NULL
] ) ) ;
} ) ;
@ -398,12 +397,12 @@ describe( "compiler pass |generateBytecode|", function () {
it ( "generates correct bytecode" , function ( ) {
expect ( pass ) . to . changeAST ( grammar , bytecodeDetails ( [
4 , // PUSH_EMPTY_ARRAY
18, 0 , 2 , 2, 22 , 0 , 23 , 1 , // <expression>
16 , 9 , // WHILE_NOT_ERROR
10 , // * APPEND
18, 0 , 2 , 2, 22 , 0 , 23 , 1 , // <expression>
6 // POP
4 , // PUSH_EMPTY_ARRAY
23, 1 , 18, 0 , 2 , 1, 22 , 0 , 3 , // <expression>
16 , 10 , // WHILE_NOT_ERROR
10 , // * APPEND
23, 1 , 18, 0 , 2 , 1, 22 , 0 , 3 , // <expression>
6 // POP
] ) ) ;
} ) ;
@ -426,16 +425,16 @@ describe( "compiler pass |generateBytecode|", function () {
it ( "generates correct bytecode" , function ( ) {
expect ( pass ) . to . changeAST ( grammar , bytecodeDetails ( [
4 , // PUSH_EMPTY_ARRAY
18, 0 , 2 , 2, 22 , 0 , 23 , 1 , // <expression>
15 , 1 2, 3 , // IF_NOT_ERROR
16 , 9 , // * WHILE_NOT_ERROR
10 , // * APPEND
18, 0 , 2 , 2, 22 , 0 , 23 , 1 , // <expression>
6 , // POP
6 , // * POP
6 , // POP
3 // PUSH_FAILED
4 , // PUSH_EMPTY_ARRAY
23, 1 , 18, 0 , 2 , 1, 22 , 0 , 3 , // <expression>
15 , 1 3, 3 , // IF_NOT_ERROR
16 , 10 , // * WHILE_NOT_ERROR
10 , // * APPEND
23, 1 , 18, 0 , 2 , 1, 22 , 0 , 3 , // <expression>
6 , // POP
6 , // * POP
6 , // POP
3 // PUSH_FAILED
] ) ) ;
} ) ;
@ -456,7 +455,7 @@ describe( "compiler pass |generateBytecode|", function () {
it ( "generates correct bytecode" , function ( ) {
expect ( pass ) . to . changeAST ( "start = ('a')" , bytecodeDetails ( [
18, 0 , 2 , 2 , 22 , 0 , 2 3, 1 // <expression>
23, 1 , 18, 0 , 2 , 1 , 22 , 0 , 3 // <expression>
] ) ) ;
} ) ;
@ -501,35 +500,35 @@ describe( "compiler pass |generateBytecode|", function () {
it ( "generates correct bytecode" , function ( ) {
expect ( pass ) . to . changeAST ( grammar , bytecodeDetails ( [
5 , // PUSH_CURR_POS
18, 0 , 2 , 2, 22 , 0 , 23 , 1 , // <elements[0]>
15 , 5 5, 3 , // IF_NOT_ERROR
18, 2 , 2 , 2 , 22 , 2 , 23 , 3 , // * <elements[1]>
15 , 4 0, 4 , // IF_NOT_ERROR
18, 4 , 2 , 2, 22 , 4 , 23 , 5 , // * <elements[2]>
15 , 25 , 4 , // IF_NOT_ERROR
25 , // * UPDATE_SAVED_POS
26 , 6 , 0 , 3 , 2 , 1 , 0 , // CALL
13 , 2 , 2 , // IF
6 , // * POP
1 , // PUSH_UNDEFINED
6 , // * POP
3 , // PUSH_FAILED
15 , 3 , 4 , // IF_NOT_ERROR
11 , 4 , // * WRAP
9 , // NIP
8 , 4 , // * POP_N
7 , // POP_CURR_POS
3 , // PUSH_FAILED
8 , 3 , // * POP_N
7 , // POP_CURR_POS
3 , // PUSH_FAILED
8 , 2 , // * POP_N
7 , // POP_CURR_POS
3 , // PUSH_FAILED
6 , // * POP
7 , // POP_CURR_POS
3 // PUSH_FAILED
5 , // PUSH_CURR_POS
23, 1 , 18, 0 , 2 , 1, 22 , 0 , 3 , // <elements[0]>
15 , 5 7, 3 , // IF_NOT_ERROR
23, 3 , 18 , 2 , 2 , 1 , 22 , 2 , 3 , // * <elements[1]>
15 , 4 1, 4 , // IF_NOT_ERROR
23, 5 , 18, 4 , 2 , 1, 22 , 4 , 3 , // * <elements[2]>
15 , 25 , 4 , // IF_NOT_ERROR
25 , // * UPDATE_SAVED_POS
26 , 6 , 0 , 3 , 2 , 1 , 0 , // CALL
13 , 2 , 2 , // IF
6 , // * POP
1 , // PUSH_UNDEFINED
6 , // * POP
3 , // PUSH_FAILED
15 , 3 , 4 , // IF_NOT_ERROR
11 , 4 , // * WRAP
9 , // NIP
8 , 4 , // * POP_N
7 , // POP_CURR_POS
3 , // PUSH_FAILED
8 , 3 , // * POP_N
7 , // POP_CURR_POS
3 , // PUSH_FAILED
8 , 2 , // * POP_N
7 , // POP_CURR_POS
3 , // PUSH_FAILED
6 , // * POP
7 , // POP_CURR_POS
3 // PUSH_FAILED
] ) ) ;
} ) ;
@ -590,35 +589,35 @@ describe( "compiler pass |generateBytecode|", function () {
it ( "generates correct bytecode" , function ( ) {
expect ( pass ) . to . changeAST ( grammar , bytecodeDetails ( [
5 , // PUSH_CURR_POS
18, 0 , 2 , 2, 22 , 0 , 23 , 1 , // <elements[0]>
15 , 5 5, 3 , // IF_NOT_ERROR
18, 2 , 2 , 2 , 22 , 2 , 23 , 3 , // * <elements[1]>
15 , 4 0, 4 , // IF_NOT_ERROR
18, 4 , 2 , 2, 22 , 4 , 23 , 5 , // * <elements[2]>
15 , 25 , 4 , // IF_NOT_ERROR
25 , // * UPDATE_SAVED_POS
26 , 6 , 0 , 3 , 2 , 1 , 0 , // CALL
13 , 2 , 2 , // IF
6 , // * POP
3 , // PUSH_FAILED
6 , // * POP
1 , // PUSH_UNDEFINED
15 , 3 , 4 , // IF_NOT_ERROR
11 , 4 , // * WRAP
9 , // NIP
8 , 4 , // * POP_N
7 , // POP_CURR_POS
3 , // PUSH_FAILED
8 , 3 , // * POP_N
7 , // POP_CURR_POS
3 , // PUSH_FAILED
8 , 2 , // * POP_N
7 , // POP_CURR_POS
3 , // PUSH_FAILED
6 , // * POP
7 , // POP_CURR_POS
3 // PUSH_FAILED
5 , // PUSH_CURR_POS
23, 1 , 18, 0 , 2 , 1, 22 , 0 , 3 , // <elements[0]>
15 , 5 7, 3 , // IF_NOT_ERROR
23, 3 , 18 , 2 , 2 , 1 , 22 , 2 , 3 , // * <elements[1]>
15 , 4 1, 4 , // IF_NOT_ERROR
23, 5 , 18, 4 , 2 , 1, 22 , 4 , 3 , // * <elements[2]>
15 , 25 , 4 , // IF_NOT_ERROR
25 , // * UPDATE_SAVED_POS
26 , 6 , 0 , 3 , 2 , 1 , 0 , // CALL
13 , 2 , 2 , // IF
6 , // * POP
3 , // PUSH_FAILED
6 , // * POP
1 , // PUSH_UNDEFINED
15 , 3 , 4 , // IF_NOT_ERROR
11 , 4 , // * WRAP
9 , // NIP
8 , 4 , // * POP_N
7 , // POP_CURR_POS
3 , // PUSH_FAILED
8 , 3 , // * POP_N
7 , // POP_CURR_POS
3 , // PUSH_FAILED
8 , 2 , // * POP_N
7 , // POP_CURR_POS
3 , // PUSH_FAILED
6 , // * POP
7 , // POP_CURR_POS
3 // PUSH_FAILED
] ) ) ;
} ) ;
@ -690,9 +689,10 @@ describe( "compiler pass |generateBytecode|", function () {
it ( "generates correct bytecode" , function ( ) {
expect ( pass ) . to . changeAST ( grammar , bytecodeDetails ( [
18 , 0 , 2 , 2 , // MATCH_STRING
23 , 1 , // EXPECT <1>
18 , 0 , 2 , 1 , // MATCH_STRING <0>
22 , 0 , // * ACCEPT_STRING
23, 1 // * FAIL
3 // * PUSH_FAILED
] ) ) ;
} ) ;
@ -715,9 +715,10 @@ describe( "compiler pass |generateBytecode|", function () {
it ( "generates correct bytecode" , function ( ) {
expect ( pass ) . to . changeAST ( grammar , bytecodeDetails ( [
19 , 0 , 2 , 2 , // MATCH_STRING_IC
23 , 1 , // EXPECT <1>
19 , 0 , 2 , 1 , // MATCH_STRING_IC <0>
21 , 1 , // * ACCEPT_N
23, 1 // * FAIL
3 // * PUSH_FAILED
] ) ) ;
} ) ;
@ -740,9 +741,10 @@ describe( "compiler pass |generateBytecode|", function () {
it ( "generates correct bytecode" , function ( ) {
expect ( pass ) . to . changeAST ( "start = [a]" , bytecodeDetails ( [
20 , 0 , 2 , 2 , // MATCH_REGEXP
23 , 1 , // EXPECT <1>
20 , 0 , 2 , 1 , // MATCH_REGEXP <0>
21 , 1 , // * ACCEPT_N
23, 1 // * FAIL
3 // * PUSH_FAILED
] ) ) ;
} ) ;
@ -808,9 +810,10 @@ describe( "compiler pass |generateBytecode|", function () {
it ( "generates bytecode" , function ( ) {
expect ( pass ) . to . changeAST ( grammar , bytecodeDetails ( [
17 , 2 , 2 , // MATCH_ANY
23 , 0 , // EXPECT <0>
17 , 2 , 1 , // MATCH_ANY
21 , 1 , // * ACCEPT_N
23, 0 // * FAIL
3 // * PUSH_FAILED
] ) ) ;
} ) ;