[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