mirror of
https://github.com/beefytech/Beef.git
synced 2025-06-10 12:32:20 +02:00
Comptime method reflection, method entry/exit emission
This commit is contained in:
parent
bc8758bbac
commit
8f3060fd3c
18 changed files with 944 additions and 117 deletions
|
@ -512,13 +512,14 @@ bool BfModule::AddDeferredCallEntry(BfDeferredCallEntry* deferredCallEntry, BfSc
|
|||
return true;
|
||||
}
|
||||
|
||||
void BfModule::AddDeferredBlock(BfBlock* block, BfScopeData* scopeData, Array<BfDeferredCapture>* captures)
|
||||
BfDeferredCallEntry* BfModule::AddDeferredBlock(BfBlock* block, BfScopeData* scopeData, Array<BfDeferredCapture>* captures)
|
||||
{
|
||||
BfDeferredCallEntry* deferredCallEntry = new BfDeferredCallEntry();
|
||||
deferredCallEntry->mDeferredBlock = block;
|
||||
if (captures != NULL)
|
||||
deferredCallEntry->mCaptures = *captures;
|
||||
AddDeferredCallEntry(deferredCallEntry, scopeData);
|
||||
return deferredCallEntry;
|
||||
}
|
||||
|
||||
BfDeferredCallEntry* BfModule::AddDeferredCall(const BfModuleMethodInstance& moduleMethodInstance, SizedArrayImpl<BfIRValue>& llvmArgs, BfScopeData* scopeData, BfAstNode* srcNode, bool bypassVirtual, bool doNullCheck)
|
||||
|
@ -826,6 +827,7 @@ void BfModule::EmitDeferredCall(BfDeferredCallEntry& deferredCallEntry, bool mov
|
|||
AddLocalVariableDef(localVar, true);
|
||||
}
|
||||
|
||||
SetAndRestoreValue<BfAstNode*> prevCustomAttribute(mCurMethodState->mEmitRefNode, deferredCallEntry.mEmitRefNode);
|
||||
VisitEmbeddedStatement(deferredCallEntry.mDeferredBlock, NULL, BfEmbeddedStatementFlags_IsDeferredBlock);
|
||||
RestoreScopeState();
|
||||
return;
|
||||
|
@ -6684,7 +6686,7 @@ void BfModule::Visit(BfDeferStatement* deferStmt)
|
|||
}
|
||||
}
|
||||
AddDeferredBlock(block, scope, &captures);
|
||||
}
|
||||
}
|
||||
else
|
||||
AddDeferredBlock(block, scope);
|
||||
}
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue