Bug 683096: Make arrays of nsQIResults work. r=ted
☠☠ backed out by 472716252ea3 ☠ ☠
authorKyle Huey <khuey@kylehuey.com>
Fri, 02 Sep 2011 17:36:48 -0400
changeset 77772 e5815c156b6c95e4ccdb38c9d1886af2ece4518e
parent 77771 9ca928d8095c07ac3ba0a66baeb9799dfd15215c
child 77773 472716252ea34db8e104890af192981688d01751
child 78302 cfe788512a5dcf0163aea3183cb79d9fc2510014
push id78
push userclegnitto@mozilla.com
push dateFri, 16 Dec 2011 17:32:24 +0000
treeherdermozilla-release@79d24e644fdd [default view] [failures only]
perfherder[talos] [build metrics] [platform microbench] (compared to previous push)
reviewersted
bugs683096
milestone9.0a1
first release with
nightly linux32
nightly linux64
nightly mac
nightly win32
nightly win64
last release without
nightly linux32
nightly linux64
nightly mac
nightly win32
nightly win64
Bug 683096: Make arrays of nsQIResults work. r=ted
xpcom/idl-parser/typelib.py
--- a/xpcom/idl-parser/typelib.py
+++ b/xpcom/idl-parser/typelib.py
@@ -89,17 +89,19 @@ def build_interface(iface, ifaces):
             else:
                   tag = TypeMap[type.name]
                   isPtr = (tag == xpt.Type.Tags.char_ptr or tag == xpt.Type.Tags.wchar_t_ptr)
                   return xpt.SimpleType(tag,
                                         pointer=isPtr,
                                         reference=False)
 
         if isinstance(type, xpidl.Array):
-            return xpt.ArrayType(get_type(type.type, calltype), size_is,
+            # NB: For an Array<T> we pass down the iid_is to get the type of T.
+            #     This allows Arrays of InterfaceIs types to work.
+            return xpt.ArrayType(get_type(type.type, calltype, iid_is), size_is,
                                  #XXXkhuey length_is duplicates size_is (bug 677788),
                                  size_is)
 
         if isinstance(type, xpidl.Interface) or isinstance(type, xpidl.Forward):
             xptiface = None
             for i in ifaces:
                 if i.name == type.name:
                     xptiface = i