@@ -40,12 +40,13 @@ public void testCompile_ErrorForWrongChar() throws Exception {
4040 @ Test
4141 public void testCompile_StructForWholeStreamAsSecondField () throws Exception {
4242 final JBBPCompiledBlock block = JBBPCompiler .compile ("byte;test [_] {byte;}" );
43- assertEquals (5 , block .getCompiledData ().length );
43+ assertEquals (6 , block .getCompiledData ().length );
4444 assertEquals (JBBPCompiler .CODE_BYTE , block .getCompiledData ()[0 ]);
45- assertEquals (JBBPCompiler .CODE_STRUCT_START | JBBPCompiler .FLAG_EXPRESSION_OR_WHOLESTREAM | JBBPCompiler .FLAG_NAMED , block .getCompiledData ()[1 ] & 0xFF );
46- assertEquals (JBBPCompiler .CODE_BYTE , block .getCompiledData ()[2 ]);
47- assertEquals (JBBPCompiler .CODE_STRUCT_END , block .getCompiledData ()[3 ]);
48- assertEquals (1 , block .getCompiledData ()[4 ]);
45+ assertEquals (JBBPCompiler .CODE_STRUCT_START | JBBPCompiler .FLAG_EXTRA_FLAGS | JBBPCompiler .FLAG_NAMED , block .getCompiledData ()[1 ] & 0xFF );
46+ assertEquals (JBBPCompiler .EXTRAFLAG_EXPRESSION_OR_WHOLESTREAM , block .getCompiledData ()[2 ] & 0xFF );
47+ assertEquals (JBBPCompiler .CODE_BYTE , block .getCompiledData ()[3 ]);
48+ assertEquals (JBBPCompiler .CODE_STRUCT_END , block .getCompiledData ()[4 ]);
49+ assertEquals (1 , block .getCompiledData ()[5 ]);
4950 }
5051
5152 @ Test
@@ -62,24 +63,26 @@ public void testCompile_ErrorForFieldAfterWholeStreamArray() throws Exception {
6263 @ Test
6364 public void testCompile_WholeStreamArrayInsideStructure () throws Exception {
6465 final JBBPCompiledBlock block = JBBPCompiler .compile ("test {byte [_];}" );
65- assertEquals (4 , block .getCompiledData ().length );
66+ assertEquals (5 , block .getCompiledData ().length );
6667 assertEquals (JBBPCompiler .CODE_STRUCT_START | JBBPCompiler .FLAG_NAMED , block .getCompiledData ()[0 ]);
67- assertEquals (JBBPCompiler .CODE_BYTE | JBBPCompiler .FLAG_EXPRESSION_OR_WHOLESTREAM , block .getCompiledData ()[1 ] & 0xFF );
68- assertEquals (JBBPCompiler .CODE_STRUCT_END , block .getCompiledData ()[2 ]);
69- assertEquals (0 , block .getCompiledData ()[3 ]);
68+ assertEquals (JBBPCompiler .CODE_BYTE | JBBPCompiler .FLAG_EXTRA_FLAGS , block .getCompiledData ()[1 ] & 0xFF );
69+ assertEquals (JBBPCompiler .EXTRAFLAG_EXPRESSION_OR_WHOLESTREAM , block .getCompiledData ()[2 ] & 0xFF );
70+ assertEquals (JBBPCompiler .CODE_STRUCT_END , block .getCompiledData ()[3 ]);
71+ assertEquals (0 , block .getCompiledData ()[4 ]);
7072 }
7173
7274 @ Test
7375 public void testCompile_WholeStreamStructureArrayInsideStructure () throws Exception {
7476 final JBBPCompiledBlock block = JBBPCompiler .compile ("test { whole[_]{ byte;}}" );
75- assertEquals (7 , block .getCompiledData ().length );
77+ assertEquals (8 , block .getCompiledData ().length );
7678 assertEquals (JBBPCompiler .CODE_STRUCT_START | JBBPCompiler .FLAG_NAMED , block .getCompiledData ()[0 ]);
77- assertEquals (JBBPCompiler .CODE_STRUCT_START | JBBPCompiler .FLAG_NAMED | JBBPCompiler .FLAG_EXPRESSION_OR_WHOLESTREAM , block .getCompiledData ()[1 ] & 0xFF );
78- assertEquals (JBBPCompiler .CODE_BYTE , block .getCompiledData ()[2 ]);
79- assertEquals (JBBPCompiler .CODE_STRUCT_END , block .getCompiledData ()[3 ]);
80- assertEquals (1 , block .getCompiledData ()[4 ]);
81- assertEquals (JBBPCompiler .CODE_STRUCT_END , block .getCompiledData ()[5 ]);
82- assertEquals (0 , block .getCompiledData ()[6 ]);
79+ assertEquals (JBBPCompiler .CODE_STRUCT_START | JBBPCompiler .FLAG_NAMED | JBBPCompiler .FLAG_EXTRA_FLAGS , block .getCompiledData ()[1 ] & 0xFF );
80+ assertEquals (JBBPCompiler .EXTRAFLAG_EXPRESSION_OR_WHOLESTREAM , block .getCompiledData ()[2 ] & 0xFF );
81+ assertEquals (JBBPCompiler .CODE_BYTE , block .getCompiledData ()[3 ]);
82+ assertEquals (JBBPCompiler .CODE_STRUCT_END , block .getCompiledData ()[4 ]);
83+ assertEquals (1 , block .getCompiledData ()[5 ]);
84+ assertEquals (JBBPCompiler .CODE_STRUCT_END , block .getCompiledData ()[6 ]);
85+ assertEquals (0 , block .getCompiledData ()[7 ]);
8386 }
8487
8588 @ Test
@@ -459,15 +462,16 @@ public void testCompile_FixedLengthByteArrayInStructure() throws Exception {
459462 public void testCompile_VarLengthByteArrayInStructure () throws Exception {
460463 final JBBPCompiledBlock block = JBBPCompiler .compile ("out { int len; some {byte [len] HeLLo;} }" );
461464 final byte [] compiled = block .getCompiledData ();
462- assertEquals (8 , compiled .length );
465+ assertEquals (9 , compiled .length );
463466 assertEquals (JBBPCompiler .CODE_STRUCT_START | JBBPCompiler .FLAG_NAMED , compiled [0 ]);
464467 assertEquals (JBBPCompiler .CODE_INT | JBBPCompiler .FLAG_NAMED , compiled [1 ] & 0xFF );
465468 assertEquals (JBBPCompiler .CODE_STRUCT_START | JBBPCompiler .FLAG_NAMED , compiled [2 ]);
466- assertEquals (JBBPCompiler .CODE_BYTE | JBBPCompiler .FLAG_NAMED | JBBPCompiler .FLAG_ARRAY | JBBPCompiler .FLAG_EXPRESSION_OR_WHOLESTREAM , compiled [3 ] & 0xFF );
467- assertEquals (JBBPCompiler .CODE_STRUCT_END , compiled [4 ]);
468- assertEquals (2 , compiled [5 ]);
469- assertEquals (JBBPCompiler .CODE_STRUCT_END , compiled [6 ]);
470- assertEquals (0 , compiled [7 ]);
469+ assertEquals (JBBPCompiler .CODE_BYTE | JBBPCompiler .FLAG_NAMED | JBBPCompiler .FLAG_ARRAY | JBBPCompiler .FLAG_EXTRA_FLAGS , compiled [3 ] & 0xFF );
470+ assertEquals (JBBPCompiler .EXTRAFLAG_EXPRESSION_OR_WHOLESTREAM , compiled [4 ] & 0xFF );
471+ assertEquals (JBBPCompiler .CODE_STRUCT_END , compiled [5 ]);
472+ assertEquals (2 , compiled [6 ]);
473+ assertEquals (JBBPCompiler .CODE_STRUCT_END , compiled [7 ]);
474+ assertEquals (0 , compiled [8 ]);
471475 assertEquals (4 , block .getNamedFields ().length );
472476 assertEquals ("out" , block .getNamedFields ()[0 ].getFieldPath ());
473477 assertEquals ("out.len" , block .getNamedFields ()[1 ].getFieldPath ());
@@ -499,10 +503,11 @@ public void testCompile_ErrorForUnknownFieldAsArrayLength() throws Exception {
499503 public void testCompile_ArrayWithUndefinedLength () throws Exception {
500504 final JBBPCompiledBlock compiled = JBBPCompiler .compile ("byte [_] HeLLo;" );
501505 final JBBPNamedFieldInfo field = compiled .findFieldForPath ("hello" );
502- assertEquals (1 , compiled .getCompiledData ().length );
506+ assertEquals (2 , compiled .getCompiledData ().length );
503507 assertNotNull (field );
504508 assertEquals (0 , field .getFieldOffsetInCompiledBlock ());
505- assertEquals (JBBPCompiler .CODE_BYTE | JBBPCompiler .FLAG_NAMED | JBBPCompiler .FLAG_EXPRESSION_OR_WHOLESTREAM , compiled .getCompiledData ()[0 ] & 0xFF );
509+ assertEquals (JBBPCompiler .CODE_BYTE | JBBPCompiler .FLAG_NAMED | JBBPCompiler .FLAG_EXTRA_FLAGS , compiled .getCompiledData ()[0 ] & 0xFF );
510+ assertEquals (JBBPCompiler .EXTRAFLAG_EXPRESSION_OR_WHOLESTREAM , compiled .getCompiledData ()[1 ] & 0xFF );
506511 }
507512
508513 @ Test
0 commit comments