]> git.sur5r.net Git - cc65/commitdiff
Some work on function stuff.
authorcuz <cuz@b7a2c559-68d2-44c3-8de9-860c34a00d81>
Thu, 8 Jun 2000 20:27:05 +0000 (20:27 +0000)
committercuz <cuz@b7a2c559-68d2-44c3-8de9-860c34a00d81>
Thu, 8 Jun 2000 20:27:05 +0000 (20:27 +0000)
Use xsprintf from the common directory.
Use hashstr from the common directory.

git-svn-id: svn://svn.cc65.org/cc65/trunk@36 b7a2c559-68d2-44c3-8de9-860c34a00d81

src/cc65/asmline.c
src/cc65/codegen.c
src/cc65/codegen.h
src/cc65/function.c
src/cc65/function.h
src/cc65/hashstr.c [deleted file]
src/cc65/hashstr.h [deleted file]
src/cc65/macrotab.c
src/cc65/make/gcc.mak
src/cc65/make/watcom.mak
src/cc65/symtab.c

index 5559e880e565049cb16dc68552eb2b1d81357d99..3c3593b2d932821ac0c6c2a5d886ca43b868cd32 100644 (file)
@@ -35,6 +35,8 @@
 
 #include <stdio.h>
 
+#include "../common/xsprintf.h"
+
 #include "error.h"
 #include "mem.h"
 #include "asmline.h"
@@ -66,21 +68,12 @@ static Line* NewLine (const char* Format, va_list ap)
 /* Interal routine to create a new line from the given text */
 {
     char       Buf [8192];
-    int        OVF;
     unsigned   Len;
     Line*      L;
 
 
     /* Make a string from the given format and arguments */
-#if defined(__WATCOMC__)
-    OVF = (_vbprintf (Buf, sizeof (Buf), Format, ap) >= sizeof (S));
-#else
-    /* Assume gcc running on a Unix OS */
-    OVF = (vsnprintf (Buf, sizeof (Buf), Format, ap) < 0);
-#endif
-    if (OVF) {
-       Internal ("String size overflow");
-    }
+    xvsprintf (Buf, sizeof (Buf), Format, ap);
 
     /* Get the length of the line */
     Len = strlen (Buf);
index b805898f11a175383711d683715a4876517c9c78..7fe2c031a476aa47912feaabe306cce39452c29e 100644 (file)
@@ -437,10 +437,9 @@ static void ldyconst (unsigned val)
 static int funcargs;
 
 
-void g_enter (unsigned flags, const char* Name, unsigned argsize)
-/* Function prologue */
+void g_enter (unsigned flags, unsigned argsize)
+/* Function prologue */              
 {
-    g_defgloblabel (Name);     /* Define function name as label */
     if ((flags & CF_FIXARGC) != 0) {
        /* Just remember the argument size for the leave */
        funcargs = argsize;
index 33bad1d22472aba32e0898cf58bfb49ac101f550..6321e60179e145c45088262bf5563a699d1f294b 100644 (file)
@@ -185,7 +185,7 @@ void g_scale (unsigned flags, long val);
 
 
 
-void g_enter (unsigned flags, const char* Name, unsigned argsize);
+void g_enter (unsigned flags, unsigned argsize);
 /* Function prologue */
 
 void g_leave (int flags, int val);
index f1a160b6d9115801eb5fc5de61b35ec03bba6f4f..4915286ce05e7399d350bf9024173757e1775f35 100644 (file)
@@ -71,7 +71,7 @@ Function* CurrentFunc = 0;
 
 
 /*****************************************************************************/
-/*                                          code                                    */
+/*                Subroutines working with struct Function                  */
 /*****************************************************************************/
 
 
@@ -86,7 +86,7 @@ static Function* NewFunction (struct SymEntry* Sym)
     F->FuncEntry  = Sym;
     F->ReturnType = Sym->Type + 1 + DECODE_SIZE;
     F->Desc      = DecodePtr (Sym->Type + 1);
-    F->EntryCode  = GetCodePos ();
+    F->EntryCode  = 0;
     F->LocalMax          = 0;
     F->LocalSize  = 0;
     F->RetLab    = GetLabel ();
@@ -137,6 +137,14 @@ int HasVoidReturn (const Function* F)
 
 
 
+void RememberEntry (Function* F)
+/* Remember the current output position for local space creation later */
+{
+    F->EntryCode = GetCodePos ();
+}
+
+
+
 unsigned GetRetLab (const Function* F)
 /* Return the return jump label */
 {
@@ -145,7 +153,7 @@ unsigned GetRetLab (const Function* F)
 
 
 
-unsigned AllocLocalSpace (Function* F, unsigned Size)
+int AllocLocalSpace (Function* F, unsigned Size)
 /* Allocate space for the function locals, return stack offset */
 {
     /* Remember the current offset */
@@ -157,8 +165,8 @@ unsigned AllocLocalSpace (Function* F, unsigned Size)
        F->LocalMax = F->LocalSize;
     }
 
-    /* Return the offset */
-    return Offs;
+    /* Return the offset, it is below the initial stack pointer */
+    return -(int)Offs;
 }
 
 
@@ -171,6 +179,20 @@ void FreeLocalSpace (Function* F, unsigned Size)
 
 
 
+unsigned GetLocalSpace (const Function* F)
+/* Get the local variable space needed for the function */
+{
+    return F->LocalMax;
+}
+
+
+
+/*****************************************************************************/
+/*                                          code                                    */
+/*****************************************************************************/
+
+
+
 void NewFunc (SymEntry* Func)
 /* Parse argument declarations and function body. */
 {
@@ -190,7 +212,7 @@ void NewFunc (SymEntry* Func)
 
     /* C functions cannot currently have __fastcall__ calling conventions */
     if (IsFastCallFunc (Func->Type)) {
-       Error (ERR_FASTCALL);
+       Error (ERR_FASTCALL);
     }
 
     /* Need a starting curly brace */
@@ -201,9 +223,17 @@ void NewFunc (SymEntry* Func)
     /* Setup register variables */
     InitRegVars ();
 
-    /* Switch to the code segment and generate function entry code */
+    /* Switch to the code segment and define the function name label */
     g_usecode ();
-    g_enter (TypeOf (Func->Type), Func->Name, GetParamSize (CurrentFunc));
+    g_defgloblabel (Func->Name);
+
+    /* Generate function entry code if needed */
+    g_enter (TypeOf (Func->Type), GetParamSize (CurrentFunc));
+
+    /* Remember the current code position to create local variable space once
+     * we have created the function body itself.
+     */
+    RememberEntry (Func);
 
     /* Parse the function body */
     oursp = 0;
index fed098b74445eb0dbdff184a6e98fd6a934d2907..a07683637489ea5fef8f5b3300098960e35c9529 100644 (file)
@@ -43,10 +43,13 @@ type* GetReturnType (Function* F);
 int HasVoidReturn (const Function* F);
 /* Return true if the function does not have a return value */
 
+void RememberEntry (Function* F);
+/* Remember the current output position for local space creation later */
+
 unsigned GetRetLab (const Function* F);
 /* Return the return jump label */
 
-unsigned AllocLocalSpace (Function* F, unsigned Size);
+int AllocLocalSpace (Function* F, unsigned Size);
 /* Allocate space for the function locals, return stack offset  */
 
 void FreeLocalSpace (Function* F, unsigned Size);
@@ -55,7 +58,10 @@ void FreeLocalSpace (Function* F, unsigned Size);
 void NewFunc (struct SymEntry* Func);
 /* Parse argument declarations and function body. */
 
+unsigned GetLocalSpace (const Function* F);
+/* Get the local variable space needed for the function */
 
+                                
 
 /* End of function.h */
 #endif
diff --git a/src/cc65/hashstr.c b/src/cc65/hashstr.c
deleted file mode 100644 (file)
index 23b7121..0000000
+++ /dev/null
@@ -1,60 +0,0 @@
-/*****************************************************************************/
-/*                                                                           */
-/*                                hashstr.c                                 */
-/*                                                                           */
-/*                        Hash function for strings                         */
-/*                                                                           */
-/*                                                                           */
-/*                                                                           */
-/* (C) 1998     Ullrich von Bassewitz                                        */
-/*              Wacholderweg 14                                              */
-/*              D-70597 Stuttgart                                            */
-/* EMail:       uz@musoftware.de                                             */
-/*                                                                           */
-/*                                                                           */
-/* This software is provided 'as-is', without any expressed or implied       */
-/* warranty.  In no event will the authors be held liable for any damages    */
-/* arising from the use of this software.                                    */
-/*                                                                           */
-/* Permission is granted to anyone to use this software for any purpose,     */
-/* including commercial applications, and to alter it and redistribute it    */
-/* freely, subject to the following restrictions:                            */
-/*                                                                           */
-/* 1. The origin of this software must not be misrepresented; you must not   */
-/*    claim that you wrote the original software. If you use this software   */
-/*    in a product, an acknowledgment in the product documentation would be  */
-/*    appreciated but is not required.                                       */
-/* 2. Altered source versions must be plainly marked as such, and must not   */
-/*    be misrepresented as being the original software.                      */
-/* 3. This notice may not be removed or altered from any source              */
-/*    distribution.                                                          */
-/*                                                                           */
-/*****************************************************************************/
-
-
-
-#include "hashstr.h"
-
-
-
-/*****************************************************************************/
-/*                                          Code                                    */
-/*****************************************************************************/
-
-
-
-unsigned HashStr (const char* S)
-/* Return a hash value for the given string */
-{
-    unsigned L, H;
-
-    /* Do the hash */
-    H = L = 0;
-    while (*S) {
-       H = ((H << 3) ^ ((unsigned char) *S++)) + L++;
-    }
-    return H;
-}
-
-
-
diff --git a/src/cc65/hashstr.h b/src/cc65/hashstr.h
deleted file mode 100644 (file)
index af7f279..0000000
+++ /dev/null
@@ -1,57 +0,0 @@
-/*****************************************************************************/
-/*                                                                           */
-/*                                hashstr.h                                 */
-/*                                                                           */
-/*                        Hash function for strings                         */
-/*                                                                           */
-/*                                                                           */
-/*                                                                           */
-/* (C) 1998     Ullrich von Bassewitz                                        */
-/*              Wacholderweg 14                                              */
-/*              D-70597 Stuttgart                                            */
-/* EMail:       uz@musoftware.de                                             */
-/*                                                                           */
-/*                                                                           */
-/* This software is provided 'as-is', without any expressed or implied       */
-/* warranty.  In no event will the authors be held liable for any damages    */
-/* arising from the use of this software.                                    */
-/*                                                                           */
-/* Permission is granted to anyone to use this software for any purpose,     */
-/* including commercial applications, and to alter it and redistribute it    */
-/* freely, subject to the following restrictions:                            */
-/*                                                                           */
-/* 1. The origin of this software must not be misrepresented; you must not   */
-/*    claim that you wrote the original software. If you use this software   */
-/*    in a product, an acknowledgment in the product documentation would be  */
-/*    appreciated but is not required.                                       */
-/* 2. Altered source versions must be plainly marked as such, and must not   */
-/*    be misrepresented as being the original software.                      */
-/* 3. This notice may not be removed or altered from any source              */
-/*    distribution.                                                          */
-/*                                                                           */
-/*****************************************************************************/
-
-
-
-#ifndef HASHSTR_H
-#define HASHSTR_H
-
-
-
-/*****************************************************************************/
-/*                                          Code                                    */
-/*****************************************************************************/
-
-
-
-unsigned HashStr (const char* S);
-/* Return a hash value for the given string */
-
-
-
-/* End of hashstr.h */
-
-#endif
-
-
-
index fd41abe46a2ebbbb096fcdb58e96096a72270e68..d0a0a3a6748e4492e49920524a15a2c0da4a12e4 100644 (file)
@@ -36,8 +36,9 @@
 #include <stdio.h>
 #include <string.h>
 
+#include "../common/hashstr.h"
+
 #include "error.h"
-#include "hashstr.h"
 #include "mem.h"
 #include "macrotab.h"
 
index c50679a8a0151e8e51bedb480dd3d6295c4c4d78..9f4a75bcde9a3036876419932ca88a5164c90396 100644 (file)
@@ -24,7 +24,6 @@ OBJS =        anonname.o      \
        function.o      \
        global.o        \
        goto.o          \
-       hashstr.o       \
        ident.o         \
        include.o       \
        io.o            \
@@ -44,6 +43,8 @@ OBJS =        anonname.o      \
        symtab.o        \
        util.o
 
+LIBS = ../common/common.a
+
 EXECS = cc65
 
 
@@ -58,7 +59,7 @@ endif
 
 
 cc65:  $(OBJS)
-       $(CC) $(LDFLAGS) -o cc65 $(CFLAGS) $(OBJS)
+       $(CC) $(LDFLAGS) -o cc65 $(CFLAGS) $(OBJS) $(LIBS)
 
 clean:
        rm -f *~ core *.map
index 11966fd9ddaabef4aad517274c2037fcc1b4bbe1..b2fde194c0bed097cd0755a1970e21b2a9e9354a 100644 (file)
@@ -78,7 +78,6 @@ OBJS =        anonname.obj    \
        function.obj    \
        global.obj      \
        goto.obj        \
-       hashstr.obj     \
        ident.obj       \
        include.obj     \
        io.obj          \
@@ -134,7 +133,6 @@ FILE funcdesc.obj
 FILE function.obj
 FILE global.obj
 FILE goto.obj
-FILE hashstr.obj
 FILE ident.obj
 FILE include.obj
 FILE io.obj
index 6db3fc4a184be5dc46c2621ad82b62fe6d781849..f5ccf6a5134ecf95ac47903725887b9daf69337b 100644 (file)
@@ -37,6 +37,8 @@
 #include <stdlib.h>
 #include <stdarg.h>
 #include <string.h>
+                   
+#include "../common/hashstr.h"
 
 #include "asmcode.h"
 #include "asmlabel.h"
@@ -47,7 +49,6 @@
 #include "error.h"
 #include "funcdesc.h"
 #include "global.h"
-#include "hashstr.h"
 #include "io.h"
 #include "mem.h"
 #include "symentry.h"
@@ -170,7 +171,7 @@ static void CheckSymTable (SymTable* Tab)
                    }
                }
            }
-    
+
            /* If the entry is a label, check if it was defined in the function */
            if (Flags & SC_LABEL) {
                if ((Flags & SC_DEF) == 0) {
@@ -181,7 +182,7 @@ static void CheckSymTable (SymTable* Tab)
                    Warning (WARN_UNUSED_ITEM, Entry->Name);
                }
            }
-    
+
        }
 
        /* Next entry */