* Implementation of the "Black Hole" variant from: * - http://jsperf.com/angularjs-parse-getter/4 * - http://jsperf.com/path-evaluation-simplified/7
(key0, key1, key2, key3, key4)
| 6462 | * - http://jsperf.com/path-evaluation-simplified/7 |
| 6463 | */ |
| 6464 | function cspSafeGetterFn(key0, key1, key2, key3, key4) { |
| 6465 | return function(scope, locals) { |
| 6466 | var pathVal = (locals && locals.hasOwnProperty(key0)) ? locals : scope, |
| 6467 | promise; |
| 6468 | |
| 6469 | if (pathVal === null || pathVal === undefined) return pathVal; |
| 6470 | |
| 6471 | pathVal = pathVal[key0]; |
| 6472 | if (pathVal && pathVal.then) { |
| 6473 | if (!("$$v" in pathVal)) { |
| 6474 | promise = pathVal; |
| 6475 | promise.$$v = undefined; |
| 6476 | promise.then(function(val) { promise.$$v = val; }); |
| 6477 | } |
| 6478 | pathVal = pathVal.$$v; |
| 6479 | } |
| 6480 | if (!key1 || pathVal === null || pathVal === undefined) return pathVal; |
| 6481 | |
| 6482 | pathVal = pathVal[key1]; |
| 6483 | if (pathVal && pathVal.then) { |
| 6484 | if (!("$$v" in pathVal)) { |
| 6485 | promise = pathVal; |
| 6486 | promise.$$v = undefined; |
| 6487 | promise.then(function(val) { promise.$$v = val; }); |
| 6488 | } |
| 6489 | pathVal = pathVal.$$v; |
| 6490 | } |
| 6491 | if (!key2 || pathVal === null || pathVal === undefined) return pathVal; |
| 6492 | |
| 6493 | pathVal = pathVal[key2]; |
| 6494 | if (pathVal && pathVal.then) { |
| 6495 | if (!("$$v" in pathVal)) { |
| 6496 | promise = pathVal; |
| 6497 | promise.$$v = undefined; |
| 6498 | promise.then(function(val) { promise.$$v = val; }); |
| 6499 | } |
| 6500 | pathVal = pathVal.$$v; |
| 6501 | } |
| 6502 | if (!key3 || pathVal === null || pathVal === undefined) return pathVal; |
| 6503 | |
| 6504 | pathVal = pathVal[key3]; |
| 6505 | if (pathVal && pathVal.then) { |
| 6506 | if (!("$$v" in pathVal)) { |
| 6507 | promise = pathVal; |
| 6508 | promise.$$v = undefined; |
| 6509 | promise.then(function(val) { promise.$$v = val; }); |
| 6510 | } |
| 6511 | pathVal = pathVal.$$v; |
| 6512 | } |
| 6513 | if (!key4 || pathVal === null || pathVal === undefined) return pathVal; |
| 6514 | |
| 6515 | pathVal = pathVal[key4]; |
| 6516 | if (pathVal && pathVal.then) { |
| 6517 | if (!("$$v" in pathVal)) { |
| 6518 | promise = pathVal; |
| 6519 | promise.$$v = undefined; |
| 6520 | promise.then(function(val) { promise.$$v = val; }); |
| 6521 | } |