function (oPathValue) {
			var oRawValue = oPathValue.value,
				oSubPathValue = oPathValue,
				sType;

			if (oRawValue === null) {
				sType = "Null";
			} else if (typeof oRawValue === "boolean") {
				sType = "Bool";
			} else if (typeof oRawValue === "number") {
				sType = isFinite(oRawValue) && Math.floor(oRawValue) === oRawValue
					? "Int32"
					: "Float";
			} else if (typeof oRawValue === "string") {
				sType = "String";
			} else {
				Basics.expectType(oPathValue, "object");

				["$And", "$Apply", "$Date", "$DateTimeOffset", "$Decimal", "$Float", "$Eq",
					"$Ge", "$Gt", "$Guid", "$If", "$Int", "$Le", "$Lt", "$Ne", "$Not", "$Null",
					"$Or", "$Path", "$PropertyPath", "$TimeOfDay"
				].forEach(function (sProperty) {
					if (oRawValue.hasOwnProperty(sProperty)) {
						sType = sProperty.slice(1);
						oSubPathValue = Basics.descend(oPathValue, sProperty);
					}
				});
			}

			switch (sType) {
				case "Apply": // 14.5.3 Expression edm:Apply
					return Expression.apply(oPathValue, oSubPathValue);

				case "If": // 14.5.6 Expression edm:If
					return Expression.conditional(oSubPathValue);

				case "Path": // 14.5.12 Expression edm:Path
				case "PropertyPath": // 14.5.13 Expression edm:PropertyPath
					return Expression.path(oSubPathValue);

				case "Date": // 14.4.3 Expression edm:Date
				case "DateTimeOffset": // 14.4.4 Expression edm:DateTimeOffset
				case "Decimal": // 14.4.5 Expression edm:Decimal
				case "Guid": // 14.4.9 Expression edm:Guid
				case "Int": // 14.4.10 Expression edm:Int
				case "String": // 14.4.11 Expression edm:String
				case "TimeOfDay": // 14.4.12 Expression edm:TimeOfDay
					Basics.expectType(oSubPathValue, "string");
					// fall through
				case "Bool": // 14.4.2 Expression edm:Bool
				case "Float": // 14.4.8 Expression edm:Float
				case "Int32": // 14.4.10 Expression edm:Int
					return SyncPromise.resolve(Expression.constant(oSubPathValue, sType));

				case "And":
				case "Eq":
				case "Ge":
				case "Gt":
				case "Le":
				case "Lt":
				case "Ne":
				case "Or":
					// 14.5.1 Comparison and Logical Operators
					return Expression.operator(oSubPathValue, sType);

				case "Not": // 14.5.1 Comparison and Logical Operators
					return Expression.not(oSubPathValue);

				case "Null": // 14.5.10 Expression edm:Null
					return SyncPromise.resolve({
						result : "constant",
						type : "edm:Null",
						value : null
					});

				default:
					return asyncError(oPathValue, "Unsupported OData expression");
			}
		}
function (oPathValue) {
			var oRawValue = oPathValue.value,
				oSubPathValue = oPathValue,
				sType;

			if (oRawValue === null) {
				sType = "Null";
			} else if (typeof oRawValue === "boolean") {
				sType = "Bool";
			} else if (typeof oRawValue === "number") {
				sType = isFinite(oRawValue) && Math.floor(oRawValue) === oRawValue
					? "Int32"
					: "Float";
			} else if (typeof oRawValue === "string") {
				sType = "String";
			} else {
				Basics.expectType(oPathValue, "object");

				["$And", "$Apply", "$Date", "$DateTimeOffset", "$Decimal", "$Float", "$Eq",
					"$Ge", "$Gt", "$Guid", "$If", "$Int", "$Le", "$Lt", "$Ne", "$Not", "$Null",
					"$Or", "$Path", "$PropertyPath", "$TimeOfDay"
				].forEach(function (sProperty) {
					if (oRawValue.hasOwnProperty(sProperty)) {
						sType = sProperty.slice(1);
						oSubPathValue = Basics.descend(oPathValue, sProperty);
					}
				});
			}

			switch (sType) {
				case "Apply": // 14.5.3 Expression edm:Apply
					return Expression.apply(oPathValue, oSubPathValue);

				case "If": // 14.5.6 Expression edm:If
					return Expression.conditional(oSubPathValue);

				case "Path": // 14.5.12 Expression edm:Path
				case "PropertyPath": // 14.5.13 Expression edm:PropertyPath
					return Expression.path(oSubPathValue);

				case "Date": // 14.4.3 Expression edm:Date
				case "DateTimeOffset": // 14.4.4 Expression edm:DateTimeOffset
				case "Decimal": // 14.4.5 Expression edm:Decimal
				case "Guid": // 14.4.9 Expression edm:Guid
				case "Int": // 14.4.10 Expression edm:Int
				case "String": // 14.4.11 Expression edm:String
				case "TimeOfDay": // 14.4.12 Expression edm:TimeOfDay
					Basics.expectType(oSubPathValue, "string");
					// fall through
				case "Bool": // 14.4.2 Expression edm:Bool
				case "Float": // 14.4.8 Expression edm:Float
				case "Int32": // 14.4.10 Expression edm:Int
					return SyncPromise.resolve(Expression.constant(oSubPathValue, sType));

				case "And":
				case "Eq":
				case "Ge":
				case "Gt":
				case "Le":
				case "Lt":
				case "Ne":
				case "Or":
					// 14.5.1 Comparison and Logical Operators
					return Expression.operator(oSubPathValue, sType);

				case "Not": // 14.5.1 Comparison and Logical Operators
					return Expression.not(oSubPathValue);

				case "Null": // 14.5.10 Expression edm:Null
					return SyncPromise.resolve({
						result : "constant",
						type : "edm:Null",
						value : null
					});

				default:
					return asyncError(oPathValue, "Unsupported OData expression");
			}
		}
function ( oPathValue ) { var oRawValue = oPathValue . value , oSubPathValue = oPathValue , sType ; if ( oRawValue === null ) { sType = "Null" ; } else if ( typeof oRawValue === "boolean" ) { sType = "Bool" ; } else if ( typeof oRawValue === "number" ) { sType = isFinite ( oRawValue ) && Math . floor ( oRawValue ) === oRawValue ? "Int32" : "Float" ; } else if ( typeof oRawValue === "string" ) { sType = "String" ; } else { Basics . expectType ( oPathValue , "object" ) ; [ "$And" , "$Apply" , "$Date" , "$DateTimeOffset" , "$Decimal" , "$Float" , "$Eq" , "$Ge" , "$Gt" , "$Guid" , "$If" , "$Int" , "$Le" , "$Lt" , "$Ne" , "$Not" , "$Null" , "$Or" , "$Path" , "$PropertyPath" , "$TimeOfDay" ] . forEach ( function ( sProperty ) { if ( oRawValue . hasOwnProperty ( sProperty ) ) { sType = sProperty . slice ( 1 ) ; oSubPathValue = Basics . descend ( oPathValue , sProperty ) ; } } ) ; } switch ( sType ) { case "Apply" : // 14.5.3 Expression edm:Apply return Expression . apply ( oPathValue , oSubPathValue ) ; case "If" : // 14.5.6 Expression edm:If return Expression . conditional ( oSubPathValue ) ; case "Path" : // 14.5.12 Expression edm:Path case "PropertyPath" : // 14.5.13 Expression edm:PropertyPath return Expression . path ( oSubPathValue ) ; case "Date" : // 14.4.3 Expression edm:Date case "DateTimeOffset" : // 14.4.4 Expression edm:DateTimeOffset case "Decimal" : // 14.4.5 Expression edm:Decimal case "Guid" : // 14.4.9 Expression edm:Guid case "Int" : // 14.4.10 Expression edm:Int case "String" : // 14.4.11 Expression edm:String case "TimeOfDay" : // 14.4.12 Expression edm:TimeOfDay Basics . expectType ( oSubPathValue , "string" ) ; // fall through case "Bool" : // 14.4.2 Expression edm:Bool case "Float" : // 14.4.8 Expression edm:Float case "Int32" : // 14.4.10 Expression edm:Int return SyncPromise . resolve ( Expression . constant ( oSubPathValue , sType ) ) ; case "And" : case "Eq" : case "Ge" : case "Gt" : case "Le" : case "Lt" : case "Ne" : case "Or" : // 14.5.1 Comparison and Logical Operators return Expression . operator ( oSubPathValue , sType ) ; case "Not" : // 14.5.1 Comparison and Logical Operators return Expression . not ( oSubPathValue ) ; case "Null" : // 14.5.10 Expression edm:Null return SyncPromise . resolve ( { result : "constant" , type : "edm:Null" , value : null } ) ; default : return asyncError ( oPathValue , "Unsupported OData expression" ) ; } }
Calculates an expression.

@param {object} oPathValue
path and value information pointing to the expression (see Expression object)
@returns {sap.ui.base.SyncPromise}
a sync promise which resolves with the result object or is rejected with an error
Calculates an expression .
Returns an object literal that represents the value of the node in the path.