Changeset 34562 in webkit for trunk/JavaScriptCore/kjs/nodes.h
- Timestamp:
- Jun 15, 2008, 2:30:56 AM (17 years ago)
- File:
-
- 1 edited
Legend:
- Unmodified
- Added
- Removed
-
trunk/JavaScriptCore/kjs/nodes.h
r34555 r34562 32 32 #include "SourceRange.h" 33 33 #include "SymbolTable.h" 34 #include "VM/Opcode.h" 34 35 #include <wtf/UnusedParam.h> 35 36 #include <wtf/ListRefPtr.h> … … 1196 1197 }; 1197 1198 1198 class MultNode : public ExpressionNode { 1199 public: 1200 MultNode(ExpressionNode* term1, ExpressionNode* term2) KJS_FAST_CALL 1201 : ExpressionNode(NumberType) 1202 , m_term1(term1) 1203 , m_term2(term2) 1204 { 1205 } 1206 1207 virtual RegisterID* emitCode(CodeGenerator&, RegisterID* = 0) KJS_FAST_CALL; 1208 virtual void streamTo(SourceStream&) const KJS_FAST_CALL; 1209 virtual Precedence precedence() const { return PrecMultiplicitave; } 1210 1211 private: 1212 RefPtr<ExpressionNode> m_term1; 1213 RefPtr<ExpressionNode> m_term2; 1214 }; 1215 1216 class DivNode : public ExpressionNode { 1217 public: 1218 DivNode(ExpressionNode* term1, ExpressionNode* term2) KJS_FAST_CALL 1219 : ExpressionNode(NumberType) 1220 , m_term1(term1) 1221 , m_term2(term2) 1222 { 1223 } 1224 1225 virtual RegisterID* emitCode(CodeGenerator&, RegisterID* = 0) KJS_FAST_CALL; 1226 virtual void streamTo(SourceStream&) const KJS_FAST_CALL; 1227 virtual Precedence precedence() const { return PrecMultiplicitave; } 1228 1229 private: 1230 RefPtr<ExpressionNode> m_term1; 1231 RefPtr<ExpressionNode> m_term2; 1232 }; 1233 1234 class ModNode : public ExpressionNode { 1235 public: 1236 ModNode(ExpressionNode* term1, ExpressionNode* term2) KJS_FAST_CALL 1237 : ExpressionNode(NumberType) 1238 , m_term1(term1) 1239 , m_term2(term2) 1240 { 1241 } 1242 1243 virtual RegisterID* emitCode(CodeGenerator&, RegisterID* = 0) KJS_FAST_CALL; 1244 virtual void streamTo(SourceStream&) const KJS_FAST_CALL; 1245 virtual Precedence precedence() const { return PrecMultiplicitave; } 1246 1247 private: 1248 RefPtr<ExpressionNode> m_term1; 1249 RefPtr<ExpressionNode> m_term2; 1250 }; 1251 1252 class AddNode : public ExpressionNode { 1253 public: 1254 AddNode(ExpressionNode* term1, ExpressionNode* term2, bool rightHasAssignments) KJS_FAST_CALL 1199 class BinaryOpNode : public ExpressionNode { 1200 public: 1201 BinaryOpNode(ExpressionNode* term1, ExpressionNode* term2, bool rightHasAssignments) 1255 1202 : m_term1(term1) 1256 1203 , m_term2(term2) … … 1259 1206 } 1260 1207 1261 virtual RegisterID* emitCode(CodeGenerator&, RegisterID* = 0) KJS_FAST_CALL; 1262 virtual void streamTo(SourceStream&) const KJS_FAST_CALL; 1263 virtual Precedence precedence() const { return PrecAdditive; } 1264 1265 protected: 1266 AddNode(ExpressionNode* term1, ExpressionNode* term2, JSType expectedReturn, bool rightHasAssignments) KJS_FAST_CALL 1267 : ExpressionNode(expectedReturn) 1208 BinaryOpNode(JSType type, ExpressionNode* term1, ExpressionNode* term2, bool rightHasAssignments) 1209 : ExpressionNode(type) 1268 1210 , m_term1(term1) 1269 1211 , m_term2(term2) … … 1272 1214 } 1273 1215 1216 virtual RegisterID* emitCode(CodeGenerator&, RegisterID* = 0) KJS_FAST_CALL; 1217 virtual OpcodeID opcode() const KJS_FAST_CALL = 0; 1218 1219 protected: 1274 1220 RefPtr<ExpressionNode> m_term1; 1275 1221 RefPtr<ExpressionNode> m_term2; … … 1277 1223 }; 1278 1224 1279 class SubNode : public ExpressionNode { 1280 public: 1281 SubNode(ExpressionNode* term1, ExpressionNode* term2, bool rightHasAssignments) KJS_FAST_CALL 1282 : ExpressionNode(NumberType) 1225 class ReverseBinaryOpNode : public ExpressionNode { 1226 public: 1227 ReverseBinaryOpNode(ExpressionNode* term1, ExpressionNode* term2, bool rightHasAssignments) 1228 : m_term1(term1) 1229 , m_term2(term2) 1230 , m_rightHasAssignments(rightHasAssignments) 1231 { 1232 } 1233 1234 ReverseBinaryOpNode(JSType type, ExpressionNode* term1, ExpressionNode* term2, bool rightHasAssignments) 1235 : ExpressionNode(type) 1283 1236 , m_term1(term1) 1284 1237 , m_term2(term2) … … 1288 1241 1289 1242 virtual RegisterID* emitCode(CodeGenerator&, RegisterID* = 0) KJS_FAST_CALL; 1290 virtual void streamTo(SourceStream&) const KJS_FAST_CALL; 1291 virtual Precedence precedence() const { return PrecAdditive; } 1292 1293 private: 1243 virtual OpcodeID opcode() const KJS_FAST_CALL = 0; 1244 1245 protected: 1294 1246 RefPtr<ExpressionNode> m_term1; 1295 1247 RefPtr<ExpressionNode> m_term2; … … 1297 1249 }; 1298 1250 1299 class LeftShiftNode : public ExpressionNode { 1300 public: 1301 LeftShiftNode(ExpressionNode* term1, ExpressionNode* term2) KJS_FAST_CALL 1302 : ExpressionNode(NumberType) 1303 , m_term1(term1) 1304 , m_term2(term2) 1305 { 1306 } 1307 1308 virtual RegisterID* emitCode(CodeGenerator&, RegisterID* = 0) KJS_FAST_CALL; 1251 class MultNode : public BinaryOpNode { 1252 public: 1253 MultNode(ExpressionNode* term1, ExpressionNode* term2, bool rightHasAssignments) KJS_FAST_CALL 1254 : BinaryOpNode(NumberType, term1, term2, rightHasAssignments) 1255 { 1256 } 1257 1258 virtual OpcodeID opcode() const KJS_FAST_CALL { return op_mul; } 1259 virtual void streamTo(SourceStream&) const KJS_FAST_CALL; 1260 virtual Precedence precedence() const { return PrecMultiplicitave; } 1261 }; 1262 1263 class DivNode : public BinaryOpNode { 1264 public: 1265 DivNode(ExpressionNode* term1, ExpressionNode* term2, bool rightHasAssignments) KJS_FAST_CALL 1266 : BinaryOpNode(NumberType, term1, term2, rightHasAssignments) 1267 { 1268 } 1269 1270 virtual OpcodeID opcode() const KJS_FAST_CALL { return op_div; } 1271 virtual void streamTo(SourceStream&) const KJS_FAST_CALL; 1272 virtual Precedence precedence() const { return PrecMultiplicitave; } 1273 }; 1274 1275 class ModNode : public BinaryOpNode { 1276 public: 1277 ModNode(ExpressionNode* term1, ExpressionNode* term2, bool rightHasAssignments) KJS_FAST_CALL 1278 : BinaryOpNode(NumberType, term1, term2, rightHasAssignments) 1279 { 1280 } 1281 1282 virtual OpcodeID opcode() const KJS_FAST_CALL { return op_mod; } 1283 virtual void streamTo(SourceStream&) const KJS_FAST_CALL; 1284 virtual Precedence precedence() const { return PrecMultiplicitave; } 1285 }; 1286 1287 class AddNode : public BinaryOpNode { 1288 public: 1289 AddNode(ExpressionNode* term1, ExpressionNode* term2, bool rightHasAssignments) KJS_FAST_CALL 1290 : BinaryOpNode(term1, term2, rightHasAssignments) 1291 { 1292 } 1293 1294 virtual OpcodeID opcode() const KJS_FAST_CALL { return op_add; } 1295 virtual void streamTo(SourceStream&) const KJS_FAST_CALL; 1296 virtual Precedence precedence() const { return PrecAdditive; } 1297 }; 1298 1299 class SubNode : public BinaryOpNode { 1300 public: 1301 SubNode(ExpressionNode* term1, ExpressionNode* term2, bool rightHasAssignments) KJS_FAST_CALL 1302 : BinaryOpNode(term1, term2, rightHasAssignments) 1303 { 1304 } 1305 1306 virtual OpcodeID opcode() const KJS_FAST_CALL { return op_sub; } 1307 virtual void streamTo(SourceStream&) const KJS_FAST_CALL; 1308 virtual Precedence precedence() const { return PrecAdditive; } 1309 }; 1310 1311 class LeftShiftNode : public BinaryOpNode { 1312 public: 1313 LeftShiftNode(ExpressionNode* term1, ExpressionNode* term2, bool rightHasAssignments) KJS_FAST_CALL 1314 : BinaryOpNode(NumberType, term1, term2, rightHasAssignments) 1315 { 1316 } 1317 1318 virtual OpcodeID opcode() const KJS_FAST_CALL { return op_lshift; } 1309 1319 virtual void streamTo(SourceStream&) const KJS_FAST_CALL; 1310 1320 virtual Precedence precedence() const { return PrecShift; } 1311 1312 private: 1313 RefPtr<ExpressionNode> m_term1; 1314 RefPtr<ExpressionNode> m_term2; 1315 }; 1316 1317 class RightShiftNode : public ExpressionNode { 1318 public: 1319 RightShiftNode(ExpressionNode* term1, ExpressionNode* term2) KJS_FAST_CALL 1320 : ExpressionNode(NumberType) 1321 , m_term1(term1) 1322 , m_term2(term2) 1323 { 1324 } 1325 1326 virtual RegisterID* emitCode(CodeGenerator&, RegisterID* = 0) KJS_FAST_CALL; 1321 }; 1322 1323 class RightShiftNode : public BinaryOpNode { 1324 public: 1325 RightShiftNode(ExpressionNode* term1, ExpressionNode* term2, bool rightHasAssignments) KJS_FAST_CALL 1326 : BinaryOpNode(NumberType, term1, term2, rightHasAssignments) 1327 { 1328 } 1329 1330 virtual OpcodeID opcode() const KJS_FAST_CALL { return op_rshift; } 1327 1331 virtual void streamTo(SourceStream&) const KJS_FAST_CALL; 1328 1332 virtual Precedence precedence() const { return PrecShift; } 1329 1330 private: 1331 RefPtr<ExpressionNode> m_term1; 1332 RefPtr<ExpressionNode> m_term2; 1333 }; 1334 1335 class UnsignedRightShiftNode : public ExpressionNode { 1336 public: 1337 UnsignedRightShiftNode(ExpressionNode* term1, ExpressionNode* term2) KJS_FAST_CALL 1338 : ExpressionNode(NumberType) 1339 , m_term1(term1) 1340 , m_term2(term2) 1341 { 1342 } 1343 1344 virtual RegisterID* emitCode(CodeGenerator&, RegisterID* = 0) KJS_FAST_CALL; 1333 }; 1334 1335 class UnsignedRightShiftNode : public BinaryOpNode { 1336 public: 1337 UnsignedRightShiftNode(ExpressionNode* term1, ExpressionNode* term2, bool rightHasAssignments) KJS_FAST_CALL 1338 : BinaryOpNode(NumberType, term1, term2, rightHasAssignments) 1339 { 1340 } 1341 1342 virtual OpcodeID opcode() const KJS_FAST_CALL { return op_urshift; } 1345 1343 virtual void streamTo(SourceStream&) const KJS_FAST_CALL; 1346 1344 virtual Precedence precedence() const { return PrecShift; } 1347 1348 private: 1349 RefPtr<ExpressionNode> m_term1; 1350 RefPtr<ExpressionNode> m_term2; 1351 }; 1352 1353 class LessNode : public ExpressionNode { 1354 public: 1355 LessNode(ExpressionNode* expr1, ExpressionNode* expr2) KJS_FAST_CALL 1356 : ExpressionNode(BooleanType) 1357 , m_expr1(expr1) 1358 , m_expr2(expr2) 1359 { 1360 } 1361 1362 virtual RegisterID* emitCode(CodeGenerator&, RegisterID* = 0) KJS_FAST_CALL; 1345 }; 1346 1347 class LessNode : public BinaryOpNode { 1348 public: 1349 LessNode(ExpressionNode* term1, ExpressionNode* term2, bool rightHasAssignments) KJS_FAST_CALL 1350 : BinaryOpNode(BooleanType, term1, term2, rightHasAssignments) 1351 { 1352 } 1353 1354 virtual OpcodeID opcode() const KJS_FAST_CALL { return op_less; } 1363 1355 virtual void streamTo(SourceStream&) const KJS_FAST_CALL; 1364 1356 virtual Precedence precedence() const { return PrecRelational; } 1365 1366 protected: 1367 RefPtr<ExpressionNode> m_expr1; 1368 RefPtr<ExpressionNode> m_expr2; 1369 }; 1370 1371 class GreaterNode : public ExpressionNode { 1372 public: 1373 GreaterNode(ExpressionNode* expr1, ExpressionNode* expr2) KJS_FAST_CALL 1374 : m_expr1(expr1) 1375 , m_expr2(expr2) 1376 { 1377 } 1378 1379 virtual RegisterID* emitCode(CodeGenerator&, RegisterID* = 0) KJS_FAST_CALL; 1357 }; 1358 1359 class GreaterNode : public ReverseBinaryOpNode { 1360 public: 1361 GreaterNode(ExpressionNode* term1, ExpressionNode* term2, bool rightHasAssignments) KJS_FAST_CALL 1362 : ReverseBinaryOpNode(BooleanType, term1, term2, rightHasAssignments) 1363 { 1364 } 1365 1366 virtual OpcodeID opcode() const KJS_FAST_CALL { return op_less; } 1380 1367 virtual void streamTo(SourceStream&) const KJS_FAST_CALL; 1381 1368 virtual Precedence precedence() const { return PrecRelational; } 1382 1383 private: 1384 RefPtr<ExpressionNode> m_expr1; 1385 RefPtr<ExpressionNode> m_expr2; 1386 }; 1387 1388 class LessEqNode : public ExpressionNode { 1389 public: 1390 LessEqNode(ExpressionNode* expr1, ExpressionNode* expr2) KJS_FAST_CALL 1391 : m_expr1(expr1) 1392 , m_expr2(expr2) 1393 { 1394 } 1395 1396 virtual RegisterID* emitCode(CodeGenerator&, RegisterID* = 0) KJS_FAST_CALL; 1369 }; 1370 1371 class LessEqNode : public BinaryOpNode { 1372 public: 1373 LessEqNode(ExpressionNode* term1, ExpressionNode* term2, bool rightHasAssignments) KJS_FAST_CALL 1374 : BinaryOpNode(BooleanType, term1, term2, rightHasAssignments) 1375 { 1376 } 1377 1378 virtual OpcodeID opcode() const KJS_FAST_CALL { return op_lesseq; } 1397 1379 virtual void streamTo(SourceStream&) const KJS_FAST_CALL; 1398 1380 virtual Precedence precedence() const { return PrecRelational; } 1399 1400 private: 1401 RefPtr<ExpressionNode> m_expr1; 1402 RefPtr<ExpressionNode> m_expr2; 1403 }; 1404 1405 class GreaterEqNode : public ExpressionNode { 1406 public: 1407 GreaterEqNode(ExpressionNode* expr1, ExpressionNode* expr2) KJS_FAST_CALL 1408 : m_expr1(expr1) 1409 , m_expr2(expr2) 1410 { 1411 } 1412 1413 virtual RegisterID* emitCode(CodeGenerator&, RegisterID* = 0) KJS_FAST_CALL; 1381 }; 1382 1383 class GreaterEqNode : public ReverseBinaryOpNode { 1384 public: 1385 GreaterEqNode(ExpressionNode* term1, ExpressionNode* term2, bool rightHasAssignments) KJS_FAST_CALL 1386 : ReverseBinaryOpNode(BooleanType, term1, term2, rightHasAssignments) 1387 { 1388 } 1389 1390 virtual OpcodeID opcode() const KJS_FAST_CALL { return op_lesseq; } 1414 1391 virtual void streamTo(SourceStream&) const KJS_FAST_CALL; 1415 1392 virtual Precedence precedence() const { return PrecRelational; } 1416 1417 private: 1418 RefPtr<ExpressionNode> m_expr1; 1419 RefPtr<ExpressionNode> m_expr2; 1420 }; 1421 1422 class InstanceOfNode : public ExpressionNode { 1423 public: 1424 InstanceOfNode(ExpressionNode* expr1, ExpressionNode* expr2) KJS_FAST_CALL 1425 : ExpressionNode(BooleanType) 1426 , m_expr1(expr1) 1427 , m_expr2(expr2) 1428 { 1429 } 1430 1431 virtual RegisterID* emitCode(CodeGenerator&, RegisterID* = 0) KJS_FAST_CALL; 1393 }; 1394 1395 class InstanceOfNode : public BinaryOpNode { 1396 public: 1397 InstanceOfNode(ExpressionNode* term1, ExpressionNode* term2, bool rightHasAssignments) KJS_FAST_CALL 1398 : BinaryOpNode(BooleanType, term1, term2, rightHasAssignments) 1399 { 1400 } 1401 1402 virtual OpcodeID opcode() const KJS_FAST_CALL { return op_instanceof; } 1432 1403 virtual void streamTo(SourceStream&) const KJS_FAST_CALL; 1433 1404 virtual Precedence precedence() const { return PrecRelational; } 1434 1435 private: 1436 RefPtr<ExpressionNode> m_expr1; 1437 RefPtr<ExpressionNode> m_expr2; 1438 }; 1439 1440 class InNode : public ExpressionNode { 1441 public: 1442 InNode(ExpressionNode* expr1, ExpressionNode* expr2) KJS_FAST_CALL 1443 : m_expr1(expr1) 1444 , m_expr2(expr2) 1445 { 1446 } 1447 1448 virtual RegisterID* emitCode(CodeGenerator&, RegisterID* = 0) KJS_FAST_CALL; 1449 1405 }; 1406 1407 class InNode : public BinaryOpNode { 1408 public: 1409 InNode(ExpressionNode* term1, ExpressionNode* term2, bool rightHasAssignments) KJS_FAST_CALL 1410 : BinaryOpNode(term1, term2, rightHasAssignments) 1411 { 1412 } 1413 1414 virtual OpcodeID opcode() const KJS_FAST_CALL { return op_in; } 1450 1415 virtual void streamTo(SourceStream&) const KJS_FAST_CALL; 1451 1416 virtual Precedence precedence() const { return PrecRelational; } 1452 1453 private: 1454 RefPtr<ExpressionNode> m_expr1; 1455 RefPtr<ExpressionNode> m_expr2; 1456 }; 1457 1458 class EqualNode : public ExpressionNode { 1459 public: 1460 EqualNode(ExpressionNode* expr1, ExpressionNode* expr2) KJS_FAST_CALL 1461 : ExpressionNode(BooleanType) 1462 , m_expr1(expr1) 1463 , m_expr2(expr2) 1464 { 1465 } 1466 1467 virtual RegisterID* emitCode(CodeGenerator&, RegisterID* = 0) KJS_FAST_CALL; 1417 }; 1418 1419 class EqualNode : public BinaryOpNode { 1420 public: 1421 EqualNode(ExpressionNode* term1, ExpressionNode* term2, bool rightHasAssignments) KJS_FAST_CALL 1422 : BinaryOpNode(BooleanType, term1, term2, rightHasAssignments) 1423 { 1424 } 1425 1426 virtual OpcodeID opcode() const KJS_FAST_CALL { return op_eq; } 1468 1427 virtual void streamTo(SourceStream&) const KJS_FAST_CALL; 1469 1428 virtual Precedence precedence() const { return PrecEquality; } 1470 1471 private: 1472 RefPtr<ExpressionNode> m_expr1; 1473 RefPtr<ExpressionNode> m_expr2; 1474 }; 1475 1476 class NotEqualNode : public ExpressionNode { 1477 public: 1478 NotEqualNode(ExpressionNode* expr1, ExpressionNode* expr2) KJS_FAST_CALL 1479 : ExpressionNode(BooleanType) 1480 , m_expr1(expr1) 1481 , m_expr2(expr2) 1482 { 1483 } 1484 1485 virtual RegisterID* emitCode(CodeGenerator&, RegisterID* = 0) KJS_FAST_CALL; 1429 }; 1430 1431 class NotEqualNode : public BinaryOpNode { 1432 public: 1433 NotEqualNode(ExpressionNode* term1, ExpressionNode* term2, bool rightHasAssignments) KJS_FAST_CALL 1434 : BinaryOpNode(BooleanType, term1, term2, rightHasAssignments) 1435 { 1436 } 1437 1438 virtual OpcodeID opcode() const KJS_FAST_CALL { return op_neq; } 1486 1439 virtual void streamTo(SourceStream&) const KJS_FAST_CALL; 1487 1440 virtual Precedence precedence() const { return PrecEquality; } 1488 1489 private: 1490 RefPtr<ExpressionNode> m_expr1; 1491 RefPtr<ExpressionNode> m_expr2; 1492 }; 1493 1494 class StrictEqualNode : public ExpressionNode { 1495 public: 1496 StrictEqualNode(ExpressionNode* expr1, ExpressionNode* expr2) KJS_FAST_CALL 1497 : ExpressionNode(BooleanType) 1498 , m_expr1(expr1) 1499 , m_expr2(expr2) 1500 { 1501 } 1502 1503 virtual RegisterID* emitCode(CodeGenerator&, RegisterID* = 0) KJS_FAST_CALL; 1441 }; 1442 1443 class StrictEqualNode : public BinaryOpNode { 1444 public: 1445 StrictEqualNode(ExpressionNode* term1, ExpressionNode* term2, bool rightHasAssignments) KJS_FAST_CALL 1446 : BinaryOpNode(BooleanType, term1, term2, rightHasAssignments) 1447 { 1448 } 1449 1450 virtual OpcodeID opcode() const KJS_FAST_CALL { return op_stricteq; } 1504 1451 virtual void streamTo(SourceStream&) const KJS_FAST_CALL; 1505 1452 virtual Precedence precedence() const { return PrecEquality; } 1506 1507 private: 1508 RefPtr<ExpressionNode> m_expr1; 1509 RefPtr<ExpressionNode> m_expr2; 1510 }; 1511 1512 class NotStrictEqualNode : public ExpressionNode { 1513 public: 1514 NotStrictEqualNode(ExpressionNode* expr1, ExpressionNode* expr2) KJS_FAST_CALL 1515 : ExpressionNode(BooleanType) 1516 , m_expr1(expr1) 1517 , m_expr2(expr2) 1518 { 1519 } 1520 1521 virtual RegisterID* emitCode(CodeGenerator&, RegisterID* = 0) KJS_FAST_CALL; 1453 }; 1454 1455 class NotStrictEqualNode : public BinaryOpNode { 1456 public: 1457 NotStrictEqualNode(ExpressionNode* term1, ExpressionNode* term2, bool rightHasAssignments) KJS_FAST_CALL 1458 : BinaryOpNode(BooleanType, term1, term2, rightHasAssignments) 1459 { 1460 } 1461 1462 virtual OpcodeID opcode() const KJS_FAST_CALL { return op_nstricteq; } 1522 1463 virtual void streamTo(SourceStream&) const KJS_FAST_CALL; 1523 1464 virtual Precedence precedence() const { return PrecEquality; } 1524 1525 private: 1526 RefPtr<ExpressionNode> m_expr1; 1527 RefPtr<ExpressionNode> m_expr2; 1528 }; 1529 1530 class BitAndNode : public ExpressionNode { 1531 public: 1532 BitAndNode(ExpressionNode* expr1, ExpressionNode* expr2) KJS_FAST_CALL 1533 : ExpressionNode(NumberType) 1534 , m_expr1(expr1) 1535 , m_expr2(expr2) 1536 { 1537 } 1538 1539 virtual RegisterID* emitCode(CodeGenerator&, RegisterID* = 0) KJS_FAST_CALL; 1465 }; 1466 1467 class BitAndNode : public BinaryOpNode { 1468 public: 1469 BitAndNode(ExpressionNode* term1, ExpressionNode* term2, bool rightHasAssignments) KJS_FAST_CALL 1470 : BinaryOpNode(NumberType, term1, term2, rightHasAssignments) 1471 { 1472 } 1473 1474 virtual OpcodeID opcode() const KJS_FAST_CALL { return op_bitand; } 1540 1475 virtual void streamTo(SourceStream&) const KJS_FAST_CALL; 1541 1476 virtual Precedence precedence() const { return PrecBitwiseAnd; } 1542 1543 private: 1544 RefPtr<ExpressionNode> m_expr1; 1545 RefPtr<ExpressionNode> m_expr2; 1546 }; 1547 1548 class BitOrNode : public ExpressionNode { 1549 public: 1550 BitOrNode(ExpressionNode* expr1, ExpressionNode* expr2) KJS_FAST_CALL 1551 : ExpressionNode(NumberType) 1552 , m_expr1(expr1) 1553 , m_expr2(expr2) 1554 { 1555 } 1556 1557 virtual RegisterID* emitCode(CodeGenerator&, RegisterID* = 0) KJS_FAST_CALL; 1477 }; 1478 1479 class BitOrNode : public BinaryOpNode { 1480 public: 1481 BitOrNode(ExpressionNode* term1, ExpressionNode* term2, bool rightHasAssignments) KJS_FAST_CALL 1482 : BinaryOpNode(NumberType, term1, term2, rightHasAssignments) 1483 { 1484 } 1485 1486 virtual OpcodeID opcode() const KJS_FAST_CALL { return op_bitor; } 1558 1487 virtual void streamTo(SourceStream&) const KJS_FAST_CALL; 1559 1488 virtual Precedence precedence() const { return PrecBitwiseOr; } 1560 1561 private: 1562 RefPtr<ExpressionNode> m_expr1; 1563 RefPtr<ExpressionNode> m_expr2; 1564 }; 1565 1566 class BitXOrNode : public ExpressionNode { 1567 public: 1568 BitXOrNode(ExpressionNode* expr1, ExpressionNode* expr2) KJS_FAST_CALL 1569 : ExpressionNode(NumberType) 1570 , m_expr1(expr1) 1571 , m_expr2(expr2) 1572 { 1573 } 1574 1575 virtual RegisterID* emitCode(CodeGenerator&, RegisterID* = 0) KJS_FAST_CALL; 1489 }; 1490 1491 class BitXOrNode : public BinaryOpNode { 1492 public: 1493 BitXOrNode(ExpressionNode* term1, ExpressionNode* term2, bool rightHasAssignments) KJS_FAST_CALL 1494 : BinaryOpNode(NumberType, term1, term2, rightHasAssignments) 1495 { 1496 } 1497 1498 virtual OpcodeID opcode() const KJS_FAST_CALL { return op_bitxor; } 1576 1499 virtual void streamTo(SourceStream&) const KJS_FAST_CALL; 1577 1500 virtual Precedence precedence() const { return PrecBitwiseXor; } 1578 1579 private:1580 RefPtr<ExpressionNode> m_expr1;1581 RefPtr<ExpressionNode> m_expr2;1582 1501 }; 1583 1502
Note:
See TracChangeset
for help on using the changeset viewer.