gcj/14


gcj

14. オブジェクトの配列

配列の確保

A.java

public class A {
	public static void main() {
		Object[] objs = new Object[2];
	}
}

未定義参照

javalang.cc(追加)

extern "C" jobjectArray _Jv_NewObjectArray(jsize length, jclass klass, jobject init) {
	int sz = sizeof(::java::lang::Object) + sizeof(jsize) + (length + 1) * sizeof(jobject);
	jobjectArray result = (jobjectArray)sms_gc_malloc(sz);
	if (init == NULL) {
		bzero(result, sz);
	} else {
		jobject* p = elements(result);
		for (int i = 0; i < length; i++)
			p[i] = init;
	}
	*(jsize*)((jobject)result + 1) = length;
	return result;
}

配列への代入

A.java

public class A {
	public static void main() {
		Object obj = new Object();
		Object[] objs = new Object[5];
		objs[3] = obj;
	}
}

未定義参照

A.s

	movl	-16(%ebp), %eax
	movl	-12(%ebp), %esi
	movl	%esi, 4(%esp)
	movl	%eax, %ebx
	movl	%ebx, (%esp)
	call	__Jv_CheckArrayStore
	movl	%esi, 24(%ebx)

javalang.cc(追加)

extern "C" void _Jv_CheckArrayStore(jobjectArray array, jobject obj) {
}

テスト

A.java

public class A {
	public static void main() {
		Object[] objs = new Object[] { new Object(), new PrintStream(null), new A() };
		for (int i = 0; i < objs.length; i++)
			System.out.println(objs[i]);
	}
}

実行結果

$ ./test.exe
java.lang.Object
java.io.PrintStream
A

ここまでの作業結果: file14.zip

MENU

now: 3

リンク


最新の20件
2018-10-07 2018-09-20 2018-09-03 2018-05-09 2017-09-29 2017-01-10 2016-12-11 2016-10-04 2016-08-14 2016-05-29 2015-12-28 2013-02-25 2013-02-21 2013-02-20 2013-02-12 2013-02-11 2013-02-10
最新の20件
2010-02-01 2010-01-31 2010-01-30 2010-01-29 2010-01-16

Counter: 2684, today: 1, yesterday: 0

リロード   新規 編集 凍結 差分 添付 複製 改名   トップ 一覧 検索 最終更新 バックアップ   ヘルプ   最終更新のRSS

Last-modified: 2008-03-28 (金) 15:48:00 (3857d);  Modified by mona
PukiWiki 1.4.6 Copyright © 2001-2005 PukiWiki Developers Team. License is GPL.
Based on "PukiWiki" 1.3 by yu-ji
Powered by PHP 5.2.17
HTML convert time to 0.037 sec.