[PATCH v5] algol68: Add allocation function for leaf objects

Pietro Monteiro pietro@sociotechnical.xyz
Mon Jan 19 03:40:10 GMT 2026


On Sun, Jan 18, 2026, at 11:34 AM, Jose E. Marchesi wrote:

>>  tree
>> -a68_lower_malloc (tree type, tree size)
>> +a68_lower_malloc (MOID_T *m, tree size)
>>  {
>> +  tree type = CTYPE (m);
>> +  a68_libcall_fn libcall
>> +    = HAS_REFS (m) ? A68_LIBCALL_MALLOC : A68_LIBCALL_MALLOC_LEAF;
>
> Row descriptors also have pointers.
>
> I think you want:
>
>   HAS_REFS (m) || HAS_ROWS (m) ? A68_LIBCALL_MALLOC : A68_LIBCALL_MALLOC_LEAF

I didn't use HAS_ROW because the descriptor and the element array are
allocated separately. So I thought it wasn't strictly necessary but now
I'm thinking that if I use malloc_leaf for the descriptor ther GC may free
the array prematurely.

>> +static bool
>> +is_mode_has_refs (MOID_T *m)
>> +{
>> +  if (IS_ROW (m) || IS_FLEX (m))
>> +    return HAS_REFS (m) = is_mode_has_refs (SUB (m));
>
>
> I would prefer:
>
>    {
>      HAS_REFS (m) = is_mode_has_refs (m);
>      return HAS_REFS (m);
>     
>    }
>
> But if you must, please use parentheses:
>
>   return (HAS_REFS (m) = is_mode_has_refs (SUB (m)));
>
> The GCS requires this, and in fact I expect GCC will give you a warning
> otherwise..

The 2-line version looks good.

Thanks for the review. It feels like we're getting there and I'm learning a lot about the front end.

pietro.


More information about the Algol68 mailing list