[BREAKING] Feat: quotation is now using ()

This commit is contained in:
2026-02-28 20:25:59 +01:00
parent ec98274dfe
commit 651ed1219d
24 changed files with 182 additions and 169 deletions

View File

@@ -31,7 +31,7 @@ fn tokenize(input: &str) -> Vec<Token> {
continue;
}
if c == '(' || c == ')' {
if c == '{' || c == '}' {
chars.next();
continue;
}
@@ -133,7 +133,7 @@ fn compile(tokens: &[Token], dict: &Dictionary) -> Result<Vec<Op>, String> {
Token::Str(s, span) => ops.push(Op::PushStr(Arc::from(s.as_str()), Some(*span))),
Token::Word(w, span) => {
let word = w.as_str();
if word == "{" {
if word == "(" {
let (quote_ops, consumed, end_span) =
compile_quotation(&tokens[i + 1..], dict)?;
i += consumed;
@@ -142,8 +142,8 @@ fn compile(tokens: &[Token], dict: &Dictionary) -> Result<Vec<Op>, String> {
end: end_span.end,
};
ops.push(Op::Quotation(Arc::from(quote_ops), Some(body_span)));
} else if word == "}" {
return Err("unexpected }".into());
} else if word == ")" {
return Err("unexpected )".into());
} else if word == "[" {
let (bracket_ops, consumed, end_span) =
compile_bracket(&tokens[i + 1..], dict)?;
@@ -203,8 +203,8 @@ fn compile_quotation(
for (i, tok) in tokens.iter().enumerate() {
if let Token::Word(w, _) = tok {
match w.as_str() {
"{" => depth += 1,
"}" => {
"(" => depth += 1,
")" => {
depth -= 1;
if depth == 0 {
end_idx = Some(i);
@@ -216,7 +216,7 @@ fn compile_quotation(
}
}
let end_idx = end_idx.ok_or("missing }")?;
let end_idx = end_idx.ok_or("missing )")?;
let end_span = match &tokens[end_idx] {
Token::Word(_, span) => *span,
_ => unreachable!(),