Changeset 28678f06 in OpenModelica
- Timestamp:
- 2016-04-02T21:28:14+02:00 (8 years ago)
- Branches:
- Added-citation-metadata, maintenance/v1.14, maintenance/v1.15, maintenance/v1.16, maintenance/v1.17, maintenance/v1.18, maintenance/v1.19, maintenance/v1.20, maintenance/v1.21, maintenance/v1.22, maintenance/v1.23, master, omlib-staging
- Children:
- 3ad7933b
- Parents:
- 34d31de3
- File:
-
- 1 edited
Legend:
- Unmodified
- Added
- Removed
-
Compiler/FrontEnd/OperatorOverloading.mo
r34d31de3 r28678f06 878 878 import int_scalar = DAE.T_INTEGER_DEFAULT; 879 879 import real_scalar = DAE.T_REAL_DEFAULT; 880 import bool_scalar = DAE.T_BOOL_DEFAULT; 880 881 constant DAE.Operator 881 882 int_mul = DAE.MUL(int_scalar), 882 883 real_mul = DAE.MUL(real_scalar), 884 real_div = DAE.DIV(real_scalar), 885 real_pow = DAE.POW(real_scalar), 883 886 int_mul_sp = DAE.MUL_SCALAR_PRODUCT(int_scalar), 884 887 real_mul_sp = DAE.MUL_SCALAR_PRODUCT(real_scalar), … … 901 904 }, 902 905 addTypes = listAppend(addScalars, listAppend(addIntArrays, listAppend(addRealArrays, addStringArrays))), 903 904 906 // ADD_EW 905 907 addIntArrayScalars = list((DAE.ADD_ARRAY_SCALAR(int_vector), {at,rhs},at) threaded for at in intarrtypes, rhs in inttypes), … … 907 909 addStringArrayScalars = list((DAE.ADD_ARRAY_SCALAR(DAE.T_ARRAY(DAE.T_STRING_DEFAULT, {DAE.DIM_UNKNOWN()}, DAE.emptyTypeSource)), {at,rhs},at) threaded for at in stringarrtypes, rhs in stringtypes), 908 910 addEwTypes = listAppend(addIntArrayScalars, listAppend(addRealArrayScalars, listAppend(addStringArrayScalars, addTypes))), 909 910 911 // SUB 911 912 subIntArrays = list((DAE.SUB_ARR(int_vector), {at,at},at) for at in intarrtypes), … … 916 917 }, 917 918 subTypes = listAppend(subScalars, listAppend(subIntArrays, subRealArrays)), 918 919 919 // SUB_EW 920 920 subIntArrayScalars = list((DAE.SUB_SCALAR_ARRAY(int_vector), {lhs,at},at) threaded for at in intarrtypes, lhs in inttypes), 921 921 subRealArrayScalars = list((DAE.SUB_SCALAR_ARRAY(real_vector), {lhs,at},at) threaded for at in realarrtypes, lhs in realtypes), 922 922 subEwTypes = listAppend(subScalars, listAppend(subIntArrayScalars, listAppend(subRealArrayScalars, listAppend(subIntArrays, subRealArrays)))), 923 924 923 // MUL 925 924 mulScalars = { … … 942 941 mulRealArrayScalars = list((DAE.MUL_ARRAY_SCALAR(real_vector), {at,rhs},at) threaded for at in realarrtypes, rhs in realtypes), 943 942 mulTypes = listAppend(mulScalars, listAppend(mulIntArrayScalars, listAppend(mulRealArrayScalars, listAppend(mulScalarProduct,mulMatrixProduct)))), 944 945 943 // MUL_EW 946 944 mulIntArray = list((DAE.MUL_ARR(int_vector), {at,at},at) for at in intarrtypes), 947 945 mulRealArray = list((DAE.MUL_ARR(real_vector), {at,at},at) for at in realarrtypes), 948 mulEwTypes = listAppend(mulScalars, listAppend(mulIntArrayScalars, listAppend(mulRealArrayScalars, listAppend(mulIntArray, mulRealArray)))); 946 mulEwTypes = listAppend(mulScalars, listAppend(mulIntArrayScalars, listAppend(mulRealArrayScalars, listAppend(mulIntArray, mulRealArray)))), 947 // DIV 948 divTypes = (real_div,{real_scalar,real_scalar},real_scalar) :: 949 list((DAE.DIV_ARRAY_SCALAR(real_vector), {at,rhs},at) threaded for at in realarrtypes, rhs in realtypes), 950 // DIV_EW 951 divRealScalarArray = list((DAE.DIV_SCALAR_ARRAY(real_vector), {lhs,at},at) threaded for at in realarrtypes, lhs in realtypes), 952 divArrs = list((DAE.DIV_ARR(real_vector), {at,at},at) for at in realarrtypes), 953 divEwTypes = listAppend(divTypes, listAppend(divRealScalarArray, divArrs)), 954 // POW 955 powTypes = { 956 (real_pow,{real_scalar,real_scalar},real_scalar), 957 (DAE.POW_ARR(real_scalar),{real_matrix,int_scalar},real_matrix) 958 }, 959 // AND 960 andTypes = (DAE.AND(bool_scalar), {bool_scalar, bool_scalar}, bool_scalar) :: 961 list((DAE.AND(bool_scalar), {at,at},at) threaded for at in boolarrtypes), 962 // OR 963 orTypes = (DAE.OR(bool_scalar), {bool_scalar, bool_scalar}, bool_scalar) :: 964 list((DAE.OR(bool_scalar), {at,at},at) threaded for at in boolarrtypes); 949 965 end OperatorsBinary; 950 966 DAE.Type t; … … 984 1000 case Absyn.MUL() then OperatorsBinary.mulTypes; 985 1001 case Absyn.MUL_EW() then OperatorsBinary.mulEwTypes; 986 987 case Absyn.DIV() 988 equation 989 real_div = DAE.DIV(DAE.T_REAL_DEFAULT); 990 real_scalar = DAE.T_REAL_DEFAULT; 991 scalars = {(real_div,{real_scalar,real_scalar},real_scalar)}; 992 realarrscalar = operatorReturn(DAE.DIV_ARRAY_SCALAR(DAE.T_ARRAY(DAE.T_REAL_DEFAULT, {DAE.DIM_UNKNOWN()}, DAE.emptyTypeSource)), 993 realarrtypes, realtypes, realarrtypes); 994 types = List.flatten({scalars,realarrscalar}); 995 then types; 996 997 case Absyn.DIV_EW() 998 equation 999 realarrs = operatorReturn(DAE.DIV_ARR(DAE.T_ARRAY(DAE.T_REAL_DEFAULT, {DAE.DIM_UNKNOWN()}, DAE.emptyTypeSource)), 1000 realarrtypes, realarrtypes, realarrtypes); 1001 scalars = { 1002 (DAE.DIV(DAE.T_REAL_DEFAULT), 1003 {DAE.T_REAL_DEFAULT,DAE.T_REAL_DEFAULT},DAE.T_REAL_DEFAULT)}; 1004 realscalararrs = operatorReturn(DAE.DIV_SCALAR_ARRAY(DAE.T_ARRAY(DAE.T_REAL_DEFAULT, {DAE.DIM_UNKNOWN()}, DAE.emptyTypeSource)), 1005 realtypes, realarrtypes, realarrtypes); 1006 realarrsscalar = operatorReturn(DAE.DIV_ARRAY_SCALAR(DAE.T_ARRAY(DAE.T_REAL_DEFAULT, {DAE.DIM_UNKNOWN()}, DAE.emptyTypeSource)), 1007 realarrtypes, realtypes, realarrtypes); 1008 types = List.flatten({scalars,realscalararrs, 1009 realarrsscalar,realarrs}); 1010 then types; 1011 1012 case Absyn.POW() 1013 equation 1014 // Note: POW_ARR uses Integer exponents, while POW only uses Real exponents 1015 real_scalar = DAE.T_REAL_DEFAULT; 1016 int_scalar = DAE.T_INTEGER_DEFAULT; 1017 real_vector = DAE.T_ARRAY(real_scalar,{DAE.DIM_UNKNOWN()},DAE.emptyTypeSource); 1018 real_matrix = DAE.T_ARRAY(real_vector,{DAE.DIM_UNKNOWN()},DAE.emptyTypeSource); 1019 real_pow = DAE.POW(DAE.T_REAL_DEFAULT); 1020 scalars = {(real_pow,{real_scalar,real_scalar},real_scalar)}; 1021 arrscalar = { 1022 (DAE.POW_ARR(DAE.T_REAL_DEFAULT),{real_matrix,int_scalar}, 1023 real_matrix)}; 1024 types = List.flatten({scalars,arrscalar}); 1025 then types; 1002 case Absyn.DIV() then OperatorsBinary.divTypes; 1003 case Absyn.DIV_EW() then OperatorsBinary.divEwTypes; 1004 case Absyn.POW() then OperatorsBinary.powTypes; 1026 1005 1027 1006 case Absyn.POW_EW() … … 1040 1019 then types; 1041 1020 1042 case Absyn.AND() 1043 equation 1044 scalars = {(DAE.AND(DAE.T_BOOL_DEFAULT), {DAE.T_BOOL_DEFAULT, DAE.T_BOOL_DEFAULT}, DAE.T_BOOL_DEFAULT)}; 1045 boolarrs = operatorReturn(DAE.AND(DAE.T_BOOL_DEFAULT), boolarrtypes, boolarrtypes, boolarrtypes); 1046 types = List.flatten({scalars, boolarrs}); 1047 then types; 1048 1049 case Absyn.OR() 1050 equation 1051 scalars = {(DAE.OR(DAE.T_BOOL_DEFAULT), {DAE.T_BOOL_DEFAULT, DAE.T_BOOL_DEFAULT}, DAE.T_BOOL_DEFAULT)}; 1052 boolarrs = operatorReturn(DAE.OR(DAE.T_BOOL_DEFAULT), boolarrtypes, boolarrtypes, boolarrtypes); 1053 types = List.flatten({scalars, boolarrs}); 1054 then types; 1021 case Absyn.AND() then OperatorsBinary.andTypes; 1022 case Absyn.OR() then OperatorsBinary.orTypes; 1055 1023 1056 1024 // Relational operators
Note: See TracChangeset
for help on using the changeset viewer.