MCPcopy Create free account
hub / github.com/beefytech/Beef / HandleTypeDeclaration

Method HandleTypeDeclaration

IDEHelper/Compiler/BfReducer.cpp:11222–11280  ·  view source on GitHub ↗

Source from the content-addressed store, hash-verified

11220}
11221
11222void BfReducer::HandleTypeDeclaration(BfTypeDeclaration* typeDecl, BfAttributeDirective* attributes, BfAstNode* deferredHeadNode, bool findInitializer)
11223{
11224 SetAndRestoreValue<BfTypeDeclaration*> prevTypeDecl(mCurTypeDecl, typeDecl);
11225 CurTypeState curTypeState(typeDecl, mAlloc);
11226 SetAndRestoreValue<CurTypeState*> prevTypeState(mCurTypeState, &curTypeState);
11227 SetAndRestoreValue<BfVisitorPos> prevVisitorPos(mVisitorPos, BfVisitorPos(BfNodeDynCast<BfBlock>(typeDecl->mDefineNode)));
11228
11229 if (findInitializer)
11230 prevVisitorPos.CancelRestore();
11231
11232 if (attributes != NULL)
11233 {
11234 MEMBER_SET(typeDecl, mAttributes, attributes);
11235 typeDecl->mTriviaStart = BF_MIN(typeDecl->mAttributes->mTriviaStart, attributes->mTriviaStart);
11236 }
11237
11238 if ((!IsNodeRelevant(deferredHeadNode, typeDecl)) && (!typeDecl->IsTemporary()) && (!findInitializer))
11239 {
11240 typeDecl->mIgnoreDeclaration = true;
11241 return;
11242 }
11243
11244 BfAstNode* prevNode = NULL;
11245
11246 bool isDone = !mVisitorPos.MoveNext();
11247 while (!isDone)
11248 {
11249 auto node = mVisitorPos.GetCurrent();
11250 if (node == prevNode)
11251 {
11252 BF_FATAL("Should have handled node already");
11253 // If we're stuck on an error and can't process any more nodes
11254 break;
11255 }
11256 prevNode = node;
11257 BfAstNode* typeMember = BfNodeDynCast<BfMemberDeclaration>(node);
11258 if (typeMember == NULL)
11259 {
11260 if (findInitializer)
11261 {
11262 bool isInitializerStatement = IsInitializerStatement(node);
11263 if (isInitializerStatement)
11264 return;
11265 }
11266
11267 SetAndRestoreValue<BfAstNode*> prevTypeMemberNodeStart(mTypeMemberNodeStart, node);
11268 typeMember = ReadTypeMember(node);
11269 }
11270
11271 //methodDeclaration->mDocumentation = FindDocumentation(methodDeclaration);
11272
11273 isDone = !mVisitorPos.MoveNext();
11274 if (typeMember != NULL)
11275 {
11276 mVisitorPos.Write(typeMember);
11277 }
11278 }
11279 mVisitorPos.Trim();

Callers 1

UpdateCEEmitMethod · 0.80

Calls 6

BfVisitorPosClass · 0.85
GetCurrentMethod · 0.80
IsTemporaryMethod · 0.45
MoveNextMethod · 0.45
WriteMethod · 0.45
TrimMethod · 0.45

Tested by

no test coverage detected