codea: parameteranzahl wird durchgereicht und ggf. geprueft wenn die eingabe nicht...
[uebersetzerbau-ss10.git] / codea / chelper.c
index 9f5032cd500af79944678cc986a063f740271458..1014a7184fe710fbeeac0a4c3febbe4ca327ab71 100644 (file)
@@ -1,9 +1,10 @@
 #include <stdio.h>
 #include <string.h>
+#include <stdlib.h>
 #include "chelper.h"
 #include "tree.h"
 
-#if 0
+#if 1
 #define DDCHELP
 #endif
 
@@ -36,14 +37,12 @@ void ret(void)
        printf("\tret\n");
 }
 
-char *next_reg(char *s, short skip)
+char *next_reg(char *s, short skip, int params)
 {
        /* TODO: bessere registerwahl. das is gerade a wengal suboptimal... */
-#if 1
-       char *regs[] = {"rax", "r10", "r11", "rax"};
-#else
+#define REGLEN 9
        char *regs[] = {"rax", "r10", "r11", "r9", "r8", "rcx", "rdx", "rsi", "rdi"};
-#endif
+
        int i=0;
        if (s != (char*) NULL) {
                while(i < 9) {
@@ -56,8 +55,16 @@ char *next_reg(char *s, short skip)
                i++;
        }
 #ifdef DDCHELP
-       fprintf(stderr, "next_reg(): %s\n", regs[i]);
+       fprintf(stderr, "next_reg(): %s (bei %i parameter)\n", regs[i], params);
+#endif
+       /* TODO: <= passt? */
+       if(REGLEN - params <= i) {
+               fprintf(stderr, "next_reg(): register \"%s\" in dem sich ein parameter befindet wird als temporaeres register verwendet(params: %i, i: %i)\n", regs[i], params, i);
+               /* TODO: exit hier? */
+#if 0
+               exit(4);
 #endif
+       }
 
        return regs[i];
 }