source: src/Parser/LinkageSpec.cc@ 3f1e68f

ADT aaron-thesis arm-eh ast-experimental cleanup-dtors ctor deferred_resn demangler enum forall-pointer-decay jacob/cs343-translation jenkins-sandbox new-ast new-ast-unique-expr new-env no_list persistent-indexer pthread-emulation qualifiedEnum resolv-new with_gc
Last change on this file since 3f1e68f was 79970ed, checked in by Rob Schluntz <rschlunt@…>, 9 years ago

implement warnings for missing struct member constructor calls, remove bad clones

  • Property mode set to 100644
File size: 2.3 KB
RevLine 
[b87a5ed]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//
[79970ed]7// LinkageSpec.cc --
8//
[b87a5ed]9// Author : Rodolfo G. Esteves
10// Created On : Sat May 16 13:22:09 2015
[3b8e52c]11// Last Modified By : Peter A. Buhr
[ab57786]12// Last Modified On : Sun Aug 21 12:32:53 2016
13// Update Count : 17
[79970ed]14//
[b87a5ed]15
[51b73452]16#include <string>
17#include <cassert>
18
19#include "LinkageSpec.h"
[d3b7937]20#include "Common/SemanticError.h"
[51b73452]21
[ab57786]22LinkageSpec::Spec LinkageSpec::fromString( const std::string &spec ) {
23 if ( spec == "\"Cforall\"" ) {
[b87a5ed]24 return Cforall;
[ab57786]25 } else if ( spec == "\"C\"" ) {
[b87a5ed]26 return C;
27 } else {
[ab57786]28 throw SemanticError( "Invalid linkage specifier " + spec );
29 } // if
30 delete &spec; // allocated by lexer
[51b73452]31}
32
[8b7ee09]33std::string LinkageSpec::toString( LinkageSpec::Spec linkage ) {
[79970ed]34 assert( linkage >= 0 && linkage < LinkageSpec::NoOfSpecs );
[8b7ee09]35 static const char *linkageKinds[LinkageSpec::NoOfSpecs] = {
[3b8e52c]36 "intrinsic", "Cforall", "C", "automatically generated", "compiler built-in",
37 };
38 return linkageKinds[linkage];
[51b73452]39}
40
[ab57786]41bool LinkageSpec::isDecoratable( Spec spec ) {
[79970ed]42 assert( spec >= 0 && spec < LinkageSpec::NoOfSpecs );
[8b7ee09]43 static bool decoratable[LinkageSpec::NoOfSpecs] = {
[3b8e52c]44 // Intrinsic, Cforall, C, AutoGen, Compiler
[79970ed]45 true, true, false, true, false,
[3b8e52c]46 };
[ab57786]47 return decoratable[spec];
[51b73452]48}
49
[ab57786]50bool LinkageSpec::isGeneratable( Spec spec ) {
[79970ed]51 assert( spec >= 0 && spec < LinkageSpec::NoOfSpecs );
[8b7ee09]52 static bool generatable[LinkageSpec::NoOfSpecs] = {
[3b8e52c]53 // Intrinsic, Cforall, C, AutoGen, Compiler
[79970ed]54 true, true, true, true, false,
[3b8e52c]55 };
[ab57786]56 return generatable[spec];
[51b73452]57}
58
[ab57786]59bool LinkageSpec::isOverridable( Spec spec ) {
[79970ed]60 assert( spec >= 0 && spec < LinkageSpec::NoOfSpecs );
[8b7ee09]61 static bool overridable[LinkageSpec::NoOfSpecs] = {
[3b8e52c]62 // Intrinsic, Cforall, C, AutoGen, Compiler
[79970ed]63 true, false, false, true, false,
[3b8e52c]64 };
[ab57786]65 return overridable[spec];
[4aa0858]66}
67
[ab57786]68bool LinkageSpec::isBuiltin( Spec spec ) {
[79970ed]69 assert( spec >= 0 && spec < LinkageSpec::NoOfSpecs );
[8b7ee09]70 static bool builtin[LinkageSpec::NoOfSpecs] = {
[3b8e52c]71 // Intrinsic, Cforall, C, AutoGen, Compiler
[79970ed]72 true, false, false, false, true,
[3b8e52c]73 };
[ab57786]74 return builtin[spec];
[51b73452]75}
[b87a5ed]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.