Changes in src/SynTree/Constant.cc [c36298d:17129659]
- File:
-
- 1 edited
-
src/SynTree/Constant.cc (modified) (4 diffs)
Legend:
- Unmodified
- Added
- Removed
-
src/SynTree/Constant.cc
rc36298d r17129659 22 22 #include "Type.h" // for BasicType, Type, Type::Qualifiers, PointerType 23 23 24 Constant::Constant( Type * type, std::string rep, std::optional<unsigned long long> ival ) : type( type ), rep( rep ), ival( ival ) {} 24 Constant::Constant( Type * type, std::string rep, unsigned long long val ) : type( type ), rep( rep ), val( val ) {} 25 Constant::Constant( Type * type, std::string rep, double val ) : type( type ), rep( rep ), val( val ) {} 25 26 26 Constant::Constant( const Constant &other ) : BaseSyntaxNode( other ), rep( other.rep ), ival( other.ival ) {27 Constant::Constant( const Constant &other ) : BaseSyntaxNode( other ), rep( other.rep ), val( other.val ) { 27 28 type = other.type->clone(); 28 29 } … … 34 35 } 35 36 37 Constant Constant::from_char( char c ) { 38 return Constant( new BasicType( Type::Qualifiers(), BasicType::Char ), std::to_string( c ), (unsigned long long int)c ); 39 } 40 36 41 Constant Constant::from_int( int i ) { 37 42 return Constant( new BasicType( Type::Qualifiers(), BasicType::SignedInt ), std::to_string( i ), (unsigned long long int)i ); … … 40 45 Constant Constant::from_ulong( unsigned long i ) { 41 46 return Constant( new BasicType( Type::Qualifiers(), BasicType::LongUnsignedInt ), std::to_string( i ), (unsigned long long int)i ); 47 } 48 49 Constant Constant::from_double( double d ) { 50 return Constant( new BasicType( Type::Qualifiers(), BasicType::Double ), std::to_string( d ), d ); 51 } 52 53 Constant Constant::from_string( std::string const & str ) { 54 return Constant( 55 new ArrayType( 56 noQualifiers, 57 new BasicType( Type::Qualifiers( Type::Const ), BasicType::Char ), 58 new ConstantExpr( Constant::from_int( str.size() + 1 /* \0 */ )), 59 false, false ), 60 std::string("\"") + str + "\"", (unsigned long long int)0 ); 42 61 } 43 62 … … 55 74 unsigned long long Constant::get_ival() const { 56 75 assertf( strict_dynamic_cast<BasicType*>(type)->isInteger(), "Attempt to retrieve ival from non-integer constant." ); 57 return ival.value(); 76 return val.ival; 77 } 78 79 double Constant::get_dval() const { 80 assertf( ! strict_dynamic_cast<BasicType*>(type)->isInteger(), "Attempt to retrieve dval from integer constant." ); 81 return val.dval; 58 82 } 59 83 60 84 void Constant::print( std::ostream &os, Indenter ) const { 61 os << "(" << rep << " " << (ival ? toString(ival.value()) : "");85 os << "(" << rep << " " << val.ival; 62 86 if ( type ) { 63 87 os << ": ";
Note:
See TracChangeset
for help on using the changeset viewer.