Thanks, I will take a look. On Sat, Oct 21, 2017 at 5:53 PM, Aaron Ballman <aa...@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 <aa...@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@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@lists.llvm.org > >> http://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits >
_______________________________________________ cfe-commits mailing list cfe-commits@lists.llvm.org http://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits