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

Method CreateFieldDeclaration

IDEHelper/Compiler/BfReducer.cpp:6382–6471  ·  view source on GitHub ↗

Source from the content-addressed store, hash-verified

6380}
6381
6382BfFieldDeclaration* BfReducer::CreateFieldDeclaration(BfTokenNode* tokenNode, BfTypeReference* typeRef, BfIdentifierNode* nameIdentifier, BfFieldDeclaration* prevFieldDeclaration)
6383{
6384 auto fieldDeclaration = mAlloc->Alloc<BfFieldDeclaration>();
6385 if (prevFieldDeclaration != NULL)
6386 {
6387 ReplaceNode(tokenNode, fieldDeclaration);
6388 MEMBER_SET(fieldDeclaration, mPrecedingComma, tokenNode);
6389 MEMBER_SET(fieldDeclaration, mNameNode, nameIdentifier);
6390 fieldDeclaration->mDocumentation = prevFieldDeclaration->mDocumentation;
6391 fieldDeclaration->mAttributes = prevFieldDeclaration->mAttributes;
6392 fieldDeclaration->mProtectionSpecifier = prevFieldDeclaration->mProtectionSpecifier;
6393 fieldDeclaration->mStaticSpecifier = prevFieldDeclaration->mStaticSpecifier;
6394 fieldDeclaration->mTypeRef = prevFieldDeclaration->mTypeRef;
6395 fieldDeclaration->mConstSpecifier = prevFieldDeclaration->mConstSpecifier;
6396 fieldDeclaration->mReadOnlySpecifier = prevFieldDeclaration->mReadOnlySpecifier;
6397 fieldDeclaration->mVolatileSpecifier = prevFieldDeclaration->mVolatileSpecifier;
6398 fieldDeclaration->mNewSpecifier = prevFieldDeclaration->mNewSpecifier;
6399 fieldDeclaration->mExternSpecifier = prevFieldDeclaration->mExternSpecifier;
6400 tokenNode = ExpectTokenAfter(fieldDeclaration, BfToken_Semicolon, BfToken_AssignEquals, BfToken_Comma, BfToken_Tilde);
6401 if (tokenNode == NULL)
6402 return fieldDeclaration;
6403 mVisitorPos.mReadPos--; // Go back to token
6404 }
6405 else
6406 {
6407 ReplaceNode(typeRef, fieldDeclaration);
6408 fieldDeclaration->mTypeRef = typeRef;
6409 fieldDeclaration->mInitializer = NULL;
6410 if (nameIdentifier != NULL)
6411 {
6412 fieldDeclaration->mNameNode = nameIdentifier;
6413 MoveNode(fieldDeclaration->mNameNode, fieldDeclaration);
6414 }
6415 }
6416 CheckMultiuseAttributeTypeRef(fieldDeclaration->mTypeRef);
6417
6418 BfToken token = tokenNode->GetToken();
6419 if (token == BfToken_AssignEquals)
6420 {
6421 MEMBER_SET(fieldDeclaration, mEqualsNode, tokenNode);
6422 MoveNode(tokenNode, fieldDeclaration);
6423 mVisitorPos.MoveNext();
6424
6425 mIsFieldInitializer = true;
6426 fieldDeclaration->mInitializer = CreateExpressionAfter(fieldDeclaration);
6427 mIsFieldInitializer = false;
6428
6429 if (fieldDeclaration->mInitializer != NULL)
6430 {
6431 MoveNode(fieldDeclaration->mInitializer, fieldDeclaration);
6432 auto nextToken = ExpectTokenAfter(fieldDeclaration, BfToken_Semicolon, BfToken_Comma, BfToken_Tilde);
6433 if (nextToken != NULL)
6434 mVisitorPos.mReadPos--; // Backtrack, someone else eats these
6435 }
6436 }
6437 else if (token == BfToken_Comma)
6438 {
6439 //

Callers

nothing calls this directly

Calls 3

GetTokenMethod · 0.80
IsMissingSemicolonMethod · 0.80
MoveNextMethod · 0.45

Tested by

no test coverage detected