I'd like to write something like the following code:

#include "share/atspre_staload.hats"
#include "share/atspre_define.hats"

typedef test = () -> int        (* better type later *)

typedef suite(data:t0ype,n:int) = @{
  name = string,
  setup = (data -> void),
  teardown = (data -> void),
  tests = @[test][n]
}

fun foo_setup(a:int): void = println!("setting up")
fun foo_teardown(a:int): void = println!("tearing down")

fun baz(): int =
let
  val () = println!("baz")
in
  3
end

fun bar(): int =
let
  val () = println!("bar")
in
  4
end

var foo_tests = @[test][2](bar, baz)
                                               
val foo : suite(int,2) = @{
  name = "hello world",
  setup = foo_setup,
  teardown = foo_teardown,
  tests = foo_tests
}

implement main0() =
let
in
  println!("Hello, world!")
end

but the C compiler fails with these errors

modules_dats.c:262:1: warning: parameter names (without types) in function 
declaration
 atstype_funptr atstyarr_field(atslab__tests) ;
 ^~~~~~~~~~~~~~
In file included from modules_dats.c:14:0:
/usr/lib/ats2-postiats-0.3.7/ccomp/runtime/pats_ccomp_typedefs.h:176:31: 
error: field ‘atstyarr_field_undef’ declared as a function
 #define atstyarr_field(fname) atstyarr_field_undef(fname)
                               ^
modules_dats.c:262:16: note: in expansion of macro ‘atstyarr_field’
 atstype_funptr atstyarr_field(atslab__tests) ;
                ^~~~~~~~~~~~~~
modules_dats.c:269:1: warning: parameter names (without types) in function 
declaration
 atstype_funptr atstyarr_field(atslab__tests) ;
 ^~~~~~~~~~~~~~
In file included from modules_dats.c:14:0:
/usr/lib/ats2-postiats-0.3.7/ccomp/runtime/pats_ccomp_typedefs.h:176:31: 
error: field ‘atstyarr_field_undef’ declared as a function
 #define atstyarr_field(fname) atstyarr_field_undef(fname)
                               ^
modules_dats.c:269:16: note: in expansion of macro ‘atstyarr_field’
 atstype_funptr atstyarr_field(atslab__tests) ;
                ^~~~~~~~~~~~~~
In file included from modules_dats.c:15:0:
modules_dats.c: In function ‘
_057_home_057_andy_057_tmp_057_modules_057_modules_056_dats__dynload’:
modules_dats.c:623:52: error: ‘postiats_tyrec_0 {aka struct <anonymous>}’ 
has no member named ‘atslab__tests’; did you mean ‘atslab__setup’?
 ATSINSstore_fltrec_ofs(statmp12, postiats_tyrec_1, atslab__tests, 
statmpref10) ;
                                                    ^
/usr/lib/ats2-postiats-0.3.7/ccomp/runtime/pats_ccomp_instrset.h:321:61: 
note: in definition of macro ‘ATSINSstore_fltrec_ofs’
 #define ATSINSstore_fltrec_ofs(tmp, tyrec, lab, val) ((tmp).lab = val)
                                                             ^~

I would use viewtype lists instead of arrays, but the compiler complains 
about requiring fields to be of sort t0ype, not viewt0ype.

Thanks,
Andrew

-- 
You received this message because you are subscribed to the Google Groups 
"ats-lang-users" group.
To unsubscribe from this group and stop receiving emails from it, send an email 
to ats-lang-users+unsubscr...@googlegroups.com.
To post to this group, send email to ats-lang-users@googlegroups.com.
Visit this group at https://groups.google.com/group/ats-lang-users.
To view this discussion on the web visit 
https://groups.google.com/d/msgid/ats-lang-users/c2552f4f-8c9a-45b3-9847-53740f4abeb6%40googlegroups.com.

Reply via email to