1d955e83bee3919b871616223b777bab2f04942d9zhanyong.wan#!/usr/bin/env python 2e35fdd936d133bf8a48de140a3c666897588a05shiqian# 3e35fdd936d133bf8a48de140a3c666897588a05shiqian# Copyright 2007 Neal Norwitz 4e35fdd936d133bf8a48de140a3c666897588a05shiqian# Portions Copyright 2007 Google Inc. 5e35fdd936d133bf8a48de140a3c666897588a05shiqian# 6e35fdd936d133bf8a48de140a3c666897588a05shiqian# Licensed under the Apache License, Version 2.0 (the "License"); 7e35fdd936d133bf8a48de140a3c666897588a05shiqian# you may not use this file except in compliance with the License. 8e35fdd936d133bf8a48de140a3c666897588a05shiqian# You may obtain a copy of the License at 9e35fdd936d133bf8a48de140a3c666897588a05shiqian# 10e35fdd936d133bf8a48de140a3c666897588a05shiqian# http://www.apache.org/licenses/LICENSE-2.0 11e35fdd936d133bf8a48de140a3c666897588a05shiqian# 12e35fdd936d133bf8a48de140a3c666897588a05shiqian# Unless required by applicable law or agreed to in writing, software 13e35fdd936d133bf8a48de140a3c666897588a05shiqian# distributed under the License is distributed on an "AS IS" BASIS, 14e35fdd936d133bf8a48de140a3c666897588a05shiqian# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 15e35fdd936d133bf8a48de140a3c666897588a05shiqian# See the License for the specific language governing permissions and 16e35fdd936d133bf8a48de140a3c666897588a05shiqian# limitations under the License. 17e35fdd936d133bf8a48de140a3c666897588a05shiqian 18e35fdd936d133bf8a48de140a3c666897588a05shiqian"""C++ keywords and helper utilities for determining keywords.""" 19e35fdd936d133bf8a48de140a3c666897588a05shiqian 20e35fdd936d133bf8a48de140a3c666897588a05shiqian__author__ = 'nnorwitz@google.com (Neal Norwitz)' 21e35fdd936d133bf8a48de140a3c666897588a05shiqian 22e35fdd936d133bf8a48de140a3c666897588a05shiqian 23e35fdd936d133bf8a48de140a3c666897588a05shiqiantry: 24e35fdd936d133bf8a48de140a3c666897588a05shiqian # Python 3.x 25e35fdd936d133bf8a48de140a3c666897588a05shiqian import builtins 26e35fdd936d133bf8a48de140a3c666897588a05shiqianexcept ImportError: 27e35fdd936d133bf8a48de140a3c666897588a05shiqian # Python 2.x 28e35fdd936d133bf8a48de140a3c666897588a05shiqian import __builtin__ as builtins 29e35fdd936d133bf8a48de140a3c666897588a05shiqian 30e35fdd936d133bf8a48de140a3c666897588a05shiqian 31e35fdd936d133bf8a48de140a3c666897588a05shiqianif not hasattr(builtins, 'set'): 32e35fdd936d133bf8a48de140a3c666897588a05shiqian # Nominal support for Python 2.3. 33e35fdd936d133bf8a48de140a3c666897588a05shiqian from sets import Set as set 34e35fdd936d133bf8a48de140a3c666897588a05shiqian 35e35fdd936d133bf8a48de140a3c666897588a05shiqian 36e35fdd936d133bf8a48de140a3c666897588a05shiqianTYPES = set('bool char int long short double float void wchar_t unsigned signed'.split()) 37e35fdd936d133bf8a48de140a3c666897588a05shiqianTYPE_MODIFIERS = set('auto register const inline extern static virtual volatile mutable'.split()) 38e35fdd936d133bf8a48de140a3c666897588a05shiqianACCESS = set('public protected private friend'.split()) 39e35fdd936d133bf8a48de140a3c666897588a05shiqian 40e35fdd936d133bf8a48de140a3c666897588a05shiqianCASTS = set('static_cast const_cast dynamic_cast reinterpret_cast'.split()) 41e35fdd936d133bf8a48de140a3c666897588a05shiqian 42e35fdd936d133bf8a48de140a3c666897588a05shiqianOTHERS = set('true false asm class namespace using explicit this operator sizeof'.split()) 43e35fdd936d133bf8a48de140a3c666897588a05shiqianOTHER_TYPES = set('new delete typedef struct union enum typeid typename template'.split()) 44e35fdd936d133bf8a48de140a3c666897588a05shiqian 45e35fdd936d133bf8a48de140a3c666897588a05shiqianCONTROL = set('case switch default if else return goto'.split()) 46e35fdd936d133bf8a48de140a3c666897588a05shiqianEXCEPTION = set('try catch throw'.split()) 47e35fdd936d133bf8a48de140a3c666897588a05shiqianLOOP = set('while do for break continue'.split()) 48e35fdd936d133bf8a48de140a3c666897588a05shiqian 49e35fdd936d133bf8a48de140a3c666897588a05shiqianALL = TYPES | TYPE_MODIFIERS | ACCESS | CASTS | OTHERS | OTHER_TYPES | CONTROL | EXCEPTION | LOOP 50e35fdd936d133bf8a48de140a3c666897588a05shiqian 51e35fdd936d133bf8a48de140a3c666897588a05shiqian 52e35fdd936d133bf8a48de140a3c666897588a05shiqiandef IsKeyword(token): 53e35fdd936d133bf8a48de140a3c666897588a05shiqian return token in ALL 54e35fdd936d133bf8a48de140a3c666897588a05shiqian 55e35fdd936d133bf8a48de140a3c666897588a05shiqiandef IsBuiltinType(token): 56e35fdd936d133bf8a48de140a3c666897588a05shiqian if token in ('virtual', 'inline'): 57e35fdd936d133bf8a48de140a3c666897588a05shiqian # These only apply to methods, they can't be types by themselves. 58e35fdd936d133bf8a48de140a3c666897588a05shiqian return False 59e35fdd936d133bf8a48de140a3c666897588a05shiqian return token in TYPES or token in TYPE_MODIFIERS 60