I created a new revision to review and to fix the tests: https://reviews.llvm.org/D39217.
On Sat, Oct 21, 2017 at 6:24 PM, Masud Rahman <l...@masudrahman.com> wrote: > 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/pytho >> n/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/pytho >> n/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