aboutsummaryrefslogtreecommitdiff
path: root/gcc/testsuite/algol68/execute/lisp-2.a68
blob: 79ae697fd17d363818eee2c7d5daa5370ae2462c (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
# { dg-options "-fstropping=upper" }  #
BEGIN INT num constants := 0, num vars := 0, num operators := 0;
      PROC collect stats = (REF EXPRESSION expr) VOID:
      BEGIN CASE left OF expr
            IN (INT): num constants +:= 1,
               (CHAR): num vars +:= 1,
               (REF EXPRESSION s): collect stats (s)
            ESAC;
            num operators +:= 1;
            CASE right OF expr
            IN (INT): num constants +:= 1,
               (CHAR): num vars +:= 1,
               (REF EXPRESSION s): collect stats (s)
            ESAC
      END;
      MODE OPERAND = UNION (CHAR,INT,REF EXPRESSION),
           EXPRESSION = STRUCT (OPERAND left, CHAR operator, OPERAND right);
      REF EXPRESSION expression := HEAP EXPRESSION := ("X", "+", HEAP EXPRESSION := ("Y", "x", 2));
      collect stats (expression);
      ASSERT (num constants = 1 AND num vars = 2 AND num operators = 2)
END