Author: [EMAIL PROTECTED]
Date: Fri Sep 26 09:21:37 2008
New Revision: 3685

Added:
    changes/jat/oophm-branch/plugins/xpcom/XpcomDebug.cpp
    changes/jat/oophm-branch/plugins/xpcom/XpcomDebug.h
Modified:
    changes/jat/oophm-branch/plugins/common/ByteOrder.h
    changes/jat/oophm-branch/plugins/xpcom/FFSessionHandler.cpp
    changes/jat/oophm-branch/plugins/xpcom/FFSessionHandler.h
    changes/jat/oophm-branch/plugins/xpcom/JavaObject.cpp
    changes/jat/oophm-branch/plugins/xpcom/Makefile

Log:
Portability and debug fixes.


Modified: changes/jat/oophm-branch/plugins/common/ByteOrder.h
==============================================================================
--- changes/jat/oophm-branch/plugins/common/ByteOrder.h (original)
+++ changes/jat/oophm-branch/plugins/common/ByteOrder.h Fri Sep 26 09:21:37  
2008
@@ -57,8 +57,8 @@
  #ifndef PLATFORM_FLOAT_ENDIANESS
      DoubleUnion u;
      memset(u.b, 0, sizeof(u.b));
-    u.b[0] = 0x80;
-    u.b[7] = 0x02;
+    u.b[0] = (char) 0x80;
+    u.b[7] = (char) 0x02;
      // TODO(jat): add more tests here if we support other endianess
      floatByteOrder = u.v > 0 ? FLOAT_LITTLE_ENDIAN : FLOAT_BIG_ENDIAN;
      if (Debug::level(Debug::Debugging)) {

Modified: changes/jat/oophm-branch/plugins/xpcom/FFSessionHandler.cpp
==============================================================================
--- changes/jat/oophm-branch/plugins/xpcom/FFSessionHandler.cpp (original)
+++ changes/jat/oophm-branch/plugins/xpcom/FFSessionHandler.cpp Fri Sep 26  
09:21:37 2008
@@ -19,6 +19,7 @@
  #include "JavaObject.h"
  #include "JSRunner.h"
  #include "Debug.h"
+#include "XpcomDebug.h"
  #include "scoped_ptr/scoped_ptr.h"
  #include "RootedObject.h"
  #include "InvokeMessage.h"
@@ -89,7 +90,7 @@
      if (JS_GetPendingException(ctx, &exc)) {
        Debug::log(Debug::Error)
            << "__gwt_makeTearOff(null,0,0) threw exception "
-          << JS_ValueToString(ctx, exc) << Debug::flush;
+          << dumpJsVal(ctx, exc) << Debug::flush;
      } else {
        Debug::log(Debug::Error) << "Error creating toString tear-off"
            << Debug::flush;
@@ -157,8 +158,10 @@
      Debug::log(Debug::Spam) << "  using global object for this" <<  
Debug::flush;
    } else {
      makeValueRef(jsThis, ctx, thisObj);
-    Debug::log(Debug::Spam) << "  obj=" << JS_ValueToString(ctx, jsThis)
-        << Debug::flush;
+    if (Debug::level(Debug::Spam)) {
+      Debug::log(Debug::Spam) << "  obj=" << dumpJsVal(ctx, jsThis)
+          << Debug::flush;
+    }
    }
    if (!JS_SetElement(ctx, argsRoot.get(), 0, &jsThis)) {
      Debug::log(Debug::Error)
@@ -176,8 +179,10 @@
    scoped_array<jsval> jsargs(new jsval[numArgs]);
    for (int i = 0; i < numArgs; ++i) {
      makeValueRef(jsargs[i], ctx, args[i]);
-    Debug::log(Debug::Spam) << "  arg[" << i << "] = " <<  
JS_ValueToString(ctx,
-        jsargs[i]) << Debug::flush;
+    if (Debug::level(Debug::Spam)) {
+      Debug::log(Debug::Spam) << "  arg[" << i << "] = " << dumpJsVal(ctx,
+          jsargs[i]) << Debug::flush;
+    }
      if (!JS_SetElement(ctx, argsRoot.get(), i + 1, &jsargs[i])) {
        Debug::log(Debug::Error)
            << "FFSessionhandler::invoke - could not set args[" << (i + 1)  
<< "]"
@@ -203,7 +208,7 @@
        makeValue(*returnValue, ctx, rval);
        Debug::log(Debug::Debugging) << "FFSessionHandler::invoke "
            << thisObj.toString() << "::" << methodName << " threw  
exception "
-          << JS_ValueToString(ctx, rval) << Debug::flush;
+          << dumpJsVal(ctx, rval) << Debug::flush;
      } else {
        Debug::log(Debug::Error) << "Non-exception failure invoking "
            << methodName << Debug::flush;
@@ -239,6 +244,7 @@
      retVal.setBoolean(JSVAL_TO_BOOLEAN(value));
    } else if (JSVAL_IS_STRING(value)) {
      JSString* str = JSVAL_TO_STRING(value);
+    // TODO(jat): is this Unicode safe?
      retVal.setString(JS_GetStringBytes(str), JS_GetStringLength(str));
    } else if (JSVAL_IS_DOUBLE(value)) {
      retVal.setDouble(*JSVAL_TO_DOUBLE(value));
@@ -249,6 +255,7 @@
      } else if (JS_GET_CLASS(ctx, obj) == stringObjectClass) {
        // JS String wrapper object, treat as a string primitive
        JSString* str = JS_ValueToString(ctx, value);
+      // TODO(jat): is this Unicode safe?
        retVal.setString(JS_GetStringBytes(str), JS_GetStringLength(str));
      } else {
        // It's a plain-old JavaScript Object
@@ -306,7 +313,8 @@
        break;
      case Value::STRING:
        {
-        JSString* str = JS_NewStringCopyN(ctx, value.getString().c_str(),  
value.getString().length());
+        std::string strVal = value.getString();
+        JSString* str = JS_NewStringCopyN(ctx, strVal.c_str(),  
strVal.length());
          retVal = STRING_TO_JSVAL(str);
        }
        break;

Modified: changes/jat/oophm-branch/plugins/xpcom/FFSessionHandler.h
==============================================================================
--- changes/jat/oophm-branch/plugins/xpcom/FFSessionHandler.h   (original)
+++ changes/jat/oophm-branch/plugins/xpcom/FFSessionHandler.h   Fri Sep 26  
09:21:37 2008
@@ -58,10 +58,10 @@
    std::map<int, JSObject*> javaObjectsById;
    std::set<int> javaObjectsToFree;

-  JSClass* stringObjectClass;
-
    // Array of JSObjects exposed to the host
    JSObject* jsObjectsById;
+  JSClass* stringObjectClass;
+
    std::map<JSObject*, int> jsIdsByObject;
  //
  //  /*

Modified: changes/jat/oophm-branch/plugins/xpcom/JavaObject.cpp
==============================================================================
--- changes/jat/oophm-branch/plugins/xpcom/JavaObject.cpp       (original)
+++ changes/jat/oophm-branch/plugins/xpcom/JavaObject.cpp       Fri Sep 26  
09:21:37 2008
@@ -19,6 +19,7 @@
  #include "SessionData.h"
  #include "ServerMethods.h"
  #include "Debug.h"
+#include "XpcomDebug.h"
  #include "HostChannel.h"
  #include "InvokeMessage.h"
  #include "ReturnMessage.h"
@@ -50,6 +51,22 @@

  int JavaObject::getObjectId(JSContext* ctx, JSObject* obj) {
    jsval val;
+  JSClass* jsClass = JS_GET_CLASS(ctx, obj);
+#if 1
+  if (jsClass != &JavaObjectClass) {
+    Debug::log(Debug::Error)
+        << "JavaObject::getObjectId called on non-JavaObject: " <<  
jsClass->name
+        << Debug::flush;
+    return -1;
+  }
+  if (JSCLASS_RESERVED_SLOTS(jsClass) < 1) {
+    Debug::log(Debug::Error)
+        << "JavaObject::getObjectId -- " << static_cast<void*>(obj)
+        << " has only " << (JSCLASS_RESERVED_SLOTS(jsClass))
+        << " reserved slots, no objectId present" << Debug::flush;
+    return -1;
+  }
+#endif
    if (!JS_GetReservedSlot(ctx, obj, 0, &val)) {
      Debug::log(Debug::Error) << "Error getting reserved slot" <<  
Debug::flush;
      return -1;
@@ -59,7 +76,7 @@
  }

  SessionData* JavaObject::getSessionData(JSContext* ctx, JSObject* obj) {
-  void* data = JS_GetPrivate(ctx, obj);
+  void* data = JS_GetInstancePrivate(ctx, obj, &JavaObjectClass, NULL);
    return static_cast<SessionData*>(data);
  }

@@ -115,12 +132,12 @@
      }
  #endif
      Debug::log(Debug::Error) << "Getting unexpected string property "
-        << JS_ValueToString(ctx, id) << Debug::flush;
+        << dumpJsVal(ctx, id) << Debug::flush;
      return JS_FALSE;
    }
    if (!JSVAL_IS_INT(id)) {
      Debug::log(Debug::Error) << "Getting non-int/non-string property "
-          << JS_ValueToString(ctx, id) << Debug::flush;
+          << dumpJsVal(ctx, id) << Debug::flush;
      return JS_FALSE;
    }
    int dispId = JSVAL_TO_INT(id);
@@ -272,7 +289,7 @@
      if (i > 2) {
        dbg << ", ";
      }
-    dbg << JS_ValueToString(ctx, argv[i]);
+    dbg << dumpJsVal(ctx, argv[i]);
    }
    dbg << ")" << Debug::flush;

@@ -318,7 +335,7 @@
    scoped_array<Value> args(new Value[numArgs]);
    for (int i = 0; i < numArgs; ++i) {
      // Debug::log(Debug::Spam) << "making argv[" << i << + "]" <<  
Debug::flush;
-    // Debug::log(Debug::Spam) << "   " << JS_ValueToString(ctx,  
jsargs[i]) << Debug::flush;
+    // Debug::log(Debug::Spam) << "   " << dumpJsVal(ctx, jsargs[i]) <<  
Debug::flush;
      data->makeValue(args[i], ctx, jsargs[i]);
    }
    if (!InvokeMessage::send(*channel, javaThis, dispId, numArgs,  
args.get())) {

Modified: changes/jat/oophm-branch/plugins/xpcom/Makefile
==============================================================================
--- changes/jat/oophm-branch/plugins/xpcom/Makefile     (original)
+++ changes/jat/oophm-branch/plugins/xpcom/Makefile     Fri Sep 26 09:21:37 2008
@@ -1,8 +1,8 @@
  XUL_SDK_PATH=../../../xulrunner-sdk
  #GECKO_SDK_PATH=../../../gecko-sdk-1.8
  GECKO_SDK_PATH=$(XUL_SDK_PATH)/sdk
-#GECKO_BINSDK_PATH=$(GECKO_SDK_PATH)
-GECKO_BINSDK_PATH=/usr/lib/xulrunner-devel-1.9.0.1/
+GECKO_BINSDK_PATH=$(GECKO_SDK_PATH)
+#GECKO_BINSDK_PATH=/usr/lib/xulrunner-devel-1.9.0.1/
  INC=-I. -I../common -I$(GECKO_SDK_PATH)/include  
-I$(XUL_SDK_PATH)/include/caps -I$(XUL_SDK_PATH)/include/dom  
-I$(XUL_SDK_PATH)/include/js -I$(XUL_SDK_PATH)/include/necko  
-I$(XUL_SDK_PATH)/include/string -I$(XUL_SDK_PATH)/include/widget  
-I$(XUL_SDK_PATH)/include/xpcom -I$(XUL_SDK_PATH)/include/xpconnect  
-I$(XUL_SDK_PATH)/include
  RUN_PATH_FLAG=-rpath-link
  LD_FLAGS=-L$(GECKO_BINSDK_PATH)/lib -L$(GECKO_BINSDK_PATH)/bin  
-Wl,$(RUN_PATH_FLAG),$(GECKO_BINSDK_PATH)/bin -lxpcomglue_s -lxpcom -lnspr4  
-lmozjs
@@ -19,9 +19,9 @@

  ALL: oophm-xpcom.xpi

-OBJS=  ExternalWrapper.o ModuleOOPHM.o FFSessionHandler.o JavaObject.o  
JSRunner.o
+OBJS=  ExternalWrapper.o ModuleOOPHM.o FFSessionHandler.o JavaObject.o  
JSRunner.o XpcomDebug.o

-SRCS=  ExternalWrapper.cpp ModuleOOPHM.cpp FFSessionHandler.cpp  
JavaObject.cpp JSRunner.cpp
+SRCS=  ExternalWrapper.cpp ModuleOOPHM.cpp FFSessionHandler.cpp  
JavaObject.cpp JSRunner.cpp XpcomDebug.cpp

  oophm-xpcom.xpi: arch extension $(INSTDIR)/liboophm.so \
    extension/components/IOOPHM.xpt extension/install.rdf

Added: changes/jat/oophm-branch/plugins/xpcom/XpcomDebug.cpp
==============================================================================
--- (empty file)
+++ changes/jat/oophm-branch/plugins/xpcom/XpcomDebug.cpp       Fri Sep 26  
09:21:37 2008
@@ -0,0 +1,67 @@
+/*
+ * Copyright 2008 Google Inc.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License"); you may  
not
+ * use this file except in compliance with the License. You may obtain a  
copy of
+ * the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,  
WITHOUT
+ * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the
+ * License for the specific language governing permissions and limitations  
under
+ * the License.
+ */
+
+#include <cstring>
+
+#include "XpcomDebug.h"
+#include "JavaObject.h"
+
+std::string dumpJsVal(JSContext* ctx, jsval v) {
+  char buf[30];
+  if (v == JSVAL_VOID) {
+    strcpy(buf, "undef");
+  } else if (v == JSVAL_NULL) {
+    strcpy(buf, "null");
+  } else {
+    switch (JSVAL_TAG(v)) {
+      case JSVAL_OBJECT:
+      {
+        JSObject* obj = JSVAL_TO_OBJECT(v);
+        if (JavaObject::isJavaObject(ctx, obj)) {
+          int oid = JavaObject::getObjectId(ctx, obj);
+          snprintf(buf, sizeof(buf), "JavaObj(%d)", oid);
+        } else {
+          JSClass* jsClass = JS_GET_CLASS(ctx, obj);
+          const char* name = jsClass->name ? jsClass->name : "<null>";
+          snprintf(buf, sizeof(buf), "Object(%.20s @ %p)", name, obj);
+        }
+        break;
+      }
+      case JSVAL_INT:
+        snprintf(buf, sizeof(buf), "int(%d)", JSVAL_TO_INT(v));
+        break;
+      case JSVAL_DOUBLE:
+        snprintf(buf, sizeof(buf), "double(%lf)", *JSVAL_TO_DOUBLE(v));
+        break;
+      case JSVAL_STRING:
+      {
+        JSString* str = JSVAL_TO_STRING(v);
+        int len = JS_GetStringLength(str);
+        if (len > 20) {
+          len = 20;
+        }
+        snprintf(buf, sizeof(buf), "string(%.*s)", len,  
JS_GetStringBytes(str));
+        break;
+      }
+      case JSVAL_BOOLEAN:
+        snprintf(buf, sizeof(buf), "bool(%s)", JSVAL_TO_BOOLEAN(v) ? "true"
+            : " false");
+        break;
+    }
+  }
+  buf[sizeof(buf) - 1] = 0;
+  return std::string(buf);
+}

Added: changes/jat/oophm-branch/plugins/xpcom/XpcomDebug.h
==============================================================================
--- (empty file)
+++ changes/jat/oophm-branch/plugins/xpcom/XpcomDebug.h Fri Sep 26 09:21:37  
2008
@@ -0,0 +1,26 @@
+#ifndef _H_XpcomDebug
+#define _H_XpcomDebug
+/*
+ * Copyright 2008 Google Inc.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License"); you may  
not
+ * use this file except in compliance with the License. You may obtain a  
copy of
+ * the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,  
WITHOUT
+ * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the
+ * License for the specific language governing permissions and limitations  
under
+ * the License.
+ */
+
+#include <string>
+
+#include "mozincludes.h"
+#include "jsapi.h"
+
+std::string dumpJsVal(JSContext* ctx, jsval v);
+
+#endif

--~--~---------~--~----~------------~-------~--~----~
http://groups.google.com/group/Google-Web-Toolkit-Contributors
-~----------~----~----~----~------~----~------~--~---

Reply via email to