diff --git a/integration_tests/list_test.ucg b/integration_tests/list_test.ucg new file mode 100644 index 0000000..15de474 --- /dev/null +++ b/integration_tests/list_test.ucg @@ -0,0 +1 @@ +let empty_list = []; \ No newline at end of file diff --git a/src/build/compile_test.rs b/src/build/compile_test.rs index 146ab43..8e63c13 100644 --- a/src/build/compile_test.rs +++ b/src/build/compile_test.rs @@ -33,6 +33,11 @@ fn test_tuples() { assert_build(include_str!("../../integration_tests/tuple_test.ucg")); } +#[test] +fn test_lists() { + assert_build(include_str!("../../integration_tests/list_test.ucg")); +} + #[test] fn test_comparisons() { assert_build(include_str!("../../integration_tests/comparisons_test.ucg")); diff --git a/src/parse/mod.rs b/src/parse/mod.rs index 57e0c24..ac6fd55 100644 --- a/src/parse/mod.rs +++ b/src/parse/mod.rs @@ -331,9 +331,9 @@ make_fn!( ) ); -fn tuple_to_list>(pos: Sp, elems: Vec) -> Value { +fn tuple_to_list>(pos: Sp, elems: Option>) -> Value { Value::List(ListDef { - elems: elems, + elems: elems.unwrap_or_else(|| Vec::new()), pos: pos.into(), }) } @@ -342,7 +342,7 @@ make_fn!( list_value, Value>, do_each!( start => punct!("["), - elements => separated!(punct!(","), expression), + elements => optional!(separated!(punct!(","), expression)), _ => optional!(punct!(",")), // nom's opt! macro doesn't preserve error types properly but this one does. _ => punct!("]"), (tuple_to_list(start.pos, elements))