JSAPI は、SpiderMonkey JavaScript エンジンのための C API です。JSAPI の使用方法を学ぶには、JSAPI User Guide および JSAPI Phrasebook をご覧ください。
ランタイムとコンテキスト
- typedef JSRuntime
- JS_NewRuntime
- JS_DestroyRuntime
- JS_ShutDown
- JS_GetRuntimePrivate
- JS_SetRuntimePrivate
- JS_Init
- JS_Finish
- JS_ContextIterator
- typedef JSContext
- JS_NewContext
- JS_DestroyContext
- JS_DestroyContextMaybeGC
- JS_DestroyContextNoGC
- JS_GetRuntime
- JS_GetContextPrivate
- JS_SetContextPrivate
- JS_GetOptions
- JS_SetOptions – JSOPTION_ATLINE, JSOPTION_COMPILE_N_GO, JSOPTION_DONT_REPORT_UNCAUGHT, JSOPTION_NATIVE_BRANCH_CALLBACK, JSOPTION_RELIMIT, JSOPTION_STRICT, JSOPTION_VAROBJFIX, JSOPTION_WERROR, JSOPTION_XML, JSOPTION_ANONFUNFIXSpiderMonkey 1.8.1 (未リリース) の新機能, JSOPTION_JITSpiderMonkey 1.8.1 (未リリース) の新機能, JSOPTION_NO_SCRIPT_RVALSpiderMonkey 1.8.1 (未リリース) の新機能, JSOPTION_UNROOTED_GLOBALSpiderMonkey 1.8.1 (未リリース) の新機能
- JS_ToggleOptions
- JS_SetBranchCallback
- JS_SetOperationCallback, JS_ClearOperationCallback, JS_GetOperationCallback, JS_GetOperationLimit, JS_SetOperationLimit, JS_MAX_OPERATION_LIMIT, JS_OPERATION_WEIGHT_BASE SpiderMonkey 1.8 (未リリース) の新機能
- JS_SetThreadStackLimit
- JS_SetScriptStackQuota
- enum JSVersion, JSVERSION_ECMA_3, JSVERSION_DEFAULT, JSVERSION_LATEST
- JS_GetImplementationVersion
- JS_GetVersion
- JS_SetVersion
- JS_StringToVersion
- JS_VersionToString
- JS_GetGlobalObject
- JS_SetGlobalObject
- JS_InitClass
- JS_InitStandardClasses
- JS_ResolveStandardClass
- JS_EnumerateStandardClasses
- JS_EnumerateResolvedStandardClasses
- JS_IsAssigning
- JS_IsConstructing
- JS_IsRunning
- JS_GetScopeChain
- JS_SaveFrameChain, JS_RestoreFrameChain
ロケールコールバック:
ロケールコールバック型:
スクリプト
一部の JavaScript コードは直接実行されます:
- JS_EvaluateScript
- JS_EvaluateUCScript
- JS_EvaluateScriptForPrincipals
- JS_EvaluateUCScriptForPrincipals
JavaScript コードを可能な JSScript
へとコンパイルする代わりに、複数のアイテムを実行することができます。
- typedef JSScript
- JS_CompileFile
- JS_CompileFileHandle
- JS_CompileFileHandleForPrincipals
- JS_CompileScript
- JS_CompileUCScript
- JS_CompileScriptForPrincipals
- JS_CompileUCScriptForPrincipals
- JS_BufferIsCompilableUnit
- JS_GetScriptObject
- JS_NewScriptObject
- JS_ExecuteScript
- JS_ExecuteScriptPart
- JS_DecompileScript
- JS_DestroyScript
JavaScript コードを関数へとコンパイルすることもできます:
- typedef JSFunction
- JS_CompileFunction
- JS_CompileFunctionForPrincipals
- JS_CompileUCFunction
- JS_CompileUCFunctionForPrincipals
- JS_DecompileFunction
- JS_DecompileFunctionBody
エラーハンドリング
- struct JSErrorReport
- JS_ReportError
- JS_ReportWarning
- JS_ReportErrorNumber, JS_ReportErrorNumberUC, JS_ReportErrorFlagsAndNumber, JS_ReportErrorFlagsAndNumberUC
- JS_ReportOutOfMemory
- JS_SetErrorReporter
- JSREPORT_IS_EXCEPTION
- JSREPORT_IS_STRICT
- JSREPORT_IS_WARNING
次の関数は、C/C++ 関数に JavaScript 例外のスローとキャッチを許可します。:
- JS_IsExceptionPending
- JS_GetPendingException
- JS_SetPendingException
- JS_ClearPendingException
- JS_ThrowStopIteration SpiderMonkey 1.8 の新機能
これらの関数は、エラーを例外に、例外をエラーに翻訳します:
値と型
- typedef jsval
jsval
定数:
jsval
の型をチェックする関数とマクロ:
- enum JSType
- JS_TypeOfValue
- JSVAL_IS_NULL
- JSVAL_IS_VOID
- JSVAL_IS_BOOLEAN
- JSVAL_IS_NUMBER
- JSVAL_IS_INT
- JSVAL_IS_DOUBLE
- JSVAL_IS_STRING
- JSVAL_IS_OBJECT
- JSVAL_IS_PRIMITIVE
- JSVAL_IS_GCTHING
関数の引数を圧縮または展開する高レベル型変換ルーチン。
次の関数は JS 値を変数型に変換します。これらは任意の型の jsval
に安全に適用することができます。これらは新しいオブジェクトを返します。例えば、JS_ValueToObject(cx, s)
の s
は新しい String
ラッパーオブジェクトを作成する文字列です。これらの関数は JavaScript メソッドを呼び出します。例えば、JS_ValueToString(cx, obj)
は obj.toString()
を呼び出します。
- JS_ValueToBoolean
- JS_ValueToConstructor
- JS_ValueToECMAInt32
- JS_ValueToECMAUint32
- JS_ValueToFunction
- JS_ValueToInt32
- JS_ValueToNumber
- JS_ValueToObject
- JS_ValueToString
- JS_ValueToUint16
- JS_ConvertValue
高速な未チェックの型キャストマクロ。これらのマクロは正しい型として知られていない値に適用してはいけません。C のキャストのように、正しくない値に適用するとクラッシュの原因となります。これらは新しいオブジェクトを作成したり JavaScript コード内に呼び出したりすることはありません。
- JSVAL_TO_BOOLEAN, BOOLEAN_TO_JSVAL
- JSVAL_TO_INT, INT_TO_JSVAL, INT_FITS_IN_JSVAL
- JSVAL_TO_DOUBLE, DOUBLE_TO_JSVAL
- JSVAL_TO_OBJECT, OBJECT_TO_JSVAL
- JSVAL_TO_STRING, STRING_TO_JSVAL
- JSVAL_TO_GCTHING
- JSVAL_TO_PRIVATE, PRIVATE_TO_JSVAL
typeof
のように振る舞う関数:
===
のように振る舞う関数:
メモリ管理
これらの関数は、標準 C 関数の malloc
系のように動作します。ただし、エラーは errno
ではなく、SpiderMonkey のエラー API を使用して報告されます:
JavaScript オブジェクト、文字列、浮動小数点数はガーベッジコレクションの対象となります。これらの関数は、ガーベッジコレクタ(GC) へのアクセスを提供します:
- JS_GC
- JS_MaybeGC
- JS_GetGCParameter, JS_SetGCParameter, enum JSGCParamKey, JSGC_MAX_BYTES, JSGC_MAX_MALLOC_BYTES, JSGC_STACKPOOL_LIFESPAN, JSGC_TRIGGER_FACTOR, JSGC_BYTES, JSGC_NUMBER
- JS_SetGCCallback, JS_SetGCCallbackRT, enum JSGCStatus, JSGC_BEGIN, JSGC_MARK_END, JSGC_FINALIZE_END, JSGC_END
- JS_MarkGCThing
- JS_IsAboutToBeFinalized
- JS_ClearNewbornRoots
- JS_SetGCZeal
- JS_DumpHeap SpiderMonkey 1.8 (未リリース) の新機能
これら残りの API は、アプリケーションがガーベッジコレクションを行う前に、オブジェクトをガーベッジコレクタによる破壊から保護します。
変数が root の場合、その変数へのポインタはガーベッジコレクタによって開放されません。ルートオブジェクトに対しての失敗は、よくある奇妙なクラッシュの原因です。
- JS_AddRoot
- JS_AddNamedRoot
- JS_AddNamedRootRT
- JS_RemoveRoot
- JS_RemoveRootRT
- JS_MapGCRoots, JSGCMapRootFun – JS_MAP_GCROOT_NEXT, JS_MAP_GCROOT_REMOVE, JS_MAP_GCROOT_STOP
- JS_DumpNamedRoots
ローカルのルートのスコープは、オブジェクトを別の方法でガーベッジコレクタから保護します。
SpiderMonkey 1.8 (未リリース) の新機能 オブジェクトが、SpiderMonkey のデータ構造 ("slots") に格納されていない、他のガーベッジコレクタの対象への参照を含む場合、このオブジェクトは、ガーベッジコレクタのこれらの参照へのトラバース (traverse)を有効にするため、JSTraceOp
フックを実装しなければなりません。しかし、ガーベッジコレクタは手の届く範囲のオブジェクトのみを整理しますが、すべてのオブジェクトを見つけることはできないため、クラッシュを引き起こします。(SpiderMonkey 1.7 以前のバージョンでは JSMarkOp
フックが代わりに使用されます。これは SpiderMonkey 1.8 のリリース後は非推奨です。)
トレース API は、ガーベッジコレクタと JSTraceOp
フックによって使用されます。JSAPI アプリケーションもまた、これらの API をオブジェクトグラフを検査するために使用します。(例えば、これらの API は JS ガーベッジコレクタと他のガーベッジコレクタの、とても円滑な統合をサポートします。)
- JSVAL_IS_TRACEABLE SpiderMonkey 1.8 (未リリース) の新機能
- JSVAL_TO_TRACEABLE SpiderMonkey 1.8 (未リリース) の新機能
- JSVAL_TRACE_KIND SpiderMonkey 1.8 (未リリース) の新機能
- struct JSTracer SpiderMonkey 1.8 (未リリース) の新機能
- JS_TRACER_INIT SpiderMonkey 1.8 (未リリース) の新機能
- JS_CallTracer SpiderMonkey 1.8 (未リリース) の新機能
- JS_SET_TRACING_DETAILS SpiderMonkey 1.8 (未リリース) の新機能
- JS_SET_TRACING_INDEX SpiderMonkey 1.8 (未リリース) の新機能
- JS_SET_TRACING_NAME SpiderMonkey 1.8 (未リリース) の新機能
- JS_CALL_TRACER SpiderMonkey 1.8 (未リリース) の新機能
- JS_CALL_VALUE_TRACER SpiderMonkey 1.8 (未リリース) の新機能
- JS_CALL_OBJECT_TRACER SpiderMonkey 1.8 (未リリース) の新機能
- JS_CALL_STRING_TRACER SpiderMonkey 1.8 (未リリース) の新機能
- JS_CALL_DOUBLE_TRACER SpiderMonkey 1.8 (未リリース) の新機能
- JS_TraceChildren SpiderMonkey 1.8 (未リリース) の新機能
- JS_TraceRuntime SpiderMonkey 1.8 (未リリース) の新機能
- JS_PrintTraceThingInfo (DEBUG-only) SpiderMonkey 1.8 (未リリース) の新機能
その他の GC API:
数値
- JS_NewNumberValue, JS_NewDoubleValue, JS_NewDouble
- struct JSConstDoubleSpec
- JS_DefineConstDoubles
- JS_GetNaNValue
- JS_GetNegativeInfinityValue
- JS_GetPositiveInfinityValue
文字列
- typedef JSString
- typedef jschar
- JS_NewString
- JS_NewStringCopyN
- JS_NewStringCopyZ
- JS_NewUCString
- JS_NewUCStringCopyN
- JS_NewUCStringCopyZ
- JS_NewGrowableString
- JS_NewDependentString
- JS_GetEmptyStringValue
- JS_CompareStrings
- JS_ConcatStrings
- JS_GetStringBytes
- JS_GetStringBytesZ
- JS_GetStringChars
- JS_GetStringLength
- JS_MakeStringImmutable
- JS_UndependString
- JS_CStringsAreUTF8
- JS_SetCStringsAreUTF8
- JS_DecodeBytes
- JS_EncodeCharacters
- JS_EncodeString
- JS_EncodeStringToBuffer
- JS_GetStringEncodingLength
Interning 文字列は SpiderMonkey エンジンに、可能ならば既存の文字列オブジェクトを再使用するように伝えます。
external strings のための文字データはアプリケーションによって提供されるメモリに格納されます。アプリケーションはこれを、SpiderMonkey のヒープとアプリケーションのメモリの間で、データを先や後へコピーすることを防止するために使用します。
- JS_AddExternalStringFinalizer
- JS_RemoveExternalStringFinalizer
- JS_GetExternalStringGCType
- JS_NewExternalString
オブジェクト
- typedef JSObject
- JS_ConstructObject
- JS_ConstructObjectWithArguments
- JS_DefineObject
- JS_NewObject
- JS_NewGlobalObject SpiderMonkey 1.8 (未リリース) の新機能
- JS_NewObjectWithGivenProto
- JS_New
- JS_GET_CLASS
- JS_GetClass
- JS_GetClassObject
- JS_GetConstructor
- JS_GetGlobalForObject
- JS_GetInstancePrivate
- JS_GetParent, JS_SetParent
- JS_GetPrivate, JS_SetPrivate
- JS_GetPrototype, JS_SetPrototype
- JS_GetReservedSlot, JS_SetReservedSlot
- JS_HasInstance
- JS_InstanceOf
- JS_SealObject
プロパティ
これらの関数は、直接スクリプトがオブジェクトのプロパティにアクセスする方法に相当します:
- JS_GetProperty, JS_GetUCProperty, JS_GetPropertyById
- JS_SetProperty, JS_SetUCProperty, JS_SetPropertyById
- JS_HasProperty, JS_HasUCProperty, JS_HasPropertyById
- JS_DeleteProperty, JS_DeletePropertyById, JS_DeleteProperty2, JS_DeleteUCProperty2, JS_DeletePropertyById2
次の低レベルの関数は、JSAPI アプリケーションが、プロパティの実装方法の詳細へのアクセスを許可します。"Define" は "set" の低レベル版であり、追加の設定へのアクセスを提供し、setter を呼び出しません。同様に、"lookup" は "get" の低レベル版であり、追加のオプションを与え、getter を呼び出しません。
- JS_AlreadyHasOwnElement, JS_AlreadyHasOwnProperty, JS_AlreadyHasOwnUCProperty, JS_AlreadyHasOwnPropertyById SpiderMonkey 1.8 (未リリース) の新機能
- JS_ClearScope
- JS_DefineProperties
- JS_DefineProperty, JS_DefineUCProperty, JS_DefinePropertyById
- JS_DefinePropertyWithTinyId, JS_DefineUCPropertyWithTinyId
- JS_Enumerate
- JS_GetPropertyAttributes, JS_GetUCPropertyAttributes – JSPROP_ENUMERATE, JSPROP_EXPORTED, JSPROP_GETTER, JSPROP_INDEX, JSPROP_PERMANENT, JSPROP_READONLY, JSPROP_SETTER, JSPROP_SHARED
- JS_GetPropertyAttrsGetterAndSetter, JS_GetUCPropertyAttrsGetterAndSetter, JS_GetPropertyAttrsGetterAndSetterById
- JS_GetPropertyDescriptorById SpiderMonkey 1.8 (未リリース) の新機能
- JS_LookupProperty, JS_LookupUCProperty, JS_LookupPropertyById
- JS_LookupPropertyWithFlags, JS_LookupPropertyWithFlagsById
- JS_NewPropertyIterator
- JS_NextProperty
- JS_SetPropertyAttributes, JS_SetUCPropertyAttributes
- JS_AliasProperty
次の関数は、JS_GetProperty
および JS_GetPropertyById
のように振る舞います。ただし、E4X XML オブジェクト上の操作は除きます。
SpiderMonkey 拡張は lvalue(オブジェクトのプロパティへの参照) を返すネイティブ関数を許可します:
jsid
は jsval
の一種です。ごく少数の API が、jsval
の代わりに jsid
をプロパティ名に使用します: JS_CheckAccess
および JS_Enumerate
, JS_GetMethodById
, JS_NextProperty
。
jsid
定数:
jsid
の型を調べる関数とマクロ:
- JSID_IS_VOID
- JSID_IS_INT
- JSID_IS_STRING
- JSID_IS_OBJECT
- JSID_IS_GCTHING
- JSID_IS_ZERO
- JSID_IS_EMPTY
- JSID_IS_DEFAULT_XML_NAMESPACE
クラス
これらの API 機能は、C/C++ に実装された JavaScript からアクセス可能なカスタムクラス—オブジェクト型の定義に使用されます。
- struct JSClass
- struct JSExtendedClass
- struct JSObjectOps
- struct JSXMLObjectOps
- struct JSFunctionSpec
- struct JSProperty
- struct JSPropertySpec
- JS_InitClass
ネイティブプロパティとメソッドをクラスに追加:
- JSNative
- JSFastNative SpiderMonkey 1.8 の新機能
- struct JSFunctionSpec
- JS_FS SpiderMonkey 1.8 の新機能
- JS_FN SpiderMonkey 1.8 の新機能
- JS_FS_END SpiderMonkey 1.8 の新機能
- struct JSPropertySpec
JSFastNative
メソッドはこれらのマクロを使用します: SpiderMonkey 1.8 の新機能
JSClass
の振る舞いとそのインスタンスは、コールバック関数を使用して多くの方法でカスタマイズすることができます。
JSClass メソッド型:
- JSPropertyOp
- JSEnumerateOp
- JSNewEnumerateOp
- JSResolveOp
- JSNewResolveOp – JSRESOLVE_ASSIGNING, JSRESOLVE_CLASSNAME, JSRESOLVE_DECLARING, JSRESOLVE_DETECTING, JSRESOLVE_QUALIFIED
- JSConvertOp
- JSFinalizeOp
- JSGetObjectOps
- JSCheckAccessOp
- JSXDRObjectOp
- JSHasInstanceOp
- JSMarkOp
- JSTraceOp
- JSReserveSlotsOp
JSExtendedClass メソッド型:
JSObjectOps メソッド型:
- JSNewObjectMapOp
- JSObjectMapOp
- JSLookupPropOp
- JSDefinePropOp
- JSPropertyIdOp
- JSAttributesOp
- JSConvertOp
- JSNewEnumerateOp
- JSCheckAccessIdOp
- JSObjectOp
- JSPropertyRefOp
- JSXDRObjectOp
- JSHasInstanceOp
- JSSetObjectSlotOp
- JSTraceOp
- JSFinalizeOp
- JSGetRequiredSlotOp
- JSSetRequiredSlotOp
JSXMLObjectOps メソッド型:
これらの stub 関数はカスタム JSClass
の作成時に使用されます:
JSClass
の振る舞いは、これらのフラグを使用してカスタマイズできます:
- JSClass.flags – JSCLASS_CONSTUCT_PROTOTYPE, JSCLASS_GLOBAL_FLAGS, JSCLASS_HAS_PRIVATE, JSCLASS_HAS_RESERVED_SLOTS, JSCLASS_IS_EXTENDED, JSCLASS_MARK_IS_TRACE, JSCLASS_NEW_ENUMERATE, JSCLASS_NEW_RESOLVE, JSCLASS_NEW_RESOLVE_GETS_START, JSCLASS_PRIVATE_IS_NSISUPPORTS, JSCLASS_SHARE_ALL_PROPERTIES
配列
- JS_AliasElement
- JS_DefineElement
- JS_DeleteElement
- JS_DeleteElement2
- JS_GetElement
- JS_LookupElement
- JS_SetElement
関数
関数またはオブジェクトのメソッドの呼び出し:
関数アクセサリ:
- JS_ObjectIsFunction
- JS_GetFunctionArity
- JS_GetFunctionFlags
- JS_GetFunctionId
- JS_GetFunctionName
- JS_GetFunctionObject
関数の生成:
正規表現
セキュリティ
- struct JSPrincipals
- JSPRINCIPALS_HOLD, JSPRINCIPALS_DROP
- JS_SetObjectPrincipalsFinder JSAPI 1.8 まで
- JS_SetPrincipalsTranscoder JSAPI 1.8 まで
- enum JSAccessMode – JSACC_PROTO, JSACC_PARENT, JSACC_IMPORT, JSACC_WATCH, JSACC_READ, JSACC_WRITE
- JS_CheckAccess
- JSObjectOps.checkAccess
- JSClass.checkAccess
- JS_SetCheckObjectAccessCallback JSAPI 1.8 まで
SpiderMonkey 1.8.1 の新機能 セキュリティのコールバックは、ランタイムごと、またはコンテキストごとに設定できます。
スレッド
次の関数は SpiderMonkey のスレッドモデルをサポートしています。
JSAPI 1.7 まで これらは JS_THREADSAFE
ビルドでのみ利用可能です。
SpiderMonkey 1.8 の新機能 これらの関数はいつでも利用可能です。ただし、JS_THREADSAFE
無しのビルドでは何もしません
- JS_BeginRequest
- JS_EndRequest
- JS_YieldRequest
- JS_SuspendRequest
- JS_ResumeRequest
- JS_GetContextThread
- JS_SetContextThread
- JS_ClearContextThread
次の関数はすべてのビルドに存在します。ただし、JS_THREADSAFE
無しのビルドでは何もしません:
時間
コールバック型
ネイティブ関数型:
その他のコールバック型:
- JSStringFinalizeOp - used by JS_AddExternalStringFinalizer
- JSTraceCallback - used by JS_TRACER_INIT
- JSTraceNamePrinter - used by JS_SET_TRACING_DETAILS
- JSContextCallback - used by JS_SetContextCallback
- JSGCCallback - used by JS_SetGCCallback
- JSTraceDataOp - used by JS_SetExtraGCRoots
- JSBranchCallback - used by JS_SetBranchCallback
- JSErrorReporter - used by JS_SetErrorReporter
- JSErrorCallback - used by JS_ReportErrorNumber and friends
- JSArgumentFormatter - used by JS_AddArgumentFormatter
- JSPrincipalsTranscoder - used by JS_SetPrincipalsTranscoder
- JSObjectPrincipalsFinder - used by JS_SetObjectPrincipalsFinder
- JSGCRootMapFun - used by JS_MapGCRoots
上記のクラスも参照してください。
マクロ
- JS_DEFAULT_XML_NAMESPACE_ID
- JSFUN_BOUND_METHOD
- JSFUN_GETTER
- JSFUN_GLOBAL_PARENT
- JSFUN_HEAVYWEIGHT
- JSFUN_LAMBDA
- JSFUN_SETTER
- JSREG_GLOB
- JSREG_FOLD
- JSREG_MULTILINE
C++ の機能
- class JSAutoRequest
- class JSAutoLocalRootScope
- class JS::PerfMeasurement (in
jsperf.h
)