#implicit_vars

compiles:
z = 0
to:
var z; z = 0

compiles:

function a() {
  a = 2
}

to: 
function a() {
  var a; a = 2
}

compiles: 
z = 0
function(a) {
  z = 1
}

to:
var z; z = 0
function(a) {
  z = 1
}

compiles: 
z = 0
function(a) {
  y = 1, z = 1
}

to:
var z; z = 0
function(a) {
  var y; y = 1, z = 1
}

compiles: 
var z = 0
function(a) {
  z = 1
}

to: 
var z; z = 0
function(a) {
  z = 1
}

compiles:
function f() {

}
x = 0

to:
var x; function f() {

}
x = 0

compiles:
a = 0, z = 0
to:
var a, z; a = 0, z = 0

compiles:
x=0
function() {
  function(){
    x = 1
  }
}

to:
var x; x=0
function() {
  function(){
    x = 1
  }
}

compiles: 
function() {
  x = 1, y = 2
}

to:
function() {
  var x, y; x = 1, y = 2
}