var myvar = 1;

function varInFunction() {
  return (myvar == undefined);
  var myvar = 2;
}

function varInVarList() {
  return (myvar == undefined);
  var a = 1, b = 0, myvar = 2;
}

function varListOrder() {
  var tmp = 0;
  var i = ++tmp, j = ++tmp;
  return j == 2;
}

function varInBlock() {
  return (myvar == undefined);
  {
    var myvar = 2;
  }
}

function varInIf() {
  return (myvar == undefined);
  if (false)
    var myvar = 2;
}

function varInElse() {
  return (myvar == undefined);
  if (true) {
  }
  else
    var myvar = 2;
}

function varInDoWhile() {
  return (myvar == undefined);
  do
    var myvar = 2;
  while (false);
}

function varInWhile() {
  return (myvar == undefined);
  while (false)
    var myvar = 2;
}

function varInFor() {
  return (myvar == undefined);
  var i;
  for (i = 0; i < 0; i++)
    var myvar = 2;
}

function varInForInitExpr() {
  return (myvar == undefined);
  for (var myvar = 2; i < 2; i++) {
  }
}

function varInForIn() {
  return (myvar == undefined);
  var o = new Object();
  var i;
  for (i in o)
    var myvar = 2;
}

function varInWith() {
  return (myvar == undefined);
  with (String)
    var myvar = 2;
}

function varInCase() {
  return (myvar == undefined);
  switch (1) {
    case 0:
      var myvar = 2;
    case 1:
  }
}

function varInLabel() {
  return (myvar == undefined);
label1:
  var myvar = 2;
}

function varInCatch() {
  return (myvar == undefined);
  try {
  }
  catch (e) {
    var myvar = 2;
  }
}

function varInFinally() {
  return (myvar == undefined);
  try {
  }
  finally {
    var myvar = 2;
  }
}

function varInTry() {
  return (myvar == undefined);
  try {
    var myvar = 2;
  }
  catch (e) {
  }
  finally {
  }
}

function varInSubFunction() {
  return (myvar == 1);
  function subfunction() {
    var myvar = 2;
  }
}

if (!varGlobal)
  var varGlobal = 1;

shouldBe("varInFunction()","true");
shouldBe("varInVarList()","true");
shouldBe("varListOrder()","true");
shouldBe("varInBlock()","true");
shouldBe("varInIf()","true");
shouldBe("varInElse()","true");
shouldBe("varInDoWhile()","true");
shouldBe("varInWhile()","true");
shouldBe("varInFor()","true");
shouldBe("varInForIn()","true");
shouldBe("varInWith()","true");
shouldBe("varInCase()","true");
shouldBe("varInLabel()","true");
shouldBe("varInCatch()","true");
shouldBe("varInFinally()","true");
shouldBe("varInTry()","true");
shouldBe("varInForInitExpr()","true");
shouldBe("varInSubFunction()","true");
shouldBe("varGlobal", "1");

var overrideVar = 1;
var overrideVar;
shouldBe("overrideVar", "1");

var overrideVar2 = 1;
var overrideVar2 = 2;
shouldBe("overrideVar2", "2");
