From 0e43e3408da72e21bec405487826195b7707b2a5 Mon Sep 17 00:00:00 2001 From: rdeioris Date: Wed, 13 Nov 2024 08:08:05 +0100 Subject: [PATCH] added support for UE 5.5 --- MathVM.uplugin | 2 +- Source/MathVM/Private/MathVMCompiler.cpp | 16 ++++++++-------- Source/MathVM/Private/MathVMRuntime.cpp | 6 +++--- Source/MathVM/Public/MathVM.h | 6 ++++++ 4 files changed, 18 insertions(+), 12 deletions(-) diff --git a/MathVM.uplugin b/MathVM.uplugin index 615be72..7a92e0a 100644 --- a/MathVM.uplugin +++ b/MathVM.uplugin @@ -1,7 +1,7 @@ { "FileVersion": 3, "Version": 1, - "VersionName": "20240424", + "VersionName": "20241123", "FriendlyName": "MathVM", "Description": "Math Expressions Evaluator", "Category": "Other", diff --git a/Source/MathVM/Private/MathVMCompiler.cpp b/Source/MathVM/Private/MathVMCompiler.cpp index 896e36f..539fb04 100644 --- a/Source/MathVM/Private/MathVMCompiler.cpp +++ b/Source/MathVM/Private/MathVMCompiler.cpp @@ -34,7 +34,7 @@ bool FMathVMBase::Compile() { while (!OperatorStack.IsEmpty() && OperatorStack.Last()->TokenType == EMathVMTokenType::Operator && OperatorStack.Last()->Precedence <= Token.Precedence) { - OutputQueue.Add(OperatorStack.Pop(false)); + OutputQueue.Add(MATHVM_POP(OperatorStack)); } OperatorStack.Add(&Token); } @@ -42,7 +42,7 @@ bool FMathVMBase::Compile() { while (!OperatorStack.IsEmpty() && OperatorStack.Last()->TokenType != EMathVMTokenType::OpenParenthesis) { - OutputQueue.Add(OperatorStack.Pop(false)); + OutputQueue.Add(MATHVM_POP(OperatorStack)); } if (FunctionHasFirstArgStack.IsEmpty() || !FunctionHasFirstArgStack.Last()) @@ -90,13 +90,13 @@ bool FMathVMBase::Compile() { while (!OperatorStack.IsEmpty() && OperatorStack.Last()->TokenType != EMathVMTokenType::OpenParenthesis) { - OutputQueue.Add(OperatorStack.Pop(false)); + OutputQueue.Add(MATHVM_POP(OperatorStack)); } if (OperatorStack.IsEmpty() || OperatorStack.Last()->TokenType != EMathVMTokenType::OpenParenthesis) { return SetError("Expected open parenthesis"); } - OperatorStack.Pop(false); + MATHVM_POP(OperatorStack); if (!OperatorStack.IsEmpty()) { @@ -105,13 +105,13 @@ bool FMathVMBase::Compile() // this is basically the only case the compiler needs a const_cast FMathVMToken* FunctionToken = const_cast(OperatorStack.Last()); - FunctionToken->DetectedNumArgs = FunctionsArgsStack.Pop(false) + (FunctionHasFirstArgStack.Pop() ? 1 : 0); + FunctionToken->DetectedNumArgs = MATHVM_POP(FunctionsArgsStack) + (FunctionHasFirstArgStack.Pop() ? 1 : 0); if (FunctionToken->NumArgs >= 0 && FunctionToken->DetectedNumArgs != FunctionToken->NumArgs) { return SetError(FString::Printf(TEXT("Function %s expects %d argument%s (detected %d)"), *(FunctionToken->Value), FunctionToken->NumArgs, FunctionToken->NumArgs == 1 ? TEXT("") : TEXT("s"), FunctionToken->DetectedNumArgs)); } - OutputQueue.Add(OperatorStack.Pop(false)); + OutputQueue.Add(MATHVM_POP(OperatorStack)); } } } @@ -123,7 +123,7 @@ bool FMathVMBase::Compile() { return SetError("Mismatched parenthesis"); } - OutputQueue.Add(OperatorStack.Pop(false)); + OutputQueue.Add(MATHVM_POP(OperatorStack)); } Statements.Add(OutputQueue); OutputQueue.Empty(); @@ -139,7 +139,7 @@ bool FMathVMBase::Compile() { return SetError("Mismatched parenthesis"); } - OutputQueue.Add(OperatorStack.Pop(false)); + OutputQueue.Add(MATHVM_POP(OperatorStack)); } Statements.Add(OutputQueue); diff --git a/Source/MathVM/Private/MathVMRuntime.cpp b/Source/MathVM/Private/MathVMRuntime.cpp index 079c7fd..07bda19 100644 --- a/Source/MathVM/Private/MathVMRuntime.cpp +++ b/Source/MathVM/Private/MathVMRuntime.cpp @@ -97,7 +97,7 @@ bool FMathVMBase::Execute(TMap& LocalVariables, const int32 Pop return false; } - const FMathVMToken* LastToken = CallContext.Stack.Pop(false); + const FMathVMToken* LastToken = MATHVM_POP(CallContext.Stack); if (LastToken->TokenType == EMathVMTokenType::Number) { @@ -165,7 +165,7 @@ bool FMathVMCallContext::PopArgument(double& Value) return false; } - const FMathVMToken* Token = Stack.Pop(false); + const FMathVMToken* Token = MATHVM_POP(Stack); if (Token->TokenType == EMathVMTokenType::Variable) { @@ -208,7 +208,7 @@ bool FMathVMCallContext::PopName(FString& Name) return false; } - const FMathVMToken* Token = Stack.Pop(false); + const FMathVMToken* Token = MATHVM_POP(Stack); if (Token->TokenType == EMathVMTokenType::Variable) { diff --git a/Source/MathVM/Public/MathVM.h b/Source/MathVM/Public/MathVM.h index 5efcae7..6d0f8c2 100644 --- a/Source/MathVM/Public/MathVM.h +++ b/Source/MathVM/Public/MathVM.h @@ -12,6 +12,12 @@ #define MATHVM_RETURN(x) return CallContext.PushResult(x) #define MATHVM_ERROR(x) return CallContext.SetError(x) +#if ENGINE_MINOR_VERSION >= 5 +#define MATHVM_POP(x) x.Pop(EAllowShrinking::No) +#else +#define MATHVM_POP(x) x.Pop(false) +#endif + enum class EMathVMTokenType : uint8 { Number,