From 9fb31defd037a90bf8f9e38fa33acae23a70b269 Mon Sep 17 00:00:00 2001 From: Laurenz Date: Wed, 4 Dec 2019 19:34:29 +0100 Subject: =?UTF-8?q?Expand=20functionality=20of=20function!=20macro=20?= =?UTF-8?q?=F0=9F=9B=B0?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/syntax/mod.rs | 87 +++++++------------------------------------------------ 1 file changed, 10 insertions(+), 77 deletions(-) (limited to 'src/syntax/mod.rs') diff --git a/src/syntax/mod.rs b/src/syntax/mod.rs index 9406fdf4..33413317 100644 --- a/src/syntax/mod.rs +++ b/src/syntax/mod.rs @@ -2,13 +2,15 @@ use std::fmt::{self, Display, Formatter}; -use crate::func::Function; +use crate::func::LayoutFunc; use crate::size::Size; mod tokens; #[macro_use] mod parsing; +mod span; +pub use span::{Span, Spanned}; pub use tokens::{tokenize, Tokens}; pub use parsing::{parse, ParseContext, ParseError, ParseResult}; @@ -90,7 +92,13 @@ pub enum Node { #[derive(Debug)] pub struct FuncCall { pub header: Spanned, - pub body: Spanned>, + pub body: Spanned>, +} + +impl PartialEq for FuncCall { + fn eq(&self, other: &FuncCall) -> bool { + (self.header == other.header) && (&self.body == &other.body) + } } /// Contains header information of a function invocation. @@ -134,12 +142,6 @@ pub enum Expression { Bool(bool), } -impl PartialEq for FuncCall { - fn eq(&self, other: &FuncCall) -> bool { - (self.header == other.header) && (&self.body == &other.body) - } -} - impl Display for Expression { fn fmt(&self, f: &mut Formatter) -> fmt::Result { use Expression::*; @@ -154,72 +156,3 @@ impl Display for Expression { } debug_display!(Expression); - -/// Annotates a value with the part of the source code it corresponds to. -#[derive(Copy, Clone, Eq, PartialEq)] -pub struct Spanned { - pub val: T, - pub span: Span, -} - -impl Spanned { - pub fn new(val: T, span: Span) -> Spanned { - Spanned { val, span } - } - - pub fn value(self) -> T { - self.val - } - - pub fn span_map(self, f: F) -> Spanned where F: FnOnce(T) -> U { - Spanned::new(f(self.val), self.span) - } -} - -impl Display for Spanned where T: std::fmt::Debug { - fn fmt(&self, f: &mut Formatter) -> fmt::Result { - write!(f, "({:?}:{})", self.val, self.span) - } -} - -debug_display!(Spanned; T where T: std::fmt::Debug); - -/// Describes a slice of source code. -#[derive(Copy, Clone, Eq, PartialEq)] -pub struct Span { - pub start: usize, - pub end: usize, -} - -impl Span { - pub fn new(start: usize, end: usize) -> Span { - Span { start, end } - } - - pub fn merge(a: Span, b: Span) -> Span { - Span { - start: a.start.min(b.start), - end: a.end.max(b.end), - } - } - - pub fn at(index: usize) -> Span { - Span { start: index, end: index + 1 } - } - - pub fn pair(&self) -> (usize, usize) { - (self.start, self.end) - } - - pub fn expand(&mut self, other: Span) { - *self = Span::merge(*self, other) - } -} - -impl Display for Span { - fn fmt(&self, f: &mut Formatter) -> fmt::Result { - write!(f, "[{}, {}]", self.start, self.end) - } -} - -debug_display!(Span); -- cgit v1.2.3