changeset 13:bab79fdfa745

Added JSQuasimodeMethod array to make method definitions on quasimode JS object easier.
author Atul Varma <avarma@mozilla.com>
date Sun, 11 Apr 2010 21:34:36 -0700
parents 4bb0e66b4d7f
children 7a3d7ce08927
files JavaScriptQuasimode.m
diffstat 1 files changed, 28 insertions(+), 14 deletions(-) [+]
line wrap: on
line diff
--- a/JavaScriptQuasimode.m	Sun Apr 11 21:18:13 2010 -0700
+++ b/JavaScriptQuasimode.m	Sun Apr 11 21:34:36 2010 -0700
@@ -4,12 +4,18 @@
 #import "Quasimode.h"
 #import "JavaScriptQuasimode.h"
 
-static JSValueRef setSize(JSContextRef ctx,
-                          JSObjectRef function,
-                          JSObjectRef thisObject,
-                          size_t argumentCount,
-                          const JSValueRef arguments[],
-                          JSValueRef* exception)
+typedef struct {
+  const char *name;
+  JSObjectCallAsFunctionCallback callback;
+} JSQuasimodeMethod;
+
+static JSValueRef
+method_setSize(JSContextRef ctx,
+               JSObjectRef function,
+               JSObjectRef thisObject,
+               size_t argumentCount,
+               const JSValueRef arguments[],
+               JSValueRef* exception)
 {
   if (argumentCount >= 2 &&
       JSValueIsNumber(ctx, arguments[0]) &&
@@ -27,16 +33,24 @@
   return JSValueMakeUndefined(ctx);
 }
 
+static JSQuasimodeMethod jsQuasimodeMethods[] = {
+  {"setSize", method_setSize},
+  {NULL, NULL}
+};
+
 static void initialize(JSContextRef ctx, JSObjectRef object)
 {
-  JSStringRef setSizeStr = JSStringCreateWithUTF8CString("setSize");
-  JSObjectRef func = JSObjectMakeFunctionWithCallback(ctx, setSizeStr,
-                                                      setSize);
-
-  JSObjectSetProperty(ctx, object, setSizeStr, func,
-                      kJSPropertyAttributeReadOnly |
-                      kJSPropertyAttributeDontDelete,
-                      NULL);
+  for (JSQuasimodeMethod *method = jsQuasimodeMethods;
+       method->name != NULL;
+       method++) {
+    JSStringRef nameStr = JSStringCreateWithUTF8CString(method->name);
+    JSObjectRef func = JSObjectMakeFunctionWithCallback(ctx, nameStr,
+                                                        method->callback);
+    JSObjectSetProperty(ctx, object, nameStr, func,
+                        kJSPropertyAttributeReadOnly |
+                        kJSPropertyAttributeDontDelete,
+                        NULL);
+  }
 }
 
 void JSQuasimodeInit(Quasimode *quasimode)