Skip to content

Commit f66fa3a

Browse files
Vinit-PanditShabiShett07
authored andcommitted
feat: add logic for eager evaluation of additional expression types
PR-URL: stdlib-js#5053 Ref: stdlib-js#2073 (comment) Reviewed-by: Athan Reines <[email protected]>
1 parent 541839d commit f66fa3a

File tree

1 file changed

+17
-1
lines changed

1 file changed

+17
-1
lines changed

lib/node_modules/@stdlib/repl/lib/eager_evaluator.js

+17-1
Original file line numberDiff line numberDiff line change
@@ -65,12 +65,13 @@ var ANSI_RESET = ANSI_COLORS[ 'reset' ];
6565
* @returns {boolean} boolean indicating whether the node is side-effect-free
6666
*/
6767
function traverse( node ) {
68+
var properties;
6869
var fname;
6970
var i;
7071
if ( !node ) {
7172
return false;
7273
}
73-
if ( node.type === 'Literal' || node.type === 'Identifier' ) {
74+
if ( node.type === 'Literal' || node.type === 'Identifier' || ( node.type === 'UnaryExpression' && node.operator !== 'delete' ) ) {
7475
return true;
7576
}
7677
if ( node.type === 'BinaryExpression' ) {
@@ -96,6 +97,21 @@ function traverse( node ) {
9697
}
9798
return true;
9899
}
100+
} else if ( node.type === 'ArrayExpression' ) {
101+
for ( i = 0; i < node.elements.length; i++ ) {
102+
if ( !traverse( node.elements[ i ] ) ) {
103+
return false;
104+
}
105+
}
106+
return true;
107+
} else if ( node.type === 'ObjectExpression' ) {
108+
for ( i = 0; i < node.properties.length; i++ ) {
109+
properties = node.properties;
110+
if ( !traverse( properties[ i ].key ) || !traverse( properties[ i ].value ) ) {
111+
return false;
112+
}
113+
}
114+
return true;
99115
}
100116
return false;
101117
}

0 commit comments

Comments
 (0)