@@ -344,15 +344,16 @@ class Evaluation {
344344
345345 case 'CallExpression' : {
346346 const rune = get_rune ( expression , scope ) ;
347+
347348 if ( rune ) {
349+ const arg = /** @type {Expression | undefined } */ ( expression . arguments [ 0 ] ) ;
350+
348351 switch ( rune ) {
349352 case '$state' :
350353 case '$state.raw' :
351- if ( expression . arguments . length ) {
352- const evaluated = scope . evaluate (
353- /** @type {Expression } */ ( expression . arguments [ 0 ] )
354- ) ;
355- for ( let value of evaluated . values ) {
354+ case '$derived' :
355+ if ( arg ) {
356+ for ( let value of scope . evaluate ( arg ) . values ) {
356357 this . values . add ( value ) ;
357358 }
358359 } else {
@@ -369,25 +370,12 @@ class Evaluation {
369370 this . values . add ( true ) ;
370371 break ;
371372
372- case '$derived' : {
373- const evaluated = scope . evaluate ( /** @type {Expression } */ ( expression . arguments [ 0 ] ) ) ;
374- for ( let value of evaluated . values ) {
375- this . values . add ( value ) ;
376- }
377- break ;
378- }
379-
380373 case '$derived.by' :
381- if ( expression . arguments [ 0 ] ?. type === 'ArrowFunctionExpression' ) {
382- if ( expression . arguments [ 0 ] . body ?. type !== 'BlockStatement' ) {
383- const evaluated = scope . evaluate (
384- /** @type {Expression } */ ( expression . arguments [ 0 ] . body )
385- ) ;
386- for ( let value of evaluated . values ) {
387- this . values . add ( value ) ;
388- }
389- break ;
374+ if ( arg ?. type === 'ArrowFunctionExpression' && arg . body . type !== 'BlockStatement' ) {
375+ for ( let value of scope . evaluate ( arg . body ) . values ) {
376+ this . values . add ( value ) ;
390377 }
378+ break ;
391379 }
392380
393381 this . values . add ( UNKNOWN ) ;
@@ -397,10 +385,11 @@ class Evaluation {
397385 this . values . add ( UNKNOWN ) ;
398386 }
399387 }
400- } else if (
401- expression . callee . type === 'Identifier' &&
402- scope . get ( expression . callee . name ) === null
403- ) {
388+
389+ break ;
390+ }
391+
392+ if ( expression . callee . type === 'Identifier' && scope . get ( expression . callee . name ) === null ) {
404393 switch ( expression . callee . name ) {
405394 case 'Number' : {
406395 if ( expression . arguments . length ) {
0 commit comments