]> git.sur5r.net Git - cc65/commitdiff
Memory model additions
authorcuz <cuz@b7a2c559-68d2-44c3-8de9-860c34a00d81>
Sat, 29 Nov 2003 07:17:31 +0000 (07:17 +0000)
committercuz <cuz@b7a2c559-68d2-44c3-8de9-860c34a00d81>
Sat, 29 Nov 2003 07:17:31 +0000 (07:17 +0000)
git-svn-id: svn://svn.cc65.org/cc65/trunk@2693 b7a2c559-68d2-44c3-8de9-860c34a00d81

src/cc65/declare.c
src/cc65/main.c

index 0d09f7f7086dea13faebb02ad16b0b0e6dc6770b..3aaee6f2321c915743fa6d363ae4d0f027330649 100644 (file)
@@ -38,6 +38,8 @@
 #include <errno.h>
 
 /* common */
+#include "addrsize.h"
+#include "mmodel.h"
 #include "xmalloc.h"
 
 /* cc65 */
@@ -843,6 +845,13 @@ static FuncDesc* ParseFuncDecl (const DeclSpec* Spec)
        Sym = Sym->PrevSym;
     }
 
+    /* Add the default address size for the function */
+    if (CodeAddrSize == ADDR_SIZE_FAR) {
+        F->Flags |= FD_FAR;
+    } else {
+        F->Flags |= FD_NEAR;
+    }
+
     /* Leave the lexical level remembering the symbol tables */
     RememberFunctionLevel (F);
 
@@ -903,7 +912,10 @@ static void ApplyFunctionModifiers (type* T, unsigned Flags)
         Flags &= ~FD_FASTCALL;
     }
 
-    /* Add the flags */
+    /* Remove the default function address size modifiers */
+    F->Flags &= ~(FD_NEAR | FD_FAR);
+
+    /* Add the new modifers */
     F->Flags |= Flags;
 }
 
index 78df3c22c8025fa1e24fefef31f533e32b93cfd0..b720c5ce9b8e198e40d52fb53a689e7fd205ab2b 100644 (file)
@@ -556,15 +556,23 @@ static void OptListOptSteps (const char* Opt attribute ((unused)),
 static void OptMemoryModel (const char* Opt, const char* Arg)
 /* Set the memory model */
 {
+    mmodel_t M;
+
+    /* Check the current memory model */
     if (MemoryModel != MMODEL_UNKNOWN) {
         AbEnd ("Cannot use option `%s' twice", Opt);
     }
-    MemoryModel = FindMemoryModel (Arg);
-    if (MemoryModel == MMODEL_UNKNOWN) {
+
+    /* Translate the memory model name and check it */
+    M = FindMemoryModel (Arg);
+    if (M == MMODEL_UNKNOWN) {
         AbEnd ("Unknown memory model: %s", Arg);
-    } else if (MemoryModel == MMODEL_HUGE) {
+    } else if (M == MMODEL_HUGE) {
         AbEnd ("Unsupported memory model: %s", Arg);
     }
+
+    /* Set the memory model */
+    SetMemoryModel (M);
 }