@@ -204,21 +204,21 @@ TEST_F(ControlBlocksTest, Forever)
204204
205205 compiler.compile (block1);
206206
207- ASSERT_EQ (compiler.bytecode (), std::vector<unsigned int >({ vm::OP_START, vm::OP_FOREVER_LOOP, vm::OP_NULL, vm::OP_PRINT, vm::OP_LOOP_END, vm::OP_HALT }));
207+ ASSERT_EQ (compiler.bytecode (), std::vector<unsigned int >({ vm::OP_START, vm::OP_FOREVER_LOOP, vm::OP_NULL, vm::OP_PRINT, vm::OP_BREAK_ATOMIC, vm:: OP_LOOP_END, vm::OP_HALT }));
208208 ASSERT_TRUE (compiler.constValues ().empty ());
209209 ASSERT_TRUE (compiler.variables ().empty ());
210210 ASSERT_TRUE (compiler.lists ().empty ());
211211
212212 compiler.compile (block2);
213213
214- ASSERT_EQ (compiler.bytecode (), std::vector<unsigned int >({ vm::OP_START, vm::OP_FOREVER_LOOP, vm::OP_LOOP_END, vm::OP_HALT }));
214+ ASSERT_EQ (compiler.bytecode (), std::vector<unsigned int >({ vm::OP_START, vm::OP_FOREVER_LOOP, vm::OP_BREAK_ATOMIC, vm:: OP_LOOP_END, vm::OP_HALT }));
215215 ASSERT_TRUE (compiler.constValues ().empty ());
216216 ASSERT_TRUE (compiler.variables ().empty ());
217217 ASSERT_TRUE (compiler.lists ().empty ());
218218
219219 compiler.compile (block3);
220220
221- ASSERT_EQ (compiler.bytecode (), std::vector<unsigned int >({ vm::OP_START, vm::OP_FOREVER_LOOP, vm::OP_LOOP_END, vm::OP_HALT }));
221+ ASSERT_EQ (compiler.bytecode (), std::vector<unsigned int >({ vm::OP_START, vm::OP_FOREVER_LOOP, vm::OP_BREAK_ATOMIC, vm:: OP_LOOP_END, vm::OP_HALT }));
222222 ASSERT_TRUE (compiler.constValues ().empty ());
223223 ASSERT_TRUE (compiler.variables ().empty ());
224224 ASSERT_TRUE (compiler.lists ().empty ());
@@ -248,7 +248,7 @@ TEST_F(ControlBlocksTest, Repeat)
248248
249249 compiler.compile (block1);
250250
251- ASSERT_EQ (compiler.bytecode (), std::vector<unsigned int >({ vm::OP_START, vm::OP_CONST, 0 , vm::OP_REPEAT_LOOP, vm::OP_NULL, vm::OP_PRINT, vm::OP_LOOP_END, vm::OP_HALT }));
251+ ASSERT_EQ (compiler.bytecode (), std::vector<unsigned int >({ vm::OP_START, vm::OP_CONST, 0 , vm::OP_REPEAT_LOOP, vm::OP_NULL, vm::OP_PRINT, vm::OP_BREAK_ATOMIC, vm:: OP_LOOP_END, vm::OP_HALT }));
252252 ASSERT_EQ (compiler.constValues ().size (), 1 );
253253 ASSERT_EQ (compiler.constValues ()[0 ].toDouble (), 5 );
254254 ASSERT_TRUE (compiler.variables ().empty ());
@@ -304,36 +304,38 @@ TEST_F(ControlBlocksTest, RepeatUntil)
304304
305305 compiler.compile (block1);
306306
307- ASSERT_EQ (compiler.bytecode (), std::vector<unsigned int >({ vm::OP_START, vm::OP_UNTIL_LOOP, vm::OP_CONST, 0 , vm::OP_BEGIN_UNTIL_LOOP, vm::OP_NULL, vm::OP_PRINT, vm::OP_LOOP_END, vm::OP_HALT }));
307+ ASSERT_EQ (
308+ compiler.bytecode (),
309+ std::vector<unsigned int >({ vm::OP_START, vm::OP_UNTIL_LOOP, vm::OP_CONST, 0 , vm::OP_BEGIN_UNTIL_LOOP, vm::OP_NULL, vm::OP_PRINT, vm::OP_BREAK_ATOMIC, vm::OP_LOOP_END, vm::OP_HALT }));
308310 ASSERT_EQ (compiler.constValues ().size (), 1 );
309311 ASSERT_EQ (compiler.constValues ()[0 ].toBool (), false );
310312 ASSERT_TRUE (compiler.variables ().empty ());
311313 ASSERT_TRUE (compiler.lists ().empty ());
312314
313315 compiler.compile (block2);
314316
315- ASSERT_EQ (compiler.bytecode (), std::vector<unsigned int >({ vm::OP_START, vm::OP_UNTIL_LOOP, vm::OP_CONST, 1 , vm::OP_BEGIN_UNTIL_LOOP, vm::OP_LOOP_END, vm::OP_HALT }));
317+ ASSERT_EQ (compiler.bytecode (), std::vector<unsigned int >({ vm::OP_START, vm::OP_UNTIL_LOOP, vm::OP_CONST, 1 , vm::OP_BEGIN_UNTIL_LOOP, vm::OP_BREAK_ATOMIC, vm:: OP_LOOP_END, vm::OP_HALT }));
316318 ASSERT_EQ (compiler.constValues (), std::vector<Value>({ false , false }));
317319 ASSERT_TRUE (compiler.variables ().empty ());
318320 ASSERT_TRUE (compiler.lists ().empty ());
319321
320322 compiler.compile (block3);
321323
322- ASSERT_EQ (compiler.bytecode (), std::vector<unsigned int >({ vm::OP_START, vm::OP_UNTIL_LOOP, vm::OP_CONST, 2 , vm::OP_BEGIN_UNTIL_LOOP, vm::OP_LOOP_END, vm::OP_HALT }));
324+ ASSERT_EQ (compiler.bytecode (), std::vector<unsigned int >({ vm::OP_START, vm::OP_UNTIL_LOOP, vm::OP_CONST, 2 , vm::OP_BEGIN_UNTIL_LOOP, vm::OP_BREAK_ATOMIC, vm:: OP_LOOP_END, vm::OP_HALT }));
323325 ASSERT_EQ (compiler.constValues (), std::vector<Value>({ false , false , false }));
324326 ASSERT_TRUE (compiler.variables ().empty ());
325327 ASSERT_TRUE (compiler.lists ().empty ());
326328
327329 compiler.compile (block4);
328330
329- ASSERT_EQ (compiler.bytecode (), std::vector<unsigned int >({ vm::OP_START, vm::OP_UNTIL_LOOP, vm::OP_CONST, 3 , vm::OP_BEGIN_UNTIL_LOOP, vm::OP_LOOP_END, vm::OP_HALT }));
331+ ASSERT_EQ (compiler.bytecode (), std::vector<unsigned int >({ vm::OP_START, vm::OP_UNTIL_LOOP, vm::OP_CONST, 3 , vm::OP_BEGIN_UNTIL_LOOP, vm::OP_BREAK_ATOMIC, vm:: OP_LOOP_END, vm::OP_HALT }));
330332 ASSERT_EQ (compiler.constValues (), std::vector<Value>({ false , false , false , Value () }));
331333 ASSERT_TRUE (compiler.variables ().empty ());
332334 ASSERT_TRUE (compiler.lists ().empty ());
333335
334336 compiler.compile (block5);
335337
336- ASSERT_EQ (compiler.bytecode (), std::vector<unsigned int >({ vm::OP_START, vm::OP_UNTIL_LOOP, vm::OP_NULL, vm::OP_BEGIN_UNTIL_LOOP, vm::OP_LOOP_END, vm::OP_HALT }));
338+ ASSERT_EQ (compiler.bytecode (), std::vector<unsigned int >({ vm::OP_START, vm::OP_UNTIL_LOOP, vm::OP_NULL, vm::OP_BEGIN_UNTIL_LOOP, vm::OP_BREAK_ATOMIC, vm:: OP_LOOP_END, vm::OP_HALT }));
337339 ASSERT_EQ (compiler.constValues (), std::vector<Value>({ false , false , false , Value () }));
338340 ASSERT_TRUE (compiler.variables ().empty ());
339341 ASSERT_TRUE (compiler.lists ().empty ());
@@ -374,36 +376,43 @@ TEST_F(ControlBlocksTest, While)
374376
375377 ASSERT_EQ (
376378 compiler.bytecode (),
377- std::vector<unsigned int >({ vm::OP_START, vm::OP_UNTIL_LOOP, vm::OP_CONST, 0 , vm::OP_NOT, vm::OP_BEGIN_UNTIL_LOOP, vm::OP_NULL, vm::OP_PRINT, vm::OP_LOOP_END, vm::OP_HALT }));
379+ std::vector<unsigned int >(
380+ { vm::OP_START, vm::OP_UNTIL_LOOP, vm::OP_CONST, 0 , vm::OP_NOT, vm::OP_BEGIN_UNTIL_LOOP, vm::OP_NULL, vm::OP_PRINT, vm::OP_BREAK_ATOMIC, vm::OP_LOOP_END, vm::OP_HALT }));
378381 ASSERT_EQ (compiler.constValues ().size (), 1 );
379382 ASSERT_EQ (compiler.constValues ()[0 ].toBool (), false );
380383 ASSERT_TRUE (compiler.variables ().empty ());
381384 ASSERT_TRUE (compiler.lists ().empty ());
382385
383386 compiler.compile (block2);
384387
385- ASSERT_EQ (compiler.bytecode (), std::vector<unsigned int >({ vm::OP_START, vm::OP_UNTIL_LOOP, vm::OP_CONST, 1 , vm::OP_NOT, vm::OP_BEGIN_UNTIL_LOOP, vm::OP_LOOP_END, vm::OP_HALT }));
388+ ASSERT_EQ (
389+ compiler.bytecode (),
390+ std::vector<unsigned int >({ vm::OP_START, vm::OP_UNTIL_LOOP, vm::OP_CONST, 1 , vm::OP_NOT, vm::OP_BEGIN_UNTIL_LOOP, vm::OP_BREAK_ATOMIC, vm::OP_LOOP_END, vm::OP_HALT }));
386391 ASSERT_EQ (compiler.constValues (), std::vector<Value>({ false , false }));
387392 ASSERT_TRUE (compiler.variables ().empty ());
388393 ASSERT_TRUE (compiler.lists ().empty ());
389394
390395 compiler.compile (block3);
391396
392- ASSERT_EQ (compiler.bytecode (), std::vector<unsigned int >({ vm::OP_START, vm::OP_UNTIL_LOOP, vm::OP_CONST, 2 , vm::OP_NOT, vm::OP_BEGIN_UNTIL_LOOP, vm::OP_LOOP_END, vm::OP_HALT }));
397+ ASSERT_EQ (
398+ compiler.bytecode (),
399+ std::vector<unsigned int >({ vm::OP_START, vm::OP_UNTIL_LOOP, vm::OP_CONST, 2 , vm::OP_NOT, vm::OP_BEGIN_UNTIL_LOOP, vm::OP_BREAK_ATOMIC, vm::OP_LOOP_END, vm::OP_HALT }));
393400 ASSERT_EQ (compiler.constValues (), std::vector<Value>({ false , false , false }));
394401 ASSERT_TRUE (compiler.variables ().empty ());
395402 ASSERT_TRUE (compiler.lists ().empty ());
396403
397404 compiler.compile (block4);
398405
399- ASSERT_EQ (compiler.bytecode (), std::vector<unsigned int >({ vm::OP_START, vm::OP_UNTIL_LOOP, vm::OP_CONST, 3 , vm::OP_NOT, vm::OP_BEGIN_UNTIL_LOOP, vm::OP_LOOP_END, vm::OP_HALT }));
406+ ASSERT_EQ (
407+ compiler.bytecode (),
408+ std::vector<unsigned int >({ vm::OP_START, vm::OP_UNTIL_LOOP, vm::OP_CONST, 3 , vm::OP_NOT, vm::OP_BEGIN_UNTIL_LOOP, vm::OP_BREAK_ATOMIC, vm::OP_LOOP_END, vm::OP_HALT }));
400409 ASSERT_EQ (compiler.constValues (), std::vector<Value>({ false , false , false , Value () }));
401410 ASSERT_TRUE (compiler.variables ().empty ());
402411 ASSERT_TRUE (compiler.lists ().empty ());
403412
404413 compiler.compile (block5);
405414
406- ASSERT_EQ (compiler.bytecode (), std::vector<unsigned int >({ vm::OP_START, vm::OP_UNTIL_LOOP, vm::OP_NULL, vm::OP_NOT, vm::OP_BEGIN_UNTIL_LOOP, vm::OP_LOOP_END, vm::OP_HALT }));
415+ ASSERT_EQ (compiler.bytecode (), std::vector<unsigned int >({ vm::OP_START, vm::OP_UNTIL_LOOP, vm::OP_NULL, vm::OP_NOT, vm::OP_BEGIN_UNTIL_LOOP, vm::OP_BREAK_ATOMIC, vm:: OP_LOOP_END, vm::OP_HALT }));
407416 ASSERT_EQ (compiler.constValues (), std::vector<Value>({ false , false , false , Value () }));
408417 ASSERT_TRUE (compiler.variables ().empty ());
409418 ASSERT_TRUE (compiler.lists ().empty ());
@@ -439,7 +448,8 @@ TEST_F(ControlBlocksTest, ForEach)
439448
440449 ASSERT_EQ (
441450 compiler.bytecode (),
442- std::vector<unsigned int >({ vm::OP_START, vm::OP_CONST, 0 , vm::OP_REPEAT_LOOP, vm::OP_REPEAT_LOOP_INDEX1, vm::OP_SET_VAR, 0 , vm::OP_NULL, vm::OP_PRINT, vm::OP_LOOP_END, vm::OP_HALT }));
451+ std::vector<unsigned int >(
452+ { vm::OP_START, vm::OP_CONST, 0 , vm::OP_REPEAT_LOOP, vm::OP_REPEAT_LOOP_INDEX1, vm::OP_SET_VAR, 0 , vm::OP_NULL, vm::OP_PRINT, vm::OP_BREAK_ATOMIC, vm::OP_LOOP_END, vm::OP_HALT }));
443453 ASSERT_EQ (compiler.constValues ().size (), 1 );
444454 ASSERT_EQ (compiler.constValues ()[0 ].toDouble (), 5 );
445455 ASSERT_EQ (compiler.variables ().size (), 1 );
0 commit comments