From: Aaron Ballman Date: Sat, 21 Oct 2017 21:52:48 +0000 (+0000) Subject: Reverting r316278 due to failing build bots. X-Git-Url: https://granicus.if.org/sourcecode?a=commitdiff_plain;h=b99743553a954ef2e92d143890fe987500088ff8;p=clang Reverting r316278 due to failing build bots. http://lab.llvm.org:8011/builders/clang-ppc64be-linux/builds/11896 http://lab.llvm.org:8011/builders/clang-s390x-linux/builds/12380 git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@316279 91177308-0d34-0410-b5e6-96231b3b80d8 --- diff --git a/bindings/python/clang/cindex.py b/bindings/python/clang/cindex.py index 3f70bba493..d72dd14ef9 100644 --- a/bindings/python/clang/cindex.py +++ b/bindings/python/clang/cindex.py @@ -214,45 +214,25 @@ class _CXString(Structure): assert isinstance(res, _CXString) return conf.lib.clang_getCString(res) -class Location(object): - """A Location is a specific kind of source location. A SourceLocation - refers to several kinds of locations (e.g. spelling location vs. expansion - location).""" - - def __init__(self, file, line, column, offset): - self._file = File(file) if file else None - self._line = int(line.value) - self._column = int(column.value) - self._offset = int(offset.value) - - - @property - def file(self): - """Get the file represented by this source location.""" - return self._file - - @property - def line(self): - """Get the line represented by this source location.""" - return self._line - - @property - def column(self): - """Get the column represented by this source location.""" - return self._column - - @property - def offset(self): - """Get the file offset represented by this source location.""" - return self._offset class SourceLocation(Structure): """ A SourceLocation represents a particular location within a source file. """ _fields_ = [("ptr_data", c_void_p * 2), ("int_data", c_uint)] - _expansion = None - _spelling = None + _data = None + + def _get_instantiation(self): + if self._data is None: + f, l, c, o = c_object_p(), c_uint(), c_uint(), c_uint() + conf.lib.clang_getInstantiationLocation(self, byref(f), byref(l), + byref(c), byref(o)) + if f: + f = File(f) + else: + f = None + self._data = (f, int(l.value), int(c.value), int(o.value)) + return self._data @staticmethod def from_position(tu, file, line, column): @@ -272,73 +252,25 @@ class SourceLocation(Structure): """ return conf.lib.clang_getLocationForOffset(tu, file, offset) - @property - def expansion(self): - """ - The source location where then entity this object is referring to is - expanded. - """ - if not self._expansion: - file = c_object_p() - line = c_uint() - column = c_uint() - offset = c_uint() - conf.lib.clang_getExpansionLocation(self, - byref(file), - byref(line), - byref(column), - byref(offset)) - - self._expansion = Location(file, line, column, offset) - return self._expansion - - @property - def spelling(self): - """ - The source location where then entity this object is referring to is - written. - """ - if not self._spelling: - file = c_object_p() - line = c_uint() - column = c_uint() - offset = c_uint() - conf.lib.clang_getSpellingLocation(self, - byref(file), - byref(line), - byref(column), - byref(offset)) - - self._spelling = Location(file, line, column, offset) - return self._spelling - @property def file(self): - """Get the file represented by this source location. - - DEPRECATED: use expansion.file.""" - return self.expansion.file + """Get the file represented by this source location.""" + return self._get_instantiation()[0] @property def line(self): - """Get the line represented by this source location. - - DEPRECATED: use expansion.line.""" - return self.expansion.line + """Get the line represented by this source location.""" + return self._get_instantiation()[1] @property def column(self): - """Get the column represented by this source location. - - DEPRECATED: use expansion.column.""" - return self.expansion.column + """Get the column represented by this source location.""" + return self._get_instantiation()[2] @property def offset(self): - """Get the file offset represented by this source location. - - DEPRECATED: use expansion.offset.""" - return self.expansion.offset + """Get the file offset represented by this source location.""" + return self._get_instantiation()[3] def __eq__(self, other): return conf.lib.clang_equalLocations(self, other) @@ -1611,7 +1543,8 @@ class Cursor(Structure): @property def location(self): """ - Return the source locations of the entity pointed at by the cursor. + Return the source location (the starting character) of the entity + pointed at by the cursor. """ if not hasattr(self, '_loc'): self._loc = conf.lib.clang_getCursorLocation(self) @@ -3759,11 +3692,7 @@ functionList = [ ("clang_getInclusions", [TranslationUnit, callbacks['translation_unit_includes'], py_object]), - ("clang_getExpansionLocation", - [SourceLocation, POINTER(c_object_p), POINTER(c_uint), POINTER(c_uint), - POINTER(c_uint)]), - - ("clang_getSpellingLocation", + ("clang_getInstantiationLocation", [SourceLocation, POINTER(c_object_p), POINTER(c_uint), POINTER(c_uint), POINTER(c_uint)]), @@ -4225,7 +4154,6 @@ __all__ = [ 'FixIt', 'Index', 'LinkageKind', - 'Location', 'SourceLocation', 'SourceRange', 'TLSKind', diff --git a/bindings/python/tests/cindex/test_location.py b/bindings/python/tests/cindex/test_location.py index d6875330ec..9e9ef487af 100644 --- a/bindings/python/tests/cindex/test_location.py +++ b/bindings/python/tests/cindex/test_location.py @@ -93,10 +93,3 @@ def test_extent(): location3 = SourceLocation.from_position(tu, file, 1, 6) range3 = SourceRange.from_locations(location1, location3) assert range1 != range3 - -def test_spelling_location(): - tu = get_tu('''#define ONE int one -ONE;''') - one = get_cursor(tu, 'one') - assert one.location.spelling.line == 1 - assert one.location.expansion.line == 2 diff --git a/tools/libclang/CXSourceLocation.cpp b/tools/libclang/CXSourceLocation.cpp index b1637e01ab..2e0ea4e440 100644 --- a/tools/libclang/CXSourceLocation.cpp +++ b/tools/libclang/CXSourceLocation.cpp @@ -318,7 +318,8 @@ void clang_getSpellingLocation(CXSourceLocation location, const SourceManager &SM = *static_cast(location.ptr_data[0]); - SourceLocation SpellLoc = SM.getSpellingLoc(Loc); + // FIXME: This should call SourceManager::getSpellingLoc(). + SourceLocation SpellLoc = SM.getFileLoc(Loc); std::pair LocInfo = SM.getDecomposedLoc(SpellLoc); FileID FID = LocInfo.first; unsigned FileOffset = LocInfo.second;