That seems to have fixed my issue, thanks. :) On Thursday, December 30, 2021 at 9:28:57 PM UTC-5 gmhwxi wrote:
> 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 <tmj...@gmail.com> 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 <tmj...@gmail.com> >>>>>>>> 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 <tmj...@gmail.com> >>>>>>>>>>>> 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 ats-lang-user...@googlegroups.com. >>>>>>>>>>>>> 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 ats-lang-user...@googlegroups.com. >>>>>>>>> >>>>>>>> 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 >>>>> ats-lang-user...@googlegroups.com. >>>>> 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 ats-lang-users+unsubscr...@googlegroups.com. To view this discussion on the web visit https://groups.google.com/d/msgid/ats-lang-users/cb4acd7e-375d-4d7c-b7e7-5e22d066bba2n%40googlegroups.com.