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