mirror of
https://github.com/nzp-team/fteqw.git
synced 2024-11-25 13:21:36 +00:00
Fix up fteqcc's typedefs.
git-svn-id: https://svn.code.sf.net/p/fteqw/code/trunk@6303 fc73d0e0-1445-4013-8a0c-d673dee63da5
This commit is contained in:
parent
a0f2ffda90
commit
f8af9b18eb
13 changed files with 198 additions and 160 deletions
|
@ -1534,7 +1534,9 @@ SET(FTE_MENU_SYS true CACHE BOOL "Compile System Menu.")
|
||||||
IF(FTE_MENU_SYS)
|
IF(FTE_MENU_SYS)
|
||||||
ADD_CUSTOM_TARGET(menusys ALL
|
ADD_CUSTOM_TARGET(menusys ALL
|
||||||
VERBATIM
|
VERBATIM
|
||||||
COMMAND fteqcc -srcfile "${CMAKE_CURRENT_SOURCE_DIR}/quakec/menusys/menu.src" -o "${CMAKE_CURRENT_BINARY_DIR}/menu.dat"
|
DEPENDS fteqcc
|
||||||
|
WORKING_DIRECTORY "${CMAKE_CURRENT_SOURCE_DIR}/quakec/menusys/"
|
||||||
|
COMMAND fteqcc -srcfile "menu.src" -o "${CMAKE_CURRENT_BINARY_DIR}/menu.dat"
|
||||||
BYPRODUCTS "${CMAKE_CURRENT_BINARY_DIR}/menu.dat" "${CMAKE_CURRENT_BINARY_DIR}/menu.lno"
|
BYPRODUCTS "${CMAKE_CURRENT_BINARY_DIR}/menu.dat" "${CMAKE_CURRENT_BINARY_DIR}/menu.lno"
|
||||||
SOURCES
|
SOURCES
|
||||||
quakec/menusys/menu.src
|
quakec/menusys/menu.src
|
||||||
|
@ -1572,3 +1574,34 @@ IF(FTE_MENU_SYS)
|
||||||
quakec/menusys/menu/quit.qc
|
quakec/menusys/menu/quit.qc
|
||||||
)
|
)
|
||||||
ENDIF()
|
ENDIF()
|
||||||
|
|
||||||
|
SET(FTE_CSADDON true CACHE BOOL "CS Addon.")
|
||||||
|
IF(FTE_CSADDON)
|
||||||
|
ADD_CUSTOM_TARGET(csaddon ALL
|
||||||
|
VERBATIM
|
||||||
|
DEPENDS fteqcc
|
||||||
|
WORKING_DIRECTORY "${CMAKE_CURRENT_SOURCE_DIR}/quakec/csaddon/src/"
|
||||||
|
COMMAND fteqcc -srcfile "csaddon.src" -o "${CMAKE_CURRENT_BINARY_DIR}/csaddon.dat"
|
||||||
|
BYPRODUCTS "${CMAKE_CURRENT_BINARY_DIR}/csaddon.dat" "${CMAKE_CURRENT_BINARY_DIR}/csaddon.lno"
|
||||||
|
SOURCES
|
||||||
|
quakec/csaddon/src/csaddon.src
|
||||||
|
|
||||||
|
quakec/csaddon/src/csplat.qc
|
||||||
|
quakec/csaddon/src/csfixups.qc
|
||||||
|
|
||||||
|
quakec/csaddon/src/editor_lights.qc
|
||||||
|
quakec/csaddon/src/editor_terrain.qc
|
||||||
|
quakec/csaddon/src/brush_selection.qc
|
||||||
|
quakec/csaddon/src/brush_history.qc
|
||||||
|
quakec/csaddon/src/brush_manip.qc
|
||||||
|
quakec/csaddon/src/brush_draw.qc
|
||||||
|
quakec/csaddon/src/brush_vertedit.qc
|
||||||
|
quakec/csaddon/src/editor_brushes.qc
|
||||||
|
quakec/csaddon/src/editor_ents.qc
|
||||||
|
quakec/csaddon/src/textfield.qc
|
||||||
|
quakec/csaddon/src/editor_particles.qc
|
||||||
|
quakec/csaddon/src/menu.qc
|
||||||
|
quakec/csaddon/src/cam.qc
|
||||||
|
quakec/csaddon/src/csaddon.qc
|
||||||
|
)
|
||||||
|
ENDIF()
|
||||||
|
|
|
@ -94,7 +94,8 @@ ev_struct, //big complex type
|
||||||
ev_union, //not really sure why this is separate from struct
|
ev_union, //not really sure why this is separate from struct
|
||||||
ev_accessor,//some weird type to provide class-like functions over a basic type.
|
ev_accessor,//some weird type to provide class-like functions over a basic type.
|
||||||
ev_enum, //just a numeric type
|
ev_enum, //just a numeric type
|
||||||
ev_boolean //exists to optimise if(-0) workarounds.
|
ev_typedef, //so typedefs can refer to their original type (primarily for structs).
|
||||||
|
ev_boolean, //exists to optimise if(-0) workarounds. engine just sees int/float.
|
||||||
} etype_t;
|
} etype_t;
|
||||||
enum {
|
enum {
|
||||||
DEBUG_TRACE_OFF, //debugging should be off.
|
DEBUG_TRACE_OFF, //debugging should be off.
|
||||||
|
|
|
@ -595,6 +595,13 @@ extern int pr_token_line_last;
|
||||||
extern QCC_type_t *pr_immediate_type;
|
extern QCC_type_t *pr_immediate_type;
|
||||||
extern QCC_eval_t pr_immediate;
|
extern QCC_eval_t pr_immediate;
|
||||||
|
|
||||||
|
extern int verbose;
|
||||||
|
#define VERBOSE_WARNINGSONLY -1
|
||||||
|
#define VERBOSE_PROGRESS 0
|
||||||
|
#define VERBOSE_STANDARD 1
|
||||||
|
#define VERBOSE_DEBUG 2
|
||||||
|
#define VERBOSE_DEBUGSTATEMENTS 3 //figuring out the files can be expensive.
|
||||||
|
|
||||||
extern pbool keyword_asm;
|
extern pbool keyword_asm;
|
||||||
extern pbool keyword_break;
|
extern pbool keyword_break;
|
||||||
extern pbool keyword_case;
|
extern pbool keyword_case;
|
||||||
|
@ -1089,7 +1096,6 @@ void QCC_PR_EmitArraySetFunction(QCC_def_t *defscope, QCC_def_t *thearray, char
|
||||||
void QCC_PR_EmitClassFromFunction(QCC_def_t *defscope, QCC_type_t *basetype);
|
void QCC_PR_EmitClassFromFunction(QCC_def_t *defscope, QCC_type_t *basetype);
|
||||||
|
|
||||||
void QCC_PR_ParseDefs (char *classname, pbool fatal);
|
void QCC_PR_ParseDefs (char *classname, pbool fatal);
|
||||||
void QCC_PR_ParseTypedef(void);
|
|
||||||
QCC_def_t *QCC_PR_DummyDef(QCC_type_t *type, const char *name, QCC_function_t *scope, int arraysize, QCC_def_t *rootsymbol, unsigned int ofs, int referable, unsigned int flags);
|
QCC_def_t *QCC_PR_DummyDef(QCC_type_t *type, const char *name, QCC_function_t *scope, int arraysize, QCC_def_t *rootsymbol, unsigned int ofs, int referable, unsigned int flags);
|
||||||
void QCC_PR_ParseInitializerDef(QCC_def_t *def, unsigned int flags);
|
void QCC_PR_ParseInitializerDef(QCC_def_t *def, unsigned int flags);
|
||||||
void QCC_PR_FinaliseFunctions(void);
|
void QCC_PR_FinaliseFunctions(void);
|
||||||
|
|
|
@ -37,6 +37,7 @@ const unsigned int type_size[] = {1, //void
|
||||||
0, //ev_union. variable sized.
|
0, //ev_union. variable sized.
|
||||||
0, //ev_accessor...
|
0, //ev_accessor...
|
||||||
0, //ev_enum...
|
0, //ev_enum...
|
||||||
|
0, //ev_typedef
|
||||||
1, //ev_bool...
|
1, //ev_bool...
|
||||||
};
|
};
|
||||||
|
|
||||||
|
|
|
@ -9021,7 +9021,7 @@ QCC_ref_t *QCC_PR_ParseRefArrayPointer (QCC_ref_t *retbuf, QCC_ref_t *r, pbool a
|
||||||
QCC_type_t *t;
|
QCC_type_t *t;
|
||||||
QCC_sref_t idx;
|
QCC_sref_t idx;
|
||||||
QCC_sref_t tmp;
|
QCC_sref_t tmp;
|
||||||
pbool allowarray;
|
pbool allowarray, arraytype;
|
||||||
unsigned int arraysize;
|
unsigned int arraysize;
|
||||||
unsigned int rewindpoint = numstatements;
|
unsigned int rewindpoint = numstatements;
|
||||||
pbool dereference = false;
|
pbool dereference = false;
|
||||||
|
@ -9036,11 +9036,14 @@ QCC_ref_t *QCC_PR_ParseRefArrayPointer (QCC_ref_t *retbuf, QCC_ref_t *r, pbool a
|
||||||
while(1)
|
while(1)
|
||||||
{
|
{
|
||||||
allowarray = false;
|
allowarray = false;
|
||||||
|
arraytype = (t->type == ev_union && t->num_parms == 1 && !t->params[0].paramname); //FIXME
|
||||||
|
if (arraytype)
|
||||||
|
arraytype = true;
|
||||||
if (idx.cast)
|
if (idx.cast)
|
||||||
allowarray = arraysize>0 ||
|
allowarray = arraysize>0 ||
|
||||||
(t->type == ev_vector) ||
|
(t->type == ev_vector) ||
|
||||||
(t->type == ev_field && t->aux_type->type == ev_vector) ||
|
(t->type == ev_field && t->aux_type->type == ev_vector) ||
|
||||||
(t->type == ev_union && t->num_parms == 1 && !t->params[0].paramname && !arraysize);
|
(arraytype && !arraysize);
|
||||||
else if (!idx.cast)
|
else if (!idx.cast)
|
||||||
{
|
{
|
||||||
allowarray = arraysize>0 ||
|
allowarray = arraysize>0 ||
|
||||||
|
@ -9048,6 +9051,7 @@ QCC_ref_t *QCC_PR_ParseRefArrayPointer (QCC_ref_t *retbuf, QCC_ref_t *r, pbool a
|
||||||
(t->type == ev_string) || //strings are effectively pointers
|
(t->type == ev_string) || //strings are effectively pointers
|
||||||
(t->type == ev_vector) || //vectors are mini arrays
|
(t->type == ev_vector) || //vectors are mini arrays
|
||||||
(t->type == ev_field && t->aux_type->type == ev_vector) || //as are field vectors
|
(t->type == ev_field && t->aux_type->type == ev_vector) || //as are field vectors
|
||||||
|
(arraytype && !arraysize) ||
|
||||||
(!arraysize&&t->accessors); //custom accessors
|
(!arraysize&&t->accessors); //custom accessors
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -9072,7 +9076,7 @@ QCC_ref_t *QCC_PR_ParseRefArrayPointer (QCC_ref_t *retbuf, QCC_ref_t *r, pbool a
|
||||||
/*if its a pointer that got dereferenced, follow the type*/
|
/*if its a pointer that got dereferenced, follow the type*/
|
||||||
if (!idx.cast && t->type == ev_pointer && !arraysize)
|
if (!idx.cast && t->type == ev_pointer && !arraysize)
|
||||||
t = t->aux_type;
|
t = t->aux_type;
|
||||||
else if (idx.cast && (t->type == ev_union && t->num_parms == 1 && !t->params[0].paramname && !arraysize))
|
else if (idx.cast && (arraytype && !arraysize))
|
||||||
{
|
{
|
||||||
arraysize = t->params[0].arraysize;
|
arraysize = t->params[0].arraysize;
|
||||||
t = t->params[0].type;
|
t = t->params[0].type;
|
||||||
|
@ -9221,6 +9225,17 @@ fieldarrayindex:
|
||||||
QCC_FreeTemp(idx);
|
QCC_FreeTemp(idx);
|
||||||
return QCC_PR_BuildRef(retbuf, REF_GLOBAL, QCC_MakeIntConst(arraysize), nullsref, type_integer, true);
|
return QCC_PR_BuildRef(retbuf, REF_GLOBAL, QCC_MakeIntConst(arraysize), nullsref, type_integer, true);
|
||||||
}
|
}
|
||||||
|
else if (arraytype && (QCC_PR_CheckToken(".") || QCC_PR_CheckToken("->")))
|
||||||
|
{
|
||||||
|
//the only field of an array type is the 'length' property.
|
||||||
|
//if we calculated offsets etc, discard those statements.
|
||||||
|
numstatements = rewindpoint;
|
||||||
|
QCC_PR_Expect("length");
|
||||||
|
QCC_FreeTemp(r->base);
|
||||||
|
QCC_FreeTemp(r->index);
|
||||||
|
QCC_FreeTemp(idx);
|
||||||
|
return QCC_PR_BuildRef(retbuf, REF_GLOBAL, QCC_MakeIntConst(t->params[0].arraysize), nullsref, type_integer, true);
|
||||||
|
}
|
||||||
else if (t->type == ev_vector && !arraysize && !t->accessors && QCC_PR_CheckToken("."))
|
else if (t->type == ev_vector && !arraysize && !t->accessors && QCC_PR_CheckToken("."))
|
||||||
{
|
{
|
||||||
char *swizzle = QCC_PR_ParseName();
|
char *swizzle = QCC_PR_ParseName();
|
||||||
|
@ -13619,16 +13634,11 @@ void QCC_PR_ParseStatement (void)
|
||||||
QCC_PR_ParseDefs (NULL, true);
|
QCC_PR_ParseDefs (NULL, true);
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
if (QCC_PR_CheckKeyword(keyword_typedef, "typedef"))
|
|
||||||
{
|
|
||||||
QCC_PR_ParseTypedef();
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
|
|
||||||
if (pr_token_type == tt_name)
|
if (pr_token_type == tt_name)
|
||||||
{
|
{
|
||||||
QCC_type_t *type = QCC_TypeForName(pr_token);
|
QCC_type_t *type = QCC_TypeForName(pr_token);
|
||||||
if (type && type->typedefed)
|
if (type)
|
||||||
{
|
{
|
||||||
if (strncmp(pr_file_p, "::", 2))
|
if (strncmp(pr_file_p, "::", 2))
|
||||||
{
|
{
|
||||||
|
@ -13654,6 +13664,7 @@ void QCC_PR_ParseStatement (void)
|
||||||
( !STRCMP ("_Bool", pr_token)) ||
|
( !STRCMP ("_Bool", pr_token)) ||
|
||||||
(keyword_static && !STRCMP ("static", pr_token)) ||
|
(keyword_static && !STRCMP ("static", pr_token)) ||
|
||||||
(keyword_class && !STRCMP ("class", pr_token)) ||
|
(keyword_class && !STRCMP ("class", pr_token)) ||
|
||||||
|
(keyword_typedef && !STRCMP ("typedef", pr_token)) ||
|
||||||
(keyword_const && !STRCMP ("const", pr_token)))
|
(keyword_const && !STRCMP ("const", pr_token)))
|
||||||
{
|
{
|
||||||
QCC_PR_ParseDefs (NULL, true);
|
QCC_PR_ParseDefs (NULL, true);
|
||||||
|
@ -16603,6 +16614,9 @@ QCC_def_t *QCC_PR_DummyDef(QCC_type_t *type, const char *name, QCC_function_t *s
|
||||||
break;
|
break;
|
||||||
case ev_void:
|
case ev_void:
|
||||||
break;
|
break;
|
||||||
|
case ev_typedef: //invalid
|
||||||
|
QCC_PR_ParseWarning(ERR_INTERNAL, "unexpected typedef");
|
||||||
|
break;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -17061,6 +17075,9 @@ static QCC_def_t *QCC_PR_DummyFieldDef(QCC_type_t *type, QCC_function_t *scope,
|
||||||
break;
|
break;
|
||||||
case ev_void:
|
case ev_void:
|
||||||
break;
|
break;
|
||||||
|
case ev_typedef: //invalid
|
||||||
|
QCC_PR_ParseWarning(ERR_INTERNAL, "unexpected typedef");
|
||||||
|
break;
|
||||||
}
|
}
|
||||||
if (*fieldofs > maxfield)
|
if (*fieldofs > maxfield)
|
||||||
maxfield = *fieldofs;
|
maxfield = *fieldofs;
|
||||||
|
@ -17313,7 +17330,6 @@ QCC_sref_t QCC_PR_ParseInitializerType_Internal(int arraysize, QCC_def_t *basede
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
pbool isblock;
|
|
||||||
QCC_type_t *type = def.cast;
|
QCC_type_t *type = def.cast;
|
||||||
if (type->type == ev_function && pr_token_type == tt_punct)
|
if (type->type == ev_function && pr_token_type == tt_punct)
|
||||||
{
|
{
|
||||||
|
@ -17512,8 +17528,14 @@ QCC_sref_t QCC_PR_ParseInitializerType_Internal(int arraysize, QCC_def_t *basede
|
||||||
QCC_PR_Lex();
|
QCC_PR_Lex();
|
||||||
QCC_PR_Expect(")");
|
QCC_PR_Expect(")");
|
||||||
}
|
}
|
||||||
else if ((isblock=(type->type == ev_struct || type->type == ev_union) && QCC_PR_CheckToken("{"))
|
else if (type->type == ev_union && type->num_parms == 1 && !type->params->paramname)
|
||||||
|| (type->type == ev_union && type->num_parms == 1 && !type->params->paramname))
|
{ //weird typedefed array hack
|
||||||
|
def.cast = (type)->params[0].type;
|
||||||
|
ret &= QCC_PR_ParseInitializerType((type)->params[0].arraysize, basedef, def, flags);
|
||||||
|
def.cast = type;
|
||||||
|
return ret?def:nullsref;
|
||||||
|
}
|
||||||
|
else if ((type->type == ev_struct || type->type == ev_union) && QCC_PR_CheckToken("{"))
|
||||||
{
|
{
|
||||||
//structs go recursive
|
//structs go recursive
|
||||||
QCC_type_t *parenttype;
|
QCC_type_t *parenttype;
|
||||||
|
@ -17585,8 +17607,6 @@ QCC_sref_t QCC_PR_ParseInitializerType_Internal(int arraysize, QCC_def_t *basede
|
||||||
ret &= QCC_PR_ParseInitializerType((type)->params[partnum].arraysize, basedef, def, flags);
|
ret &= QCC_PR_ParseInitializerType((type)->params[partnum].arraysize, basedef, def, flags);
|
||||||
if (isunion || !QCC_PR_CheckToken(","))
|
if (isunion || !QCC_PR_CheckToken(","))
|
||||||
{
|
{
|
||||||
if (!isblock)
|
|
||||||
break;
|
|
||||||
QCC_PR_Expect("}");
|
QCC_PR_Expect("}");
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
|
@ -17962,81 +17982,6 @@ QCC_type_t *QCC_PR_ParseEnum(pbool flags)
|
||||||
return enumtype?enumtype:basetype;
|
return enumtype?enumtype:basetype;
|
||||||
}
|
}
|
||||||
|
|
||||||
void QCC_PR_ParseTypedef(void)
|
|
||||||
{
|
|
||||||
QCC_type_t *old;
|
|
||||||
QCC_type_t *type = QCC_PR_ParseType(false, false);
|
|
||||||
if (!type)
|
|
||||||
{
|
|
||||||
QCC_PR_ParseError(ERR_NOTATYPE, "typedef found unexpected tokens");
|
|
||||||
}
|
|
||||||
do
|
|
||||||
{
|
|
||||||
char *name;
|
|
||||||
if (QCC_PR_CheckToken(";"))
|
|
||||||
return;
|
|
||||||
|
|
||||||
while (QCC_PR_CheckToken("*"))
|
|
||||||
type = QCC_PointerTypeTo(type);
|
|
||||||
|
|
||||||
if (QCC_PR_CheckToken("("))
|
|
||||||
{ //c-style function pointers are annoying.
|
|
||||||
int levels = 0;
|
|
||||||
while (QCC_PR_CheckToken("*"))
|
|
||||||
levels++;
|
|
||||||
name = QCC_PR_ParseName();
|
|
||||||
QCC_PR_Expect(")");
|
|
||||||
|
|
||||||
//now parse its args
|
|
||||||
QCC_PR_Expect("(");
|
|
||||||
type = QCC_PR_ParseFunctionType(false, type);
|
|
||||||
|
|
||||||
//and bring it to the intended indirection level...
|
|
||||||
while (levels --> 1)
|
|
||||||
type = QCC_PointerTypeTo(type);
|
|
||||||
}
|
|
||||||
else
|
|
||||||
name = QCC_PR_ParseName();
|
|
||||||
|
|
||||||
if (QCC_PR_CheckToken("["))
|
|
||||||
{
|
|
||||||
struct QCC_typeparam_s *param = qccHunkAlloc(sizeof(*param));
|
|
||||||
param->type = type;
|
|
||||||
param->arraysize = QCC_PR_IntConstExpr();
|
|
||||||
type = QCC_PR_NewType(name, ev_union, true);
|
|
||||||
type->params = param;
|
|
||||||
type->num_parms = 1;
|
|
||||||
type->size = param->type->size * param->arraysize;
|
|
||||||
QCC_PR_Expect("]");
|
|
||||||
}
|
|
||||||
else
|
|
||||||
{
|
|
||||||
old = QCC_TypeForName(name);
|
|
||||||
if (old && old->scope == pr_scope)
|
|
||||||
{
|
|
||||||
if (typecmp(old, type))
|
|
||||||
{
|
|
||||||
char obuf[1024];
|
|
||||||
char nbuf[1024];
|
|
||||||
old->typedefed = false;
|
|
||||||
QCC_PR_ParseWarning(ERR_NOTATYPE, "Cannot redeclare typedef %s%s%s from %s%s%s to %s%s%s", col_type,name,col_none, col_type,TypeName(old, obuf, sizeof(obuf)),col_none, col_type,TypeName(type, nbuf, sizeof(nbuf)),col_none);
|
|
||||||
old->typedefed = true;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
else
|
|
||||||
{
|
|
||||||
type = QCC_PR_DuplicateType(type, false);
|
|
||||||
type->name = name;
|
|
||||||
type->typedefed = true;
|
|
||||||
type->scope = pr_scope;
|
|
||||||
pHash_Add(&typedeftable, name, type, qccHunkAlloc(sizeof(bucket_t)));
|
|
||||||
}
|
|
||||||
}
|
|
||||||
} while(QCC_PR_CheckToken(","));
|
|
||||||
QCC_PR_Expect(";");
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
|
|
||||||
/*
|
/*
|
||||||
================
|
================
|
||||||
PR_ParseDefs
|
PR_ParseDefs
|
||||||
|
@ -18054,6 +17999,7 @@ void QCC_PR_ParseDefs (char *classname, pbool fatal_unused)
|
||||||
pbool shared=false;
|
pbool shared=false;
|
||||||
pbool isstatic=defaultstatic;
|
pbool isstatic=defaultstatic;
|
||||||
pbool externfnc=false;
|
pbool externfnc=false;
|
||||||
|
pbool istypedef=false;
|
||||||
pbool isconstant = false;
|
pbool isconstant = false;
|
||||||
pbool isvar = false;
|
pbool isvar = false;
|
||||||
pbool isinitialised = false;
|
pbool isinitialised = false;
|
||||||
|
@ -18078,12 +18024,6 @@ void QCC_PR_ParseDefs (char *classname, pbool fatal_unused)
|
||||||
while (QCC_PR_CheckToken(";"))
|
while (QCC_PR_CheckToken(";"))
|
||||||
;
|
;
|
||||||
|
|
||||||
if (QCC_PR_CheckKeyword (keyword_typedef, "typedef"))
|
|
||||||
{
|
|
||||||
QCC_PR_ParseTypedef();
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
|
|
||||||
if (flag_acc)
|
if (flag_acc)
|
||||||
{
|
{
|
||||||
char *oldp;
|
char *oldp;
|
||||||
|
@ -18242,7 +18182,9 @@ void QCC_PR_ParseDefs (char *classname, pbool fatal_unused)
|
||||||
|
|
||||||
while(1)
|
while(1)
|
||||||
{
|
{
|
||||||
if (QCC_PR_CheckKeyword(keyword_extern, "extern"))
|
if (QCC_PR_CheckKeyword (keyword_typedef, "typedef"))
|
||||||
|
istypedef=true;
|
||||||
|
else if (QCC_PR_CheckKeyword(keyword_extern, "extern"))
|
||||||
externfnc=true;
|
externfnc=true;
|
||||||
else if (QCC_PR_CheckKeyword(keyword_shared, "shared"))
|
else if (QCC_PR_CheckKeyword(keyword_shared, "shared"))
|
||||||
{
|
{
|
||||||
|
@ -18380,7 +18322,10 @@ void QCC_PR_ParseDefs (char *classname, pbool fatal_unused)
|
||||||
type = QCC_PR_ParseFunctionTypeReacc(false, basetype);
|
type = QCC_PR_ParseFunctionTypeReacc(false, basetype);
|
||||||
QCC_PR_Expect(";");
|
QCC_PR_Expect(";");
|
||||||
|
|
||||||
def = QCC_PR_GetDef (basetype, name, NULL, true, 0, false);
|
if (istypedef)
|
||||||
|
return;
|
||||||
|
else
|
||||||
|
def = QCC_PR_GetDef (basetype, name, NULL, true, 0, false);
|
||||||
|
|
||||||
if (autoprototype || dostrip)
|
if (autoprototype || dostrip)
|
||||||
{ //ignore the code and stuff
|
{ //ignore the code and stuff
|
||||||
|
@ -18448,6 +18393,11 @@ void QCC_PR_ParseDefs (char *classname, pbool fatal_unused)
|
||||||
|
|
||||||
if (QCC_PR_CheckToken (";"))
|
if (QCC_PR_CheckToken (";"))
|
||||||
{
|
{
|
||||||
|
if (istypedef)
|
||||||
|
{
|
||||||
|
QCC_PR_ParseWarning(WARN_UNEXPECTEDPUNCT, "typedef defines no types");
|
||||||
|
return;
|
||||||
|
}
|
||||||
if (type->type == ev_field && (type->aux_type->type == ev_union || type->aux_type->type == ev_struct))
|
if (type->type == ev_field && (type->aux_type->type == ev_union || type->aux_type->type == ev_struct))
|
||||||
{
|
{
|
||||||
QCC_PR_ExpandUnionToFields(type, &pr.size_fields);
|
QCC_PR_ExpandUnionToFields(type, &pr.size_fields);
|
||||||
|
@ -18473,7 +18423,7 @@ void QCC_PR_ParseDefs (char *classname, pbool fatal_unused)
|
||||||
name = QCC_PR_ParseName ();
|
name = QCC_PR_ParseName ();
|
||||||
}
|
}
|
||||||
|
|
||||||
if (QCC_PR_CheckToken("::") && !classname)
|
if (!istypedef && QCC_PR_CheckToken("::") && !classname)
|
||||||
{
|
{
|
||||||
classname = name;
|
classname = name;
|
||||||
name = QCC_PR_ParseName();
|
name = QCC_PR_ParseName();
|
||||||
|
@ -18491,7 +18441,7 @@ void QCC_PR_ParseDefs (char *classname, pbool fatal_unused)
|
||||||
if (QCC_PR_CheckToken("]"))
|
if (QCC_PR_CheckToken("]"))
|
||||||
{
|
{
|
||||||
//FIXME: preprocessor will hate this with a passion.
|
//FIXME: preprocessor will hate this with a passion.
|
||||||
if (QCC_PR_CheckToken("="))
|
if (!istypedef && QCC_PR_CheckToken("="))
|
||||||
{
|
{
|
||||||
QCC_PR_Expect("{");
|
QCC_PR_Expect("{");
|
||||||
arraysize++;
|
arraysize++;
|
||||||
|
@ -18592,8 +18542,54 @@ void QCC_PR_ParseDefs (char *classname, pbool fatal_unused)
|
||||||
else
|
else
|
||||||
defclass = NULL;
|
defclass = NULL;
|
||||||
|
|
||||||
isinitialised = QCC_PR_CheckToken ("=") || ((type->type == ev_function) && (pr_token[0] == '{' || pr_token[0] == '[' || pr_token[0] == ':'));
|
if (istypedef)
|
||||||
|
{
|
||||||
|
QCC_type_t *old;
|
||||||
|
if (externfnc||shared||isconstant||isvar||forceused||dostrip||allowinline||dowrap||doweak||accumulate||aliasof||deprecated
|
||||||
|
||(isstatic && !defaultstatic)
|
||||||
|
||(noref && !defaultnoref)
|
||||||
|
||(nosave && !defaultnosave) )
|
||||||
|
QCC_PR_ParseWarning(ERR_BADEXTENSION, "bad combination of modifiers with typedef (defining %s%s%s)", col_type,name,col_none);
|
||||||
|
if (arraysize)
|
||||||
|
{
|
||||||
|
struct QCC_typeparam_s *param = qccHunkAlloc(sizeof(*param));
|
||||||
|
// QCC_PR_ParseWarning(ERR_BADEXTENSION, "unsupported typedefed array (defining %s%s%s[%i])", col_type,name,col_none, arraysize);
|
||||||
|
param->type = type;
|
||||||
|
param->arraysize = arraysize;
|
||||||
|
param->paramname = NULL;
|
||||||
|
type = QCC_PR_NewType(name, ev_union, true);
|
||||||
|
type->params = param;
|
||||||
|
type->num_parms = 1;
|
||||||
|
type->size = param->type->size * param->arraysize;
|
||||||
|
}
|
||||||
|
else if (dynlength.cast)
|
||||||
|
{
|
||||||
|
QCC_PR_ParseWarning(ERR_BADEXTENSION, "unsupported typedefed array (defining %s%s%s[])", col_type,name,col_none);
|
||||||
|
type = QCC_PointerTypeTo(type);
|
||||||
|
}
|
||||||
|
|
||||||
|
old = QCC_TypeForName(name);
|
||||||
|
if (old && old->scope == pr_scope)
|
||||||
|
{
|
||||||
|
if (typecmp(old, type))
|
||||||
|
{
|
||||||
|
char obuf[1024];
|
||||||
|
char nbuf[1024];
|
||||||
|
QCC_PR_ParseWarning(ERR_NOTATYPE, "Cannot redeclare typedef %s%s%s from %s%s%s to %s%s%s", col_type,name,col_none, col_type,TypeName(old, obuf, sizeof(obuf)),col_none, col_type,TypeName(type, nbuf, sizeof(nbuf)),col_none);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
old = type;
|
||||||
|
type = QCC_PR_NewType(name, ev_typedef, true);
|
||||||
|
type->aux_type = old;
|
||||||
|
type->scope = pr_scope;
|
||||||
|
}
|
||||||
|
|
||||||
|
continue;
|
||||||
|
}
|
||||||
|
|
||||||
|
isinitialised = QCC_PR_CheckToken ("=") || ((type->type == ev_function) && (pr_token[0] == '{' || pr_token[0] == '[' || pr_token[0] == ':'));
|
||||||
|
|
||||||
gd_flags = 0;
|
gd_flags = 0;
|
||||||
if (isstatic)
|
if (isstatic)
|
||||||
|
|
|
@ -251,7 +251,7 @@ void QCC_JoinPaths(char *fullname, size_t fullnamesize, const char *newfile, con
|
||||||
|
|
||||||
extern char qccmsourcedir[];
|
extern char qccmsourcedir[];
|
||||||
//also meant to include it.
|
//also meant to include it.
|
||||||
void QCC_FindBestInclude(char *newfile, char *currentfile, pbool verbose)
|
void QCC_FindBestInclude(char *newfile, char *currentfile, pbool includetype)
|
||||||
{
|
{
|
||||||
struct qccincludeonced_s *onced;
|
struct qccincludeonced_s *onced;
|
||||||
int includepath = 0;
|
int includepath = 0;
|
||||||
|
@ -289,9 +289,9 @@ void QCC_FindBestInclude(char *newfile, char *currentfile, pbool verbose)
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
if (verbose)
|
if (includetype && verbose >= VERBOSE_PROGRESS)
|
||||||
{
|
{
|
||||||
if (verbose == 2)
|
if (includetype == 2)
|
||||||
{
|
{
|
||||||
if (autoprototype)
|
if (autoprototype)
|
||||||
externs->Printf("prototyping %s\n", fullname);
|
externs->Printf("prototyping %s\n", fullname);
|
||||||
|
@ -4009,7 +4009,6 @@ void QCC_PR_ParsePrintSRef (int type, QCC_sref_t def)
|
||||||
void *errorscope;
|
void *errorscope;
|
||||||
static void QCC_PR_PrintMacro (qcc_includechunk_t *chunk)
|
static void QCC_PR_PrintMacro (qcc_includechunk_t *chunk)
|
||||||
{
|
{
|
||||||
extern pbool verbose;
|
|
||||||
if (chunk)
|
if (chunk)
|
||||||
{
|
{
|
||||||
QCC_PR_PrintMacro(chunk->prev);
|
QCC_PR_PrintMacro(chunk->prev);
|
||||||
|
@ -4020,7 +4019,7 @@ static void QCC_PR_PrintMacro (qcc_includechunk_t *chunk)
|
||||||
#else
|
#else
|
||||||
externs->Printf ("%s:%i: expanding %s\n", chunk->currentfilename, chunk->currentlinenumber, chunk->cnst->name);
|
externs->Printf ("%s:%i: expanding %s\n", chunk->currentfilename, chunk->currentlinenumber, chunk->cnst->name);
|
||||||
#endif
|
#endif
|
||||||
if (verbose)
|
if (verbose >= VERBOSE_STANDARD)
|
||||||
externs->Printf ("%s\n", chunk->datastart);
|
externs->Printf ("%s\n", chunk->datastart);
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
|
@ -4913,19 +4912,9 @@ QCC_type_t *QCC_TypeForName(const char *name)
|
||||||
break; //its okay after all.
|
break; //its okay after all.
|
||||||
t = pHash_GetNext(&typedeftable, name, t);
|
t = pHash_GetNext(&typedeftable, name, t);
|
||||||
}
|
}
|
||||||
|
if (t && t->type == ev_typedef)
|
||||||
|
return t->aux_type; //just use its real type.
|
||||||
return t;
|
return t;
|
||||||
/*
|
|
||||||
int i;
|
|
||||||
|
|
||||||
for (i = 0; i < numtypeinfos; i++)
|
|
||||||
{
|
|
||||||
if (qcc_typeinfo[i].typedefed && !STRCMP(qcc_typeinfo[i].name, name))
|
|
||||||
{
|
|
||||||
return &qcc_typeinfo[i];
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
return NULL;*/
|
|
||||||
}
|
}
|
||||||
|
|
||||||
/*
|
/*
|
||||||
|
|
|
@ -27,7 +27,9 @@ extern int optres_test1;
|
||||||
extern int optres_test2;
|
extern int optres_test2;
|
||||||
|
|
||||||
pbool writeasm;
|
pbool writeasm;
|
||||||
pbool verbose;
|
int verbose;
|
||||||
|
#define VERBOSE_WARNINGSONLY -1
|
||||||
|
#define VERBOSE_PROGRESS 0
|
||||||
#define VERBOSE_STANDARD 1
|
#define VERBOSE_STANDARD 1
|
||||||
#define VERBOSE_DEBUG 2
|
#define VERBOSE_DEBUG 2
|
||||||
#define VERBOSE_DEBUGSTATEMENTS 3 //figuring out the files can be expensive.
|
#define VERBOSE_DEBUGSTATEMENTS 3 //figuring out the files can be expensive.
|
||||||
|
@ -1625,7 +1627,7 @@ static void QCC_UnmarshalLocals(void)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
numpr_globals = biggest;
|
numpr_globals = biggest;
|
||||||
if (verbose)
|
if (verbose >= VERBOSE_STANDARD)
|
||||||
externs->Printf("%i shared locals, %i private, %i total\n", biggest - onum, onum - eog, numpr_globals-eog);
|
externs->Printf("%i shared locals, %i private, %i total\n", biggest - onum, onum - eog, numpr_globals-eog);
|
||||||
}
|
}
|
||||||
static void QCC_GenerateFieldDefs(QCC_def_t *def, char *fieldname, int ofs, QCC_type_t *type)
|
static void QCC_GenerateFieldDefs(QCC_def_t *def, char *fieldname, int ofs, QCC_type_t *type)
|
||||||
|
@ -1817,7 +1819,7 @@ static pbool QCC_WriteData (int crc)
|
||||||
{
|
{
|
||||||
if (numpr_globals >= 32768) //not much of a different format. Rewrite output to get it working on original executors?
|
if (numpr_globals >= 32768) //not much of a different format. Rewrite output to get it working on original executors?
|
||||||
externs->Printf("Globals exceeds 32k - an enhanced QCVM will be required\n");
|
externs->Printf("Globals exceeds 32k - an enhanced QCVM will be required\n");
|
||||||
else if (verbose)
|
else if (verbose >= VERBOSE_STANDARD)
|
||||||
externs->Printf("Progs should run on any QuakeC VM\n");
|
externs->Printf("Progs should run on any QuakeC VM\n");
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
|
@ -1866,7 +1868,7 @@ static pbool QCC_WriteData (int crc)
|
||||||
types = false;
|
types = false;
|
||||||
}
|
}
|
||||||
|
|
||||||
if (verbose)
|
if (verbose >= VERBOSE_STANDARD)
|
||||||
{
|
{
|
||||||
if (qcc_targetformat == QCF_QSS)
|
if (qcc_targetformat == QCF_QSS)
|
||||||
externs->Printf("QSS or FTE will be required\n");
|
externs->Printf("QSS or FTE will be required\n");
|
||||||
|
@ -1881,7 +1883,7 @@ static pbool QCC_WriteData (int crc)
|
||||||
case QCF_UHEXEN2:
|
case QCF_UHEXEN2:
|
||||||
debugtarget = false;
|
debugtarget = false;
|
||||||
outputsttype = PST_UHEXEN2;
|
outputsttype = PST_UHEXEN2;
|
||||||
if (verbose)
|
if (verbose >= VERBOSE_STANDARD)
|
||||||
externs->Printf("uHexen2 will be required\n");
|
externs->Printf("uHexen2 will be required\n");
|
||||||
if (numpr_globals < 65535)
|
if (numpr_globals < 65535)
|
||||||
externs->Printf("Warning: outputting 32 uHexen2 format when 16bit would suffice\n");
|
externs->Printf("Warning: outputting 32 uHexen2 format when 16bit would suffice\n");
|
||||||
|
@ -2117,15 +2119,15 @@ static pbool QCC_WriteData (int crc)
|
||||||
else if (strcmp(def->name, "IMMEDIATE") && qccwarningaction[wt] && !(def->type->type == ev_function && def->symbolheader->timescalled) && !def->symbolheader->used)
|
else if (strcmp(def->name, "IMMEDIATE") && qccwarningaction[wt] && !(def->type->type == ev_function && def->symbolheader->timescalled) && !def->symbolheader->used)
|
||||||
{
|
{
|
||||||
char typestr[256];
|
char typestr[256];
|
||||||
if (QC_strcasestr(def->filen, "extensions") && !verbose)
|
if (QC_strcasestr(def->filen, "extensions") && verbose < VERBOSE_STANDARD)
|
||||||
{ //try to avoid annoying warnings from dpextensions.qc
|
{ //try to avoid annoying warnings from dpextensions.qc
|
||||||
extwarncount++;
|
extwarncount++;
|
||||||
QCC_PR_Warning(wt, def->filen, def->s_line, NULL);
|
QCC_PR_Warning(wt, def->filen, def->s_line, NULL);
|
||||||
}
|
}
|
||||||
else if (def->arraysize)
|
else if (def->arraysize)
|
||||||
QCC_PR_Warning(wt, def->filen, def->s_line, (dupewarncount++ >= 10 && !verbose)?NULL:"%s %s%s%s[%i] no references.", TypeName(def->type, typestr, sizeof(typestr)), col_symbol, def->name, col_none, def->arraysize);
|
QCC_PR_Warning(wt, def->filen, def->s_line, (dupewarncount++ >= 10 && verbose < VERBOSE_STANDARD)?NULL:"%s %s%s%s[%i] no references.", TypeName(def->type, typestr, sizeof(typestr)), col_symbol, def->name, col_none, def->arraysize);
|
||||||
else
|
else
|
||||||
QCC_PR_Warning(wt, def->filen, def->s_line, (dupewarncount++ >= 10 && !verbose)?NULL:"%s %s%s%s no references.", TypeName(def->type, typestr, sizeof(typestr)), col_symbol, def->name, col_none);
|
QCC_PR_Warning(wt, def->filen, def->s_line, (dupewarncount++ >= 10 && verbose < VERBOSE_STANDARD)?NULL:"%s %s%s%s no references.", TypeName(def->type, typestr, sizeof(typestr)), col_symbol, def->name, col_none);
|
||||||
}
|
}
|
||||||
pr_scope = NULL;
|
pr_scope = NULL;
|
||||||
|
|
||||||
|
@ -2260,7 +2262,7 @@ static pbool QCC_WriteData (int crc)
|
||||||
}
|
}
|
||||||
QCC_SortFields();
|
QCC_SortFields();
|
||||||
|
|
||||||
if (dupewarncount > 10 && !verbose)
|
if (dupewarncount > 10 && verbose < VERBOSE_STANDARD)
|
||||||
QCC_PR_Note(WARN_NOTREFERENCED, NULL, 0, "suppressed %i more warnings about unreferenced variables, as you clearly don't care about the first 10.", dupewarncount-10);
|
QCC_PR_Note(WARN_NOTREFERENCED, NULL, 0, "suppressed %i more warnings about unreferenced variables, as you clearly don't care about the first 10.", dupewarncount-10);
|
||||||
if (extwarncount)
|
if (extwarncount)
|
||||||
QCC_PR_Note(WARN_NOTREFERENCED, NULL, 0, "suppressed %i warnings about unused extensions.", extwarncount);
|
QCC_PR_Note(WARN_NOTREFERENCED, NULL, 0, "suppressed %i warnings about unused extensions.", extwarncount);
|
||||||
|
@ -2320,20 +2322,20 @@ static pbool QCC_WriteData (int crc)
|
||||||
for (i = 0; i < nummodels; i++)
|
for (i = 0; i < nummodels; i++)
|
||||||
{
|
{
|
||||||
if (!precache_model[i].used)
|
if (!precache_model[i].used)
|
||||||
dupewarncount+=QCC_PR_Warning(WARN_EXTRAPRECACHE, precache_model[i].filename, precache_model[i].fileline, (dupewarncount>10&&!verbose)?NULL:"Model \"%s\" was precached but not directly used%s", precache_model[i].name, dupewarncount?"":" (annotate the usage with the used_model intrinsic to silence this warning)");
|
dupewarncount+=QCC_PR_Warning(WARN_EXTRAPRECACHE, precache_model[i].filename, precache_model[i].fileline, (dupewarncount>10&&verbose < VERBOSE_STANDARD)?NULL:"Model \"%s\" was precached but not directly used%s", precache_model[i].name, dupewarncount?"":" (annotate the usage with the used_model intrinsic to silence this warning)");
|
||||||
else if (!precache_model[i].block)
|
else if (!precache_model[i].block)
|
||||||
dupewarncount+=QCC_PR_Warning(WARN_NOTPRECACHED, precache_model[i].filename, precache_model[i].fileline, (dupewarncount>10&&!verbose)?NULL:"Model \"%s\" was used but not directly precached", precache_model[i].name);
|
dupewarncount+=QCC_PR_Warning(WARN_NOTPRECACHED, precache_model[i].filename, precache_model[i].fileline, (dupewarncount>10&&verbose < VERBOSE_STANDARD)?NULL:"Model \"%s\" was used but not directly precached", precache_model[i].name);
|
||||||
}
|
}
|
||||||
|
|
||||||
for (i = 0; i < numsounds; i++)
|
for (i = 0; i < numsounds; i++)
|
||||||
{
|
{
|
||||||
if (!precache_sound[i].used)
|
if (!precache_sound[i].used)
|
||||||
dupewarncount+=QCC_PR_Warning(WARN_EXTRAPRECACHE, precache_sound[i].filename, precache_sound[i].fileline, (dupewarncount>10&&!verbose)?NULL:"Sound \"%s\" was precached but not directly used", precache_sound[i].name, dupewarncount?"":" (annotate the usage with the used_sound intrinsic to silence this warning)");
|
dupewarncount+=QCC_PR_Warning(WARN_EXTRAPRECACHE, precache_sound[i].filename, precache_sound[i].fileline, (dupewarncount>10&&verbose < VERBOSE_STANDARD)?NULL:"Sound \"%s\" was precached but not directly used", precache_sound[i].name, dupewarncount?"":" (annotate the usage with the used_sound intrinsic to silence this warning)");
|
||||||
else if (!precache_sound[i].block)
|
else if (!precache_sound[i].block)
|
||||||
dupewarncount+=QCC_PR_Warning(WARN_NOTPRECACHED, precache_sound[i].filename, precache_sound[i].fileline, (dupewarncount>10&&!verbose)?NULL:"Sound \"%s\" was used but not directly precached", precache_sound[i].name);
|
dupewarncount+=QCC_PR_Warning(WARN_NOTPRECACHED, precache_sound[i].filename, precache_sound[i].fileline, (dupewarncount>10&&verbose < VERBOSE_STANDARD)?NULL:"Sound \"%s\" was used but not directly precached", precache_sound[i].name);
|
||||||
}
|
}
|
||||||
|
|
||||||
if (dupewarncount > 10 && !verbose)
|
if (dupewarncount > 10 && verbose < VERBOSE_STANDARD)
|
||||||
QCC_PR_Note(WARN_NOTREFERENCED, NULL, 0, "suppressed %i more %swarnings%s about precaches.", dupewarncount-10, col_warning, col_none);
|
QCC_PR_Note(WARN_NOTREFERENCED, NULL, 0, "suppressed %i more %swarnings%s about precaches.", dupewarncount-10, col_warning, col_none);
|
||||||
|
|
||||||
//PrintStrings ();
|
//PrintStrings ();
|
||||||
|
@ -2342,7 +2344,7 @@ static pbool QCC_WriteData (int crc)
|
||||||
//PrintGlobals ();
|
//PrintGlobals ();
|
||||||
strofs = (strofs+3)&~3;
|
strofs = (strofs+3)&~3;
|
||||||
|
|
||||||
if (verbose)
|
if (verbose >= VERBOSE_STANDARD)
|
||||||
{
|
{
|
||||||
externs->Printf ("%6i strofs (of %i)\n", strofs, MAX_STRINGS);
|
externs->Printf ("%6i strofs (of %i)\n", strofs, MAX_STRINGS);
|
||||||
externs->Printf ("%6i numstatements (of %i)\n", numstatements, MAX_STATEMENTS);
|
externs->Printf ("%6i numstatements (of %i)\n", numstatements, MAX_STATEMENTS);
|
||||||
|
@ -2356,7 +2358,7 @@ strofs = (strofs+3)&~3;
|
||||||
|
|
||||||
if (!*destfile)
|
if (!*destfile)
|
||||||
strcpy(destfile, "progs.dat");
|
strcpy(destfile, "progs.dat");
|
||||||
if (verbose)
|
if (verbose >= VERBOSE_PROGRESS)
|
||||||
externs->Printf("Writing %s\n", destfile);
|
externs->Printf("Writing %s\n", destfile);
|
||||||
h = SafeOpenWrite (destfile, 2*1024*1024);
|
h = SafeOpenWrite (destfile, 2*1024*1024);
|
||||||
SafeWrite (h, &progs, sizeof(progs));
|
SafeWrite (h, &progs, sizeof(progs));
|
||||||
|
@ -2867,7 +2869,7 @@ strofs = (strofs+3)&~3;
|
||||||
externs->Printf ("WARNING: progs format cannot handle extern functions\n");
|
externs->Printf ("WARNING: progs format cannot handle extern functions\n");
|
||||||
|
|
||||||
|
|
||||||
if (verbose)
|
if (verbose >= VERBOSE_STANDARD)
|
||||||
externs->Printf ("%6i TOTAL SIZE\n", (int)SafeSeek (h, 0, SEEK_CUR));
|
externs->Printf ("%6i TOTAL SIZE\n", (int)SafeSeek (h, 0, SEEK_CUR));
|
||||||
|
|
||||||
progs.entityfields = pr.size_fields;
|
progs.entityfields = pr.size_fields;
|
||||||
|
@ -2896,7 +2898,7 @@ strofs = (strofs+3)&~3;
|
||||||
i = PRLittleLong(qcc_pr_globals[def->ofs]._int);
|
i = PRLittleLong(qcc_pr_globals[def->ofs]._int);
|
||||||
else
|
else
|
||||||
{ //entsize(=96)+hunk header size(=32)
|
{ //entsize(=96)+hunk header size(=32)
|
||||||
if (verbose)
|
if (verbose >= VERBOSE_STANDARD)
|
||||||
externs->Printf("qccx hack - 'entity progs' uninitialised. Assuming 112.\n");
|
externs->Printf("qccx hack - 'entity progs' uninitialised. Assuming 112.\n");
|
||||||
i = 112; //match qccx.
|
i = 112; //match qccx.
|
||||||
}
|
}
|
||||||
|
@ -2924,7 +2926,7 @@ strofs = (strofs+3)&~3;
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
if (verbose >= VERBOSE_PROGRESS)
|
||||||
switch(qcc_targetformat)
|
switch(qcc_targetformat)
|
||||||
{
|
{
|
||||||
case QCF_QTEST:
|
case QCF_QTEST:
|
||||||
|
@ -2988,7 +2990,7 @@ strofs = (strofs+3)&~3;
|
||||||
strcat(destfile, ".lno");
|
strcat(destfile, ".lno");
|
||||||
if (gz)
|
if (gz)
|
||||||
strcat(destfile, ".gz");
|
strcat(destfile, ".gz");
|
||||||
if (verbose)
|
if (verbose >= VERBOSE_STANDARD)
|
||||||
externs->Printf("Writing %s for debugging\n", destfile);
|
externs->Printf("Writing %s for debugging\n", destfile);
|
||||||
h = SafeOpenWrite (destfile, 2*1024*1024);
|
h = SafeOpenWrite (destfile, 2*1024*1024);
|
||||||
SafeWrite (h, &lnotype, sizeof(int));
|
SafeWrite (h, &lnotype, sizeof(int));
|
||||||
|
@ -3881,53 +3883,53 @@ static void QCC_PR_CRCMessages(unsigned short crc)
|
||||||
case 12923: //#pragma sourcefile usage
|
case 12923: //#pragma sourcefile usage
|
||||||
break;
|
break;
|
||||||
case 54730:
|
case 54730:
|
||||||
if (verbose)
|
if (verbose >= VERBOSE_STANDARD)
|
||||||
externs->Printf("Recognised progs as QuakeWorld\n");
|
externs->Printf("Recognised progs as QuakeWorld\n");
|
||||||
break;
|
break;
|
||||||
case 5927:
|
case 5927:
|
||||||
if (verbose)
|
if (verbose >= VERBOSE_STANDARD)
|
||||||
externs->Printf("Recognised progs as NetQuake server gamecode\n");
|
externs->Printf("Recognised progs as NetQuake server gamecode\n");
|
||||||
break;
|
break;
|
||||||
|
|
||||||
case 26940:
|
case 26940:
|
||||||
if (verbose)
|
if (verbose >= VERBOSE_STANDARD)
|
||||||
externs->Printf("Recognised progs as Quake pre-release...\n");
|
externs->Printf("Recognised progs as Quake pre-release...\n");
|
||||||
break;
|
break;
|
||||||
|
|
||||||
case 38488:
|
case 38488:
|
||||||
if (verbose)
|
if (verbose >= VERBOSE_STANDARD)
|
||||||
externs->Printf("Recognised progs as original Hexen2\n");
|
externs->Printf("Recognised progs as original Hexen2\n");
|
||||||
break;
|
break;
|
||||||
case 26905:
|
case 26905:
|
||||||
if (verbose)
|
if (verbose >= VERBOSE_STANDARD)
|
||||||
externs->Printf("Recognised progs as Hexen2 Mission Pack\n");
|
externs->Printf("Recognised progs as Hexen2 Mission Pack\n");
|
||||||
break;
|
break;
|
||||||
case 14046:
|
case 14046:
|
||||||
if (verbose)
|
if (verbose >= VERBOSE_STANDARD)
|
||||||
externs->Printf("Recognised progs as Hexen2 (demo)\n");
|
externs->Printf("Recognised progs as Hexen2 (demo)\n");
|
||||||
break;
|
break;
|
||||||
|
|
||||||
case 22390: //EXT_CSQC_1
|
case 22390: //EXT_CSQC_1
|
||||||
if (verbose)
|
if (verbose >= VERBOSE_STANDARD)
|
||||||
externs->Printf("Recognised progs as an EXT_CSQC_1 module\n");
|
externs->Printf("Recognised progs as an EXT_CSQC_1 module\n");
|
||||||
break;
|
break;
|
||||||
case 17105:
|
case 17105:
|
||||||
case 32199: //outdated ext_csqc
|
case 32199: //outdated ext_csqc
|
||||||
QCC_PR_Warning(WARN_SYSTEMCRC2, NULL, 0, "Recognised progs as outdated CSQC module\n");
|
QCC_PR_Warning(WARN_SYSTEMCRC2, NULL, 0, "Recognised progs as outdated CSQC module");
|
||||||
break;
|
break;
|
||||||
case 52195: //this is what DP requires. don't print it as the warning that it is as that would royally piss off xonotic and their use of -Werror.
|
case 52195: //this is what DP requires. don't print it as the warning that it is as that would royally piss off xonotic and their use of -Werror.
|
||||||
externs->Printf("Recognised progs as DP-specific CSQC module\n");
|
externs->Printf("Recognised progs as DP-specific CSQC module\n");
|
||||||
break;
|
break;
|
||||||
case 10020:
|
case 10020:
|
||||||
if (verbose)
|
if (verbose >= VERBOSE_STANDARD)
|
||||||
externs->Printf("Recognised progs as a MenuQC module\n");
|
externs->Printf("Recognised progs as a MenuQC module\n");
|
||||||
break;
|
break;
|
||||||
|
|
||||||
case 32401:
|
case 32401:
|
||||||
QCC_PR_Warning(WARN_SYSTEMCRC, NULL, 0, "please update your tenebrae system defs.\n");
|
QCC_PR_Warning(WARN_SYSTEMCRC, NULL, 0, "please update your tenebrae system defs.");
|
||||||
break;
|
break;
|
||||||
default:
|
default:
|
||||||
QCC_PR_Warning(WARN_SYSTEMCRC, NULL, 0, "system defs not recognised from quake nor clones, probably buggy (sys)defs.qc\n");
|
QCC_PR_Warning(WARN_SYSTEMCRC, NULL, 0, "system defs not recognised from quake nor clones, probably buggy (sys)defs.qc");
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -4497,11 +4499,15 @@ static void QCC_PR_CommandLinePrecompilerOptions (void)
|
||||||
{ //explicit output file
|
{ //explicit output file
|
||||||
i++;
|
i++;
|
||||||
strcpy(destfile, myargv[i]);
|
strcpy(destfile, myargv[i]);
|
||||||
|
if (!destfile_explicit)
|
||||||
|
verbose--;
|
||||||
destfile_explicit = true;
|
destfile_explicit = true;
|
||||||
}
|
}
|
||||||
else if ( !strncmp(myargv[i], "-o", 2) )
|
else if ( !strncmp(myargv[i], "-o", 2) )
|
||||||
{ //explicit output file
|
{ //explicit output file
|
||||||
strcpy(destfile, myargv[i]+2);
|
strcpy(destfile, myargv[i]+2);
|
||||||
|
if (!destfile_explicit)
|
||||||
|
verbose--;
|
||||||
destfile_explicit = true;
|
destfile_explicit = true;
|
||||||
}
|
}
|
||||||
else if ( !strcmp(myargv[i], "-qc") )
|
else if ( !strcmp(myargv[i], "-qc") )
|
||||||
|
@ -4996,7 +5002,7 @@ static void QCC_SetDefaultProperties (void)
|
||||||
qcc_framerate = 0; //depends on target (engine's OP_STATE)
|
qcc_framerate = 0; //depends on target (engine's OP_STATE)
|
||||||
ForcedCRC = 0;
|
ForcedCRC = 0;
|
||||||
defaultstatic = 0;
|
defaultstatic = 0;
|
||||||
verbose = 0;
|
verbose = VERBOSE_PROGRESS;
|
||||||
*qccmsourcedir = 0;
|
*qccmsourcedir = 0;
|
||||||
QCC_PR_CloseProcessor();
|
QCC_PR_CloseProcessor();
|
||||||
|
|
||||||
|
@ -5871,7 +5877,7 @@ void QCC_FinishCompile(void)
|
||||||
|
|
||||||
if (donesomething)
|
if (donesomething)
|
||||||
{
|
{
|
||||||
if (verbose)
|
if (verbose >= VERBOSE_STANDARD)
|
||||||
{
|
{
|
||||||
externs->Printf ("Compile Complete\n\n");
|
externs->Printf ("Compile Complete\n\n");
|
||||||
|
|
||||||
|
@ -5926,7 +5932,7 @@ void QCC_FinishCompile(void)
|
||||||
|
|
||||||
externs->Printf("numtemps %u\n", (unsigned)tempsused);
|
externs->Printf("numtemps %u\n", (unsigned)tempsused);
|
||||||
}
|
}
|
||||||
if (!flag_msvcstyle)
|
if (!flag_msvcstyle && verbose >= VERBOSE_PROGRESS)
|
||||||
externs->Printf("Done. %i warnings\n", pr_warning_count);
|
externs->Printf("Done. %i warnings\n", pr_warning_count);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -107,7 +107,7 @@ static int logprintf(const char *format, ...)
|
||||||
#endif
|
#endif
|
||||||
va_end (argptr);
|
va_end (argptr);
|
||||||
|
|
||||||
printf("%s", string);
|
fprintf(stderr, "%s", string);
|
||||||
// fputs(string, stderr);
|
// fputs(string, stderr);
|
||||||
if (logfile)
|
if (logfile)
|
||||||
fputs(string, logfile);
|
fputs(string, logfile);
|
||||||
|
|
|
@ -482,13 +482,13 @@ void(float width, float height, float do2d) CSQC_UpdateView =
|
||||||
|
|
||||||
void() CSQC_Input_Frame =
|
void() CSQC_Input_Frame =
|
||||||
{
|
{
|
||||||
vector t, o;
|
|
||||||
if (autocvar_ca_show) //when we're using the UI, don't send any attack or jump stuff. these are generally annoying modifiers or so
|
if (autocvar_ca_show) //when we're using the UI, don't send any attack or jump stuff. these are generally annoying modifiers or so
|
||||||
input_buttons = 0;
|
input_buttons = 0;
|
||||||
|
|
||||||
#ifdef WALLBROWSERS
|
#ifdef WALLBROWSERS
|
||||||
if ((input_buttons & 1) && pointedshadername == "")
|
if ((input_buttons & 1) && pointedshadername == "")
|
||||||
{
|
{
|
||||||
|
vector t, o;
|
||||||
t = mousefar;
|
t = mousefar;
|
||||||
o = mousenear;
|
o = mousenear;
|
||||||
if (vlen(o - t) > 8192)
|
if (vlen(o - t) > 8192)
|
||||||
|
|
|
@ -1,4 +1,4 @@
|
||||||
../csaddon.dat
|
#output "../csaddon.dat"
|
||||||
//pr_dumpplatform -FFTE -Fdefines -TCS -O csplat
|
//pr_dumpplatform -FFTE -Fdefines -TCS -O csplat
|
||||||
|
|
||||||
//#pragma flag enable assumeint
|
//#pragma flag enable assumeint
|
||||||
|
@ -9,6 +9,8 @@
|
||||||
#pragma target FTE
|
#pragma target FTE
|
||||||
//#pragma optimise 2
|
//#pragma optimise 2
|
||||||
//#pragma optimise no-filename
|
//#pragma optimise no-filename
|
||||||
|
|
||||||
|
#includelist
|
||||||
csplat.qc
|
csplat.qc
|
||||||
csfixups.qc
|
csfixups.qc
|
||||||
|
|
||||||
|
@ -26,4 +28,4 @@ editor_particles.qc
|
||||||
menu.qc
|
menu.qc
|
||||||
cam.qc
|
cam.qc
|
||||||
csaddon.qc
|
csaddon.qc
|
||||||
|
#endlist
|
|
@ -271,8 +271,8 @@ void(entedit_t *nent) editor_ents_updated =
|
||||||
|
|
||||||
for (i = 0; i < 8; i++)
|
for (i = 0; i < 8; i++)
|
||||||
{
|
{
|
||||||
nent->bboxverts[i].st = (vec2){{0,0}};
|
nent->bboxverts[i].st = (vec2){0,0};
|
||||||
nent->bboxverts[i].rgba = (vec4){{nent->colourmod[0], nent->colourmod[1], nent->colourmod[2], nent->alpha?nent->alpha:1}};
|
nent->bboxverts[i].rgba = (vec4){nent->colourmod[0], nent->colourmod[1], nent->colourmod[2], nent->alpha?nent->alpha:1};
|
||||||
nent->bboxverts[i].xyz[0] = nent->org[0] + ((i&1i)?nent->maxs[0]:nent->mins[0]);
|
nent->bboxverts[i].xyz[0] = nent->org[0] + ((i&1i)?nent->maxs[0]:nent->mins[0]);
|
||||||
nent->bboxverts[i].xyz[1] = nent->org[1] + (((i&2i)?nent->maxs[1]:nent->mins[1]));
|
nent->bboxverts[i].xyz[1] = nent->org[1] + (((i&2i)?nent->maxs[1]:nent->mins[1]));
|
||||||
nent->bboxverts[i].xyz[2] = nent->org[2] + ((i&4)?nent->maxs[2]:nent->mins[2]);
|
nent->bboxverts[i].xyz[2] = nent->org[2] + ((i&4)?nent->maxs[2]:nent->mins[2]);
|
||||||
|
|
|
@ -36,8 +36,10 @@ static vector(vector v) vtodpp =
|
||||||
//so fucking disgustingly ugly.
|
//so fucking disgustingly ugly.
|
||||||
if (dp_workarounds)
|
if (dp_workarounds)
|
||||||
{
|
{
|
||||||
|
#pragma warning disable F333
|
||||||
v_x *= cvar("vid_width") / cvar("vid_conwidth");
|
v_x *= cvar("vid_width") / cvar("vid_conwidth");
|
||||||
v_y *= cvar("vid_height") / cvar("vid_conheight");
|
v_y *= cvar("vid_height") / cvar("vid_conheight");
|
||||||
|
#pragma warning enable F333
|
||||||
}
|
}
|
||||||
#endif
|
#endif
|
||||||
return v;
|
return v;
|
||||||
|
|
|
@ -149,6 +149,7 @@ var uiinfo_t ui =
|
||||||
|
|
||||||
void() queryscreensize =
|
void() queryscreensize =
|
||||||
{
|
{
|
||||||
|
#pragma warning disable F333
|
||||||
#ifdef MENU
|
#ifdef MENU
|
||||||
//there is no proper way to do this.
|
//there is no proper way to do this.
|
||||||
//fte thus has special checks for these cvars, and they should not be autocvars if you want them to work properly.
|
//fte thus has special checks for these cvars, and they should not be autocvars if you want them to work properly.
|
||||||
|
@ -169,6 +170,7 @@ void() queryscreensize =
|
||||||
}
|
}
|
||||||
#endif
|
#endif
|
||||||
#endif
|
#endif
|
||||||
|
#pragma warning enable F333
|
||||||
};
|
};
|
||||||
|
|
||||||
//helper function
|
//helper function
|
||||||
|
|
Loading…
Reference in a new issue