通信用語の基礎知識 全国のICカードこれひとつ 戻る

jsval
辞書:電算用語の基礎知識 プログラミング仕様編 (PTPROGS)
読み:ジェイエス-バル
外語:jsval
品詞:名詞

SpiderMonkeyで使われている変数型の一つで、JavaScriptエンジンの内部で使うあらゆる型の要素が格納できるもの。

目次
概要

SpiderMonkeyにおいては、これは32ビット長の変数であり、ここに様々な値が格納される。

Firefox 4.0で採用されるJ〓gerMonkeyでは仕様が変わり、64ビット長の変数となった。32ビットの従来のものと互換性が全く無いので、SpiderMonkeyからJ〓gerMonkeyにJavaScriptエンジンを置き換える場合は、大幅な書き換えが必要になる可能性もある。

特徴
SpiderMonkey仕様(32ビット)

定義

usr/include/js以下で、次のように定義されている。

つまり、jsvalは間接的にlongで定義されている。


構造

32ビットのうち、下位3ビットを「タグ」として扱い、変数型の識別に使う。

例えば、オブジェクトの参照(つまりポインター)は常に8バイト単位にアラインメントされており、結果、下位3ビットが常に0となる。

31ビット長整数の場合は上位31ビットが、double型/string型への参照とboolean型は上位29ビットが実際に使われる値となる。


JSVAL_OBJECT

SpiderMonkeyで実際に処理を実装しようと思えば、様々なオブジェクトを扱うことになる。整数はオブジェクトではないが、整数の「配列」はオブジェクトである。

こういったオブジェクトは、JSObject *型で値が得られる。見ての通りポインターであり、これはSpiderMonkeyが内部管理する実際の情報に対するポインターである。

オブジェクトといえども、jsval型に直接代入はできない。次のマクロを使い、相互変換する。

例えば、num個のint型配列dataを配列オブジェクトに変換する処理は、次のようになる。

JSObject *array_obj = JS_NewArrayObject (cx, num, NULL);
int i;
for (i = 0; i < num; ++i)
{
  jsval val = INT_TO_JSVAL(data[i]);
  JS_SetElement (cx, array_obj, i, &val);
}

また、このオブジェクト型のなかに、NULL値であるJSVAL_NULLが定義されている。実装にもよると思われるが、「(jsval)0」つまり値0が使用されている。


JSVAL_INT

整数を結果として返す機会も多くある。jsval型では整数は符号ありの31ビット長である。

Cの整数型とjsval型は、次のマクロを使い、相互変換する。

jsvalの整数型の最大値および最小値は、次のマクロが定義されている(おそらく内部処理用)。

31ビット長ということは、実質的に次の範囲になる。

内部的には、long型から1ビット左シフトして最下位ビットを1にしたものがjsval型である。

なお、この整数型の中に、void値であるJSVAL_VOIDが定義されている。実装にもよると思われるが、0から230を引いた値が使用されている。1ビット左シフトして最下位ビットを1にした実際のjsval内部の数値は、0x80000001である。

具体的には、次のように使われている。


JSVAL_DOUBLE、JSVAL_STRING

実数型(jsdouble *型)と文字列型(JSString *型)も格納可能だが、これも実際には参照(ポインター)であり、内部情報の構造体を指し示している。

オブジェクトの場合と同様、8バイト単位にアラインメントされており、ポインターに変換する時には下位3ビットを切り落として0にしている。


JSVAL_BOOLEAN

真偽の2値のみを表わすブール値だが、専用のタグが用意され、1ビットで済む値のために29ビットの領域が提供されている。

上位29ビットが0ならFALSE、1ならTRUEであり、下位3ビットは6なので、結果として次のようになる。

J〓gerMonkey仕様(64ビット)

64ビットのうち、下位32ビットに実際の値(オブジェクト型の参照、整数、string型の参照)を格納し、上位32ビットがタグとなる。

但しdouble型についてはIEEE-754準拠の64ビット形式で扱われるとしている。

リンク
用語の所属
JavaScript

[再検索] [戻る]


通信用語の基礎知識検索システム WDIC Explorer Ver 7.04a (27-May-2022)
Search System : Copyright © Mirai corporation
Dictionary : Copyright © WDIC Creators club
KisoDic