Template Issue

27 views
Skip to first unread message

d4v3y_5c0n3s

unread,
Nov 29, 2021, 10:16:47 AM11/29/21
to ats-lang-users
I think I've been able to break down a problem I've been having with ATS' templates into a simple example provided below.  The following code type-checks, and can easily tested using Try-ATS-on-line.

datavtype maybe(a:vt@ype) =
| NAH of ()
| YAH of (a)

fn{a:vt@ype} maybe_nah () : maybe(a) = NAH()
fn{a:vt@ype} maybe_yah ( x: a ) : maybe(a) = YAH(x)

implement main0 () = let
    var m1 = maybe_nah<int>()
    var m2 = maybe_yah<int>(6)
    val-~NAH() = m1
    val-~YAH(int) = m2
in
end

Running the above sample produces the following error:
ParsingErrors:
/tmp/patsopt_ccats_Ht1nNp: 9732(line=454, offs=1) -- 9735(line=454, offs=4): error(parsing): the keyword [EOF] is needed.
exit(ATS): uncaught exception at run-time:
/var/lib/openshift/5419477be0b8cddd09000122/app-root/runtime/repo/ats2-lang/contrib/CATS-parsemit/SATS/catsparse.sats:FatalErrorExn(1024)

My question is, why is this simple example failing, and how should I fix it?  I know the problem is related to metaprogramming in some way, but I don't understand the low-level details enough to get why this isn't working.  Please let me know if you have any further questions.

Hongwei Xi

unread,
Nov 29, 2021, 10:23:56 AM11/29/21
to ats-lan...@googlegroups.com
Is there a way for me to generate the error you are referring to?
The above code works fine on my end.

--Hongwei


--
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-user...@googlegroups.com.
To view this discussion on the web visit https://groups.google.com/d/msgid/ats-lang-users/4794ec8f-4b17-4d45-9ffe-60d963756e30n%40googlegroups.com.

d4v3y_5c0n3s

unread,
Nov 29, 2021, 11:03:29 AM11/29/21
to ats-lang-users
You need to select the "Patsopt2js" button when using Try-ATS-on-line to get the error I posted.  I'll test using my local ATS installation to determine whether this is only on the JS version of ATS or not.

d4v3y_5c0n3s

unread,
Nov 29, 2021, 12:00:32 PM11/29/21
to ats-lang-users
I tried to compile the above snippet on my local machine, and got the following error:
/usr/lib/gcc/x86_64-pc-cygwin/11/../../../../x86_64-pc-cygwin/bin/ld: /tmp/ccVVVRVe.o:metap_test_dat:(.text+0x12a): undefined reference to `atsruntime_mfree_undef'
/usr/lib/gcc/x86_64-pc-cygwin/11/../../../../x86_64-pc-cygwin/bin/ld: /tmp/ccVVVRVe.o:metap_test_dat:(.text+0x160): undefined reference to `atsruntime_malloc_undef'
collect2: error: ld returned 1 exit status

I have no idea what it means or what caused it.

Hongwei Xi

unread,
Nov 29, 2021, 12:10:39 PM11/29/21
to ats-lan...@googlegroups.com
You need the flag '-DATS_MEMALLOC_LIBC'.


Hongwei Xi

unread,
Nov 29, 2021, 12:15:59 PM11/29/21
to ats-lan...@googlegroups.com
If you try to compile to JS, then you cannot have 'main0' in your code.
For instance, the following code worked when I tried:

datavtype maybe(a:vt@ype) =
| NAH of ()
| YAH of (a)

fn{a:vt@ype} maybe_nah () : maybe(a) = NAH()
fn{a:vt@ype} maybe_yah ( x: a ) : maybe(a) = YAH(x)

val () = let

    var m1 = maybe_nah<int>()
    var m2 = maybe_yah<int>(6)
    val-~NAH() = m1
    val-~YAH(int) = m2
in
end

d4v3y_5c0n3s

unread,
Nov 29, 2021, 5:47:55 PM11/29/21
to ats-lang-users
First, you were right, '-DATS_MEMALLOC_LIBC' fixed the code on my end so that it compiles fine.

Second, it never even occurred to me that Javascript may not use the "main" function pattern used by C-family languages.  With this in mind, it now makes perfect sense as to why my code didn't work.

Thanks for the help.
Reply all
Reply to author
Forward
0 new messages