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

Method UpdateCEEmit

IDEHelper/Compiler/BfModuleTypeUtils.cpp:2438–2495  ·  view source on GitHub ↗

Source from the content-addressed store, hash-verified

2436}
2437
2438void BfModule::UpdateCEEmit(CeEmitContext* ceEmitContext, BfTypeInstance* typeInstance, BfTypeDef* declaringType, const StringImpl& ctxString, BfAstNode* refNode, BfCeTypeEmitSourceKind emitSourceKind)
2439{
2440 for (int ifaceTypeId : ceEmitContext->mInterfaces)
2441 typeInstance->mCeTypeInfo->mPendingInterfaces.Add(ifaceTypeId);
2442
2443 if (ceEmitContext->mEmitData.IsEmpty())
2444 return;
2445
2446 String src;
2447
2448// if (typeInstance->mTypeDef->mEmitParent != NULL)
2449// src += "\n\n";
2450
2451// src += "// Code emission in ";
2452// src += ctxString;
2453// src += "\n\n";
2454 src += ceEmitContext->mEmitData;
2455 ceEmitContext->mEmitData.Clear();
2456
2457 BfCEParseContext ceParseContext = CEEmitParse(typeInstance, declaringType, src, refNode, emitSourceKind);
2458 auto emitParser = typeInstance->mTypeDef->mSource->ToParser();
2459
2460 auto typeDeclaration = emitParser->mAlloc->Alloc<BfTypeDeclaration>();
2461
2462 BfReducer bfReducer;
2463 bfReducer.mSource = emitParser;
2464 bfReducer.mPassInstance = mCompiler->mPassInstance;
2465 bfReducer.mAlloc = emitParser->mAlloc;
2466 bfReducer.mSystem = mSystem;
2467 bfReducer.mCurTypeDecl = typeDeclaration;
2468 typeDeclaration->mDefineNode = emitParser->mRootNode;
2469 bfReducer.HandleTypeDeclaration(typeDeclaration, NULL);
2470
2471 BfDefBuilder defBuilder(mSystem);
2472 defBuilder.mCurSource = emitParser;
2473 defBuilder.mCurTypeDef = typeInstance->mTypeDef;
2474 defBuilder.mCurDeclaringTypeDef = typeInstance->mTypeDef;
2475
2476 defBuilder.mPassInstance = mCompiler->mPassInstance;
2477 defBuilder.mIsComptime = true;
2478 defBuilder.DoVisitChild(typeDeclaration->mDefineNode);
2479 defBuilder.FinishTypeDef(typeInstance->mTypeDef->mTypeCode == BfTypeCode_Enum);
2480
2481 FinishCEParseContext(refNode, typeInstance, &ceParseContext);
2482
2483 if (emitParser->mSourceClassifier != NULL)
2484 {
2485 emitParser->mSourceClassifier->VisitChild(emitParser->mRootNode);
2486 emitParser->mSourceClassifier->DeferNodes(emitParser->mSidechannelRootNode);
2487 emitParser->mSourceClassifier->DeferNodes(emitParser->mErrorRootNode);
2488 }
2489
2490 if (typeInstance->mTypeDef->mEmitParent != NULL)
2491 {
2492 // Remove generated fields like the 'underlying type' enum field
2493 typeInstance->mFieldInstances.Resize(typeInstance->mTypeDef->mEmitParent->mFields.mSize);
2494 }
2495}

Callers

nothing calls this directly

Calls 10

HandleTypeDeclarationMethod · 0.80
DoVisitChildMethod · 0.80
FinishTypeDefMethod · 0.80
DeferNodesMethod · 0.80
AddMethod · 0.45
IsEmptyMethod · 0.45
ClearMethod · 0.45
ToParserMethod · 0.45
VisitChildMethod · 0.45
ResizeMethod · 0.45

Tested by

no test coverage detected