source: src/CodeGen/OperatorTable.cc @ a1d5d2a

ADTaaron-thesisarm-ehast-experimentalcleanup-dtorsctordeferred_resndemanglerenumforall-pointer-decaygc_noraiijacob/cs343-translationjenkins-sandboxmemorynew-astnew-ast-unique-exprnew-envno_listpersistent-indexerpthread-emulationqualifiedEnumresolv-newstringwith_gc
Last change on this file since a1d5d2a was 843054c2, checked in by Peter A. Buhr <pabuhr@…>, 9 years ago

licencing: seventh groups of files

  • Property mode set to 100644
File size: 3.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// OperatorTable.cc --
8//
9// Author           : Richard C. Bilson
10// Created On       : Mon May 18 07:44:20 2015
11// Last Modified By : Peter A. Buhr
12// Last Modified On : Mon May 18 23:42:07 2015
13// Update Count     : 2
14//
15
16#include <map>
17#include "OperatorTable.h"
18
19namespace CodeGen {
20        namespace {
21                const OperatorInfo tableValues[] = {
22                        {       "?[?]",         "",             "_operator_index",                      OT_INDEX                },
23                        {       "?()",          "",             "_operator_call",                       OT_CALL                 },
24                        {       "?++",          "++",   "_operator_postincr",           OT_POSTFIXASSIGN        },
25                        {       "?--",          "--",   "_operator_postdecr",           OT_POSTFIXASSIGN        },
26                        {       "*?",           "*",    "_operator_deref",                      OT_PREFIX               },
27                        {       "+?",           "+",    "_operator_unaryplus",          OT_PREFIX               },
28                        {       "-?",           "-",    "_operator_unaryminus",         OT_PREFIX               },
29                        {       "~?",           "~",    "_operator_bitnot",                     OT_PREFIX               },
30                        {       "!?",           "!",    "_operator_lognot",                     OT_PREFIX               },
31                        {       "++?",          "++",   "_operator_preincr",            OT_PREFIXASSIGN         },
32                        {       "--?",          "--",   "_operator_predecr",            OT_PREFIXASSIGN         },
33                        {       "?*?",          "*",    "_operator_multiply",           OT_INFIX                },
34                        {       "?/?",          "/",    "_operator_divide",                     OT_INFIX                },
35                        {       "?%?",          "%",    "_operator_modulus",            OT_INFIX                },
36                        {       "?+?",          "+",    "_operator_add",                        OT_INFIX                },
37                        {       "?-?",          "-",    "_operator_subtract",           OT_INFIX                },
38                        {       "?<<?",         "<<",   "_operator_shiftleft",          OT_INFIX                },
39                        {       "?>>?",         ">>",   "_operator_shiftright",         OT_INFIX                },
40                        {       "?<?",          "<",    "_operator_less",                       OT_INFIX                },
41                        {       "?>?",          ">",    "_operator_greater",            OT_INFIX                },
42                        {       "?<=?",         "<=",   "_operator_lessequal",          OT_INFIX                },
43                        {       "?>=?",         ">=",   "_operator_greaterequal",       OT_INFIX                },
44                        {       "?==?",         "==",   "_operator_equal",                      OT_INFIX                },
45                        {       "?!=?",         "!=",   "_operator_notequal",           OT_INFIX                },
46                        {       "?&?",          "&",    "_operator_bitand",                     OT_INFIX                },
47                        {       "?^?",          "^",    "_operator_bitxor",                     OT_INFIX                },
48                        {       "?|?",          "|",    "_operator_bitor",                      OT_INFIX                },
49                        {       "?=?",          "=",    "_operator_assign",                     OT_INFIXASSIGN          },
50                        {       "?*=?",         "*=",   "_operator_multassign",         OT_INFIXASSIGN          },
51                        {       "?/=?",         "/=",   "_operator_divassign",          OT_INFIXASSIGN          },
52                        {       "?%=?",         "%=",   "_operator_modassign",          OT_INFIXASSIGN          },
53                        {       "?+=?",         "+=",   "_operator_addassign",          OT_INFIXASSIGN          },
54                        {       "?-=?",         "-=",   "_operator_subassign",          OT_INFIXASSIGN          },
55                        {       "?<<=?",        "<<=",  "_operator_shiftleftassign",    OT_INFIXASSIGN          },
56                        {       "?>>=?",        ">>=",  "_operator_shiftrightassign",   OT_INFIXASSIGN          },
57                        {       "?&=?",         "&=",   "_operator_bitandassign",       OT_INFIXASSIGN          },
58                        {       "?^=?",         "^=",   "_operator_bitxorassign",       OT_INFIXASSIGN          },
59                        {       "?|=?",         "|=",   "_operator_bitorassign",        OT_INFIXASSIGN          },
60                        {       "0",            "0",    "_constant_zero",                       OT_CONSTANT             },
61                        {       "1",            "1",    "_constant_one",                        OT_CONSTANT             }
62                };
63
64                const int numOps = sizeof( tableValues ) / sizeof( OperatorInfo );
65
66                std::map< std::string, OperatorInfo > table;
67
68                void initialize() {
69                        for ( int i = 0; i < numOps; ++i ) {
70                                table[ tableValues[i].inputName ] = tableValues[i];
71                        } // for
72                }
73        } // namespace
74
75        bool operatorLookup( std::string funcName, OperatorInfo &info ) {
76                static bool init = false;
77                if ( ! init ) {
78                        initialize();
79                } // if
80                std::map< std::string, OperatorInfo >::const_iterator i = table.find( funcName );
81                if ( i == table.end() ) {
82                        return false;
83                } else {
84                        info = i->second;
85                        return true;
86                } // if
87        }
88} // namespace CodeGen
89
90// Local Variables: //
91// tab-width: 4 //
92// mode: c++ //
93// compile-command: "make install" //
94// End: //
Note: See TracBrowser for help on using the repository browser.