diff --git a/src/compiler/backend/tests.rs b/src/compiler/backend/tests.rs index 7319154..4a90b07 100644 --- a/src/compiler/backend/tests.rs +++ b/src/compiler/backend/tests.rs @@ -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)) diff --git a/src/compiler/meta_compile.rs b/src/compiler/meta_compile.rs index f88f500..7e8f937 100644 --- a/src/compiler/meta_compile.rs +++ b/src/compiler/meta_compile.rs @@ -181,6 +181,8 @@ pub fn compile_fun>( 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::>(); let location = if let (Some(s), Some(e)) = ( body.first().map(|a| a.location()), @@ -192,7 +194,7 @@ pub fn compile_fun>( }; 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 { diff --git a/src/compiler/tests.rs b/src/compiler/tests.rs index 2a3dcee..cb47ba9 100644 --- a/src/compiler/tests.rs +++ b/src/compiler/tests.rs @@ -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)) diff --git a/src/parser/tests.rs b/src/parser/tests.rs index 07bde87..2dff458 100644 --- a/src/parser/tests.rs +++ b/src/parser/tests.rs @@ -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(