function resolveScope( ast, node ) {
	var visitors;
	var scope;

	visitors = {};
	visitors[ node.type ] = onVisit;

	scope = [];
	walk( ast, visitors );

	return scope;

	/**
	* Callback invoked upon encountering an AST node.
	*
	* @private
	* @param {Node} n - AST node
	* @param {Array} parents - array of parent AST nodes
	*/
	function onVisit( n, parents ) {
		var locals;
		var i;
		var j;
		if ( n === node ) {
			// Note: the direction in which we traverse the list of parents does not matter, as we only care about identifier names, not where they were declared and to what value they are assigned. Meaning, we don't need to concern ourselves with whether a local scope redeclares a variable in a higher scope, as we are only concerned with a general list of identifier names available at the location of the provided AST node.
			for ( i = 0; i < parents.length-1; i++ ) {
				locals = parents[ i ].locals;
				if ( locals ) {
					for ( j = 0; j < locals.length; j++ ) {
						appendUnique( scope, locals[ j ] );
					}
				}
			}
		}
	}
}
Given an abstract syntax tree (AST) containing resolved local scopes, returns the local scope for a provided AST node.

@private
@param {AST} ast - abstract syntax tree (AST)
@param {Node} node - AST node
@returns {Array} local scope