X-Git-Url: https://de.git.xonotic.org/?p=xonotic%2Fdarkplaces.git;a=blobdiff_plain;f=progsvm.h;h=92ead5dc772a8393f7a7470fee8cec35be11a78c;hp=ea08900d2d1ae0d35d43a3db91471cb6d6e932be;hb=HEAD;hpb=775c0f6d056c37d2e23f9a96ec827023fe5e3404 diff --git a/progsvm.h b/progsvm.h index ea08900d..32632f30 100644 --- a/progsvm.h +++ b/progsvm.h @@ -74,23 +74,27 @@ typedef struct prvm_required_field_s const char *name; } prvm_required_field_t; - +#define PRVM_EDICT_MARK_WAIT_FOR_SETORIGIN -1 +#define PRVM_EDICT_MARK_SETORIGIN_CAUGHT -2 // AK: I dont call it engine private cause it doesnt really belongs to the engine // it belongs to prvm. typedef struct prvm_edict_private_s { - qbool free; - double freetime; // realtime of last change to "free" (i.e. also set on allocation) - int mark; // used during leaktest (0 = unref, >0 = referenced); special values during server physics: -#define PRVM_EDICT_MARK_WAIT_FOR_SETORIGIN -1 -#define PRVM_EDICT_MARK_SETORIGIN_CAUGHT -2 + // mark for the leak detector + int mark; + // place in the code where it was allocated (for the leak detector) const char *allocation_origin; } prvm_edict_private_t; typedef struct prvm_edict_s { + // true if this edict is unused + qbool free; + // sv.time when the object was freed (to prevent early reuse which could + // mess up client interpolation or obscure severe QuakeC bugs) + double freetime; + // engine-private fields (stored in dynamically resized array) - //edict_engineprivate_t *e; union { prvm_edict_private_t *required; @@ -229,7 +233,9 @@ extern prvm_eval_t prvm_badvalue; #endif //============================================================================ -#define PRVM_OP_STATE 1 +// prog->flag +#define PRVM_OP_STATE 1 +#define PRVM_CSQC_SIMPLE 2 #ifdef DP_SMALLMEMORY #define PRVM_MAX_STACK_DEPTH 128 @@ -693,7 +699,7 @@ typedef struct prvm_prog_s const char *name; // [INIT] // flag - used to store general flags like PRVM_GE_SELF, etc. - int flag; + unsigned flag; const char **extensionstring; // [INIT] @@ -713,7 +719,7 @@ typedef struct prvm_prog_s // prvm_builtin_mem_t *mem_list; -// now passed as parameter of PRVM_LoadProgs +// now passed as parameter of PRVM_Prog_Load // char **required_func; // int numrequiredfunc; @@ -818,7 +824,7 @@ void PRVM_CallProfile_f(struct cmd_state_s *cmd); void PRVM_PrintFunction_f(struct cmd_state_s *cmd); void PRVM_PrintState(prvm_prog_t *prog, int stack_index); -void PRVM_Crash(prvm_prog_t *prog); +void PRVM_Crash(void); void PRVM_ShortStackTrace(prvm_prog_t *prog, char *buf, size_t bufsize); const char *PRVM_AllocationOrigin(prvm_prog_t *prog); void PRVM_GarbageCollection(prvm_prog_t *prog); @@ -897,7 +903,8 @@ void PRVM_ED_PrintNum (prvm_prog_t *prog, int ent, const char *wildcard_fieldnam const char *PRVM_GetString(prvm_prog_t *prog, int num); int PRVM_SetEngineString(prvm_prog_t *prog, const char *s); const char *PRVM_ChangeEngineString(prvm_prog_t *prog, int i, const char *s); -int PRVM_SetTempString(prvm_prog_t *prog, const char *s); +/// Takes an strlen (not a buffer size). +int PRVM_SetTempString(prvm_prog_t *prog, const char *s, size_t slen); int PRVM_AllocString(prvm_prog_t *prog, size_t bufferlength, char **pointer); void PRVM_FreeString(prvm_prog_t *prog, int num); @@ -917,7 +924,7 @@ Load a program with LoadProgs */ // Load expects to be called right after Reset void PRVM_Prog_Init(prvm_prog_t *prog, struct cmd_state_s *cmd); -void PRVM_Prog_Load(prvm_prog_t *prog, const char *filename, unsigned char *data, int64_t size, int numrequiredfunc, const char **required_func, int numrequiredfields, prvm_required_field_t *required_field, int numrequiredglobals, prvm_required_field_t *required_global); +void PRVM_Prog_Load(prvm_prog_t *prog, const char *filename, unsigned char *data, fs_offset_t size, void CheckRequiredFuncs(prvm_prog_t *prog, const char *filename), int numrequiredfields, prvm_required_field_t *required_field, int numrequiredglobals, prvm_required_field_t *required_global); void PRVM_Prog_Reset(prvm_prog_t *prog); void PRVM_StackTrace(prvm_prog_t *prog);