io::Result as IoResult,
iter::once,
mem::take,
- ops::{Range, RangeBounds, RangeInclusive},
+ ops::{Range, RangeInclusive},
path::Path,
- ptr,
+ ptr, slice,
sync::Arc,
};
}
/// A token in a [`Source`].
-struct LexToken<'a> {
+pub struct LexToken<'a> {
/// The regular token.
- token: Token,
+ pub token: Token,
- file: &'a SourceFile,
+ pub file: &'a SourceFile,
/// For a token obtained through the lexer in an ordinary way, this is the
/// location of the token in the [`Source`]'s buffer.
macro_rep: Option<MacroRepresentation>,
}
+impl LexToken<'_> {
+ pub fn force_string(&self) -> Result<&str, Diagnostic> {
+ if let Token::String(s) = &self.token {
+ Ok(s.as_str())
+ } else {
+ let slice = TokenSlice {
+ tokens: slice::from_ref(self),
+ };
+ Err(slice.error("Syntax error expecting string."))
+ }
+ }
+}
+
struct LexError {
error: ScanError,
pos: Range<usize>,
tokens: Vec<LexToken<'a>>,
}
+impl<'a> Tokens<'a> {
+ fn new(tokens: Vec<LexToken<'a>>) -> Self {
+ assert!(matches!(tokens.last().unwrap().token, Token::End));
+ Self { tokens }
+ }
+}
+
impl Debug for Tokens<'_> {
fn fmt(&self, f: &mut Formatter<'_>) -> FmtResult {
write!(f, "Tokens {{ ")?;
}
}
- pub fn get(&self, index: usize) -> Option<&Token> {
- self.tokens.get(index).map(|token| &token.token)
+ pub fn get_token(&self, index: usize) -> Option<&Token> {
+ self.get(index).map(|token| &token.token)
+ }
+
+ pub fn get(&self, index: usize) -> Option<&LexToken> {
+ if index < self.len() {
+ Some(&self.tokens[index])
+ } else {
+ None
+ }
}
- pub fn error<S, B>(&self, range: B, text: S) -> Diagnostic
+ pub fn error<S>(&self, text: S) -> Diagnostic
where
S: ToString,
- B: RangeBounds<usize>,
{
- self.subslice(range)
- .diagnostic(Severity::Error, text.to_string())
+ self.diagnostic(Severity::Error, text.to_string())
}
- pub fn subslice<B>(&self, range: B) -> Self
- where
- B: RangeBounds<usize>,
- {
+ pub fn subslice(&self, range: Range<usize>) -> Self {
+ debug_assert!(range.start <= range.end);
+ debug_assert!(range.end <= self.len());
Self {
- tokens: &self.tokens[(range.start_bound().cloned(), range.end_bound().cloned())],
+ tokens: &self.tokens[range.start..range.end + 1],
}
}
+ fn first(&self) -> &LexToken {
+ self.tokens.first().unwrap()
+ }
+ fn last(&self) -> &LexToken {
+ self.tokens.last().unwrap()
+ }
+
fn file(&self) -> Option<&SourceFile> {
- if !self.tokens.is_empty() {
- let first = &self.tokens[0];
- let last = &self.tokens[self.tokens.len() - 1];
- if ptr::eq(first.file, last.file) {
- return Some(first.file);
- }
+ let first = self.first();
+ let last = self.last();
+ if ptr::eq(first.file, last.file) {
+ Some(first.file)
+ } else {
+ None
}
- None
+ }
+
+ pub fn len(&self) -> usize {
+ self.tokens.len() - 1
+ }
+
+ pub fn is_empty(&self) -> bool {
+ self.len() == 0
+ }
+
+ pub fn iter(&self) -> std::slice::Iter<LexToken> {
+ (&self.tokens[..self.len()]).iter()
}
/// If the tokens contains a macro call, this returns the raw
///
/// Returns `None` if the token range doesn't include a macro call.
fn get_macro_call(&self) -> Option<&str> {
- if self.tokens.iter().any(|token| token.macro_rep.is_some()) {
+ if self.iter().any(|token| token.macro_rep.is_some()) {
let token0 = &self.tokens[0];
let token1 = &self.tokens[self.tokens.len() - 1];
if let Some(file) = self.file() {
fn location(&self) -> Location {
if let Some(file) = self.file() {
- file.token_location(self.tokens.first().unwrap()..=self.tokens.last().unwrap())
+ file.token_location(self.first()..=self.last())
} else {
- Location::default()
+ // XXX support non-contiguous locations?
+ let first = self.first();
+ first.file.token_location(self.first()..=self.first())
}
}
end: Point { line: l1, .. },
}) = location.span
{
- let file = self.file().unwrap();
- let lines = if l1 - l0 > 3 {
- vec![l0, l0 + 1, l1]
- } else {
- (l0..=l1).collect()
- };
- for line_number in lines {
- source.push((line_number, file.get_line(line_number).to_string()));
+ if let Some(file) = self.file() {
+ let lines = if l1 - l0 > 3 {
+ vec![l0, l0 + 1, l1]
+ } else {
+ (l0..=l1).collect()
+ };
+ for line_number in lines {
+ source.push((line_number, file.get_line(line_number).to_string()));
+ }
}
}
if let Some(end) = self
.lookahead
.iter()
- .position(|token| token.token == Token::EndCommand)
+ .position(|token| token.token == Token::End)
{
- return Some(Tokens {
- tokens: self.lookahead.drain(..=end).collect(),
- });
+ return Some(Tokens::new(self.lookahead.drain(..=end).collect()));
}
if !self.read_lookahead(macros) {
return None;
match ScanToken::from_segment(&self.file.buffer[pos.clone()], seg_type) {
None => (),
Some(ScanToken::Token(token)) => {
- let end = token == Token::EndCommand;
+ let end = token == Token::End;
pp.push_back(LexToken {
file: self.file,
token,
Token::Id(s) => print!("Token::Id(String::from({s:?}))"),
Token::Number(number) => print!("Token::Number({number:?})"),
Token::String(s) => print!("Token::String(String::from({s:?}))"),
- Token::EndCommand => print!("Token::EndCommand"),
+ Token::End => print!("Token::EndCommand"),
Token::Punct(punct) => print!("Token::Punct(Punct::{punct:?})"),
}
}
ScanToken::Token(Token::Id(Identifier::new("x").unwrap())),
ScanToken::Token(Token::Punct(Punct::Underscore)),
ScanToken::Token(Token::Id(Identifier::new("z").unwrap())),
- ScanToken::Token(Token::EndCommand),
+ ScanToken::Token(Token::End),
ScanToken::Token(Token::Id(Identifier::new("abcd.").unwrap())),
ScanToken::Token(Token::Id(Identifier::new("abcd").unwrap())),
- ScanToken::Token(Token::EndCommand),
+ ScanToken::Token(Token::End),
ScanToken::Token(Token::Id(Identifier::new("QRSTUV").unwrap())),
- ScanToken::Token(Token::EndCommand),
+ ScanToken::Token(Token::End),
ScanToken::Token(Token::Id(Identifier::new("QrStUv").unwrap())),
- ScanToken::Token(Token::EndCommand),
+ ScanToken::Token(Token::End),
ScanToken::Token(Token::Id(Identifier::new("WXYZ").unwrap())),
- ScanToken::Token(Token::EndCommand),
+ ScanToken::Token(Token::End),
ScanToken::Error(ScanError::UnexpectedChar('�')),
- ScanToken::Token(Token::EndCommand),
+ ScanToken::Token(Token::End),
],
);
}
ScanToken::Token(Token::Id(Identifier::new("withx").unwrap())),
ScanToken::Token(Token::Id(Identifier::new("and.").unwrap())),
ScanToken::Token(Token::Punct(Punct::With)),
- ScanToken::Token(Token::EndCommand),
+ ScanToken::Token(Token::End),
],
);
}
ScanToken::Token(Token::Number(1.0)),
ScanToken::Token(Token::Number(1.0)),
ScanToken::Token(Token::Number(1.0)),
- ScanToken::Token(Token::EndCommand),
+ ScanToken::Token(Token::End),
ScanToken::Token(Token::Number(123.0)),
- ScanToken::Token(Token::EndCommand),
- ScanToken::Token(Token::EndCommand),
+ ScanToken::Token(Token::End),
+ ScanToken::Token(Token::End),
ScanToken::Token(Token::Number(1.0)),
ScanToken::Token(Token::Number(0.1)),
ScanToken::Token(Token::Number(0.1)),
ScanToken::Token(Token::Number(70.0)),
ScanToken::Token(Token::Number(60.0)),
ScanToken::Token(Token::Number(0.006)),
- ScanToken::Token(Token::EndCommand),
+ ScanToken::Token(Token::End),
ScanToken::Token(Token::Number(30.0)),
ScanToken::Token(Token::Number(0.04)),
ScanToken::Token(Token::Number(5.0)),
ScanToken::Token(Token::Number(789.0)),
ScanToken::Token(Token::Number(999.0)),
ScanToken::Token(Token::Number(0.0112)),
- ScanToken::Token(Token::EndCommand),
+ ScanToken::Token(Token::End),
ScanToken::Error(ScanError::ExpectedExponent(String::from("1e"))),
ScanToken::Token(Token::Id(Identifier::new("e1").unwrap())),
ScanToken::Error(ScanError::ExpectedExponent(String::from("1e+"))),
ScanToken::Token(Token::Number(-1.0)),
ScanToken::Token(Token::Number(-1.0)),
ScanToken::Token(Token::Number(-1.0)),
- ScanToken::Token(Token::EndCommand),
+ ScanToken::Token(Token::End),
ScanToken::Token(Token::Number(-123.0)),
- ScanToken::Token(Token::EndCommand),
+ ScanToken::Token(Token::End),
ScanToken::Token(Token::Number(-0.1)),
ScanToken::Token(Token::Number(-0.1)),
ScanToken::Token(Token::Number(-0.1)),
ScanToken::Error(ScanError::ExpectedExponent(String::from("-1e+"))),
ScanToken::Error(ScanError::ExpectedExponent(String::from("-1e-"))),
ScanToken::Token(Token::Number(-1.0)),
- ScanToken::Token(Token::EndCommand),
+ ScanToken::Token(Token::End),
],
);
}
ScanToken::Token(Token::String(String::from("foobar"))),
ScanToken::Token(Token::String(String::from("foo"))),
ScanToken::Token(Token::Punct(Punct::Plus)),
- ScanToken::Token(Token::EndCommand),
+ ScanToken::Token(Token::End),
ScanToken::Token(Token::String(String::from("bar"))),
- ScanToken::Token(Token::EndCommand),
+ ScanToken::Token(Token::End),
ScanToken::Token(Token::Punct(Punct::Plus)),
ScanToken::Token(Token::String(String::from("AB5152"))),
ScanToken::Token(Token::String(String::from("4142QR"))),
"#,
Syntax::Auto,
&[
- ScanToken::Token(Token::EndCommand),
- ScanToken::Token(Token::EndCommand),
- ScanToken::Token(Token::EndCommand),
- ScanToken::Token(Token::EndCommand),
- ScanToken::Token(Token::EndCommand),
- ScanToken::Token(Token::EndCommand),
- ScanToken::Token(Token::EndCommand),
+ ScanToken::Token(Token::End),
+ ScanToken::Token(Token::End),
+ ScanToken::Token(Token::End),
+ ScanToken::Token(Token::End),
+ ScanToken::Token(Token::End),
+ ScanToken::Token(Token::End),
+ ScanToken::Token(Token::End),
ScanToken::Token(Token::Id(Identifier::new("com").unwrap())),
ScanToken::Token(Token::Id(Identifier::new("is").unwrap())),
ScanToken::Token(Token::Id(Identifier::new("ambiguous").unwrap())),
ScanToken::Token(Token::Punct(Punct::With)),
ScanToken::Token(Token::Id(Identifier::new("COMPUTE").unwrap())),
- ScanToken::Token(Token::EndCommand),
- ScanToken::Token(Token::EndCommand),
- ScanToken::Token(Token::EndCommand),
- ScanToken::Token(Token::EndCommand),
- ScanToken::Token(Token::EndCommand),
+ ScanToken::Token(Token::End),
+ ScanToken::Token(Token::End),
+ ScanToken::Token(Token::End),
+ ScanToken::Token(Token::End),
+ ScanToken::Token(Token::End),
ScanToken::Token(Token::Id(Identifier::new("next").unwrap())),
ScanToken::Token(Token::Id(Identifier::new("command").unwrap())),
- ScanToken::Token(Token::EndCommand),
- ScanToken::Token(Token::EndCommand),
+ ScanToken::Token(Token::End),
+ ScanToken::Token(Token::End),
],
);
}
&[
ScanToken::Token(Token::Id(Identifier::new("DOCUMENT").unwrap())),
ScanToken::Token(Token::String(String::from("DOCUMENT one line."))),
- ScanToken::Token(Token::EndCommand),
- ScanToken::Token(Token::EndCommand),
+ ScanToken::Token(Token::End),
+ ScanToken::Token(Token::End),
ScanToken::Token(Token::Id(Identifier::new("DOCUMENT").unwrap())),
ScanToken::Token(Token::String(String::from("DOC more"))),
ScanToken::Token(Token::String(String::from(" than"))),
ScanToken::Token(Token::String(String::from(" one"))),
ScanToken::Token(Token::String(String::from(" line."))),
- ScanToken::Token(Token::EndCommand),
- ScanToken::Token(Token::EndCommand),
+ ScanToken::Token(Token::End),
+ ScanToken::Token(Token::End),
ScanToken::Token(Token::Id(Identifier::new("DOCUMENT").unwrap())),
ScanToken::Token(Token::String(String::from("docu"))),
ScanToken::Token(Token::String(String::from("first.paragraph"))),
ScanToken::Token(Token::String(String::from("isn't parsed as tokens"))),
ScanToken::Token(Token::String(String::from(""))),
ScanToken::Token(Token::String(String::from("second paragraph."))),
- ScanToken::Token(Token::EndCommand),
- ScanToken::Token(Token::EndCommand),
+ ScanToken::Token(Token::End),
+ ScanToken::Token(Token::End),
],
);
}
ScanToken::Token(Token::Id(Identifier::new("FIL").unwrap())),
ScanToken::Token(Token::Id(Identifier::new("label").unwrap())),
ScanToken::Token(Token::String(String::from("isn't quoted"))),
- ScanToken::Token(Token::EndCommand),
+ ScanToken::Token(Token::End),
ScanToken::Token(Token::Id(Identifier::new("FILE").unwrap())),
ScanToken::Token(Token::Id(Identifier::new("lab").unwrap())),
ScanToken::Token(Token::String(String::from("is quoted"))),
- ScanToken::Token(Token::EndCommand),
+ ScanToken::Token(Token::End),
ScanToken::Token(Token::Id(Identifier::new("FILE").unwrap())),
ScanToken::Token(Token::Id(Identifier::new("lab").unwrap())),
ScanToken::Token(Token::String(String::from("not quoted here either"))),
- ScanToken::Token(Token::EndCommand),
+ ScanToken::Token(Token::End),
],
);
}
&[
ScanToken::Token(Token::Id(Identifier::new("begin").unwrap())),
ScanToken::Token(Token::Id(Identifier::new("data").unwrap())),
- ScanToken::Token(Token::EndCommand),
+ ScanToken::Token(Token::End),
ScanToken::Token(Token::String(String::from("123"))),
ScanToken::Token(Token::String(String::from("xxx"))),
ScanToken::Token(Token::Id(Identifier::new("end").unwrap())),
ScanToken::Token(Token::Id(Identifier::new("data").unwrap())),
- ScanToken::Token(Token::EndCommand),
- ScanToken::Token(Token::EndCommand),
+ ScanToken::Token(Token::End),
+ ScanToken::Token(Token::End),
ScanToken::Token(Token::Id(Identifier::new("BEG").unwrap())),
ScanToken::Token(Token::Id(Identifier::new("DAT").unwrap())),
ScanToken::Token(Token::String(String::from("5 6 7 /* x"))),
ScanToken::Token(Token::String(String::from("end data"))),
ScanToken::Token(Token::Id(Identifier::new("end").unwrap())),
ScanToken::Token(Token::Id(Identifier::new("data").unwrap())),
- ScanToken::Token(Token::EndCommand),
+ ScanToken::Token(Token::End),
],
);
}
ScanToken::Token(Token::Id(Identifier::new("d").unwrap())),
ScanToken::Token(Token::Id(Identifier::new("e").unwrap())),
ScanToken::Token(Token::Id(Identifier::new("f").unwrap())),
- ScanToken::Token(Token::EndCommand),
+ ScanToken::Token(Token::End),
ScanToken::Token(Token::String(String::from(" do repeat a=1 thru 5."))),
ScanToken::Token(Token::String(String::from("another command."))),
ScanToken::Token(Token::String(String::from("second command"))),
))),
ScanToken::Token(Token::Id(Identifier::new("end").unwrap())),
ScanToken::Token(Token::Id(Identifier::new("repeat").unwrap())),
- ScanToken::Token(Token::EndCommand),
+ ScanToken::Token(Token::End),
],
);
}
ScanToken::Token(Token::Id(Identifier::new("d").unwrap())),
ScanToken::Token(Token::Id(Identifier::new("e").unwrap())),
ScanToken::Token(Token::Id(Identifier::new("f").unwrap())),
- ScanToken::Token(Token::EndCommand),
+ ScanToken::Token(Token::End),
ScanToken::Token(Token::String(String::from("do repeat a=1 thru 5"))),
ScanToken::Token(Token::String(String::from("another command"))),
ScanToken::Token(Token::String(String::from("second command"))),
))),
ScanToken::Token(Token::Id(Identifier::new("end").unwrap())),
ScanToken::Token(Token::Id(Identifier::new("repeat").unwrap())),
- ScanToken::Token(Token::EndCommand),
+ ScanToken::Token(Token::End),
ScanToken::Token(Token::Id(Identifier::new("do").unwrap())),
ScanToken::Token(Token::Id(Identifier::new("repeat").unwrap())),
ScanToken::Token(Token::Id(Identifier::new("#a").unwrap())),
ScanToken::Token(Token::Punct(Punct::Equals)),
ScanToken::Token(Token::Number(1.0)),
- ScanToken::Token(Token::EndCommand),
+ ScanToken::Token(Token::End),
ScanToken::Token(Token::String(String::from(" inner command"))),
ScanToken::Token(Token::Id(Identifier::new("end").unwrap())),
ScanToken::Token(Token::Id(Identifier::new("repeat").unwrap())),
ScanToken::Token(Token::Id(Identifier::new("of").unwrap())),
ScanToken::Token(Token::Id(Identifier::new("first").unwrap())),
ScanToken::Token(Token::Id(Identifier::new("command").unwrap())),
- ScanToken::Token(Token::EndCommand),
+ ScanToken::Token(Token::End),
ScanToken::Token(Token::Id(Identifier::new("second").unwrap())),
ScanToken::Token(Token::Id(Identifier::new("command").unwrap())),
- ScanToken::Token(Token::EndCommand),
+ ScanToken::Token(Token::End),
ScanToken::Token(Token::Id(Identifier::new("third").unwrap())),
ScanToken::Token(Token::Id(Identifier::new("command").unwrap())),
- ScanToken::Token(Token::EndCommand),
+ ScanToken::Token(Token::End),
ScanToken::Token(Token::Id(Identifier::new("fourth").unwrap())),
ScanToken::Token(Token::Id(Identifier::new("command").unwrap())),
- ScanToken::Token(Token::EndCommand),
+ ScanToken::Token(Token::End),
ScanToken::Token(Token::Id(Identifier::new("fifth").unwrap())),
ScanToken::Token(Token::Id(Identifier::new("command").unwrap())),
- ScanToken::Token(Token::EndCommand),
+ ScanToken::Token(Token::End),
],
);
}
ScanToken::Token(Token::Punct(Punct::RParen)),
ScanToken::Token(Token::String(String::from("var1 var2 var3"))),
ScanToken::Token(Token::Id(Identifier::new("!enddefine").unwrap())),
- ScanToken::Token(Token::EndCommand),
+ ScanToken::Token(Token::End),
],
);
}
ScanToken::Token(Token::Punct(Punct::RParen)),
ScanToken::Token(Token::String(String::from(" var1 var2 var3"))),
ScanToken::Token(Token::Id(Identifier::new("!enddefine").unwrap())),
- ScanToken::Token(Token::EndCommand),
+ ScanToken::Token(Token::End),
],
);
}
ScanToken::Token(Token::Punct(Punct::RParen)),
ScanToken::Token(Token::String(String::from("var1 var2 var3"))),
ScanToken::Token(Token::Id(Identifier::new("!enddefine").unwrap())),
- ScanToken::Token(Token::EndCommand),
+ ScanToken::Token(Token::End),
],
);
}
ScanToken::Token(Token::Punct(Punct::RParen)),
ScanToken::Token(Token::String(String::from("var1 var2 var3"))),
ScanToken::Token(Token::Id(Identifier::new("!enddefine").unwrap())),
- ScanToken::Token(Token::EndCommand),
+ ScanToken::Token(Token::End),
],
);
}
ScanToken::Token(Token::Punct(Punct::LParen)),
ScanToken::Token(Token::Punct(Punct::RParen)),
ScanToken::Token(Token::Id(Identifier::new("!enddefine").unwrap())),
- ScanToken::Token(Token::EndCommand),
+ ScanToken::Token(Token::End),
],
);
}
ScanToken::Token(Token::String(String::from(""))),
ScanToken::Token(Token::String(String::from(""))),
ScanToken::Token(Token::Id(Identifier::new("!enddefine").unwrap())),
- ScanToken::Token(Token::EndCommand),
+ ScanToken::Token(Token::End),
],
);
}
ScanToken::Token(Token::Punct(Punct::RParen)),
ScanToken::Token(Token::Punct(Punct::RParen)),
ScanToken::Token(Token::Id(Identifier::new("!enddefine").unwrap())),
- ScanToken::Token(Token::EndCommand),
+ ScanToken::Token(Token::End),
],
);
}
ScanToken::Token(Token::Punct(Punct::RParen)),
ScanToken::Token(Token::Punct(Punct::RParen)),
ScanToken::Token(Token::Id(Identifier::new("!enddefine").unwrap())),
- ScanToken::Token(Token::EndCommand),
+ ScanToken::Token(Token::End),
],
);
}
ScanToken::Token(Token::String(String::from("content 1"))),
ScanToken::Token(Token::String(String::from("content 2"))),
ScanToken::Token(Token::Id(Identifier::new("!enddefine").unwrap())),
- ScanToken::Token(Token::EndCommand),
+ ScanToken::Token(Token::End),
],
);
}
&[
ScanToken::Token(Token::Id(Identifier::new("define").unwrap())),
ScanToken::Token(Token::String(String::from("!macro1"))),
- ScanToken::Token(Token::EndCommand),
+ ScanToken::Token(Token::End),
ScanToken::Token(Token::Id(Identifier::new("data").unwrap())),
ScanToken::Token(Token::Id(Identifier::new("list").unwrap())),
ScanToken::Token(Token::Punct(Punct::Slash)),
ScanToken::Token(Token::Id(Identifier::new("x").unwrap())),
ScanToken::Token(Token::Number(1.0)),
- ScanToken::Token(Token::EndCommand),
+ ScanToken::Token(Token::End),
],
);
}
ScanToken::Token(Token::Id(Identifier::new("define").unwrap())),
ScanToken::Token(Token::String(String::from("!macro1"))),
ScanToken::Token(Token::Id(Identifier::new("x").unwrap())),
- ScanToken::Token(Token::EndCommand),
+ ScanToken::Token(Token::End),
ScanToken::Token(Token::Id(Identifier::new("data").unwrap())),
ScanToken::Token(Token::Id(Identifier::new("list").unwrap())),
ScanToken::Token(Token::Punct(Punct::Slash)),
ScanToken::Token(Token::Id(Identifier::new("x").unwrap())),
ScanToken::Token(Token::Number(1.0)),
- ScanToken::Token(Token::EndCommand),
+ ScanToken::Token(Token::End),
],
);
}
ScanToken::Token(Token::Id(Identifier::new("define").unwrap())),
ScanToken::Token(Token::String(String::from("!macro1"))),
ScanToken::Token(Token::Punct(Punct::LParen)),
- ScanToken::Token(Token::EndCommand),
+ ScanToken::Token(Token::End),
ScanToken::Token(Token::Id(Identifier::new("x").unwrap())),
- ScanToken::Token(Token::EndCommand),
+ ScanToken::Token(Token::End),
ScanToken::Token(Token::Id(Identifier::new("data").unwrap())),
ScanToken::Token(Token::Id(Identifier::new("list").unwrap())),
ScanToken::Token(Token::Punct(Punct::Slash)),
ScanToken::Token(Token::Id(Identifier::new("x").unwrap())),
ScanToken::Token(Token::Number(1.0)),
- ScanToken::Token(Token::EndCommand),
+ ScanToken::Token(Token::End),
],
);
}
&[
ScanToken::Token(Token::Id(Identifier::new("define").unwrap())),
ScanToken::Token(Token::String(String::from("!macro1"))),
- ScanToken::Token(Token::EndCommand),
+ ScanToken::Token(Token::End),
ScanToken::Token(Token::Id(Identifier::new("data").unwrap())),
ScanToken::Token(Token::Id(Identifier::new("list").unwrap())),
ScanToken::Token(Token::Punct(Punct::Slash)),
ScanToken::Token(Token::Id(Identifier::new("x").unwrap())),
ScanToken::Token(Token::Number(1.0)),
- ScanToken::Token(Token::EndCommand),
+ ScanToken::Token(Token::End),
],
);
}