113481Sgiacomo.travaglini@arm.com#!/usr/bin/env python
213481Sgiacomo.travaglini@arm.com#
313481Sgiacomo.travaglini@arm.com# Copyright 2007 Neal Norwitz
413481Sgiacomo.travaglini@arm.com# Portions Copyright 2007 Google Inc.
513481Sgiacomo.travaglini@arm.com#
613481Sgiacomo.travaglini@arm.com# Licensed under the Apache License, Version 2.0 (the "License");
713481Sgiacomo.travaglini@arm.com# you may not use this file except in compliance with the License.
813481Sgiacomo.travaglini@arm.com# You may obtain a copy of the License at
913481Sgiacomo.travaglini@arm.com#
1013481Sgiacomo.travaglini@arm.com#      http://www.apache.org/licenses/LICENSE-2.0
1113481Sgiacomo.travaglini@arm.com#
1213481Sgiacomo.travaglini@arm.com# Unless required by applicable law or agreed to in writing, software
1313481Sgiacomo.travaglini@arm.com# distributed under the License is distributed on an "AS IS" BASIS,
1413481Sgiacomo.travaglini@arm.com# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
1513481Sgiacomo.travaglini@arm.com# See the License for the specific language governing permissions and
1613481Sgiacomo.travaglini@arm.com# limitations under the License.
1713481Sgiacomo.travaglini@arm.com
1813481Sgiacomo.travaglini@arm.com"""C++ keywords and helper utilities for determining keywords."""
1913481Sgiacomo.travaglini@arm.com
2013481Sgiacomo.travaglini@arm.com__author__ = 'nnorwitz@google.com (Neal Norwitz)'
2113481Sgiacomo.travaglini@arm.com
2213481Sgiacomo.travaglini@arm.com
2313481Sgiacomo.travaglini@arm.comtry:
2413481Sgiacomo.travaglini@arm.com    # Python 3.x
2513481Sgiacomo.travaglini@arm.com    import builtins
2613481Sgiacomo.travaglini@arm.comexcept ImportError:
2713481Sgiacomo.travaglini@arm.com    # Python 2.x
2813481Sgiacomo.travaglini@arm.com    import __builtin__ as builtins
2913481Sgiacomo.travaglini@arm.com
3013481Sgiacomo.travaglini@arm.com
3113481Sgiacomo.travaglini@arm.comif not hasattr(builtins, 'set'):
3213481Sgiacomo.travaglini@arm.com    # Nominal support for Python 2.3.
3313481Sgiacomo.travaglini@arm.com    from sets import Set as set
3413481Sgiacomo.travaglini@arm.com
3513481Sgiacomo.travaglini@arm.com
3613481Sgiacomo.travaglini@arm.comTYPES = set('bool char int long short double float void wchar_t unsigned signed'.split())
3713481Sgiacomo.travaglini@arm.comTYPE_MODIFIERS = set('auto register const inline extern static virtual volatile mutable'.split())
3813481Sgiacomo.travaglini@arm.comACCESS = set('public protected private friend'.split())
3913481Sgiacomo.travaglini@arm.com
4013481Sgiacomo.travaglini@arm.comCASTS = set('static_cast const_cast dynamic_cast reinterpret_cast'.split())
4113481Sgiacomo.travaglini@arm.com
4213481Sgiacomo.travaglini@arm.comOTHERS = set('true false asm class namespace using explicit this operator sizeof'.split())
4313481Sgiacomo.travaglini@arm.comOTHER_TYPES = set('new delete typedef struct union enum typeid typename template'.split())
4413481Sgiacomo.travaglini@arm.com
4513481Sgiacomo.travaglini@arm.comCONTROL = set('case switch default if else return goto'.split())
4613481Sgiacomo.travaglini@arm.comEXCEPTION = set('try catch throw'.split())
4713481Sgiacomo.travaglini@arm.comLOOP = set('while do for break continue'.split())
4813481Sgiacomo.travaglini@arm.com
4913481Sgiacomo.travaglini@arm.comALL = TYPES | TYPE_MODIFIERS | ACCESS | CASTS | OTHERS | OTHER_TYPES | CONTROL | EXCEPTION | LOOP
5013481Sgiacomo.travaglini@arm.com
5113481Sgiacomo.travaglini@arm.com
5213481Sgiacomo.travaglini@arm.comdef IsKeyword(token):
5313481Sgiacomo.travaglini@arm.com    return token in ALL
5413481Sgiacomo.travaglini@arm.com
5513481Sgiacomo.travaglini@arm.comdef IsBuiltinType(token):
5613481Sgiacomo.travaglini@arm.com    if token in ('virtual', 'inline'):
5713481Sgiacomo.travaglini@arm.com        # These only apply to methods, they can't be types by themselves.
5813481Sgiacomo.travaglini@arm.com        return False
5913481Sgiacomo.travaglini@arm.com    return token in TYPES or token in TYPE_MODIFIERS
60