Changeset 1729 for trunk/src/kmk/expreval.c
- Timestamp:
- Sep 5, 2008, 5:50:10 AM (17 years ago)
- File:
-
- 1 edited
Legend:
- Unmodified
- Added
- Removed
-
trunk/src/kmk/expreval.c
r1728 r1729 866 866 static EXPRRET expr_op_defined(PEXPR pThis) 867 867 { 868 PEXPRVAR pVar = &pThis->aVars[pThis->iVar];868 PEXPRVAR pVar = &pThis->aVars[pThis->iVar]; 869 869 struct variable *pMakeVar; 870 assert(pThis->iVar >= 0);871 870 872 871 expr_var_make_simple_string(pVar); … … 886 885 static EXPRRET expr_op_target(PEXPR pThis) 887 886 { 888 PEXPRVAR pVar = &pThis->aVars[pThis->iVar];887 PEXPRVAR pVar = &pThis->aVars[pThis->iVar]; 889 888 struct file *pFile = NULL; 890 assert(pThis->iVar >= 0);891 889 892 890 /* … … 929 927 930 928 /** 929 * Convert to boolean. 930 * 931 * @returns Status code. 932 * @param pThis The instance. 933 */ 934 static EXPRRET expr_op_bool(PEXPR pThis) 935 { 936 expr_var_make_bool(&pThis->aVars[pThis->iVar]); 937 return kExprRet_Ok; 938 } 939 940 941 /** 942 * Convert to number, works on quoted strings too. 943 * 944 * @returns Status code. 945 * @param pThis The instance. 946 */ 947 static EXPRRET expr_op_num(PEXPR pThis) 948 { 949 PEXPRVAR pVar = &pThis->aVars[pThis->iVar]; 950 951 /* unquote the string */ 952 if (pVar->enmType == kExprVar_QuotedSimpleString) 953 pVar->enmType = kExprVar_SimpleString; 954 else if (pVar->enmType == kExprVar_QuotedString) 955 pVar->enmType = kExprVar_String; 956 957 return expr_var_make_num(pThis, pVar); 958 } 959 960 961 /** 962 * Convert to string (simplified and quoted) 963 * 964 * @returns Status code. 965 * @param pThis The instance. 966 */ 967 static EXPRRET expr_op_str(PEXPR pThis) 968 { 969 PEXPRVAR pVar = &pThis->aVars[pThis->iVar]; 970 971 expr_var_make_simple_string(pVar); 972 pVar->enmType = kExprVar_QuotedSimpleString; 973 974 return kExprRet_Ok; 975 } 976 977 978 /** 931 979 * Pluss (dummy / make_integer) 932 980 * … … 936 984 static EXPRRET expr_op_pluss(PEXPR pThis) 937 985 { 938 PEXPRVAR pVar = &pThis->aVars[pThis->iVar]; 939 assert(pThis->iVar >= 0); 940 941 return expr_var_make_num(pThis, pVar); 942 } 943 986 return expr_var_make_num(pThis, &pThis->aVars[pThis->iVar]); 987 } 944 988 945 989 … … 952 996 static EXPRRET expr_op_minus(PEXPR pThis) 953 997 { 954 EXPRRET rc; 955 PEXPRVAR pVar = &pThis->aVars[pThis->iVar]; 956 assert(pThis->iVar >= 0); 998 EXPRRET rc; 999 PEXPRVAR pVar = &pThis->aVars[pThis->iVar]; 957 1000 958 1001 rc = expr_var_make_num(pThis, pVar); … … 973 1016 static EXPRRET expr_op_bitwise_not(PEXPR pThis) 974 1017 { 975 EXPRRET rc; 976 PEXPRVAR pVar = &pThis->aVars[pThis->iVar]; 977 assert(pThis->iVar >= 0); 1018 EXPRRET rc; 1019 PEXPRVAR pVar = &pThis->aVars[pThis->iVar]; 978 1020 979 1021 rc = expr_var_make_num(pThis, pVar); … … 993 1035 static EXPRRET expr_op_logical_not(PEXPR pThis) 994 1036 { 995 PEXPRVAR pVar = &pThis->aVars[pThis->iVar];996 assert(pThis->iVar >= 0); 997 998 expr_var_assign_bool(pVar, !expr_var_make_bool(pVar));1037 PEXPRVAR pVar = &pThis->aVars[pThis->iVar]; 1038 1039 expr_var_make_bool(pVar); 1040 pVar->uVal.i = !pVar->uVal.i; 999 1041 1000 1042 return kExprRet_Ok; … … 1010 1052 static EXPRRET expr_op_multiply(PEXPR pThis) 1011 1053 { 1012 EXPRRET rc = kExprRet_Ok; 1013 PEXPRVAR pVar1 = &pThis->aVars[pThis->iVar - 1]; 1014 PEXPRVAR pVar2 = &pThis->aVars[pThis->iVar]; 1015 assert(pThis->iVar >= 1); 1054 EXPRRET rc = kExprRet_Ok; 1055 PEXPRVAR pVar1 = &pThis->aVars[pThis->iVar - 1]; 1056 PEXPRVAR pVar2 = &pThis->aVars[pThis->iVar]; 1016 1057 1017 1058 rc = expr_var_make_num(pThis, pVar1); … … 1037 1078 static EXPRRET expr_op_divide(PEXPR pThis) 1038 1079 { 1039 EXPRRET rc = kExprRet_Ok; 1040 PEXPRVAR pVar1 = &pThis->aVars[pThis->iVar - 1]; 1041 PEXPRVAR pVar2 = &pThis->aVars[pThis->iVar]; 1042 assert(pThis->iVar >= 1); 1080 EXPRRET rc = kExprRet_Ok; 1081 PEXPRVAR pVar1 = &pThis->aVars[pThis->iVar - 1]; 1082 PEXPRVAR pVar2 = &pThis->aVars[pThis->iVar]; 1043 1083 1044 1084 rc = expr_var_make_num(pThis, pVar1); … … 1064 1104 static EXPRRET expr_op_modulus(PEXPR pThis) 1065 1105 { 1066 EXPRRET rc = kExprRet_Ok; 1067 PEXPRVAR pVar1 = &pThis->aVars[pThis->iVar - 1]; 1068 PEXPRVAR pVar2 = &pThis->aVars[pThis->iVar]; 1069 assert(pThis->iVar >= 1); 1106 EXPRRET rc = kExprRet_Ok; 1107 PEXPRVAR pVar1 = &pThis->aVars[pThis->iVar - 1]; 1108 PEXPRVAR pVar2 = &pThis->aVars[pThis->iVar]; 1070 1109 1071 1110 rc = expr_var_make_num(pThis, pVar1); … … 1091 1130 static EXPRRET expr_op_add(PEXPR pThis) 1092 1131 { 1093 EXPRRET rc = kExprRet_Ok; 1094 PEXPRVAR pVar1 = &pThis->aVars[pThis->iVar - 1]; 1095 PEXPRVAR pVar2 = &pThis->aVars[pThis->iVar]; 1096 assert(pThis->iVar >= 1); 1132 EXPRRET rc = kExprRet_Ok; 1133 PEXPRVAR pVar1 = &pThis->aVars[pThis->iVar - 1]; 1134 PEXPRVAR pVar2 = &pThis->aVars[pThis->iVar]; 1097 1135 1098 1136 rc = expr_var_make_num(pThis, pVar1); … … 1117 1155 static EXPRRET expr_op_sub(PEXPR pThis) 1118 1156 { 1119 EXPRRET rc = kExprRet_Ok; 1120 PEXPRVAR pVar1 = &pThis->aVars[pThis->iVar - 1]; 1121 PEXPRVAR pVar2 = &pThis->aVars[pThis->iVar]; 1122 assert(pThis->iVar >= 1); 1157 EXPRRET rc = kExprRet_Ok; 1158 PEXPRVAR pVar1 = &pThis->aVars[pThis->iVar - 1]; 1159 PEXPRVAR pVar2 = &pThis->aVars[pThis->iVar]; 1123 1160 1124 1161 rc = expr_var_make_num(pThis, pVar1); … … 1142 1179 static EXPRRET expr_op_shift_left(PEXPR pThis) 1143 1180 { 1144 EXPRRET rc = kExprRet_Ok; 1145 PEXPRVAR pVar1 = &pThis->aVars[pThis->iVar - 1]; 1146 PEXPRVAR pVar2 = &pThis->aVars[pThis->iVar]; 1147 assert(pThis->iVar >= 1); 1181 EXPRRET rc = kExprRet_Ok; 1182 PEXPRVAR pVar1 = &pThis->aVars[pThis->iVar - 1]; 1183 PEXPRVAR pVar2 = &pThis->aVars[pThis->iVar]; 1148 1184 1149 1185 rc = expr_var_make_num(pThis, pVar1); … … 1168 1204 static EXPRRET expr_op_shift_right(PEXPR pThis) 1169 1205 { 1170 EXPRRET rc = kExprRet_Ok; 1171 PEXPRVAR pVar1 = &pThis->aVars[pThis->iVar - 1]; 1172 PEXPRVAR pVar2 = &pThis->aVars[pThis->iVar]; 1173 assert(pThis->iVar >= 1); 1206 EXPRRET rc = kExprRet_Ok; 1207 PEXPRVAR pVar1 = &pThis->aVars[pThis->iVar - 1]; 1208 PEXPRVAR pVar2 = &pThis->aVars[pThis->iVar]; 1174 1209 1175 1210 rc = expr_var_make_num(pThis, pVar1); … … 1194 1229 static EXPRRET expr_op_less_or_equal_than(PEXPR pThis) 1195 1230 { 1196 EXPRRET rc = kExprRet_Ok; 1197 PEXPRVAR pVar1 = &pThis->aVars[pThis->iVar - 1]; 1198 PEXPRVAR pVar2 = &pThis->aVars[pThis->iVar]; 1199 assert(pThis->iVar >= 1); 1231 EXPRRET rc = kExprRet_Ok; 1232 PEXPRVAR pVar1 = &pThis->aVars[pThis->iVar - 1]; 1233 PEXPRVAR pVar2 = &pThis->aVars[pThis->iVar]; 1200 1234 1201 1235 rc = expr_var_unify_types(pThis, pVar1, pVar2, "<="); … … 1221 1255 static EXPRRET expr_op_less_than(PEXPR pThis) 1222 1256 { 1223 EXPRRET rc = kExprRet_Ok; 1224 PEXPRVAR pVar1 = &pThis->aVars[pThis->iVar - 1]; 1225 PEXPRVAR pVar2 = &pThis->aVars[pThis->iVar]; 1226 assert(pThis->iVar >= 1); 1257 EXPRRET rc = kExprRet_Ok; 1258 PEXPRVAR pVar1 = &pThis->aVars[pThis->iVar - 1]; 1259 PEXPRVAR pVar2 = &pThis->aVars[pThis->iVar]; 1227 1260 1228 1261 rc = expr_var_unify_types(pThis, pVar1, pVar2, "<"); … … 1248 1281 static EXPRRET expr_op_greater_or_equal_than(PEXPR pThis) 1249 1282 { 1250 EXPRRET rc = kExprRet_Ok; 1251 PEXPRVAR pVar1 = &pThis->aVars[pThis->iVar - 1]; 1252 PEXPRVAR pVar2 = &pThis->aVars[pThis->iVar]; 1253 assert(pThis->iVar >= 1); 1283 EXPRRET rc = kExprRet_Ok; 1284 PEXPRVAR pVar1 = &pThis->aVars[pThis->iVar - 1]; 1285 PEXPRVAR pVar2 = &pThis->aVars[pThis->iVar]; 1254 1286 1255 1287 rc = expr_var_unify_types(pThis, pVar1, pVar2, ">="); … … 1275 1307 static EXPRRET expr_op_greater_than(PEXPR pThis) 1276 1308 { 1277 EXPRRET rc = kExprRet_Ok; 1278 PEXPRVAR pVar1 = &pThis->aVars[pThis->iVar - 1]; 1279 PEXPRVAR pVar2 = &pThis->aVars[pThis->iVar]; 1280 assert(pThis->iVar >= 1); 1309 EXPRRET rc = kExprRet_Ok; 1310 PEXPRVAR pVar1 = &pThis->aVars[pThis->iVar - 1]; 1311 PEXPRVAR pVar2 = &pThis->aVars[pThis->iVar]; 1281 1312 1282 1313 rc = expr_var_unify_types(pThis, pVar1, pVar2, ">"); … … 1302 1333 static EXPRRET expr_op_equal(PEXPR pThis) 1303 1334 { 1304 EXPRRET rc = kExprRet_Ok; 1305 PEXPRVAR pVar1 = &pThis->aVars[pThis->iVar - 1]; 1306 PEXPRVAR pVar2 = &pThis->aVars[pThis->iVar]; 1307 assert(pThis->iVar >= 1); 1335 EXPRRET rc = kExprRet_Ok; 1336 PEXPRVAR pVar1 = &pThis->aVars[pThis->iVar - 1]; 1337 PEXPRVAR pVar2 = &pThis->aVars[pThis->iVar]; 1308 1338 1309 1339 /* … … 1377 1407 static EXPRRET expr_op_bitwise_and(PEXPR pThis) 1378 1408 { 1379 PEXPRVAR pVar1 = &pThis->aVars[pThis->iVar - 1]; 1380 PEXPRVAR pVar2 = &pThis->aVars[pThis->iVar]; 1381 EXPRRET rc; 1382 assert(pThis->iVar >= 1); 1409 PEXPRVAR pVar1 = &pThis->aVars[pThis->iVar - 1]; 1410 PEXPRVAR pVar2 = &pThis->aVars[pThis->iVar]; 1411 EXPRRET rc; 1383 1412 1384 1413 rc = expr_var_make_num(pThis, pVar1); … … 1403 1432 static EXPRRET expr_op_bitwise_xor(PEXPR pThis) 1404 1433 { 1405 PEXPRVAR pVar1 = &pThis->aVars[pThis->iVar - 1]; 1406 PEXPRVAR pVar2 = &pThis->aVars[pThis->iVar]; 1407 EXPRRET rc; 1408 assert(pThis->iVar >= 1); 1434 PEXPRVAR pVar1 = &pThis->aVars[pThis->iVar - 1]; 1435 PEXPRVAR pVar2 = &pThis->aVars[pThis->iVar]; 1436 EXPRRET rc; 1409 1437 1410 1438 rc = expr_var_make_num(pThis, pVar1); … … 1429 1457 static EXPRRET expr_op_bitwise_or(PEXPR pThis) 1430 1458 { 1431 PEXPRVAR pVar1 = &pThis->aVars[pThis->iVar - 1]; 1432 PEXPRVAR pVar2 = &pThis->aVars[pThis->iVar]; 1433 EXPRRET rc; 1434 assert(pThis->iVar >= 1); 1459 PEXPRVAR pVar1 = &pThis->aVars[pThis->iVar - 1]; 1460 PEXPRVAR pVar2 = &pThis->aVars[pThis->iVar]; 1461 EXPRRET rc; 1435 1462 1436 1463 rc = expr_var_make_num(pThis, pVar1); … … 1455 1482 static EXPRRET expr_op_logical_and(PEXPR pThis) 1456 1483 { 1457 PEXPRVAR pVar1 = &pThis->aVars[pThis->iVar - 1]; 1458 PEXPRVAR pVar2 = &pThis->aVars[pThis->iVar]; 1459 assert(pThis->iVar >= 1); 1484 PEXPRVAR pVar1 = &pThis->aVars[pThis->iVar - 1]; 1485 PEXPRVAR pVar2 = &pThis->aVars[pThis->iVar]; 1460 1486 1461 1487 if ( expr_var_make_bool(pVar1) … … 1478 1504 static EXPRRET expr_op_logical_or(PEXPR pThis) 1479 1505 { 1480 PEXPRVAR pVar1 = &pThis->aVars[pThis->iVar - 1]; 1481 PEXPRVAR pVar2 = &pThis->aVars[pThis->iVar]; 1482 assert(pThis->iVar >= 1); 1506 PEXPRVAR pVar1 = &pThis->aVars[pThis->iVar - 1]; 1507 PEXPRVAR pVar2 = &pThis->aVars[pThis->iVar]; 1483 1508 1484 1509 if ( expr_var_make_bool(pVar1) … … 1533 1558 static EXPRRET expr_op_right_parenthesis(PEXPR pThis) 1534 1559 { 1560 assert(0); 1535 1561 (void)pThis; 1536 1562 return kExprRet_Ok; … … 1554 1580 EXPR_OP("defined", 90, 1, expr_op_defined), 1555 1581 EXPR_OP("target", 90, 1, expr_op_target), 1582 EXPR_OP("bool", 90, 1, expr_op_bool), 1583 EXPR_OP("num", 90, 1, expr_op_num), 1584 EXPR_OP("str", 90, 1, expr_op_str), 1556 1585 EXPR_OP("+", 80, 1, expr_op_pluss), 1557 1586 EXPR_OP("-", 80, 1, expr_op_minus), … … 1954 1983 { 1955 1984 pOp = pThis->apOps[pThis->iOp--]; 1985 assert(pThis->iVar + 1 >= pOp->cArgs); 1956 1986 rc = pOp->pfn(pThis); 1957 1987 if (rc < kExprRet_Error)
Note:
See TracChangeset
for help on using the changeset viewer.