ref: 245a6f97e6b62ebf8a0018d38c5332fae68462b8
parent: 81d5b30accd3094e8feb44126e4dccf2f6e6c9e3
author: Tor Andersson <tor.andersson@artifex.com>
date: Mon Nov 5 10:48:22 EST 2018
Fix 700090, 700094, 700095: Iterate through lists in AST analysis passes.
--- a/jscompile.c
+++ b/jscompile.c
@@ -1221,6 +1221,14 @@
static void analyze(JF, js_Ast *node)
{
+ if (node->type == AST_LIST) {
+ while (node) {
+ analyze(J, F, node->a);
+ node = node->b;
+ }
+ return;
+ }
+
if (isfun(node->type)) {
F->lightweight = 0;
return; /* don't scan inner functions */
@@ -1277,6 +1285,14 @@
static void cvardecs(JF, js_Ast *node)
{
+ if (node->type == AST_LIST) {
+ while (node) {
+ cvardecs(J, F, node->a);
+ node = node->b;
+ }
+ return;
+ }
+
if (isfun(node->type))
return; /* stop at inner functions */
--- a/jsparse.c
+++ b/jsparse.c
@@ -942,6 +942,14 @@
double x, y;
int a, b;
+ if (node->type == AST_LIST) {
+ while (node) {
+ jsP_foldconst(node->a);
+ node = node->b;
+ }
+ return 0;
+ }
+
if (node->type == EXP_NUMBER)
return 1;