aboutsummaryrefslogtreecommitdiff
path: root/tests/i/extern-c-struct-value/program.cps
diff options
context:
space:
mode:
Diffstat (limited to 'tests/i/extern-c-struct-value/program.cps')
-rw-r--r--tests/i/extern-c-struct-value/program.cps15
1 files changed, 14 insertions, 1 deletions
diff --git a/tests/i/extern-c-struct-value/program.cps b/tests/i/extern-c-struct-value/program.cps
index 9db6319..6b2cb8e 100644
--- a/tests/i/extern-c-struct-value/program.cps
+++ b/tests/i/extern-c-struct-value/program.cps
@@ -1,4 +1,4 @@
-// Records whose fields are C types pass to C functions by value.
+// Records whose fields are C types pass to and return from C functions by value.
INCLUDE_OBJ "lib.o"
TYPE CShort = C_TYPE("short")
TYPE CFloat = C_TYPE("float")
@@ -30,6 +30,10 @@ EXTERN "C" EXTERN_FUNCTION vec2_dot(Vec2, Vec2) RETURNS C_DOUBLE
EXTERN "C" EXTERN_FUNCTION mixed_score(CShort, Mixed, C_INT) RETURNS C_DOUBLE
EXTERN "C" EXTERN_FUNCTION vec3f_sum(Vec3f) RETURNS C_DOUBLE
EXTERN "C" EXTERN_FUNCTION wide_after_five(C_INT, C_INT, C_INT, C_INT, C_INT, Wide) RETURNS CLongLong
+EXTERN "C" EXTERN_FUNCTION make_pair(C_INT, C_INT) RETURNS Pair
+EXTERN "C" EXTERN_FUNCTION make_vec2(C_DOUBLE, C_DOUBLE) RETURNS Vec2
+EXTERN "C" EXTERN_FUNCTION make_mixed(C_CHAR, C_DOUBLE, C_INT) RETURNS Mixed
+EXTERN "C" EXTERN_FUNCTION make_vec3f(CFloat, CFloat, CFloat) RETURNS Vec3f
DECLARE P : Pair
DECLARE U : Vec2
DECLARE V : Vec2
@@ -55,3 +59,12 @@ OUTPUT vec3f_sum(F)
W.Lo <- (CLongLong)100
W.Hi <- (CLongLong)1000
OUTPUT wide_after_five((C_INT)1, (C_INT)2, (C_INT)3, (C_INT)4, (C_INT)5, W)
+P <- make_pair((C_INT)3, (C_INT)4)
+OUTPUT P.A, " ", P.B
+OUTPUT pair_sum(make_pair((C_INT)5, (C_INT)6))
+U <- make_vec2((C_DOUBLE)1.5, (C_DOUBLE)2)
+OUTPUT U.X, " ", U.Y
+M <- make_mixed((C_CHAR)'Q', (C_DOUBLE)0.25, (C_INT)9)
+OUTPUT M.Tag, " ", M.Value, " ", M.Count
+F <- make_vec3f((CFloat)0.5, (CFloat)1.25, (CFloat)2)
+OUTPUT F.X, " ", F.Y, " ", F.Z