@@ -1158,13 +1158,11 @@ var jsonata = (function() {
11581158 var result ;
11591159
11601160
1161+ var lhs = yield * evaluate ( expr . lhs , input , environment ) ;
11611162 if ( expr . rhs . type === 'function' ) {
11621163 // this is a function _invocation_; invoke it with lhs expression as the first argument
1163- expr . rhs . arguments . unshift ( expr . lhs ) ;
1164- result = yield * evaluateFunction ( expr . rhs , input , environment ) ;
1165- expr . rhs . arguments . shift ( ) ;
1164+ result = yield * evaluateFunction ( expr . rhs , input , environment , { context : lhs } ) ;
11661165 } else {
1167- var lhs = yield * evaluate ( expr . lhs , input , environment ) ;
11681166 var func = yield * evaluate ( expr . rhs , input , environment ) ;
11691167
11701168 if ( ! isFunction ( func ) ) {
@@ -1197,7 +1195,7 @@ var jsonata = (function() {
11971195 * @param {Object } environment - Environment
11981196 * @returns {* } Evaluated input data
11991197 */
1200- function * evaluateFunction ( expr , input , environment ) {
1198+ function * evaluateFunction ( expr , input , environment , applyto ) {
12011199 var result ;
12021200
12031201 // create the procedure
@@ -1217,6 +1215,9 @@ var jsonata = (function() {
12171215 }
12181216
12191217 var evaluatedArgs = [ ] ;
1218+ if ( typeof applyto !== 'undefined' ) {
1219+ evaluatedArgs . push ( applyto . context ) ;
1220+ }
12201221 // eager evaluation - evaluate the arguments
12211222 for ( var jj = 0 ; jj < expr . arguments . length ; jj ++ ) {
12221223 const arg = yield * evaluate ( expr . arguments [ jj ] , input , environment ) ;
0 commit comments