source: src/AST/LinkageSpec.cpp @ a4da45e

Last change on this file since a4da45e was c7ebbec, checked in by Andrew Beach <ajbeach@…>, 11 months ago

Reorganization of Linkage::Spec. is_mangled represented two properties with is_gcc_builtin separating them in one case. The second property is_overloadable which replaces is_gcc_builtin.

  • Property mode set to 100644
File size: 1.5 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 : Peter A. Buhr
12// Last Modified On : Mon Dec 11 16:08:58 2023
13// Update Count     : 2
14//
15
16#include "LinkageSpec.hpp"
17
18#include <cassert>
19#include <memory>   // for unique_ptr
20#include <string>
21
22#include "Common/CodeLocation.h"
23#include "Common/SemanticError.h"
24
25namespace ast {
26
27namespace Linkage {
28
29Spec update( const CodeLocation & loc, Spec spec, const std::string * cmd ) {
30        assert( cmd );
31        std::unique_ptr<const std::string> guard( cmd ); // allocated by lexer
32        if ( *cmd == "\"Cforall\"" ) {
33                spec.is_mangled = spec.is_overloadable = true;
34        } else if ( *cmd == "\"C\"" ) {
35                spec.is_mangled = spec.is_overloadable = false;
36        } else {
37                SemanticError( loc, "Invalid linkage specifier %s", cmd->c_str() );
38        }
39        return spec;
40}
41
42std::string name( Spec spec ) {
43        switch ( spec.val ) {
44        case Intrinsic.val:  return "intrinsic";
45        case C.val:          return "C";
46        case Cforall.val:    return "Cforall";
47        case AutoGen.val:    return "autogenerated cfa";
48        case Compiler.val:   return "compiler built-in";
49        case BuiltinCFA.val: return "cfa built-in";
50        case BuiltinC.val:   return "c built-in";
51        default:             return "<unnamed linkage spec>";
52        }
53}
54
55}
56
57}
58
59// Local Variables: //
60// tab-width: 4 //
61// mode: c++ //
62// compile-command: "make install" //
63// End: //
Note: See TracBrowser for help on using the repository browser.