Changeset 36976 in webkit for trunk/JavaScriptCore/kjs/nodes.h
- Timestamp:
- Sep 26, 2008, 6:44:15 PM (17 years ago)
- File:
-
- 1 edited
Legend:
- Unmodified
- Added
- Removed
-
trunk/JavaScriptCore/kjs/nodes.h
r36871 r36976 33 33 #include "Opcode.h" 34 34 #include "RegisterID.h" 35 #include "ResultType.h" 35 36 #include "SourceRange.h" 36 37 #include "SymbolTable.h" … … 194 195 195 196 protected: 196 Node(JSGlobalData*, JSType) JSC_FAST_CALL; // used by ExpressionNode 197 198 int m_line : 28; 199 unsigned m_expectedReturnType : 3; // JSType 197 int m_line; 200 198 }; 201 199 202 200 class ExpressionNode : public Node { 203 201 public: 204 ExpressionNode(JSGlobalData* globalData ) JSC_FAST_CALL : Node(globalData) {}205 ExpressionNode(JSGlobalData* globalData, JSType expectedReturn) JSC_FAST_CALL206 : Node(globalData, expectedReturn)202 ExpressionNode(JSGlobalData* globalData, ResultType resultDesc = ResultType::unknown()) JSC_FAST_CALL 203 : Node(globalData) 204 , m_resultDesc(resultDesc) 207 205 { 208 206 } … … 217 215 virtual bool isDotAccessorNode() const JSC_FAST_CALL { return false; } 218 216 219 JSType expectedReturnType() const JSC_FAST_CALL { return static_cast<JSType>(m_expectedReturnType); }217 ResultType resultDescriptor() const JSC_FAST_CALL { return m_resultDesc; } 220 218 221 219 // This needs to be in public in order to compile using GCC 3.x 222 220 typedef enum { EvalOperator, FunctionCall } CallerType; 221 222 private: 223 ResultType m_resultDesc; 223 224 }; 224 225 … … 246 247 public: 247 248 NullNode(JSGlobalData* globalData) JSC_FAST_CALL 248 : ExpressionNode(globalData, NullType)249 : ExpressionNode(globalData, ResultType::nullType()) 249 250 { 250 251 } … … 261 262 public: 262 263 BooleanNode(JSGlobalData* globalData, bool value) JSC_FAST_CALL 263 : ExpressionNode(globalData, BooleanType)264 : ExpressionNode(globalData, ResultType::boolean()) 264 265 , m_value(value) 265 266 { … … 279 280 public: 280 281 NumberNode(JSGlobalData* globalData, double v) JSC_FAST_CALL 281 : ExpressionNode(globalData, NumberType)282 : ExpressionNode(globalData, ResultType::constNumber()) 282 283 , m_double(v) 283 284 { … … 316 317 public: 317 318 StringNode(JSGlobalData* globalData, const Identifier& v) JSC_FAST_CALL 318 : ExpressionNode(globalData, StringType)319 : ExpressionNode(globalData, ResultType::string()) 319 320 , m_value(v) 320 321 { … … 845 846 public: 846 847 PrePostResolveNode(JSGlobalData* globalData, const Identifier& ident, unsigned divot, unsigned startOffset, unsigned endOffset) JSC_FAST_CALL 847 : ExpressionNode(globalData, NumberType)848 : ExpressionNode(globalData, ResultType::constNumber()) // could be reusable for pre? 848 849 , ThrowableExpressionData(divot, startOffset, endOffset) 849 850 , m_ident(ident) … … 1027 1028 public: 1028 1029 TypeOfResolveNode(JSGlobalData* globalData, const Identifier& ident) JSC_FAST_CALL 1029 : ExpressionNode(globalData, StringType)1030 : ExpressionNode(globalData, ResultType::string()) 1030 1031 , m_ident(ident) 1031 1032 { … … 1047 1048 public: 1048 1049 TypeOfValueNode(JSGlobalData* globalData, ExpressionNode* expr) JSC_FAST_CALL 1049 : ExpressionNode(globalData, StringType)1050 : ExpressionNode(globalData, ResultType::string()) 1050 1051 , m_expr(expr) 1051 1052 { … … 1147 1148 } 1148 1149 1149 UnaryOpNode(JSGlobalData* globalData, JSType type, ExpressionNode* expr)1150 UnaryOpNode(JSGlobalData* globalData, ResultType type, ExpressionNode* expr) 1150 1151 : ExpressionNode(globalData, type) 1151 1152 , m_expr(expr) … … 1163 1164 public: 1164 1165 UnaryPlusNode(JSGlobalData* globalData, ExpressionNode* expr) JSC_FAST_CALL 1165 : UnaryOpNode(globalData, NumberType, expr)1166 : UnaryOpNode(globalData, ResultType::constNumber(), expr) 1166 1167 { 1167 1168 } … … 1175 1176 public: 1176 1177 NegateNode(JSGlobalData* globalData, ExpressionNode* expr) JSC_FAST_CALL 1177 : UnaryOpNode(globalData, NumberType, expr)1178 : UnaryOpNode(globalData, ResultType::reusableNumber(), expr) 1178 1179 { 1179 1180 } … … 1187 1188 public: 1188 1189 BitwiseNotNode(JSGlobalData* globalData, ExpressionNode* expr) JSC_FAST_CALL 1189 : UnaryOpNode(globalData, NumberType, expr)1190 : UnaryOpNode(globalData, ResultType::reusableNumber(), expr) 1190 1191 { 1191 1192 } … … 1199 1200 public: 1200 1201 LogicalNotNode(JSGlobalData* globalData, ExpressionNode* expr) JSC_FAST_CALL 1201 : UnaryOpNode(globalData, BooleanType, expr)1202 : UnaryOpNode(globalData, ResultType::boolean(), expr) 1202 1203 { 1203 1204 } … … 1218 1219 } 1219 1220 1220 BinaryOpNode(JSGlobalData* globalData, JSType type, ExpressionNode* expr1, ExpressionNode* expr2, bool rightHasAssignments)1221 BinaryOpNode(JSGlobalData* globalData, ResultType type, ExpressionNode* expr1, ExpressionNode* expr2, bool rightHasAssignments) 1221 1222 : ExpressionNode(globalData, type) 1222 1223 , m_expr1(expr1) … … 1245 1246 } 1246 1247 1247 ReverseBinaryOpNode(JSGlobalData* globalData, JSType type, ExpressionNode* expr1, ExpressionNode* expr2, bool rightHasAssignments)1248 ReverseBinaryOpNode(JSGlobalData* globalData, ResultType type, ExpressionNode* expr1, ExpressionNode* expr2, bool rightHasAssignments) 1248 1249 : ExpressionNode(globalData, type) 1249 1250 , m_expr1(expr1) … … 1265 1266 public: 1266 1267 MultNode(JSGlobalData* globalData, ExpressionNode* expr1, ExpressionNode* expr2, bool rightHasAssignments) JSC_FAST_CALL 1267 : BinaryOpNode(globalData, NumberType, expr1, expr2, rightHasAssignments)1268 : BinaryOpNode(globalData, ResultType::reusableNumber(), expr1, expr2, rightHasAssignments) 1268 1269 { 1269 1270 } … … 1277 1278 public: 1278 1279 DivNode(JSGlobalData* globalData, ExpressionNode* expr1, ExpressionNode* expr2, bool rightHasAssignments) JSC_FAST_CALL 1279 : BinaryOpNode(globalData, NumberType, expr1, expr2, rightHasAssignments)1280 : BinaryOpNode(globalData, ResultType::reusableNumber(), expr1, expr2, rightHasAssignments) 1280 1281 { 1281 1282 } … … 1289 1290 public: 1290 1291 ModNode(JSGlobalData* globalData, ExpressionNode* expr1, ExpressionNode* expr2, bool rightHasAssignments) JSC_FAST_CALL 1291 : BinaryOpNode(globalData, NumberType, expr1, expr2, rightHasAssignments)1292 : BinaryOpNode(globalData, ResultType::reusableNumber(), expr1, expr2, rightHasAssignments) 1292 1293 { 1293 1294 } … … 1301 1302 public: 1302 1303 AddNode(JSGlobalData* globalData, ExpressionNode* expr1, ExpressionNode* expr2, bool rightHasAssignments) JSC_FAST_CALL 1303 : BinaryOpNode(globalData, expr1, expr2, rightHasAssignments)1304 : BinaryOpNode(globalData, ResultType::forAdd(expr1->resultDescriptor(), expr2->resultDescriptor()), expr1, expr2, rightHasAssignments) 1304 1305 { 1305 1306 } … … 1313 1314 public: 1314 1315 SubNode(JSGlobalData* globalData, ExpressionNode* expr1, ExpressionNode* expr2, bool rightHasAssignments) JSC_FAST_CALL 1315 : BinaryOpNode(globalData, expr1, expr2, rightHasAssignments)1316 : BinaryOpNode(globalData, ResultType::reusableNumber(), expr1, expr2, rightHasAssignments) 1316 1317 { 1317 1318 } … … 1325 1326 public: 1326 1327 LeftShiftNode(JSGlobalData* globalData, ExpressionNode* expr1, ExpressionNode* expr2, bool rightHasAssignments) JSC_FAST_CALL 1327 : BinaryOpNode(globalData, NumberType, expr1, expr2, rightHasAssignments)1328 : BinaryOpNode(globalData, ResultType::reusableNumber(), expr1, expr2, rightHasAssignments) 1328 1329 { 1329 1330 } … … 1337 1338 public: 1338 1339 RightShiftNode(JSGlobalData* globalData, ExpressionNode* expr1, ExpressionNode* expr2, bool rightHasAssignments) JSC_FAST_CALL 1339 : BinaryOpNode(globalData, NumberType, expr1, expr2, rightHasAssignments)1340 : BinaryOpNode(globalData, ResultType::reusableNumber(), expr1, expr2, rightHasAssignments) 1340 1341 { 1341 1342 } … … 1349 1350 public: 1350 1351 UnsignedRightShiftNode(JSGlobalData* globalData, ExpressionNode* expr1, ExpressionNode* expr2, bool rightHasAssignments) JSC_FAST_CALL 1351 : BinaryOpNode(globalData, NumberType, expr1, expr2, rightHasAssignments)1352 : BinaryOpNode(globalData, ResultType::reusableNumber(), expr1, expr2, rightHasAssignments) 1352 1353 { 1353 1354 } … … 1361 1362 public: 1362 1363 LessNode(JSGlobalData* globalData, ExpressionNode* expr1, ExpressionNode* expr2, bool rightHasAssignments) JSC_FAST_CALL 1363 : BinaryOpNode(globalData, BooleanType, expr1, expr2, rightHasAssignments)1364 : BinaryOpNode(globalData, ResultType::boolean(), expr1, expr2, rightHasAssignments) 1364 1365 { 1365 1366 } … … 1373 1374 public: 1374 1375 GreaterNode(JSGlobalData* globalData, ExpressionNode* expr1, ExpressionNode* expr2, bool rightHasAssignments) JSC_FAST_CALL 1375 : ReverseBinaryOpNode(globalData, BooleanType, expr1, expr2, rightHasAssignments)1376 : ReverseBinaryOpNode(globalData, ResultType::boolean(), expr1, expr2, rightHasAssignments) 1376 1377 { 1377 1378 } … … 1385 1386 public: 1386 1387 LessEqNode(JSGlobalData* globalData, ExpressionNode* expr1, ExpressionNode* expr2, bool rightHasAssignments) JSC_FAST_CALL 1387 : BinaryOpNode(globalData, BooleanType, expr1, expr2, rightHasAssignments)1388 : BinaryOpNode(globalData, ResultType::boolean(), expr1, expr2, rightHasAssignments) 1388 1389 { 1389 1390 } … … 1397 1398 public: 1398 1399 GreaterEqNode(JSGlobalData* globalData, ExpressionNode* expr1, ExpressionNode* expr2, bool rightHasAssignments) JSC_FAST_CALL 1399 : ReverseBinaryOpNode(globalData, BooleanType, expr1, expr2, rightHasAssignments)1400 : ReverseBinaryOpNode(globalData, ResultType::boolean(), expr1, expr2, rightHasAssignments) 1400 1401 { 1401 1402 } … … 1408 1409 class ThrowableBinaryOpNode : public BinaryOpNode, public ThrowableExpressionData { 1409 1410 public: 1410 ThrowableBinaryOpNode(JSGlobalData* globalData, JSType type, ExpressionNode* expr1, ExpressionNode* expr2, bool rightHasAssignments) JSC_FAST_CALL1411 ThrowableBinaryOpNode(JSGlobalData* globalData, ResultType type, ExpressionNode* expr1, ExpressionNode* expr2, bool rightHasAssignments) JSC_FAST_CALL 1411 1412 : BinaryOpNode(globalData, type, expr1, expr2, rightHasAssignments) 1412 1413 { … … 1422 1423 public: 1423 1424 InstanceOfNode(JSGlobalData* globalData, ExpressionNode* expr1, ExpressionNode* expr2, bool rightHasAssignments) JSC_FAST_CALL 1424 : ThrowableBinaryOpNode(globalData, BooleanType, expr1, expr2, rightHasAssignments)1425 : ThrowableBinaryOpNode(globalData, ResultType::boolean(), expr1, expr2, rightHasAssignments) 1425 1426 { 1426 1427 } … … 1448 1449 public: 1449 1450 EqualNode(JSGlobalData* globalData, ExpressionNode* expr1, ExpressionNode* expr2, bool rightHasAssignments) JSC_FAST_CALL 1450 : BinaryOpNode(globalData, BooleanType, expr1, expr2, rightHasAssignments)1451 : BinaryOpNode(globalData, ResultType::boolean(), expr1, expr2, rightHasAssignments) 1451 1452 { 1452 1453 } … … 1461 1462 public: 1462 1463 NotEqualNode(JSGlobalData* globalData, ExpressionNode* expr1, ExpressionNode* expr2, bool rightHasAssignments) JSC_FAST_CALL 1463 : BinaryOpNode(globalData, BooleanType, expr1, expr2, rightHasAssignments)1464 : BinaryOpNode(globalData, ResultType::boolean(), expr1, expr2, rightHasAssignments) 1464 1465 { 1465 1466 } … … 1473 1474 public: 1474 1475 StrictEqualNode(JSGlobalData* globalData, ExpressionNode* expr1, ExpressionNode* expr2, bool rightHasAssignments) JSC_FAST_CALL 1475 : BinaryOpNode(globalData, BooleanType, expr1, expr2, rightHasAssignments)1476 : BinaryOpNode(globalData, ResultType::boolean(), expr1, expr2, rightHasAssignments) 1476 1477 { 1477 1478 } … … 1486 1487 public: 1487 1488 NotStrictEqualNode(JSGlobalData* globalData, ExpressionNode* expr1, ExpressionNode* expr2, bool rightHasAssignments) JSC_FAST_CALL 1488 : BinaryOpNode(globalData, BooleanType, expr1, expr2, rightHasAssignments)1489 : BinaryOpNode(globalData, ResultType::boolean(), expr1, expr2, rightHasAssignments) 1489 1490 { 1490 1491 } … … 1498 1499 public: 1499 1500 BitAndNode(JSGlobalData* globalData, ExpressionNode* expr1, ExpressionNode* expr2, bool rightHasAssignments) JSC_FAST_CALL 1500 : BinaryOpNode(globalData, NumberType, expr1, expr2, rightHasAssignments)1501 : BinaryOpNode(globalData, ResultType::reusableNumber(), expr1, expr2, rightHasAssignments) 1501 1502 { 1502 1503 } … … 1510 1511 public: 1511 1512 BitOrNode(JSGlobalData* globalData, ExpressionNode* expr1, ExpressionNode* expr2, bool rightHasAssignments) JSC_FAST_CALL 1512 : BinaryOpNode(globalData, NumberType, expr1, expr2, rightHasAssignments)1513 : BinaryOpNode(globalData, ResultType::reusableNumber(), expr1, expr2, rightHasAssignments) 1513 1514 { 1514 1515 } … … 1522 1523 public: 1523 1524 BitXOrNode(JSGlobalData* globalData, ExpressionNode* expr1, ExpressionNode* expr2, bool rightHasAssignments) JSC_FAST_CALL 1524 : BinaryOpNode(globalData, NumberType, expr1, expr2, rightHasAssignments)1525 : BinaryOpNode(globalData, ResultType::reusableNumber(), expr1, expr2, rightHasAssignments) 1525 1526 { 1526 1527 } … … 1537 1538 public: 1538 1539 LogicalOpNode(JSGlobalData* globalData, ExpressionNode* expr1, ExpressionNode* expr2, LogicalOperator oper) JSC_FAST_CALL 1539 : ExpressionNode(globalData, BooleanType)1540 : ExpressionNode(globalData, ResultType::boolean()) 1540 1541 , m_expr1(expr1) 1541 1542 , m_expr2(expr2)
Note:
See TracChangeset
for help on using the changeset viewer.