mirror of
https://github.com/beefytech/Beef.git
synced 2025-06-10 04:22:20 +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.Diagnostics;
|
||||||
using System.Text;
|
using System.Text;
|
||||||
using System.Threading;
|
using System.Threading;
|
||||||
|
using System.Interop;
|
||||||
using System;
|
using System;
|
||||||
|
|
||||||
namespace System
|
namespace System
|
||||||
|
@ -2450,6 +2451,16 @@ namespace System
|
||||||
buf
|
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)
|
public static bool Equals(char8* str1, char8* str2)
|
||||||
{
|
{
|
||||||
for (int i = 0; true; i++)
|
for (int i = 0; true; i++)
|
||||||
|
|
|
@ -2636,6 +2636,8 @@ bool BfMethodMatcher::CheckType(BfTypeInstance* typeInstance, BfTypedValue targe
|
||||||
|
|
||||||
if (isResolvingVarField)
|
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
|
// 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,
|
// 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
|
// 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<BfTypeDef*> prevCallerActiveTypeDef(mCallerActiveTypeDef, module->GetActiveTypeDef());
|
||||||
SetAndRestoreValue<BfType*> prevExpectingType(mCurExpectingType, expectingType);
|
SetAndRestoreValue<BfType*> prevExpectingType(mCurExpectingType, expectingType);
|
||||||
|
|
||||||
|
SetAndRestoreValue<bool> prevCtxResolvingVar(module->mContext->mResolvingVarField, false);
|
||||||
SetAndRestoreValue<BfMethodInstance*> moduleCurMethodInstance(module->mCurMethodInstance, methodInstance);
|
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);
|
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))
|
else if ((retInstAddr != 0) || (allocThisInstAddr != 0))
|
||||||
{
|
{
|
||||||
auto* retPtr = memStart + retInstAddr;
|
auto* retPtr = memStart + retInstAddr;
|
||||||
if (allocThisInstAddr != 0)
|
if ((allocThisInstAddr != 0) && (methodInstance->mMethodDef->mMethodType == BfMethodType_Ctor))
|
||||||
{
|
{
|
||||||
retPtr = memStart + allocThisAddr;
|
retPtr = memStart + allocThisAddr;
|
||||||
returnType = thisType;
|
returnType = thisType;
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue