r316278 - [libclang, bindings]: add spelling location
Masud Rahman via cfe-commits
cfe-commits at lists.llvm.org
Sat Oct 21 15:24:21 PDT 2017
Thanks, I will take a look.
On Sat, Oct 21, 2017 at 5:53 PM, Aaron Ballman <aaron at aaronballman.com>
wrote:
> I've reverted back to green in r316279 due to more bots failing.
>
> ~Aaron
>
> On Sat, Oct 21, 2017 at 5:35 PM, Aaron Ballman <aaron at aaronballman.com>
> wrote:
> > This commit appears to have broken several bots. Can you revert or
> > quickly fix the issue?
> >
> > http://lab.llvm.org:8011/builders/clang-ppc64be-linux/builds/11896
> > http://lab.llvm.org:8011/builders/clang-s390x-linux/builds/12380
> >
> > Thanks!
> >
> > ~Aaron
> >
> > On Sat, Oct 21, 2017 at 4:53 PM, Masud Rahman via cfe-commits
> > <cfe-commits at lists.llvm.org> wrote:
> >> Author: frutiger
> >> Date: Sat Oct 21 13:53:49 2017
> >> New Revision: 316278
> >>
> >> URL: http://llvm.org/viewvc/llvm-project?rev=316278&view=rev
> >> Log:
> >> [libclang, bindings]: add spelling location
> >>
> >> o) Add a 'Location' class that represents the four properties of a
> >> physical location
> >>
> >> o) Enhance 'SourceLocation' to provide 'expansion' and 'spelling'
> >> locations, maintaining backwards compatibility with existing code by
> >> forwarding the four properties to 'expansion'.
> >>
> >> o) Update the implementation to use 'clang_getExpansionLocation'
> >> instead of the deprecated 'clang_getInstantiationLocation', which
> >> has been present since 2011.
> >>
> >> o) Update the implementation of 'clang_getSpellingLocation' to actually
> >> obtain spelling location instead of file location.
> >>
> >> Modified:
> >> cfe/trunk/bindings/python/clang/cindex.py
> >> cfe/trunk/bindings/python/tests/cindex/test_location.py
> >> cfe/trunk/tools/libclang/CXSourceLocation.cpp
> >>
> >> Modified: cfe/trunk/bindings/python/clang/cindex.py
> >> URL: http://llvm.org/viewvc/llvm-project/cfe/trunk/bindings/
> python/clang/cindex.py?rev=316278&r1=316277&r2=316278&view=diff
> >> ============================================================
> ==================
> >> --- cfe/trunk/bindings/python/clang/cindex.py (original)
> >> +++ cfe/trunk/bindings/python/clang/cindex.py Sat Oct 21 13:53:49 2017
> >> @@ -214,25 +214,45 @@ 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)]
> >> - _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
> >> + _expansion = None
> >> + _spelling = None
> >>
> >> @staticmethod
> >> def from_position(tu, file, line, column):
> >> @@ -253,24 +273,72 @@ 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."""
> >> - return self._get_instantiation()[0]
> >> + """Get the file represented by this source location.
> >> +
> >> + DEPRECATED: use expansion.file."""
> >> + return self.expansion.file
> >>
> >> @property
> >> def line(self):
> >> - """Get the line represented by this source location."""
> >> - return self._get_instantiation()[1]
> >> + """Get the line represented by this source location.
> >> +
> >> + DEPRECATED: use expansion.line."""
> >> + return self.expansion.line
> >>
> >> @property
> >> def column(self):
> >> - """Get the column represented by this source location."""
> >> - return self._get_instantiation()[2]
> >> + """Get the column represented by this source location.
> >> +
> >> + DEPRECATED: use expansion.column."""
> >> + return self.expansion.column
> >>
> >> @property
> >> def offset(self):
> >> - """Get the file offset represented by this source location."""
> >> - return self._get_instantiation()[3]
> >> + """Get the file offset represented by this source location.
> >> +
> >> + DEPRECATED: use expansion.offset."""
> >> + return self.expansion.offset
> >>
> >> def __eq__(self, other):
> >> return conf.lib.clang_equalLocations(self, other)
> >> @@ -1543,8 +1611,7 @@ class Cursor(Structure):
> >> @property
> >> def location(self):
> >> """
> >> - Return the source location (the starting character) of the
> entity
> >> - pointed at by the cursor.
> >> + Return the source locations of the entity pointed at by the
> cursor.
> >> """
> >> if not hasattr(self, '_loc'):
> >> self._loc = conf.lib.clang_getCursorLocation(self)
> >> @@ -3692,7 +3759,11 @@ functionList = [
> >> ("clang_getInclusions",
> >> [TranslationUnit, callbacks['translation_unit_includes'],
> py_object]),
> >>
> >> - ("clang_getInstantiationLocation",
> >> + ("clang_getExpansionLocation",
> >> + [SourceLocation, POINTER(c_object_p), POINTER(c_uint),
> POINTER(c_uint),
> >> + POINTER(c_uint)]),
> >> +
> >> + ("clang_getSpellingLocation",
> >> [SourceLocation, POINTER(c_object_p), POINTER(c_uint),
> POINTER(c_uint),
> >> POINTER(c_uint)]),
> >>
> >> @@ -4154,6 +4225,7 @@ __all__ = [
> >> 'FixIt',
> >> 'Index',
> >> 'LinkageKind',
> >> + 'Location',
> >> 'SourceLocation',
> >> 'SourceRange',
> >> 'TLSKind',
> >>
> >> Modified: cfe/trunk/bindings/python/tests/cindex/test_location.py
> >> URL: http://llvm.org/viewvc/llvm-project/cfe/trunk/bindings/
> python/tests/cindex/test_location.py?rev=316278&r1=
> 316277&r2=316278&view=diff
> >> ============================================================
> ==================
> >> --- cfe/trunk/bindings/python/tests/cindex/test_location.py (original)
> >> +++ cfe/trunk/bindings/python/tests/cindex/test_location.py Sat Oct 21
> 13:53:49 2017
> >> @@ -93,3 +93,10 @@ 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
> >>
> >> Modified: cfe/trunk/tools/libclang/CXSourceLocation.cpp
> >> URL: http://llvm.org/viewvc/llvm-project/cfe/trunk/tools/
> libclang/CXSourceLocation.cpp?rev=316278&r1=316277&r2=316278&view=diff
> >> ============================================================
> ==================
> >> --- cfe/trunk/tools/libclang/CXSourceLocation.cpp (original)
> >> +++ cfe/trunk/tools/libclang/CXSourceLocation.cpp Sat Oct 21 13:53:49
> 2017
> >> @@ -318,8 +318,7 @@ void clang_getSpellingLocation(CXSourceL
> >>
> >> const SourceManager &SM =
> >> *static_cast<const SourceManager*>(location.ptr_data[0]);
> >> - // FIXME: This should call SourceManager::getSpellingLoc().
> >> - SourceLocation SpellLoc = SM.getFileLoc(Loc);
> >> + SourceLocation SpellLoc = SM.getSpellingLoc(Loc);
> >> std::pair<FileID, unsigned> LocInfo = SM.getDecomposedLoc(SpellLoc);
> >> FileID FID = LocInfo.first;
> >> unsigned FileOffset = LocInfo.second;
> >>
> >>
> >> _______________________________________________
> >> cfe-commits mailing list
> >> cfe-commits at lists.llvm.org
> >> http://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits
>
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://lists.llvm.org/pipermail/cfe-commits/attachments/20171021/c01ea5ff/attachment-0001.html>
More information about the cfe-commits
mailing list