@@ -923,8 +923,8 @@ export class EvaluationContext {
923
923
const [ x ] = getArgs ( 1 ) ;
924
924
return float ( Math . exp ( toFloat ( x ! ) ) ) ;
925
925
}
926
- // TODO: extend()
927
- // TODO: filter()
926
+ // TODO: extend/extendnew ()
927
+ // TODO: filter/filternew ()
928
928
// TODO: flatten()
929
929
case 'float2nr' : {
930
930
const [ x ] = getArgs ( 1 ) ;
@@ -1176,28 +1176,31 @@ export class EvaluationContext {
1176
1176
const [ x ] = getArgs ( 1 ) ;
1177
1177
return float ( Math . log10 ( toFloat ( x ! ) ) ) ;
1178
1178
}
1179
- case 'map' : {
1179
+ case 'map' :
1180
+ case 'mapnew' : {
1180
1181
const [ seq , fn ] = getArgs ( 2 ) ;
1181
1182
switch ( seq ?. type ) {
1182
1183
case 'list' :
1183
- return list (
1184
- seq . items . map ( ( val , idx ) => {
1185
- switch ( fn ?. type ) {
1186
- case 'funcref' :
1187
- return this . evaluate ( funcrefCall ( fn , [ int ( idx ) , val ] ) ) ;
1188
- default :
1189
- this . localScopes . push (
1190
- new Map ( [
1191
- [ 'v:key' , new Variable ( int ( idx ) ) ] ,
1192
- [ 'v:val' , new Variable ( val ) ] ,
1193
- ] ) ,
1194
- ) ;
1195
- const retval = this . evaluate ( expressionParser . tryParse ( toString ( fn ! ) ) ) ;
1196
- this . localScopes . pop ( ) ;
1197
- return retval ;
1198
- }
1199
- } ) ,
1200
- ) ;
1184
+ const newItems = seq . items . map ( ( val , idx ) => {
1185
+ switch ( fn ?. type ) {
1186
+ case 'funcref' :
1187
+ return this . evaluate ( funcrefCall ( fn , [ int ( idx ) , val ] ) ) ;
1188
+ default :
1189
+ this . localScopes . push (
1190
+ new Map ( [
1191
+ [ 'v:key' , new Variable ( int ( idx ) ) ] ,
1192
+ [ 'v:val' , new Variable ( val ) ] ,
1193
+ ] ) ,
1194
+ ) ;
1195
+ const retval = this . evaluate ( expressionParser . tryParse ( toString ( fn ! ) ) ) ;
1196
+ this . localScopes . pop ( ) ;
1197
+ return retval ;
1198
+ }
1199
+ } ) ;
1200
+ if ( call . func === 'map' ) {
1201
+ seq . items = newItems ;
1202
+ }
1203
+ return list ( newItems ) ;
1201
1204
case 'dict_val' :
1202
1205
// TODO
1203
1206
// case 'blob':
0 commit comments