source: src/AST/LinkageSpec.hpp @ 14cebb7a

ADTarm-ehast-experimentalcleanup-dtorsenumforall-pointer-decayjacob/cs343-translationjenkins-sandboxnew-astnew-ast-unique-exprpthread-emulationqualifiedEnum
Last change on this file since 14cebb7a was 14cebb7a, checked in by Andrew Beach <ajbeach@…>, 5 years ago

Removed trailing white-space in AST.

  • Property mode set to 100644
File size: 2.0 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// LinkageSpec.hpp --
8//
9// Author           : Aaron B. Moss
10// Created On       : Thu May 9 10:00:00 2019
11// Last Modified By : Aaron B. Moss
12// Last Modified On : Thu May 9 10:00:00 2019
13// Update Count     : 1
14//
15
16#pragma once
17
18#include <string>
19
20#include "Bitfield.hpp"
21#include "Common/CodeLocation.h"
22
23namespace ast {
24
25namespace Linkage {
26
27        /// Bitflags for linkage specifiers
28        enum {
29                Mangle       = 1 << 0,
30                Generate     = 1 << 1,
31                Overrideable = 1 << 2,
32                Builtin      = 1 << 3,
33                GccBuiltin   = 1 << 4
34        };
35
36        /// Bitflag type for storage classes
37        union Spec {
38                unsigned int val;
39                struct {
40                        bool is_mangled      : 1;
41                        bool is_generatable  : 1;
42                        bool is_overrideable : 1;
43                        bool is_builtin      : 1;
44                        bool is_gcc_builtin  : 1;
45                };
46
47                MakeBitfield( Spec )
48        };
49
50        /// If `cmd` = "C" returns `spec` with `is_mangled = false`.
51        /// If `cmd` = "Cforall" returns `spec` with `is_mangled = true`.
52        Spec update( CodeLocation loc, Spec spec, const std::string * cmd );
53
54        /// A human-readable name for this spec
55        std::string name( Spec spec );
56
57        // Pre-defined flag combinations
58
59        /// C built-in defined in prelude
60        constexpr Spec Intrinsic  = { Mangle | Generate | Overrideable | Builtin };
61        /// Ordinary Cforall
62        constexpr Spec Cforall    = { Mangle | Generate };
63        /// C code: not overloadable, not mangled
64        constexpr Spec C          = { Generate };
65        /// Built by translator (e.g. struct assignment)
66        constexpr Spec AutoGen    = { Mangle | Generate | Overrideable };
67        /// GCC internal
68        constexpr Spec Compiler   = { Mangle | Builtin | GccBuiltin };
69        /// Mangled builtins
70        constexpr Spec BuiltinCFA = { Mangle | Generate | Builtin };
71        /// Non-mangled builtins
72        constexpr Spec BuiltinC   = { Generate | Builtin };
73}
74
75}
76
77// Local Variables: //
78// tab-width: 4 //
79// mode: c++ //
80// compile-command: "make install" //
81// End: //
Note: See TracBrowser for help on using the repository browser.