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
This commit is contained in:
Aaron Ballman 2017-10-21 21:52:48 +00:00
parent d02b8c6579
commit b99743553a
3 changed files with 26 additions and 104 deletions

View File

@ -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',

View File

@ -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

View File

@ -318,7 +318,8 @@ void clang_getSpellingLocation(CXSourceLocation location,
const SourceManager &SM =
*static_cast<const SourceManager*>(location.ptr_data[0]);
SourceLocation SpellLoc = SM.getSpellingLoc(Loc);
// FIXME: This should call SourceManager::getSpellingLoc().
SourceLocation SpellLoc = SM.getFileLoc(Loc);
std::pair<FileID, unsigned> LocInfo = SM.getDecomposedLoc(SpellLoc);
FileID FID = LocInfo.first;
unsigned FileOffset = LocInfo.second;