I suddenly recall a feature in ATS:
$extype_struct.
The following code should compile and run:
#include "share/atspre_staload.hats"
#include "share/atspre_define.hats"
staload UN = "prelude/SATS/unsafe.sats"
datavtype message =
| Bar of (int, double)
| Baz of (double, double)
vtypedef
BAR = Bar_pstruct(int, double)
vtypedef
BAZ = Baz_pstruct(double, double)
extern vtypedef "BAR" = BAR
extern vtypedef "BAZ" = BAZ
typedef BAR_ =
$extype_struct "BAR_" of { contag=int }
typedef BAZ_ =
$extype_struct "BAZ_" of { contag=int }
extern castfn stack_unwind{a:vt0p}(INV(a)):<> void
fn f(x: !message): void =
case+ x of
| Bar(a,b) => println!("BAR ", a, " ", b)
| Baz(a,b) => println!("BAZ ", a, " ", b)
implement main0() =
let
var b : BAR_
val () = b.contag := 0
val p = $UN.castvwtp0{BAR}(addr@b)
val msg = $UN.castvwtp0{message}(addr@b)
val Bar(x,y) = p
val () = begin
x := 5;
y := 3.14;
f(msg)
end
val _ = $UN.castvwtp0{ptr}((view@x, view@y | p))
in
stack_unwind(msg)
end
On Wednesday, March 21, 2018 at 4:49:02 PM UTC-4, gmhwxi wrote:
>
>
> The tag part needs to be set manually. For Bar, it is 0. For Baz, it is 1.
> You may have to do it in C or in unsafe ATS for this part.
>
>
>
> On Wed, Mar 21, 2018 at 4:32 PM, Andrew Knapp <...> wrote:
>
>> The code on glot also fails if you change Bar to Baz in all the
>> appropriate places.
>>
>> --
>> 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 [email protected].
>> To post to this group, send email to [email protected].
>> 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/55f6d7ff-167d-4a96-be75-5761dbf88908%40googlegroups.com
>>
>> <https://groups.google.com/d/msgid/ats-lang-users/55f6d7ff-167d-4a96-be75-5761dbf88908%40googlegroups.com?utm_medium=email&utm_source=footer>
>> .
>>
>
>
--
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 [email protected].
To post to this group, send email to [email protected].
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/9857dcaa-b679-4305-bb3a-f70b56b9c5be%40googlegroups.com.