mirror of
https://github.com/cc65/cc65.git
synced 2025-01-12 17:30:50 +00:00
Fragment cleanup, more string pool use
git-svn-id: svn://svn.cc65.org/cc65/trunk@2201 b7a2c559-68d2-44c3-8de9-860c34a00d81
This commit is contained in:
parent
c5255302db
commit
0aa75f12d6
@ -6,10 +6,10 @@
|
|||||||
/* */
|
/* */
|
||||||
/* */
|
/* */
|
||||||
/* */
|
/* */
|
||||||
/* (C) 1998-2000 Ullrich von Bassewitz */
|
/* (C) 1998-2003 Ullrich von Bassewitz */
|
||||||
/* Wacholderweg 14 */
|
/* Römerstrasse 52 */
|
||||||
/* D-70597 Stuttgart */
|
/* D-70794 Filderstadt */
|
||||||
/* EMail: uz@musoftware.de */
|
/* EMail: uz@cc65.org */
|
||||||
/* */
|
/* */
|
||||||
/* */
|
/* */
|
||||||
/* This software is provided 'as-is', without any expressed or implied */
|
/* This software is provided 'as-is', without any expressed or implied */
|
||||||
@ -41,6 +41,7 @@
|
|||||||
/* ld65 */
|
/* ld65 */
|
||||||
#include "error.h"
|
#include "error.h"
|
||||||
#include "fileio.h"
|
#include "fileio.h"
|
||||||
|
#include "spool.h"
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
@ -253,19 +254,43 @@ unsigned long ReadVar (FILE* F)
|
|||||||
|
|
||||||
|
|
||||||
|
|
||||||
char* ReadStr (FILE* F)
|
unsigned ReadStr (FILE* F)
|
||||||
/* Read a string from the file (the memory will be malloc'ed) */
|
/* Read a string from the file, place it into the global string pool, and
|
||||||
|
* return its string id.
|
||||||
|
*/
|
||||||
{
|
{
|
||||||
|
unsigned Id;
|
||||||
|
char* B;
|
||||||
|
char Buf[256];
|
||||||
|
|
||||||
/* Read the length */
|
/* Read the length */
|
||||||
unsigned Len = ReadVar (F);
|
unsigned Len = ReadVar (F);
|
||||||
|
|
||||||
/* Allocate memory and read the string itself */
|
/* If the string is short enough, use our buffer on the stack, otherwise
|
||||||
char* S = xmalloc (Len + 1);
|
* allocate space on the heap.
|
||||||
ReadData (F, S, Len);
|
*/
|
||||||
|
if (Len < sizeof (Buf)) {
|
||||||
|
B = Buf;
|
||||||
|
} else {
|
||||||
|
B = xmalloc (Len + 1);
|
||||||
|
}
|
||||||
|
|
||||||
/* Terminate the string and return it */
|
/* Read the string */
|
||||||
S [Len] = '\0';
|
ReadData (F, B, Len);
|
||||||
return S;
|
|
||||||
|
/* Terminate the string */
|
||||||
|
B[Len] = '\0';
|
||||||
|
|
||||||
|
/* Insert it into the string pool and remember the id */
|
||||||
|
Id = GetStringId (B);
|
||||||
|
|
||||||
|
/* If we had allocated memory before, free it now */
|
||||||
|
if (B != Buf) {
|
||||||
|
xfree (B);
|
||||||
|
}
|
||||||
|
|
||||||
|
/* Return the string id */
|
||||||
|
return Id;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
@ -284,7 +309,7 @@ FilePos* ReadFilePos (FILE* F, FilePos* Pos)
|
|||||||
|
|
||||||
void* ReadData (FILE* F, void* Data, unsigned Size)
|
void* ReadData (FILE* F, void* Data, unsigned Size)
|
||||||
/* Read data from the file */
|
/* Read data from the file */
|
||||||
{
|
{
|
||||||
/* Explicitly allow reading zero bytes */
|
/* Explicitly allow reading zero bytes */
|
||||||
if (Size > 0) {
|
if (Size > 0) {
|
||||||
if (fread (Data, 1, Size, F) != Size) {
|
if (fread (Data, 1, Size, F) != Size) {
|
||||||
|
@ -6,10 +6,10 @@
|
|||||||
/* */
|
/* */
|
||||||
/* */
|
/* */
|
||||||
/* */
|
/* */
|
||||||
/* (C) 1998-2000 Ullrich von Bassewitz */
|
/* (C) 1998-2003 Ullrich von Bassewitz */
|
||||||
/* Wacholderweg 14 */
|
/* Römerstrasse 52 */
|
||||||
/* D-70597 Stuttgart */
|
/* D-70794 Filderstadt */
|
||||||
/* EMail: uz@musoftware.de */
|
/* EMail: uz@cc65.org */
|
||||||
/* */
|
/* */
|
||||||
/* */
|
/* */
|
||||||
/* This software is provided 'as-is', without any expressed or implied */
|
/* This software is provided 'as-is', without any expressed or implied */
|
||||||
@ -96,8 +96,10 @@ long Read32Signed (FILE* F);
|
|||||||
unsigned long ReadVar (FILE* F);
|
unsigned long ReadVar (FILE* F);
|
||||||
/* Read a variable size value from the file */
|
/* Read a variable size value from the file */
|
||||||
|
|
||||||
char* ReadStr (FILE* F);
|
unsigned ReadStr (FILE* F);
|
||||||
/* Read a string from the file into a malloced area */
|
/* Read a string from the file, place it into the global string pool, and
|
||||||
|
* return its string id.
|
||||||
|
*/
|
||||||
|
|
||||||
FilePos* ReadFilePos (FILE* F, FilePos* Pos);
|
FilePos* ReadFilePos (FILE* F, FilePos* Pos);
|
||||||
/* Read a file position from the file */
|
/* Read a file position from the file */
|
||||||
|
@ -39,11 +39,8 @@
|
|||||||
|
|
||||||
/* ld65 */
|
/* ld65 */
|
||||||
#include "error.h"
|
#include "error.h"
|
||||||
#include "expr.h"
|
|
||||||
#include "fragment.h"
|
#include "fragment.h"
|
||||||
#include "fileio.h"
|
|
||||||
#include "segments.h"
|
#include "segments.h"
|
||||||
#include "spool.h"
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
@ -53,56 +50,6 @@
|
|||||||
|
|
||||||
|
|
||||||
|
|
||||||
static FragCheck* NewFragCheck (unsigned Action)
|
|
||||||
/* Allocate a new FragCheck struct and return it */
|
|
||||||
{
|
|
||||||
/* Allocate memory */
|
|
||||||
FragCheck* FC = xmalloc (sizeof (FragCheck));
|
|
||||||
|
|
||||||
/* Initialize the fields */
|
|
||||||
FC->Next = 0;
|
|
||||||
FC->Expr = 0;
|
|
||||||
FC->Action = Action;
|
|
||||||
FC->Message = INVALID_STRING_ID;
|
|
||||||
|
|
||||||
/* Return the new struct */
|
|
||||||
return FC;
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
FragCheck* ReadFragCheck (FILE* F, Fragment* Frag)
|
|
||||||
/* Read a fragment check expression from the given file */
|
|
||||||
{
|
|
||||||
/* Get the object file pointer from the fragment */
|
|
||||||
ObjData* O = Frag->Obj;
|
|
||||||
|
|
||||||
/* Read the action and create a new struct */
|
|
||||||
FragCheck* FC = NewFragCheck (ReadVar (F));
|
|
||||||
|
|
||||||
/* Determine the remaining data from the action */
|
|
||||||
switch (FC->Action) {
|
|
||||||
|
|
||||||
case FRAG_ACT_WARN:
|
|
||||||
case FRAG_ACT_ERROR:
|
|
||||||
FC->Expr = ReadExpr (F, O);
|
|
||||||
FC->Message = MakeGlobalStringId (O, ReadVar (F));
|
|
||||||
break;
|
|
||||||
|
|
||||||
default:
|
|
||||||
Internal ("In module `%s', file `%s', line %lu: Invalid fragment "
|
|
||||||
"check action: %u",
|
|
||||||
GetObjFileName (O),
|
|
||||||
GetSourceFileName (O, Frag->Pos.Name),
|
|
||||||
Frag->Pos.Line, FC->Action);
|
|
||||||
}
|
|
||||||
|
|
||||||
/* Return the new fragment check */
|
|
||||||
return FC;
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
Fragment* NewFragment (unsigned char Type, unsigned Size, Section* S)
|
Fragment* NewFragment (unsigned char Type, unsigned Size, Section* S)
|
||||||
/* Create a new fragment and insert it into the section S */
|
/* Create a new fragment and insert it into the section S */
|
||||||
{
|
{
|
||||||
@ -126,7 +73,6 @@ Fragment* NewFragment (unsigned char Type, unsigned Size, Section* S)
|
|||||||
F->Expr = 0;
|
F->Expr = 0;
|
||||||
InitFilePos (&F->Pos);
|
InitFilePos (&F->Pos);
|
||||||
F->LI = 0;
|
F->LI = 0;
|
||||||
F->Check = 0;
|
|
||||||
F->Type = Type;
|
F->Type = Type;
|
||||||
|
|
||||||
/* Insert the code fragment into the section */
|
/* Insert the code fragment into the section */
|
||||||
|
@ -61,15 +61,6 @@ struct Section;
|
|||||||
|
|
||||||
|
|
||||||
|
|
||||||
/* Fragment check expression */
|
|
||||||
typedef struct FragCheck FragCheck;
|
|
||||||
struct FragCheck {
|
|
||||||
struct FragCheck* Next; /* Next check expression */
|
|
||||||
struct ExprNode* Expr; /* The expression itself */
|
|
||||||
unsigned Action; /* Action to take if the check fails */
|
|
||||||
unsigned Message; /* Message number */
|
|
||||||
};
|
|
||||||
|
|
||||||
/* Fragment structure */
|
/* Fragment structure */
|
||||||
typedef struct Fragment Fragment;
|
typedef struct Fragment Fragment;
|
||||||
struct Fragment {
|
struct Fragment {
|
||||||
@ -79,7 +70,6 @@ struct Fragment {
|
|||||||
struct ExprNode* Expr; /* Expression if FRAG_EXPR */
|
struct ExprNode* Expr; /* Expression if FRAG_EXPR */
|
||||||
FilePos Pos; /* File position in source */
|
FilePos Pos; /* File position in source */
|
||||||
struct LineInfo* LI; /* Additional line info */
|
struct LineInfo* LI; /* Additional line info */
|
||||||
FragCheck* Check; /* Single linked list of checks */
|
|
||||||
unsigned char Type; /* Type of fragment */
|
unsigned char Type; /* Type of fragment */
|
||||||
unsigned char LitBuf [1]; /* Dynamically alloc'ed literal buffer */
|
unsigned char LitBuf [1]; /* Dynamically alloc'ed literal buffer */
|
||||||
};
|
};
|
||||||
@ -92,9 +82,6 @@ struct Fragment {
|
|||||||
|
|
||||||
|
|
||||||
|
|
||||||
FragCheck* ReadFragCheck (FILE* F, Fragment* Frag);
|
|
||||||
/* Read a fragment check expression from the given file */
|
|
||||||
|
|
||||||
Fragment* NewFragment (unsigned char Type, unsigned Size, struct Section* S);
|
Fragment* NewFragment (unsigned char Type, unsigned Size, struct Section* S);
|
||||||
/* Create a new fragment and insert it into the section S */
|
/* Create a new fragment and insert it into the section S */
|
||||||
|
|
||||||
|
@ -118,13 +118,11 @@ static ObjData* ReadIndexEntry (void)
|
|||||||
ObjData* O = NewObjData ();
|
ObjData* O = NewObjData ();
|
||||||
|
|
||||||
/* Module name */
|
/* Module name */
|
||||||
char* Name = ReadStr (Lib);
|
O->Name = ReadStr (Lib);
|
||||||
O->Name = GetStringId (Name);
|
|
||||||
xfree (Name);
|
|
||||||
|
|
||||||
/* Module flags/MTime/Start/Size */
|
/* Module flags/MTime/Start/Size */
|
||||||
O->Flags = Read16 (Lib);
|
O->Flags = Read16 (Lib);
|
||||||
O->MTime = Read32 (Lib);
|
O->MTime = Read32 (Lib);
|
||||||
O->Start = Read32 (Lib);
|
O->Start = Read32 (Lib);
|
||||||
Read32 (Lib); /* Skip Size */
|
Read32 (Lib); /* Skip Size */
|
||||||
|
|
||||||
|
@ -7,8 +7,8 @@
|
|||||||
/* */
|
/* */
|
||||||
/* */
|
/* */
|
||||||
/* (C) 2001 Ullrich von Bassewitz */
|
/* (C) 2001 Ullrich von Bassewitz */
|
||||||
/* Wacholderweg 14 */
|
/* Römerstrasse 52 */
|
||||||
/* D-70597 Stuttgart */
|
/* D-70794 Filderstadt */
|
||||||
/* EMail: uz@cc65.org */
|
/* EMail: uz@cc65.org */
|
||||||
/* */
|
/* */
|
||||||
/* */
|
/* */
|
||||||
@ -151,7 +151,7 @@ static void AddCodeRange (LineInfo* LI, unsigned long Offs, unsigned long Size)
|
|||||||
|
|
||||||
|
|
||||||
|
|
||||||
void RelocLineInfo (struct Segment* S)
|
void RelocLineInfo (Segment* S)
|
||||||
/* Relocate the line info for a segment. */
|
/* Relocate the line info for a segment. */
|
||||||
{
|
{
|
||||||
unsigned long Offs = 0;
|
unsigned long Offs = 0;
|
||||||
|
@ -7,8 +7,8 @@
|
|||||||
/* */
|
/* */
|
||||||
/* */
|
/* */
|
||||||
/* (C) 2001 Ullrich von Bassewitz */
|
/* (C) 2001 Ullrich von Bassewitz */
|
||||||
/* Wacholderweg 14 */
|
/* Römerstrasse 52 */
|
||||||
/* D-70597 Stuttgart */
|
/* D-70794 Filderstadt */
|
||||||
/* EMail: uz@cc65.org */
|
/* EMail: uz@cc65.org */
|
||||||
/* */
|
/* */
|
||||||
/* */
|
/* */
|
||||||
|
@ -110,7 +110,7 @@ void FreeObjData (ObjData* O)
|
|||||||
FreeImport (O->Imports[--O->ImportCount]);
|
FreeImport (O->Imports[--O->ImportCount]);
|
||||||
}
|
}
|
||||||
xfree (O->Imports);
|
xfree (O->Imports);
|
||||||
FreeObjStrings (O);
|
xfree (O->Strings);
|
||||||
xfree (O);
|
xfree (O);
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -121,9 +121,6 @@ void FreeObjStrings (ObjData* O)
|
|||||||
* when all strings are converted to global strings.
|
* when all strings are converted to global strings.
|
||||||
*/
|
*/
|
||||||
{
|
{
|
||||||
while (O->StringCount) {
|
|
||||||
xfree (O->Strings[--O->StringCount]);
|
|
||||||
}
|
|
||||||
xfree (O->Strings);
|
xfree (O->Strings);
|
||||||
O->Strings = 0;
|
O->Strings = 0;
|
||||||
}
|
}
|
||||||
@ -138,20 +135,6 @@ void InsertObjData (ObjData* O)
|
|||||||
|
|
||||||
|
|
||||||
|
|
||||||
const char* GetObjString (const ObjData* O, unsigned Index)
|
|
||||||
/* Get a string from the object file string table. Abort if the string index
|
|
||||||
* is invalid.
|
|
||||||
*/
|
|
||||||
{
|
|
||||||
if (Index >= O->StringCount) {
|
|
||||||
Error ("Invalid string index (%u) in module `%s'",
|
|
||||||
Index, GetObjFileName (O));
|
|
||||||
}
|
|
||||||
return O->Strings[Index];
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
unsigned MakeGlobalStringId (const ObjData* O, unsigned Index)
|
unsigned MakeGlobalStringId (const ObjData* O, unsigned Index)
|
||||||
/* Convert a local string id into a global one and return it. */
|
/* Convert a local string id into a global one and return it. */
|
||||||
{
|
{
|
||||||
@ -159,7 +142,7 @@ unsigned MakeGlobalStringId (const ObjData* O, unsigned Index)
|
|||||||
Error ("Invalid string index (%u) in module `%s'",
|
Error ("Invalid string index (%u) in module `%s'",
|
||||||
Index, GetObjFileName (O));
|
Index, GetObjFileName (O));
|
||||||
}
|
}
|
||||||
return GetStringId (O->Strings[Index]);
|
return O->Strings[Index];
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
@ -76,7 +76,7 @@ struct ObjData {
|
|||||||
unsigned LineInfoCount; /* Count of additional line infos */
|
unsigned LineInfoCount; /* Count of additional line infos */
|
||||||
struct LineInfo** LineInfos; /* List of additional line infos */
|
struct LineInfo** LineInfos; /* List of additional line infos */
|
||||||
unsigned StringCount; /* Count of strings */
|
unsigned StringCount; /* Count of strings */
|
||||||
char** Strings; /* List of strings used */
|
unsigned* Strings; /* List of global string indices */
|
||||||
};
|
};
|
||||||
|
|
||||||
|
|
||||||
@ -109,11 +109,6 @@ void FreeObjStrings (ObjData* O);
|
|||||||
void InsertObjData (ObjData* O);
|
void InsertObjData (ObjData* O);
|
||||||
/* Insert the ObjData object into the collection of used ObjData objects. */
|
/* Insert the ObjData object into the collection of used ObjData objects. */
|
||||||
|
|
||||||
const char* GetObjString (const ObjData* O, unsigned Index);
|
|
||||||
/* Get a string from the object file string table. Abort if the string index
|
|
||||||
* is invalid.
|
|
||||||
*/
|
|
||||||
|
|
||||||
unsigned MakeGlobalStringId (const ObjData* O, unsigned Index);
|
unsigned MakeGlobalStringId (const ObjData* O, unsigned Index);
|
||||||
/* Convert a local string id into a global one and return it. */
|
/* Convert a local string id into a global one and return it. */
|
||||||
|
|
||||||
|
@ -111,7 +111,7 @@ void ObjReadFiles (FILE* F, ObjData* O)
|
|||||||
unsigned I;
|
unsigned I;
|
||||||
|
|
||||||
O->FileCount = ReadVar (F);
|
O->FileCount = ReadVar (F);
|
||||||
O->Files = xmalloc (O->FileCount * sizeof (FileInfo*));
|
O->Files = xmalloc (O->FileCount * sizeof (O->Files[0]));
|
||||||
for (I = 0; I < O->FileCount; ++I) {
|
for (I = 0; I < O->FileCount; ++I) {
|
||||||
O->Files[I] = ReadFileInfo (F, O);
|
O->Files[I] = ReadFileInfo (F, O);
|
||||||
}
|
}
|
||||||
@ -125,7 +125,7 @@ void ObjReadImports (FILE* F, ObjData* O)
|
|||||||
unsigned I;
|
unsigned I;
|
||||||
|
|
||||||
O->ImportCount = ReadVar (F);
|
O->ImportCount = ReadVar (F);
|
||||||
O->Imports = xmalloc (O->ImportCount * sizeof (Import*));
|
O->Imports = xmalloc (O->ImportCount * sizeof (O->Imports[0]));
|
||||||
for (I = 0; I < O->ImportCount; ++I) {
|
for (I = 0; I < O->ImportCount; ++I) {
|
||||||
O->Imports [I] = ReadImport (F, O);
|
O->Imports [I] = ReadImport (F, O);
|
||||||
InsertImport (O->Imports [I]);
|
InsertImport (O->Imports [I]);
|
||||||
@ -140,7 +140,7 @@ void ObjReadExports (FILE* F, ObjData* O)
|
|||||||
unsigned I;
|
unsigned I;
|
||||||
|
|
||||||
O->ExportCount = ReadVar (F);
|
O->ExportCount = ReadVar (F);
|
||||||
O->Exports = xmalloc (O->ExportCount * sizeof (Export*));
|
O->Exports = xmalloc (O->ExportCount * sizeof (O->Exports[0]));
|
||||||
for (I = 0; I < O->ExportCount; ++I) {
|
for (I = 0; I < O->ExportCount; ++I) {
|
||||||
O->Exports [I] = ReadExport (F, O);
|
O->Exports [I] = ReadExport (F, O);
|
||||||
InsertExport (O->Exports [I]);
|
InsertExport (O->Exports [I]);
|
||||||
@ -155,7 +155,7 @@ void ObjReadDbgSyms (FILE* F, ObjData* O)
|
|||||||
unsigned I;
|
unsigned I;
|
||||||
|
|
||||||
O->DbgSymCount = ReadVar (F);
|
O->DbgSymCount = ReadVar (F);
|
||||||
O->DbgSyms = xmalloc (O->DbgSymCount * sizeof (DbgSym*));
|
O->DbgSyms = xmalloc (O->DbgSymCount * sizeof (O->DbgSyms[0]));
|
||||||
for (I = 0; I < O->DbgSymCount; ++I) {
|
for (I = 0; I < O->DbgSymCount; ++I) {
|
||||||
O->DbgSyms [I] = ReadDbgSym (F, O);
|
O->DbgSyms [I] = ReadDbgSym (F, O);
|
||||||
}
|
}
|
||||||
@ -169,7 +169,7 @@ void ObjReadLineInfos (FILE* F, ObjData* O)
|
|||||||
unsigned I;
|
unsigned I;
|
||||||
|
|
||||||
O->LineInfoCount = ReadVar (F);
|
O->LineInfoCount = ReadVar (F);
|
||||||
O->LineInfos = xmalloc (O->LineInfoCount * sizeof (LineInfo*));
|
O->LineInfos = xmalloc (O->LineInfoCount * sizeof (O->LineInfos[0]));
|
||||||
for (I = 0; I < O->LineInfoCount; ++I) {
|
for (I = 0; I < O->LineInfoCount; ++I) {
|
||||||
O->LineInfos[I] = ReadLineInfo (F, O);
|
O->LineInfos[I] = ReadLineInfo (F, O);
|
||||||
}
|
}
|
||||||
@ -181,8 +181,9 @@ void ObjReadStrPool (FILE* F, ObjData* O)
|
|||||||
/* Read the string pool from a file at the current position */
|
/* Read the string pool from a file at the current position */
|
||||||
{
|
{
|
||||||
unsigned I;
|
unsigned I;
|
||||||
|
|
||||||
O->StringCount = ReadVar (F);
|
O->StringCount = ReadVar (F);
|
||||||
O->Strings = xmalloc (O->StringCount * sizeof (char*));
|
O->Strings = xmalloc (O->StringCount * sizeof (O->Strings[0]));
|
||||||
for (I = 0; I < O->StringCount; ++I) {
|
for (I = 0; I < O->StringCount; ++I) {
|
||||||
O->Strings[I] = ReadStr (F);
|
O->Strings[I] = ReadStr (F);
|
||||||
}
|
}
|
||||||
@ -196,7 +197,7 @@ void ObjReadSections (FILE* F, ObjData* O)
|
|||||||
unsigned I;
|
unsigned I;
|
||||||
|
|
||||||
O->SectionCount = ReadVar (F);
|
O->SectionCount = ReadVar (F);
|
||||||
O->Sections = xmalloc (O->SectionCount * sizeof (Section*));
|
O->Sections = xmalloc (O->SectionCount * sizeof (O->Sections[0]));
|
||||||
for (I = 0; I < O->SectionCount; ++I) {
|
for (I = 0; I < O->SectionCount; ++I) {
|
||||||
O->Sections [I] = ReadSection (F, O);
|
O->Sections [I] = ReadSection (F, O);
|
||||||
}
|
}
|
||||||
|
@ -238,7 +238,6 @@ Section* ReadSection (FILE* F, ObjData* O)
|
|||||||
unsigned char Type = Read8 (F);
|
unsigned char Type = Read8 (F);
|
||||||
|
|
||||||
/* Extract the check mask from the type */
|
/* Extract the check mask from the type */
|
||||||
unsigned char Check = Type & FRAG_CHECKMASK;
|
|
||||||
unsigned char Bytes = Type & FRAG_BYTEMASK;
|
unsigned char Bytes = Type & FRAG_BYTEMASK;
|
||||||
Type &= FRAG_TYPEMASK;
|
Type &= FRAG_TYPEMASK;
|
||||||
|
|
||||||
@ -268,18 +267,6 @@ Section* ReadSection (FILE* F, ObjData* O)
|
|||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
/* A list of check expressions may follow */
|
|
||||||
if (Check) {
|
|
||||||
|
|
||||||
/* Read the number of expressions that follow */
|
|
||||||
unsigned Count = ReadVar (F);
|
|
||||||
|
|
||||||
/* Read the expressions */
|
|
||||||
while (Count--) {
|
|
||||||
/* ### */
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
/* Read the file position of the fragment */
|
/* Read the file position of the fragment */
|
||||||
ReadFilePos (F, &Frag->Pos);
|
ReadFilePos (F, &Frag->Pos);
|
||||||
|
|
||||||
|
Loading…
x
Reference in New Issue
Block a user