From 3e922c0a523af6f4b51fd4c09ac5930ae3d934ba Mon Sep 17 00:00:00 2001 From: KtorZ Date: Mon, 4 Mar 2024 20:40:40 +0100 Subject: [PATCH] Allow primitive literals, lists and tuples in fuzzer expressions. --- .../aiken-lang/src/parser/definition/test.rs | 26 ++++++++++++------- 1 file changed, 16 insertions(+), 10 deletions(-) diff --git a/crates/aiken-lang/src/parser/definition/test.rs b/crates/aiken-lang/src/parser/definition/test.rs index 726d68f8..9c7f0482 100644 --- a/crates/aiken-lang/src/parser/definition/test.rs +++ b/crates/aiken-lang/src/parser/definition/test.rs @@ -1,5 +1,3 @@ -use chumsky::prelude::*; - use crate::{ ast, expr::UntypedExpr, @@ -7,10 +5,11 @@ use crate::{ annotation, chain::{call::parser as call, field_access, tuple_index::parser as tuple_index, Chain}, error::ParseError, - expr::{self, var}, + expr::{self, bytearray, int, list, string, tuple, var}, token::Token, }, }; +use chumsky::prelude::*; pub fn parser() -> impl Parser { // TODO: can remove Token::Bang after a few releases (curr v1.0.11) @@ -89,13 +88,20 @@ pub fn fuzzer<'a>() -> impl Parser + 'a call(expression.clone()), )); - var() - .then(chain.repeated()) - .foldl(|expr, chain| match chain { - Chain::Call(args, span) => expr.call(args, span), - Chain::FieldAccess(label, span) => expr.field_access(label, span), - Chain::TupleIndex(index, span) => expr.tuple_index(index, span), - }) + choice(( + string(), + int(), + bytearray(), + tuple(expression.clone()), + list(expression.clone()), + var(), + )) + .then(chain.repeated()) + .foldl(|expr, chain| match chain { + Chain::Call(args, span) => expr.call(args, span), + Chain::FieldAccess(label, span) => expr.field_access(label, span), + Chain::TupleIndex(index, span) => expr.tuple_index(index, span), + }) }) }