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

Method translateWhileStatement

src/GLSLCompiler.cpp:1497–1527  ·  view source on GitHub ↗

Source from the content-addressed store, hash-verified

1495 }
1496
1497 void GLSLCompiler::translateWhileStatement(glsl::astWhileStatement *statement) {
1498 m_exportLine(statement);
1499
1500 size_t rewind_adr = m_gen.Function.GetCurrentAddress();
1501
1502 m_breaks.push(std::vector<size_t>());
1503 m_continueAddr.push(rewind_adr);
1504
1505 switch (statement->condition->type) {
1506 case glsl::astStatement::kDeclaration:
1507 translateDeclarationStatement((glsl::astDeclarationStatement*)statement->condition);
1508 break;
1509 case glsl::astStatement::kExpression:
1510 translateExpressionStatement((glsl::astExpressionStatement*)statement->condition);
1511 break;
1512 }
1513 size_t while_if_ref = m_gen.Function.If();
1514
1515 translateStatement(statement->body);
1516 size_t rewind_ref = m_gen.Function.Goto();
1517
1518 // goto points to the if statement, if statement points to the command after goto
1519 m_gen.Function.SetAddress(rewind_ref, rewind_adr);
1520 m_gen.Function.SetAddress(while_if_ref, m_gen.Function.GetCurrentAddress());
1521
1522 for (size_t i = 0; i < m_breaks.top().size(); i++)
1523 m_gen.Function.SetAddress(m_breaks.top()[i], m_gen.Function.GetCurrentAddress());
1524
1525 m_continueAddr.pop();
1526 m_breaks.pop();
1527 }
1528
1529 void GLSLCompiler::translateDoStatement(glsl::astDoStatement *statement) {
1530 m_exportLine(statement);

Callers

nothing calls this directly

Calls 1

sizeMethod · 0.80

Tested by

no test coverage detected