Ignore:
Timestamp:
May 9, 2019, 5:17:51 PM (5 years ago)
Author:
Aaron Moss <a3moss@…>
Branches:
ADT, arm-eh, ast-experimental, cleanup-dtors, enum, forall-pointer-decay, jacob/cs343-translation, jenkins-sandbox, master, new-ast, new-ast-unique-expr, pthread-emulation, qualifiedEnum
Children:
3e46cc8
Parents:
2bb4a01
Message:

Add some decls to the new AST

File:
1 edited

Legend:

Unmodified
Added
Removed
  • src/AST/LinkageSpec.hpp

    r2bb4a01 ra300e4a  
    2323namespace ast {
    2424
    25         namespace Linkage {
     25namespace Linkage {
    2626
    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
     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;
    3445                };
    3546
    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                         };
     47                MakeBitfield( Spec )
     48        };
    4649
    47                         MakeBitfield( Spec )
    48                 };
     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 );
    4953
    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 );
     54        /// A human-readable name for this spec
     55        std::string name( Spec spec );
    5356
    54                 /// A human-readable name for this spec
    55                 std::string name( Spec spec );
     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}
    5674
    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         }
    7475}
    7576
Note: See TracChangeset for help on using the changeset viewer.