shithub: femtolisp

Download patch

ref: 44f7d8fd2573d566042c863c45aed426433cc6b4
parent: 2ee81ef43eeef5d134c3013b1d1cbd9686c1e086
parent: 0418c645cf31011412e2bfaaca497130b8d5a658
author: Jeff Bezanson <jeff.bezanson@gmail.com>
date: Fri Aug 18 22:21:18 EDT 2017

Merge pull request #51 from dcurrie/type-artype-overconstrained

Eliminated caching of over-constrained array types for cvalues

--- a/types.c
+++ b/types.c
@@ -48,7 +48,7 @@
             ft->elsz = eltype->size;
             ft->eltype = eltype;
             ft->init = &cvalue_array_init;
-            eltype->artype = ft;
+            //eltype->artype = ft; -- this is a bad idea since some types carry array sizes
         }
         else if (car_(t) == enumsym) {
             ft->numtype = T_INT32;
@@ -62,9 +62,9 @@
 fltype_t *get_array_type(value_t eltype)
 {
     fltype_t *et = get_type(eltype);
-    if (et->artype != NULL)
-        return et->artype;
-    return get_type(fl_list2(arraysym, eltype));
+    if (et->artype == NULL)
+        et->artype = get_type(fl_list2(arraysym, eltype));
+    return et->artype;
 }
 
 fltype_t *define_opaque_type(value_t sym, size_t sz, cvtable_t *vtab,