if (!nativeThis) return JS_FALSE;
InstallExecute(JSContext *cx, JSObject *obj, uintN argc, jsval *argv, jsval *rval){  nsInstall *nativeThis =    (nsInstall*)JS_GetInstancePrivate(cx, obj, &InstallClass, argv);  if (!nativeThis)    return JS_FALSE;  PRInt32 nativeRet;  nsAutoString b0;  nsAutoString b1;  PRBool       blocking = PR_FALSE;  *rval = INT_TO_JSVAL(nsInstall::UNEXPECTED_ERROR);  // If there's no private data, this must be the prototype, so ignore  if (nsnull == nativeThis) {    return JS_TRUE;  }  if(argc >= 3)  {    //  public int Execute ( String jarSourcePath,    //                       String args,    //                       Bool   blocking);    ConvertJSValToStr(b1, cx, argv[1]);    ConvertJSValToBool(&blocking, cx,argv[2]);  }  else if(argc >= 2)  {    if(JSVAL_IS_BOOLEAN(argv[1]))    {      //  public int Execute ( String jarSourcePath,      //                       Bool   blocking);      ConvertJSValToBool(&blocking, cx, argv[1]);    }    else    {      //  public int Execute ( String jarSourcePath,      //                       String args);      ConvertJSValToStr(b1, cx, argv[1]);    }  }  if(argc >= 1)  {    //  public int Execute ( String jarSourcePath);    ConvertJSValToStr(b0, cx, argv[0]);    jsrefcount saveDepth;    saveDepth = JS_SuspendRequest(cx);//Need to suspend use of thread or deadlock occurs    nativeThis->Execute(b0, b1, blocking, &nativeRet);    JS_ResumeRequest(cx, saveDepth);    *rval = INT_TO_JSVAL(nativeRet);  }  else  {    JS_ReportWarning(cx, "Function Execute requires 1 parameter");  }  return JS_TRUE;}