website/libs/handlebars.dev.js
function(parent, name /* , type*/) {
				var wrap,
					ret;
				if (parent.indexOf('depth') === 0) {
					wrap = true;
				}

				if (/^[0-9]+$/.test(name)) {
					ret = parent + "[" + name + "]";
				} else if (JavaScriptCompiler.isValidJavaScriptVariableName(name)) {
					ret = parent + "." + name;
				}
				else {
					ret = parent + "['" + name + "']";
				}

				if (wrap) {
					return '(' + parent + ' && ' + ret + ')';
				} else {
					return ret;
				}
			}
function(parent, name /* , type*/) {
				var wrap,
					ret;
				if (parent.indexOf('depth') === 0) {
					wrap = true;
				}

				if (/^[0-9]+$/.test(name)) {
					ret = parent + "[" + name + "]";
				} else if (JavaScriptCompiler.isValidJavaScriptVariableName(name)) {
					ret = parent + "." + name;
				}
				else {
					ret = parent + "['" + name + "']";
				}

				if (wrap) {
					return '(' + parent + ' && ' + ret + ')';
				} else {
					return ret;
				}
			}
PUBLIC API: You can override these methods in a subclass to provide alternative compiled forms for name lookup and buffering semantics