///|
pub struct SourceSpan {
  start : Int
  end : Int
  line : Int
  column : Int
} derive(Debug, Eq)

///|
pub suberror MoldError {
  LexerError((String, SourceSpan))
  ParserError((String, SourceSpan))
  UnknownFilter(String)
  DuplicateFilter(String)
  MissingVariable(String)
  MissingInclude(String)
  IncludeDepthExceeded
  TypeMismatch((String, String))
} derive(Debug, Eq)

///|
fn make_span(source : String, start : Int, end : Int) -> SourceSpan noraise {
  let mut line = 1
  let mut column = 1
  for i in 0..