Changeset 296
- Timestamp:
- 12/15/09 23:54:38 (15 years ago)
- Files:
-
- branches/dmd-1.x/src/expression.c (modified) (1 diff)
- trunk/src/expression.c (modified) (1 diff)
Legend:
- Unmodified
- Added
- Removed
- Modified
- Copied
- Moved
branches/dmd-1.x/src/expression.c
r278 r296 1472 1472 toInteger(); 1473 1473 t = type->toBasetype(); 1474 1474 if (t->ty == Tuns64) 1475 1475 return (real_t)(d_uns64)value; 1476 1476 else 1477 1477 return (real_t)(d_int64)value; 1478 1478 } 1479 1479 1480 1480 real_t IntegerExp::toImaginary() 1481 1481 { 1482 1482 return (real_t) 0; 1483 1483 } 1484 1484 1485 1485 complex_t IntegerExp::toComplex() 1486 1486 { 1487 1487 return toReal(); 1488 1488 } 1489 1489 1490 1490 int IntegerExp::isBool(int result) 1491 1491 { 1492 return result ? value != 0 : value == 0; 1492 int r = toInteger() != 0; 1493 return result ? r : !r; 1493 1494 } 1494 1495 1495 1496 Expression *IntegerExp::semantic(Scope *sc) 1496 1497 { 1497 1498 if (!type) 1498 1499 { 1499 1500 // Determine what the type of this number is 1500 1501 dinteger_t number = value; 1501 1502 1502 1503 if (number & 0x8000000000000000LL) 1503 1504 type = Type::tuns64; 1504 1505 else if (number & 0xFFFFFFFF80000000LL) 1505 1506 type = Type::tint64; 1506 1507 else 1507 1508 type = Type::tint32; 1508 1509 } 1509 1510 else 1510 1511 { if (!type->deco) 1511 1512 type = type->semantic(loc, sc); 1512 1513 } trunk/src/expression.c
r280 r296 1556 1556 toInteger(); 1557 1557 t = type->toBasetype(); 1558 1558 if (t->ty == Tuns64) 1559 1559 return (real_t)(d_uns64)value; 1560 1560 else 1561 1561 return (real_t)(d_int64)value; 1562 1562 } 1563 1563 1564 1564 real_t IntegerExp::toImaginary() 1565 1565 { 1566 1566 return (real_t) 0; 1567 1567 } 1568 1568 1569 1569 complex_t IntegerExp::toComplex() 1570 1570 { 1571 1571 return toReal(); 1572 1572 } 1573 1573 1574 1574 int IntegerExp::isBool(int result) 1575 1575 { 1576 return result ? value != 0 : value == 0; 1576 int r = toInteger() != 0; 1577 return result ? r : !r; 1577 1578 } 1578 1579 1579 1580 Expression *IntegerExp::semantic(Scope *sc) 1580 1581 { 1581 1582 if (!type) 1582 1583 { 1583 1584 // Determine what the type of this number is 1584 1585 dinteger_t number = value; 1585 1586 1586 1587 if (number & 0x8000000000000000LL) 1587 1588 type = Type::tuns64; 1588 1589 else if (number & 0xFFFFFFFF80000000LL) 1589 1590 type = Type::tint64; 1590 1591 else 1591 1592 type = Type::tint32; 1592 1593 } 1593 1594 else 1594 1595 { if (!type->deco) 1595 1596 type = type->semantic(loc, sc); 1596 1597 }
