Changes in src/AST/Decl.cpp [07de76b:e0e9a0b]
- File:
-
- 1 edited
Legend:
- Unmodified
- Added
- Removed
-
src/AST/Decl.cpp
r07de76b re0e9a0b 9 9 // Author : Aaron B. Moss 10 10 // Created On : Thu May 9 10:00:00 2019 11 // Last Modified By : Peter A. Buhr12 // Last Modified On : Fri Dec 13 16:23:15201913 // Update Count : 2011 // Last Modified By : Aaron B. Moss 12 // Last Modified On : Thu May 9 10:00:00 2019 13 // Update Count : 1 14 14 // 15 15 … … 18 18 #include <cassert> // for assert, strict_dynamic_cast 19 19 #include <iostream> 20 #include <string> 20 21 #include <unordered_map> 21 22 … … 26 27 #include "Node.hpp" // for readonly 27 28 #include "Type.hpp" // for readonly 29 #include "Parser/ParseNode.h" // for DeclarationNode 28 30 29 31 namespace ast { … … 50 52 51 53 const Type * FunctionDecl::get_type() const { return type.get(); } 52 void FunctionDecl::set_type(Type * t) { type = strict_dynamic_cast< FunctionType* >( t ); } 54 void FunctionDecl::set_type( const Type * t ) { 55 type = strict_dynamic_cast< const FunctionType * >( t ); 56 } 53 57 54 58 // --- TypeDecl 55 59 56 const char * TypeDecl::typeString() const { 57 static const char * kindNames[] = { "sized data type", "sized object type", "sized function type", "sized tuple type" }; 58 static_assert( sizeof(kindNames)/sizeof(kindNames[0]) == TypeDecl::NUMBER_OF_KINDS, "typeString: kindNames is out of sync." ); 59 assertf( kind < TypeDecl::NUMBER_OF_KINDS, "TypeDecl kind is out of bounds." ); 60 return sized ? kindNames[ kind ] : &kindNames[ kind ][ sizeof("sized") ]; // sizeof includes '\0' 60 std::string TypeDecl::typeString() const { 61 static const std::string kindNames[] = { "object type", "function type", "tuple type" }; 62 assertf( sizeof(kindNames)/sizeof(kindNames[0]) == DeclarationNode::NoTypeClass-1, 63 "typeString: kindNames is out of sync." ); 64 assertf( kind < sizeof(kindNames)/sizeof(kindNames[0]), "TypeDecl's kind is out of bounds." ); 65 return (sized ? "sized " : "") + kindNames[ kind ]; 61 66 } 62 67 63 const char *TypeDecl::genTypeString() const {64 static const char * kindNames[] = { "dtype", "otype", "ftype", "ttype" };65 static_assert( sizeof(kindNames)/sizeof(kindNames[0]) == TypeDecl::NUMBER_OF_KINDS, "genTypeString: kindNames is out of sync." );66 assertf( kind < TypeDecl::NUMBER_OF_KINDS, "TypeDeclkind is out of bounds." );68 std::string TypeDecl::genTypeString() const { 69 static const std::string kindNames[] = { "dtype", "ftype", "ttype" }; 70 assertf( sizeof(kindNames)/sizeof(kindNames[0]) == DeclarationNode::NoTypeClass-1, "genTypeString: kindNames is out of sync." ); 71 assertf( kind < sizeof(kindNames)/sizeof(kindNames[0]), "TypeDecl's kind is out of bounds." ); 67 72 return kindNames[ kind ]; 68 73 } … … 70 75 std::ostream & operator<< ( std::ostream & out, const TypeDecl::Data & data ) { 71 76 return out << data.kind << ", " << data.isComplete; 72 }73 74 // --- AggregateDecl75 76 // These must harmonize with the corresponding AggregateDecl::Aggregate enumerations.77 static const char * aggregateNames[] = { "struct", "union", "enum", "exception", "trait", "generator", "coroutine", "monitor", "thread", "NoAggregateName" };78 79 const char * AggregateDecl::aggrString( AggregateDecl::Aggregate aggr ) {80 return aggregateNames[aggr];81 77 } 82 78
Note:
See TracChangeset
for help on using the changeset viewer.