MCPcopy Create free account
hub / github.com/dfranx/ShaderDebugger / translateSwitchStatement

Method translateSwitchStatement

src/GLSLCompiler.cpp:1454–1483  ·  view source on GitHub ↗

Source from the content-addressed store, hash-verified

1452 }
1453
1454 void GLSLCompiler::translateSwitchStatement(glsl::astSwitchStatement *statement) {
1455 m_exportLine(statement);
1456
1457 m_breaks.push(std::vector<size_t>());
1458
1459 glsl::vector<glsl::astStatement*>& stats = statement->statements;
1460 for (size_t i = 0; i < stats.size(); i++) {
1461 translateExpression(statement->expression);
1462
1463 if (stats[i]->type == glsl::astStatement::kCaseLabel) {
1464 for (size_t j = i; j < stats.size(); j++) {
1465 if (j != i && stats[j]->type == glsl::astStatement::kCaseLabel) {
1466 i = j-1;
1467 break;
1468 }
1469 translateStatement(stats[j]);
1470 }
1471 } else continue;
1472
1473 if (!m_caseIfDefault)
1474 m_gen.Function.SetAddress(m_caseIfAddr, m_gen.Function.GetCurrentAddress());
1475 else
1476 m_gen.Function.PopStack();
1477 }
1478
1479 for (size_t i = 0; i < m_breaks.top().size(); i++)
1480 m_gen.Function.SetAddress(m_breaks.top()[i], m_gen.Function.GetCurrentAddress());
1481
1482 m_breaks.pop();
1483 }
1484
1485 void GLSLCompiler::translateCaseLabelStatement(glsl::astCaseLabelStatement *statement) {
1486 m_exportLine(statement);

Callers

nothing calls this directly

Calls 1

sizeMethod · 0.80

Tested by

no test coverage detected