source: translator/CodeGen/OperatorTable.cc@ 643a2e1

ADT aaron-thesis arm-eh ast-experimental cleanup-dtors ctor deferred_resn demangler enum forall-pointer-decay gc_noraii jacob/cs343-translation jenkins-sandbox memory new-ast new-ast-unique-expr new-env no_list persistent-indexer pthread-emulation qualifiedEnum resolv-new string with_gc
Last change on this file since 643a2e1 was 51b73452, checked in by Peter A. Buhr <pabuhr@…>, 11 years ago

initial commit

  • Property mode set to 100644
File size: 3.0 KB
Line 
1/*
2 * This file is part of the Cforall project
3 *
4 * $Id: OperatorTable.cc,v 1.6 2003/01/19 04:19:31 rcbilson Exp $
5 *
6 */
7
8#include <map>
9
10#include "OperatorTable.h"
11
12namespace CodeGen {
13
14namespace {
15
16const OperatorInfo tableValues[] = {
17{ "?[?]", "", "_operator_index", OT_INDEX },
18{ "?()", "", "_operator_call", OT_CALL },
19{ "?++", "++", "_operator_postincr", OT_POSTFIXASSIGN },
20{ "?--", "--", "_operator_postdecr", OT_POSTFIXASSIGN },
21{ "*?", "*", "_operator_deref", OT_PREFIX },
22{ "+?", "+", "_operator_unaryplus", OT_PREFIX },
23{ "-?", "-", "_operator_unaryminus", OT_PREFIX },
24{ "~?", "~", "_operator_bitnot", OT_PREFIX },
25{ "!?", "!", "_operator_lognot", OT_PREFIX },
26{ "++?", "++", "_operator_preincr", OT_PREFIXASSIGN },
27{ "--?", "--", "_operator_predecr", OT_PREFIXASSIGN },
28{ "?*?", "*", "_operator_multiply", OT_INFIX },
29{ "?/?", "/", "_operator_divide", OT_INFIX },
30{ "?%?", "%", "_operator_modulus", OT_INFIX },
31{ "?+?", "+", "_operator_add", OT_INFIX },
32{ "?-?", "-", "_operator_subtract", OT_INFIX },
33{ "?<<?", "<<", "_operator_shiftleft", OT_INFIX },
34{ "?>>?", ">>", "_operator_shiftright", OT_INFIX },
35{ "?<?", "<", "_operator_less", OT_INFIX },
36{ "?>?", ">", "_operator_greater", OT_INFIX },
37{ "?<=?", "<=", "_operator_lessequal", OT_INFIX },
38{ "?>=?", ">=", "_operator_greaterequal", OT_INFIX },
39{ "?==?", "==", "_operator_equal", OT_INFIX },
40{ "?!=?", "!=", "_operator_notequal", OT_INFIX },
41{ "?&?", "&", "_operator_bitand", OT_INFIX },
42{ "?^?", "^", "_operator_bitxor", OT_INFIX },
43{ "?|?", "|", "_operator_bitor", OT_INFIX },
44{ "?=?", "=", "_operator_assign", OT_INFIXASSIGN },
45{ "?*=?", "*=", "_operator_multassign", OT_INFIXASSIGN },
46{ "?/=?", "/=", "_operator_divassign", OT_INFIXASSIGN },
47{ "?%=?", "%=", "_operator_modassign", OT_INFIXASSIGN },
48{ "?+=?", "+=", "_operator_addassign", OT_INFIXASSIGN },
49{ "?-=?", "-=", "_operator_subassign", OT_INFIXASSIGN },
50{ "?<<=?", "<<=", "_operator_shiftleftassign", OT_INFIXASSIGN },
51{ "?>>=?", ">>=", "_operator_shiftrightassign", OT_INFIXASSIGN },
52{ "?&=?", "&=", "_operator_bitandassign", OT_INFIXASSIGN },
53{ "?^=?", "^=", "_operator_bitxorassign", OT_INFIXASSIGN },
54{ "?|=?", "|=", "_operator_bitorassign", OT_INFIXASSIGN },
55{ "0", "0", "_constant_zero", OT_CONSTANT },
56{ "1", "1", "_constant_one", OT_CONSTANT }
57};
58
59const int numOps = sizeof( tableValues ) / sizeof( OperatorInfo );
60
61std::map< std::string, OperatorInfo > table;
62
63void
64initialize()
65{
66 for( int i = 0; i < numOps; ++i ) {
67 table[ tableValues[i].inputName ] = tableValues[i];
68 }
69}
70
71} // namespace
72
73bool
74operatorLookup( std::string funcName, OperatorInfo &info )
75{
76 static bool init = false;
77 if( !init ) {
78 initialize();
79 }
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 }
87}
88
89} // namespace CodeGen
Note: See TracBrowser for help on using the repository browser.