mirror of
https://github.com/beefytech/Beef.git
synced 2025-06-08 11:38:21 +02:00
Fixed issue with comptime strings ending up in executable
This commit is contained in:
parent
ca3abc617f
commit
b261615bd9
4 changed files with 21 additions and 1 deletions
|
@ -8,6 +8,7 @@ BfDeferEvalChecker::BfDeferEvalChecker()
|
||||||
mRootNode = NULL;
|
mRootNode = NULL;
|
||||||
mNeedsDeferEval = false;
|
mNeedsDeferEval = false;
|
||||||
mDeferLiterals = true;
|
mDeferLiterals = true;
|
||||||
|
mDeferStrings = false;
|
||||||
mDeferDelegateBind = true;
|
mDeferDelegateBind = true;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -60,6 +61,10 @@ void BfDeferEvalChecker::Visit(BfLiteralExpression* literalExpr)
|
||||||
if (mDeferLiterals)
|
if (mDeferLiterals)
|
||||||
mNeedsDeferEval = true;
|
mNeedsDeferEval = true;
|
||||||
break;
|
break;
|
||||||
|
case BfTypeCode_CharPtr:
|
||||||
|
if (mDeferStrings)
|
||||||
|
mNeedsDeferEval = true;
|
||||||
|
break;
|
||||||
default:
|
default:
|
||||||
mNeedsDeferEval = false;
|
mNeedsDeferEval = false;
|
||||||
}
|
}
|
||||||
|
|
|
@ -12,6 +12,7 @@ public:
|
||||||
bool mNeedsDeferEval;
|
bool mNeedsDeferEval;
|
||||||
bool mDeferDelegateBind;
|
bool mDeferDelegateBind;
|
||||||
bool mDeferLiterals;
|
bool mDeferLiterals;
|
||||||
|
bool mDeferStrings;
|
||||||
|
|
||||||
public:
|
public:
|
||||||
BfDeferEvalChecker();
|
BfDeferEvalChecker();
|
||||||
|
|
|
@ -6031,6 +6031,8 @@ void BfExprEvaluator::ResolveArgValues(BfResolvedArgs& resolvedArgs, BfResolveAr
|
||||||
if (argExpr != NULL)
|
if (argExpr != NULL)
|
||||||
{
|
{
|
||||||
BfDeferEvalChecker deferEvalChecker;
|
BfDeferEvalChecker deferEvalChecker;
|
||||||
|
if ((flags & BfResolveArgsFlag_DeferStrings) != 0)
|
||||||
|
deferEvalChecker.mDeferStrings = true;
|
||||||
deferEvalChecker.mDeferDelegateBind = false;
|
deferEvalChecker.mDeferDelegateBind = false;
|
||||||
deferEvalChecker.Check(argExpr);
|
deferEvalChecker.Check(argExpr);
|
||||||
deferParamEval = deferEvalChecker.mNeedsDeferEval;
|
deferParamEval = deferEvalChecker.mNeedsDeferEval;
|
||||||
|
@ -7424,6 +7426,8 @@ BfTypedValue BfExprEvaluator::CreateCall(BfAstNode* targetSrc, const BfTypedValu
|
||||||
mBfEvalExprFlags = (BfEvalExprFlags)(mBfEvalExprFlags | BfEvalExprFlags_Comptime);
|
mBfEvalExprFlags = (BfEvalExprFlags)(mBfEvalExprFlags | BfEvalExprFlags_Comptime);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
SetAndRestoreValue<bool> prevIgnoreWrites(mModule->mBfIRBuilder->mIgnoreWrites, mModule->mBfIRBuilder->mIgnoreWrites || IsConstEval());
|
||||||
|
|
||||||
if (((moduleMethodInstance.mMethodInstance->mComptimeFlags & BfComptimeFlag_OnlyFromComptime) != 0) &&
|
if (((moduleMethodInstance.mMethodInstance->mComptimeFlags & BfComptimeFlag_OnlyFromComptime) != 0) &&
|
||||||
((mBfEvalExprFlags & BfEvalExprFlags_Comptime) != 0) &&
|
((mBfEvalExprFlags & BfEvalExprFlags_Comptime) != 0) &&
|
||||||
((mModule->mCurMethodInstance == NULL) || (mModule->mCurMethodInstance->mComptimeFlags == BfComptimeFlag_None)) &&
|
((mModule->mCurMethodInstance == NULL) || (mModule->mCurMethodInstance->mComptimeFlags == BfComptimeFlag_None)) &&
|
||||||
|
@ -8558,6 +8562,8 @@ BfTypedValue BfExprEvaluator::CreateCall(BfAstNode* targetSrc, const BfTypedValu
|
||||||
//BF_ASSERT(!methodInstance->GetOwner()->IsInterface());
|
//BF_ASSERT(!methodInstance->GetOwner()->IsInterface());
|
||||||
}
|
}
|
||||||
|
|
||||||
|
prevIgnoreWrites.Restore();
|
||||||
|
|
||||||
if (target.mType != NULL)
|
if (target.mType != NULL)
|
||||||
{
|
{
|
||||||
// When we call a method from a static ctor, that method could access static fields so we need to make sure
|
// When we call a method from a static ctor, that method could access static fields so we need to make sure
|
||||||
|
@ -18770,6 +18776,13 @@ void BfExprEvaluator::DoInvocation(BfAstNode* target, BfMethodBoundExpression* m
|
||||||
SetAndRestoreValue<BfEvalExprFlags> prevEvalExprFlags(mBfEvalExprFlags);
|
SetAndRestoreValue<BfEvalExprFlags> prevEvalExprFlags(mBfEvalExprFlags);
|
||||||
if (isCascade)
|
if (isCascade)
|
||||||
mBfEvalExprFlags = (BfEvalExprFlags)(mBfEvalExprFlags | BfEvalExprFlags_InCascade);
|
mBfEvalExprFlags = (BfEvalExprFlags)(mBfEvalExprFlags | BfEvalExprFlags_InCascade);
|
||||||
|
|
||||||
|
if (((mayBeComptimeCall) && (!mModule->mIsComptimeModule) && (!mModule->mBfIRBuilder->mIgnoreWrites)) ||
|
||||||
|
((mModule->mAttributeState != NULL) && (mModule->mAttributeState->mCustomAttributes != NULL) && (mModule->mAttributeState->mCustomAttributes->Contains(mModule->mCompiler->mConstEvalAttributeTypeDef))))
|
||||||
|
{
|
||||||
|
resolveArgsFlags = (BfResolveArgsFlags)(resolveArgsFlags | BfResolveArgsFlag_DeferParamEval | BfResolveArgsFlag_DeferStrings);
|
||||||
|
}
|
||||||
|
|
||||||
ResolveArgValues(argValues, resolveArgsFlags);
|
ResolveArgValues(argValues, resolveArgsFlags);
|
||||||
|
|
||||||
//
|
//
|
||||||
|
|
|
@ -34,7 +34,8 @@ enum BfResolveArgsFlags
|
||||||
BfResolveArgsFlag_DeferParamEval = 4,
|
BfResolveArgsFlag_DeferParamEval = 4,
|
||||||
BfResolveArgsFlag_AllowUnresolvedTypes = 8,
|
BfResolveArgsFlag_AllowUnresolvedTypes = 8,
|
||||||
BfResolveArgsFlag_InsideStringInterpolationAlloc = 0x10,
|
BfResolveArgsFlag_InsideStringInterpolationAlloc = 0x10,
|
||||||
BfResolveArgsFlag_FromIndexer = 0x20
|
BfResolveArgsFlag_FromIndexer = 0x20,
|
||||||
|
BfResolveArgsFlag_DeferStrings = 0x40
|
||||||
};
|
};
|
||||||
|
|
||||||
enum BfResolveArgFlags
|
enum BfResolveArgFlags
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue