MCPcopy Create free account
hub / github.com/JACoders/OpenJK / PC_Directive_define

Function PC_Directive_define

codemp/botlib/l_precomp.cpp:1201–1337  ·  view source on GitHub ↗

end of the function PC_Directive_undef ============================================================================ Parameter: - Returns: - Changes Globals: - ============================================================================

Source from the content-addressed store, hash-verified

1199// Changes Globals: -
1200//============================================================================
1201int PC_Directive_define(source_t *source)
1202{
1203 token_t token, *t, *last;
1204 define_t *define;
1205
1206 if (source->skip > 0) return qtrue;
1207 //
1208 if (!PC_ReadLine(source, &token))
1209 {
1210 SourceError(source, "#define without name");
1211 return qfalse;
1212 } //end if
1213 if (token.type != TT_NAME)
1214 {
1215 PC_UnreadSourceToken(source, &token);
1216 SourceError(source, "expected name after #define, found %s", token.string);
1217 return qfalse;
1218 } //end if
1219 //check if the define already exists
1220#if DEFINEHASHING
1221 define = PC_FindHashedDefine(source->definehash, token.string);
1222#else
1223 define = PC_FindDefine(source->defines, token.string);
1224#endif //DEFINEHASHING
1225 if (define)
1226 {
1227 if (define->flags & DEFINE_FIXED)
1228 {
1229 SourceError(source, "can't redefine %s", token.string);
1230 return qfalse;
1231 } //end if
1232 SourceWarning(source, "redefinition of %s", token.string);
1233 //unread the define name before executing the #undef directive
1234 PC_UnreadSourceToken(source, &token);
1235 if (!PC_Directive_undef(source)) return qfalse;
1236 //if the define was not removed (define->flags & DEFINE_FIXED)
1237#if DEFINEHASHING
1238 define = PC_FindHashedDefine(source->definehash, token.string);
1239#else
1240 define = PC_FindDefine(source->defines, token.string);
1241#endif //DEFINEHASHING
1242 } //end if
1243 //allocate define
1244 define = (define_t *) GetMemory(sizeof(define_t));
1245 Com_Memset(define, 0, sizeof(define_t));
1246 define->name = (char *) GetMemory(strlen(token.string) + 1);
1247 strcpy(define->name, token.string);
1248 //add the define to the source
1249#if DEFINEHASHING
1250 PC_AddDefineToHash(define, source->definehash);
1251#else //DEFINEHASHING
1252 define->next = source->defines;
1253 source->defines = define;
1254#endif //DEFINEHASHING
1255 //if nothing is defined, just return
1256 if (!PC_ReadLine(source, &token)) return qtrue;
1257 //if it is a define with parameters
1258 if (!PC_WhiteSpaceBeforeToken(&token) && !strcmp(token.string, "("))

Callers 1

PC_DefineFromStringFunction · 0.85

Calls 14

PC_ReadLineFunction · 0.85
SourceErrorFunction · 0.85
PC_UnreadSourceTokenFunction · 0.85
PC_FindHashedDefineFunction · 0.85
PC_FindDefineFunction · 0.85
SourceWarningFunction · 0.85
PC_Directive_undefFunction · 0.85
GetMemoryFunction · 0.85
PC_AddDefineToHashFunction · 0.85
PC_WhiteSpaceBeforeTokenFunction · 0.85
PC_CheckTokenStringFunction · 0.85
PC_FindDefineParmFunction · 0.85

Tested by

no test coverage detected