Граф коммитов

151 Коммитов

Автор SHA1 Сообщение Дата
Nika Layzell c9d0fe3dd2 Bug 1455217 - Part 1: Add an explicit Promise type to xpidl, r=mccr8
This type is fairly simple on the idl parsing side of things. I handle it in the
same way that special types such as ns[C]String, nsid, and jsval are handled, by
using a special native type.

The logic for converting the value between C++ and JS follows the existing logic
from the nsISupports <=> JS Promise conversions.
2018-05-14 17:55:53 -04:00
Nika Layzell e5e1512c1e Bug 1454568 - Support [infallible] on interfaces and domobjects in xpidl, r=froydnj 2018-05-14 17:55:53 -04:00
Nika Layzell 6969209b41 Bug 1444991 - Part 2: Parse webidl productions in xpidl, r=mccr8
They are parsed into a WebIDL object, and lowered into C++, Rust, and XPT.

For C++ code, we generate a correctly namespaced forward declaration. In Rust,
the types are exposed as `*const c_void`, as we don't have WebIDL type
information there.

The XPT code generator needs to know the header filename in order to perform
correct codegen, so we also get that information.
2018-04-17 19:21:00 -04:00
Nika Layzell be8b24333a Bug 1444991 - Part 1: Read webidl's Bindings.conf, and pass it into xpidl, r=mccr8
This information is read in order to handle correctly selecting the native
type and header files for WebIDL types.
2018-04-17 19:20:58 -04:00
Nika Layzell 04547a4a00 Bug 1444745 - Part 4: Rewrite xptinfo, and write a new xptcodegen.py to generate the required datastructures, r=mccr8
This patch contains the meat of the changes here. The following summarize the changes:
1. xptinfo.h is rewritten to expose the new interface for reading the XPT data,

The nsXPTInterfaceInfo object exposes methods with the same signatures as
the methods on nsIInterfaceInfo, to make converting code which used
nsIInterfaceInfo as easy as possible, even when those methods don't have
signatures which make a ton of sense anymore. There are also a few methods
which are unnecessary (they return `true` or similar), which should be
removed over time.

Members of the data structures are made private in order to prevent reading
them directly. Code should instead call the getter methods. This should make
it easier to change their memory representation in the future. Constructing
these structs is made possible by making the structs `friend class` with the
XPTConstruct class, which is implemented by the code generator, and is able
to access the private fields.

In addition, rather than using integers with flag constants, I opted for
using C++ bitfields to store individual flags, as I found it made it easier
to both write the code generator, and reason about the layouts of the types.

I was able to shave a byte off of each nsXPTParamInfo (4 bytes -> 3 bytes)
by shoving the flags into spare bits in the nsXPTType. Unfortunately there
was not enough room for the retval flag. Fortunately, we already depend in
our code on the retval parameter being the last parameter, so I worked
around this by removing the retval flag and instead having a `hasretval`
flag on the method itself.

2. An xptinfo.cpp file is added for out-of-line definitions of more complex
methods, and the internal implementation details of the perfect hash.

Notable is the handling of xptshim interfaces. As the type is uniform, a
flag is checked when trying to read constant information, and a different
table with pointers into webidl data structures is checked when the type is
determined to be a shim.

Ideally we could remove this once we remove the remaining consumers of the
existing shim interfaces.

3. A python code generator which takes in the json XPT files generated in the
previous part, and emits a xptdata.cpp file with the data structures. I did
my best to heavily comment the code.

This code uses the friend class trick to construct the private fields of the
structs, and avoid a dependency on the ordering of fields in xptinfo.h.

The sInterfaces array's order is determined by a generated perfect hash
which is also written into the binary. This should allow for fast lookups by
IID or name of interfaces in memory. The hash function used for the perfect
hash is a simple FNV hash, as they're pretty fast.

For perfect hashing of names, another table is created which contains
indexes into the sInterfaces table. Lookup by name is less common, and this
form of lookup should still be very fast.

4. The necessary Makefiles are updated to use the new code generator, and
generate the file correctly.
2018-04-17 19:20:55 -04:00
Nika Layzell 95b7d44e5d Bug 1444745 - Part 3: Replace the XPT file format with a JSON based one, r=mccr8
This patch adds a python script based on the old typelib.py script which takes
in a parsed XPIDL file, and generates a json-based XPT file to use as a build
intermediate. I did my best to keep the generated format simple.
2018-04-17 19:20:53 -04:00
Nika Layzell c29896177a Bug 1444745 - Part 2: Add the xptshim and xptshimfile attributes to xpidl, r=mccr8
In the previous patch, one of the files which was deleted is ShimInterfaceInfo.
This is an implementor of nsIInterfaceInfo which exists for legacy reasons, in
order to allow Components.interfaces.nsIDOM* to have the correct constants and
IIDs associated with them.

As that file was deleted, this information now has to be stored in the typelib.
To do this, the information is moved to the xptshim and xptshimfile attributes
on the relevant xpcom interfaces.

xptshim(...) means that this xpcom interface is a shim for the WebIDL interface
with the specified name.

xptshimfile(...) is for use when the webidl interface is declared in another
interface's .webidl file, (in our case, MessageManager.webidl). It contains the
name of the parent binding, such that we can #include the correct file in our
generated code.

This patch does not add the code which uses these changes, only the parsing
logic.
2018-04-17 19:20:51 -04:00
Nika Layzell f5f86c989e Bug 1444745 - Part 1: Clear out xptinfo and typelib to make way for the this patch, r=mccr8
Unfortunately, I wasn't able to figure out a way to make firefox build & run in
the intermediate stages of these commits. Because of this, I am going to just
delete most of the code which I am deleting in the first patch, as I figure that
those are somewhat uninteresting changes, and then make the other changes in the
following patches.

In total, the following things are deleted:
1. All of xpcom/typelib, except for `xpt/tools` - this directory is being
subsumed entirely into xpcom/reflect/xptinfo.
2. Most of the code in xpcom/reflect/xptinfo, it is being rewritten to avoid
allocating and contain all of the necessary data structures.
3. idl-parser's typelib.py XPT generator, as it will be replaced.
4. Most includes of files which have been deleted.

NOTE: xpcom/typelib/xpt/tools/xpt.py was not removed, as it is used by bundling
code & bundling tests, which we don't want to remove yet.
2018-04-17 19:20:50 -04:00
Nika Layzell a8351a819f Bug 1293362 - Part 5: Allow implementing xpcom interfaces from rust code with a custom derive, r=froydnj
MozReview-Commit-ID: 90Yv3H40jZW
2018-01-23 17:27:28 -05:00
Nika Layzell c33284aec0 Bug 1293362 - Part 4: Generate runtime bindings for calling xpcom methods from rust, r=froydnj
MozReview-Commit-ID: K37KyHkKsSl
2018-01-23 17:27:26 -05:00
Nika Layzell 3fe123346a Bug 1293362 - Part 3: Add rust type information to the idl-parser for xpidl.py, r=froydnj
MozReview-Commit-ID: IPcuPuXDZho
2018-01-23 17:27:25 -05:00
Andrew McCreight f2b46979df Bug 338865 - Scriptable XPIDL iface inheriting from noscript iface should throw error. r=froydnj
MozReview-Commit-ID: H6sF4Poz2V0

--HG--
extra : rebase_source : fdbd62049d96e89f0182f750da0dd52ad60eb717
2017-09-12 15:03:14 -07:00
Andrew Halberstadt f79b06a32a Bug 1339178 - Use pytest to run python-tests, r=davehunt
This switches most tests over to use pytest as the runner instead of unittest (taking
advantage of the fact that pytest can run unittest based tests).

There were a couple tests that had failures when swithing to pytest:
config/tests/unit-expandlibs.py
xpcom/idl-parser/xpidl/runtests.py

For these tests, I added a runwith='unittest' argument so that they still run the
same way as before. Once we fix them to use pytest, the unittest logic in mozunit.py
can be deleted.

MozReview-Commit-ID: Gcsz6z8MeOi

--HG--
extra : rebase_source : 3c762422ce0af54cbbe7d9fc20085a2d1ebe7057
2017-08-29 14:50:33 -04:00
Masatoshi Kimura 69ccb403f8 Bug 1387803 - Remove the [deprecated] annotation from XPIDL. r=froydnj
MozReview-Commit-ID: 1TOAHAgyf1y

--HG--
extra : rebase_source : a8c33671400fab266cf0a86f3f87eeba589b0125
2017-08-06 14:25:57 +09:00
Nicholas Nethercote 4f49ba4241 Bug 1386962 - Remove template code from XPIDL generated header files. r=froydnj.
XPIDL generated header files contain a |#if 0| block for every interface,
providing the skeleton of the class as it must be implemented in C++. This is
potentially useful, but also very verbose.

This patch removes this code. In a Linux64 debug build, this reduces the total
size of the $OBJDIR/dist/include/nsI*.h files from 11,023,499 bytes to
8,442,350 bytes, a 23.5% reduction. It didn't speed up compilation, though.

--HG--
extra : rebase_source : 65e1e46cffe7c831d83c3308d7ce58c801618dda
2017-08-03 17:05:01 +10:00
Bill McCloskey 226f6b9185 Bug 1366869 - Make DISPATCH_NORMAL be the default flags argument for nsIEventTarget::Dispatch (r=froydnj)
MozReview-Commit-ID: 5DVcIaMHH95
2017-05-23 12:05:43 -07:00
Benjamin Smedberg ca77995f5d Bug 1333826 - Remove SDK_FILES, SDK_LIBRARY, and related is_sdk support in the build goop, r=mshal
MozReview-Commit-ID: 52vPyDXdFte

--HG--
extra : rebase_source : c3217730bb70eb7319152dd07536b12f49d6a597
2017-01-30 11:24:10 -05:00
Nicholas Nethercote 949658eb73 Bug 1329857 - Remove NS_METHOD and NS_CALLBACK. r=froydnj.
Bug 1295053 removed most uses of NS_METHOD and NS_CALLBACK, but one use was
unintentionally left behind (in the XPIDL parser) and another has since crept
in (in MediaDrmCDMProxy.h).

So this patch removes NS_METHOD and NS_CALLBACK. NS_METHOD_(nsresult) and
NS_CALLBACK_(nsresult, T) can still be used for the same purpose, but those
alternatives are less likely to be used unintentionally.

--HG--
extra : rebase_source : a50fc7b2a64a36d1ca9beda81bc0edb8f2ec1934
2017-01-10 14:08:43 +11:00
Mike Hommey d04ddd8b0e Bug 1319352 - Allow to run AccEventGen.py and xpild/header.py from any directory. r=mshal
--HG--
extra : rebase_source : 52c9ffea0628101ca651ca2fdad1ececbfeb8039
2016-11-22 17:05:49 +09:00
Andrew Halberstadt 6adcf5b456 Bug 1317970 - Use manifestparser manifests for python unit tests, r=chmanchester
This deprecates PYTHON_UNIT_TESTS and replaces it with PYTHON_UNITTEST_MANIFESTS.
In the build system, this means python unittests will be treated the same as all
other test suites that use manifestparser. New manifests called 'python.ini' have
been created for all test directories containing python unittests.

MozReview-Commit-ID: IBHG7Thif2D

--HG--
extra : rebase_source : 11a92a2bc544d067946bbd774975140147458caa
2016-11-16 09:59:22 -05:00
Mike Shal 33dd807e8a Bug 1304131 - list xpidl.stub as the first output for header.py; r=gps
Since xpidllex.py and xpidlyacc.py are created deep in the
other-licenses/ply code, we can't easily pass in our FileAvoidWrite
handle from the mozbuild action. As a result, when ply writes out
xpidllex.py, the mozbuild action overwrites the contents of the file
with a new 0-length xpidllex.py. This causes future xpidl invocations to
write out a new xpidllex.py rather than using the pre-built one.

MozReview-Commit-ID: NOC1Wr3MZO

--HG--
extra : rebase_source : a364a0f6f47e1c652bd41c90548fe7cbaf516374
2016-09-19 13:43:39 -04:00
Nicholas Nethercote 0b2a9374e3 Bug 1295825 (part 1) - Add a [must_use] attribute to XPIDL. r=froydnj.
For XPIDL methods, this causes MOZ_MUST_USE to be prepended to the generated
C++ function declaration.

For XPIDL attributes, this causes MOZ_MUST_USE to be prepended to the generated
C++ getter declaration and (if present) setter declaration.

--HG--
extra : rebase_source : e0b2c43235bfbc02db609076e82ca6325e4b0bff
2016-08-17 11:08:14 +10:00
Michael Layzell b0e960faba Bug 1293001 - Part 4: Add test for xpidl parser modifications, r=froydnj
MozReview-Commit-ID: JTtcwlVH3HN
2016-08-11 15:49:42 -04:00
Michael Layzell ee7579d8b5 Bug 1293001 - Part 3: Prevent virtual method overloading in xpidl with the parser, r=froydnj
MozReview-Commit-ID: 7nFq3wJtUoi
2016-08-11 15:49:41 -04:00
Mike Shal 66abb74f81 Bug 1293387 - fix header.py direct invocation; r=chmanchester
MozReview-Commit-ID: FtJpzOZ4Is6

--HG--
extra : rebase_source : b428be80fae70be2bfc6d3bf96775e3e859e9ef1
2016-07-26 14:15:06 -04:00
Tom Tromey 5538d692d3 Bug 1286877 - do not set c-basic-offset for python-mode; r=gps
This removes the unnecessary setting of c-basic-offset from all
python-mode files.

This was automatically generated using

    perl -pi -e 's/; *c-basic-offset: *[0-9]+//'

... on the affected files.

The bulk of these files are moz.build files but there a few others as
well.

MozReview-Commit-ID: 2pPf3DEiZqx

--HG--
extra : rebase_source : 0a7dcac80b924174a2c429b093791148ea6ac204
2016-07-14 10:16:42 -06:00
Gregory Szorc 886671f70c Bug 1267369 - Only generate typelib data for scriptable interfaces; r=khuey
We are currently generating typelib data for all interfaces. Apparently
typelib data is only needed for scriptable interfaces. So let's stop
generating typelib data for interfaces that aren't scriptable.

The impact of this is that some typelibs are dropped from
interfaces.xpt, resulting in ~10kb smaller interfaces.xpt:

* nsIDOMCSSValue
* nsIDOMDOMImplementation
* nsIDOMDOMCursor
* nsIProfilerStartParams
* nsIStreamingProtocolMetaData
* nsIDOMCharacterData
* nsIPrintSession
* nsIDOMDocumentFragment
* nsIDOMProcessingInstruction
* nsIDOMElement
* nsIDOMText
* nsIDOMXULElement
* nsIDOMAttr
* nsIDOMGeoPositionError
* nsIXMLHttpRequestEventTarget
* nsIDOMCSSStyleDeclaration
* nsIDOMCSSStyleSheet
* nsIDOMDocument
* nsIDOMClientRect
* nsIDOMMozNamedAttrMap
* nsIDOMNode
* nsIThreadObserver
* nsIDOMDocumentType
* nsIXMLHttpRequestUpload
* nsISelection
* nsIDOMCDATASection
* nsIDOMDOMRequest
* nsIDOMComment
* nsIDOMEvent

MozReview-Commit-ID: 3LYdNYs7Tum

--HG--
extra : rebase_source : 4ed0e6ef761b165108b8581077f2bf7eddd02274
2016-04-25 12:32:10 -07:00
Mike Shal a1f020d488 Bug 1261283 - allow GENERATED_FILES to write to multiple outputs; r=glandium
MozReview-Commit-ID: DbBoZZnasTo
2016-04-01 10:38:22 -04:00
Mike Shal 691d1784ff Bug 1253431 part 4 - Convert header.py to a GENERATED_FILES script; r=gps
We only ever execute this in one place, so we can just have the main
action do the --regen --cachedir=. mode of operation.

MozReview-Commit-ID: Fis4YBPFjMl

--HG--
extra : rebase_source : f19ac1ad688115c0aee4bf307b72d6207512f702
2016-03-03 14:15:58 -05:00
Mike Shal 7b58ab8671 Bug 1253431 part 3 - Move SDK_BINARY files in xpcom/idl-parser/xpidl to moz.build; r=gps
We can just generate xpidllex.py/xpidlyacc.py in the current directory
rather than one directory higher, and specify this directory as an
include path to xpidl-process.py

MozReview-Commit-ID: KLoGjudc4Y8

--HG--
extra : rebase_source : 8dda268c6490cdfb8b896de9da5b789208584193
2016-03-03 13:49:42 -05:00
Mike Shal 99a6e03fb1 Bug 1253431 part 2 - Use SDK_FILES instead of INSTALL_TARGETS; r=gps
MozReview-Commit-ID: K2Va7og0xw9

--HG--
extra : rebase_source : f8ae661e14c350aed7b8f66453cd6affe7498e78
2016-01-21 16:31:02 -05:00
Ms2ger 6eff98e0a9 Bug 1248950 - Move xpidl unit tests to moz.build; r=ted 2016-03-02 11:21:26 +01:00
Gijs Kruitbosch 463f87d708 Bug 1223142 - make XPIDL set default nullptrs for optional out parameters, r=bz
--HG--
extra : commitid : 8pSPKD5AdOY
extra : transplant_source : %F2%8D%0D%20D4%98%7C%2A%16L%04%C0%88%24%AB%19%19%B2s
2015-11-05 22:45:25 +00:00
Bobby Holley 4f18eeb505 Bug 1161831 - Generate an extra macro to declare a non-virtual variant of an interface. r=billm
This allows us to have a shared superclass that implements the guts of a shared
superinterface, without having the superclass actually inherit the superinterface
(which leads to annoying and unnecessary diamond-inheritance).
2015-07-21 12:57:20 -07:00
Peter Elmers f0de749c69 Bug 1183291 - Factor idl-parser into a Python package. r=khuey
Move Python code into an xpidl subdirectory, and include a setup.py to allow
inclusion from pip install or requirements files. Change build directory
variables appropriately.

--HG--
rename : xpcom/idl-parser/Makefile.in => xpcom/idl-parser/xpidl/Makefile.in
rename : xpcom/idl-parser/header.py => xpcom/idl-parser/xpidl/header.py
rename : xpcom/idl-parser/moz.build => xpcom/idl-parser/xpidl/moz.build
rename : xpcom/idl-parser/runtests.py => xpcom/idl-parser/xpidl/runtests.py
rename : xpcom/idl-parser/typelib.py => xpcom/idl-parser/xpidl/typelib.py
rename : xpcom/idl-parser/xpidl.py => xpcom/idl-parser/xpidl/xpidl.py
2015-07-13 13:09:11 -07:00
Boris Kudryavtsev 027e60563e Bug 1155968 - Fix variable use before initialization. r=khuey 2015-06-02 12:17:00 +02:00
Boris Kudryavtsev 50bd38bd38 Bug 1155968 - Fix correct number of empty lines between objects to comply with PEP8. r=khuey 2015-05-20 21:56:00 +02:00
Boris Kudryavtsev f75453e666 Bug 1155968 - Fix indentation warnings to comply with PEP8. r=khuey 2015-05-20 21:55:00 +02:00
Boris Kudryavtsev 13d9229e12 Bug 1155968 - Whitespace fixes in xpidl.py to comply with PEP8. r=khuey 2015-05-16 12:18:00 +02:00
Boris Kudryavtsev fa8c2b1b78 Bug 1155968 - Change '==' and '!=' to 'is' and 'is not' to comply with PEP8. r=khuey 2015-05-14 19:50:00 +02:00
Boris Kudryavtsev baaa8b054e Bug 1155968 - Correct indent not multiple of 4. r=khuey 2015-05-12 18:41:00 +02:00
Boris Kudryavtsev 26a5f1e8dc Bug 1155968 - Remove semicolons at ends of statements (PEP8). r=khuey 2015-05-09 12:38:00 +02:00
Boris Kudryavtsev b24932ea8e Bug 1155968 - Move statements to their own lines. r=khuey 2015-05-05 17:24:00 +02:00
Boris Kudryavtsev dc76fa3749 Bug 1155968 - Whitespace changes in header.py and runtests.py. r=khuey 2015-05-04 22:45:00 +02:00
Boris Kudryavtsev 8f40bd3325 Bug 1155968 - Remove trailing whitespace in header.py. r=khuey 2015-05-04 22:41:00 +02:00
Boris Kudryavtsev 5562b1dcb8 Bug 1155968 - Add blank lines where needed in xpcom/idl-parser. r=khuey 2015-05-04 22:35:00 +02:00
Boris Kudryavtsev ec7138788a Bug 1155968 - Place imports on separate lines. r=khuey 2015-05-04 22:34:00 +02:00
Bill McCloskey a9569d4725 Bug 997325 - Implement main process scriptable only flag in XPIDL (r=mrbkap) 2015-03-26 14:39:48 -07:00
Ehsan Akhgari cc8420e5e2 Bug 1145631 - Part 3: Replace MOZ_OVERRIDE with override in the XPIDL codegen; r=froydnj 2015-03-21 12:28:27 -04:00
Nathan Froyd 8c2657fa26 Bug 1140509 - remove the unused Infinity keyword from the xpidl parser; r=bsmedberg 2015-03-09 14:02:26 -04:00