⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 jsapi.h

📁 一个用于智能手机的多媒体库适合S60 WinCE的跨平台开发库
💻 H
📖 第 1 页 / 共 5 页
字号:
/* -*- Mode: C; tab-width: 8; indent-tabs-mode: nil; c-basic-offset: 4 -*- * * The contents of this file are subject to the Netscape Public * License Version 1.1 (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.mozilla.org/NPL/ * * Software distributed under the License is distributed on an "AS * IS" basis, WITHOUT WARRANTY OF ANY KIND, either express oqr * implied. See the License for the specific language governing * rights and limitations under the License. * * The Original Code is Mozilla Communicator client code, released * March 31, 1998. * * The Initial Developer of the Original Code is Netscape * Communications Corporation.  Portions created by Netscape are * Copyright (C) 1998 Netscape Communications Corporation. All * Rights Reserved. * * Contributor(s): * * Alternatively, the contents of this file may be used under the * terms of the GNU Public License (the "GPL"), in which case the * provisions of the GPL are applicable instead of those above. * If you wish to allow use of your version of this file only * under the terms of the GPL and not to allow others to use your * version of this file under the NPL, indicate your decision by * deleting the provisions above and replace them with the notice * and other provisions required by the GPL.  If you do not delete * the provisions above, a recipient may use your version of this * file under either the NPL or the GPL. */#ifndef jsapi_h___#define jsapi_h___/* * JavaScript API. */#include <stddef.h>#include <stdio.h>#include "jspubtd.h"JS_BEGIN_EXTERN_C/* * Type tags stored in the low bits of a jsval. */#define JSVAL_OBJECT            0x0     /* untagged reference to object */#define JSVAL_INT               0x1     /* tagged 31-bit integer value */#define JSVAL_DOUBLE            0x2     /* tagged reference to double */#define JSVAL_STRING            0x4     /* tagged reference to string */#define JSVAL_BOOLEAN           0x6     /* tagged boolean value *//* Type tag bitfield length and derived macros. */#define JSVAL_TAGBITS           3#define JSVAL_TAGMASK           JS_BITMASK(JSVAL_TAGBITS)#define JSVAL_TAG(v)            ((v) & JSVAL_TAGMASK)#define JSVAL_SETTAG(v,t)       ((v) | (t))#define JSVAL_CLRTAG(v)         ((v) & ~(jsval)JSVAL_TAGMASK)#define JSVAL_ALIGN             JS_BIT(JSVAL_TAGBITS)/* Predicates for type testing. */#define JSVAL_IS_OBJECT(v)      (JSVAL_TAG(v) == JSVAL_OBJECT)#define JSVAL_IS_NUMBER(v)      (JSVAL_IS_INT(v) || JSVAL_IS_DOUBLE(v))#define JSVAL_IS_INT(v)         (((v) & JSVAL_INT) && (v) != JSVAL_VOID)#define JSVAL_IS_DOUBLE(v)      (JSVAL_TAG(v) == JSVAL_DOUBLE)#define JSVAL_IS_STRING(v)      (JSVAL_TAG(v) == JSVAL_STRING)#define JSVAL_IS_BOOLEAN(v)     (JSVAL_TAG(v) == JSVAL_BOOLEAN)#define JSVAL_IS_NULL(v)        ((v) == JSVAL_NULL)#define JSVAL_IS_VOID(v)        ((v) == JSVAL_VOID)#define JSVAL_IS_PRIMITIVE(v)   (!JSVAL_IS_OBJECT(v) || JSVAL_IS_NULL(v))/* Objects, strings, and doubles are GC'ed. */#define JSVAL_IS_GCTHING(v)     (!((v) & JSVAL_INT) && !JSVAL_IS_BOOLEAN(v))#define JSVAL_TO_GCTHING(v)     ((void *)JSVAL_CLRTAG(v))#define JSVAL_TO_OBJECT(v)      ((JSObject *)JSVAL_TO_GCTHING(v))#define JSVAL_TO_DOUBLE(v)      ((jsdouble *)JSVAL_TO_GCTHING(v))#define JSVAL_TO_STRING(v)      ((JSString *)JSVAL_TO_GCTHING(v))#define OBJECT_TO_JSVAL(obj)    ((jsval)(obj))#define DOUBLE_TO_JSVAL(dp)     JSVAL_SETTAG((jsval)(dp), JSVAL_DOUBLE)#define STRING_TO_JSVAL(str)    JSVAL_SETTAG((jsval)(str), JSVAL_STRING)/* Lock and unlock the GC thing held by a jsval. */#define JSVAL_LOCK(cx,v)        (JSVAL_IS_GCTHING(v)                          \                                 ? JS_LockGCThing(cx, JSVAL_TO_GCTHING(v))    \                                 : JS_TRUE)#define JSVAL_UNLOCK(cx,v)      (JSVAL_IS_GCTHING(v)                          \                                 ? JS_UnlockGCThing(cx, JSVAL_TO_GCTHING(v))  \                                 : JS_TRUE)/* Domain limits for the jsval int type. */#define JSVAL_INT_BITS          31#define JSVAL_INT_POW2(n)       ((jsval)1 << (n))#define JSVAL_INT_MIN           ((jsval)1 - JSVAL_INT_POW2(30))#define JSVAL_INT_MAX           (JSVAL_INT_POW2(30) - 1)#define INT_FITS_IN_JSVAL(i)    ((jsuint)((i)+JSVAL_INT_MAX) <= 2*JSVAL_INT_MAX)#define JSVAL_TO_INT(v)         ((jsint)(v) >> 1)#define INT_TO_JSVAL(i)         (((jsval)(i) << 1) | JSVAL_INT)/* Convert between boolean and jsval. */#define JSVAL_TO_BOOLEAN(v)     ((JSBool)((v) >> JSVAL_TAGBITS))#define BOOLEAN_TO_JSVAL(b)     JSVAL_SETTAG((jsval)(b) << JSVAL_TAGBITS,     \                                             JSVAL_BOOLEAN)/* A private data pointer (2-byte-aligned) can be stored as an int jsval. */#define JSVAL_TO_PRIVATE(v)     ((void *)((v) & ~JSVAL_INT))#define PRIVATE_TO_JSVAL(p)     ((jsval)(p) | JSVAL_INT)/* Property attributes, set in JSPropertySpec and passed to API functions. */#define JSPROP_ENUMERATE        0x01    /* property is visible to for/in loop */#define JSPROP_READONLY         0x02    /* not settable: assignment is no-op */#define JSPROP_PERMANENT        0x04    /* property cannot be deleted */#define JSPROP_EXPORTED         0x08    /* property is exported from object */#define JSPROP_GETTER           0x10    /* property holds getter function */#define JSPROP_SETTER           0x20    /* property holds setter function */#define JSPROP_SHARED           0x40    /* don't allocate a value slot for this                                           property; don't copy the property on                                           set of the same-named property in an                                           object that delegates to a prototype                                           containing this property */#define JSPROP_INDEX            0x80    /* name is actually (jsint) index *//* Function flags, set in JSFunctionSpec and passed to JS_NewFunction etc. */#define JSFUN_LAMBDA            0x08    /* expressed, not declared, function */#define JSFUN_GETTER            JSPROP_GETTER#define JSFUN_SETTER            JSPROP_SETTER#define JSFUN_BOUND_METHOD      0x40    /* bind this to fun->object's parent */#define JSFUN_HEAVYWEIGHT       0x80    /* activation requires a Call object */#define JSFUN_FLAGS_MASK        0xf8    /* overlay JSFUN_* attributes *//* * Well-known JS values.  The extern'd variables are initialized when the * first JSContext is created by JS_NewContext (see below). */#define JSVAL_VOID              INT_TO_JSVAL(0 - JSVAL_INT_POW2(30))#define JSVAL_NULL              OBJECT_TO_JSVAL(0)#define JSVAL_ZERO              INT_TO_JSVAL(0)#define JSVAL_ONE               INT_TO_JSVAL(1)#define JSVAL_FALSE             BOOLEAN_TO_JSVAL(JS_FALSE)#define JSVAL_TRUE              BOOLEAN_TO_JSVAL(JS_TRUE)/* Don't want to export data, so provide accessors for non-inline jsvals. */extern JS_PUBLIC_API(jsval)JS_GetNaNValue(JSContext *cx);extern JS_PUBLIC_API(jsval)JS_GetNegativeInfinityValue(JSContext *cx);extern JS_PUBLIC_API(jsval)JS_GetPositiveInfinityValue(JSContext *cx);extern JS_PUBLIC_API(jsval)JS_GetEmptyStringValue(JSContext *cx);/* * Format is a string of the following characters (spaces are insignificant), * specifying the tabulated type conversions: * *   b      JSBool          Boolean *   c      uint16/jschar   ECMA uint16, Unicode char *   i      int32           ECMA int32 *   u      uint32          ECMA uint32 *   j      int32           Rounded int32 (coordinate) *   d      jsdouble        IEEE double *   I      jsdouble        Integral IEEE double *   s      char *          C string *   S      JSString *      Unicode string, accessed by a JSString pointer *   W      jschar *        Unicode character vector, 0-terminated (W for wide) *   o      JSObject *      Object reference *   f      JSFunction *    Function private *   v      jsval           Argument value (no conversion) *   *      N/A             Skip this argument (no vararg) *   /      N/A             End of required arguments * * The variable argument list after format must consist of &b, &c, &s, e.g., * where those variables have the types given above.  For the pointer types * char *, JSString *, and JSObject *, the pointed-at memory returned belongs * to the JS runtime, not to the calling native code.  The runtime promises * to keep this memory valid so long as argv refers to allocated stack space * (so long as the native function is active). * * Fewer arguments than format specifies may be passed only if there is a / * in format after the last required argument specifier and argc is at least * the number of required arguments.  More arguments than format specifies * may be passed without error; it is up to the caller to deal with trailing * unconverted arguments. */extern JS_PUBLIC_API(JSBool)JS_ConvertArguments(JSContext *cx, uintN argc, jsval *argv, const char *format,                    ...);#ifdef va_startextern JS_PUBLIC_API(JSBool)JS_ConvertArgumentsVA(JSContext *cx, uintN argc, jsval *argv,                      const char *format, va_list ap);#endif/* * Inverse of JS_ConvertArguments: scan format and convert trailing arguments * into jsvals, GC-rooted if necessary by the JS stack.  Return null on error, * and a pointer to the new argument vector on success.  Also return a stack * mark on success via *markp, in which case the caller must eventually clean * up by calling JS_PopArguments. * * Note that the number of actual arguments supplied is specified exclusively * by format, so there is no argc parameter. */extern JS_PUBLIC_API(jsval *)JS_PushArguments(JSContext *cx, void **markp, const char *format, ...);#ifdef va_startextern JS_PUBLIC_API(jsval *)JS_PushArgumentsVA(JSContext *cx, void **markp, const char *format, va_list ap);#endifextern JS_PUBLIC_API(void)JS_PopArguments(JSContext *cx, void *mark);#ifdef JS_ARGUMENT_FORMATTER_DEFINED/* * Add and remove a format string handler for JS_{Convert,Push}Arguments{,VA}. * The handler function has this signature (see jspubtd.h): * *   JSBool MyArgumentFormatter(JSContext *cx, const char *format, *                              JSBool fromJS, jsval **vpp, va_list *app); * * It should return true on success, and return false after reporting an error * or detecting an already-reported error. * * For a given format string, for example "AA", the formatter is called from * JS_ConvertArgumentsVA like so: * *   formatter(cx, "AA...", JS_TRUE, &sp, &ap); * * sp points into the arguments array on the JS stack, while ap points into * the stdarg.h va_list on the C stack.  The JS_TRUE passed for fromJS tells * the formatter to convert zero or more jsvals at sp to zero or more C values * accessed via pointers-to-values at ap, updating both sp (via *vpp) and ap * (via *app) to point past the converted arguments and their result pointers * on the C stack. * * When called from JS_PushArgumentsVA, the formatter is invoked thus: * *   formatter(cx, "AA...", JS_FALSE, &sp, &ap); * * where JS_FALSE for fromJS means to wrap the C values at ap according to the * format specifier and store them at sp, updating ap and sp appropriately. * * The "..." after "AA" is the rest of the format string that was passed into * JS_{Convert,Push}Arguments{,VA}.  The actual format trailing substring used * in each Convert or PushArguments call is passed to the formatter, so that * one such function may implement several formats, in order to share code. * * Remove just forgets about any handler associated with format.  Add does not * copy format, it points at the string storage allocated by the caller, which * is typically a string constant.  If format is in dynamic storage, it is up * to the caller to keep the string alive until Remove is called. */extern JS_PUBLIC_API(JSBool)JS_AddArgumentFormatter(JSContext *cx, const char *format,                        JSArgumentFormatter formatter);extern JS_PUBLIC_API(void)JS_RemoveArgumentFormatter(JSContext *cx, const char *format);#endif /* JS_ARGUMENT_FORMATTER_DEFINED */extern JS_PUBLIC_API(JSBool)JS_ConvertValue(JSContext *cx, jsval v, JSType type, jsval *vp);extern JS_PUBLIC_API(JSBool)JS_ValueToObject(JSContext *cx, jsval v, JSObject **objp);extern JS_PUBLIC_API(JSFunction *)JS_ValueToFunction(JSContext *cx, jsval v);extern JS_PUBLIC_API(JSFunction *)JS_ValueToConstructor(JSContext *cx, jsval v);extern JS_PUBLIC_API(JSString *)JS_ValueToString(JSContext *cx, jsval v);extern JS_PUBLIC_API(JSBool)JS_ValueToNumber(JSContext *cx, jsval v, jsdouble *dp);/* * Convert a value to a number, then to an int32, according to the ECMA rules * for ToInt32. */extern JS_PUBLIC_API(JSBool)JS_ValueToECMAInt32(JSContext *cx, jsval v, int32 *ip);/* * Convert a value to a number, then to a uint32, according to the ECMA rules * for ToUint32. */extern JS_PUBLIC_API(JSBool)JS_ValueToECMAUint32(JSContext *cx, jsval v, uint32 *ip);/* * Convert a value to a number, then to an int32 if it fits by rounding to * nearest; but failing with an error report if the double is out of range * or unordered. */extern JS_PUBLIC_API(JSBool)JS_ValueToInt32(JSContext *cx, jsval v, int32 *ip);/* * ECMA ToUint16, for mapping a jsval to a Unicode point. */extern JS_PUBLIC_API(JSBool)JS_ValueToUint16(JSContext *cx, jsval v, uint16 *ip);extern JS_PUBLIC_API(JSBool)JS_ValueToBoolean(JSContext *cx, jsval v, JSBool *bp);extern JS_PUBLIC_API(JSType)JS_TypeOfValue(JSContext *cx, jsval v);extern JS_PUBLIC_API(const char *)JS_GetTypeName(JSContext *cx, JSType type);/************************************************************************//* * Initialization, locking, contexts, and memory allocation. */#define JS_NewRuntime       JS_Init

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -