Or you could supply a template parameter (bucket(a) in this case) to
arrayptr_freelin:
implmnt{a} dict_delete_lin ( d ) = let
implmnt array_uninitize$clear<bucket(a)> (i, x) =
bucket_delete_recursive<a>(x)
in
arrayptr_freelin<bucket(a)>(d.buckets, size_of_int(d.size))
end
On Thursday, December 30, 2021 at 9:00:48 PM UTC-5 gmhwxi wrote:
> Just need to replace bucket(a) with BUCKET(a) as is shown below:
>
> implmnt array_uninitize$clear<BUCKET(a)> (i, x) =
> bucket_delete_recursive<a>(x)
>
> On Thursday, December 30, 2021 at 6:07:31 PM UTC-5 d4v3y_5c0n3s wrote:
>
>> Here are the files, with some of the functions that are never used in the
>> example removed.
>> The code was compiled with: *patscc -c -DATS_MEMALLOC_LIBC dict.dats*
>> | | |
>> (*
>> ### dict.sats ###
>>
>>
>> *)
>>
>> #include "share/atspre_staload.hats"
>>
>> (* buckets (aka linked lists) *)
>> absvtype bucket (a:vt@ype) = ptr
>>
>> fn{a:vt@ype} bucket_new ( string, a ) : bucket(a)
>>
>> fn{a:vt@ype} bucket_map ( !bucket(a) ) : void
>> fn{a:vt@ype} bucket_filter_map ( b: !bucket(a) ) : void
>>
>>
>> fn{a:vt@ype} bucket_item$delete ( x: a ): void
>> fn{a:vt@ype} bucket_item$map ( x: &a ): void
>> fn{a:vt@ype} bucket_item$filter ( x: !a ): bool
>> fn{a:vt@ype} bucket_item$to_string ( x: !a ): string
>>
>>
>> fun{a:vt@ype} bucket_delete_recursive ( b: bucket(a) ) : void
>>
>> fn{a:vt@ype} bucket_print ( b: !bucket(a) ) : void
>>
>> (* dictionaries *)
>>
>> sortdef dsz = {s:int | s > 0}
>> absvt@ype dict (a:vt@ype, n:int) = @{size=int,buckets=ptr}
>>
>>
>> fn{a:vt@ype} dict_new {s:dsz} ( int s ) : dict(a, s)
>> fn{a:t@ype} dict_delete {s:dsz} ( d: dict(a, s) ) : void
>> fn{a:vt@ype} dict_delete_lin {s:dsz} ( d: dict(a, s) ) : void
>> fn{a:vt@ype} dict_delete_fun {s:dsz} ( d: dict(a, s), (a) -> void ) : void
>> | | |
>> (*
>> ### dict.dats ###
>>
>>
>> *)
>>
>> #include "share/atspre_staload.hats"
>>
>> staload "./dict.sats"
>>
>> fn hash {n:int | n>0}{s:int | s>0}
>> ( s: string(s), size: int(n) ) : [o:int | o >= 0; o < n] int o = let
>> fun hash_num {i:nat | i <= s}
>> ( i: int i, h: int, str_sz: int(s) ) : int =
>> if i < str_sz then let
>> val c_at_i = string_get_at_gint(s, i)
>> in
>> hash_num(i+1, h * 101 + g0int_of_char(c_at_i),
>> str_sz)
>> end else h
>> in
>> g1int_nmod(abs(g1ofg0(hash_num(0, 0, sz2i(strlen(s))))), size)
>> end
>>
>> local
>>
>> datavtype BUCKET (a:vt@ype) =
>> | bucket_empty of ()
>> | bucket_filled of (Strptr1, a, BUCKET(a))
>>
>> assume bucket(a:vt@ype) = BUCKET(a)
>> assume dict(a:vt@ype, n:int) = @{
>> size=int n,
>> buckets=arrayptr(bucket(a), n)
>> }
>>
>> extern fn{a:vt@ype} bucket_operate ( !bucket(a) ) : void
>>
>>
>> in
>>
>> implement{a} dict_new {s} ( size ) = let
>> val size_st = size_of_int(size)
>> val bucket_arr = arrayptr_make_uninitized<bucket(a)>(size_st)
>> implmnt array_initize$init<bucket(a)> (i, x) = x := bucket_empty()
>> val () = arrayptr_initize<bucket(a)>(bucket_arr, size_st)
>> in
>> @{size=size, buckets=bucket_arr}:dict(a, s)
>> end
>>
>> implmnt{a} dict_delete ( d ) = let
>> implmnt(a2:t@ype) bucket_item$delete<a2> ( x ) = ()
>> in
>> dict_delete_lin<a>(d)
>> end
>>
>> implmnt{a} bucket_delete_recursive ( b ) =
>> case+ b of
>> | ~bucket_empty() => ()
>> | ~bucket_filled(str, x, next_bucket) => let
>> val () = strptr_free(str)
>> val () = bucket_item$delete<a>(x)
>> in
>> bucket_delete_recursive<a>(next_bucket)
>> end
>>
>> implmnt{a} dict_delete_lin ( d ) = let
>> implmnt array_uninitize$clear<bucket(a)> (i, x) =
>> bucket_delete_recursive<a>(x)
>> in
>> arrayptr_freelin(d.buckets, size_of_int(d.size))
>> end
>>
>> implmnt{a} dict_delete_fun ( d, dltr ) = let
>> implmnt bucket_item$delete<a> ( x ) = dltr(x)
>> in
>> dict_delete_lin(d)
>> end
>>
>>
>> implmnt{a} bucket_new ( key, item ) =
>> bucket_filled($UNSAFE.castvwtp0{Strptr1}(key), item, bucket_empty())
>>
>> implmnt{a} bucket_map ( b ) =
>> case+ b of
>> | bucket_empty() => ()
>> | @bucket_filled(_, x, next_bucket) => {
>> val () = bucket_item$map(x)
>> val () = bucket_map(next_bucket)
>> prval () = fold@(b)
>> }
>>
>> implmnt{a} bucket_filter_map ( b ) =
>> case+ b of
>> | bucket_empty() => ()
>> | @bucket_filled(_, x, next_bucket) =>
>> if bucket_item$filter(x) then {
>> val () = bucket_item$map(x)
>> val () = bucket_filter_map(next_bucket)
>> prval () = fold@(b)
>> }
>> else {
>> val () = bucket_filter_map(next_bucket)
>> prval () = fold@(b)
>> }
>>
>> implmnt{a} bucket_print ( b ) =
>> case+ b of
>> | bucket_empty() => ()
>>
>> | bucket_filled(str, x, next_bucket) => let
>> val () = print("\(")
>> val () = print(str)
>> val () = print(" : ")
>> val () = print( bucket_item$to_string(x) )
>> val () = print(")")
>> in
>> bucket_print(next_bucket)
>> end
>>
>> end
>>
>> var d = dict_new<int>(7)
>> val () = dict_delete<int>(d)
>> | | |
>> On Thursday, December 30, 2021 at 2:48:29 PM UTC-5 gmhwxi wrote:
>>
>>> Where can I find your source code so that I can produce the error you
>>> are referring to?
>>>
>>> --Hongwei
>>>
>>>
>>> On Thu, Dec 30, 2021 at 12:47 PM d4v3y_5c0n3s <[email protected]> wrote:
>>>
>>>> Ok, so I've been able to get the "dict" type to be abstract, but I
>>>> can't seem to get "bucket" to be abstract. I tried adding the "= ptr"
>>>> part
>>>> you suggested, but I'm not having any luck. Using your solution, the code
>>>> will compile, unless I test the "dict" type by calling "dict_new" &
>>>> "dict_delete." Looking at the error messages, the problem appears to be
>>>> related to the "dict_delete" call, and I've provided the error below so
>>>> you
>>>> can see for yourself. I know that there are a lot of details missing, so
>>>> let me know if you'd like me to provide any more details.
>>>>
>>>> Error message:
>>>> In file included from dict_dats.c:15:
>>>> dict_dats.c: In function ‘loop_95__95__1’:
>>>> dict_dats.c:6190:28: error: ‘PMVtmpltcstmat’ undeclared (first use in
>>>> this function)
>>>> 6190 | ATSINSmove_void(tmp195__1,
>>>> PMVtmpltcstmat[0](array_uninitize$clear<S2Eapp(S2Ecst(BUCKET);
>>>> S2Eapp(S2Ecst(g0int_t0ype); S2Eextkind(atstype_int)))>)(arg2,
>>>> ATSPMVrefarg1(arg0))) ;
>>>> | ^~~~~~~~~~~~~~
>>>> /usr/local/lib/ats2-postiats-0.4.2/ccomp/runtime/pats_ccomp_instrset.h:284:39:
>>>>
>>>> note: in definition of macro ‘ATSINSmove_void’
>>>> 284 | #define ATSINSmove_void(tmp, command) command
>>>> | ^~~~~~~
>>>> dict_dats.c:6190:28: note: each undeclared identifier is reported only
>>>> once for each function it appears in
>>>> 6190 | ATSINSmove_void(tmp195__1,
>>>> PMVtmpltcstmat[0](array_uninitize$clear<S2Eapp(S2Ecst(BUCKET);
>>>> S2Eapp(S2Ecst(g0int_t0ype); S2Eextkind(atstype_int)))>)(arg2,
>>>> ATSPMVrefarg1(arg0))) ;
>>>> | ^~~~~~~~~~~~~~
>>>> /usr/local/lib/ats2-postiats-0.4.2/ccomp/runtime/pats_ccomp_instrset.h:284:39:
>>>>
>>>> note: in definition of macro ‘ATSINSmove_void’
>>>> 284 | #define ATSINSmove_void(tmp, command) command
>>>> | ^~~~~~~
>>>> dict_dats.c:6190:46: error: ‘array_uninitize$clear’ undeclared (first
>>>> use in this function)
>>>> 6190 | ATSINSmove_void(tmp195__1,
>>>> PMVtmpltcstmat[0](array_uninitize$clear<S2Eapp(S2Ecst(BUCKET);
>>>> S2Eapp(S2Ecst(g0int_t0ype); S2Eextkind(atstype_int)))>)(arg2,
>>>> ATSPMVrefarg1(arg0))) ;
>>>> |
>>>> ^~~~~~~~~~~~~~~~~~~~~
>>>> /usr/local/lib/ats2-postiats-0.4.2/ccomp/runtime/pats_ccomp_instrset.h:284:39:
>>>>
>>>> note: in definition of macro ‘ATSINSmove_void’
>>>> 284 | #define ATSINSmove_void(tmp, command) command
>>>> | ^~~~~~~
>>>> dict_dats.c:6190:68: warning: implicit declaration of function ‘S2Eapp’
>>>> [-Wimplicit-function-declaration]
>>>> 6190 | ATSINSmove_void(tmp195__1,
>>>> PMVtmpltcstmat[0](array_uninitize$clear<S2Eapp(S2Ecst(BUCKET);
>>>> S2Eapp(S2Ecst(g0int_t0ype); S2Eextkind(atstype_int)))>)(arg2,
>>>> ATSPMVrefarg1(arg0))) ;
>>>> |
>>>> ^~~~~~
>>>> /usr/local/lib/ats2-postiats-0.4.2/ccomp/runtime/pats_ccomp_instrset.h:284:39:
>>>>
>>>> note: in definition of macro ‘ATSINSmove_void’
>>>> 284 | #define ATSINSmove_void(tmp, command) command
>>>> | ^~~~~~~
>>>> dict_dats.c:6190:75: warning: implicit declaration of function ‘S2Ecst’
>>>> [-Wimplicit-function-declaration]
>>>> 6190 | ATSINSmove_void(tmp195__1,
>>>> PMVtmpltcstmat[0](array_uninitize$clear<S2Eapp(S2Ecst(BUCKET);
>>>> S2Eapp(S2Ecst(g0int_t0ype); S2Eextkind(atstype_int)))>)(arg2,
>>>> ATSPMVrefarg1(arg0))) ;
>>>> |
>>>> ^~~~~~
>>>> /usr/local/lib/ats2-postiats-0.4.2/ccomp/runtime/pats_ccomp_instrset.h:284:39:
>>>>
>>>> note: in definition of macro ‘ATSINSmove_void’
>>>> 284 | #define ATSINSmove_void(tmp, command) command
>>>> | ^~~~~~~
>>>> dict_dats.c:6190:82: error: ‘BUCKET’ undeclared (first use in this
>>>> function)
>>>> 6190 | ATSINSmove_void(tmp195__1,
>>>> PMVtmpltcstmat[0](array_uninitize$clear<S2Eapp(S2Ecst(BUCKET);
>>>> S2Eapp(S2Ecst(g0int_t0ype); S2Eextkind(atstype_int)))>)(arg2,
>>>> ATSPMVrefarg1(arg0))) ;
>>>> |
>>>> ^~~~~~
>>>> /usr/local/lib/ats2-postiats-0.4.2/ccomp/runtime/pats_ccomp_instrset.h:284:39:
>>>>
>>>> note: in definition of macro ‘ATSINSmove_void’
>>>> 284 | #define ATSINSmove_void(tmp, command) command
>>>> | ^~~~~~~
>>>> dict_dats.c:6190:89: error: expected ‘)’ before ‘;’ token
>>>> 6190 | move_void(tmp195__1,
>>>> PMVtmpltcstmat[0](array_uninitize$clear<S2Eapp(S2Ecst(BUCKET);
>>>> S2Eapp(S2Ecst(g0int_t0ype); S2Eextkind(atstype_int)))>)(arg2,
>>>> ATSPMVrefarg1(arg0))) ;
>>>> |
>>>> ~ ^
>>>>
>>>> /usr/local/lib/ats2-postiats-0.4.2/ccomp/runtime/pats_ccomp_instrset.h:284:39:
>>>>
>>>> note: in definition of macro ‘ATSINSmove_void’
>>>> 284 | #define ATSINSmove_void(tmp, command) command
>>>> | ^~~~~~~
>>>> dict_dats.c:6190:145: error: expected expression before ‘)’ token
>>>> 6190 | lear<S2Eapp(S2Ecst(BUCKET); S2Eapp(S2Ecst(g0int_t0ype);
>>>> S2Eextkind(atstype_int)))>)(arg2, ATSPMVrefarg1(arg0))) ;
>>>> |
>>>> ^
>>>>
>>>> /usr/local/lib/ats2-postiats-0.4.2/ccomp/runtime/pats_ccomp_instrset.h:284:39:
>>>>
>>>> note: in definition of macro ‘ATSINSmove_void’
>>>> 284 | #define ATSINSmove_void(tmp, command) command
>>>> | ^~~~~~~
>>>>
>>>> On Tuesday, December 7, 2021 at 8:08:48 AM UTC-5 d4v3y_5c0n3s wrote:
>>>>
>>>>> Thanks, I tried something similar with the "dict" type, but completely
>>>>> overlooked the "bucket" type. I'll test this to see if it resolves the
>>>>> issue.
>>>>>
>>>>> On Wednesday, December 1, 2021 at 12:28:15 AM UTC-5 gmhwxi wrote:
>>>>>
>>>>>> After taking a quick look at dict.sats, I spotted the following line:
>>>>>>
>>>>>> absvtype bucket(a:vt@ype)
>>>>>>
>>>>>> which should be change to the following one:
>>>>>>
>>>>>> absvtype bucket(a:vt@ype) = ptr // ptr takes the compiler the size
>>>>>> of bucket
>>>>>>
>>>>>> The simple reason is that the compiler needs to know the size of an
>>>>>> abstract type in order to compile it to a type in C.
>>>>>>
>>>>>>
>>>>>> On Wednesday, December 1, 2021 at 12:16:34 AM UTC-5 gmhwxi wrote:
>>>>>>
>>>>>>> I don't quite understand.
>>>>>>> Templates in ATS2 are supposed to be working with abstract types.
>>>>>>>
>>>>>>> If I could try precisely what you did on your machine, then I may be
>>>>>>> able to suggest something.
>>>>>>>
>>>>>>>
>>>>>>>
>>>>>>> On Tue, Nov 30, 2021 at 8:27 PM d4v3y_5c0n3s <[email protected]>
>>>>>>> wrote:
>>>>>>>
>>>>>>>> Update 2:
>>>>>>>> After investigating the prelude, I've determined that templates in
>>>>>>>> ATS2 just conflict with abstract types in some instances. For this
>>>>>>>> reason,
>>>>>>>> it seems that in many parts of the prelude avoided the use of the
>>>>>>>> "assume"
>>>>>>>> keyword with template-heavy code.
>>>>>>>>
>>>>>>>> On Tuesday, November 30, 2021 at 7:08:48 PM UTC-5 d4v3y_5c0n3s
>>>>>>>> wrote:
>>>>>>>>
>>>>>>>>> Update:
>>>>>>>>> I was able to get the code I provided above running by staloading
>>>>>>>>> the dict.dats file from the dict_test.dats file using " staload _ =
>>>>>>>>> "./dict.dats" ". Now, my only problem is that if I make the "dict" &
>>>>>>>>> bucket types abstract, the templates stop working.
>>>>>>>>>
>>>>>>>>> On Tuesday, November 30, 2021 at 1:39:39 PM UTC-5 d4v3y_5c0n3s
>>>>>>>>> wrote:
>>>>>>>>>
>>>>>>>>>> You are right, including " share/atspre_staload.hats" causes the
>>>>>>>>>> code to compile. However, I'm still having issues. You see, the
>>>>>>>>>> code I
>>>>>>>>>> provided I had taken from a static (.sats) and dynamic (.dats) file
>>>>>>>>>> in
>>>>>>>>>> order to make it more presentable when asking for help. Your fix
>>>>>>>>>> only
>>>>>>>>>> fixes the issue in the single-file version, and when including the
>>>>>>>>>> external
>>>>>>>>>> static file it doesn't work. Do you know what might be going wrong?
>>>>>>>>>> I'll
>>>>>>>>>> provide the (simplified) contents of each of these files below.
>>>>>>>>>>
>>>>>>>>>> *dict.sats*:
>>>>>>>>>> #include "share/atspre_staload.hats"
>>>>>>>>>>
>>>>>>>>>>
>>>>>>>>>> datavtype BUCKET (a:vt@ype) =
>>>>>>>>>> | bucket_empty of ()
>>>>>>>>>> | bucket_filled of (Strptr1, a, BUCKET(a))
>>>>>>>>>>
>>>>>>>>>> vtypedef bucket(a:vt@ype) = BUCKET(a)
>>>>>>>>>>
>>>>>>>>>> fn{a:vt@ype} bucket_item$delete ( x: a ): void
>>>>>>>>>>
>>>>>>>>>> fun{a:vt@ype} bucket_delete_recursive ( b: bucket(a) ) : void
>>>>>>>>>>
>>>>>>>>>> sortdef dsz = {s:int | s > 0}
>>>>>>>>>>
>>>>>>>>>> vtypedef dict(a:vt@ype, n:int) =
>>>>>>>>>> @{
>>>>>>>>>> size=int n,
>>>>>>>>>> buckets=arrayptr(bucket(a), n)
>>>>>>>>>> }
>>>>>>>>>>
>>>>>>>>>> fn{a:vt@ype} dict_new {s:dsz} ( int s ) : dict(a, s)
>>>>>>>>>> fn{a:t@ype} dict_delete {s:dsz} ( d: dict(a, s) ) : void
>>>>>>>>>> fn{a:vt@ype} dict_delete_lin {s:dsz} ( d: dict(a, s) ) : void
>>>>>>>>>>
>>>>>>>>>>
>>>>>>>>>> *dict.dats*:
>>>>>>>>>> #include "share/atspre_staload.hats"
>>>>>>>>>>
>>>>>>>>>> staload "./dict.sats"
>>>>>>>>>>
>>>>>>>>>> local
>>>>>>>>>> in
>>>>>>>>>>
>>>>>>>>>>
>>>>>>>>>> implement{a} dict_new {s} ( size ) = let
>>>>>>>>>> val size_st = size_of_int(size)
>>>>>>>>>> val bucket_arr = arrayptr_make_uninitized<bucket(a)>(size_st)
>>>>>>>>>> implmnt array_initize$init<bucket(a)> (i, x) = x :=
>>>>>>>>>> bucket_empty()
>>>>>>>>>> val () = arrayptr_initize<bucket(a)>(bucket_arr, size_st)
>>>>>>>>>> in
>>>>>>>>>> @{size=size, buckets=bucket_arr}:dict(a, s)
>>>>>>>>>> end
>>>>>>>>>>
>>>>>>>>>> implmnt{a} dict_delete ( d ) = let
>>>>>>>>>> implmnt(a2:t@ype) bucket_item$delete<a2> ( x ) = ()
>>>>>>>>>> in
>>>>>>>>>> dict_delete_lin<a>(d)
>>>>>>>>>> end
>>>>>>>>>>
>>>>>>>>>> implmnt{a} bucket_delete_recursive ( b ) =
>>>>>>>>>> case+ b of
>>>>>>>>>> | ~bucket_empty() => ()
>>>>>>>>>> | ~bucket_filled(str, x, next_bucket) => let
>>>>>>>>>> val () = strptr_free(str)
>>>>>>>>>> val () = bucket_item$delete<a>(x)
>>>>>>>>>> in
>>>>>>>>>> bucket_delete_recursive<a>(next_bucket)
>>>>>>>>>> end
>>>>>>>>>>
>>>>>>>>>> implmnt{a} dict_delete_lin ( d ) = let
>>>>>>>>>> implmnt array_uninitize$clear<bucket(a)> (i, x) =
>>>>>>>>>> bucket_delete_recursive<a>(x)
>>>>>>>>>> in
>>>>>>>>>> arrayptr_freelin(d.buckets, size_of_int(d.size))
>>>>>>>>>> end
>>>>>>>>>> end
>>>>>>>>>>
>>>>>>>>>> *dict_test.dats*, where main is:
>>>>>>>>>> #include "share/atspre_staload.hats"
>>>>>>>>>>
>>>>>>>>>> staload "./dict.sats"
>>>>>>>>>>
>>>>>>>>>>
>>>>>>>>>> implmnt main0 () = let
>>>>>>>>>> var d = dict_new<int>(13)
>>>>>>>>>> in
>>>>>>>>>> dict_delete(d)
>>>>>>>>>> end
>>>>>>>>>>
>>>>>>>>>> *My output*:
>>>>>>>>>> $ patscc --gline -DATS_MEMALLOC_LIBC dict_test.dats
>>>>>>>>>>
>>>>>>>>>> In file included from dict_test_dats.c:15:
>>>>>>>>>> /home/tmj90/Goldelish-Engine/source/data/dict_test.dats: In
>>>>>>>>>> function ‘mainats_0_void’:
>>>>>>>>>> /home/tmj90/Goldelish-Engine/source/data/dict_test.dats:58:21:
>>>>>>>>>> error: ‘PMVtmpltcstmat’ undeclared (first use in this function)
>>>>>>>>>> 58 | var d = dict_new<int>(13)
>>>>>>>>>> | ^~~~~~~
>>>>>>>>>>
>>>>>>>>>> /usr/local/lib/ats2-postiats-0.4.2/ccomp/runtime/pats_ccomp_instrset.h:276:37:
>>>>>>>>>>
>>>>>>>>>> note: in definition of macro ‘ATSINSmove’
>>>>>>>>>> 276 | #define ATSINSmove(tmp, val) (tmp = val)
>>>>>>>>>> | ^~~
>>>>>>>>>> /home/tmj90/Goldelish-Engine/source/data/dict_test.dats:58:21:
>>>>>>>>>> note: each undeclared identifier is reported only once for each
>>>>>>>>>> function it
>>>>>>>>>> appears in
>>>>>>>>>> 58 | var d = dict_new<int>(13)
>>>>>>>>>> | ^~~~~~~
>>>>>>>>>>
>>>>>>>>>> /usr/local/lib/ats2-postiats-0.4.2/ccomp/runtime/pats_ccomp_instrset.h:276:37:
>>>>>>>>>>
>>>>>>>>>> note: in definition of macro ‘ATSINSmove’
>>>>>>>>>> 276 | #define ATSINSmove(tmp, val) (tmp = val)
>>>>>>>>>> | ^~~
>>>>>>>>>> /home/tmj90/Goldelish-Engine/source/data/dict_test.dats:58:39:
>>>>>>>>>> error: ‘dict_new’ undeclared (first use in this function)
>>>>>>>>>> 58 | var d = dict_new<int>(13)
>>>>>>>>>>
>>>>>>>>>> | ^
>>>>>>>>>> /usr/local/lib/ats2-postiats-0.4.2/ccomp/runtime/pats_ccomp_instrset.h:276:37:
>>>>>>>>>>
>>>>>>>>>> note: in definition of macro ‘ATSINSmove’
>>>>>>>>>> 276 | #define ATSINSmove(tmp, val) (tmp = val)
>>>>>>>>>> | ^~~
>>>>>>>>>> /home/tmj90/Goldelish-Engine/source/data/dict_test.dats:58:48:
>>>>>>>>>> warning: implicit declaration of function ‘S2Eapp’
>>>>>>>>>> [-Wimplicit-function-declaration]
>>>>>>>>>> 58 | var d = dict_new<int>(13)
>>>>>>>>>>
>>>>>>>>>> | ^
>>>>>>>>>> /usr/local/lib/ats2-postiats-0.4.2/ccomp/runtime/pats_ccomp_instrset.h:276:37:
>>>>>>>>>>
>>>>>>>>>> note: in definition of macro ‘ATSINSmove’
>>>>>>>>>> 276 | #define ATSINSmove(tmp, val) (tmp = val)
>>>>>>>>>> | ^~~
>>>>>>>>>> /home/tmj90/Goldelish-Engine/source/data/dict_test.dats:58:55:
>>>>>>>>>> warning: implicit declaration of function ‘S2Ecst’
>>>>>>>>>> [-Wimplicit-function-declaration]
>>>>>>>>>> 58 | var d = dict_new<int>(13)
>>>>>>>>>>
>>>>>>>>>> |
>>>>>>>>>> ^
>>>>>>>>>> /usr/local/lib/ats2-postiats-0.4.2/ccomp/runtime/pats_ccomp_instrset.h:276:37:
>>>>>>>>>>
>>>>>>>>>> note: in definition of macro ‘ATSINSmove’
>>>>>>>>>> 276 | #define ATSINSmove(tmp, val) (tmp = val)
>>>>>>>>>> | ^~~
>>>>>>>>>> /home/tmj90/Goldelish-Engine/source/data/dict_test.dats:58:62:
>>>>>>>>>> error: ‘g0int_t0ype’ undeclared (first use in this function)
>>>>>>>>>> 58 | var d = dict_new<int>(13)
>>>>>>>>>>
>>>>>>>>>>
>>>>>>>>>> | ^
>>>>>>>>>>
>>>>>>>>>> /usr/local/lib/ats2-postiats-0.4.2/ccomp/runtime/pats_ccomp_instrset.h:276:37:
>>>>>>>>>>
>>>>>>>>>> note: in definition of macro ‘ATSINSmove’
>>>>>>>>>> 276 | #define ATSINSmove(tmp, val) (tmp = val)
>>>>>>>>>> | ^~~
>>>>>>>>>> /home/tmj90/Goldelish-Engine/source/data/dict_test.dats:58:74:
>>>>>>>>>> error: expected ‘)’ before ‘;’ token
>>>>>>>>>> 58 | var d = dict_new<int>(13)
>>>>>>>>>>
>>>>>>>>>>
>>>>>>>>>> |
>>>>>>>>>> ^
>>>>>>>>>> /usr/local/lib/ats2-postiats-0.4.2/ccomp/runtime/pats_ccomp_instrset.h:276:37:
>>>>>>>>>>
>>>>>>>>>> note: in definition of macro ‘ATSINSmove’
>>>>>>>>>> 276 | #define ATSINSmove(tmp, val) (tmp = val)
>>>>>>>>>> | ^~~
>>>>>>>>>> /home/tmj90/Goldelish-Engine/source/data/dict_test.dats:58:101:
>>>>>>>>>> error: expected expression before ‘)’ token
>>>>>>>>>> 58 | var d = dict_new<int>(13)
>>>>>>>>>>
>>>>>>>>>>
>>>>>>>>>> |
>>>>>>>>>>
>>>>>>>>>> ^
>>>>>>>>>> /usr/local/lib/ats2-postiats-0.4.2/ccomp/runtime/pats_ccomp_instrset.h:276:37:
>>>>>>>>>>
>>>>>>>>>> note: in definition of macro ‘ATSINSmove’
>>>>>>>>>> 276 | #define ATSINSmove(tmp, val) (tmp = val)
>>>>>>>>>> | ^~~
>>>>>>>>>> /home/tmj90/Goldelish-Engine/source/data/dict_test.dats:60:44:
>>>>>>>>>> error: ‘dict_delete’ undeclared (first use in this function); did
>>>>>>>>>> you mean
>>>>>>>>>> ‘timer_delete’?
>>>>>>>>>> 60 | dict_delete(d)
>>>>>>>>>>
>>>>>>>>>> | ^
>>>>>>>>>> /usr/local/lib/ats2-postiats-0.4.2/ccomp/runtime/pats_ccomp_instrset.h:284:39:
>>>>>>>>>>
>>>>>>>>>> note: in definition of macro ‘ATSINSmove_void’
>>>>>>>>>> 284 | #define ATSINSmove_void(tmp, command) command
>>>>>>>>>> | ^~~~~~~
>>>>>>>>>> /home/tmj90/Goldelish-Engine/source/data/dict_test.dats:60:82:
>>>>>>>>>> error: expected ‘)’ before ‘;’ token
>>>>>>>>>> 60 | dict_delete(d)
>>>>>>>>>>
>>>>>>>>>>
>>>>>>>>>> |
>>>>>>>>>>
>>>>>>>>>> ^
>>>>>>>>>> /usr/local/lib/ats2-postiats-0.4.2/ccomp/runtime/pats_ccomp_instrset.h:284:39:
>>>>>>>>>>
>>>>>>>>>> note: in definition of macro ‘ATSINSmove_void’
>>>>>>>>>> 284 | #define ATSINSmove_void(tmp, command) command
>>>>>>>>>> | ^~~~~~~
>>>>>>>>>> /home/tmj90/Goldelish-Engine/source/data/dict_test.dats:60:109:
>>>>>>>>>> error: expected expression before ‘)’ token
>>>>>>>>>> 60 | dict_delete(d)
>>>>>>>>>>
>>>>>>>>>>
>>>>>>>>>> |
>>>>>>>>>>
>>>>>>>>>> ^
>>>>>>>>>> /usr/local/lib/ats2-postiats-0.4.2/ccomp/runtime/pats_ccomp_instrset.h:284:39:
>>>>>>>>>>
>>>>>>>>>> note: in definition of macro ‘ATSINSmove_void’
>>>>>>>>>> 284 | #define ATSINSmove_void(tmp, command) command
>>>>>>>>>> | ^~~~~~~
>>>>>>>>>> On Tuesday, November 30, 2021 at 11:28:47 AM UTC-5 gmhwxi wrote:
>>>>>>>>>>
>>>>>>>>>>> I tried your code and it compiled without any issue.
>>>>>>>>>>>
>>>>>>>>>>> Did you have the following line at the top:
>>>>>>>>>>>
>>>>>>>>>>> #include "share/atspre_staload.hats"
>>>>>>>>>>>
>>>>>>>>>>> The error messages you showed indicate that many template
>>>>>>>>>>> implementations were not
>>>>>>>>>>> available to the compiler (patsopt).
>>>>>>>>>>>
>>>>>>>>>>> --Hongwei
>>>>>>>>>>>
>>>>>>>>>>>
>>>>>>>>>>> On Tue, Nov 30, 2021 at 10:52 AM d4v3y_5c0n3s <[email protected]>
>>>>>>>>>>> wrote:
>>>>>>>>>>>
>>>>>>>>>>>> Okay, so I've been struggling with my use of templates for
>>>>>>>>>>>> a while now, and I'm making this post to get some more eyes on the
>>>>>>>>>>>> issue.
>>>>>>>>>>>> I've been getting really frustrated, because nothing I've tried
>>>>>>>>>>>> seems to
>>>>>>>>>>>> work, and I have no way to understand what is going wrong
>>>>>>>>>>>> whatsoever
>>>>>>>>>>>> besides becoming familiar with compiler internals (which could
>>>>>>>>>>>> take who
>>>>>>>>>>>> knows how long to learn.)
>>>>>>>>>>>>
>>>>>>>>>>>> Here's my code:
>>>>>>>>>>>> datavtype BUCKET (a:vt@ype) =
>>>>>>>>>>>> | bucket_empty of ()
>>>>>>>>>>>> | bucket_filled of (Strptr1, a, BUCKET(a))
>>>>>>>>>>>>
>>>>>>>>>>>> vtypedef bucket(a:vt@ype) = BUCKET(a)
>>>>>>>>>>>>
>>>>>>>>>>>> sortdef dsz = {s:int | s > 0}
>>>>>>>>>>>>
>>>>>>>>>>>> vtypedef dict(a:vt@ype, n:int) =
>>>>>>>>>>>> @{
>>>>>>>>>>>> size=int n,
>>>>>>>>>>>> buckets=arrayptr(bucket(a), n)
>>>>>>>>>>>> }
>>>>>>>>>>>>
>>>>>>>>>>>> extern fn{a:vt@ype} dict_new {s:dsz} ( int s ) : dict(a, s)
>>>>>>>>>>>> extern fn{a:t@ype} dict_delete {s:dsz} ( d: dict(a, s) ) : void
>>>>>>>>>>>> extern fn{a:vt@ype} dict_delete_lin {s:dsz} ( d: dict(a, s) ) :
>>>>>>>>>>>> void
>>>>>>>>>>>>
>>>>>>>>>>>> extern fun{a:vt@ype} bucket_delete_recursive ( b: bucket(a) ) :
>>>>>>>>>>>> void
>>>>>>>>>>>> extern fn{a:vt@ype} bucket_item$delete ( x: a ): void
>>>>>>>>>>>>
>>>>>>>>>>>> implement{a} dict_new {s} ( size ) = let
>>>>>>>>>>>> val size_st = size_of_int(size)
>>>>>>>>>>>> val bucket_arr =
>>>>>>>>>>>> arrayptr_make_uninitized<bucket(a)>(size_st)
>>>>>>>>>>>> implmnt array_initize$init<bucket(a)> (i, x) = x :=
>>>>>>>>>>>> bucket_empty()
>>>>>>>>>>>> val () = arrayptr_initize<bucket(a)>(bucket_arr, size_st)
>>>>>>>>>>>> in
>>>>>>>>>>>> @{size=size, buckets=bucket_arr}:dict(a, s)
>>>>>>>>>>>> end
>>>>>>>>>>>>
>>>>>>>>>>>> implmnt{a} dict_delete ( d ) = let
>>>>>>>>>>>> implmnt(a2:t@ype) bucket_item$delete<a2> ( x ) = ()
>>>>>>>>>>>> in
>>>>>>>>>>>> dict_delete_lin<a>(d)
>>>>>>>>>>>> end
>>>>>>>>>>>>
>>>>>>>>>>>> implmnt{a} bucket_delete_recursive ( b ) =
>>>>>>>>>>>> case+ b of
>>>>>>>>>>>> | ~bucket_empty() => ()
>>>>>>>>>>>> | ~bucket_filled(str, x, next_bucket) => let
>>>>>>>>>>>> val () = strptr_free(str)
>>>>>>>>>>>> val () = bucket_item$delete<a>(x)
>>>>>>>>>>>> in
>>>>>>>>>>>> bucket_delete_recursive<a>(next_bucket)
>>>>>>>>>>>> end
>>>>>>>>>>>>
>>>>>>>>>>>> implmnt{a} dict_delete_lin ( d ) = let
>>>>>>>>>>>> implmnt array_uninitize$clear<bucket(a)> (i, x) =
>>>>>>>>>>>> bucket_delete_recursive<a>(x)
>>>>>>>>>>>> in
>>>>>>>>>>>> arrayptr_freelin(d.buckets, size_of_int(d.size))
>>>>>>>>>>>> end
>>>>>>>>>>>>
>>>>>>>>>>>> implmnt main0 () = let
>>>>>>>>>>>> var d = dict_new<int>(13)
>>>>>>>>>>>> in
>>>>>>>>>>>> dict_delete(d)
>>>>>>>>>>>> end
>>>>>>>>>>>>
>>>>>>>>>>>>
>>>>>>>>>>>> Here's the output:
>>>>>>>>>>>> $ patscc --gline dict_test.dats
>>>>>>>>>>>> In file included from dict_test_dats.c:15:
>>>>>>>>>>>> /home/tmj90/Goldelish-Engine/source/data/dict_test.dats: In
>>>>>>>>>>>> function
>>>>>>>>>>>> ‘_057_home_057_tmj90_057_Goldelish_055_Engine_057_source_057_data_057_dict_test_056_dats__dict_new__0__1’:
>>>>>>>>>>>> /home/tmj90/Goldelish-Engine/source/data/dict_test.dats:24:21:
>>>>>>>>>>>> error: ‘PMVtmpltcstmat’ undeclared (first use in this function)
>>>>>>>>>>>> 24 | val bucket_arr =
>>>>>>>>>>>> arrayptr_make_uninitized<bucket(a)>(size_st)
>>>>>>>>>>>> | ^~~~~~~~~~~~~~
>>>>>>>>>>>> /usr/local/lib/ats2-postiats-0.4.2/ccomp/runtime/pats_ccomp_instrset.h:276:37:
>>>>>>>>>>>>
>>>>>>>>>>>> note: in definition of macro ‘ATSINSmove’
>>>>>>>>>>>> 276 | #define ATSINSmove(tmp, val) (tmp = val)
>>>>>>>>>>>> | ^~~
>>>>>>>>>>>> /home/tmj90/Goldelish-Engine/source/data/dict_test.dats:24:21:
>>>>>>>>>>>> note: each undeclared identifier is reported only once for each
>>>>>>>>>>>> function it
>>>>>>>>>>>> appears in
>>>>>>>>>>>> 24 | val bucket_arr =
>>>>>>>>>>>> arrayptr_make_uninitized<bucket(a)>(size_st)
>>>>>>>>>>>> | ^~~~~~~~~~~~~~
>>>>>>>>>>>> /usr/local/lib/ats2-postiats-0.4.2/ccomp/runtime/pats_ccomp_instrset.h:276:37:
>>>>>>>>>>>>
>>>>>>>>>>>> note: in definition of macro ‘ATSINSmove’
>>>>>>>>>>>> 276 | #define ATSINSmove(tmp, val) (tmp = val)
>>>>>>>>>>>> | ^~~
>>>>>>>>>>>> /home/tmj90/Goldelish-Engine/source/data/dict_test.dats:24:39:
>>>>>>>>>>>> error: ‘arrayptr_make_uninitized’ undeclared (first use in this
>>>>>>>>>>>> function)
>>>>>>>>>>>> 24 | val bucket_arr =
>>>>>>>>>>>> arrayptr_make_uninitized<bucket(a)>(size_st)
>>>>>>>>>>>> |
>>>>>>>>>>>> ^~~~~~~~~~~~~~~~~~~~~~~~
>>>>>>>>>>>> /usr/local/lib/ats2-postiats-0.4.2/ccomp/runtime/pats_ccomp_instrset.h:276:37:
>>>>>>>>>>>>
>>>>>>>>>>>> note: in definition of macro ‘ATSINSmove’
>>>>>>>>>>>> 276 | #define ATSINSmove(tmp, val) (tmp = val)
>>>>>>>>>>>> | ^~~
>>>>>>>>>>>> /home/tmj90/Goldelish-Engine/source/data/dict_test.dats:24:64:
>>>>>>>>>>>> warning: implicit declaration of function ‘S2Eapp’
>>>>>>>>>>>> [-Wimplicit-function-declaration]
>>>>>>>>>>>> 24 | val bucket_arr =
>>>>>>>>>>>> arrayptr_make_uninitized<bucket(a)>(size_st)
>>>>>>>>>>>>
>>>>>>>>>>>> |
>>>>>>>>>>>> ^~
>>>>>>>>>>>> /usr/local/lib/ats2-postiats-0.4.2/ccomp/runtime/pats_ccomp_instrset.h:276:37:
>>>>>>>>>>>>
>>>>>>>>>>>> note: in definition of macro ‘ATSINSmove’
>>>>>>>>>>>> 276 | #define ATSINSmove(tmp, val) (tmp = val)
>>>>>>>>>>>> | ^~~
>>>>>>>>>>>> /home/tmj90/Goldelish-Engine/source/data/dict_test.dats:24:71:
>>>>>>>>>>>> warning: implicit declaration of function ‘S2Ecst’
>>>>>>>>>>>> [-Wimplicit-function-declaration]
>>>>>>>>>>>> 24 | val bucket_arr =
>>>>>>>>>>>> arrayptr_make_uninitized<bucket(a)>(size_st)
>>>>>>>>>>>>
>>>>>>>>>>>> |
>>>>>>>>>>>>
>>>>>>>>>>>> ^
>>>>>>>>>>>> /usr/local/lib/ats2-postiats-0.4.2/ccomp/runtime/pats_ccomp_instrset.h:276:37:
>>>>>>>>>>>>
>>>>>>>>>>>> note: in definition of macro ‘ATSINSmove’
>>>>>>>>>>>> 276 | #define ATSINSmove(tmp, val) (tmp = val)
>>>>>>>>>>>> | ^~~
>>>>>>>>>>>> /home/tmj90/Goldelish-Engine/source/data/dict_test.dats:24:78:
>>>>>>>>>>>> error: ‘BUCKET’ undeclared (first use in this function)
>>>>>>>>>>>> 24 | val bucket_arr =
>>>>>>>>>>>> arrayptr_make_uninitized<bucket(a)>(size_st)
>>>>>>>>>>>>
>>>>>>>>>>>> |
>>>>>>>>>>>>
>>>>>>>>>>>> ^
>>>>>>>>>>>> /usr/local/lib/ats2-postiats-0.4.2/ccomp/runtime/pats_ccomp_instrset.h:276:37:
>>>>>>>>>>>>
>>>>>>>>>>>> note: in definition of macro ‘ATSINSmove’
>>>>>>>>>>>> 276 | #define ATSINSmove(tmp, val) (tmp = val)
>>>>>>>>>>>> | ^~~
>>>>>>>>>>>> /home/tmj90/Goldelish-Engine/source/data/dict_test.dats:24:85:
>>>>>>>>>>>> error: expected ‘)’ before ‘;’ token
>>>>>>>>>>>> 24 | val bucket_arr =
>>>>>>>>>>>> arrayptr_make_uninitized<bucket(a)>(size_st)
>>>>>>>>>>>>
>>>>>>>>>>>> |
>>>>>>>>>>>>
>>>>>>>>>>>> ^
>>>>>>>>>>>> /usr/local/lib/ats2-postiats-0.4.2/ccomp/runtime/pats_ccomp_instrset.h:276:37:
>>>>>>>>>>>>
>>>>>>>>>>>> note: in definition of macro ‘ATSINSmove’
>>>>>>>>>>>> 276 | #define ATSINSmove(tmp, val) (tmp = val)
>>>>>>>>>>>> | ^~~
>>>>>>>>>>>> /home/tmj90/Goldelish-Engine/source/data/dict_test.dats:24:141:
>>>>>>>>>>>> error: expected expression before ‘)’ token
>>>>>>>>>>>> 24 | val bucket_arr =
>>>>>>>>>>>> arrayptr_make_uninitized<bucket(a)>(size_st)
>>>>>>>>>>>>
>>>>>>>>>>>> |
>>>>>>>>>>>>
>>>>>>>>>>>>
>>>>>>>>>>>> ^
>>>>>>>>>>>> /usr/local/lib/ats2-postiats-0.4.2/ccomp/runtime/pats_ccomp_instrset.h:276:37:
>>>>>>>>>>>>
>>>>>>>>>>>> note: in definition of macro ‘ATSINSmove’
>>>>>>>>>>>> 276 | #define ATSINSmove(tmp, val) (tmp = val)
>>>>>>>>>>>> | ^~~
>>>>>>>>>>>> /home/tmj90/Goldelish-Engine/source/data/dict_test.dats:26:44:
>>>>>>>>>>>> error: ‘arrayptr_initize’ undeclared (first use in this function)
>>>>>>>>>>>> 26 | val () = arrayptr_initize<bucket(a)>(bucket_arr,
>>>>>>>>>>>> size_st)
>>>>>>>>>>>> |
>>>>>>>>>>>> ^~~~~~~~~~~~~~~~
>>>>>>>>>>>> /usr/local/lib/ats2-postiats-0.4.2/ccomp/runtime/pats_ccomp_instrset.h:284:39:
>>>>>>>>>>>>
>>>>>>>>>>>> note: in definition of macro ‘ATSINSmove_void’
>>>>>>>>>>>> 284 | #define ATSINSmove_void(tmp, command) command
>>>>>>>>>>>> | ^~~~~~~
>>>>>>>>>>>> /home/tmj90/Goldelish-Engine/source/data/dict_test.dats:26:82:
>>>>>>>>>>>> error: expected ‘)’ before ‘;’ token
>>>>>>>>>>>> 26 | val () = arrayptr_initize<bucket(a)>(bucket_arr,
>>>>>>>>>>>> size_st)
>>>>>>>>>>>>
>>>>>>>>>>>> |
>>>>>>>>>>>>
>>>>>>>>>>>> ^
>>>>>>>>>>>> /usr/local/lib/ats2-postiats-0.4.2/ccomp/runtime/pats_ccomp_instrset.h:284:39:
>>>>>>>>>>>>
>>>>>>>>>>>> note: in definition of macro ‘ATSINSmove_void’
>>>>>>>>>>>> 284 | #define ATSINSmove_void(tmp, command) command
>>>>>>>>>>>> | ^~~~~~~
>>>>>>>>>>>> /home/tmj90/Goldelish-Engine/source/data/dict_test.dats:26:138:
>>>>>>>>>>>> error: expected expression before ‘)’ token
>>>>>>>>>>>> 26 | val () = arrayptr_initize<bucket(a)>(bucket_arr,
>>>>>>>>>>>> size_st)
>>>>>>>>>>>>
>>>>>>>>>>>> |
>>>>>>>>>>>>
>>>>>>>>>>>>
>>>>>>>>>>>> ^
>>>>>>>>>>>> /usr/local/lib/ats2-postiats-0.4.2/ccomp/runtime/pats_ccomp_instrset.h:284:39:
>>>>>>>>>>>>
>>>>>>>>>>>> note: in definition of macro ‘ATSINSmove_void’
>>>>>>>>>>>> 284 | #define ATSINSmove_void(tmp, command) command
>>>>>>>>>>>> | ^~~~~~~
>>>>>>>>>>>> /home/tmj90/Goldelish-Engine/source/data/dict_test.dats: In
>>>>>>>>>>>> function
>>>>>>>>>>>> ‘_057_home_057_tmj90_057_Goldelish_055_Engine_057_source_057_data_057_dict_test_056_dats__dict_delete_lin__5__1’:
>>>>>>>>>>>> /home/tmj90/Goldelish-Engine/source/data/dict_test.dats:50:30:
>>>>>>>>>>>> error: ‘PMVtmpltcstmat’ undeclared (first use in this function)
>>>>>>>>>>>> 50 | arrayptr_freelin(d.buckets, size_of_int(d.size))
>>>>>>>>>>>> | ^~~~~~~~~~~~~~
>>>>>>>>>>>> /usr/local/lib/ats2-postiats-0.4.2/ccomp/runtime/pats_ccomp_instrset.h:284:39:
>>>>>>>>>>>>
>>>>>>>>>>>> note: in definition of macro ‘ATSINSmove_void’
>>>>>>>>>>>> 284 | #define ATSINSmove_void(tmp, command) command
>>>>>>>>>>>> | ^~~~~~~
>>>>>>>>>>>> /home/tmj90/Goldelish-Engine/source/data/dict_test.dats:50:48:
>>>>>>>>>>>> error: ‘arrayptr_freelin’ undeclared (first use in this function)
>>>>>>>>>>>> 50 | arrayptr_freelin(d.buckets, size_of_int(d.size))
>>>>>>>>>>>> |
>>>>>>>>>>>> ^~~
>>>>>>>>>>>> /usr/local/lib/ats2-postiats-0.4.2/ccomp/runtime/pats_ccomp_instrset.h:284:39:
>>>>>>>>>>>>
>>>>>>>>>>>> note: in definition of macro ‘ATSINSmove_void’
>>>>>>>>>>>> 284 | #define ATSINSmove_void(tmp, command) command
>>>>>>>>>>>> | ^~~~~~~
>>>>>>>>>>>> /home/tmj90/Goldelish-Engine/source/data/dict_test.dats:50:79:
>>>>>>>>>>>> error: ‘BUCKET’ undeclared (first use in this function)
>>>>>>>>>>>> 50 | arrayptr_freelin(d.buckets, size_of_int(d.size))
>>>>>>>>>>>>
>>>>>>>>>>>> |
>>>>>>>>>>>>
>>>>>>>>>>>> ^
>>>>>>>>>>>> /usr/local/lib/ats2-postiats-0.4.2/ccomp/runtime/pats_ccomp_instrset.h:284:39:
>>>>>>>>>>>>
>>>>>>>>>>>> note: in definition of macro ‘ATSINSmove_void’
>>>>>>>>>>>> 284 | #define ATSINSmove_void(tmp, command) command
>>>>>>>>>>>> | ^~~~~~~
>>>>>>>>>>>> /home/tmj90/Goldelish-Engine/source/data/dict_test.dats:50:86:
>>>>>>>>>>>> error: expected ‘)’ before ‘;’ token
>>>>>>>>>>>> 50 | arrayptr_freelin(d.buckets, size_of_int(d.size))
>>>>>>>>>>>>
>>>>>>>>>>>> |
>>>>>>>>>>>>
>>>>>>>>>>>> ^
>>>>>>>>>>>> /usr/local/lib/ats2-postiats-0.4.2/ccomp/runtime/pats_ccomp_instrset.h:284:39:
>>>>>>>>>>>>
>>>>>>>>>>>> note: in definition of macro ‘ATSINSmove_void’
>>>>>>>>>>>> 284 | #define ATSINSmove_void(tmp, command) command
>>>>>>>>>>>> | ^~~~~~~
>>>>>>>>>>>> /home/tmj90/Goldelish-Engine/source/data/dict_test.dats:50:142:
>>>>>>>>>>>> error: expected expression before ‘)’ token
>>>>>>>>>>>> 50 | arrayptr_freelin(d.buckets, size_of_int(d.size))
>>>>>>>>>>>>
>>>>>>>>>>>> |
>>>>>>>>>>>>
>>>>>>>>>>>>
>>>>>>>>>>>> ^
>>>>>>>>>>>> /usr/local/lib/ats2-postiats-0.4.2/ccomp/runtime/pats_ccomp_instrset.h:284:39:
>>>>>>>>>>>>
>>>>>>>>>>>> note: in definition of macro ‘ATSINSmove_void’
>>>>>>>>>>>> 284 | #define ATSINSmove_void(tmp, command) command
>>>>>>>>>>>> | ^~~~~~~
>>>>>>>>>>>>
>>>>>>>>>>>> Any help is greatly appreciated, and let me know if you have
>>>>>>>>>>>> any questions. Thank you.
>>>>>>>>>>>>
>>>>>>>>>>>> --
>>>>>>>>>>>> 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 view this discussion on the web visit
>>>>>>>>>>>> https://groups.google.com/d/msgid/ats-lang-users/d42e5377-0287-4311-9b39-716235b7a0c3n%40googlegroups.com
>>>>>>>>>>>>
>>>>>>>>>>>> <https://groups.google.com/d/msgid/ats-lang-users/d42e5377-0287-4311-9b39-716235b7a0c3n%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 view this discussion on the web visit
>>>>>>>> https://groups.google.com/d/msgid/ats-lang-users/8f8bd20f-8ec3-4008-ae28-e28b013d8069n%40googlegroups.com
>>>>>>>>
>>>>>>>> <https://groups.google.com/d/msgid/ats-lang-users/8f8bd20f-8ec3-4008-ae28-e28b013d8069n%40googlegroups.com?utm_medium=email&utm_source=footer>
>>>>>>>> .
>>>>>>>>
>>>>>>> --
>>>>
>>> You received this message because you are subscribed to a topic in the
>>>> Google Groups "ats-lang-users" group.
>>>> To unsubscribe from this topic, visit
>>>> https://groups.google.com/d/topic/ats-lang-users/sZgQapU08Bo/unsubscribe
>>>> .
>>>> To unsubscribe from this group and all its topics, send an email to
>>>> [email protected].
>>>> To view this discussion on the web visit
>>>> https://groups.google.com/d/msgid/ats-lang-users/19270152-47db-4f7a-adf4-247b1adedd4dn%40googlegroups.com
>>>>
>>>> <https://groups.google.com/d/msgid/ats-lang-users/19270152-47db-4f7a-adf4-247b1adedd4dn%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 view this discussion on the web visit
https://groups.google.com/d/msgid/ats-lang-users/34464013-1e2f-4f18-b810-1d61dfeb3df2n%40googlegroups.com.