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

Function EvaluateExpression

shadercompiler/FXAnalyzer.cpp:534–1518  ·  view source on GitHub ↗

Source from the content-addressed store, hash-verified

532}
533
534bool EvaluateExpression( ParserState& state, ASTNode* node, Type& type, ExpressionValue& value, StateValue* stateValues )
535{
536 if( !node )
537 {
538 return false;
539 }
540
541 type.symbol = nullptr;
542 switch( node->GetNodeType() )
543 {
544 case NT_CONSTANT:
545 switch( node->GetToken()->type )
546 {
547 case OP_INT_CONST: {
548 type.FromTokenType( OP_INT );
549 ExpressionValueElement element;
550 element.intValue = ParseNumber( node->GetToken()->stringValue.start, node->GetToken()->stringValue.end );
551 value.push_back( element );
552 }
553 return true;
554 case OP_BOOL_CONST: {
555 type.FromTokenType( OP_INT );
556 ExpressionValueElement element;
557 element.intValue = node->GetToken()->intValue != 0 ? 1 : 0;
558 value.push_back( element );
559 }
560 return true;
561 case OP_FLOAT_CONST: {
562 type.FromTokenType( OP_FLOAT );
563 ExpressionValueElement element;
564 element.floatValue = ParseFloat( node->GetToken()->stringValue.start, node->GetToken()->stringValue.end );
565 value.push_back( element );
566 }
567 return true;
568 case OP_STRING_CONST: {
569 type.FromTokenType( OP_STRING );
570 ExpressionValueElement element;
571 element.stringValue = ParseString( node->GetToken()->stringValue );
572 value.push_back( element );
573 }
574 return true;
575 }
576 return false;
577 case NT_VAR_IDENTIFIER: {
578 if( node->GetSymbol()->definition == nullptr )
579 {
580 state.ShowMessage( node->GetLocation(), EC_UNINITIALIZED_VAR, ToString( node->GetSymbol()->name ).c_str() );
581 return false;
582 }
583 ASTNode* definition = node->GetSymbol()->definition;
584 if( definition->GetChildOrNull( 1 ) == nullptr )
585 {
586 state.ShowMessage( definition->GetToken()->fileLocation, EC_UNINITIALIZED_VAR, ToString( definition->GetSymbol()->name ).c_str() );
587 return false;
588 }
589 type = node->GetSymbol()->type;
590 return EvaluateInitializer( state, definition->GetChildOrNull( 1 ), type, value, nullptr );
591 }

Calls 15

ParseNumberFunction · 0.85
ParseFloatFunction · 0.85
ParseStringFunction · 0.85
EvaluateInitializerFunction · 0.85
GetCommonTypeFunction · 0.85
CastExpressionValueFunction · 0.85
GetElementTypeFunction · 0.85
GetNodeTypeMethod · 0.80
GetTokenMethod · 0.80
GetSymbolMethod · 0.80
ShowMessageMethod · 0.80
GetChildOrNullMethod · 0.80

Tested by

no test coverage detected