| 794 | } |
| 795 | } |
| 796 | GLSLCompiler::ExpressionType GLSLCompiler::evaluateExpressionType(glsl::astExpression* expr) |
| 797 | { |
| 798 | switch (expr->type) { |
| 799 | case glsl::astExpression::kIntConstant: |
| 800 | return GLSLCompiler::ExpressionType("int", ag::Type::Int, 1, 1); |
| 801 | case glsl::astExpression::kUIntConstant: |
| 802 | return GLSLCompiler::ExpressionType("uint", ag::Type::UInt, 1, 1); |
| 803 | case glsl::astExpression::kFloatConstant: |
| 804 | return GLSLCompiler::ExpressionType("float", ag::Type::Float, 1, 1); |
| 805 | case glsl::astExpression::kDoubleConstant: |
| 806 | return GLSLCompiler::ExpressionType("double", ag::Type::Float, 1, 1); |
| 807 | case glsl::astExpression::kBoolConstant: |
| 808 | return GLSLCompiler::ExpressionType("bool", ag::Type::UChar, 1, 1); |
| 809 | case glsl::astExpression::kFunctionCall: { |
| 810 | glsl::astFunctionCall* func = (glsl::astFunctionCall*)expr; |
| 811 | Function data = matchFunction(func->name, func->parameters); |
| 812 | std::string retType = data.ReturnType; |
| 813 | if (data.Name == "") |
| 814 | retType = getReturnType(func->name, func->parameters); |
| 815 | return m_convertExprType(retType); |
| 816 | } break; |
| 817 | case glsl::astExpression::kConstructorCall: { |
| 818 | glsl::astConstructorCall* constr = (glsl::astConstructorCall*)expr; |
| 819 | |
| 820 | std::string vartype = ""; |
| 821 | if (constr->type->builtin) |
| 822 | vartype = kTypes[((glsl::astBuiltin*)constr->type)->type]; |
| 823 | else |
| 824 | vartype = ((glsl::astStruct*)constr->type)->name; |
| 825 | |
| 826 | return m_convertExprType(vartype); |
| 827 | } break; |
| 828 | case glsl::astExpression::kPostIncrement: { |
| 829 | glsl::astPostIncrementExpression* opdata = (glsl::astPostIncrementExpression*)expr; |
| 830 | return evaluateExpressionType(opdata->operand); |
| 831 | } break; |
| 832 | case glsl::astExpression::kPostDecrement: { |
| 833 | glsl::astPostDecrementExpression* opdata = (glsl::astPostDecrementExpression*)expr; |
| 834 | return evaluateExpressionType(opdata->operand); |
| 835 | } break; |
| 836 | case glsl::astExpression::kUnaryMinus: { |
| 837 | glsl::astUnaryMinusExpression* opdata = (glsl::astUnaryMinusExpression*)expr; |
| 838 | return evaluateExpressionType(opdata->operand); |
| 839 | } break; |
| 840 | case glsl::astExpression::kUnaryPlus: { |
| 841 | glsl::astUnaryPlusExpression* opdata = (glsl::astUnaryPlusExpression*)expr; |
| 842 | return evaluateExpressionType(opdata->operand); |
| 843 | } break; |
| 844 | case glsl::astExpression::kBitNot: { |
| 845 | glsl::astUnaryBitNotExpression* opdata = (glsl::astUnaryBitNotExpression*)expr; |
| 846 | return evaluateExpressionType(opdata->operand); |
| 847 | } break; |
| 848 | case glsl::astExpression::kLogicalNot: { |
| 849 | glsl::astUnaryLogicalNotExpression* opdata = (glsl::astUnaryLogicalNotExpression*)expr; |
| 850 | return evaluateExpressionType(opdata->operand); |
| 851 | } break; |
| 852 | case glsl::astExpression::kPrefixIncrement: { |
| 853 | glsl::astPrefixIncrementExpression* opdata = (glsl::astPrefixIncrementExpression*)expr; |
nothing calls this directly
no test coverage detected