Changeset 26945 in webkit for trunk/JavaScriptCore/kjs/nodes.cpp
- Timestamp:
- Oct 23, 2007, 7:01:53 PM (18 years ago)
- File:
-
- 1 edited
Legend:
- Unmodified
- Added
- Removed
-
trunk/JavaScriptCore/kjs/nodes.cpp
r26925 r26945 1194 1194 JSValue *v2 = term2->evaluate(exec); 1195 1195 KJS_CHECKEXCEPTIONVALUE 1196 1197 return mult(exec, v1, v2, '*');1196 1197 return jsNumber(v1->toNumber(exec) * v2->toNumber(exec)); 1198 1198 } 1199 1199 1200 1200 // ECMA 11.5.2 1201 1201 JSValue *DivNode::evaluate(ExecState *exec) 1202 { 1203 JSValue *v1 = term1->evaluate(exec); 1204 KJS_CHECKEXCEPTIONVALUE 1205 1206 JSValue *v2 = term2->evaluate(exec); 1207 KJS_CHECKEXCEPTIONVALUE 1208 1209 return jsNumber(v1->toNumber(exec) / v2->toNumber(exec)); 1210 } 1211 1212 // ECMA 11.5.3 1213 JSValue *ModNode::evaluate(ExecState *exec) 1214 { 1215 JSValue *v1 = term1->evaluate(exec); 1216 KJS_CHECKEXCEPTIONVALUE 1217 1218 JSValue *v2 = term2->evaluate(exec); 1219 KJS_CHECKEXCEPTIONVALUE 1220 1221 return jsNumber(fmod(v1->toNumber(exec), v2->toNumber(exec))); 1222 } 1223 1224 // ------------------------------ Additive Nodes -------------------------------------- 1225 1226 1227 // ECMA 11.6 1228 static inline JSValue *add(ExecState *exec, JSValue *v1, JSValue *v2) 1229 { 1230 // exception for the Date exception in defaultValue() 1231 JSValue *p1 = v1->toPrimitive(exec, UnspecifiedType); 1232 JSValue *p2 = v2->toPrimitive(exec, UnspecifiedType); 1233 1234 if (p1->isString() || p2->isString()) { 1235 UString value = p1->toString(exec) + p2->toString(exec); 1236 if (value.isNull()) { 1237 JSObject *error = Error::create(exec, GeneralError, "Out of memory"); 1238 exec->setException(error); 1239 return error; 1240 } else 1241 return jsString(value); 1242 } 1243 1244 return jsNumber(p1->toNumber(exec) + p2->toNumber(exec)); 1245 } 1246 1247 static inline JSValue *sub(ExecState *exec, JSValue *v1, JSValue *v2) 1248 { 1249 JSValue *p1 = v1->toPrimitive(exec, NumberType); 1250 JSValue *p2 = v2->toPrimitive(exec, NumberType); 1251 1252 return jsNumber(p1->toNumber(exec) - p2->toNumber(exec)); 1253 } 1254 1255 // ECMA 11.6.1 1256 JSValue *AddNode::evaluate(ExecState *exec) 1257 { 1258 JSValue *v1 = term1->evaluate(exec); 1259 KJS_CHECKEXCEPTIONVALUE 1260 1261 JSValue *v2 = term2->evaluate(exec); 1262 KJS_CHECKEXCEPTIONVALUE 1263 1264 return add(exec, v1, v2); 1265 } 1266 1267 1268 // ECMA 11.6.2 1269 JSValue *SubNode::evaluate(ExecState *exec) 1202 1270 { 1203 1271 JSValue *v1 = term1->evaluate(exec); … … 1207 1275 KJS_CHECKEXCEPTIONVALUE 1208 1276 1209 return mult(exec, v1, v2, '/'); 1210 } 1211 1212 // ECMA 11.5.3 1213 JSValue *ModNode::evaluate(ExecState *exec) 1214 { 1215 JSValue *v1 = term1->evaluate(exec); 1216 KJS_CHECKEXCEPTIONVALUE 1217 1218 JSValue *v2 = term2->evaluate(exec); 1219 KJS_CHECKEXCEPTIONVALUE 1220 1221 return mult(exec, v1, v2, '%'); 1222 } 1223 1224 // ------------------------------ Additive Nodes -------------------------------------- 1225 1226 // ECMA 11.6.1 1227 JSValue *AddNode::evaluate(ExecState *exec) 1228 { 1229 JSValue *v1 = term1->evaluate(exec); 1230 KJS_CHECKEXCEPTIONVALUE 1231 1232 JSValue *v2 = term2->evaluate(exec); 1233 KJS_CHECKEXCEPTIONVALUE 1234 1235 return add(exec, v1, v2, '+'); 1236 } 1237 1238 1239 // ECMA 11.6.2 1240 JSValue *SubNode::evaluate(ExecState *exec) 1241 { 1242 JSValue *v1 = term1->evaluate(exec); 1243 KJS_CHECKEXCEPTIONVALUE 1244 1245 JSValue *v2 = term2->evaluate(exec); 1246 KJS_CHECKEXCEPTIONVALUE 1247 1248 return add(exec, v1, v2, '-'); 1277 return sub(exec, v1, v2); 1249 1278 } 1250 1279 … … 1521 1550 switch (oper) { 1522 1551 case OpMultEq: 1523 v = mult(exec, v1, v2, '*');1552 v = jsNumber(v1->toNumber(exec) * v2->toNumber(exec)); 1524 1553 break; 1525 1554 case OpDivEq: 1526 v = mult(exec, v1, v2, '/');1555 v = jsNumber(v1->toNumber(exec) / v2->toNumber(exec)); 1527 1556 break; 1528 1557 case OpPlusEq: 1529 v = add(exec, v1, v2 , '+');1558 v = add(exec, v1, v2); 1530 1559 break; 1531 1560 case OpMinusEq: 1532 v = add(exec, v1, v2, '-');1561 v = sub(exec, v1, v2); 1533 1562 break; 1534 1563 case OpLShift:
Note:
See TracChangeset
for help on using the changeset viewer.