code: private Decl.Variable parseVariableDeclaration(EnclosingScope scope) {
  		int start = index;
  		//
  		Tuple<Modifier> modifiers = parseModifiers(Final);
  		Type type = parseType(scope);
  		Identifier name = parseIdentifier();
  		// Ensure at least one variable is defined by this pattern.
  		// Check that declared variables are not already defined.
  		scope.checkNameAvailable(name);
  		// A variable declaration may optionally be assigned an initialiser
  		// expression.
  		Expr initialiser = null;
  		if (tryAndMatch(true, Token.Kind.Equals) != null) {
  			initialiser = parseExpression(scope, false);
  		}
  		// Now, a new line indicates the end-of-statement
  		int end = index;
  		matchEndLine();
  		//
  		Decl.Variable decl;
  		if(initialiser != null) {
  			decl = new Decl.Variable(modifiers, name, type, initialiser);
  		} else {
  			decl = new Decl.Variable(modifiers, name, type);
  		}
  		// Done.
  		decl = annotateSourceLocation(decl, start);
  		// Finally, register the new variable in the enclosing scope. This
  		// should be done after parsing the initialiser expression to prevent it
  		// from referring to this variable.
  		scope.declareVariable(decl);
  		return decl;
  	}
docs: Parse a variable declaration statement which has the form:
  
  <pre>
  Type Identifier ['=' Expr] NewLine
  </pre>
  
  The optional <code>Expression</code> assignment is referred to as an
  <i>initialiser</i>.
  
  @param parameter
  The declared type for the variable, which will have already
  been parsed when disambiguating this statement from another.
  @param scope
  The enclosing scope for this statement, which determines the
  set of visible (i.e. declared) variables and also the current
  indentation level.
  
  @see wyc.lang.Stmt.VariableDeclaration
  
  @return