MCPcopy Create free account
hub / github.com/csyonghe/Spire / CheckComponentImplementationConsistency

Method CheckComponentImplementationConsistency

Source/SpireCore/SymbolTable.cpp:330–406  ·  view source on GitHub ↗

Source from the content-addressed store, hash-verified

328 }
329
330 bool SymbolTable::CheckComponentImplementationConsistency(DiagnosticSink * err, ShaderComponentSymbol * comp, ShaderComponentImplSymbol * impl)
331 {
332 bool rs = true;
333 if (impl->SyntaxNode->Rate)
334 {
335 for (auto & cimpl : comp->Implementations)
336 {
337 for (auto & w : cimpl->Worlds)
338 if (impl->Worlds.Contains(w))
339 {
340 err->diagnose(impl->SyntaxNode->Position, Diagnostics::componentIsAlreadyDefinedInThatWorld, comp->Name, w);
341 rs = false;
342 }
343 }
344 }
345 else
346 {
347 for (auto & cimpl : comp->Implementations)
348 {
349 if (cimpl->Worlds.Count() == 0 && impl->Worlds.Count() == 0)
350 {
351 err->diagnose(impl->SyntaxNode->Position, Diagnostics::componentIsAlreadyDefined, comp->Name);
352 rs = false;
353 }
354 }
355 }
356 for (auto & cimpl : comp->Implementations)
357 {
358 if (impl->SyntaxNode->IsOutput() != cimpl->SyntaxNode->IsOutput())
359 {
360 err->diagnose(impl->SyntaxNode->Position,
361 Diagnostics::inconsistentSignatureForComponent,
362 comp->Name);
363 err->diagnose(cimpl->SyntaxNode->Position,
364 Diagnostics::seePreviousDefinition);
365 rs = false;
366 break;
367 }
368 if (impl->SyntaxNode->IsRequire() != cimpl->SyntaxNode->IsRequire())
369 {
370 err->diagnose(impl->SyntaxNode->Position,
371 Diagnostics::inconsistentSignatureForComponent,
372 comp->Name);
373 err->diagnose(cimpl->SyntaxNode->Position,
374 Diagnostics::seePreviousDefinition);
375 rs = false;
376 break;
377 }
378 if (impl->SyntaxNode->IsPublic() != cimpl->SyntaxNode->IsPublic())
379 {
380 err->diagnose(impl->SyntaxNode->Position,
381 Diagnostics::inconsistentSignatureForComponent,
382 comp->Name);
383 err->diagnose(cimpl->SyntaxNode->Position,
384 Diagnostics::seePreviousDefinition);
385 rs = false;
386 break;
387 }

Callers 1

AddNewComponentSymbolMethod · 0.80

Calls 8

diagnoseMethod · 0.80
IsOutputMethod · 0.80
ContainsMethod · 0.45
CountMethod · 0.45
IsRequireMethod · 0.45
IsPublicMethod · 0.45
EqualsMethod · 0.45
PtrMethod · 0.45

Tested by

no test coverage detected