@@ -3940,26 +3940,43 @@ void HLSL2GLSLConverterImpl::ConversionStream::ProcessReturnStatements( TokenLis
39403940 Token->Literal = MacroName;
39413941 // if( x < 0.5 ) _RETURN_ float4(0.0, 0.0, 0.0, 1.0);
39423942 // ^
3943-
3943+
39443944 ++Token;
39453945 // if( x < 0.5 ) _RETURN_ float4(0.0, 0.0, 0.0, 1.0);
39463946 // ^
39473947
3948- m_Tokens.insert ( Token, TokenInfo (TokenType::OpenBracket, " (" ));
3949- // if( x < 0.5 ) _RETURN_( float4(0.0, 0.0, 0.0, 1.0);
3950- // ^
3948+ if (Token->Type != TokenType::Semicolon )
3949+ {
3950+ m_Tokens.insert ( Token, TokenInfo (TokenType::OpenBracket, " (" ));
3951+ // if( x < 0.5 ) _RETURN_( float4(0.0, 0.0, 0.0, 1.0);
3952+ // ^
39513953
3952- while ( Token->Type != TokenType::Semicolon )
3954+ while ( Token->Type != TokenType::Semicolon )
3955+ ++Token;
3956+ VERIFY_PARSER_STATE ( Token, Token != m_Tokens.end (), " Unexpected end of file while looking for the \' ;\' " );
3957+ // if( x < 0.5 ) _RETURN_( float4(0.0, 0.0, 0.0, 1.0);
3958+ // ^
3959+
3960+ // Replace semicolon with ):
3961+ Token->Type = TokenType::ClosingBracket;
3962+ Token->Literal = " )" ;
3963+ // if( x < 0.5 ) _RETURN_( float4(0.0, 0.0, 0.0, 1.0))
3964+ // ^
3965+ }
3966+ else
3967+ {
3968+ // if( x < 0.5 ) _RETURN_ ;
3969+ // ^
3970+ auto SemicolonToken = Token;
39533971 ++Token;
3954- VERIFY_PARSER_STATE ( Token, Token != m_Tokens.end (), " Unexpected end of file while looking for the \' ;\' " );
3955- // if( x < 0.5 ) _RETURN_( float4(0.0, 0.0, 0.0, 1.0);
3956- // ^
3957-
3958- // Replace semicolon with ):
3959- Token->Type = TokenType::ClosingBracket;
3960- Token->Literal = " )" ;
3961- // if( x < 0.5 ) _RETURN_( float4(0.0, 0.0, 0.0, 1.0))
3962- // ^
3972+ // if( x < 0.5 ) _RETURN_ ;
3973+ // int a;
3974+ // ^
3975+ m_Tokens.erase (SemicolonToken);
3976+ // if( x < 0.5 ) _RETURN_
3977+ // int a;
3978+ // ^
3979+ }
39633980
39643981 continue ;
39653982 }
@@ -3978,9 +3995,7 @@ void HLSL2GLSLConverterImpl::ConversionStream::ProcessReturnStatements( TokenLis
39783995 if (IsVoid)
39793996 {
39803997 // Insert return handler before the closing brace
3981- String NoArgMacro (MacroName);
3982- NoArgMacro.append (" ()" );
3983- m_Tokens.insert (Token, TokenInfo (TokenType::TextBlock, NoArgMacro.c_str (), Token->Delimiter .c_str ()));
3998+ m_Tokens.insert (Token, TokenInfo (TokenType::TextBlock, MacroName, Token->Delimiter .c_str ()));
39843999 Token->Delimiter = " \n " ;
39854000 }
39864001}
@@ -4048,7 +4063,7 @@ void HLSL2GLSLConverterImpl::ConversionStream::ProcessShaderDeclaration( TokenLi
40484063
40494064 std::stringstream ReturnHandlerSS;
40504065 const Char *ReturnMacroName = " _RETURN_" ;
4051- ReturnHandlerSS << " #define " << ReturnMacroName << " ( " << ( bIsVoid ? " " : " _RET_VAL_" ) << " ) {\\\n " ;
4066+ ReturnHandlerSS << " #define " << ReturnMacroName << ( bIsVoid ? " " : " ( _RET_VAL_) " ) << " {\\\n " ;
40524067
40534068 String GlobalVariables, Prologue;
40544069 try
0 commit comments