2 Commits 5127d52168 ... 9cae221217

Author SHA1 Message Date
  Andrew Whatson 9cae221217 Mention recfun and btree in README 6 months ago
  Andrew Whatson 46b4445399 Ensure vector routines are always inlined 6 months ago
3 changed files with 44 additions and 26 deletions
  1. 17 1
      Makefile
  2. 2 0
      README.org
  3. 25 25
      vecfun.c

+ 17 - 1
Makefile

@@ -24,7 +24,23 @@ all: $(TARGETS)
 	rm -f $@
 	( echo ",batch"; \
 	  echo "(prescheme-compiler '$* '(\"packages.scm\") 'ps-init \"$@\""; \
-	  echo " '(header \"#include \\\"ps-init.h\\\"\"))"; \
+	  echo " '(header \"#include \\\"ps-init.h\\\"\")"; \
+	  echo " '(copy (ps-vector vector-unfold1))"; \
+	  echo " '(copy (ps-vector vector-unfold2))"; \
+	  echo " '(copy (ps-vector vector-unfold3))"; \
+	  echo " '(copy (ps-vector vector-fold1))"; \
+	  echo " '(copy (ps-vector vector-fold2))"; \
+	  echo " '(copy (ps-vector vector-fold3))"; \
+	  echo " '(copy (ps-vector vector-map1!))"; \
+	  echo " '(copy (ps-vector vector-map2!))"; \
+	  echo " '(copy (ps-vector vector-map3!))"; \
+	  echo " '(copy (ps-vector vector-map1))"; \
+	  echo " '(copy (ps-vector vector-map2))"; \
+	  echo " '(copy (ps-vector vector-map3))"; \
+	  echo " '(copy (ps-vector vector-for-each1))"; \
+	  echo " '(copy (ps-vector vector-for-each2))"; \
+	  echo " '(copy (ps-vector vector-for-each3))"; \
+	  echo ")"; \
 	  echo ",exit" ) \
 	| $(PRESCHEME)
 	$(FORMAT) $@

+ 2 - 0
README.org

@@ -16,6 +16,8 @@ https://groups.scheme.org/prescheme/1.3/
 - hello.scm - "Hello World" in Pre-Scheme, from the manual
 - append.scm - Yes, you can string-append in Pre-Scheme
 - vecfun.scm - Showing off Pre-Scheme polymorphism with vectors
+- recfun.scm - Simple demonstration of records (structs)
+- btree.scm - Example of a recursive record type
 
 The generated C for each of the demo programs is also included, so you
 can review the code generation without needing to build anything.

+ 25 - 25
vecfun.c

@@ -8,8 +8,8 @@ long main(void);
 static long *Qvec_a;
 
 long main(void) {
+  long *arg3K1;
   char **arg2K1;
-  long *arg1K1;
   long arg0K1;
   long arg0K0;
   long merged_arg0K1;
@@ -58,16 +58,16 @@ long main(void) {
     out_3X = stdout;
     ps_write_string("Print vec-a with vector-for-each:\n", out_3X);
     arg0K0 = 0;
-    goto L376;
+    goto L401;
   }
-L376 : {
+L401 : {
   i_4X = arg0K0;
   if ((5 == i_4X)) {
     ps_write_string("Print the last value of vec-a with vector-fold:\n",
                     out_3X);
     arg0K0 = 0;
     arg0K1 = -1;
-    goto L393;
+    goto L418;
   } else {
     val_5X = *(Qvec_a + i_4X);
     ps_write_string(" vec-a[", out_3X);
@@ -79,10 +79,10 @@ L376 : {
       PS_WRITE_CHAR(10, out_3X, ignoreXX)
     }
     arg0K0 = (1 + i_4X);
-    goto L376;
+    goto L401;
   }
 }
-L393 : {
+L418 : {
   i_6X = arg0K0;
   result_7X = arg0K1;
   if ((5 == i_6X)) {
@@ -105,20 +105,20 @@ L393 : {
   procD0_return_0:
     v_8X = procD00_return_value;
     arg0K0 = 0;
-    arg1K1 = ((long *)malloc(sizeof(long) * 5));
-    goto L212;
+    arg3K1 = ((long *)malloc(sizeof(long) * 5));
+    goto L442;
   } else {
     arg0K0 = (1 + i_6X);
     arg0K1 = (*(Qvec_a + i_6X));
-    goto L393;
+    goto L418;
   }
 }
-L212 : {
+L442 : {
   i_9X = arg0K0;
-  result_10X = arg1K1;
+  result_10X = arg3K1;
   if ((5 == i_9X)) {
     arg0K0 = 0;
-    goto L409;
+    goto L468;
   } else {
     merged_arg0K0 = (*(Qvec_a + i_9X));
     merged_arg0K1 = (*(Qvec_a + i_9X));
@@ -132,11 +132,11 @@ L212 : {
     v_11X = procD00_return_value;
     *(result_10X + i_9X) = v_11X;
     arg0K0 = (1 + i_9X);
-    arg1K1 = result_10X;
-    goto L212;
+    arg3K1 = result_10X;
+    goto L442;
   }
 }
-L409 : {
+L468 : {
   i_12X = arg0K0;
   if ((5 == i_12X)) {
     free(result_10X);
@@ -152,7 +152,7 @@ L409 : {
     v_13X = procD10_return_value;
     arg0K0 = 0;
     arg2K1 = ((char **)malloc(sizeof(char *) * 5));
-    goto L159;
+    goto L486;
   } else {
     val_14X = *(result_10X + i_12X);
     ps_write_string(" sums[", out_3X);
@@ -164,15 +164,15 @@ L409 : {
       PS_WRITE_CHAR(10, out_3X, ignoreXX)
     }
     arg0K0 = (1 + i_12X);
-    goto L409;
+    goto L468;
   }
 }
-L159 : {
+L486 : {
   i_15X = arg0K0;
   result_16X = arg2K1;
   if ((5 == i_15X)) {
     arg0K0 = 0;
-    goto L425;
+    goto L504;
   } else {
     merged_arg0K0 = (*(Qvec_a + i_15X));
 #ifdef USE_DIRECT_THREADING
@@ -186,14 +186,14 @@ L159 : {
     *(result_16X + i_15X) = v_17X;
     arg0K0 = (1 + i_15X);
     arg2K1 = result_16X;
-    goto L159;
+    goto L486;
   }
 }
-L425 : {
+L504 : {
   i_18X = arg0K0;
   if ((5 == i_18X)) {
     arg0K0 = 0;
-    goto L441;
+    goto L520;
   } else {
     val_19X = *(result_16X + i_18X);
     ps_write_string(" strs[", out_3X);
@@ -209,10 +209,10 @@ L425 : {
       PS_WRITE_CHAR(10, out_3X, ignoreXX)
     }
     arg0K0 = (1 + i_18X);
-    goto L425;
+    goto L504;
   }
 }
-L441 : {
+L520 : {
   i_20X = arg0K0;
   if ((5 == i_20X)) {
     free(result_16X);
@@ -220,7 +220,7 @@ L441 : {
   } else {
     free((*(result_16X + i_20X)));
     arg0K0 = (1 + i_20X);
-    goto L441;
+    goto L520;
   }
 }
 procD1 : {