Changeset b91bfde
- Timestamp:
- Apr 12, 2021, 11:53:30 AM (4 years ago)
- Branches:
- ADT, arm-eh, ast-experimental, enum, forall-pointer-decay, jacob/cs343-translation, master, new-ast-unique-expr, pthread-emulation, qualifiedEnum
- Children:
- 73f4d08
- Parents:
- ecfd758
- Location:
- src
- Files:
-
- 6 edited
Legend:
- Unmodified
- Added
- Removed
-
src/AST/Expr.cpp
recfd758 rb91bfde 260 260 } 261 261 262 ConstantExpr * ConstantExpr::from_string( const CodeLocation & loc, const std::string & str ) { 263 const Type * charType = new BasicType( BasicType::Char ); 264 // Adjust the length of the string for the terminator. 265 const Expr * strSize = from_ulong( loc, str.size() + 1 ); 266 const Type * strType = new ArrayType( charType, strSize, FixedLen, StaticDim ); 267 const std::string strValue = "\"" + str + "\""; 268 return new ConstantExpr( loc, strType, strValue, std::nullopt ); 269 } 270 262 271 ConstantExpr * ConstantExpr::null( const CodeLocation & loc, const Type * ptrType ) { 263 272 return new ConstantExpr{ -
src/AST/Expr.hpp
recfd758 rb91bfde 438 438 long long int intValue() const; 439 439 440 /// generates a boolean constant of the given bool440 /// Generates a boolean constant of the given bool. 441 441 static ConstantExpr * from_bool( const CodeLocation & loc, bool b ); 442 /// generates an integer constant of the given int442 /// Generates an integer constant of the given int. 443 443 static ConstantExpr * from_int( const CodeLocation & loc, int i ); 444 /// generates an integer constant of the given unsigned long int444 /// Generates an integer constant of the given unsigned long int. 445 445 static ConstantExpr * from_ulong( const CodeLocation & loc, unsigned long i ); 446 /// generates a null pointer value for the given type. void * if omitted. 446 /// Generates a string constant from the given string (char type, unquoted string). 447 static ConstantExpr * from_string( const CodeLocation & loc, const std::string & string ); 448 /// Generates a null pointer value for the given type. void * if omitted. 447 449 static ConstantExpr * null( const CodeLocation & loc, const Type * ptrType = nullptr ); 448 450 -
src/SynTree/Constant.cc
recfd758 rb91bfde 42 42 } 43 43 44 Constant Constant::from_string( const std::string & str ) { 45 Type * charType = new BasicType( noQualifiers, BasicType::Char ); 46 // Adjust the length of the string for the terminator. 47 Expression * strSize = new ConstantExpr( Constant::from_ulong( str.size() + 1 ) ); 48 Type * strType = new ArrayType( noQualifiers, charType, strSize, false, false ); 49 const std::string strValue = "\"" + str + "\""; 50 return Constant( strType, strValue, std::nullopt ); 51 } 52 44 53 Constant Constant::null( Type * ptrtype ) { 45 54 if ( nullptr == ptrtype ) { -
src/SynTree/Constant.h
recfd758 rb91bfde 47 47 /// generates an integer constant of the given unsigned long int 48 48 static Constant from_ulong( unsigned long i ); 49 /// generates a string constant from the given string (char type, unquoted string) 50 static Constant from_string( const std::string & string ); 49 51 50 52 /// generates a null pointer value for the given type. void * if omitted. -
src/Virtual/ExpandCasts.cc
recfd758 rb91bfde 77 77 78 78 class VirtualCastCore { 79 Type * pointer_to_pvt(int level_of_indirection) {79 CastExpr * cast_to_type_id( Expression * expr, int level_of_indirection ) { 80 80 Type * type = new StructInstType( 81 81 Type::Qualifiers( Type::Const ), pvt_decl ); … … 83 83 type = new PointerType( noQualifiers, type ); 84 84 } 85 return type;85 return new CastExpr( expr, type ); 86 86 } 87 87 … … 253 253 Expression * result = new CastExpr( 254 254 new ApplicationExpr( VariableExpr::functionPointer( vcast_decl ), { 255 new CastExpr( 256 new AddressExpr( new VariableExpr( type_id ) ), 257 pointer_to_pvt(1) 258 ), 259 new CastExpr( 260 castExpr->get_arg(), 261 pointer_to_pvt(2) 262 ) 255 cast_to_type_id( new AddressExpr( new VariableExpr( type_id ) ), 1 ), 256 cast_to_type_id( castExpr->get_arg(), 2 ), 263 257 } ), 264 258 castExpr->get_result()->clone() -
src/Virtual/Tables.cc
recfd758 rb91bfde 172 172 173 173 Attribute * linkonce( const std::string & subsection ) { 174 const std::string section = "\".gnu.linkonce." + subsection + "\""; 175 // Adjust for terminator and quotes. 176 size_t str_size = section.size() + 1 - 2; 174 const std::string section = ".gnu.linkonce." + subsection; 177 175 return new Attribute( "section", { 178 new ConstantExpr( Constant( 179 new ArrayType( 180 noQualifiers, 181 new BasicType( noQualifiers, BasicType::Char ), 182 new ConstantExpr( Constant::from_ulong( str_size ) ), 183 false, false ), 184 section, 185 std::nullopt 186 ) ), 176 new ConstantExpr( Constant::from_string( section ) ), 187 177 } ); 188 178 }
Note: See TracChangeset
for help on using the changeset viewer.