MCPcopy Create free account
hub / github.com/dhewm/dhewm3 / ParseForStatement

Method ParseForStatement

neo/d3xp/script/Script_Compiler.cpp:1825–1890  ·  view source on GitHub ↗

================ idCompiler::ParseForStatement Form of for statement with a counter: a = 0; start: << patch4 if ( !( a < 10 ) ) { goto end; << patch1 } else { goto process; << patch3 } increment: << patch2 a = a + 1; goto start; << goto patch4 process: statements; goto increment; << goto patch2 end: Form of for statement without a counter: a = 0; start: << patch2

Source from the content-addressed store, hash-verified

1823================
1824*/
1825void idCompiler::ParseForStatement( void ) {
1826 idVarDef *e;
1827 int start;
1828 int patch1;
1829 int patch2;
1830 int patch3;
1831 int patch4;
1832
1833 loopDepth++;
1834
1835 start = gameLocal.program.NumStatements();
1836
1837 ExpectToken( "(" );
1838
1839 // init
1840 if ( !CheckToken( ";" ) ) {
1841 do {
1842 GetExpression( TOP_PRIORITY );
1843 } while( CheckToken( "," ) );
1844
1845 ExpectToken( ";" );
1846 }
1847
1848 // condition
1849 patch2 = gameLocal.program.NumStatements();
1850
1851 e = GetExpression( TOP_PRIORITY );
1852 ExpectToken( ";" );
1853
1854 //FIXME: add check for constant expression
1855 patch1 = gameLocal.program.NumStatements();
1856 EmitOpcode( OP_IFNOT, e, 0 );
1857
1858 // counter
1859 if ( !CheckToken( ")" ) ) {
1860 patch3 = gameLocal.program.NumStatements();
1861 EmitOpcode( OP_IF, e, 0 );
1862
1863 patch4 = patch2;
1864 patch2 = gameLocal.program.NumStatements();
1865 do {
1866 GetExpression( TOP_PRIORITY );
1867 } while( CheckToken( "," ) );
1868
1869 ExpectToken( ")" );
1870
1871 // goto patch4
1872 EmitOpcode( OP_GOTO, JumpTo( patch4 ), 0 );
1873
1874 // fixup patch3
1875 gameLocal.program.GetStatement( patch3 ).b = JumpFrom( patch3 );
1876 }
1877
1878 ParseStatement();
1879
1880 // goto patch2
1881 EmitOpcode( OP_GOTO, JumpTo( patch2 ), 0 );
1882

Callers

nothing calls this directly

Calls 1

NumStatementsMethod · 0.45

Tested by

no test coverage detected