Add patch from Aleksej for 64 bit cells on 32 bit system.
authorphil@softsynth.com <phil@softsynth.com@b0a0988d-7f52-0410-8c73-4f6cdee1a2cf>
Mon, 5 Jul 2010 22:52:35 +0000 (22:52 +0000)
committerphil@softsynth.com <phil@softsynth.com@b0a0988d-7f52-0410-8c73-4f6cdee1a2cf>
Mon, 5 Jul 2010 22:52:35 +0000 (22:52 +0000)
csrc/pf_core.c
csrc/pf_guts.h
csrc/pf_inner.c
csrc/pf_save.c
csrc/pfcompil.c

index 7abe8c1..41fa5f7 100644 (file)
@@ -53,7 +53,7 @@ ExecToken     gAcceptP_XT;         /* XT of ACCEPT */
 cell_t         gDepthAtColon;\r
 \r
 /* Global Forth variables. */\r
 cell_t         gDepthAtColon;\r
 \r
 /* Global Forth variables. */\r
-char         *gVarContext;      /* Points to last name field. */\r
+cell_t          gVarContext;      /* Points to last name field. */\r
 cell_t          gVarState;        /* 1 if compiling. */\r
 cell_t          gVarBase;         /* Numeric Base. */\r
 cell_t          gVarEcho;              /* Echo input. */\r
 cell_t          gVarState;        /* 1 if compiling. */\r
 cell_t          gVarBase;         /* Numeric Base. */\r
 cell_t          gVarEcho;              /* Echo input. */\r
@@ -87,7 +87,7 @@ static void pfInit( void )
        gCurrentDictionary = NULL;\r
        gNumPrimitives = 0;\r
        gLocalCompiler_XT = 0;\r
        gCurrentDictionary = NULL;\r
        gNumPrimitives = 0;\r
        gLocalCompiler_XT = 0;\r
-       gVarContext = NULL;   /* Points to last name field. */\r
+       gVarContext = (cell_t)NULL;   /* Points to last name field. */\r
        gVarState = 0;        /* 1 if compiling. */\r
        gVarEcho = 0;       /* Echo input. */\r
        gVarTraceLevel = 0;   /* Trace Level for Inner Interpreter. */\r
        gVarState = 0;        /* 1 if compiling. */\r
        gVarEcho = 0;       /* Echo input. */\r
        gVarTraceLevel = 0;   /* Trace Level for Inner Interpreter. */\r
@@ -174,7 +174,7 @@ nomem:
 cell_t pfExecIfDefined( const char *CString )\r
 {\r
        int result = 0;\r
 cell_t pfExecIfDefined( const char *CString )\r
 {\r
        int result = 0;\r
-       if( NAME_BASE != NULL)\r
+       if( NAME_BASE != (cell_t)NULL)\r
        {\r
                ExecToken  XT;\r
                if( ffFindC( CString, &XT ) )\r
        {\r
                ExecToken  XT;\r
                if( ffFindC( CString, &XT ) )\r
@@ -235,7 +235,7 @@ PForthDictionary pfCreateDictionary( cell_t HeaderSize, cell_t CodeSize )
                dic->dic_HeaderBase = DIC_ALIGN(dic->dic_HeaderBaseUnaligned);\r
                pfSetMemory( dic->dic_HeaderBase, 0xA5, (ucell_t) HeaderSize);\r
                dic->dic_HeaderLimit = dic->dic_HeaderBase + HeaderSize;\r
                dic->dic_HeaderBase = DIC_ALIGN(dic->dic_HeaderBaseUnaligned);\r
                pfSetMemory( dic->dic_HeaderBase, 0xA5, (ucell_t) HeaderSize);\r
                dic->dic_HeaderLimit = dic->dic_HeaderBase + HeaderSize;\r
-               dic->dic_HeaderPtr.Byte = dic->dic_HeaderBase;\r
+               dic->dic_HeaderPtr = dic->dic_HeaderBase;\r
        }\r
        else\r
        {\r
        }\r
        else\r
        {\r
index 806ff84..425f226 100644 (file)
@@ -422,26 +422,22 @@ typedef struct pfDictionary_s
        ucell_t  dic_Flags;\r
 /* Headers contain pointers to names and dictionary. */\r
 \r
        ucell_t  dic_Flags;\r
 /* Headers contain pointers to names and dictionary. */\r
 \r
-       uint8_t *dic_HeaderBaseUnaligned;\r
+       ucell_t dic_HeaderBaseUnaligned;\r
 \r
 \r
-       uint8_t *dic_HeaderBase;\r
-       union\r
-       {\r
-               cell_t  *Cell;\r
-               uint8_t *Byte;\r
-       } dic_HeaderPtr;\r
-       uint8_t *dic_HeaderLimit;\r
+       ucell_t dic_HeaderBase;\r
+       ucell_t dic_HeaderPtr;\r
+       ucell_t dic_HeaderLimit;\r
 /* Code segment contains tokenized code and data. */\r
 \r
 /* Code segment contains tokenized code and data. */\r
 \r
-       uint8_t *dic_CodeBaseUnaligned;\r
+       ucell_t dic_CodeBaseUnaligned;\r
 \r
 \r
-       uint8_t *dic_CodeBase;\r
+       ucell_t dic_CodeBase;\r
        union\r
        {\r
                cell_t  *Cell;\r
                uint8_t *Byte;\r
        } dic_CodePtr;\r
        union\r
        {\r
                cell_t  *Cell;\r
                uint8_t *Byte;\r
        } dic_CodePtr;\r
-       uint8_t *dic_CodeLimit;\r
+       ucell_t dic_CodeLimit;\r
 } pfDictionary_t;\r
 \r
 /* Save state of include when nesting files. */\r
 } pfDictionary_t;\r
 \r
 /* Save state of include when nesting files. */\r
@@ -487,7 +483,7 @@ extern ExecToken     gAcceptP_XT;         /* XT of ACCEPT */
 extern cell_t         gDepthAtColon;\r
 \r
 /* Global variables. */\r
 extern cell_t         gDepthAtColon;\r
 \r
 /* Global variables. */\r
-extern char         *gVarContext;    /* Points to last name field. */\r
+extern cell_t        gVarContext;    /* Points to last name field. */\r
 extern cell_t        gVarState;      /* 1 if compiling. */\r
 extern cell_t        gVarBase;       /* Numeric Base. */\r
 extern cell_t        gVarEcho;       /* Echo input from file. */\r
 extern cell_t        gVarState;      /* 1 if compiling. */\r
 extern cell_t        gVarBase;       /* Numeric Base. */\r
 extern cell_t        gVarEcho;       /* Echo input from file. */\r
index 11c5dce..5472942 100644 (file)
@@ -1536,7 +1536,7 @@ DBUG(("XX ah,m,l = 0x%8x,%8x,%8x - qh,l = 0x%8x,%8x\n", ah,am,al, qh,ql ));
 #if (defined(PF_BIG_ENDIAN_DIC) || defined(PF_LITTLE_ENDIAN_DIC))\r
                        if( IN_DICS( TOS ) )\r
                        {\r
 #if (defined(PF_BIG_ENDIAN_DIC) || defined(PF_LITTLE_ENDIAN_DIC))\r
                        if( IN_DICS( TOS ) )\r
                        {\r
-                               WRITE_CELL_DIC(TOS,M_POP);\r
+                               WRITE_CELL_DIC((cell_t *)TOS,M_POP);\r
                        }\r
                        else\r
                        {\r
                        }\r
                        else\r
                        {\r
@@ -1666,7 +1666,7 @@ DBUG(("XX ah,m,l = 0x%8x,%8x,%8x - qh,l = 0x%8x,%8x\n", ah,am,al, qh,ql ));
                case ID_VAR_ECHO: DO_VAR(gVarEcho); endcase;\r
                case ID_VAR_HEADERS_BASE: DO_VAR(gCurrentDictionary->dic_HeaderBase); endcase;\r
                case ID_VAR_HEADERS_LIMIT: DO_VAR(gCurrentDictionary->dic_HeaderLimit); endcase;\r
                case ID_VAR_ECHO: DO_VAR(gVarEcho); endcase;\r
                case ID_VAR_HEADERS_BASE: DO_VAR(gCurrentDictionary->dic_HeaderBase); endcase;\r
                case ID_VAR_HEADERS_LIMIT: DO_VAR(gCurrentDictionary->dic_HeaderLimit); endcase;\r
-               case ID_VAR_HEADERS_PTR: DO_VAR(gCurrentDictionary->dic_HeaderPtr.Cell); endcase;\r
+               case ID_VAR_HEADERS_PTR: DO_VAR(gCurrentDictionary->dic_HeaderPtr); endcase;\r
                case ID_VAR_NUM_TIB: DO_VAR(gCurrentTask->td_SourceNum); endcase;\r
                case ID_VAR_OUT: DO_VAR(gCurrentTask->td_OUT); endcase;\r
                case ID_VAR_STATE: DO_VAR(gVarState); endcase;\r
                case ID_VAR_NUM_TIB: DO_VAR(gCurrentTask->td_SourceNum); endcase;\r
                case ID_VAR_OUT: DO_VAR(gCurrentTask->td_OUT); endcase;\r
                case ID_VAR_STATE: DO_VAR(gVarState); endcase;\r
@@ -1684,7 +1684,7 @@ DBUG(("XX ah,m,l = 0x%8x,%8x,%8x - qh,l = 0x%8x,%8x\n", ah,am,al, qh,ql ));
 #if (defined(PF_BIG_ENDIAN_DIC) || defined(PF_LITTLE_ENDIAN_DIC))\r
                        if( IN_DICS( TOS ) )\r
                        {\r
 #if (defined(PF_BIG_ENDIAN_DIC) || defined(PF_LITTLE_ENDIAN_DIC))\r
                        if( IN_DICS( TOS ) )\r
                        {\r
-                               TOS = (uint16_t) READ_SHORT_DIC((uint8_t *)TOS);\r
+                               TOS = (uint16_t) READ_SHORT_DIC((uint16_t *)TOS);\r
                        }\r
                        else\r
                        {\r
                        }\r
                        else\r
                        {\r
@@ -1700,7 +1700,7 @@ DBUG(("XX ah,m,l = 0x%8x,%8x,%8x - qh,l = 0x%8x,%8x\n", ah,am,al, qh,ql ));
 #if (defined(PF_BIG_ENDIAN_DIC) || defined(PF_LITTLE_ENDIAN_DIC))\r
                        if( IN_DICS( TOS ) )\r
                        {\r
 #if (defined(PF_BIG_ENDIAN_DIC) || defined(PF_LITTLE_ENDIAN_DIC))\r
                        if( IN_DICS( TOS ) )\r
                        {\r
-                               WRITE_SHORT_DIC(TOS,M_POP);\r
+                               WRITE_SHORT_DIC((uint16_t *)TOS,(uint16_t)M_POP);\r
                        }\r
                        else\r
                        {\r
                        }\r
                        else\r
                        {\r
index 6a9d195..128b474 100644 (file)
@@ -423,7 +423,7 @@ cell_t ffSaveForth( const char *FileName, ExecToken EntryPoint, cell_t NameSize,
                uint32_t relativeHeaderPtr;\r
 /* Development mode. */\r
                SD.sd_RelContext = ABS_TO_NAMEREL(gVarContext);\r
                uint32_t relativeHeaderPtr;\r
 /* Development mode. */\r
                SD.sd_RelContext = ABS_TO_NAMEREL(gVarContext);\r
-               relativeHeaderPtr = ABS_TO_NAMEREL(gCurrentDictionary->dic_HeaderPtr.Byte);\r
+               relativeHeaderPtr = ABS_TO_NAMEREL(gCurrentDictionary->dic_HeaderPtr);\r
                SD.sd_RelHeaderPtr = relativeHeaderPtr;\r
 \r
 /* How much real name space is there? */\r
                SD.sd_RelHeaderPtr = relativeHeaderPtr;\r
 \r
 /* How much real name space is there? */\r
@@ -645,13 +645,13 @@ DBUG(("pfLoadDictionary( %s )\n", FileName ));
                        if( sd->sd_NameSize > 0 )\r
                        {\r
                                gVarContext = (char *) NAMEREL_TO_ABS(sd->sd_RelContext); /* Restore context. */\r
                        if( sd->sd_NameSize > 0 )\r
                        {\r
                                gVarContext = (char *) NAMEREL_TO_ABS(sd->sd_RelContext); /* Restore context. */\r
-                               gCurrentDictionary->dic_HeaderPtr.Byte = (uint8_t *)\r
+                               gCurrentDictionary->dic_HeaderPtr = (ucell_t)(uint8_t *)\r
                                        NAMEREL_TO_ABS(sd->sd_RelHeaderPtr);\r
                        }\r
                        else\r
                        {\r
                                gVarContext = 0;\r
                                        NAMEREL_TO_ABS(sd->sd_RelHeaderPtr);\r
                        }\r
                        else\r
                        {\r
                                gVarContext = 0;\r
-                               gCurrentDictionary->dic_HeaderPtr.Byte = NULL;\r
+                               gCurrentDictionary->dic_HeaderPtr = (ucell_t)NULL;\r
                        }\r
                        gCurrentDictionary->dic_CodePtr.Byte = (uint8_t *) CODEREL_TO_ABS(sd->sd_RelCodePtr);\r
                        gNumPrimitives = sd->sd_NumPrimitives;  /* Must match compiled dictionary. */\r
                        }\r
                        gCurrentDictionary->dic_CodePtr.Byte = (uint8_t *) CODEREL_TO_ABS(sd->sd_RelCodePtr);\r
                        gNumPrimitives = sd->sd_NumPrimitives;  /* Must match compiled dictionary. */\r
@@ -810,7 +810,7 @@ PForthDictionary pfLoadStaticDictionary( void )
        if( NAME_BASE != NULL)\r
        {\r
 /* Setup name space. */\r
        if( NAME_BASE != NULL)\r
        {\r
 /* Setup name space. */\r
-               dic->dic_HeaderPtr.Byte = (uint8_t *) NAMEREL_TO_ABS(HEADERPTR);\r
+               dic->dic_HeaderPtr = (ucell_t)(uint8_t *) NAMEREL_TO_ABS(HEADERPTR);\r
                gVarContext = (char *) NAMEREL_TO_ABS(RELCONTEXT); /* Restore context. */\r
 \r
 /* Find special words in dictionary for global XTs. */\r
                gVarContext = (char *) NAMEREL_TO_ABS(RELCONTEXT); /* Restore context. */\r
 \r
 /* Find special words in dictionary for global XTs. */\r
index 3613b33..025eebf 100644 (file)
@@ -58,7 +58,7 @@ void CreateDicEntry( ExecToken XT, const ForthStringPtr FName, ucell_t Flags )
 {\r
        cfNameLinks *cfnl;\r
 \r
 {\r
        cfNameLinks *cfnl;\r
 \r
-       cfnl = (cfNameLinks *) gCurrentDictionary->dic_HeaderPtr.Byte;\r
+       cfnl = (cfNameLinks *) gCurrentDictionary->dic_HeaderPtr;\r
 \r
 /* Set link to previous header, if any. */\r
        if( gVarContext )\r
 \r
 /* Set link to previous header, if any. */\r
        if( gVarContext )\r
@@ -74,20 +74,20 @@ void CreateDicEntry( ExecToken XT, const ForthStringPtr FName, ucell_t Flags )
        WRITE_CELL_DIC( &cfnl->cfnl_ExecToken, XT );\r
 \r
 /* Advance Header Dictionary Pointer */\r
        WRITE_CELL_DIC( &cfnl->cfnl_ExecToken, XT );\r
 \r
 /* Advance Header Dictionary Pointer */\r
-       gCurrentDictionary->dic_HeaderPtr.Byte += sizeof(cfNameLinks);\r
+       gCurrentDictionary->dic_HeaderPtr += sizeof(cfNameLinks);\r
 \r
 /* Laydown name. */\r
 \r
 /* Laydown name. */\r
-       gVarContext = (char *) gCurrentDictionary->dic_HeaderPtr.Byte;\r
-       pfCopyMemory( gCurrentDictionary->dic_HeaderPtr.Byte, FName, (*FName)+1 );\r
-       gCurrentDictionary->dic_HeaderPtr.Byte += (*FName)+1;\r
+       gVarContext = (char *) gCurrentDictionary->dic_HeaderPtr;\r
+       pfCopyMemory( (char *)gCurrentDictionary->dic_HeaderPtr, FName, (*FName)+1 );\r
+       gCurrentDictionary->dic_HeaderPtr += (*FName)+1;\r
 \r
 /* Set flags. */\r
 \r
 /* Set flags. */\r
-       *gVarContext |= (char) Flags;\r
+       *(char*)gVarContext |= (char) Flags;\r
        \r
 /* Align to quad byte boundaries with zeroes. */\r
        \r
 /* Align to quad byte boundaries with zeroes. */\r
-       while( ((ucell_t) gCurrentDictionary->dic_HeaderPtr.Byte) & UINT32_MASK )\r
+       while( gCurrentDictionary->dic_HeaderPtr & UINT32_MASK )\r
        {\r
        {\r
-               *gCurrentDictionary->dic_HeaderPtr.Byte++ = 0;\r
+               *(char*)(gCurrentDictionary->dic_HeaderPtr++) = 0;\r
        }\r
 }\r
 \r
        }\r
 }\r
 \r
@@ -528,16 +528,16 @@ DBUG(("ffFindC: %s\n", WordName ));
 static cell_t ffCheckDicRoom( void )\r
 {\r
        cell_t RoomLeft;\r
 static cell_t ffCheckDicRoom( void )\r
 {\r
        cell_t RoomLeft;\r
-       RoomLeft = gCurrentDictionary->dic_HeaderLimit -\r
-                  gCurrentDictionary->dic_HeaderPtr.Byte;\r
+       RoomLeft = (char *)gCurrentDictionary->dic_HeaderLimit -\r
+                  (char *)gCurrentDictionary->dic_HeaderPtr;\r
        if( RoomLeft < DIC_SAFETY_MARGIN )\r
        {\r
                pfReportError("ffCheckDicRoom", PF_ERR_HEADER_ROOM);\r
                return PF_ERR_HEADER_ROOM;\r
        }\r
 \r
        if( RoomLeft < DIC_SAFETY_MARGIN )\r
        {\r
                pfReportError("ffCheckDicRoom", PF_ERR_HEADER_ROOM);\r
                return PF_ERR_HEADER_ROOM;\r
        }\r
 \r
-       RoomLeft = gCurrentDictionary->dic_CodeLimit -\r
-                  gCurrentDictionary->dic_CodePtr.Byte;\r
+       RoomLeft = (char *)gCurrentDictionary->dic_CodeLimit -\r
+                  (char *)gCurrentDictionary->dic_CodePtr.Byte;\r
        if( RoomLeft < DIC_SAFETY_MARGIN )\r
        {\r
                pfReportError("ffCheckDicRoom", PF_ERR_CODE_ROOM);\r
        if( RoomLeft < DIC_SAFETY_MARGIN )\r
        {\r
                pfReportError("ffCheckDicRoom", PF_ERR_CODE_ROOM);\r
@@ -662,7 +662,7 @@ void ffDefer( void )
 /* Unsmudge the word to make it visible. */\r
 void ffUnSmudge( void )\r
 {\r
 /* Unsmudge the word to make it visible. */\r
 void ffUnSmudge( void )\r
 {\r
-       *gVarContext &= ~FLAG_SMUDGE;\r
+       *(char*)gVarContext &= ~FLAG_SMUDGE;\r
 }\r
 \r
 /* Implement ; */\r
 }\r
 \r
 /* Implement ; */\r