MCPcopy Create free account
hub / github.com/carbonengine/trinity / ReplaceFloatModulo

Function ReplaceFloatModulo

shadercompiler/EffectCompilerMetal.cpp:91–123  ·  view source on GitHub ↗

Source from the content-addressed store, hash-verified

89}
90
91void ReplaceFloatModulo( ParserState& state )
92{
93 ZoneScoped;
94
95 state.GetTree()->Map( [&]( auto node ) {
96 if( node->GetNodeType() == NT_EXPRESSION && node->GetToken()->type == OP_PERCENT )
97 {
98 if( node->GetChild( 1 )->GetType().IsScalarOrVector() && node->GetChild( 1 )->GetType().builtInType == OP_FLOAT )
99 {
100 auto token = ScannerToken::ID( MakeInlineString( "fmod" ), node->GetLocation() );
101 auto call = new ASTNode( NT_FUNCTION_CALL, node->GetLocation(), node->GetScope(), &token );
102 call->AddChild( node->GetChild( 0 ) );
103 call->AddChild( node->GetChild( 1 ) );
104 std::string diagnosticMessage;
105 Symbol* symbol = state.GetSymbolTable().LookupFunction( token.stringValue, call, diagnosticMessage );
106 if( symbol )
107 {
108 if( symbol->intrinsicType )
109 {
110 call->SetType( ( *symbol->intrinsicType )( call, -1 ) );
111 }
112 else
113 {
114 call->SetType( symbol->type );
115 }
116 call->SetSymbol( symbol );
117 return call;
118 }
119 }
120 }
121 return node;
122 } );
123}
124
125
126void ConvertSyncFunctionsToMetal( ASTNode* node )

Callers 1

CompileEffectMethod · 0.85

Calls 13

MakeInlineStringFunction · 0.85
GetTreeMethod · 0.80
GetNodeTypeMethod · 0.80
GetTokenMethod · 0.80
IsScalarOrVectorMethod · 0.80
GetScopeMethod · 0.80
AddChildMethod · 0.80
LookupFunctionMethod · 0.80
SetSymbolMethod · 0.80
MapMethod · 0.45
GetTypeMethod · 0.45
GetChildMethod · 0.45

Tested by

no test coverage detected