Add support for parsing const expressions in type argument position
diff --git a/src/gen/fold.rs b/src/gen/fold.rs
index 6a6dddc..186e380 100644
--- a/src/gen/fold.rs
+++ b/src/gen/fold.rs
@@ -1470,6 +1470,11 @@
                 _visitor.fold_type_binding(_binding_0),
             )
         }
+        Const(_binding_0, ) => {
+            Const (
+                full!(_visitor.fold_expr_block(_binding_0)),
+            )
+        }
     }
 }
 
diff --git a/src/gen/visit.rs b/src/gen/visit.rs
index efe7b47..3387d99 100644
--- a/src/gen/visit.rs
+++ b/src/gen/visit.rs
@@ -1143,6 +1143,9 @@
         TypeBinding(ref _binding_0, ) => {
             _visitor.visit_type_binding(&* _binding_0);
         }
+        Const(ref _binding_0, ) => {
+            full!(_visitor.visit_expr_block(&* _binding_0));
+        }
     }
 }
 
diff --git a/src/gen/visit_mut.rs b/src/gen/visit_mut.rs
index 77eaaca..aadef50 100644
--- a/src/gen/visit_mut.rs
+++ b/src/gen/visit_mut.rs
@@ -1143,6 +1143,9 @@
         TypeBinding(ref mut _binding_0, ) => {
             _visitor.visit_type_binding_mut(&mut * _binding_0);
         }
+        Const(ref mut _binding_0, ) => {
+            full!(_visitor.visit_expr_block_mut(&mut * _binding_0));
+        }
     }
 }
 
diff --git a/src/ty.rs b/src/ty.rs
index 413fe5b..085bf9c 100644
--- a/src/ty.rs
+++ b/src/ty.rs
@@ -201,6 +201,11 @@
         ///
         /// E.g., `Foo<A=Bar>`.
         TypeBinding(TypeBinding),
+        /// Const expression. Must be inside of a block.
+        ///
+        /// NOTE: Identity expressions are represented as Type arguments, as
+        /// they are indistinguishable syntactically.
+        Const(ExprBlock),
     }
 }
 
@@ -691,6 +696,7 @@
         }
     }
 
+    #[cfg(not(feature = "full"))]
     impl Synom for GenericArgument {
         named!(parse -> Self, alt!(
             call!(ty_no_eq_after) => { GenericArgument::Type }
@@ -701,6 +707,19 @@
         ));
     }
 
+    #[cfg(feature = "full")]
+    impl Synom for GenericArgument {
+        named!(parse -> Self, alt!(
+            call!(ty_no_eq_after) => { GenericArgument::Type }
+            |
+            syn!(Lifetime) => { GenericArgument::Lifetime }
+            |
+            syn!(TypeBinding) => { GenericArgument::TypeBinding }
+            |
+            syn!(ExprBlock) => { GenericArgument::Const }
+        ));
+    }
+
     impl Synom for AngleBracketedGenericArguments {
         named!(parse -> Self, do_parse!(
             turbofish: option!(punct!(::)) >>
@@ -1029,6 +1048,10 @@
                 GenericArgument::Lifetime(ref lt) => lt.to_tokens(tokens),
                 GenericArgument::Type(ref ty) => ty.to_tokens(tokens),
                 GenericArgument::TypeBinding(ref tb) => tb.to_tokens(tokens),
+                #[cfg(not(feature = "full"))]
+                GenericArgument::Const(_) => unreachable!(),
+                #[cfg(feature = "full")]
+                GenericArgument::Const(ref eb) => eb.to_tokens(tokens),
             }
         }
     }