Provide Lit::new without the parsing feature
diff --git a/src/lit.rs b/src/lit.rs
index b1977cd..22648b8 100644
--- a/src/lit.rs
+++ b/src/lit.rs
@@ -6,9 +6,12 @@
// option. This file may not be copied, modified, or distributed
// except according to those terms.
-use proc_macro2::{Literal, Span, Term, TokenNode, TokenTree};
+use proc_macro2::{Literal, Span, TokenNode};
use std::str;
+#[cfg(feature = "printing")]
+use proc_macro2::{Term, TokenTree};
+
#[cfg(feature = "extra-traits")]
use std::hash::{Hash, Hasher};
@@ -351,85 +354,6 @@
|
_ => reject!()
));
-
- impl Lit {
- pub fn new(token: Literal, span: Span) -> Self {
- let value = token.to_string();
-
- match value::byte(&value, 0) {
- b'"' | b'r' => {
- return Lit::Str(LitStr {
- token: token,
- span: span,
- })
- }
- b'b' => match value::byte(&value, 1) {
- b'"' | b'r' => {
- return Lit::ByteStr(LitByteStr {
- token: token,
- span: span,
- })
- }
- b'\'' => {
- return Lit::Byte(LitByte {
- token: token,
- span: span,
- })
- }
- _ => {}
- },
- b'\'' => {
- return Lit::Char(LitChar {
- token: token,
- span: span,
- })
- }
- b'0'...b'9' => if number_is_int(&value) {
- return Lit::Int(LitInt {
- token: token,
- span: span,
- });
- } else if number_is_float(&value) {
- return Lit::Float(LitFloat {
- token: token,
- span: span,
- });
- } else {
- // number overflow
- return Lit::Verbatim(LitVerbatim {
- token: token,
- span: span,
- });
- },
- _ => if value == "true" || value == "false" {
- return Lit::Bool(LitBool {
- value: value == "true",
- span: span,
- });
- },
- }
-
- panic!("Unrecognized literal: {}", value);
- }
- }
-
- fn number_is_int(value: &str) -> bool {
- if number_is_float(value) {
- false
- } else {
- value::parse_lit_int(value).is_some()
- }
- }
-
- fn number_is_float(value: &str) -> bool {
- if value.contains('.') {
- true
- } else if value.starts_with("0x") || value.ends_with("size") {
- false
- } else {
- value.contains('e') || value.contains('E')
- }
- }
}
#[cfg(feature = "printing")]
@@ -516,6 +440,85 @@
use std::ops::{Index, RangeFrom};
use proc_macro2::TokenStream;
+ impl Lit {
+ pub fn new(token: Literal, span: Span) -> Self {
+ let value = token.to_string();
+
+ match value::byte(&value, 0) {
+ b'"' | b'r' => {
+ return Lit::Str(LitStr {
+ token: token,
+ span: span,
+ })
+ }
+ b'b' => match value::byte(&value, 1) {
+ b'"' | b'r' => {
+ return Lit::ByteStr(LitByteStr {
+ token: token,
+ span: span,
+ })
+ }
+ b'\'' => {
+ return Lit::Byte(LitByte {
+ token: token,
+ span: span,
+ })
+ }
+ _ => {}
+ },
+ b'\'' => {
+ return Lit::Char(LitChar {
+ token: token,
+ span: span,
+ })
+ }
+ b'0'...b'9' => if number_is_int(&value) {
+ return Lit::Int(LitInt {
+ token: token,
+ span: span,
+ });
+ } else if number_is_float(&value) {
+ return Lit::Float(LitFloat {
+ token: token,
+ span: span,
+ });
+ } else {
+ // number overflow
+ return Lit::Verbatim(LitVerbatim {
+ token: token,
+ span: span,
+ });
+ },
+ _ => if value == "true" || value == "false" {
+ return Lit::Bool(LitBool {
+ value: value == "true",
+ span: span,
+ });
+ },
+ }
+
+ panic!("Unrecognized literal: {}", value);
+ }
+ }
+
+ fn number_is_int(value: &str) -> bool {
+ if number_is_float(value) {
+ false
+ } else {
+ value::parse_lit_int(value).is_some()
+ }
+ }
+
+ fn number_is_float(value: &str) -> bool {
+ if value.contains('.') {
+ true
+ } else if value.starts_with("0x") || value.ends_with("size") {
+ false
+ } else {
+ value.contains('e') || value.contains('E')
+ }
+ }
+
/// Get the byte at offset idx, or a default of `b'\0'` if we're looking
/// past the end of the input buffer.
pub fn byte<S: AsRef<[u8]> + ?Sized>(s: &S, idx: usize) -> u8 {