Check-in [6051f39a25]

Many hyperlinks are disabled.
Use anonymous login to enable hyperlinks.

Overview
Comment:Implement store of method count.
Downloads: Tarball | ZIP archive | SQL archive
Timelines: family | ancestors | descendants | both | trunk
Files: files | file ages | folders
SHA1: 6051f39a258d59a735b3aa348da300ed99c06951
User & Date: stephanie.gawroriski 2019-12-01 18:44:14
Context
2019-12-01
19:32
Initializing of interfaces a class implements. check-in: fb829ede09 user: stephanie.gawroriski tags: trunk
18:44
Implement store of method count. check-in: 6051f39a25 user: stephanie.gawroriski tags: trunk
16:53
Add missing Jar Index for the run-time ClassInfo. check-in: ec1724f28d user: stephanie.gawroriski tags: trunk
Changes
Hide Diffs Unified Diffs Ignore Whitespace Patch

Changes to runt/apis/cldc-compact/cc/squirreljme/jvm/ClassInfo.java.

71
72
73
74
75
76
77



78
79
80
81
82
83
84
..
91
92
93
94
95
96
97

98
99
100
101
102
103
104
105
106
107
108
109
110
...
119
120
121
122
123
124
125

126
127
128
	
	/** The pointer to the constant pool of this class. */
	public final int pool;
	
	/** The JAR this class is a part of. */
	public final int jardx;
	



	/**
	 * Class information constructor.
	 *
	 * @param __sp Self pointer.
	 * @param __fl Class information flags.
	 * @param __minip Pointer to the hardware class data in ROM.
	 * @param __namep The name pointer.
................................................................................
	 * @param __icl Interface classes.
	 * @param __ccl Component class.
	 * @param __cop Pointer to the class object.
	 * @param __vtv Virtual invoke VTable address.
	 * @param __vtp Virtual invoke VTable pool addresses.
	 * @param __pool The pointer to the class constant pool.
	 * @param __jardx The JAR Index.

	 * @since 2019/04/26
	 */
	public ClassInfo(int __sp, int __fl, int __minip, int __namep, int __sz,
		int __bz, int __no, int __dim, int __csz, ClassInfo __scl,
		ClassInfo[] __icl, ClassInfo __ccl, Class<?> __cop, int[] __vtv,
		int[] __vtp, int __pool, int __jardx)
	{
		// Always implicitly set magic
		this.magic = MAGIC_NUMBER;
		
		// Set
		this.selfptr = __sp;
		this.flags = __fl;
................................................................................
		this.interfaceclasses = (__icl == null ? new ClassInfo[0] : __icl);
		this.componentclass = __ccl;
		this.classobjptr = __cop;
		this.vtablevirtual = (__vtv == null ? new int[0] : __vtv);
		this.vtablepool = (__vtp == null ? new int[0] : __vtp);
		this.pool = __pool;
		this.jardx = __jardx;

	}
}








>
>
>







 







>





|







 







>



71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
..
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
...
123
124
125
126
127
128
129
130
131
132
133
	
	/** The pointer to the constant pool of this class. */
	public final int pool;
	
	/** The JAR this class is a part of. */
	public final int jardx;
	
	/** The total method count. */
	public final int nummethods;
	
	/**
	 * Class information constructor.
	 *
	 * @param __sp Self pointer.
	 * @param __fl Class information flags.
	 * @param __minip Pointer to the hardware class data in ROM.
	 * @param __namep The name pointer.
................................................................................
	 * @param __icl Interface classes.
	 * @param __ccl Component class.
	 * @param __cop Pointer to the class object.
	 * @param __vtv Virtual invoke VTable address.
	 * @param __vtp Virtual invoke VTable pool addresses.
	 * @param __pool The pointer to the class constant pool.
	 * @param __jardx The JAR Index.
	 * @param __nm The number of methods that are used.
	 * @since 2019/04/26
	 */
	public ClassInfo(int __sp, int __fl, int __minip, int __namep, int __sz,
		int __bz, int __no, int __dim, int __csz, ClassInfo __scl,
		ClassInfo[] __icl, ClassInfo __ccl, Class<?> __cop, int[] __vtv,
		int[] __vtp, int __pool, int __jardx, int __nm)
	{
		// Always implicitly set magic
		this.magic = MAGIC_NUMBER;
		
		// Set
		this.selfptr = __sp;
		this.flags = __fl;
................................................................................
		this.interfaceclasses = (__icl == null ? new ClassInfo[0] : __icl);
		this.componentclass = __ccl;
		this.classobjptr = __cop;
		this.vtablevirtual = (__vtv == null ? new int[0] : __vtv);
		this.vtablepool = (__vtp == null ? new int[0] : __vtp);
		this.pool = __pool;
		this.jardx = __jardx;
		this.nummethods = __nm;
	}
}

Changes to runt/klib/supervisor/cc/squirreljme/jvm/ClassInfo.java.

71
72
73
74
75
76
77



78
79
80
81
82
83
84
..
91
92
93
94
95
96
97

98
99
100
101
102
103
104
105
106
107
108
109
110
...
119
120
121
122
123
124
125

126
127
128
	
	/** The pointer to the constant pool of this class. */
	public final int pool;
	
	/** The JAR this class is a part of. */
	public final int jardx;
	



	/**
	 * Class information constructor.
	 *
	 * @param __sp Self pointer.
	 * @param __fl Class information flags.
	 * @param __minip Pointer to the hardware class data in ROM.
	 * @param __namep The name pointer.
................................................................................
	 * @param __icl Interface classes.
	 * @param __ccl Component class.
	 * @param __cop Pointer to the class object.
	 * @param __vtv Virtual invoke VTable address.
	 * @param __vtp Virtual invoke VTable pool addresses.
	 * @param __pool The pointer to the class constant pool.
	 * @param __jardx The JAR Index.

	 * @since 2019/04/26
	 */
	public ClassInfo(int __sp, int __fl, int __minip, int __namep, int __sz,
		int __bz, int __no, int __dim, int __csz, ClassInfo __scl,
		ClassInfo[] __icl, ClassInfo __ccl, Class<?> __cop, int[] __vtv,
		int[] __vtp, int __pool, int __jardx)
	{
		// Always implicitly set magic
		this.magic = MAGIC_NUMBER;
		
		// Set
		this.selfptr = __sp;
		this.flags = __fl;
................................................................................
		this.interfaceclasses = (__icl == null ? new ClassInfo[0] : __icl);
		this.componentclass = __ccl;
		this.classobjptr = __cop;
		this.vtablevirtual = (__vtv == null ? new int[0] : __vtv);
		this.vtablepool = (__vtp == null ? new int[0] : __vtp);
		this.pool = __pool;
		this.jardx = __jardx;

	}
}








>
>
>







 







>





|







 







>



71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
..
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
...
123
124
125
126
127
128
129
130
131
132
133
	
	/** The pointer to the constant pool of this class. */
	public final int pool;
	
	/** The JAR this class is a part of. */
	public final int jardx;
	
	/** The total method count. */
	public final int nummethods;
	
	/**
	 * Class information constructor.
	 *
	 * @param __sp Self pointer.
	 * @param __fl Class information flags.
	 * @param __minip Pointer to the hardware class data in ROM.
	 * @param __namep The name pointer.
................................................................................
	 * @param __icl Interface classes.
	 * @param __ccl Component class.
	 * @param __cop Pointer to the class object.
	 * @param __vtv Virtual invoke VTable address.
	 * @param __vtp Virtual invoke VTable pool addresses.
	 * @param __pool The pointer to the class constant pool.
	 * @param __jardx The JAR Index.
	 * @param __nm The number of methods that are used.
	 * @since 2019/04/26
	 */
	public ClassInfo(int __sp, int __fl, int __minip, int __namep, int __sz,
		int __bz, int __no, int __dim, int __csz, ClassInfo __scl,
		ClassInfo[] __icl, ClassInfo __ccl, Class<?> __cop, int[] __vtv,
		int[] __vtp, int __pool, int __jardx, int __nm)
	{
		// Always implicitly set magic
		this.magic = MAGIC_NUMBER;
		
		// Set
		this.selfptr = __sp;
		this.flags = __fl;
................................................................................
		this.interfaceclasses = (__icl == null ? new ClassInfo[0] : __icl);
		this.componentclass = __ccl;
		this.classobjptr = __cop;
		this.vtablevirtual = (__vtv == null ? new int[0] : __vtv);
		this.vtablepool = (__vtp == null ? new int[0] : __vtp);
		this.pool = __pool;
		this.jardx = __jardx;
		this.nummethods = __nm;
	}
}

Changes to runt/klib/supervisor/cc/squirreljme/jvm/lib/ClassInfoProperty.java.

83
84
85
86
87
88
89




90
91
92
93
94
95
	/** The pointer to the constant pool of this class. */
	public static final byte INT_POOL =
		16;
	
	/** The JAR Index. */
	public static final byte INT_JARDX =
		17;




	
	/** The number of properties available. */
	public static final byte NUM_PROPERTIES =
		18;
}








>
>
>
>



|


83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
	/** The pointer to the constant pool of this class. */
	public static final byte INT_POOL =
		16;
	
	/** The JAR Index. */
	public static final byte INT_JARDX =
		17;
	
	/** The number of methods the class has. */
	public static final byte INT_NUMMETHODS =
		18;
	
	/** The number of properties available. */
	public static final byte NUM_PROPERTIES =
		19;
}

Changes to runt/klib/supervisor/cc/squirreljme/jvm/lib/ClassInfoUtility.java.

65
66
67
68
69
70
71














72
73
74
75
76
77
78
...
172
173
174
175
176
177
178















179
180
181
182
183
184
185
...
285
286
287
288
289
290
291






























292
293
294
295
296
297
298
...
409
410
411
412
413
414
415





416
417
418
419
420
421
422
	 * @return The allocation size of this.
	 * @since 2019/11/30
	 */
	public final int classInfoAllocationSize()
	{
		return this.allocationsize;
	}














	
	/**
	 * Returns the object count of the class.
	 *
	 * @param __cl The class.
	 * @return The class object count.
	 * @throws NullPointerException On null arguments.
................................................................................
	 */
	public final void setMagicNumber(TaskClass __cl)
		throws NullPointerException
	{
		this.setProperty(__cl, ClassInfoProperty.INT_MAGIC,
			ClassFileConstants.MAGIC_NUMBER);
	}















	
	/**
	 * Sets the mini class pointer.
	 *
	 * @param __cl The class.
	 * @param __v The value to set.
	 * @throws NullPointerException On null arguments.
................................................................................
	{
		if (__su == null)
			throw new NullPointerException("NARG");
		
		this.setProperty(__cl, ClassInfoProperty.CLASSINFO_SUPERCLASS,
			__su.infoPointer());
	}






























	
	/**
	 * Initializes the {@code ClassInfo} utility.
	 *
	 * @param __cfp The class info parser to use.
	 * @return The utility for {@code ClassInfo}.
	 * @throws NullPointerException On null arguments.
................................................................................
					pdx = ClassInfoProperty.INT_POOL;
					break;
					
					// The JAR Index
				case "jardx:int":
					pdx = ClassInfoProperty.INT_JARDX;
					break;





				
				default:
					throw new todo.TODO(nat);
			}
			
			// Store
			props[pdx] = offset;







>
>
>
>
>
>
>
>
>
>
>
>
>
>







 







>
>
>
>
>
>
>
>
>
>
>
>
>
>
>







 







>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>







 







>
>
>
>
>







65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
...
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
...
314
315
316
317
318
319
320
321
322
323
324
325
326
327
328
329
330
331
332
333
334
335
336
337
338
339
340
341
342
343
344
345
346
347
348
349
350
351
352
353
354
355
356
357
...
468
469
470
471
472
473
474
475
476
477
478
479
480
481
482
483
484
485
486
	 * @return The allocation size of this.
	 * @since 2019/11/30
	 */
	public final int classInfoAllocationSize()
	{
		return this.allocationsize;
	}
	
	/**
	 * Returns the method count of the class.
	 *
	 * @param __cl The class.
	 * @return The class method count.
	 * @throws NullPointerException On null arguments.
	 * @since 2019/12/01
	 */
	public final int methodCount(TaskClass __cl)
		throws NullPointerException
	{
		return this.property(__cl, ClassInfoProperty.INT_NUMMETHODS);
	}
	
	/**
	 * Returns the object count of the class.
	 *
	 * @param __cl The class.
	 * @return The class object count.
	 * @throws NullPointerException On null arguments.
................................................................................
	 */
	public final void setMagicNumber(TaskClass __cl)
		throws NullPointerException
	{
		this.setProperty(__cl, ClassInfoProperty.INT_MAGIC,
			ClassFileConstants.MAGIC_NUMBER);
	}
	
	/**
	 * Sets the method count.
	 *
	 * @param __cl The class.
	 * @param __v The value to set.
	 * @throws NullPointerException On null arguments.
	 * @since 2019/12/01
	 */
	public final void setMethodCount(TaskClass __cl, int __v)
		throws NullPointerException
	{
		this.setProperty(__cl, ClassInfoProperty.INT_NUMMETHODS,
			__v);
	}
	
	/**
	 * Sets the mini class pointer.
	 *
	 * @param __cl The class.
	 * @param __v The value to set.
	 * @throws NullPointerException On null arguments.
................................................................................
	{
		if (__su == null)
			throw new NullPointerException("NARG");
		
		this.setProperty(__cl, ClassInfoProperty.CLASSINFO_SUPERCLASS,
			__su.infoPointer());
	}
	
	/**
	 * Sets the VTable pool array.
	 *
	 * @param __cl The class.
	 * @param __v The value to set.
	 * @throws NullPointerException On null arguments.
	 * @since 2019/12/01
	 */
	public final void setVTablePool(TaskClass __cl, int __v)
		throws NullPointerException
	{
		this.setProperty(__cl, ClassInfoProperty.INT_ARRAY_VTABLEPOOL,
			__v);
	}
	
	/**
	 * Sets the VTable method array.
	 *
	 * @param __cl The class.
	 * @param __v The value to set.
	 * @throws NullPointerException On null arguments.
	 * @since 2019/12/01
	 */
	public final void setVTableVirtual(TaskClass __cl, int __v)
		throws NullPointerException
	{
		this.setProperty(__cl, ClassInfoProperty.INT_ARRAY_VTABLEVIRTUAL,
			__v);
	}
	
	/**
	 * Initializes the {@code ClassInfo} utility.
	 *
	 * @param __cfp The class info parser to use.
	 * @return The utility for {@code ClassInfo}.
	 * @throws NullPointerException On null arguments.
................................................................................
					pdx = ClassInfoProperty.INT_POOL;
					break;
					
					// The JAR Index
				case "jardx:int":
					pdx = ClassInfoProperty.INT_JARDX;
					break;
					
					// The number of methods in the class
				case "nummethods:int":
					pdx = ClassInfoProperty.INT_NUMMETHODS;
					break;
				
				default:
					throw new todo.TODO(nat);
			}
			
			// Store
			props[pdx] = offset;

Changes to runt/klib/supervisor/cc/squirreljme/jvm/task/TaskAllocator.java.

75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
















































97
98
99
100
101
102
103
	 */
	public final int allocateArrayInt(TaskClass __cl, int... __v)
		throws NullPointerException
	{
		if (__cl == null || __v == null)
			throw new NullPointerException("NARG");
		
		// Count used to store the array size
		int count = __v.length;
		
		// Allocate array pointer
		int rv = this.allocateObject(__cl,
			Constants.ARRAY_BASE_SIZE + (count * 4));
		
		// Copy pointer values to the array
		int bp = rv + Constants.ARRAY_BASE_SIZE;
		for (int i = 0, wp = 0; i < count; i++, wp += 4)
			Assembly.memWriteInt(bp, wp, __v[i]);
		
		// Return the result of it
		return rv;
	}
















































	
	/**
	 * Allocates an object type.
	 *
	 * @param __sz The size of the object.
	 * @return The allocated bytes.
	 * @throws IllegalArgumentException If the allocation size is smaller







|

<
<
|
<









>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>







75
76
77
78
79
80
81
82
83


84

85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
	 */
	public final int allocateArrayInt(TaskClass __cl, int... __v)
		throws NullPointerException
	{
		if (__cl == null || __v == null)
			throw new NullPointerException("NARG");
		
		// Initialize base array
		int count = __v.length;


		int rv = this.allocateArrayIntEmpty(__cl, count);

		
		// Copy pointer values to the array
		int bp = rv + Constants.ARRAY_BASE_SIZE;
		for (int i = 0, wp = 0; i < count; i++, wp += 4)
			Assembly.memWriteInt(bp, wp, __v[i]);
		
		// Return the result of it
		return rv;
	}
	
	/**
	 * Allocates an integer sized array with the given values, no class type
	 * is set here.
	 *
	 * @param __n The number of elements in the array.
	 * @return The pointer to the allocated array.
	 * @throws NullPointerException On null arguments.
	 * @since 2019/12/01
	 */
	public final int allocateArrayIntEmpty(int __n)
		throws NullPointerException
	{
		// Allocate array pointer
		int rv = this.allocateObject(Constants.ARRAY_BASE_SIZE + (__n * 4));
		
		// Write array size
		Assembly.memWriteInt(rv, Constants.ARRAY_LENGTH_OFFSET, __n);
		
		// Use this
		return rv;
	}
	
	/**
	 * Allocates an integer sized array with the given values.
	 *
	 * @param __cl The class to set it as.
	 * @param __n The number of elements in the array.
	 * @return The pointer to the allocated array.
	 * @throws NullPointerException On null arguments.
	 * @since 2019/12/01
	 */
	public final int allocateArrayIntEmpty(TaskClass __cl, int __n)
		throws NullPointerException
	{
		if (__cl == null)
			throw new NullPointerException("NARG");
		
		// Allocate array pointer
		int rv = this.allocateObject(__cl,
			Constants.ARRAY_BASE_SIZE + (__n * 4));
		
		// Write array size
		Assembly.memWriteInt(rv, Constants.ARRAY_LENGTH_OFFSET, __n);
		
		// Use this
		return rv;
	}
	
	/**
	 * Allocates an object type.
	 *
	 * @param __sz The size of the object.
	 * @return The allocated bytes.
	 * @throws IllegalArgumentException If the allocation size is smaller

Changes to runt/klib/supervisor/cc/squirreljme/jvm/task/TaskClass.java.

187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
...
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280











281
282
283
284
285
286
287
...
288
289
290
291
292
293
294
295
296
297
298
299
300
301
302
303
304
305
306
307








308
309
310
311
312
313
314
		// the Object class because these are purely virtual!
		if (ClassNameUtils.isArray(__cl) || ClassNameUtils.isPrimitive(__cl))
		{
			// Load object class
			TaskClass tc = __task.loadClass("java/lang/Object");
			
			// Just use these directly
			this._vtablepoolpointer = (vtmp = tc._vtablepoolpointer);
			this._vtablemethodpointer = (vtpp = tc._vtablemethodpointer);
			
			// Return whatever was requested
			return (__rvpool ? vtpp : vtmp);
		}*/
	}
	
................................................................................
		String superclassname = Objects.toString(thisparser.superClassName(),
			null);
		TaskClass superclass = (superclassname == null ? null :
			__task.loadClass(superclassname));
		if (superclass != null)
			ciutil.setSuperClass(this, superclass);
		
		// Pre-allocate the class VTables since we may need to refer to them!
		if (true)
		{
			// INT_ARRAY_VTABLEVIRTUAL
			// INT_ARRAY_VTABLEPOOL
			throw new todo.TODO();
		}
		
		// The base for this class
		int basesize = (superclass == null ? 0 :
			ciutil.classAllocationSize(superclass));
		ciutil.setBaseSize(this, basesize);
		











		// Allocation size of this class
		ciutil.setClassAllocationSize(this,
			basesize + thisparser.fieldSize(false));
		
		// Set number of objects this has, for garbage collection
		ciutil.setObjectCount(this, thisparser.objectCount(false));
		
................................................................................
		// Initialize interfaces
		if (true)
		{
			// CLASSINFO_ARRAY_INTERFACECLASSES
			throw new todo.TODO();
		}
		
		// Setup the VTables for the class
		if (true)
		{
			// INT_ARRAY_VTABLEVIRTUAL
			// INT_ARRAY_VTABLEPOOL
			throw new todo.TODO();
		}
		
		// Initialize the actual pool constants now
		if (true)
		{
			throw new todo.TODO();
		}








		
		// All done! This class should hopefully work!
		return this;
	}
	
	/**
	 * Initializes a primitive type class.







|







 







<
<
<
<
<
<
<
<





>
>
>
>
>
>
>
>
>
>
>







 







|












>
>
>
>
>
>
>
>







187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
...
261
262
263
264
265
266
267








268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
286
287
288
289
290
...
291
292
293
294
295
296
297
298
299
300
301
302
303
304
305
306
307
308
309
310
311
312
313
314
315
316
317
318
319
320
321
322
323
324
325
		// the Object class because these are purely virtual!
		if (ClassNameUtils.isArray(__cl) || ClassNameUtils.isPrimitive(__cl))
		{
			// Load object class
			TaskClass tc = __task.loadClass("java/lang/Object");
			
			// Just use these directly
			this._vtpoolpointer = (vtmp = tc._vtpoolpointer);
			this._vtablemethodpointer = (vtpp = tc._vtablemethodpointer);
			
			// Return whatever was requested
			return (__rvpool ? vtpp : vtmp);
		}*/
	}
	
................................................................................
		String superclassname = Objects.toString(thisparser.superClassName(),
			null);
		TaskClass superclass = (superclassname == null ? null :
			__task.loadClass(superclassname));
		if (superclass != null)
			ciutil.setSuperClass(this, superclass);
		








		// The base for this class
		int basesize = (superclass == null ? 0 :
			ciutil.classAllocationSize(superclass));
		ciutil.setBaseSize(this, basesize);
		
		// Number of methods the class has
		int methodcount = (superclass != null ? ciutil.
			methodCount(superclass) : 0) + thisparser.methodCount(false);
		ciutil.setMethodCount(this, methodcount);
		
		// Pre-allocate the class VTables since we may need to refer to them!
		int vtvirtual = __task.allocator.allocateArrayIntEmpty(methodcount),
			vtpool = __task.allocator.allocateArrayIntEmpty(methodcount);
		ciutil.setVTableVirtual(this, vtvirtual);
		ciutil.setVTablePool(this, vtpool);
		
		// Allocation size of this class
		ciutil.setClassAllocationSize(this,
			basesize + thisparser.fieldSize(false));
		
		// Set number of objects this has, for garbage collection
		ciutil.setObjectCount(this, thisparser.objectCount(false));
		
................................................................................
		// Initialize interfaces
		if (true)
		{
			// CLASSINFO_ARRAY_INTERFACECLASSES
			throw new todo.TODO();
		}
		
		// Initialize the VTables for the class now
		if (true)
		{
			// INT_ARRAY_VTABLEVIRTUAL
			// INT_ARRAY_VTABLEPOOL
			throw new todo.TODO();
		}
		
		// Initialize the actual pool constants now
		if (true)
		{
			throw new todo.TODO();
		}
		
		// Set the class type for the vtable array last, since everything
		// is now setup with it!
		TaskClass intarrayclass = __task.loadClass("[I");
		Assembly.memWriteInt(vtvirtual, Constants.OBJECT_CLASS_OFFSET,
			intarrayclass.infoPointer());
		Assembly.memWriteInt(vtpool, Constants.OBJECT_CLASS_OFFSET,
			intarrayclass.infoPointer());
		
		// All done! This class should hopefully work!
		return this;
	}
	
	/**
	 * Initializes a primitive type class.

Changes to runt/libs/tool-jarfile/dev/shadowtail/jarfile/LoadedClassInfo.java.

487
488
489
490
491
492
493





494
495
496
497
498
499
500
					
					// Pointer to the class name
				case "namep:I":
					initializer.memWriteInt(Modifier.JAR_OFFSET,
						wp, this.romOffset() + this.poolEntryOffset(
						this._class.thisName().toString()) + 4);
					break;





					
					// The number of objects in this class
				case "numobjects:I":
					initializer.memWriteInt(
						wp, this._class.header.ifobjs);
					break;
					







>
>
>
>
>







487
488
489
490
491
492
493
494
495
496
497
498
499
500
501
502
503
504
505
					
					// Pointer to the class name
				case "namep:I":
					initializer.memWriteInt(Modifier.JAR_OFFSET,
						wp, this.romOffset() + this.poolEntryOffset(
						this._class.thisName().toString()) + 4);
					break;
					
					// The number of available methods
				case "nummethods:I":
					initializer.memWriteInt(wp, this.methodSize());
					break;
					
					// The number of objects in this class
				case "numobjects:I":
					initializer.memWriteInt(
						wp, this._class.header.ifobjs);
					break;