Parser - Fixed problem with unused functions
This commit is contained in:
parent
3aeac7980e
commit
59b23de5ed
3 changed files with 11 additions and 4 deletions
2
TODO
2
TODO
|
@ -7,8 +7,6 @@ Post-processing:
|
|||
* Lens dirt
|
||||
|
||||
Scripting:
|
||||
* Eliminate functions that are not called / prevent them from causing
|
||||
type errors
|
||||
* Spill values in the FPU stack runs out
|
||||
* More checks in the execution engine
|
||||
* Overrides
|
||||
|
|
|
@ -363,6 +363,9 @@ class T_RootNode : public A_Node
|
|||
{ return functions_.indexOf( name ); }
|
||||
A_FuncNode& function( const uint32_t index ) const noexcept
|
||||
{ return *functions_.values( )[ index ]; }
|
||||
|
||||
void removeFunction( T_String const& name ) noexcept
|
||||
{ functions_.remove( name ); }
|
||||
};
|
||||
|
||||
/*----------------------------------------------------------------------------*/
|
||||
|
|
|
@ -392,7 +392,7 @@ bool T_ParserImpl_::checkCalls( ) noexcept
|
|||
|
||||
/* Go through the call graph, determine whether functions are called from the
|
||||
* initialisation block, the frame rendering block, or both, and then enforce
|
||||
* restrictions on instructions.
|
||||
* restrictions on instructions. Also, remove functions that are never called.
|
||||
*/
|
||||
bool T_ParserImpl_::checkInstructionRestrictions( ) noexcept
|
||||
{
|
||||
|
@ -415,7 +415,12 @@ bool T_ParserImpl_::checkInstructionRestrictions( ) noexcept
|
|||
callInfo[ id ] |= E_InstrRestriction::FRAME;
|
||||
return true;
|
||||
} );
|
||||
for ( auto i = 0u ; i < output->root.nFunctions( ) ; i ++ ) {
|
||||
for ( auto i = 0u ; i < output->root.nFunctions( ) ; ) {
|
||||
if ( !callInfo[ i ] ) {
|
||||
output->root.removeFunction( output->root.function( i ).name( ) );
|
||||
callInfo.removeSwap( i );
|
||||
continue;
|
||||
}
|
||||
visitor.visit( output->root.function( i ) , [&]( A_Node& node , bool exit ) {
|
||||
if ( exit ) {
|
||||
return false;
|
||||
|
@ -430,6 +435,7 @@ bool T_ParserImpl_::checkInstructionRestrictions( ) noexcept
|
|||
}
|
||||
return true;
|
||||
} );
|
||||
i ++;
|
||||
}
|
||||
return errors.empty( );
|
||||
}
|
||||
|
|
Loading…
Reference in a new issue