[prev in list] [next in list] [prev in thread] [next in thread]
List: kde-commits
Subject: KDE/kdelibs/kjsembed
From: Erik Lloyd Bunce <kde () bunce ! us>
Date: 2006-09-28 17:16:44
Message-ID: 1159463804.193763.4553.nullmailer () svn ! kde ! org
[Download RAW message or body]
SVN commit 589800 by bunce:
Throw appropriate error on failing to construct an object. Fix method parameter list \
generation to include all arguments. Improve number/bool parameter handling. Put \
appopriate Q_UNUSED(args) for functions that don't take arguments. Add myself to \
AUTHORS file.
M +1 -0 AUTHORS
M +52 -19 autobind/values/generatebinding.js
--- trunk/KDE/kdelibs/kjsembed/AUTHORS #589799:589800
@@ -3,3 +3,4 @@
Ian Reinhart Geiser <geiseri@kde.org>
Matt Broadstone <mbroadst@gmail.com>
Richard J. Moore <rich@kde.org>
+Erik L. Bunce <kde@bunce.us>
--- trunk/KDE/kdelibs/kjsembed/autobind/values/generatebinding.js #589799:589800
@@ -69,7 +69,8 @@
ctor += ' }\n';
}
- ctor += '}';
+ ctor += ' return KJS::throwError(exec, KJS::SyntaxError, "Syntax error in \
parameter list for ' + compoundName + '");\n' + + '}';
return ctor;
}
@@ -224,18 +225,25 @@
{
var methodType = \
memberElement.firstChildElement('type').toElement().toString();
var methodArgs = \
memberElement.firstChildElement('argsstring').toElement().toString(); + \
// Handle arguments + var methodArgList = \
memberElement.elementsByTagName('param'); +
methods +=
'// ' + methodType + ' ' + memberName + methodArgs + \
'\n' +
'KJS::JSValue *'+ memberName + '( KJS::ExecState *exec, \
KJS::JSObject *self, const KJS::List &args ) \n' +
- '{ \n' +
+ '{ \n';
+
+ if (methodArgList.count() == 0)
+ methods +=
+ ' Q_UNUSED(args); \n';
+
+ methods +=
' KJS::JSValue *result = KJS::Null(); \n' +
' KJSEmbed::ValueBinding *imp = \
KJSEmbed::extractBindingImp<KJSEmbed::ValueBinding>(exec, self); \n' + ' if( imp \
) \n' + ' { \n' +
' ' + compoundName + ' value = imp->value<' + \
compoundName + '>();\n';
- // Handle arguments
- var methodArgList = \
memberElement.elementsByTagName('param'); if ( methodArgList.count() == 0 )
{
if (methodType == "void")
@@ -265,20 +273,26 @@
}
}
+ var tmpArgs = '';
for ( paramIdx = 0; paramIdx < methodArgList.count(); \
++paramIdx ) {
var param = methodArgList.item(paramIdx).toElement();
- var paramVar = \
param.firstChildElement('declname').toElement().toString();
var paramVarElement = \
param.firstChildElement('declname').toElement(); + var \
paramVar = paramVarElement.toString(); + if \
(paramVarElement.isNull()) + paramVar = 'arg' + \
paramIdx;
var paramDefault = \
param.firstChildElement('defval').toElement();
methods += extract_parameter(param, paramIdx, \
compoundEnums); +
+ tmpArgs += paramVar + ', ';
}
- if ( memberName.indexOf('set') != -1 )
- { // setter, we can handle this for now
- if ( paramVarElement.isNull() )
- methods += ' value.' + memberName + \
'(arg0);\n';
- else
- methods += ' value.' + memberName + '(' + \
paramVar + ');\n'; +
+ if (tmpArgs != '')
+ {
+ var tmpIdx = tmpArgs.lastIndexOf(',');
+ tmpArgs = tmpArgs.substr(0, tmpIdx);
+ var tmpIdx =
+ methods += ' value.' + memberName + '(' + \
tmpArgs + ');\n'; }
methods +=
@@ -354,21 +368,28 @@
// Regular expression used to spot const & type args (i.e. 'const QString &').
const_ref_rx = /const\s+(\w+)\s*&/;
+ptr_rx = /(\w+)\s*\*/;
function findCoreParamType(paramType)
{
var coreParamTypeMatch = const_ref_rx.exec(paramType);
// We want the core parameter type
- var coreParamType;
- if (coreParamTypeMatch == null)
- coreParamType = paramType;
- else
- coreParamType = coreParamTypeMatch[1];
+ if (coreParamTypeMatch != null)
+ return coreParamTypeMatch[1];
- return coreParamType;
+// coreParamTypeMatch = ptr_rx.exec(paramType);
+// if (coreParamTypeMatch != null)
+// return coreParamTypeMatch[1];
+
+ return paramType;
}
+function isPointer(paramType)
+{
+ return (ptr_rx.exec(paramType) != null);
+}
+
// An array of primitive Qt types, this is annoying but seems to be necessary
var data_types = {
// Actual variant types
@@ -389,7 +410,7 @@
"qreal" : 3, "qint8" : 4, "quint8" : 4, "qint16" : 4, "quint16" : 4,
"qint32" : 4, "quint32" : 4, "qint64" : 4, "quint64" : 4,
"qulonglong" : 4,
- "uchar" : 4, "ushort" : 4, "ulong" : 4
+ "char" : 4, "uchar" : 4, "ushort" : 4, "ulong" : 4
};
@@ -449,9 +470,21 @@
coreParamType = findCoreParamType(paramType);
- if ( paramType.indexOf('Qt::') != -1 ) // Enum Value
+ if ( isBool(coreParamType) || isNumber(coreParamType) ) // integral value
{
extracted +=
+ ' ' + coreParamType + ' ' + paramVar + ' = \
KJSEmbed::extractValue<' + coreParamType + '>(exec, args, ' + paramIdx; +
+ if (!paramDefault.isNull())
+ extracted += ', ' + paramDefault.toString() + ');\n';
+ else
+ extracted += ');\n';
+
+ return extracted;
+ }
+ else if ( paramType.indexOf('Qt::') != -1 ) // Enum Value
+ {
+ extracted +=
' ' + paramType + ' ' + paramVar + ' = static_cast<' + paramType \
+ '>(KJSEmbed::extractInt(exec, args, ' + paramIdx + ', ';
if (!paramDefault.isNull())
[prev in list] [next in list] [prev in thread] [next in thread]
Configure |
About |
News |
Add a list |
Sponsored by KoreLogic