2 Commits 5127d52168 ... 9cae221217

Autor SHA1 Nachricht Datum
  Andrew Whatson 9cae221217 Mention recfun and btree in README vor 6 Monaten
  Andrew Whatson 46b4445399 Ensure vector routines are always inlined vor 6 Monaten
3 geänderte Dateien mit 44 neuen und 26 gelöschten Zeilen
  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 $@
 	rm -f $@
 	( echo ",batch"; \
 	( echo ",batch"; \
 	  echo "(prescheme-compiler '$* '(\"packages.scm\") 'ps-init \"$@\""; \
 	  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" ) \
 	  echo ",exit" ) \
 	| $(PRESCHEME)
 	| $(PRESCHEME)
 	$(FORMAT) $@
 	$(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
 - hello.scm - "Hello World" in Pre-Scheme, from the manual
 - append.scm - Yes, you can string-append in Pre-Scheme
 - append.scm - Yes, you can string-append in Pre-Scheme
 - vecfun.scm - Showing off Pre-Scheme polymorphism with vectors
 - 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
 The generated C for each of the demo programs is also included, so you
 can review the code generation without needing to build anything.
 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;
 static long *Qvec_a;
 
 
 long main(void) {
 long main(void) {
+  long *arg3K1;
   char **arg2K1;
   char **arg2K1;
-  long *arg1K1;
   long arg0K1;
   long arg0K1;
   long arg0K0;
   long arg0K0;
   long merged_arg0K1;
   long merged_arg0K1;
@@ -58,16 +58,16 @@ long main(void) {
     out_3X = stdout;
     out_3X = stdout;
     ps_write_string("Print vec-a with vector-for-each:\n", out_3X);
     ps_write_string("Print vec-a with vector-for-each:\n", out_3X);
     arg0K0 = 0;
     arg0K0 = 0;
-    goto L376;
+    goto L401;
   }
   }
-L376 : {
+L401 : {
   i_4X = arg0K0;
   i_4X = arg0K0;
   if ((5 == i_4X)) {
   if ((5 == i_4X)) {
     ps_write_string("Print the last value of vec-a with vector-fold:\n",
     ps_write_string("Print the last value of vec-a with vector-fold:\n",
                     out_3X);
                     out_3X);
     arg0K0 = 0;
     arg0K0 = 0;
     arg0K1 = -1;
     arg0K1 = -1;
-    goto L393;
+    goto L418;
   } else {
   } else {
     val_5X = *(Qvec_a + i_4X);
     val_5X = *(Qvec_a + i_4X);
     ps_write_string(" vec-a[", out_3X);
     ps_write_string(" vec-a[", out_3X);
@@ -79,10 +79,10 @@ L376 : {
       PS_WRITE_CHAR(10, out_3X, ignoreXX)
       PS_WRITE_CHAR(10, out_3X, ignoreXX)
     }
     }
     arg0K0 = (1 + i_4X);
     arg0K0 = (1 + i_4X);
-    goto L376;
+    goto L401;
   }
   }
 }
 }
-L393 : {
+L418 : {
   i_6X = arg0K0;
   i_6X = arg0K0;
   result_7X = arg0K1;
   result_7X = arg0K1;
   if ((5 == i_6X)) {
   if ((5 == i_6X)) {
@@ -105,20 +105,20 @@ L393 : {
   procD0_return_0:
   procD0_return_0:
     v_8X = procD00_return_value;
     v_8X = procD00_return_value;
     arg0K0 = 0;
     arg0K0 = 0;
-    arg1K1 = ((long *)malloc(sizeof(long) * 5));
-    goto L212;
+    arg3K1 = ((long *)malloc(sizeof(long) * 5));
+    goto L442;
   } else {
   } else {
     arg0K0 = (1 + i_6X);
     arg0K0 = (1 + i_6X);
     arg0K1 = (*(Qvec_a + i_6X));
     arg0K1 = (*(Qvec_a + i_6X));
-    goto L393;
+    goto L418;
   }
   }
 }
 }
-L212 : {
+L442 : {
   i_9X = arg0K0;
   i_9X = arg0K0;
-  result_10X = arg1K1;
+  result_10X = arg3K1;
   if ((5 == i_9X)) {
   if ((5 == i_9X)) {
     arg0K0 = 0;
     arg0K0 = 0;
-    goto L409;
+    goto L468;
   } else {
   } else {
     merged_arg0K0 = (*(Qvec_a + i_9X));
     merged_arg0K0 = (*(Qvec_a + i_9X));
     merged_arg0K1 = (*(Qvec_a + i_9X));
     merged_arg0K1 = (*(Qvec_a + i_9X));
@@ -132,11 +132,11 @@ L212 : {
     v_11X = procD00_return_value;
     v_11X = procD00_return_value;
     *(result_10X + i_9X) = v_11X;
     *(result_10X + i_9X) = v_11X;
     arg0K0 = (1 + i_9X);
     arg0K0 = (1 + i_9X);
-    arg1K1 = result_10X;
-    goto L212;
+    arg3K1 = result_10X;
+    goto L442;
   }
   }
 }
 }
-L409 : {
+L468 : {
   i_12X = arg0K0;
   i_12X = arg0K0;
   if ((5 == i_12X)) {
   if ((5 == i_12X)) {
     free(result_10X);
     free(result_10X);
@@ -152,7 +152,7 @@ L409 : {
     v_13X = procD10_return_value;
     v_13X = procD10_return_value;
     arg0K0 = 0;
     arg0K0 = 0;
     arg2K1 = ((char **)malloc(sizeof(char *) * 5));
     arg2K1 = ((char **)malloc(sizeof(char *) * 5));
-    goto L159;
+    goto L486;
   } else {
   } else {
     val_14X = *(result_10X + i_12X);
     val_14X = *(result_10X + i_12X);
     ps_write_string(" sums[", out_3X);
     ps_write_string(" sums[", out_3X);
@@ -164,15 +164,15 @@ L409 : {
       PS_WRITE_CHAR(10, out_3X, ignoreXX)
       PS_WRITE_CHAR(10, out_3X, ignoreXX)
     }
     }
     arg0K0 = (1 + i_12X);
     arg0K0 = (1 + i_12X);
-    goto L409;
+    goto L468;
   }
   }
 }
 }
-L159 : {
+L486 : {
   i_15X = arg0K0;
   i_15X = arg0K0;
   result_16X = arg2K1;
   result_16X = arg2K1;
   if ((5 == i_15X)) {
   if ((5 == i_15X)) {
     arg0K0 = 0;
     arg0K0 = 0;
-    goto L425;
+    goto L504;
   } else {
   } else {
     merged_arg0K0 = (*(Qvec_a + i_15X));
     merged_arg0K0 = (*(Qvec_a + i_15X));
 #ifdef USE_DIRECT_THREADING
 #ifdef USE_DIRECT_THREADING
@@ -186,14 +186,14 @@ L159 : {
     *(result_16X + i_15X) = v_17X;
     *(result_16X + i_15X) = v_17X;
     arg0K0 = (1 + i_15X);
     arg0K0 = (1 + i_15X);
     arg2K1 = result_16X;
     arg2K1 = result_16X;
-    goto L159;
+    goto L486;
   }
   }
 }
 }
-L425 : {
+L504 : {
   i_18X = arg0K0;
   i_18X = arg0K0;
   if ((5 == i_18X)) {
   if ((5 == i_18X)) {
     arg0K0 = 0;
     arg0K0 = 0;
-    goto L441;
+    goto L520;
   } else {
   } else {
     val_19X = *(result_16X + i_18X);
     val_19X = *(result_16X + i_18X);
     ps_write_string(" strs[", out_3X);
     ps_write_string(" strs[", out_3X);
@@ -209,10 +209,10 @@ L425 : {
       PS_WRITE_CHAR(10, out_3X, ignoreXX)
       PS_WRITE_CHAR(10, out_3X, ignoreXX)
     }
     }
     arg0K0 = (1 + i_18X);
     arg0K0 = (1 + i_18X);
-    goto L425;
+    goto L504;
   }
   }
 }
 }
-L441 : {
+L520 : {
   i_20X = arg0K0;
   i_20X = arg0K0;
   if ((5 == i_20X)) {
   if ((5 == i_20X)) {
     free(result_16X);
     free(result_16X);
@@ -220,7 +220,7 @@ L441 : {
   } else {
   } else {
     free((*(result_16X + i_20X)));
     free((*(result_16X + i_20X)));
     arg0K0 = (1 + i_20X);
     arg0K0 = (1 + i_20X);
-    goto L441;
+    goto L520;
   }
   }
 }
 }
 procD1 : {
 procD1 : {