//-------------------------------------------------------------------------------------------------------
// Copyright (C) Microsoft. All rights reserved.
// Licensed under the MIT license. See LICENSE.txt file in the project root for full license information.
//-------------------------------------------------------------------------------------------------------

// Use do..while as a statement inside if..else
var str="if (1) do WScript.Echo(1); while (false); else 1;";

try
{
    eval(str);
}
catch (e)
{
    WScript.Echo(e);
}

// Use do..while as a statement inside another do..while
str="do do WScript.Echo(2); while (false); while(false);"
try
{
    eval(str);
}
catch (e)
{
    WScript.Echo(e);
}

// do..while without a semicolon at the end, followed by another statement
// do while surrounds a statement without a semicolon, but ended with a newline
var a = 10;
do
  WScript.Echo(3)
while (false)
var b=20;

with(a) do WScript.Echo(4); while (false)

for(var i=0; i<5; i++)
  do
    WScript.Echo("5."+i);
  while(false)

// do..while as the last statement ended by EOF
do
  WScript.Echo(6)
while (false)
