Added an explicit :void type param to `fn` declarations

Currently only :void is allowed. We still need to emit the OpTypeVoid.
pull/3/head
itycodes 2 weeks ago
parent 9aafb9758f
commit 2c716e7b7d

@ -11,7 +11,7 @@ fn test_emit() {
(dec frag-coord:*v4f32i Input)
(dec out-color:*v4f32o Output)
(entry main Fragment OriginUpperLeft (:frag-coord :out-color))
(fun (main)
(fun (main) :void
(store-ptr (out-color)
(v4f32i (/ (.xy (load-ptr frag-coord))
(v2f32 1920.0 1080.0))

@ -181,6 +181,8 @@ pub fn compile_fun<I: Iterator<Item = Ast>>(
let mut name_it = name.into_iter();
let name = expect_symbol(name_it.next(), &name_loc)?;
expect_empty(name_it, name_loc)?;
let _return_type = expect_one_of(&[":void"], expect_symbol(list.next(), &loc)?)?;
let return_type = _return_type.into_inner().replace(":", "");
let body = list.collect::<Vec<_>>();
let location = if let (Some(s), Some(e)) = (
body.first().map(|a| a.location()),
@ -192,7 +194,7 @@ pub fn compile_fun<I: Iterator<Item = Ast>>(
};
let fun = Function {
name: name.to_string(),
return_type: "void".to_string(),
return_type: return_type,
arguments: vec![],
body: Some(vec![]),
ast: Some(Ast::List(Localised {

@ -14,7 +14,7 @@ fn test_compile() {
(dec frag-coord:*v4f32i Input)
(dec out-color:*v4f32o Output)
(entry main Fragment OriginUpperLeft (:frag-coord :out-color))
(fun (main)
(fun (main) :void
(store-ptr (out-color)
(v4f32i (/ (.xy (load-ptr frag-coord))
(v2f32 1920.0 1080.0))
@ -107,7 +107,7 @@ fn expected_symbol() {
(dec frag-coord:*v4f32i Input)
(dec out-color:*v4f32o Output)
(entry main Fragment OriginUpperLeft (:frag-coord :out-color))
(fun (main)
(fun (main) :void
(store-ptr (out-color)
(v4f32i (/ (.xy (load-ptr frag-coord))
(v2f32 1920.0 1080.0))

@ -43,7 +43,7 @@ fn test_parse() {
(dec frag-coord:*v4f32i Input)
(dec out-color:*v4f32o Output)
(entry main Fragment OriginUpperLeft (:frag-coord :out-color))
(fun (main)
(fun (main) :void
(store-ptr (out-color)
(v4f32i (/ (.xy (load-ptr frag-coord))
(v2f32 1920.0 1080.0))
@ -108,6 +108,7 @@ fn test_parse() {
Ast::List(Localised::dummy_location(vec![Ast::Symbol(
Localised::dummy_location("main".to_string()),
)])),
Ast::Symbol(Localised::dummy_location(":void".to_string())),
Ast::List(Localised::dummy_location(vec![
Ast::Symbol(Localised::dummy_location("store-ptr".to_string())),
Ast::List(Localised::dummy_location(vec![Ast::Symbol(

Loading…
Cancel
Save