Go to file
Kent Hansen f95181c7bb Long live Qt5 meta-object method/property descriptors
This commit introduces two significant changes to the meta-object
data format:

1) Meta-type information (QMetaType type/name) information is
stored directly in the meta-data for both properties and methods;
2) The original signature (string) of a method is no longer stored
in the meta-data, since it can be reconstructed from the method
name and parameter type info.

The motivation for this change is to enable direct access to method
names and type information (avoiding string-based lookup for types
if possible), since that's typically the information language
bindings (e.g. QML) need. (moc already had all the desired
information about methods, but it threw it away!)

This change keeps support for the older (6 and below) meta-object
revisions, but the support will be removed after a short grace
period.

The following public QMetaMethod functions have been added:

name() : QByteArray
returnType() : int
parameterCount() : int
parameterType(int index) : int

The following internal QMetaMethod function has been added:

getParameterTypes(int *types) : void

This commit extends the meta-method data to include explicit
type/name data for methods. The new data follows the existing
(5-word) method descriptors in the meta-data. The method descriptor
format was modified to enable this. First, the descriptor now
contains the meta-data index where the method's type/name information
can be found. Second, the descriptor contains the number of
parameters. Third, the descriptor has a reference to the name of the
method, not the full signature.

Each entry of a method's type/name array contains either the type id
(if it could be determined at meta-object definition time), or a
reference to the name of the type (so that the type id can be
resolved at runtime).

Lastly, instead of storing the method parameter names as a
comma-separated list that needs to be parsed at runtime (which was
how it was done prior to this commit), the names are now stored as
separate entries in the meta-object string table, and their indexes
are stored immediately after the method type info array. Hence,
parameter names can be queried through the public API without
parsing/allocating/copying, too.

Task-number: QTBUG-24154
Change-Id: Idb7ab81f12d4bfd658b74e18a0fce594f580cba3
Reviewed-by: Thiago Macieira <thiago.macieira@intel.com>
Reviewed-by: Lars Knoll <lars.knoll@nokia.com>
2012-02-29 12:50:14 +01:00
bin Report failure to open deprecated header file 2012-02-23 04:04:59 +01:00
config.tests Remove stale QWS considerations from configure 2012-02-28 11:48:12 +01:00
dist Rename QMetaMethod::signature() to methodSignature() 2012-02-29 12:50:14 +01:00
doc/src Rename QMetaMethod::signature() to methodSignature() 2012-02-29 12:50:14 +01:00
examples Use new plugin system in qtbase. 2012-02-27 13:28:21 +01:00
lib Initial import from the monolithic Qt. 2011-04-27 12:05:43 +02:00
mkspecs Add a new qmake feature to support OpenGL ES 1 apps 2012-02-28 22:35:24 +01:00
qmake resolve relative spec paths already on the command line 2012-02-28 09:13:47 +01:00
src Long live Qt5 meta-object method/property descriptors 2012-02-29 12:50:14 +01:00
tests Long live Qt5 meta-object method/property descriptors 2012-02-29 12:50:14 +01:00
tools Make configure.exe only detect each compiler once 2012-02-27 20:52:45 +01:00
util clean up qmake-generated projects 2012-02-24 05:18:30 +01:00
.gitattributes Added .tag file with Git revision. 2011-05-03 16:23:49 +02:00
.gitignore Add src/concurrent/qtconcurrentversion.h to .gitignore 2012-02-23 09:01:18 +01:00
.tag Added .tag file with Git revision. 2011-05-03 16:23:49 +02:00
configure configure: fixed qconfig.h symlink warnings 2012-02-28 12:07:28 +01:00
configure.bat bootstrap configure.exe on windows 2012-02-16 01:56:21 +01:00
header.BSD Remove "All rights reserved" line from license headers. 2012-01-30 03:54:59 +01:00
header.FDL Remove "All rights reserved" line from license headers. 2012-01-30 03:54:59 +01:00
header.LGPL Remove "All rights reserved" line from license headers. 2012-01-30 03:54:59 +01:00
header.LGPL-ONLY Remove "All rights reserved" line from license headers. 2012-01-30 03:54:59 +01:00
INSTALL Remove Symbian specific code from qtbase. 2012-01-31 07:08:31 +01:00
LGPL_EXCEPTION.txt Initial import from the monolithic Qt. 2011-04-27 12:05:43 +02:00
LICENSE.FDL Initial import from the monolithic Qt. 2011-04-27 12:05:43 +02:00
LICENSE.LGPL Update contact information in license headers. 2012-01-23 04:04:33 +01:00
LICENSE.PREVIEW.COMMERCIAL Initial import from the monolithic Qt. 2011-04-27 12:05:43 +02:00
qtbase.pro Add configure, sync.profile, and header.* to OTHER_FILES in qtbase.pro 2012-02-08 07:40:03 +01:00
sync.profile Add qprocessordetection.h 2012-02-08 12:33:11 +01:00