Hi! I'm trying to read the compiler code (mostly because I'm curious) and right now I'm trying to understand the handling of negative integer/float literals.
In token.rs we have: pub enum Lit { ... Integer(ast::Name), Float(ast::Name), ... } So at this stage these literals are still just (interned) strings. In lexer/ mod.rs we can see that the lexer doesn't consume any plus/minus sign, so the above tokens don't contain them. In ast.rs we have: pub enum Expr_ { ... /// A literal (For example: `1u8`, `"foo"`) ExprLit(P<Lit>), ... } pub enum Lit_ { ... /// An integer literal (`1u8`) LitInt(u64, LitIntType), /// A float literal (`1f64` or `1E10f64`) LitFloat(InternedString, FloatTy), /// A float literal without a suffix (`1.0 or 1.0E10`) LitFloatUnsuffixed(InternedString), ... } pub enum Sign { Minus, Plus } pub enum LitIntType { SignedIntLit(IntTy, Sign), UnsignedIntLit(UintTy), UnsuffixedIntLit(Sign) } I'd expect that somewhere in the code we'd construct e.g. an SignedIntLit with a Minus in it, but I cannot find a single place that does this after looking for all uses of ast::Minus ast::SignedIntLit, etc. So my question is, *since the sign isn't lexed together with the literal, how is it eventually added to the literal that's stored in in e.g. ast::LitInt?* -- Johan
_______________________________________________ Rust-dev mailing list Rust-dev@mozilla.org https://mail.mozilla.org/listinfo/rust-dev