diff --git a/IDEHelper/Compiler/BfExprEvaluator.cpp b/IDEHelper/Compiler/BfExprEvaluator.cpp index 3f8c2694..862bd6db 100644 --- a/IDEHelper/Compiler/BfExprEvaluator.cpp +++ b/IDEHelper/Compiler/BfExprEvaluator.cpp @@ -21643,17 +21643,13 @@ void BfExprEvaluator::PerformBinaryOperation(BfType* resultType, BfIRValue convL case BfBinaryOp_StrictEquality: mResult = BfTypedValue(mModule->mBfIRBuilder->CreateConst(BfTypeCode_Boolean, 1), mModule->GetPrimitiveType(BfTypeCode_Boolean)); - break; + return; case BfBinaryOp_InEquality: case BfBinaryOp_StrictInEquality: mResult = BfTypedValue(mModule->mBfIRBuilder->CreateConst(BfTypeCode_Boolean, 0), mModule->GetPrimitiveType(BfTypeCode_Boolean)); - break; - default: - mModule->Fail("Invalid operation for void", opToken); - break; - } - return; + return; + } } if ((!convLeftValue) || (!convRightValue)) diff --git a/IDEHelper/Compiler/BfModuleTypeUtils.cpp b/IDEHelper/Compiler/BfModuleTypeUtils.cpp index 08a928a7..bc7b12e0 100644 --- a/IDEHelper/Compiler/BfModuleTypeUtils.cpp +++ b/IDEHelper/Compiler/BfModuleTypeUtils.cpp @@ -1284,8 +1284,8 @@ void BfModule::PopulateType(BfType* resolvedTypeRef, BfPopulateType populateType { BfConcreteInterfaceType* concreteInterfaceType = (BfConcreteInterfaceType*)resolvedTypeRef; BF_ASSERT(concreteInterfaceType->mInterface->IsInterface()); - resolvedTypeRef->mSize = concreteInterfaceType->mInterface->mSize; - resolvedTypeRef->mAlign = concreteInterfaceType->mInterface->mAlign; + resolvedTypeRef->mSize = mContext->mBfObjectType->mSize; + resolvedTypeRef->mAlign = mContext->mBfObjectType->mAlign; resolvedTypeRef->mDefineState = BfTypeDefineState_Defined; return; } @@ -11850,17 +11850,21 @@ BfIRValue BfModule::CastToValue(BfAstNode* srcNode, BfTypedValue typedVal, BfTyp auto castedFromValue = Cast(srcNode, typedVal, bestFromType, castFlags); if (!castedFromValue) return BfIRValue(); - + BfTypedValue operatorOut; if (ignoreWrites) - { + { + if (opMethodInstance != NULL) + exprEvaluator.PerformCallChecks(opMethodInstance, srcNode); + if (returnType == toType) - return mBfIRBuilder->GetFakeVal(); + return mBfIRBuilder->GetFakeVal(); operatorOut = GetDefaultTypedValue(returnType); } else { BfModuleMethodInstance moduleMethodInstance = GetMethodInstance(opMethodInstance->GetOwner(), opMethodInstance->mMethodDef, BfTypeVector()); + exprEvaluator.PerformCallChecks(moduleMethodInstance.mMethodInstance, srcNode); SizedArray args; exprEvaluator.PushArg(castedFromValue, args);