From c519241bd497456c1658f0eccf30616818320675 Mon Sep 17 00:00:00 2001 From: Nilstrieb <48135649+Nilstrieb@users.noreply.github.com> Date: Tue, 5 Jul 2022 20:34:19 +0200 Subject: [PATCH] fix ints in ast --- parser/src/ast.rs | 12 +++++++++--- parser/src/parser.rs | 4 ++-- parser/src/parser/expr.rs | 2 +- .../parser__parser__tests__small_expressions.snap | 2 +- parser/src/pretty.rs | 13 +++++++++---- 5 files changed, 22 insertions(+), 11 deletions(-) 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) => {