#define CHECK_NULL(obj) if (!obj) (例外)
#define CHECK_BOUNDS(ar, i) if (ARRAY_LENGTH(ar) >= i) (例外)
#define ARRAY_LENGTH(ar) (*(int *)((void *)array + 1))
#define ARRAY_BODY(ar) ((void *)((int *)((void *)array + 1) + 1))
ivar = (void *)0;
ivar = n;
lvar = l;
fvar = f;
dvar = d;
avar = String::intern(_Jv_NewStringUTF(文字列));
ivar = ivar_n;
lvar = lvar_n;
fvar = fvar_n;
dvar = dvar_n;
avar = avar_n;
ivar_n = ivar;
lvar_n = lvar;
fvar_n = fvar;
dvar_n = dvar;
avar_n = avar;
Tvar1 += Tvar2;
Tvar1 -= Tvar2;
Tvar1 *= Tvar2;
_Jv_divI(ivar1, ivar2);
_Jv_divJ(lvar1, lvar2);
Tdiv1 /= Tdiv2;
_Jv_remI(ivar1, ivar2);
_Jv_remJ(lvar1, lvar2);
__ieee754_fmod(Tvar1, Tvar2);
Tvar = -Tvar;
ivar1 <<= ivar2 & 0x1f
lvar <<= ivar & 0x3f
ivar1 >>= ivar2 & 0x1f
lvar >>= ivar & 0x3f
ivar1 = ivar1 >> ((unsigned long)ivar2 & 0x1f)
lvar = lvar >> ((unsigned long)ivar & 0x3f)
Tvar1 &= Tvar2;
Tvar1 |= Tvar2;
Tvar1 ^= Tvar2;
ivar_<index> += n;
if (lvar1 > lvar2) ivar = 1; else if (lvar1 == lvar2) ivar = 0; else ivar = -1;
if (Tvar1 > Tvar2) ivar = 1; else if (Tvar1 == Tvar2) ivar = 0; else ivar = -1;
if (Tvar1 < Tvar2) ivar = -1; else if (Tvar1 == Tvar2) ivar = 0; else ivar = 1;
if (!ivar) goto LABEL;
if (ivar) goto LABEL;
if (ivar < 0) goto LABEL;
if (ivar >= 0) goto LABEL;
if (ivar > 0) goto LABEL;
if (ivar <= 0) goto LABEL;
if (ivar1 == ivar2) goto LABEL;
if (ivar1 != ivar2) goto LABEL;
if (ivar1 < ivar2) goto LABEL;
if (ivar1 >= ivar2) goto LABEL;
if (ivar1 > ivar2) goto LABEL;
if (ivar1 <= ivar2) goto LABEL;
if (avar1 == avar2) goto LABEL;
if (avar1 != avar2) goto LABEL;
if (!avar1) goto LABEL;
if (avar1) goto LABEL;
goto LABEL;
TODO
TODO
switch(ivar) { case key1: goto LABEL1; case key2: goto LABEL2; case key3: goto LABEL3; ... default : goto LABEL_DEFAULT; }
avar = _Jv_NewArray(ivar, atype);
void *klass = &(クラス名); _Jv_InitClass(klass); avar = _Jv_NewObjectArray (ivar, klass, 0);
作成される配列の次元を表したクラスを、こちら側で用意する必要がある模様
{ long i; long sizes[dim]; Class *klass0 = &(クラス名); ClassLoader *loader = klass->getClassLoaderInternal(); for (int i = 0; i < dim; i++) { sizes[i] = ivar_i; klass0 = _Jv_GetArrayClass(klass0, loader); } multiarray = (多次元配列生成関数)(klass0, dim, sizes); }
void *array = avar; CHECK_NULL(array); ivar = ARRAY_LENGTH(array);
void *array = avar; int index; CHECK_NULL(array); index = ivar; CHECK_BOUNDS(array, index); Tvar = ((T *)ARRAY_BODY(array))[index];
void *array = avar; int index; CHECK_NULL(array); index = ivar; CHECK_BOUNDS(array, index); ((T *)ARRAY_BODY(array))[index] = Tvar;
void *array = avar; int index; CHECK_NULL(array); index = ivar; CHECK_BOUNDS(array, index); CHECK_ASSIGNABLE(TODO); _Jv_CheckArrayStore(array, Tvar); ((void **)ARRAY_BODY(array))[index] = Tvar;
void *klass = (クラス); _Jv_InitClass(klass); avar = _Jv_AllocObject(klass, (クラスのサイズ));
_Jv_InitClass((クラス)); Tvar = (フィールド名);
_Jv_InitClass((クラス)); (フィールド名) = Tvar;
CHECK_NULL(avar); char *field = (char *)avar + 1; Tvar = *(T *)&field[(オフセット)];
CHECK_NULL(avar); char *field = (char *)avar + 1; *(T *)&field[(オフセット)] = Tvar;
CHECK_NULL(avar); void **vtable = *(void ***)avar; // clas, gc_descの分だけずらす vtable = vtable + 2; Tvar = ((T(*)(void *, T_ARGS))vtable[(オフセット)])(avar, (実引数));
CHECK_NULL(avar); Tvar = (メソッドシンボル)(avar, (実引数));
_Jv_InitClass((クラス)); Tvar = (メソッドシンボル)((実引数));
CHECK_NULL(avar); void *klass = **(void ***)avar; void *iface = (インターフェース); void *mptr = _Jv_LookupInterfaceMethodIdx(klass, iface, (オフセット)); Tvar = ((T(*)(void *, T_ARGS))mptr)(avar, (実引数));
/* 明示的なコード無し */
割愛
割愛
/* 明示的なコード無し */
Svar = (S)Tvar;
TODO
TODO
TODO
_Jv_CheckCast(avar, (クラス));
ivar = _Jv_IsInstanceOf(avar, (クラス));
NULLCHECK(avar); _Jv_MonitorEnter(avar);
NULLCHECK(avar); _Jv_MonitorExit(avar);
Copyright (C) 2002-2006 s.arakawa