Index: src/Tests/Expect-r/Subrange.txt
===================================================================
--- src/Tests/Expect-r/Subrange.txt	(revision b1d6dd544a60d22c07bdaaac6bc78180bf2015ad)
+++ src/Tests/Expect-r/Subrange.txt	(revision b1d6dd544a60d22c07bdaaac6bc78180bf2015ad)
@@ -0,0 +1,846 @@
+nameExpr is ?=?
+decl is ?=?: automatically generated function
+  with parameters
+    _dst: pointer to instance of type subrange (not function type) 
+    _src: instance of type subrange (not function type) 
+  returning 
+    instance of type subrange (not function type) 
+  with body 
+    CompoundStmt
+              Return Statement, returning: Applying untyped: 
+    Name: ?=?
+...to: 
+    Cast of:
+      Variable Expression: _dst: pointer to instance of type subrange (not function type) 
+
+    to:
+      pointer to instance of type base_t (not function type) 
+    Cast of:
+      Variable Expression: _src: instance of type subrange (not function type) 
+
+    to:
+      instance of type base_t (not function type) 
+
+
+
+newExpr is Variable Expression: ?=?: function
+    with parameters
+      _dst: pointer to instance of type subrange (not function type) 
+      _src: instance of type subrange (not function type) 
+    returning 
+      instance of type subrange (not function type) 
+
+
+alternatives before prune:
+Cost ( 0, 0, 0 ): Variable Expression: ?=?: function
+    with parameters
+      _dst: pointer to instance of type subrange (not function type) 
+      _src: instance of type subrange (not function type) 
+    returning 
+      instance of type subrange (not function type) 
+
+(types:
+    pointer to function
+        with parameters
+          _dst: pointer to instance of type subrange (not function type) 
+          _src: instance of type subrange (not function type) 
+        returning 
+          instance of type subrange (not function type) 
+
+)
+Environment: 
+
+there are 1 alternatives before elimination
+there are 1 alternatives after elimination
+alternatives before prune:
+Cost ( 0, 0, 0 ): Variable Expression: _dst: pointer to instance of type subrange (not function type) 
+(types:
+    lvalue pointer to instance of type subrange (not function type) 
+)
+Environment: 
+
+there are 1 alternatives before elimination
+there are 1 alternatives after elimination
+nameExpr is low
+nameExpr is high
+nameExpr is lbound
+decl is lbound: forall
+    T: type
+      with assertions
+        ?=?: pointer to 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
+    v: instance of type subrange (not function type) 
+      with parameters
+        instance of type T (not function type) 
+                  Name: low
+
+                  Name: high
+
+
+  returning 
+    instance of type T (not function type) 
+  with body 
+    CompoundStmt
+              Return Statement, returning: Name: low
+
+
+
+newExpr is Variable Expression: lbound: forall
+      T: type
+        with assertions
+          ?=?: pointer to 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
+      v: instance of type subrange (not function type) 
+        with parameters
+          instance of type T (not function type) 
+                      Name: low
+
+                      Name: high
+
+
+    returning 
+      instance of type T (not function type) 
+
+
+alternatives before prune:
+Cost ( 0, 0, 0 ): Variable Expression: lbound: forall
+      T: type
+        with assertions
+          ?=?: pointer to 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
+      v: instance of type subrange (not function type) 
+        with parameters
+          instance of type T (not function type) 
+                      Name: low
+
+                      Name: high
+
+
+    returning 
+      instance of type T (not function type) 
+
+(types:
+    pointer to forall
+          _0_T: type
+            with assertions
+              ?=?: pointer to function
+                  with parameters
+                    pointer to instance of type _0_T (not function type) 
+                    instance of type _0_T (not function type) 
+                  returning 
+                    instance of type _0_T (not function type) 
+
+
+        function
+        with parameters
+          v: instance of type subrange (not function type) 
+            with parameters
+              instance of type _0_T (not function type) 
+                              Name: low
+
+                              Name: high
+
+
+        returning 
+          instance of type _0_T (not function type) 
+
+)
+Environment: 
+
+there are 1 alternatives before elimination
+there are 1 alternatives after elimination
+nameExpr is day_of_month
+decl is day_of_month: instance of type subrange (not function type) 
+with parameters
+  unsigned int 
+      Name: 1
+
+  constant expression 31 signed int 
+
+newExpr is Variable Expression: day_of_month: instance of type subrange (not function type) 
+  with parameters
+    unsigned int 
+          Name: 1
+
+    constant expression 31 signed int 
+
+
+alternatives before prune:
+Cost ( 0, 0, 0 ): Variable Expression: day_of_month: instance of type subrange (not function type) 
+  with parameters
+    unsigned int 
+          Name: 1
+
+    constant expression 31 signed int 
+
+(types:
+    lvalue instance of type subrange (not function type) 
+      with parameters
+        unsigned int 
+                  Name: 1
+
+        constant expression 31 signed int 
+
+)
+Environment: 
+
+there are 1 alternatives before elimination
+there are 1 alternatives after elimination
+findSubExprs
+Cost ( 0, 0, 0 ): Variable Expression: day_of_month: instance of type subrange (not function type) 
+  with parameters
+    unsigned int 
+          Name: 1
+
+    constant expression 31 signed int 
+
+(types:
+    lvalue instance of type subrange (not function type) 
+      with parameters
+        unsigned int 
+                  Name: 1
+
+        constant expression 31 signed int 
+
+)
+Environment: 
+
+working on alternative: 
+        Cost ( 0, 0, 0 ):         Variable Expression: lbound: forall
+              T: type
+                with assertions
+                  ?=?: pointer to 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
+              v: instance of type subrange (not function type) 
+                with parameters
+                  instance of type T (not function type) 
+                                      Name: low
+
+                                      Name: high
+
+
+            returning 
+              instance of type T (not function type) 
+
+(types:
+            pointer to forall
+                  _0_T: type
+                    with assertions
+                      ?=?: pointer to function
+                          with parameters
+                            pointer to instance of type _0_T (not function type) 
+                            instance of type _0_T (not function type) 
+                          returning 
+                            instance of type _0_T (not function type) 
+
+
+                function
+                with parameters
+                  v: instance of type subrange (not function type) 
+                    with parameters
+                      instance of type _0_T (not function type) 
+                                              Name: low
+
+                                              Name: high
+
+
+                returning 
+                  instance of type _0_T (not function type) 
+
+)
+        Environment: 
+formal type is instance of type subrange (not function type) 
+with parameters
+  instance of type _0_T (not function type) 
+      Name: low
+
+      Name: high
+
+
+actual type is lvalue instance of type subrange (not function type) 
+with parameters
+  unsigned int 
+      Name: 1
+
+  constant expression 31 signed int 
+
+need assertions:
+?=?: pointer to function
+          with parameters
+            pointer to instance of type _0_T (not function type) 
+            instance of type _0_T (not function type) 
+          returning 
+            instance of type _0_T (not function type) 
+(used)============= original indexer
+===idTable===
+===typeTable===
+===structTable===
+===enumTable===
+===unionTable===
+===contextTable===
+============= new indexer
+===idTable===
+===typeTable===
+===structTable===
+===enumTable===
+===unionTable===
+===contextTable===
+inferRecursive: assertion is ?=?: pointer to function
+  with parameters
+    pointer to instance of type _0_T (not function type) 
+    instance of type _0_T (not function type) 
+  returning 
+    instance of type _0_T (not function type) 
+
+inferRecursive: candidate is ?=?: automatically generated function
+  with parameters
+    _dst: pointer to instance of type subrange (not function type) 
+    _src: instance of type subrange (not function type) 
+  returning 
+    instance of type subrange (not function type) 
+  with body 
+    CompoundStmt
+              Return Statement, returning: Applying untyped: 
+    Name: ?=?
+...to: 
+    Cast of:
+      Variable Expression: _dst: pointer to instance of type subrange (not function type) 
+
+    to:
+      pointer to instance of type base_t (not function type) 
+    Cast of:
+      Variable Expression: _src: instance of type subrange (not function type) 
+
+    to:
+      instance of type base_t (not function type) 
+
+
+
+unifying pointer to function
+  with parameters
+    pointer to instance of type _0_T (not function type) 
+    instance of type _0_T (not function type) 
+  returning 
+    instance of type _0_T (not function type) 
+ with pointer to function
+  with parameters
+    _dst: pointer to instance of type subrange (not function type) 
+    _src: instance of type subrange (not function type) 
+  returning 
+    instance of type subrange (not function type) 
+
+success!
+satisfying assertion 28 ?=?: pointer to function
+  with parameters
+    pointer to instance of type _0_T (not function type) 
+    instance of type _0_T (not function type) 
+  returning 
+    instance of type _0_T (not function type) 
+ with declaration 21 ?=?: automatically generated function
+  with parameters
+    _dst: pointer to instance of type subrange (not function type) 
+    _src: instance of type subrange (not function type) 
+  returning 
+    instance of type subrange (not function type) 
+  with body 
+    CompoundStmt
+              Return Statement, returning: Applying untyped: 
+    Name: ?=?
+...to: 
+    Cast of:
+      Variable Expression: _dst: pointer to instance of type subrange (not function type) 
+
+    to:
+      pointer to instance of type base_t (not function type) 
+    Cast of:
+      Variable Expression: _src: instance of type subrange (not function type) 
+
+    to:
+      instance of type base_t (not function type) 
+
+
+
+inferRecursive: candidate is ?=?: pointer to 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) 
+
+unifying pointer to function
+  with parameters
+    pointer to instance of type _0_T (not function type) 
+    instance of type _0_T (not function type) 
+  returning 
+    instance of type _0_T (not function type) 
+ with pointer to 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) 
+
+success!
+satisfying assertion 28 ?=?: pointer to function
+  with parameters
+    pointer to instance of type _0_T (not function type) 
+    instance of type _0_T (not function type) 
+  returning 
+    instance of type _0_T (not function type) 
+ with declaration 35 ?=?: pointer to 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) 
+
+actual expression:
+        Variable Expression: day_of_month: instance of type subrange (not function type) 
+          with parameters
+            unsigned int 
+                          Name: 1
+
+            constant expression 31 signed int 
+
+--- results are
+        lvalue instance of type subrange (not function type) 
+          with parameters
+            unsigned int 
+                          Name: 1
+
+            constant expression 31 signed int 
+
+
+converting lvalue instance of type subrange (not function type) 
+        with parameters
+          unsigned int 
+                      Name: 1
+
+          constant expression 31 signed int 
+
+ to instance of type subrange (not function type) 
+        with parameters
+          instance of type _0_T (not function type) 
+                      Name: low
+
+                      Name: high
+
+
+cost is( -1, -1, 0 )
+
+converting pointer to function
+          with parameters
+            _dst: pointer to instance of type subrange (not function type) 
+            _src: instance of type subrange (not function type) 
+          returning 
+            instance of type subrange (not function type) 
+
+ to pointer to function
+          with parameters
+            pointer to instance of type _0_T (not function type) 
+            instance of type _0_T (not function type) 
+          returning 
+            instance of type _0_T (not function type) 
+
+cost of conversion is ( 0, 0, 0 )
+Case +++++++++++++
+formals are:
+        v: instance of type subrange (not function type) 
+          with parameters
+            instance of type _0_T (not function type) 
+                          Name: low
+
+                          Name: high
+
+
+actuals are:
+                  Cast of:
+            Variable Expression: day_of_month: instance of type subrange (not function type) 
+              with parameters
+                unsigned int 
+                                  Name: 1
+
+                constant expression 31 signed int 
+
+
+          to:
+            instance of type subrange (not function type) 
+              with parameters
+                instance of type _0_T (not function type) 
+                                  Name: low
+
+                                  Name: high
+
+
+
+bindings are:
+        ( _0_T ) -> instance of type subrange (not function type)  (no widening)
+cost of conversion is:( -1, 2, 0 )
+actual expression:
+        Variable Expression: day_of_month: instance of type subrange (not function type) 
+          with parameters
+            unsigned int 
+                          Name: 1
+
+            constant expression 31 signed int 
+
+--- results are
+        lvalue instance of type subrange (not function type) 
+          with parameters
+            unsigned int 
+                          Name: 1
+
+            constant expression 31 signed int 
+
+
+converting lvalue instance of type subrange (not function type) 
+        with parameters
+          unsigned int 
+                      Name: 1
+
+          constant expression 31 signed int 
+
+ to instance of type subrange (not function type) 
+        with parameters
+          instance of type _0_T (not function type) 
+                      Name: low
+
+                      Name: high
+
+
+cost is( -1, -1, 0 )
+
+converting pointer to 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) 
+
+ to pointer to function
+          with parameters
+            pointer to instance of type _0_T (not function type) 
+            instance of type _0_T (not function type) 
+          returning 
+            instance of type _0_T (not function type) 
+
+cost of conversion is ( 0, 0, 0 )
+Case +++++++++++++
+formals are:
+        v: instance of type subrange (not function type) 
+          with parameters
+            instance of type _0_T (not function type) 
+                          Name: low
+
+                          Name: high
+
+
+actuals are:
+                  Cast of:
+            Variable Expression: day_of_month: instance of type subrange (not function type) 
+              with parameters
+                unsigned int 
+                                  Name: 1
+
+                constant expression 31 signed int 
+
+
+          to:
+            instance of type subrange (not function type) 
+              with parameters
+                instance of type _0_T (not function type) 
+                                  Name: low
+
+                                  Name: high
+
+
+
+bindings are:
+        ( _0_T ) -> instance of type T (not function type)  (no widening)
+cost of conversion is:( -1, 2, 0 )
+alternatives before prune:
+Cost ( -1, 2, 0 ): Application of
+  Variable Expression: lbound: forall
+        T: type
+          with assertions
+            ?=?: pointer to 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
+        v: instance of type subrange (not function type) 
+          with parameters
+            instance of type T (not function type) 
+                          Name: low
+
+                          Name: high
+
+
+      returning 
+        instance of type T (not function type) 
+
+to arguments
+      Cast of:
+      Variable Expression: day_of_month: instance of type subrange (not function type) 
+        with parameters
+          unsigned int 
+                      Name: 1
+
+          constant expression 31 signed int 
+
+
+    to:
+      instance of type subrange (not function type) 
+        with parameters
+          instance of type _0_T (not function type) 
+                      Name: low
+
+                      Name: high
+
+
+
+with inferred parameters:
+  ?=?: function
+    with parameters
+      _dst: pointer to instance of type subrange (not function type) 
+      _src: instance of type subrange (not function type) 
+    returning 
+      instance of type subrange (not function type) 
+
+(types:
+    instance of type _0_T (not function type) 
+)
+Environment:   ( _0_T ) -> instance of type subrange (not function type)  (no widening)
+
+
+Cost ( -1, 2, 0 ): Application of
+  Variable Expression: lbound: forall
+        T: type
+          with assertions
+            ?=?: pointer to 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
+        v: instance of type subrange (not function type) 
+          with parameters
+            instance of type T (not function type) 
+                          Name: low
+
+                          Name: high
+
+
+      returning 
+        instance of type T (not function type) 
+
+to arguments
+      Cast of:
+      Variable Expression: day_of_month: instance of type subrange (not function type) 
+        with parameters
+          unsigned int 
+                      Name: 1
+
+          constant expression 31 signed int 
+
+
+    to:
+      instance of type subrange (not function type) 
+        with parameters
+          instance of type _0_T (not function type) 
+                      Name: low
+
+                      Name: high
+
+
+
+with inferred parameters:
+  ?=?: pointer to 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) 
+
+(types:
+    instance of type _0_T (not function type) 
+)
+Environment:   ( _0_T ) -> instance of type T (not function type)  (no widening)
+
+
+there are 2 alternatives before elimination
+there are 2 alternatives after elimination
+nameExpr is ?!=?
+nameExpr is target
+decl is target: pointer to instance of type subrange (not function type) 
+with parameters
+  instance of type T (not function type) 
+      Name: low
+
+      Name: high
+
+
+newExpr is Variable Expression: target: pointer to instance of type subrange (not function type) 
+  with parameters
+    instance of type T (not function type) 
+          Name: low
+
+          Name: high
+
+
+
+alternatives before prune:
+Cost ( 0, 0, 0 ): Variable Expression: target: pointer to instance of type subrange (not function type) 
+  with parameters
+    instance of type T (not function type) 
+          Name: low
+
+          Name: high
+
+
+(types:
+    lvalue pointer to instance of type subrange (not function type) 
+      with parameters
+        instance of type T (not function type) 
+                  Name: low
+
+                  Name: high
+
+
+)
+Environment: 
+
+there are 1 alternatives before elimination
+there are 1 alternatives after elimination
+nameExpr is ?!=?
+nameExpr is target
+decl is target: pointer to instance of type subrange (not function type) 
+with parameters
+  instance of type T (not function type) 
+      Name: t_low
+
+      Name: t_high
+
+
+newExpr is Variable Expression: target: pointer to instance of type subrange (not function type) 
+  with parameters
+    instance of type T (not function type) 
+          Name: t_low
+
+          Name: t_high
+
+
+
+alternatives before prune:
+Cost ( 0, 0, 0 ): Variable Expression: target: pointer to instance of type subrange (not function type) 
+  with parameters
+    instance of type T (not function type) 
+          Name: t_low
+
+          Name: t_high
+
+
+(types:
+    lvalue pointer to instance of type subrange (not function type) 
+      with parameters
+        instance of type T (not function type) 
+                  Name: t_low
+
+                  Name: t_high
+
+
+)
+Environment: 
+
+there are 1 alternatives before elimination
+there are 1 alternatives after elimination
+Error: No reasonable alternatives for expression Cast of:
+  Variable Expression: _dst: pointer to instance of type subrange (not function type) 
+
+to:
+  pointer to instance of type base_t (not function type) 
+
+Error: No reasonable alternatives for expression Name: low
+
+Error: No reasonable alternatives for expression Name: high
+
+Error: No reasonable alternatives for expression Cast of:
+  Applying untyped: 
+      Name: lbound
+  ...to: 
+      Name: day_of_month
+
+to:
+  unsigned int 
+
+Error: No reasonable alternatives for expression Name: ?!=?
+
+Error: No reasonable alternatives for expression Cast of:
+  Name: target
+
+to:
+  instance of type subrange (not function type) 
+    with parameters
+      instance of type T (not function type) 
+              Name: low
+
+              Name: high
+
+
+
+Error: No reasonable alternatives for expression Name: ?!=?
+
+Error: No reasonable alternatives for expression Cast of:
+  Name: target
+
+to:
+  instance of type subrange (not function type) 
+    with parameters
+      instance of type T (not function type) 
+              Name: t_low
+
+              Name: t_high
+
+
+
