MCPcopy Create free account
hub / github.com/dfranx/ShaderDebugger / translateUnaryExpression

Method translateUnaryExpression

src/HLSLCompiler.cpp:665–708  ·  view source on GitHub ↗

Source from the content-addressed store, hash-verified

663 m_isSet = false;
664 }
665 void HLSLCompiler::translateUnaryExpression(M4::HLSLUnaryExpression* expr)
666 {
667 // check if pre or post increment/decrement
668 bool pre = true, isIncDec = false;
669 switch (expr->unaryOp)
670 {
671 case M4::HLSLUnaryOp_PostIncrement: isIncDec = true; pre = false; break;
672 case M4::HLSLUnaryOp_PostDecrement: isIncDec = true; pre = false; break;
673 case M4::HLSLUnaryOp_PreIncrement: isIncDec = true; break;
674 case M4::HLSLUnaryOp_PreDecrement: isIncDec = true; break;
675 }
676
677 if (isIncDec && pre)
678 m_usePointer = true;
679 translateExpression(expr->expression);
680 m_usePointer = false;
681
682 // add the pointer
683 if (isIncDec && !pre) {
684 m_usePointer = true;
685 translateExpression(expr->expression);
686 m_usePointer = false;
687 }
688
689 switch (expr->unaryOp)
690 {
691 case M4::HLSLUnaryOp_Negative: m_gen.Function.Negate(); break;
692 case M4::HLSLUnaryOp_Positive: break; // hmm.. do nothing?
693 case M4::HLSLUnaryOp_Not: m_gen.Function.Not(); break;
694 case M4::HLSLUnaryOp_PostIncrement:
695 case M4::HLSLUnaryOp_PreIncrement: m_gen.Function.Increment(); break;
696 case M4::HLSLUnaryOp_PostDecrement:
697 case M4::HLSLUnaryOp_PreDecrement: m_gen.Function.Decrement(); break;
698 case M4::HLSLUnaryOp_BitNot: m_gen.Function.BitNot(); break;
699 }
700
701 // add the incremented/dec value to the stack again
702 if (isIncDec && pre)
703 translateExpression(expr->expression);
704
705 // remove the pointer in the post increment/dec
706 if (isIncDec && !pre)
707 m_gen.Function.PopStack();
708 }
709 void HLSLCompiler::translateIdentifierExpression(M4::HLSLIdentifierExpression* expression)
710 {
711 const std::string vname = std::string(expression->name);

Callers

nothing calls this directly

Calls

no outgoing calls

Tested by

no test coverage detected