mirror of
https://github.com/beefytech/Beef.git
synced 2025-06-10 20:42:21 +02:00
String.ToConstNativeW
This commit is contained in:
parent
6c714bacdc
commit
b341b6d3b4
3 changed files with 16 additions and 2 deletions
|
@ -7,6 +7,7 @@ using System.Collections;
|
|||
using System.Diagnostics;
|
||||
using System.Text;
|
||||
using System.Threading;
|
||||
using System.Interop;
|
||||
using System;
|
||||
|
||||
namespace System
|
||||
|
@ -2450,6 +2451,16 @@ namespace System
|
|||
buf
|
||||
}
|
||||
|
||||
[Comptime(ConstEval=true)]
|
||||
public Span<c_wchar> ToConstNativeW()
|
||||
{
|
||||
int encodedLen = UTF16.GetEncodedLen(this);
|
||||
var buf = new char16[encodedLen + 1]* ( ? );
|
||||
UTF16.Encode(this, buf, encodedLen);
|
||||
buf[encodedLen] = 0;
|
||||
return .(buf, encodedLen + 1);
|
||||
}
|
||||
|
||||
public static bool Equals(char8* str1, char8* str2)
|
||||
{
|
||||
for (int i = 0; true; i++)
|
||||
|
|
|
@ -2636,6 +2636,8 @@ bool BfMethodMatcher::CheckType(BfTypeInstance* typeInstance, BfTypedValue targe
|
|||
|
||||
if (isResolvingVarField)
|
||||
{
|
||||
BF_ASSERT(mModule->mBfIRBuilder->mIgnoreWrites);
|
||||
|
||||
// Don't even consider - we can't do method calls on ourselves when we are resolving var fields, because
|
||||
// we are not allowed to generate methods when our field types are unknown. We may fix this in the future,
|
||||
// but currently it breaks out expected order of operations. One issue is that our call signatures change
|
||||
|
|
|
@ -4195,8 +4195,9 @@ BfTypedValue CeContext::Call(BfAstNode* targetSrc, BfModule* module, BfMethodIns
|
|||
SetAndRestoreValue<BfTypeDef*> prevCallerActiveTypeDef(mCallerActiveTypeDef, module->GetActiveTypeDef());
|
||||
SetAndRestoreValue<BfType*> prevExpectingType(mCurExpectingType, expectingType);
|
||||
|
||||
SetAndRestoreValue<bool> prevCtxResolvingVar(module->mContext->mResolvingVarField, false);
|
||||
SetAndRestoreValue<BfMethodInstance*> moduleCurMethodInstance(module->mCurMethodInstance, methodInstance);
|
||||
SetAndRestoreValue<BfTypeInstance*> moduleCurTypeInstance(module->mCurTypeInstance, methodInstance->GetOwner());
|
||||
SetAndRestoreValue<BfTypeInstance*> moduleCurTypeInstance(module->mCurTypeInstance, methodInstance->GetOwner());
|
||||
|
||||
SetAndRestoreValue<int> prevCurExecuteId(mCurModule->mCompiler->mCurCEExecuteId, mCeMachine->mExecuteId);
|
||||
|
||||
|
@ -4561,7 +4562,7 @@ BfTypedValue CeContext::Call(BfAstNode* targetSrc, BfModule* module, BfMethodIns
|
|||
else if ((retInstAddr != 0) || (allocThisInstAddr != 0))
|
||||
{
|
||||
auto* retPtr = memStart + retInstAddr;
|
||||
if (allocThisInstAddr != 0)
|
||||
if ((allocThisInstAddr != 0) && (methodInstance->mMethodDef->mMethodType == BfMethodType_Ctor))
|
||||
{
|
||||
retPtr = memStart + allocThisAddr;
|
||||
returnType = thisType;
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue