From b4fa95ab15158dd4e1eea2922d877e4074d2057d Mon Sep 17 00:00:00 2001 From: Christoph Oelckers Date: Sat, 12 Aug 2017 10:04:06 +0200 Subject: [PATCH] - handle state label resolution in a non-actor cpntext more gracefully. Note that this is merely a hotfix. Properly handling this to allow universal use of state scopes will require more work in cases where a scoped state is being accessed through a non-self pointer. --- src/scripting/backend/codegen.cpp | 8 ++++---- src/scripting/backend/codegen.h | 2 +- 2 files changed, 5 insertions(+), 5 deletions(-) diff --git a/src/scripting/backend/codegen.cpp b/src/scripting/backend/codegen.cpp index 4a1cc7d77..4ce0d4ec0 100644 --- a/src/scripting/backend/codegen.cpp +++ b/src/scripting/backend/codegen.cpp @@ -11101,7 +11101,7 @@ ExpEmit FxRuntimeStateIndex::Emit(VMFunctionBuilder *build) // //========================================================================== -FxMultiNameState::FxMultiNameState(const char *_statestring, const FScriptPosition &pos) +FxMultiNameState::FxMultiNameState(const char *_statestring, const FScriptPosition &pos, PClassActor *checkclass) :FxExpression(EFX_MultiNameState, pos) { FName scopename; @@ -11119,7 +11119,7 @@ FxMultiNameState::FxMultiNameState(const char *_statestring, const FScriptPositi } names = MakeStateNameList(statestring); names.Insert(0, scopename); - scope = nullptr; + scope = checkclass; } //========================================================================== @@ -11135,8 +11135,8 @@ FxExpression *FxMultiNameState::Resolve(FCompileContext &ctx) int symlabel; auto vclass = PType::toClass(ctx.Class); - assert(vclass != nullptr); - auto clstype = ValidateActor(vclass->Descriptor); + //assert(vclass != nullptr); + auto clstype = vclass == nullptr? nullptr : ValidateActor(vclass->Descriptor); if (names[0] == NAME_None) { diff --git a/src/scripting/backend/codegen.h b/src/scripting/backend/codegen.h index 2121eff7a..58ac84d85 100644 --- a/src/scripting/backend/codegen.h +++ b/src/scripting/backend/codegen.h @@ -2089,7 +2089,7 @@ class FxMultiNameState : public FxExpression TArray names; public: - FxMultiNameState(const char *statestring, const FScriptPosition &pos); + FxMultiNameState(const char *statestring, const FScriptPosition &pos, PClassActor *checkclass = nullptr); FxExpression *Resolve(FCompileContext&); };