?=?: function
    with parameters
      pointer to signed int 
      signed int 
    returning 
      signed int 

?=?: function
    with parameters
      pointer to float 
      float 
    returning 
      float 

?=?: function
    with parameters
      pointer to pointer to signed int 
      pointer to signed int 
    returning 
      pointer to signed int 

?=?: function
    with parameters
      pointer to pointer to float 
      pointer to float 
    returning 
      pointer to float 

?=?: function
    with parameters
      pointer to char 
      char 
    returning 
      char 

?=?: function
    with parameters
      pointer to pointer to function
          with parameters
            void 
          returning 
            void 

      pointer to function
          with parameters
            void 
          returning 
            void 

    returning 
      pointer to function
          with parameters
            void 
          returning 
            void 


g1: function
      accepting unspecified arguments
    returning 
      void 
    with body 
      CompoundStmt
        Declaration of f: forall
              T: type
                with assertions
                  ?=?: function
                      with parameters
                        pointer to instance of type T (not function type) 
                        instance of type T (not function type) 
                      returning 
                        instance of type T (not function type) 


            function
            with parameters
              instance of type T (not function type) 
            returning 
              instance of type T (not function type) 

        Declaration of f: function
            with parameters
              signed int 
            returning 
              void 

        Declaration of h: function
            with parameters
              p: pointer to function
                  with parameters
                    void 
                  returning 
                    void 

            returning 
              void 

        Declaration of x: signed int 
        Declaration of y: pointer to function
            with parameters
              void 
            returning 
              void 

        Declaration of z: char 
        Declaration of w: float 
                  Expression Statement:
            Applying untyped: 
                Name: f
            ...to: 
                Name: x

                  Expression Statement:
            Applying untyped: 
                Name: f
            ...to: 
                Name: y

                  Expression Statement:
            Applying untyped: 
                Name: f
            ...to: 
                Name: z

                  Expression Statement:
            Applying untyped: 
                Name: f
            ...to: 
                Name: w

                  Expression Statement:
            Applying untyped: 
                Name: h
            ...to: 
                Applying untyped: 
                    Name: f
                ...to: 
                    Name: y


g2: function
      accepting unspecified arguments
    returning 
      void 
    with body 
      CompoundStmt
        Declaration of f: forall
              T: type
                with assertions
                  ?=?: function
                      with parameters
                        pointer to instance of type T (not function type) 
                        instance of type T (not function type) 
                      returning 
                        instance of type T (not function type) 


            function
            with parameters
              instance of type T (not function type) 
              instance of type T (not function type) 
            returning 
              void 

        Declaration of f: forall
              T: type
                with assertions
                  ?=?: function
                      with parameters
                        pointer to instance of type T (not function type) 
                        instance of type T (not function type) 
                      returning 
                        instance of type T (not function type) 


              U: type
                with assertions
                  ?=?: function
                      with parameters
                        pointer to instance of type U (not function type) 
                        instance of type U (not function type) 
                      returning 
                        instance of type U (not function type) 


            function
            with parameters
              instance of type T (not function type) 
              instance of type U (not function type) 
            returning 
              void 

        Declaration of x: signed int 
        Declaration of y: float 
        Declaration of z: pointer to signed int 
        Declaration of w: pointer to float 
                  Expression Statement:
            Applying untyped: 
                Name: f
            ...to: 
                Name: x
                Name: y

                  Expression Statement:
            Applying untyped: 
                Name: f
            ...to: 
                Name: z
                Name: w

                  Expression Statement:
            Applying untyped: 
                Name: f
            ...to: 
                Name: x
                Name: z


f: typedef for pointer to forall
      T: type
        with assertions
          ?=?: function
              with parameters
                pointer to instance of type T (not function type) 
                instance of type T (not function type) 
              returning 
                instance of type T (not function type) 


    function
    with parameters
      signed int 
    returning 
      signed int 

swap: forall
      T: type
        with assertions
          ?=?: function
              with parameters
                pointer to instance of type T (not function type) 
                instance of type T (not function type) 
              returning 
                instance of type T (not function type) 


    function
    with parameters
      left: instance of type T (not function type) 
      right: instance of type T (not function type) 
    returning 
      void 
    with body 
      CompoundStmt
        Declaration of temp: instance of type T (not function type) with initializer 
          Simple Initializer:             Name: left

                  Expression Statement:
            Applying untyped: 
                Name: ?=?
            ...to: 
                Address of:
                  Name: left
                Name: right

                  Expression Statement:
            Applying untyped: 
                Name: ?=?
            ...to: 
                Address of:
                  Name: right
                Name: temp


context sumable
    with parameters
      T: type

    with members
      0: const instance of type T (not function type) 
      ?+?: function
          with parameters
            instance of type T (not function type) 
            instance of type T (not function type) 
          returning 
            instance of type T (not function type) 

      ?++: function
          with parameters
            instance of type T (not function type) 
          returning 
            instance of type T (not function type) 

      ?+=?: function
          with parameters
            instance of type T (not function type) 
            instance of type T (not function type) 
          returning 
            instance of type T (not function type) 


T1: type
  with assertions
    0: const instance of type T1 (not function type) 
    ?+?: function
        with parameters
          instance of type T1 (not function type) 
          instance of type T1 (not function type) 
        returning 
          instance of type T1 (not function type) 

    ?++: function
        with parameters
          instance of type T1 (not function type) 
        returning 
          instance of type T1 (not function type) 

    ?+=?: function
        with parameters
          instance of type T1 (not function type) 
          instance of type T1 (not function type) 
        returning 
          instance of type T1 (not function type) 


T2: type
  with parameters
    P1: type
    P2: type

T3: type
  with assertions
    instance of context sumable 
      with parameters
        instance of type T3 (not function type) 


struct __anonymous0
    with members
      i: instance of type P1 (not function type) 
      j: instance of type P2 (not function type) 

T2: type for instance of struct __anonymous0 
  with parameters
    P1: type
    P2: type

  with assertions
    instance of context sumable 
      with parameters
        instance of type T2 (not function type) 
          with parameters
            instance of type P1 (not function type) 
            instance of type P2 (not function type) 



w1: instance of type T2 (not function type) 
  with parameters
    signed int 
    signed int 

w2: typedef for instance of type T2 (not function type) 
  with parameters
    signed int 
    signed int 

g2: instance of type w2 (not function type) 
w3: type for instance of type T2 (not function type) 
  with parameters
    signed int 
    signed int 

g3: instance of type w3 (not function type) 
sum: forall
      T: type
        with assertions
          ?=?: function
              with parameters
                pointer to instance of type T (not function type) 
                instance of type T (not function type) 
              returning 
                instance of type T (not function type) 

          instance of context sumable 
            with parameters
              instance of type T (not function type) 


    function
    with parameters
      n: signed int 
      a: open array of instance of type T (not function type) 
    returning 
      instance of type T (not function type) 
    with body 
      CompoundStmt
        Declaration of total: instance of type T (not function type) with initializer 
          Simple Initializer:             Name: 0

        Declaration of i: signed int 
                  Labels: {}
          For Statement
            initialization: 
              Expression Statement:
                Applying untyped: 
                    Name: ?=?
                ...to: 
                    Address of:
                      Name: i
                    Name: 0

            condition: 
              Cast of:
                Applying untyped: 
                    Name: ?!=?
                ...to: 
                    Applying untyped: 
                        Name: ?<?
                    ...to: 
                        Name: i
                        Name: n
                    Name: 0

              to:
                signed int 

            increment: 
              Applying untyped: 
                  Name: ?+=?
              ...to: 
                  Address of:
                    Name: i
                  Name: 1

            statement block: 
              Expression Statement:
                Applying untyped: 
                    Name: ?=?
                ...to: 
                    Address of:
                      Name: total
                    Applying untyped: 
                        Name: ?+?
                    ...to: 
                        Name: total
                        Applying untyped: 
                            Name: ?[?]
                        ...to: 
                            Name: a
                            Name: i


                  Return Statement, returning: Name: total



twice: forall
      T: type
        with assertions
          ?=?: function
              with parameters
                pointer to instance of type T (not function type) 
                instance of type T (not function type) 
              returning 
                instance of type T (not function type) 

          0: const instance of type T (not function type) 
          ?+?: function
              with parameters
                instance of type T (not function type) 
                instance of type T (not function type) 
              returning 
                instance of type T (not function type) 

          ?++: function
              with parameters
                instance of type T (not function type) 
              returning 
                instance of type T (not function type) 

          ?+=?: function
              with parameters
                instance of type T (not function type) 
                instance of type T (not function type) 
              returning 
                instance of type T (not function type) 


    function
    with parameters
      t: instance of type T (not function type) 
    returning 
      instance of type T (not function type) 
    with body 
      CompoundStmt
                  Return Statement, returning: Applying untyped: 
    Name: ?+?
...to: 
    Name: t
    Name: t



min: forall
      T: type
        with assertions
          ?=?: function
              with parameters
                pointer to instance of type T (not function type) 
                instance of type T (not function type) 
              returning 
                instance of type T (not function type) 

          0: const instance of type T (not function type) 
          ?!=?: function
              with parameters
                instance of type T (not function type) 
                instance of type T (not function type) 
              returning 
                signed int 

          ?<?: function
              with parameters
                instance of type T (not function type) 
                instance of type T (not function type) 
              returning 
                signed int 


    function
    with parameters
      t1: instance of type T (not function type) 
      t2: instance of type T (not function type) 
    returning 
      instance of type T (not function type) 
    with body 
      CompoundStmt
                  Return Statement, returning: Conditional expression on: 
  Cast of:
    Applying untyped: 
        Name: ?!=?
    ...to: 
        Applying untyped: 
            Name: ?<?
        ...to: 
            Name: t1
            Name: t2
        Name: 0

  to:
    signed int 
First alternative:
  Name: t1
Second alternative:
  Name: t2




main: C function
      accepting unspecified arguments
    returning 
      signed int 
    with body 
      CompoundStmt
        Declaration of x: signed int with initializer 
          Simple Initializer:             Name: 1

        Declaration of y: signed int with initializer 
          Simple Initializer: constant expression 2 signed int 
        Declaration of a: array of signed int with dimension of constant expression 10 signed int 
        Declaration of f: float 
                  Expression Statement:
            Applying untyped: 
                Name: swap
            ...to: 
                Name: x
                Name: y

                  Expression Statement:
            Applying untyped: 
                Name: twice
            ...to: 
                Name: x

                  Expression Statement:
            Applying untyped: 
                Name: ?=?
            ...to: 
                Address of:
                  Name: f
                Applying untyped: 
                    Name: min
                ...to: 
constant expression 4.0 double constant expression 3.0 double 
                  Expression Statement:
            Applying untyped: 
                Name: sum
            ...to: 
constant expression 10 signed int                 Name: a


