Exemplo n.º 1
0
JSBool SkJSDisplayable::SetProperty(JSContext *cx, JSObject *obj, jsval id, jsval *vp) {
    if (JSVAL_IS_INT(id) == 0)
        return JS_TRUE; 
    SkJSDisplayable *p = (SkJSDisplayable *) JS_GetPrivate(cx, obj);
    SkDisplayable* displayable = p->fDisplayable;
    SkDisplayTypes displayableType = displayable->getType();
    int members;
    const SkMemberInfo* info = SkDisplayType::GetMembers(NULL /* fMaker */, displayableType, &members);
    int idIndex = JSVAL_TO_INT(id);
    SkASSERT(idIndex >= 0 && idIndex < members);
    info = &info[idIndex];
    SkDisplayTypes infoType = info->getType();
    SkScalar scalar = 0;
    S32 s32 = 0;
    SkString string;
    JSString* str;
    jsval value = *vp;
    switch (infoType) {
        case SkType_Boolean:
            s32 = JSVAL_TO_BOOLEAN(value);
            break;
        case SkType_Color:
        case SkType_S32:
            s32 = JSVAL_TO_INT(value);
            break;
        case SkType_Scalar:
            if (JSVAL_IS_INT(value))
                scalar = SkIntToScalar(JSVAL_TO_INT(value));
            else {
                SkASSERT(JSVAL_IS_DOUBLE(value));
#ifdef SK_SCALAR_IS_FLOAT
                scalar = (float) *(double*) JSVAL_TO_DOUBLE(value);
#else
                scalar = (SkFixed)  (*(double*)JSVAL_TO_DOUBLE(value) * 65536.0);
#endif
            }
            break;
        case SkType_String:
            str = JS_ValueToString(cx, value);
            string.set(JS_GetStringBytes(str));
            break;
        default:
            SkASSERT(0); // !!! unimplemented
    }
    if (info->fType == SkType_MemberProperty) {
        switch (infoType) {
            case SkType_Scalar: {
                SkScriptValue scriptValue;
                scriptValue.fType = SkType_Scalar;
                scriptValue.fOperand.fScalar = scalar;
                displayable->setProperty(-1 - (int) info->fOffset, scriptValue);
                } break;
            default:
                SkASSERT(0); // !!! unimplemented
        }
    } else {
        SkASSERT(info->fCount == 1);
        switch (infoType) {
            case SkType_Boolean:
            case SkType_Color:
            case SkType_S32:
                s32 = *(S32*) ((const char*) displayable + info->fOffset);
                break;
            case SkType_String:
                info->setString(displayable, &string);
                break;
            case SkType_Scalar:
                SkOperand operand;
                operand.fScalar = scalar;
                info->setValue(displayable, &operand, 1);
                break;
            default:
                SkASSERT(0); // !!! unimplemented
        }
    }
    return JS_TRUE;
}
Exemplo n.º 2
0
JSBool
js_Stringify(JSContext *cx, jsval *vp, JSObject *replacer,
             JSONWriteCallback callback, void *data, uint32 depth)
{
    if (depth > JSON_MAX_DEPTH)
        return JS_FALSE; /* encoding error */
 
    JSBool ok = JS_TRUE;
    JSObject *obj = JSVAL_TO_OBJECT(*vp);
    JSBool isArray = JS_IsArrayObject(cx, obj);
    jschar output = jschar(isArray ? '[' : '{');
    if (!callback(&output, 1, data))
        return JS_FALSE;
    
    JSObject *iterObj = NULL;
    jsint i = 0;
    jsuint length = 0;
 
    if (isArray) {
        if (!JS_GetArrayLength(cx, obj, &length))
            return JS_FALSE;
    } else {
        if (!js_ValueToIterator(cx, JSITER_ENUMERATE, vp))
            return JS_FALSE;
        iterObj = JSVAL_TO_OBJECT(*vp);
    }
 
    jsval outputValue = JSVAL_VOID;
    JSAutoTempValueRooter tvr(cx, 1, &outputValue);
 
    jsval key;
    JSBool memberWritten = JS_FALSE;
    do {
        outputValue = JSVAL_VOID;
 
        if (isArray) {
            if ((jsuint)i >= length)
                break;
            ok = JS_GetElement(cx, obj, i++, &outputValue);
        } else {
            ok = js_CallIteratorNext(cx, iterObj, &key);
            if (!ok)
                break;
            if (key == JSVAL_HOLE)
                break;
 
            JSString *ks;
            if (JSVAL_IS_STRING(key)) {
                ks = JSVAL_TO_STRING(key);
            } else {
                ks = JS_ValueToString(cx, key);
                if (!ks) {
                    ok = JS_FALSE;
                    break;
                }
            }
 
            ok = JS_GetUCProperty(cx, obj, JS_GetStringChars(ks),
                                  JS_GetStringLength(ks), &outputValue);
        }
 
        if (!ok)
            break;
 
        // if this is an array, holes are transmitted as null
        if (isArray && outputValue == JSVAL_VOID) {
            outputValue = JSVAL_NULL;
        } else if (JSVAL_IS_OBJECT(outputValue)) {
            ok = js_TryJSON(cx, &outputValue);
            if (!ok)
                break;
        }
 
        // elide undefined values
        if (outputValue == JSVAL_VOID)
            continue;
 
        // output a comma unless this is the first member to write
        if (memberWritten) {
            output = jschar(',');
            ok = callback(&output, 1, data);
        if (!ok)
                break;
        }
        memberWritten = JS_TRUE;
 
        JSType type = JS_TypeOfValue(cx, outputValue);
 
        // Can't encode these types, so drop them
        if (type == JSTYPE_FUNCTION || type == JSTYPE_XML)
            break;
 
        // Be careful below, this string is weakly rooted.
        JSString *s;
 
        // If this isn't an array, we need to output a key
        if (!isArray) {
            s = JS_ValueToString(cx, key);
            if (!s) {
                ok = JS_FALSE;
                break;
            }
 
            ok = write_string(cx, callback, data, JS_GetStringChars(s), JS_GetStringLength(s));
            if (!ok)
                break;
 
            output = jschar(':');
            ok = callback(&output, 1, data);
            if (!ok)
                break;
        }
 
        if (!JSVAL_IS_PRIMITIVE(outputValue)) {
            // recurse
          ok = js_Stringify(cx, &outputValue, replacer, callback, data, depth + 1);
        } else {
            JSString *outputString;
            s = JS_ValueToString(cx, outputValue);
            if (!s) {
                ok = JS_FALSE;
                break;
            }
 
            if (type == JSTYPE_STRING) {
                ok = write_string(cx, callback, data, JS_GetStringChars(s), JS_GetStringLength(s));
                if (!ok)
                    break;
                
                continue;
            }
 
            if (type == JSTYPE_NUMBER) {
                if (JSVAL_IS_DOUBLE(outputValue)) {
                    jsdouble d = *JSVAL_TO_DOUBLE(outputValue);
                    if (!JSDOUBLE_IS_FINITE(d))
                        outputString = JS_NewStringCopyN(cx, "null", 4);
                    else
                        outputString = s;
                } else {
                    outputString = s;
                }
            } else if (type == JSTYPE_BOOLEAN) {
                outputString = s;
            } else if (JSVAL_IS_NULL(outputValue)) {
                outputString = JS_NewStringCopyN(cx, "null", 4);
            } else {
                ok = JS_FALSE; // encoding error
                break;
            }
 
            ok = callback(JS_GetStringChars(outputString), JS_GetStringLength(outputString), data);
        }
    } while (ok);
 
    if (iterObj) {
        // Always close the iterator, but make sure not to stomp on OK
        js_CloseIteratorState(cx, iterObj);
        // encoding error or propagate? FIXME: Bug 408838.
    }
 
    if (!ok) {
        JS_ReportError(cx, "Error during JSON encoding.");
        return JS_FALSE;
    }
 
    output = jschar(isArray ? ']' : '}');
    ok = callback(&output, 1, data);
 
    return ok;
}
JSBool ADM_JSAvidemux::JSSetProperty(JSContext *cx, JSObject *obj, jsval id, jsval *vp)
{
	if (JSVAL_IS_INT(id)) 
	{
		ADM_JSAvidemux *priv = (ADM_JSAvidemux *) JS_GetPrivate(cx, obj);
		switch(JSVAL_TO_INT(id))
		{
			case markerA_prop:
				if(JSVAL_IS_INT(*vp) == false)
					break;
				{
					int f=JSVAL_TO_INT(*vp);
					if (!avifileinfo)
					{
						return JS_FALSE;
					} 
					if(f==-1)
						f=avifileinfo->nb_frames-1;
					if(f<0 || f>avifileinfo->nb_frames-1)
						return JS_FALSE;
					frameStart=f;
				}
				break;
			case markerB_prop:
				if(JSVAL_IS_INT(*vp) == false)
					break;
				{
					int f=JSVAL_TO_INT(*vp);
					if (!avifileinfo)
					{
						return JS_FALSE;
					} 
					if(f==-1)
						f=avifileinfo->nb_frames-1;
					if(f<0 || f>avifileinfo->nb_frames-1)
						return JS_FALSE;
					frameEnd=f;
				}
				break;
			case audio_prop:
				return JS_FALSE;
				break;
			case video_prop:
				return JS_FALSE;
				break;
			case container_prop:
				if(JSVAL_IS_STRING(*vp) == false)
					break;
				{
					priv->getObject()->m_pContainer = JSVAL_TO_STRING(*vp);
					char *pContainer = JS_GetStringBytes(priv->getObject()->m_pContainer);
					aprintf("Setting container format \"%s\"\n",pContainer);
                                        if(A_setContainer(pContainer))
                                                return JS_TRUE;
                                        return JS_FALSE;
					return JS_FALSE;
				}
				break;
			case currentframe_prop:
				if(JSVAL_IS_INT(*vp) == false)
					break;
				{
					int frameno;
					if (!avifileinfo)
						return JS_FALSE;
					
					frameno = JSVAL_TO_INT(*vp);
					if( frameno<0)
					{
						aviInfo info;
						video_body->getVideoInfo(&info);
						frameno=-frameno;
						if(frameno>info.nb_frames)
							return JS_FALSE;
						
						frameno = info.nb_frames-frameno;
					}
                                        enterLock();
					if(GUI_GoToFrame( frameno ))
					{
						leaveLock();
						return JS_TRUE;
					}
					leaveLock();
					return JS_FALSE;
				}
				break;
			case fps_prop:
				if(JSVAL_IS_DOUBLE(*vp) == false)
					break;
				{
					priv->getObject()->m_dFPS = *JSVAL_TO_DOUBLE(*vp);
					aviInfo info;

					if (avifileinfo)
					{
						video_body->getVideoInfo(&info);				
						info.fps1000 = (uint32_t)floor(priv->getObject()->m_dFPS*1000.f);
						video_body->updateVideoInfo (&info);
						video_body->getVideoInfo (avifileinfo);
						return JS_TRUE;
					} else 
					{
						return JS_FALSE;
					}
				}
				break;
		}
	}
	return JS_TRUE;
}
Exemplo n.º 4
0
JSBool
jsd_IsValueDouble(JSDContext* jsdc, JSDValue* jsdval)
{
    return JSVAL_IS_DOUBLE(jsdval->val);
}
Exemplo n.º 5
0
nsresult
Key::EncodeJSValInternal(JSContext* aCx, const jsval aVal,
                         uint8_t aTypeOffset, uint16_t aRecursionDepth)
{
  NS_ENSURE_TRUE(aRecursionDepth < MaxRecursionDepth, NS_ERROR_DOM_INDEXEDDB_DATA_ERR);

  MOZ_STATIC_ASSERT(eMaxType * MaxArrayCollapse < 256,
                    "Unable to encode jsvals.");

  if (JSVAL_IS_STRING(aVal)) {
    nsDependentJSString str;
    if (!str.init(aCx, aVal)) {
      return NS_ERROR_DOM_INDEXEDDB_UNKNOWN_ERR;
    }
    EncodeString(str, aTypeOffset);
    return NS_OK;
  }

  if (JSVAL_IS_INT(aVal)) {
    EncodeNumber((double)JSVAL_TO_INT(aVal), eFloat + aTypeOffset);
    return NS_OK;
  }

  if (JSVAL_IS_DOUBLE(aVal)) {
    double d = JSVAL_TO_DOUBLE(aVal);
    if (MOZ_DOUBLE_IS_NaN(d)) {
      return NS_ERROR_DOM_INDEXEDDB_DATA_ERR;
    }
    EncodeNumber(d, eFloat + aTypeOffset);
    return NS_OK;
  }

  if (!JSVAL_IS_PRIMITIVE(aVal)) {
    JSObject* obj = JSVAL_TO_OBJECT(aVal);
    if (JS_IsArrayObject(aCx, obj)) {
      aTypeOffset += eMaxType;

      if (aTypeOffset == eMaxType * MaxArrayCollapse) {
        mBuffer.Append(aTypeOffset);
        aTypeOffset = 0;
      }
      NS_ASSERTION((aTypeOffset % eMaxType) == 0 &&
                   aTypeOffset < (eMaxType * MaxArrayCollapse),
                   "Wrong typeoffset");

      uint32_t length;
      if (!JS_GetArrayLength(aCx, obj, &length)) {
        return NS_ERROR_DOM_INDEXEDDB_UNKNOWN_ERR;
      }

      for (uint32_t index = 0; index < length; index++) {
        jsval val;
        if (!JS_GetElement(aCx, obj, index, &val)) {
          return NS_ERROR_DOM_INDEXEDDB_UNKNOWN_ERR;
        }

        nsresult rv = EncodeJSValInternal(aCx, val, aTypeOffset,
                                          aRecursionDepth + 1);
        if (NS_FAILED(rv)) {
          return rv;
        }

        aTypeOffset = 0;
      }

      mBuffer.Append(eTerminator + aTypeOffset);

      return NS_OK;
    }

    if (JS_ObjectIsDate(aCx, obj)) {
      if (!js_DateIsValid(obj))  {
        return NS_ERROR_DOM_INDEXEDDB_DATA_ERR;
      }
      EncodeNumber(js_DateGetMsecSinceEpoch(obj), eDate + aTypeOffset);
      return NS_OK;
    }
  }

  return NS_ERROR_DOM_INDEXEDDB_DATA_ERR;
}
Exemplo n.º 6
0
int
main(int argc, char **argv)
{
   FILE                 *fl = NULL;
   FILE                 *fl_out = NULL;
   struct passwd        *pw = NULL;
   struct group         *grp = NULL;
   char                 *chroot = NULL;
   char                 *directory;
   const char           *s;
   Elixir_Runtime       *er;
   Elixir_Script        *es;
   JSObject             *env;
   JSObject             *elx;
   void			*stack = NULL;
   char                **array = NULL;
   jsval                 jsret;
   int                   size;
   int                   i;
   int32_t               ret = 0;

   srandom(time(0));

#ifdef DEBUG
   elixir_debug_print_switch(ELIXIR_DEBUG_STDERR, NULL);
#else
   elixir_debug_print_switch(ELIXIR_DEBUG_NONE, NULL);
#endif
   s = getenv("ELIXIR_DEBUG");
   if (s)
     {
        if (!strcasecmp(s, "stderr"))
          elixir_debug_print_switch(ELIXIR_DEBUG_STDERR, NULL);
        else if (!strcasecmp(s, "stdout"))
          elixir_debug_print_switch(ELIXIR_DEBUG_STDOUT, NULL);
        else if (!strcasecmp(s, "console"))
          elixir_debug_print_switch(ELIXIR_DEBUG_CONSOLE, NULL);
        else if (!strcasecmp(s, "syslog"))
          elixir_debug_print_switch(ELIXIR_DEBUG_SYSLOG, NULL);
        else if ((!strcasecmp(s, "none")) || (!strcasecmp(s, "null")))
          elixir_debug_print_switch(ELIXIR_DEBUG_NONE, NULL);
     }

   elixir_id_init();
   elixir_class_init();
   elixir_file_init();
   elixir_modules_init();
   er = elixir_init();
   if (!er)
     return 128;

   elixir_loader_init(3, loaders);

   elixir_security_init(1, security);

   if (argc <= 1)
     return 129;

   while (1)
     {
        int             option_index = 0;
        int             c;

        c = getopt_long(argc, argv, "mc:t:l:hu:d:p:o:rs:e:g:i:a:", lopt, &option_index);
        if (c == -1)
          break ;

        /* Long options. */
        if (c == 0)
          {
             switch (option_index)
               {
                case 0: c = 'c'; break;
                case 1: c = 't'; break;
                case 2: c = 'l'; break;
                case 3: c = 'm'; break;
                case 4: c = 'h'; break;
                case 5: c = 'u'; break;
                case 6: c = 'd'; break;
                case 7: c = 'p'; break;
                case 8: c = 'o'; break;
		case 9: c = 'r'; break;
		case 10: c = 's'; break;
		case 11: c = 'e'; break;
		case 12: c = 'g'; break;
		case 13: c = 'i'; break;
		case 14: c = 'a'; break;
               }
          }

        switch (c)
          {
           case 0:
	   case 'e':
	   case 's': /* Authorized security modules. */
	      array = malloc(sizeof (char*));
	      array[0] = optarg;
	      for (i = 0, size = 1; optarg[i] != '\0'; ++i)
		{
		   if (optarg[i] == ',')
		     {
			array[size++] = optarg + i + 1;
			optarg[i] = '\0';

			array = realloc(array, sizeof (char*) * size);
		     }
		}
	      if (c == 's') elixir_security_init(size, (const char **)array);
	      else elixir_loader_init(size, (const char **)array);
	      free(array);
	      break;
           case 'm': /* Activate monitoring. */
              break;
           case 'c': /* Call chroot. */
              chroot = strdupa(optarg);
              break;
           case 't': /* Call virtual chroot. */
              elixir_file_virtual_chroot_set(optarg);
              break;
           case 'l': /* Log file. */
              if (fl)
                fclose(fl);
              fl = fopen(optarg, "a");
              if (!fl)
                {
                   fprintf(stderr, "Unable to open `%s'.\n\n", optarg);
                   elixir_help();
                   exit(0);
                }

              elixir_debug_print_switch(ELIXIR_DEBUG_FILE, fl);
              break;
           case 'u':
              pw = getpwnam(optarg);
              if (!pw)
                {
                   fprintf(stderr, "Unable to get user `%s' information.\n\n", optarg);
                   elixir_help();
                   exit(0);
                }
              break;
	   case 'g':
	      grp = getgrnam(optarg);
	      if (!grp)
		{
		   fprintf(stderr, "Unable to get group `%s' information.\n\n", optarg);
		   elixir_help();
		   exit(0);
		}
	      break;
           case 'd':
              if (chdir(optarg))
	        {
		   fprintf(stderr, "Unable to chdir to %s.\n\n", optarg);
		   elixir_help();
		   exit(0);
		};
              break;
           case 'p':
              if (strlen(optarg) != 1)
                {
                   fprintf(stderr, "`%s' is not a valid policy.\n\n", optarg);
                   elixir_help();
                   exit(0);
                }

              switch (*optarg)
                {
                 case '0': elixir_file_virtual_chroot_directive_set(ELIXIR_VCHROOT_DATA_ONLY); break;
                 case '1': elixir_file_virtual_chroot_directive_set(ELIXIR_VCHROOT_NOEXEC); break;
                 case '2': elixir_file_virtual_chroot_directive_set(ELIXIR_VCHROOT_ALL); break;
                 default:
                    fprintf(stderr, "`%s' is not a valid policy.\n\n", optarg);
                    elixir_help();
                    exit(0);
                }

              break;
           case 'o':
              if (fl_out)
                fclose(fl_out);
              fl_out = fopen(optarg, "w");
              break;
	   case 'r':
	      stack = alloca(random() & 0xFF);
	      break;
	   case 'i':
	     {
		FILE *fid;

		fid = fopen(optarg, "w");
		if (fid)
		  {
		     pid_t pid;

		     pid = getpid();
		     fprintf(fid, "%i\n", pid);
		     fclose(fid);
		  }

		break;
	     }
	   case 'a':
	      tracker = fopen(optarg, "w");
	      break;
           case 'h': /* Help. */
           case '?':
           default:
              elixir_help();
              exit(0);
              break;
          }
     }

   if (optind >= argc)
     return 129;

   if (chroot)
     {
        if (!elixir_file_chroot_set(chroot))
          return 133;
     }

   if (pw)
     {
        gid_t   newgid;
        uid_t   newuid;
        gid_t   oldgid;
        uid_t   olduid;

        oldgid = getegid();
        olduid = geteuid();

        newgid = grp ? grp->gr_gid : pw->pw_gid;
        newuid = pw->pw_uid;

        if (!olduid) setgroups(1, &newgid);

#if !defined(linux)
        setegid(newgid);
        if (setgid(newgid) == -1) abort();
#else
        if (setregid(newgid, newgid) == -1) abort();
#endif

#if !defined(linux)
        seteuid(newuid);
        if (setuid(newuid) == -1) abort();
#else
        if (setreuid(newuid, newuid) == -1) abort();
#endif
     }
   else
     {
	if (grp)
	  {
#if !defined(linux)
	     setegid(grp->gr_gid);
	     if (setgid(grp->gr_gid) == -1) abort();
#else
	     if (setregid(grp->gr_gid, grp->gr_gid) == -1) abort();
#endif
	  }
     }

   directory = dirname(strdupa(argv[optind]));
   elixir_debug_print("chdir to `%s`.", directory);
   chdir(directory);

   es = elixir_script_file(er, argc - optind, (const char**) argv + optind);
   elixir_script_set_out(es, fl_out ? fl_out : stdout);

   elixir_lock_cx(er->cx);

   elx = elixir_object_get_object(er->cx, er->root, "elx");
   if (elx)
     if (!elixir_object_register(er->cx, &elx, NULL))
       return 130;

   env = elixir_object_create(er, elx, "env", elixir_env, NULL);
   if (!env)
     return 131;

   if (!elixir_script_run(es, &jsret))
     return 132;

   /* Useless I believe. */
   if (JSVAL_IS_BOOLEAN(jsret)
       || JSVAL_IS_INT(jsret)
       || JSVAL_IS_DOUBLE(jsret)
       || JSVAL_IS_STRING(jsret))
     if (JS_ValueToInt32(es->er->cx, jsret, &ret) != JS_TRUE)
       ret = 0;

   if (elx)
     elixir_object_unregister(er->cx, &elx);

   elixir_unlock_cx(er->cx);

   elixir_script_free(es);
   elixir_shutdown(er);
   elixir_file_shutdown();
   elixir_modules_shutdown();
   elixir_class_shutdown();
   elixir_id_shutdown();

   if (stack) return 1;

   return 0;
}
Exemplo n.º 7
0
nsresult
Key::EncodeJSVal(JSContext* aCx, const jsval aVal, PRUint8 aTypeOffset)
{
  PR_STATIC_ASSERT(eMaxType * MaxArrayCollapse < 256);

  if (JSVAL_IS_STRING(aVal)) {
    nsDependentJSString str;
    if (!str.init(aCx, aVal)) {
      return NS_ERROR_OUT_OF_MEMORY;
    }
    EncodeString(str, aTypeOffset);
    return NS_OK;
  }

  if (JSVAL_IS_INT(aVal)) {
    EncodeNumber((double)JSVAL_TO_INT(aVal), eFloat + aTypeOffset);
    return NS_OK;
  }

  if (JSVAL_IS_DOUBLE(aVal)) {
    double d = JSVAL_TO_DOUBLE(aVal);
    if (DOUBLE_IS_NaN(d)) {
      return NS_ERROR_DOM_INDEXEDDB_DATA_ERR;
    }
    EncodeNumber(d, eFloat + aTypeOffset);
    return NS_OK;
  }

  if (!JSVAL_IS_PRIMITIVE(aVal)) {
    JSObject* obj = JSVAL_TO_OBJECT(aVal);
    if (JS_IsArrayObject(aCx, obj)) {
      aTypeOffset += eMaxType;

      if (aTypeOffset == eMaxType * MaxArrayCollapse) {
        mBuffer.Append(aTypeOffset);
        aTypeOffset = 0;
      }
      NS_ASSERTION((aTypeOffset % eMaxType) == 0 &&
                   aTypeOffset < (eMaxType * MaxArrayCollapse),
                   "Wrong typeoffset");

      jsuint length;
      if (!JS_GetArrayLength(aCx, obj, &length)) {
        return NS_ERROR_DOM_INDEXEDDB_UNKNOWN_ERR;
      }

      for (jsuint index = 0; index < length; index++) {
        jsval val;
        if (!JS_GetElement(aCx, obj, index, &val)) {
          return NS_ERROR_DOM_INDEXEDDB_UNKNOWN_ERR;
        }

        nsresult rv = EncodeJSVal(aCx, val, aTypeOffset);
        NS_ENSURE_SUCCESS(rv, rv);

        aTypeOffset = 0;
      }

      mBuffer.Append(eTerminator + aTypeOffset);

      return NS_OK;
    }

    if (JS_ObjectIsDate(aCx, obj)) {
      EncodeNumber(js_DateGetMsecSinceEpoch(aCx, obj), eDate + aTypeOffset);
      return NS_OK;
    }
  }

  return NS_ERROR_DOM_INDEXEDDB_DATA_ERR;
}
Exemplo n.º 8
0
void
js_prop_set_from_jsval(JSContext *cx, prop_t *p, jsval value)
{
  JSBool b;
  if(JSVAL_IS_INT(value)) {
    prop_set_int(p, JSVAL_TO_INT(value));
  } else if(JSVAL_IS_BOOLEAN(value)) {
    prop_set_int(p, JSVAL_TO_BOOLEAN(value));
  } else if(JSVAL_IS_NULL(value) || JSVAL_IS_VOID(value)) {
    prop_set_void(p);
  } else if(JSVAL_IS_DOUBLE(value)) {
    double d;
    if(JS_ValueToNumber(cx, value, &d))
      prop_set_float(p, d);
  } else if(JS_HasInstance(cx, RichText, value, &b) && b) {
    JSObject *o = JSVAL_TO_OBJECT(value);
    jsval v2;

    if(!JS_EnterLocalRootScope(cx))
      return;

    if(!JS_GetProperty(cx, o, "text", &v2)) {
      JS_LeaveLocalRootScope(cx);
      return;
    }

    prop_set_string_ex(p, NULL, JS_GetStringBytes(JS_ValueToString(cx, v2)),
		       PROP_STR_RICH);
    JS_LeaveLocalRootScope(cx);
  } else if(JS_HasInstance(cx, Link, value, &b) && b) {
    JSObject *o = JSVAL_TO_OBJECT(value);
    jsval v1;
    jsval v2;

    if(!JS_EnterLocalRootScope(cx))
      return;

    if(!JS_GetProperty(cx, o, "title", &v1)) {
      JS_LeaveLocalRootScope(cx);
      return;
    }
    if(!JS_GetProperty(cx, o, "url", &v2)) {
      JS_LeaveLocalRootScope(cx);
      return;
    }

    prop_set_link(p,
		  JS_GetStringBytes(JS_ValueToString(cx, v1)),
		  JS_GetStringBytes(JS_ValueToString(cx, v2)));
    JS_LeaveLocalRootScope(cx);
  } else if(JSVAL_IS_STRING(value)) {
    js_prop_from_str(cx, p, value);
  } else if(JSVAL_IS_OBJECT(value)) {
    JSObject *obj = JSVAL_TO_OBJECT(value);
    JSClass *c = JS_GetClass(cx, obj);

    if(!strcmp(c->name, "XML"))   // Treat some classes special
      js_prop_from_str(cx, p, value);
    else
      js_prop_from_object(cx, obj, p);
  } else {
    prop_set_void(p);
  }
}
Exemplo n.º 9
0
/* void setScalarArgument (in uint32_t number, in jsval argument); */
NS_IMETHODIMP dpoCKernel::SetScalarArgument(uint32_t number, const jsval & argument, 
	const jsval & isInteger, const jsval & highPrecision)
{
	cl_int err_code;
	bool isIntegerB;
	bool isHighPrecisionB;

	/* skip internal arguments */
	number = number + DPO_NUMBER_OF_ARTIFICIAL_ARGS;

	if (!JSVAL_IS_BOOLEAN(isInteger)) {
		DEBUG_LOG_STATUS("SetScalarArgument", "illegal isInteger argument.");

		return NS_ERROR_INVALID_ARG;
	}
	isIntegerB = JSVAL_TO_BOOLEAN(isInteger);
	
	if (!JSVAL_IS_BOOLEAN(highPrecision)) {
		DEBUG_LOG_STATUS("SetScalarArgument", "illegal highPrecision argument.");

		return NS_ERROR_INVALID_ARG;
	}
	isHighPrecisionB = JSVAL_TO_BOOLEAN(highPrecision);

	if (!JSVAL_IS_NUMBER(argument)) {
		DEBUG_LOG_STATUS("SetScalarArgument", "illegal number argument.");

		return NS_ERROR_INVALID_ARG;
	}

	if (JSVAL_IS_INT(argument)) {
		int value = JSVAL_TO_INT(argument);
		DEBUG_LOG_STATUS("SetScalarArgument", "(JSVAL_IS_INT(argument)) isIntegerB: " << isIntegerB  << " isHighPrecisionB " << isHighPrecisionB);

		if (isIntegerB) {
			DEBUG_LOG_STATUS("SetScalarArgument", "(JSVAL_IS_INT(argument)) setting integer argument " << number << " to integer value " << value);
			cl_int intVal = (cl_int) value;
			err_code = clSetKernelArg(kernel, number, sizeof(cl_int), &intVal);
		} else if (isHighPrecisionB) {
			DEBUG_LOG_STATUS("SetScalarArgument", "setting double argument " << number << " to integer value " << value);
			cl_double doubleVal = (cl_double) value;
			err_code = clSetKernelArg(kernel, number, sizeof(cl_double), &doubleVal);
		} else {
			DEBUG_LOG_STATUS("SetScalarArgument", "setting float argument " << number << " to integer value " << value);
			cl_float floatVal = (cl_float) value;
			err_code = clSetKernelArg(kernel, number, sizeof(cl_float), &floatVal);
		}

		if (err_code != CL_SUCCESS) {
			DEBUG_LOG_ERROR("SetScalarArgument", err_code);
			return NS_ERROR_NOT_AVAILABLE;
		}
	} else if (JSVAL_IS_DOUBLE(argument)) {
		double value = JSVAL_TO_DOUBLE(argument);
		DEBUG_LOG_STATUS("SetScalarArgument", "(JSVAL_IS_DOUBLE(argument)) isIntegerB: " << isIntegerB  << " isHighPrecisionB " << isHighPrecisionB);

		if (isIntegerB) {
			DEBUG_LOG_STATUS("SetScalarArgument", "setting int formal argument " << number << " using double value " << value);
			cl_int intVal = (cl_int) value;
			err_code = clSetKernelArg(kernel, number, sizeof(cl_int), &intVal);
		} else if (isHighPrecisionB) {
			DEBUG_LOG_STATUS("SetScalarArgument", "setting double formal argument " << number << " using double value " << value);
			cl_double doubleVal = (cl_double) value;
			err_code = clSetKernelArg(kernel, number, sizeof(cl_double), &doubleVal);
		} else {
			DEBUG_LOG_STATUS("SetScalarArgument", "setting float formal argument " << number << " using double value " << value);
			cl_float floatVal = (cl_float) value;
			err_code = clSetKernelArg(kernel, number, sizeof(cl_float), &floatVal);
		}

		if (err_code != CL_SUCCESS) {
			DEBUG_LOG_ERROR("SetScalarArgument", err_code);
			return NS_ERROR_NOT_AVAILABLE;
		}
	} else {
		DEBUG_LOG_STATUS("SetScalarArgument", "illegal number argument.");

		return NS_ERROR_INVALID_ARG;
	}

	return NS_OK;
}