source: src/SynTree/Type.cc @ f1b1e4c

aaron-thesisarm-ehcleanup-dtorsctordeferred_resndemanglerenumforall-pointer-decaygc_noraiijacob/cs343-translationjenkins-sandboxmemorynew-astnew-ast-unique-exprnew-envno_listpersistent-indexerpthread-emulationqualifiedEnumresolv-newwith_gc
Last change on this file since f1b1e4c was f1b1e4c, checked in by Rob Schluntz <rschlunt@…>, 7 years ago

can construct global const objects, except with intrinsic constructors

  • Property mode set to 100644
File size: 1.9 KB
Line 
1//
2// Cforall Version 1.0.0 Copyright (C) 2015 University of Waterloo
3//
4// The contents of this file are covered under the licence agreement in the
5// file "LICENCE" distributed with Cforall.
6//
7// Type.cc --
8//
9// Author           : Richard C. Bilson
10// Created On       : Mon May 18 07:44:20 2015
11// Last Modified By : Rob Schluntz
12// Last Modified On : Wed Dec 09 14:08:48 2015
13// Update Count     : 4
14//
15
16#include "SynTree.h"
17#include "Visitor.h"
18#include "Type.h"
19#include "Declaration.h"
20#include "Common/utility.h"
21
22const char *BasicType::typeNames[BasicType::NUMBER_OF_BASIC_TYPES] = {
23        "_Bool",
24        "char",
25        "char",
26        "unsigned char",
27        "short",
28        "short unsigned",
29        "int",
30        "unsigned int",
31        "long int",
32        "long unsigned int",
33        "long long int",
34        "long long unsigned int",
35        "float",
36        "double",
37        "long double",
38        "float _Complex",
39        "double _Complex",
40        "long double _Complex",
41        "float _Imaginary",
42        "double _Imaginary",
43        "long double _Imaginary",
44};
45
46Type::Type( const Qualifiers &tq ) : tq( tq ) {}
47
48Type::Type( const Type &other ) : tq( other.tq ) {
49        cloneAll( other.forall, forall );
50}
51
52Type::~Type() {
53        deleteAll( forall );
54}
55
56void Type::Qualifiers::print( std::ostream &os, int indent ) const {
57        if ( isConst ) {
58                os << "const ";
59        } // if
60        if ( isVolatile ) {
61                os << "volatile ";
62        } // if
63        if ( isRestrict ) {
64                os << "restrict ";
65        } // if
66        if ( isLvalue ) {
67                os << "lvalue ";
68        } // if
69        if ( isAtomic ) {
70                os << "_Atomic ";
71        } // if
72        if ( isAttribute ) {
73                os << "__attribute(( )) ";
74        } // if
75}
76
77void Type::print( std::ostream &os, int indent ) const {
78        if ( ! forall.empty() ) {
79                os << "forall" << std::endl;
80                printAll( forall, os, indent + 4 );
81                os << std::string( indent+2, ' ' );
82        } // if
83        tq.print( os, indent );
84}
85
86std::ostream & operator<<( std::ostream & out, Type * type ) {
87        type->print( out );
88        return out;
89}
90
91// Local Variables: //
92// tab-width: 4 //
93// mode: c++ //
94// compile-command: "make install" //
95// End: //
Note: See TracBrowser for help on using the repository browser.