|
@@ -13513,7 +13513,7 @@ void BfExprEvaluator::InjectMixin(BfAstNode* targetSrc, BfTypedValue target, boo
|
|
|
|
|
|
if (wantsDIData)
|
|
if (wantsDIData)
|
|
{
|
|
{
|
|
- BfIRMDNode diFuncType = mModule->mBfIRBuilder->DbgCreateSubroutineType(SizedArray<BfIRMDNode, 0>());
|
|
|
|
|
|
+ BfIRMDNode diFuncType = mModule->mBfIRBuilder->DbgCreateSubroutineType(methodInstance);
|
|
|
|
|
|
//int defLine = mModule->mCurFilePosition.mCurLine;
|
|
//int defLine = mModule->mCurFilePosition.mCurLine;
|
|
|
|
|
|
@@ -13527,7 +13527,10 @@ void BfExprEvaluator::InjectMixin(BfAstNode* targetSrc, BfTypedValue target, boo
|
|
auto diParentType = mModule->mBfIRBuilder->DbgGetTypeInst(methodInstance->GetOwner());
|
|
auto diParentType = mModule->mBfIRBuilder->DbgGetTypeInst(methodInstance->GetOwner());
|
|
if (!mModule->mBfIRBuilder->mIgnoreWrites)
|
|
if (!mModule->mBfIRBuilder->mIgnoreWrites)
|
|
{
|
|
{
|
|
- curMethodState->mCurScope->mDIScope = mModule->mBfIRBuilder->DbgCreateFunction(diParentType, methodDef->mName + "!", "", mModule->mCurFilePosition.mFileInstance->mDIFile,
|
|
|
|
|
|
+ String methodName = methodDef->mName;
|
|
|
|
+ methodName += "!";
|
|
|
|
+ BfMangler::Mangle(methodName, mModule->mCompiler->GetMangleKind(), methodInstance);
|
|
|
|
+ curMethodState->mCurScope->mDIScope = mModule->mBfIRBuilder->DbgCreateFunction(diParentType, methodName, "", mModule->mCurFilePosition.mFileInstance->mDIFile,
|
|
defLine + 1, diFuncType, false, true, mModule->mCurFilePosition.mCurLine + 1, flags, false, BfIRValue());
|
|
defLine + 1, diFuncType, false, true, mModule->mCurFilePosition.mCurLine + 1, flags, false, BfIRValue());
|
|
scopeData.mAltDIFile = mModule->mCurFilePosition.mFileInstance->mDIFile;
|
|
scopeData.mAltDIFile = mModule->mCurFilePosition.mFileInstance->mDIFile;
|
|
}
|
|
}
|
|
@@ -13710,66 +13713,89 @@ void BfExprEvaluator::InjectMixin(BfAstNode* targetSrc, BfTypedValue target, boo
|
|
|
|
|
|
newLocalVar->mParamIdx = -3;
|
|
newLocalVar->mParamIdx = -3;
|
|
};
|
|
};
|
|
-
|
|
|
|
|
|
+
|
|
argExprEvaluatorItr = argExprEvaluators.begin();
|
|
argExprEvaluatorItr = argExprEvaluators.begin();
|
|
- for (int argIdx = 0; argIdx < (int)explicitParamCount; argIdx++)
|
|
|
|
|
|
+ for (int argIdx = methodDef->mIsStatic ? 0 : -1; argIdx < (int)explicitParamCount; argIdx++)
|
|
{
|
|
{
|
|
int paramIdx = argIdx;
|
|
int paramIdx = argIdx;
|
|
|
|
|
|
- auto exprEvaluator = *argExprEvaluatorItr;
|
|
|
|
- auto paramDef = methodDef->mParams[paramIdx];
|
|
|
|
- auto arg = &args[argIdx];
|
|
|
|
|
|
+ auto exprEvaluator = *argExprEvaluatorItr;
|
|
|
|
+
|
|
|
|
+ BfTypedValue argValue;
|
|
|
|
+
|
|
|
|
+ BfLocalVariable* localVar = new BfLocalVariable();
|
|
|
|
|
|
- if (!arg->mTypedValue)
|
|
|
|
|
|
+ if (argIdx == -1)
|
|
{
|
|
{
|
|
- auto wantType = methodInstance->GetParamType(paramIdx);
|
|
|
|
- if (wantType->IsVar())
|
|
|
|
- wantType = mModule->mContext->mBfObjectType;
|
|
|
|
- arg->mTypedValue = mModule->GetDefaultTypedValue(wantType);
|
|
|
|
|
|
+ argValue = target;
|
|
|
|
+ localVar->mName = "this";
|
|
|
|
+ localVar->mIsThis = true;
|
|
|
|
+ localVar->mIsAssigned = true;
|
|
}
|
|
}
|
|
|
|
+ else
|
|
|
|
+ {
|
|
|
|
+ auto arg = &args[argIdx];
|
|
|
|
+ auto paramDef = methodDef->mParams[paramIdx];
|
|
|
|
|
|
- BfLocalVariable* localVar = new BfLocalVariable();
|
|
|
|
- localVar->mName = paramDef->mName;
|
|
|
|
- localVar->mResolvedType = arg->mTypedValue.mType;
|
|
|
|
- if (arg->mTypedValue.mType->IsRef())
|
|
|
|
|
|
+ localVar->mName = paramDef->mName;
|
|
|
|
+
|
|
|
|
+ if (!arg->mTypedValue)
|
|
|
|
+ {
|
|
|
|
+ auto wantType = methodInstance->GetParamType(paramIdx);
|
|
|
|
+ if (wantType->IsVar())
|
|
|
|
+ wantType = mModule->mContext->mBfObjectType;
|
|
|
|
+ arg->mTypedValue = mModule->GetDefaultTypedValue(wantType);
|
|
|
|
+ }
|
|
|
|
+ argValue = arg->mTypedValue;
|
|
|
|
+ }
|
|
|
|
+
|
|
|
|
+ localVar->mResolvedType = argValue.mType;
|
|
|
|
+ if (argValue.mType->IsRef())
|
|
{
|
|
{
|
|
auto refType = (BfRefType*)localVar->mResolvedType;
|
|
auto refType = (BfRefType*)localVar->mResolvedType;
|
|
- localVar->mAddr = mModule->LoadValue(arg->mTypedValue).mValue;
|
|
|
|
- localVar->mResolvedType = arg->mTypedValue.mType->GetUnderlyingType();
|
|
|
|
|
|
+ localVar->mAddr = mModule->LoadValue(argValue).mValue;
|
|
|
|
+ localVar->mResolvedType = argValue.mType->GetUnderlyingType();
|
|
localVar->mIsAssigned = refType->mRefKind != BfRefType::RefKind_Out;
|
|
localVar->mIsAssigned = refType->mRefKind != BfRefType::RefKind_Out;
|
|
}
|
|
}
|
|
- else if (arg->mTypedValue.IsAddr())
|
|
|
|
- localVar->mAddr = arg->mTypedValue.mValue;
|
|
|
|
|
|
+ else if (argValue.IsAddr())
|
|
|
|
+ localVar->mAddr = argValue.mValue;
|
|
else
|
|
else
|
|
{
|
|
{
|
|
- if (!arg->mTypedValue.mValue)
|
|
|
|
|
|
+ if (!argValue.mValue)
|
|
{
|
|
{
|
|
// Untyped value
|
|
// Untyped value
|
|
}
|
|
}
|
|
- else if (arg->mTypedValue.mValue.IsConst())
|
|
|
|
|
|
+ else if (argValue.mValue.IsConst())
|
|
{
|
|
{
|
|
- localVar->mConstValue = arg->mTypedValue.mValue;
|
|
|
|
|
|
+ localVar->mConstValue = argValue.mValue;
|
|
}
|
|
}
|
|
- else if (arg->mTypedValue.IsSplat())
|
|
|
|
|
|
+ else if (argValue.IsSplat())
|
|
{
|
|
{
|
|
- localVar->mValue = arg->mTypedValue.mValue;
|
|
|
|
|
|
+ localVar->mValue = argValue.mValue;
|
|
localVar->mIsSplat = true;
|
|
localVar->mIsSplat = true;
|
|
}
|
|
}
|
|
else
|
|
else
|
|
{
|
|
{
|
|
- if (arg->mTypedValue.IsAddr())
|
|
|
|
- localVar->mAddr = arg->mTypedValue.mValue;
|
|
|
|
|
|
+ if (argValue.IsAddr())
|
|
|
|
+ localVar->mAddr = argValue.mValue;
|
|
else
|
|
else
|
|
- localVar->mValue = arg->mTypedValue.mValue;
|
|
|
|
|
|
+ localVar->mValue = argValue.mValue;
|
|
}
|
|
}
|
|
|
|
|
|
- localVar->mIsReadOnly = arg->mTypedValue.IsReadOnly();
|
|
|
|
|
|
+ localVar->mIsReadOnly = argValue.IsReadOnly();
|
|
}
|
|
}
|
|
|
|
|
|
- _AddLocalVariable(localVar, exprEvaluator);
|
|
|
|
-
|
|
|
|
- endLocalIdx++;
|
|
|
|
- ++argExprEvaluatorItr;
|
|
|
|
|
|
+ if (argIdx == -1)
|
|
|
|
+ {
|
|
|
|
+ _AddLocalVariable(localVar, NULL);
|
|
|
|
+ }
|
|
|
|
+ else
|
|
|
|
+ {
|
|
|
|
+ _AddLocalVariable(localVar, exprEvaluator);
|
|
|
|
+
|
|
|
|
+ endLocalIdx++;
|
|
|
|
+ ++argExprEvaluatorItr;
|
|
|
|
+ }
|
|
}
|
|
}
|
|
|
|
|
|
if (auto blockBody = BfNodeDynCast<BfBlock>(methodDef->mBody))
|
|
if (auto blockBody = BfNodeDynCast<BfBlock>(methodDef->mBody))
|