Skip to content

Commit

Permalink
- fixed some issues with setup parts for ZScript in the wrong place.
Browse files Browse the repository at this point in the history
This never showed on GZDoom as an error but on Raze which has no actor classes it caused incompletely set up class descriptors.
  • Loading branch information
coelckers committed Jun 14, 2020
1 parent 248aa8b commit 75cd00a
Show file tree
Hide file tree
Showing 13 changed files with 74 additions and 167 deletions.
3 changes: 1 addition & 2 deletions src/common/audio/sound/s_reverbedit.cpp
Expand Up @@ -39,9 +39,8 @@
#include "templates.h"
#include "filesystem.h"
#include "i_system.h"
#include "m_misc.h"
#include "printf.h"

#include "i_specialpaths.h"
#include "c_cvars.h"
#include "c_dispatch.h"
#include "vm.h"
Expand Down
28 changes: 28 additions & 0 deletions src/common/objects/dobjtype.cpp
Expand Up @@ -922,3 +922,31 @@ unsigned GetVirtualIndex(PClass *cls, const char *funcname)
return VIndex;
}


void PClass::InitializeDefaults()
{
if (VMType != nullptr) // purely internal classes have no symbol table
{
if (bRuntimeClass)
{
// Copy parent values from the parent defaults.
assert(ParentClass != nullptr);
if (Defaults != nullptr) ParentClass->InitializeSpecials(Defaults, ParentClass->Defaults, &PClass::SpecialInits);
for (const PField* field : Fields)
{
if (!(field->Flags & VARF_Native) && !(field->Flags & VARF_Meta))
{
field->Type->SetDefaultValue(Defaults, unsigned(field->Offset), &SpecialInits);
}
}
}
if (Meta != nullptr) ParentClass->InitializeSpecials(Meta, ParentClass->Meta, &PClass::MetaInits);
for (const PField* field : Fields)
{
if (!(field->Flags & VARF_Native) && (field->Flags & VARF_Meta))
{
field->Type->SetDefaultValue(Meta, unsigned(field->Offset), &MetaInits);
}
}
}
}
1 change: 1 addition & 0 deletions src/common/objects/dobjtype.h
Expand Up @@ -46,6 +46,7 @@ class PClass
int FindVirtualIndex(FName name, PFunction::Variant *variant, PFunction *parentfunc);
PSymbol *FindSymbol(FName symname, bool searchparents) const;
PField *AddField(FName name, PType *type, uint32_t flags);
void InitializeDefaults();

static void StaticInit();
static void StaticShutdown();
Expand Down
13 changes: 13 additions & 0 deletions src/common/scripting/frontend/zcc_compile.cpp
Expand Up @@ -650,6 +650,7 @@ int ZCCCompiler::Compile()
CreateStructTypes();
CompileAllConstants();
CompileAllFields();
InitDefaults();
InitFunctions();
return FScriptPosition::ErrorCounter;
}
Expand Down Expand Up @@ -1942,6 +1943,18 @@ void ZCCCompiler::SetImplicitArgs(TArray<PType*>* args, TArray<uint32_t>* argfla
}


void ZCCCompiler::InitDefaults()
{
for (auto c : Classes)
{
if (c->ClassType()->ParentClass)
{
auto ti = c->ClassType();
ti->InitializeDefaults();
}
}
}

//==========================================================================
//
//
Expand Down
1 change: 1 addition & 0 deletions src/common/scripting/frontend/zcc_compile.h
Expand Up @@ -139,6 +139,7 @@ class ZCCCompiler
void CompileFunction(ZCC_StructWork *c, ZCC_FuncDeclarator *f, bool forclass);

void InitFunctions();
virtual void InitDefaults();

TArray<ZCC_ConstantDef *> Constants;
TArray<ZCC_StructWork *> Structs;
Expand Down
23 changes: 23 additions & 0 deletions src/common/scripting/interface/vmnatives.cpp
Expand Up @@ -46,6 +46,7 @@
#include "vm.h"
#include "gstrings.h"
#include "printf.h"
#include "s_music.h"


//==========================================================================
Expand Down Expand Up @@ -75,6 +76,20 @@ DEFINE_ACTION_FUNCTION(_TexMan, GetName)
ACTION_RETURN_STRING(retval);
}

static int CheckForTexture(const FString& name, int type, int flags)
{
return TexMan.CheckForTexture(name, static_cast<ETextureType>(type), flags).GetIndex();
}

DEFINE_ACTION_FUNCTION_NATIVE(_TexMan, CheckForTexture, CheckForTexture)
{
PARAM_PROLOGUE;
PARAM_STRING(name);
PARAM_INT(type);
PARAM_INT(flags);
ACTION_RETURN_INT(CheckForTexture(name, type, flags));
}

//==========================================================================
//
//
Expand Down Expand Up @@ -618,3 +633,11 @@ DEFINE_ACTION_FUNCTION(_Console, Printf)
Printf("%s\n", s.GetChars());
return 0;
}

DEFINE_GLOBAL_NAMED(mus_playing, musplaying);
DEFINE_FIELD_X(MusPlayingInfo, MusPlayingInfo, name);
DEFINE_FIELD_X(MusPlayingInfo, MusPlayingInfo, baseorder);
DEFINE_FIELD_X(MusPlayingInfo, MusPlayingInfo, loop);

DEFINE_GLOBAL_NAMED(PClass::AllClasses, AllClasses)
DEFINE_GLOBAL(Bindings)
4 changes: 4 additions & 0 deletions src/common/scripting/vm/vmexec.h
Expand Up @@ -360,6 +360,10 @@ static int ExecScriptFunc(VMFrameStack *stack, VMReturn *ret, int numret)
OP(SS):
ASSERTA(a); ASSERTS(B); ASSERTKD(C);
GETADDR(PA,KC,X_WRITE_NIL);
#ifdef _DEBUG
// Should never happen, if it does it indicates a compiler side problem.
if (((FString*)ptr)->GetChars() == nullptr) ThrowAbortException(X_OTHER, "Uninitialized string");
#endif
*(FString *)ptr = reg.s[B];
NEXTOP;
OP(SS_R):
Expand Down
115 changes: 0 additions & 115 deletions src/d_gui.h

This file was deleted.

1 change: 0 additions & 1 deletion src/g_game.cpp
Expand Up @@ -3086,7 +3086,6 @@ DEFINE_GLOBAL(playeringame)
DEFINE_GLOBAL(PlayerClasses)
DEFINE_GLOBAL_NAMED(Skins, PlayerSkins)
DEFINE_GLOBAL(consoleplayer)
DEFINE_GLOBAL_NAMED(PClass::AllClasses, AllClasses)
DEFINE_GLOBAL_NAMED(PClassActor::AllActorClasses, AllActorClasses)
DEFINE_GLOBAL_NAMED(primaryLevel, Level)
DEFINE_GLOBAL(validcount)
Expand Down
26 changes: 1 addition & 25 deletions src/gamedata/info.cpp
Expand Up @@ -510,31 +510,7 @@ void PClassActor::InitializeDefaults()
else memset(Meta, 0, MetaSize);
}
}

if (VMType != nullptr) // purely internal classes have no symbol table
{
if (bRuntimeClass)
{
// Copy parent values from the parent defaults.
assert(ParentClass != nullptr);
if (Defaults != nullptr) ParentClass->InitializeSpecials(Defaults, ParentClass->Defaults, &PClass::SpecialInits);
for (const PField* field : Fields)
{
if (!(field->Flags & VARF_Native) && !(field->Flags & VARF_Meta))
{
field->Type->SetDefaultValue(Defaults, unsigned(field->Offset), &SpecialInits);
}
}
}
if (Meta != nullptr) ParentClass->InitializeSpecials(Meta, ParentClass->Meta, &PClass::MetaInits);
for (const PField* field : Fields)
{
if (!(field->Flags & VARF_Native) && (field->Flags & VARF_Meta))
{
field->Type->SetDefaultValue(Meta, unsigned(field->Offset), &MetaInits);
}
}
}
PClass::InitializeDefaults();
}

//==========================================================================
Expand Down
22 changes: 0 additions & 22 deletions src/scripting/vmthunks.cpp
Expand Up @@ -1607,22 +1607,6 @@ DEFINE_ACTION_FUNCTION_NATIVE(FLevelLocals, ReplaceTextures, ReplaceTextures)
return 0;
}

static int CheckForTexture(const FString& name, int type, int flags)
{
return TexMan.CheckForTexture(name, static_cast<ETextureType>(type), flags).GetIndex();
}

DEFINE_ACTION_FUNCTION_NATIVE(_TexMan, CheckForTexture, CheckForTexture)
{
PARAM_PROLOGUE;
PARAM_STRING(name);
PARAM_INT(type);
PARAM_INT(flags);
ACTION_RETURN_INT(CheckForTexture(name, type, flags));
}



//=====================================================================================
//
// secplane_t exports
Expand Down Expand Up @@ -2920,12 +2904,6 @@ DEFINE_FIELD(DHUDFont, mFont);

DEFINE_GLOBAL(StatusBar);

DEFINE_GLOBAL(Bindings)
DEFINE_GLOBAL(AutomapBindings)

DEFINE_GLOBAL_NAMED(mus_playing, musplaying);
DEFINE_FIELD_X(MusPlayingInfo, MusPlayingInfo, name);
DEFINE_FIELD_X(MusPlayingInfo, MusPlayingInfo, baseorder);
DEFINE_FIELD_X(MusPlayingInfo, MusPlayingInfo, loop);

DEFINE_GLOBAL(generic_ui)
2 changes: 1 addition & 1 deletion src/scripting/zscript/zcc_compile_doom.cpp
Expand Up @@ -648,7 +648,7 @@ void ZCCDoomCompiler::InitDefaults()
if (c->Defaults.Size()) Error(c->cls, "%s: Non-actor classes may not have defaults", c->ClassType()->TypeName.GetChars());
if (c->ClassType()->ParentClass)
{
auto ti = static_cast<PClassActor *>(c->ClassType());
auto ti = c->ClassType();
ti->InitializeDefaults();
}
}
Expand Down
2 changes: 1 addition & 1 deletion src/scripting/zscript/zcc_compile_doom.h
Expand Up @@ -24,7 +24,7 @@ class ZCCDoomCompiler : public ZCCCompiler
void DispatchScriptProperty(PProperty *prop, ZCC_PropertyStmt *property, AActor *defaults, Baggage &bag);
void ProcessDefaultProperty(PClassActor *cls, ZCC_PropertyStmt *prop, Baggage &bag);
void ProcessDefaultFlag(PClassActor *cls, ZCC_FlagStmt *flg);
void InitDefaults();
void InitDefaults() override final;
FxExpression *SetupActionFunction(PClass *cls, ZCC_TreeNode *af, int StateFlags);
void CompileStates();
int CheckActionKeyword(ZCC_FuncDeclarator *f, uint32_t &varflags, int useflags, ZCC_StructWork *c);
Expand Down

0 comments on commit 75cd00a

Please sign in to comment.