			function $parse(exp, interceptorFn) {
				var parsedExpression, oneTime, cacheKey;

				switch (typeof exp) {
					case "string":
						exp = exp.trim();
						cacheKey = exp;

						parsedExpression = cache[cacheKey];

						if (!parsedExpression) {
							if (exp.charAt(0) === ":" && exp.charAt(1) === ":") {
								oneTime = true;
								exp = exp.substring(2);
							}
							var lexer = new Lexer($parseOptions);
							var parser = new Parser(lexer, $filter, $parseOptions);
							parsedExpression = parser.parse(exp);
							if (parsedExpression.constant) {
								parsedExpression.$$watchDelegate = constantWatchDelegate;
							} else if (oneTime) {
								parsedExpression.$$watchDelegate = parsedExpression.literal
									? oneTimeLiteralWatchDelegate
									: oneTimeWatchDelegate;
							} else if (parsedExpression.inputs) {
								parsedExpression.$$watchDelegate = inputsWatchDelegate;
							}
							cache[cacheKey] = parsedExpression;
						}
						return addInterceptor(parsedExpression, interceptorFn);

					case "function":
						return addInterceptor(exp, interceptorFn);

					default:
						return addInterceptor(noop, interceptorFn);
				}
			}
The software constructs all or part of a command, data structure, or record using externally-influenced input from an upstream component, but it does not neutralize or incorrectly neutralizes special elements that could modify how it is parsed or interpreted when it is sent to a downstream component.