1 /**************************************************************
2  *
3  * Licensed to the Apache Software Foundation (ASF) under one
4  * or more contributor license agreements.  See the NOTICE file
5  * distributed with this work for additional information
6  * regarding copyright ownership.  The ASF licenses this file
7  * to you under the Apache License, Version 2.0 (the
8  * "License"); you may not use this file except in compliance
9  * with the License.  You may obtain a copy of the License at
10  *
11  *   http://www.apache.org/licenses/LICENSE-2.0
12  *
13  * Unless required by applicable law or agreed to in writing,
14  * software distributed under the License is distributed on an
15  * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
16  * KIND, either express or implied.  See the License for the
17  * specific language governing permissions and limitations
18  * under the License.
19  *
20  *************************************************************/
21 
22 #include <precomp.h>
23 #include <all_toks.hxx>
24 
25 
26 // NOT FULLY DEFINED SERVICES
27 #include <cpp/ctokdeal.hxx>
28 #include "c_dealer.hxx"
29 #include "tokintpr.hxx"
30 
31 
32 
33 namespace cpp {
34 
35 
36 void
DealOut(::TokenDealer & o_rDealer)37 Token::DealOut( ::TokenDealer & o_rDealer )
38 {
39     // KORR_FUTURE HACK (casting to derivation cpp::TokenDealer)
40     o_rDealer.AsDistributor()->Deal_CppCode(*this);
41 }
42 
43 
44 #define DEF_TOKEN_CLASS(name) \
45 void \
46 Tok_##name::Trigger( TokenInterpreter & io_rInterpreter ) const \
47 { io_rInterpreter.Hdl_##name(*this); } \
48 INT16 \
49 Tok_##name::TypeId() const { return Tid_##name; } \
50 const char * \
51 Tok_##name::Text() const { return #name; }
52 
53 #define DEF_TOKEN_CLASS_WITHTEXT(name, text ) \
54 void \
55 Tok_##name::Trigger( TokenInterpreter & io_rInterpreter ) const \
56 { io_rInterpreter.Hdl_##name(*this); } \
57 INT16 \
58 Tok_##name::TypeId() const { return Tid_##name; } \
59 const char * \
60 Tok_##name::Text() const { return text; }
61 
62 
DEF_TOKEN_CLASS_WITHTEXT(Identifier,sText)63 DEF_TOKEN_CLASS_WITHTEXT(Identifier,sText)
64 DEF_TOKEN_CLASS_WITHTEXT(Operator,sText)
65 
66 DEF_TOKEN_CLASS(operator)
67 DEF_TOKEN_CLASS(class)
68 DEF_TOKEN_CLASS(struct)
69 DEF_TOKEN_CLASS(union)
70 DEF_TOKEN_CLASS(enum)
71 DEF_TOKEN_CLASS(typedef)
72 DEF_TOKEN_CLASS(public)
73 DEF_TOKEN_CLASS(protected)
74 DEF_TOKEN_CLASS(private)
75 DEF_TOKEN_CLASS(template)
76 DEF_TOKEN_CLASS(virtual)
77 DEF_TOKEN_CLASS(friend)
78 DEF_TOKEN_CLASS_WITHTEXT(Tilde,"~")
79 DEF_TOKEN_CLASS(const)
80 DEF_TOKEN_CLASS(volatile)
81 DEF_TOKEN_CLASS(extern)
82 DEF_TOKEN_CLASS(static)
83 DEF_TOKEN_CLASS(mutable)
84 DEF_TOKEN_CLASS(register)
85 DEF_TOKEN_CLASS(inline)
86 DEF_TOKEN_CLASS(explicit)
87 DEF_TOKEN_CLASS(namespace)
88 DEF_TOKEN_CLASS(using)
89 DEF_TOKEN_CLASS(throw)
90 DEF_TOKEN_CLASS_WITHTEXT(SwBracket_Left,"{")
91 DEF_TOKEN_CLASS_WITHTEXT(SwBracket_Right,"}")
92 DEF_TOKEN_CLASS_WITHTEXT(ArrayBracket_Left,"[")
93 DEF_TOKEN_CLASS_WITHTEXT(ArrayBracket_Right,"]")
94 DEF_TOKEN_CLASS_WITHTEXT(Bracket_Left,"(")
95 DEF_TOKEN_CLASS_WITHTEXT(Bracket_Right,")")
96 DEF_TOKEN_CLASS_WITHTEXT(DoubleColon,"::")
97 DEF_TOKEN_CLASS_WITHTEXT(Semicolon,";")
98 DEF_TOKEN_CLASS_WITHTEXT(Comma,",")
99 DEF_TOKEN_CLASS_WITHTEXT(Colon,":")
100 DEF_TOKEN_CLASS_WITHTEXT(Assign,"=")
101 DEF_TOKEN_CLASS_WITHTEXT(Less,"<")
102 DEF_TOKEN_CLASS_WITHTEXT(Greater,">")
103 DEF_TOKEN_CLASS_WITHTEXT(Asterix,"*")
104 DEF_TOKEN_CLASS_WITHTEXT(AmpersAnd,"&")
105 DEF_TOKEN_CLASS_WITHTEXT(Ellipse,"...")
106 DEF_TOKEN_CLASS(typename)
107 
108 DEF_TOKEN_CLASS_WITHTEXT(DefineName,sText)
109 DEF_TOKEN_CLASS_WITHTEXT(MacroName,sText)
110 DEF_TOKEN_CLASS_WITHTEXT(MacroParameter,sText)
111 // DEF_TOKEN_CLASS_WITHTEXT(PreProDefinition,sText)
112 
113 void
114 Tok_PreProDefinition::Trigger( TokenInterpreter &   io_rInterpreter ) const
115 { io_rInterpreter.Hdl_PreProDefinition(*this); }
116 
117 INT16
TypeId() const118 Tok_PreProDefinition::TypeId() const { return Tid_PreProDefinition; }
119 
120 const char *
Text() const121 Tok_PreProDefinition::Text() const
122 {
123     return sText;
124 }
125 
126 
127 
DEF_TOKEN_CLASS_WITHTEXT(BuiltInType,sText)128 DEF_TOKEN_CLASS_WITHTEXT(BuiltInType,sText)
129 DEF_TOKEN_CLASS_WITHTEXT(TypeSpecializer,sText)
130 DEF_TOKEN_CLASS_WITHTEXT(Constant,sText)
131 
132 const char *
133 Tok_UnblockMacro::Text() const
134 {
135     return sMacroName;
136 }
137 
138 void
DealOut(::TokenDealer & o_rDealer)139 Tok_UnblockMacro::DealOut( ::TokenDealer & o_rDealer )
140 {
141     // KORR_FUTURE HACK (casting to derivation cpp::TokenDealer)
142     o_rDealer.AsDistributor()->Deal_Cpp_UnblockMacro(*this);
143 }
144 
145 }   // namespace cpp
146