From aaff78ec9c820d913c656587221703a9ba178a5c Mon Sep 17 00:00:00 2001 From: Benjamin Kramer Date: Sat, 6 Mar 2010 15:38:03 +0000 Subject: [PATCH] Rename the new Iterator objects and raise an assertion instead of returning invalid objects when the key is out of range. llvm-svn: 97881 --- clang/bindings/python/clang/cindex.py | 22 ++++++++++++---------- 1 file changed, 12 insertions(+), 10 deletions(-) diff --git a/clang/bindings/python/clang/cindex.py b/clang/bindings/python/clang/cindex.py index 4a14b880a154..f4409aec3325 100644 --- a/clang/bindings/python/clang/cindex.py +++ b/clang/bindings/python/clang/cindex.py @@ -207,7 +207,7 @@ class Diagnostic(object): @property def ranges(self): - class Ranges: + class RangeIterator: def __init__(self, diag): self.diag = diag @@ -217,11 +217,11 @@ class Diagnostic(object): def __getitem__(self, key): return _clang_getDiagnosticRange(self.diag, key) - return Ranges(self.ptr) + return RangeIterator(self.ptr) @property def fixits(self): - class FixIts: + class FixItIterator: def __init__(self, diag): self.diag = diag @@ -231,10 +231,12 @@ class Diagnostic(object): def __getitem__(self, key): range = SourceRange() value = _clang_getDiagnosticFixIt(self.diag, key, byref(range)) + if len(value) == 0: + raise IndexError return FixIt(range, value) - return FixIts(self.ptr) + return FixItIterator(self.ptr) def __repr__(self): return "" % ( @@ -581,9 +583,6 @@ class _CXUnsavedFile(Structure): ## Diagnostic Conversion ## -# Diagnostic objects are temporary, we must extract all the information from the -# diagnostic object when it is passed to the callback. - _clang_getNumDiagnostics = lib.clang_getNumDiagnostics _clang_getNumDiagnostics.argtypes = [c_object_p] _clang_getNumDiagnostics.restype = c_uint @@ -730,7 +729,7 @@ class TranslationUnit(ClangObject): """ Return an iterable (and indexable) object containing the diagnostics. """ - class Diags: + class DiagIterator: def __init__(self, tu): self.tu = tu @@ -738,9 +737,12 @@ class TranslationUnit(ClangObject): return int(_clang_getNumDiagnostics(self.tu)) def __getitem__(self, key): - return Diagnostic(_clang_getDiagnostic(self.tu, key)) + diag = _clang_getDiagnostic(self.tu, key) + if not diag: + raise IndexError + return Diagnostic(diag) - return Diags(self) + return DiagIterator(self) class File(ClangObject): """