diff --git a/parser/src/ast.rs b/parser/src/ast.rs index 875e274..f8c7f5e 100644 --- a/parser/src/ast.rs +++ b/parser/src/ast.rs @@ -125,16 +125,22 @@ pub enum Stmt { pub enum TypeSpecifier { Void, Char, + SChar, + UChar, Short, + UShort, Int, + UInt, Long, + ULong, + LongLong, + ULongLong, Float, Double, - Signed, - Unsigned, + LongDouble, Bool, - Complex, // TODO + // complex // atomic-type-specifier // struct-or-union-specifier // enum-specifier diff --git a/parser/src/parser.rs b/parser/src/parser.rs index 74bbf24..4c95255 100644 --- a/parser/src/parser.rs +++ b/parser/src/parser.rs @@ -291,8 +291,8 @@ where Tok::Kw(Kw::Long) => TypeSpecifier::Long, Tok::Kw(Kw::Float) => TypeSpecifier::Float, Tok::Kw(Kw::Double) => TypeSpecifier::Double, - Tok::Kw(Kw::Signed) => TypeSpecifier::Signed, - Tok::Kw(Kw::Unsigned) => TypeSpecifier::Unsigned, + Tok::Kw(Kw::Signed) => TypeSpecifier::Int, + Tok::Kw(Kw::Unsigned) => TypeSpecifier::UInt, Tok::Kw(Kw::Bool) => TypeSpecifier::Bool, Tok::Kw(Kw::Complex) => { return Err(ParserError::new( diff --git a/parser/src/parser/expr.rs b/parser/src/parser/expr.rs index 87df712..6464fa0 100644 --- a/parser/src/parser/expr.rs +++ b/parser/src/parser/expr.rs @@ -20,7 +20,7 @@ where fn get_lhs(&mut self) -> Result> { let (typ, span) = match self.peek_t()? { - &(Tok::Ident(ident), span) => (Atom::Ident(ident.to_string()), span), + &(Tok::Ident(ident), span) => (Atom::Ident((ident.to_string(), span)), span), &(Tok::StringLiteral(literal), span) => (Atom::String(literal.to_string()), span), &(Tok::Constant(Constant::Int(int)), span) => (Atom::Int(int), span), &(Tok::Constant(Constant::Float(float)), span) => (Atom::Float(float), span), diff --git a/parser/src/parser/snapshots/parser__parser__tests__small_expressions.snap b/parser/src/parser/snapshots/parser__parser__tests__small_expressions.snap index 441425d..166fdaf 100644 --- a/parser/src/parser/snapshots/parser__parser__tests__small_expressions.snap +++ b/parser/src/parser/snapshots/parser__parser__tests__small_expressions.snap @@ -87,7 +87,7 @@ expression: "(parsed_pretty, pretty_printed_source)" }, init: Some(( Binary(ExprBinary { - lhs: (Atom(Ident("array")), 50..55), + lhs: (Atom(Ident(("array", 50..55))), 50..55), rhs: (Atom(Int(9)), 56..57), op: Index, }), diff --git a/parser/src/pretty.rs b/parser/src/pretty.rs index e949398..218897b 100644 --- a/parser/src/pretty.rs +++ b/parser/src/pretty.rs @@ -123,15 +123,20 @@ impl PrettyPrinter { self.string(match spec { TypeSpecifier::Void => "void", TypeSpecifier::Char => "char", + TypeSpecifier::SChar => "signed char", + TypeSpecifier::UChar => "unsigned char", TypeSpecifier::Short => "short", + TypeSpecifier::UShort => "usigned short", TypeSpecifier::Int => "int", + TypeSpecifier::UInt => "unsugned int", TypeSpecifier::Long => "long", + TypeSpecifier::ULong => "unsigned long", + TypeSpecifier::LongLong => "long", + TypeSpecifier::ULongLong => "unsigned long long", TypeSpecifier::Float => "float", TypeSpecifier::Double => "double", - TypeSpecifier::Signed => "signed", - TypeSpecifier::Unsigned => "unsigned", + TypeSpecifier::LongDouble => "long double", TypeSpecifier::Bool => "_Bool", - TypeSpecifier::Complex => "_Complex", }) } @@ -192,7 +197,7 @@ impl PrettyPrinter { fn expr(&mut self, expr: &Expr) -> Result { match expr { Expr::Atom(atom) => match atom { - Atom::Ident(ident) => self.string(ident), + Atom::Ident((ident, _)) => self.string(ident), Atom::Int(int) => write!(self.output, "{}", int), Atom::Float(float) => write!(self.output, "{}", float), Atom::String(string) => {