Allow literals inside meta item lists
diff --git a/src/attr.rs b/src/attr.rs
index 64bcc4e..8f70319 100644
--- a/src/attr.rs
+++ b/src/attr.rs
@@ -37,7 +37,7 @@
     /// List meta item.
     ///
     /// E.g. `derive(..)` as in `#[derive(..)]`
-    List(Ident, Vec<MetaItem>),
+    List(Ident, Vec<NestedMetaItem>),
     /// Name value meta item.
     ///
     /// E.g. `feature = "foo"` as in `#[feature = "foo"]`
@@ -54,6 +54,19 @@
     }
 }
 
+/// Possible values inside of compile-time attribute lists.
+///
+/// E.g. the '..' in `#[name(..)]`.
+#[derive(Debug, Clone, Eq, PartialEq)]
+pub enum NestedMetaItem {
+    /// A full MetaItem, for recursive meta items.
+    MetaItem(MetaItem),
+    /// A literal.
+    ///
+    /// E.g. "foo", 64, true
+    Literal(Lit),
+}
+
 pub trait FilterAttrs<'a> {
     type Ret: Iterator<Item = &'a Attribute>;
 
@@ -177,7 +190,7 @@
         do_parse!(
             id: ident >>
             punct!("(") >>
-            inner: terminated_list!(punct!(","), meta_item) >>
+            inner: terminated_list!(punct!(","), nested_meta_item) >>
             punct!(")") >>
             (MetaItem::List(id, inner))
         )
@@ -191,6 +204,12 @@
         |
         map!(ident, MetaItem::Word)
     ));
+
+    named!(nested_meta_item -> NestedMetaItem, alt!(
+        meta_item => { NestedMetaItem::MetaItem }
+        |
+        lit => { NestedMetaItem::Literal }
+    ));
 }
 
 #[cfg(feature = "printing")]
@@ -258,4 +277,17 @@
             }
         }
     }
+
+    impl ToTokens for NestedMetaItem {
+        fn to_tokens(&self, tokens: &mut Tokens) {
+            match *self {
+                NestedMetaItem::MetaItem(ref nested) => {
+                    nested.to_tokens(tokens);
+                }
+                NestedMetaItem::Literal(ref lit) => {
+                    lit.to_tokens(tokens);
+                }
+            }
+        }
+    }
 }