History

My first initial commit with all of mine experimental changes.

Dmitry Kabak (userdima committed 13 years ago

Commit d37b88d1 parent 3f5b46618352 files · +2598093 −-8690Browse files

Showing the changes to java/pkg2/java/lang (121 of 18352 files). Show all

Unified · Split

121 files
  1. java/pkg2/java/lang/AbstractMethodError.java +0 −0
  2. java/pkg2/java/lang/ArithmeticException.java +0 −0
  3. java/pkg2/java/lang/ArrayIndexOutOfBoundsException.java +0 −0
  4. java/pkg2/java/lang/ArrayStoreException.java +0 −0
  5. java/pkg2/java/lang/Boolean.java +0 −0
  6. java/pkg2/java/lang/Byte.java +0 −0
  7. java/pkg2/java/lang/Character.java +0 −0
  8. java/pkg2/java/lang/Character_L.b +63 −0
  9. java/pkg2/java/lang/Character_L.m +14 −0
  10. java/pkg2/java/lang/Class.java +0 −0
  11. java/pkg2/java/lang/ClassCastException.java +0 −0
  12. java/pkg2/java/lang/ClassCircularityError.java +0 −0
  13. java/pkg2/java/lang/ClassFormatError.java +0 −0
  14. java/pkg2/java/lang/ClassLoader.java +0 −0
  15. java/pkg2/java/lang/ClassLoader_L.b +82 −0
  16. java/pkg2/java/lang/ClassLoader_L.m +20 −0
  17. java/pkg2/java/lang/ClassNotFoundException.java +0 −0
  18. java/pkg2/java/lang/Class_L.b +778 −0
  19. java/pkg2/java/lang/Class_L.m +30 −0
  20. java/pkg2/java/lang/CloneNotSupportedException.java +0 −0
  21. java/pkg2/java/lang/Cloneable.java +0 −0
  22. java/pkg2/java/lang/Compiler.java +0 −0
  23. java/pkg2/java/lang/Double.java +0 −0
  24. java/pkg2/java/lang/Double_L.b +66 −0
  25. java/pkg2/java/lang/Double_L.m +17 −0
  26. java/pkg2/java/lang/Error.java +0 −0
  27. java/pkg2/java/lang/Exception.java +0 −0
  28. java/pkg2/java/lang/ExceptionInInitializerE..a +73 −0
  29. java/pkg2/java/lang/Float.java +0 −0
  30. java/pkg2/java/lang/Float_L.b +60 −0
  31. java/pkg2/java/lang/Float_L.m +16 −0
  32. java/pkg2/java/lang/IllegalAccessError.java +0 −0
  33. java/pkg2/java/lang/IllegalAccessException.java +0 −0
  34. java/pkg2/java/lang/IllegalArgumentException.java +0 −0
  35. java/pkg2/java/lang/IllegalMonitorStateException.java +0 −0
  36. java/pkg2/java/lang/IllegalStateException.java +0 −0
  37. java/pkg2/java/lang/IllegalThreadStateExcep..a +0 −0
  38. java/pkg2/java/lang/IncompatibleClassChange..a +0 −0
  39. java/pkg2/java/lang/IndexOutOfBoundsExcepti..a +0 −0
  40. java/pkg2/java/lang/InfernoProcess.java +0 −0
  41. java/pkg2/java/lang/InfernoProcess_L.b +207 −0
  42. java/pkg2/java/lang/InfernoProcess_L.m +22 −0
  43. java/pkg2/java/lang/InstantiationError.java +0 −0
  44. java/pkg2/java/lang/InstantiationException.java +0 −0
  45. java/pkg2/java/lang/Integer.java +0 −0
  46. java/pkg2/java/lang/InternalError.java +0 −0
  47. java/pkg2/java/lang/InterruptedException.java +0 −0
  48. java/pkg2/java/lang/LinkageError.java +0 −0
  49. java/pkg2/java/lang/Long.java +0 −0
  50. java/pkg2/java/lang/Math.java +0 −0
  51. java/pkg2/java/lang/Math_L.b +119 −0
  52. java/pkg2/java/lang/Math_L.m +27 −0
  53. java/pkg2/java/lang/NegativeArraySizeExcept..a +0 −0
  54. java/pkg2/java/lang/NoClassDefFoundError.java +0 −0
  55. java/pkg2/java/lang/NoSuchFieldError.java +0 −0
  56. java/pkg2/java/lang/NoSuchFieldException.java +0 −0
  57. java/pkg2/java/lang/NoSuchMethodError.java +0 −0
  58. java/pkg2/java/lang/NoSuchMethodException.java +0 −0
  59. java/pkg2/java/lang/NullPointerException.java +0 −0
  60. java/pkg2/java/lang/Number.java +0 −0
  61. java/pkg2/java/lang/NumberFormatException.java +0 −0
  62. java/pkg2/java/lang/Object.java +0 −0
  63. java/pkg2/java/lang/Object_L.b +71 −0
  64. java/pkg2/java/lang/Object_L.m +14 −0
  65. java/pkg2/java/lang/OutOfMemoryError.java +0 −0
  66. java/pkg2/java/lang/Process.java +0 −0
  67. java/pkg2/java/lang/Runnable.java +0 −0
  68. java/pkg2/java/lang/Runtime.java +0 −0
  69. java/pkg2/java/lang/RuntimeException.java +0 −0
  70. java/pkg2/java/lang/Runtime_L.b +161 −0
  71. java/pkg2/java/lang/Runtime_L.m +20 −0
  72. java/pkg2/java/lang/SecurityException.java +0 −0
  73. java/pkg2/java/lang/SecurityManager.java +0 −0
  74. java/pkg2/java/lang/SecurityManager_L.b +175 −0
  75. java/pkg2/java/lang/SecurityManager_L.m +19 −0
  76. java/pkg2/java/lang/Short.java +0 −0
  77. java/pkg2/java/lang/StackOverflowError.java +0 −0
  78. java/pkg2/java/lang/String.java +0 −0
  79. java/pkg2/java/lang/StringBuffer.java +0 −0
  80. java/pkg2/java/lang/StringBuffer_L.b +359 −0
  81. java/pkg2/java/lang/StringBuffer_L.m +42 −0
  82. java/pkg2/java/lang/StringIndexOutOfBoundsE..a +0 −0
  83. java/pkg2/java/lang/String_L.b +517 −0
  84. java/pkg2/java/lang/String_L.m +30 −0
  85. java/pkg2/java/lang/System.java +0 −0
  86. java/pkg2/java/lang/System_L.b +133 −0
  87. java/pkg2/java/lang/System_L.m +20 −0
  88. java/pkg2/java/lang/Thread.java +0 −0
  89. java/pkg2/java/lang/ThreadDeath.java +0 −0
  90. java/pkg2/java/lang/ThreadGroup.java +0 −0
  91. java/pkg2/java/lang/Thread_L.b +455 −0
  92. java/pkg2/java/lang/Thread_L.m +21 −0
  93. java/pkg2/java/lang/Throwable.java +0 −0
  94. java/pkg2/java/lang/Throwable_L.b +96 −0
  95. java/pkg2/java/lang/Throwable_L.m +16 −0
  96. java/pkg2/java/lang/UnknownError.java +0 −0
  97. java/pkg2/java/lang/UnsatisfiedLinkError.java +0 −0
  98. java/pkg2/java/lang/VerifyError.java +0 −0
  99. java/pkg2/java/lang/VirtualMachineError.java +0 −0
  100. java/pkg2/java/lang/Void.java +0 −0
  101. java/pkg2/java/lang/mkfile +152 −0
  102. java/pkg2/java/lang/reflect/Array.java +0 −0
  103. java/pkg2/java/lang/reflect/Array_L.b +417 −0
  104. java/pkg2/java/lang/reflect/Array_L.m +33 −0
  105. java/pkg2/java/lang/reflect/Constructor.java +0 −0
  106. java/pkg2/java/lang/reflect/Constructor_L.b +90 −0
  107. java/pkg2/java/lang/reflect/Constructor_L.m +18 −0
  108. java/pkg2/java/lang/reflect/Field.java +0 −0
  109. java/pkg2/java/lang/reflect/Field_L.b +469 −0
  110. java/pkg2/java/lang/reflect/Field_L.m +35 −0
  111. java/pkg2/java/lang/reflect/InvocationTargetExcepti..a +0 −0
  112. java/pkg2/java/lang/reflect/Member.java +0 −0
  113. java/pkg2/java/lang/reflect/Method.java +0 −0
  114. java/pkg2/java/lang/reflect/Method_L.b +117 −0
  115. java/pkg2/java/lang/reflect/Method_L.m +20 −0
  116. java/pkg2/java/lang/reflect/Modifier.java +0 −0
  117. java/pkg2/java/lang/reflect/mkfile +46 −0
  118. java/pkg2/java/lang/reflect/reflect.b +327 −0
  119. java/pkg2/java/lang/reflect/reflect.m +19 −0
  120. java/pkg2/java/lang/unicode_table.b +1285 −0
  121. java/pkg2/java/lang/unicode_table.m +8 −0
java/pkg2/java/lang/AbstractMethodError.java+0−0

Empty file added.

java/pkg2/java/lang/ArithmeticException.java+0−0

Empty file added.

java/pkg2/java/lang/ArrayIndexOutOfBoundsException.java+0−0

Empty file added.

java/pkg2/java/lang/ArrayStoreException.java+0−0

Empty file added.

java/pkg2/java/lang/Boolean.java+0−0

Empty file added.

java/pkg2/java/lang/Byte.java+0−0

Empty file added.

java/pkg2/java/lang/Character.java+0−0

Empty file added.

java/pkg2/java/lang/Character_L.b+63−0
@@ -0,0 +1,63 @@
1+implement Character_L;
2+
3+# javal v1.3 generated file: edit with care
4+
5+include "jni.m";
6+ jni : JNI;
7+ ClassModule,
8+ JString,
9+ JArray,
10+ JArrayI,
11+ JArrayC,
12+ JArrayB,
13+ JArrayS,
14+ JArrayJ,
15+ JArrayF,
16+ JArrayD,
17+ JArrayZ,
18+ JArrayJObject,
19+ JArrayJClass,
20+ JArrayJString,
21+ JClass,
22+ JThread,
23+ JObject : import jni;
24+
25+#>> extra pre includes here
26+
27+#<<
28+
29+include "Character_L.m";
30+
31+#>> extra post includes here
32+
33+include "unicode_table.m";
34+
35+unicode_table : UnicodeTable;
36+ A,
37+ Y,
38+ X : import unicode_table;
39+
40+#<<
41+
42+init( jni_p : JNI )
43+{
44+ # save java native inteface mod instance
45+ jni = jni_p;
46+ #>>extra initialization here
47+ #<<
48+}
49+
50+lookup_C_I( p0 : int) : int
51+{#>>
52+ if ( unicode_table == nil )
53+ loadtable();
54+
55+ return( A[Y[(X[p0>>6]<<6)|(p0& 16r3F)]] );
56+}#<<
57+
58+loadtable()
59+{
60+ unicode_table = load UnicodeTable UnicodeTable->PATH;
61+ if ( unicode_table == nil )
62+ jni->InitError( jni->sys->sprint( "java.lang.Character: could not load %s: %r", UnicodeTable->PATH ) );
63+}
java/pkg2/java/lang/Character_L.m+14−0
@@ -0,0 +1,14 @@
1+# javal v1.3 generated file: edit with care
2+
3+Character_L : module
4+{
5+ Character_obj : adt
6+ {
7+ cl_mod : ClassModule;
8+ value : int;
9+ };
10+
11+ init : fn( jni_p : JNI );
12+ lookup_C_I : fn( p0 : int) : int;
13+
14+};
java/pkg2/java/lang/Class.java+0−0

Empty file added.

java/pkg2/java/lang/ClassCastException.java+0−0

Empty file added.

java/pkg2/java/lang/ClassCircularityError.java+0−0

Empty file added.

java/pkg2/java/lang/ClassFormatError.java+0−0

Empty file added.

java/pkg2/java/lang/ClassLoader.java+0−0

Empty file added.

java/pkg2/java/lang/ClassLoader_L.b+82−0
@@ -0,0 +1,82 @@
1+implement ClassLoader_L;
2+
3+# javal v1.2 generated file: edit with care
4+
5+include "jni.m";
6+ jni : JNI;
7+ ClassModule,
8+ JString,
9+ JArray,
10+ JArrayI,
11+ JArrayC,
12+ JArrayB,
13+ JArrayS,
14+ JArrayJ,
15+ JArrayF,
16+ JArrayD,
17+ JArrayZ,
18+ JArrayJObject,
19+ JArrayJClass,
20+ JArrayJString,
21+ JClass,
22+ JObject : import jni;
23+
24+#>> extra pre includes here
25+
26+#<<
27+
28+include "ClassLoader_L.m";
29+
30+#>> extra post includes here
31+
32+#<<
33+
34+init( jni_p : JNI )
35+{
36+ # save java native inteface mod instance
37+ jni = jni_p;
38+ #>>extra initialization here
39+ #<<
40+}
41+
42+init_V( this : ref ClassLoader_obj)
43+{#>>
44+ junk := this;
45+}#<<
46+
47+defineClass0_rString_aB_I_I_rClass( this : ref ClassLoader_obj, p0 : JString,p1 : JArrayB,p2 : int,p3 : int) : JClass
48+{#>>
49+ junk := (this,p0,p1,p2,p3);
50+ jni->ThrowException( "java.lang.ClassNotFoundException", "not implemented" );
51+ return( nil );
52+}#<<
53+
54+resolveClass0_rClass_V( this : ref ClassLoader_obj, p0 : JClass)
55+{#>>
56+ junk := (this,p0);
57+ jni->FatalError( "resolveClass() not implemented" );
58+}#<<
59+
60+findSystemClass0_rString_rClass( this : ref ClassLoader_obj, p0 : JString) : JClass
61+{#>>
62+ junk := (this,p0);
63+ jni->FatalError( "findSystemClass() not implemented" );
64+ return( nil );
65+}#<<
66+
67+getSystemResourceAsStream0_rString_rInputStream( p0 : JString) : JObject
68+{#>>
69+ junk := p0;
70+ jni->FatalError( "getSystemResourceAsStream() not implemented" );
71+ return( nil );
72+}#<<
73+
74+getSystemResourceAsName0_rString_rString( p0 : JString) : JString
75+{#>>
76+ junk := p0;
77+ jni->FatalError( "getSystemResourceAsName() not implemented" );
78+ return( nil );
79+}#<<
80+
81+
82+
java/pkg2/java/lang/ClassLoader_L.m+20−0
@@ -0,0 +1,20 @@
1+# javal v1.2 generated file: edit with care
2+
3+ClassLoader_L : module
4+{
5+ ClassLoader_obj : adt
6+ {
7+ cl_mod : ClassModule;
8+ initialized : int;
9+ classes : JObject;
10+ };
11+
12+ init : fn( jni_p : JNI );
13+ init_V : fn( this : ref ClassLoader_obj);
14+ defineClass0_rString_aB_I_I_rClass : fn( this : ref ClassLoader_obj, p0 : JString,p1 : JArrayB,p2 : int,p3 : int) : JClass;
15+ resolveClass0_rClass_V : fn( this : ref ClassLoader_obj, p0 : JClass);
16+ findSystemClass0_rString_rClass : fn( this : ref ClassLoader_obj, p0 : JString) : JClass;
17+ getSystemResourceAsStream0_rString_rInputStream : fn( p0 : JString) : JObject;
18+ getSystemResourceAsName0_rString_rString : fn( p0 : JString) : JString;
19+
20+};
java/pkg2/java/lang/ClassNotFoundException.java+0−0

Empty file added.

java/pkg2/java/lang/Class_L.b+778−0
@@ -0,0 +1,778 @@
1+implement Class_L;
2+
3+# javal v1.2 generated file: edit with care
4+
5+include "jni.m";
6+ jni : JNI;
7+ ClassModule,
8+ JString,
9+ JArray,
10+ JArrayI,
11+ JArrayC,
12+ JArrayB,
13+ JArrayS,
14+ JArrayJ,
15+ JArrayF,
16+ JArrayD,
17+ JArrayZ,
18+ JArrayJObject,
19+ JArrayJClass,
20+ JArrayJString,
21+ JClass,
22+ JObject : import jni;
23+
24+#>> extra pre includes here
25+
26+ jldr : JavaClassLoader;
27+ cast : Cast;
28+
29+#<<
30+
31+include "Class_L.m";
32+
33+#>> extra post includes here
34+
35+ ClassData,
36+ Value : import jni;
37+
38+include "reflect/reflect.m";
39+ refl : Reflect;
40+
41+#<<
42+
43+init( jni_p : JNI )
44+{
45+ # save java native inteface mod instance
46+ jni = jni_p;
47+ #>>extra initialization here
48+ jldr = jni->jldr;
49+ cast = jni->CastMod();
50+ #<<
51+}
52+
53+forName_rString_rClass( p0 : JString) : JClass
54+{#>>
55+ e := ref Sys->Exception;
56+ if (jni->sys->rescue("JLD:e0*", e) == Sys->HANDLER)
57+ {
58+ if ( p0.str != nil && p0.str[0] == '[' )
59+ return( jni->LookupArrayClass(p0.str) );
60+ else
61+ return( jni->GetClassObject( jni->FindClass(p0.str) ) );
62+ }
63+
64+ jni->sys->rescued(Sys->ONCE, nil);
65+ # turn into a ClassNotFoundException
66+ jni->ThrowException( "java.lang.ClassNotFoundException", p0.str );
67+ return(nil);
68+}#<<
69+
70+newInstance_rObject( this : JClass) : JObject
71+{#>>
72+ if ( this.class.flags & (JNI->ACC_INTERFACE | JNI->ACC_ABSTRACT) ) {
73+ s : string;
74+ if ( isPrimitive_Z(this) == JNI->TRUE )
75+ s = this.class.name[len "inferno/vm/":len this.class.name - 2];
76+ else if ( this.aryname != nil )
77+ s = this.aryname;
78+ else
79+ s = this.class.name;
80+ jni->ThrowException( "java.lang.InstantiationException", s );
81+ }
82+ # create new object for the given class
83+ return( jni->NewObject(this.class) );
84+}#<<
85+
86+isInstance_rObject_Z( this : JClass, p0 : JObject) : int
87+{#>>
88+ return( jni->IsInstanceOf( p0, this.class ) );
89+}#<<
90+
91+isAssignableFrom_rClass_Z( this : JClass, p0 : JClass) : int
92+{#>>
93+ return( jni->IsAssignable( p0, this ) );
94+}#<<
95+
96+isInterface_Z( this : JClass) : int
97+{#>>
98+ return( this.class.flags & JNI->ACC_INTERFACE );
99+}#<<
100+
101+isArray_Z( this : JClass) : int
102+{#>>
103+ return( this.class.name == "inferno/vm/Array" );
104+}#<<
105+
106+isPrimitive_Z( this : JClass) : int
107+{#>>
108+ ret : int;
109+ if ( jni->PrimitiveIndex(this, 0) > 0 )
110+ ret = JNI->TRUE;
111+ else
112+ ret = JNI->FALSE;
113+ return ret;
114+}#<<
115+
116+getName_rString( this : JClass) : JString
117+{#>>
118+ name : string;
119+ if ( isPrimitive_Z(this) == JNI->TRUE )
120+ {
121+ # mk primitive name from a slice
122+ name = this.class.name[len "inferno/vm/":len this.class.name - 2];
123+ }
124+ else
125+ {
126+ if ( this.aryname != nil )
127+ {
128+ name = this.aryname;
129+ }
130+ else
131+ {
132+ name = this.class.name;
133+ }
134+ # change slashes to dots
135+ for ( i := 0; i < len name; i++ )
136+ if ( name[i] == '/' )
137+ name[i] = '.';
138+ }
139+ return( jni->NewString( name ) );
140+}#<<
141+
142+getClassLoader_rClassLoader( this : JClass) : JObject
143+{#>>
144+ junk := (this);
145+ jni->FatalError( "getClassLoader() not implemented" );
146+ return(nil);
147+}#<<
148+
149+getSuperclass_rClass( this : JClass) : JClass
150+{#>>
151+ if ( isPrimitive_Z(this) == JNI->TRUE
152+ || this.class.flags & JNI->ACC_INTERFACE )
153+ return nil;
154+ if ( (superclass := jni->GetSuperclass(this.class)) == nil )
155+ return nil;
156+ return( jni->GetClassObject( superclass ) );
157+}#<<
158+
159+getInterfaces_aClass( this : JClass) : JArrayJClass
160+{#>>
161+ n : int;
162+ # kludge for arrays to be consistent with JavaSoft's VM
163+ if ( isArray_Z(this) )
164+ n = 0;
165+ else
166+ n = len this.class.interdirect;
167+ interface := array [n] of JObject;
168+ il := this.class.interdirect;
169+ for (i := n-1; i >= 0; i--) {
170+ interface[i] = cast->FromJClass(jni->GetClassObject(hd il));
171+ il = tl il;
172+ }
173+ classarray := cast->JArrayToClass(cast->ObjectToJArray(jni->MkAObject(interface)));
174+ classarray.class = jni->FindClass("java/lang/Class");
175+ return classarray;
176+}#<<
177+
178+getComponentType_rClass(this : JClass) : JClass
179+{#>>
180+ if(this == nil || this.aryname == nil)
181+ return nil;
182+
183+ name : string;
184+ c := this.aryname[1];
185+ if(c == '[') {
186+ return jni->LookupArrayClass(this.aryname[1:]);
187+ } else {
188+ if(c == 'L') {
189+ name = this.aryname[2:len this.aryname - 1];
190+ } else {
191+ getReflect();
192+ name = "inferno/vm/" + refl->TypeCharToName(c) + "_p";
193+ }
194+ return jni->GetClassObject(jni->FindClass(name));
195+ }
196+}#<<
197+
198+getModifiers_I( this : JClass) : int
199+{#>>
200+ return( this.class.flags & (~ JNI->ACC_SYNCHRONIZED));
201+}#<<
202+
203+getSigners_aObject( this : JClass) : JArrayJObject
204+{#>>
205+ junk := (this);
206+ jni->FatalError( "getSigners() not implemented" );
207+ return(nil);
208+}#<<
209+
210+setSigners_aObject_V( this : JClass, p0 : JArrayJObject)
211+{#>>
212+ junk := (this,p0);
213+ jni->FatalError( "setSigners() not implemented" );
214+}#<<
215+
216+getPrimitiveClass_rString_rClass( p0 : JString) : JClass
217+{#>>
218+ e := ref Sys->Exception;
219+ if (jni->sys->rescue("JLD:e0*", e) == Sys->HANDLER)
220+ {
221+ return( jni->GetClassObject(jni->FindClass("inferno/vm/"+ p0.str +"_p")) );
222+ }
223+ return(nil);
224+}#<<
225+
226+getFields0_I_aField( this : JClass, p0 : int) : JArrayJObject
227+{#>>
228+# 'this' represents the class whose fields are wanted.
229+# p0 == 0 for PUBLIC members (includes inherited members)
230+# p0 == 1 for DECLARED members (All members but not inherited members)
231+
232+ objs : list of JObject;
233+ if ( !isArray_Z(this) )
234+ objs = getFields(this, p0);
235+
236+ obj_array := array[len objs] of JObject;
237+ for ( i := 0; objs != nil ; i++ ) {
238+ obj_array[i] = hd objs;
239+ objs = tl objs;
240+ }
241+
242+ fieldarray := jni->MkAObject(obj_array);
243+ fieldarray.class = jni->FindClass("java/lang/reflect/Field");
244+ return fieldarray;
245+}#<<
246+
247+getMethods0_I_aMethod( this : JClass, p0 : int) : JArrayJObject
248+{#>>
249+# 'this' represents the class whose methods are wanted.
250+# p0 == 0 for PUBLIC members (includes inherited members)
251+# p0 == 1 for DECLARED members (All members but not inherited members)
252+
253+ objs : list of JObject;
254+
255+ # if primitive or interface, filter out java.lang.Object methods
256+ if ( isPrimitive_Z(this) == JNI->TRUE
257+ || this.class.flags & JNI->ACC_INTERFACE )
258+ p0 = 1;
259+ objs = getMethods(this, p0);
260+
261+ obj_array := array[len objs] of JObject;
262+ for ( i := 0; objs != nil ; i++ ) {
263+ obj_array[i] = hd objs;
264+ objs = tl objs;
265+ }
266+
267+ methodarray := jni->MkAObject(obj_array);
268+ methodarray.class = jni->FindClass("java/lang/reflect/Method");
269+ return methodarray;
270+}#<<
271+
272+getConstructors0_I_aConstructor( this : JClass, p0 : int) : JArrayJObject
273+{#>>
274+# 'this' represents the class whose constructors are wanted.
275+# p0 == 0 for PUBLIC members (includes inherited members)
276+# p0 == 1 for DECLARED members (All members but not inherited members)
277+
278+ objs : list of JObject;
279+ if ( isPrimitive_Z(this) == JNI->FALSE && !isArray_Z(this) )
280+ objs = getConstructors(this, p0);
281+
282+ obj_array := array[len objs] of JObject;
283+ for ( i := 0; objs != nil ; i++ ) {
284+ obj_array[i] = hd objs;
285+ objs = tl objs;
286+ }
287+
288+ constructorarray := jni->MkAObject(obj_array);
289+ constructorarray.class = jni->FindClass("java/lang/reflect/Constructor");
290+ return constructorarray;
291+}#<<
292+
293+getField0_rString_I_rField( this : JClass, p0 : JString,p1 : int) : JObject
294+{#>>
295+# 'this' represents the class for which a Field is desired.
296+# p0 is the name of the field.
297+# p1 == 0 for PUBLIC members (includes inherited members)
298+# p1 == 1 for DECLARED members (All members but not inherited members)
299+
300+ staticfields := this.class.staticdata;
301+ flg : int;
302+ fld : ref jldr->Field;
303+ for ( i := 0; i < len staticfields; i++ ) {
304+ fld = staticfields[i];
305+ flg = fld.flags;
306+ if ( fld.field == p0.str &&
307+ (p1 != 0 || (flg & JNI->ACC_PUBLIC) != 0) )
308+ break;
309+ }
310+ if ( i >= len staticfields ) { # Not a public static field
311+ super : list of ref jldr->Field = nil;
312+ if ( (superclass := jni->GetSuperclass(this.class)) != nil &&
313+ superclass != this.class )
314+ super = superclass.objectdata;
315+ objfields := this.class.objectdata;
316+ for ( i = 0; objfields != nil; i++ ) {
317+ if ( p1 == 1 && objfields == super ) # exclude inherited
318+ break;
319+ fld = hd objfields;
320+ flg = fld.flags;
321+ if ( fld.field == p0.str &&
322+ (p1 != 0 || (flg & JNI->ACC_PUBLIC) != 0) )
323+ break;
324+ objfields = tl objfields;
325+ }
326+ if ( objfields == super || objfields == nil )
327+ i = len staticfields + len this.class.objectdata;
328+ }
329+ if ( i >= len staticfields + len this.class.objectdata ) {
330+ jni->ThrowException("java/lang/NoSuchFieldException", "");
331+ return nil;
332+ }
333+ return makeField(this, fld, i);
334+}#<<
335+
336+getMethod0_rString_aClass_I_rMethod( this : JClass, p0 : JString,p1 : JArrayJClass,p2 : int) : JObject
337+{#>>
338+# 'this' represents the class for which a Method is desired.
339+# p0 is the name of the method.
340+# p1 is a Java array of Class objects, corresponding to the formal parameters
341+# of the method for which a Method object is desired. The array
342+# is used to construct a signature string which can be matched against
343+# data compiled by the classloader.
344+# p2 == 0 for PUBLIC members (includes inherited members)
345+# p2 == 1 for DECLARED members (All members but not inherited members)
346+
347+ signatur := "(" + MakeSignature(p1) + ")";
348+
349+ methods := this.class.staticmethods;
350+ for ( i := 0; i < len methods; i++ ) {
351+ fld := methods[i];
352+ if ( fld.field == p0.str && jni->str->prefix(signatur, fld.signature) &&
353+ (p2 != 0 || (fld.flags & JNI->ACC_PUBLIC) != 0) )
354+ return makeMethod(this, fld, i, p1, fld.signature[len signatur:]);
355+ }
356+ methods = this.class.privatemethods;
357+ for ( i = 0; i < len methods; i++ ) {
358+ fld := methods[i];
359+ if ( fld.field == p0.str && jni->str->prefix(signatur, fld.signature) &&
360+ (p2 != 0 || (fld.flags & JNI->ACC_PUBLIC) != 0) )
361+ return makeMethod(this, fld, i, p1, fld.signature[len signatur:]);
362+ }
363+ vmethods := this.class.virtualmethods;
364+ for ( i = 0; i < len vmethods; i++ ) {
365+ fld := vmethods[i].field;
366+ if ( fld.field == p0.str && jni->str->prefix(signatur, fld.signature) &&
367+ ((p2 != 0 && this.class == vmethods[i].class)
368+ || (fld.flags & JNI->ACC_PUBLIC) != 0) ) {
369+ if ( vmethods[i].class != this.class )
370+ this = jni->GetClassObject(vmethods[i].class);
371+ return makeMethod(this, fld, i, p1, fld.signature[len signatur:]);
372+ }
373+ }
374+ jni->ThrowException("java/lang/NoSuchMethodException", "");
375+ return nil;
376+}#<<
377+
378+getConstructor0_aClass_I_rConstructor( this : JClass, p0 : JArrayJClass,p1 : int) : JObject
379+{#>>
380+# 'this' represents the class for which a Constructor is desired.
381+# p0 is a Java array of Class objects, corresponding to the formal parameters
382+# of the constructor for which a Constructor object is desired. The array
383+# is used to construct a signature string which can be matched against
384+# data compiled by the classloader.
385+# p1 == 0 for PUBLIC members (includes inherited members)
386+# p1 == 1 for DECLARED members (All members but not inherited members)
387+
388+ signatur := "(" + MakeSignature(p0) + ")";
389+
390+ initmethods := this.class.initmethods;
391+ flg : int;
392+ fld : ref jldr->Field;
393+ for ( i := 0; i < len initmethods; i++ ) {
394+ fld = initmethods[i];
395+ flg = fld.flags;
396+ if ( jni->str->prefix(signatur, fld.signature) &&
397+ (p1 != 0 || (flg & JNI->ACC_PUBLIC) != 0) )
398+ break;
399+ }
400+ if ( i >= len initmethods ) {
401+ jni->ThrowException("java/lang/NoSuchMethodException", "");
402+ return nil;
403+ }
404+ return makeMethod(this, fld, i, p0, nil);
405+}#<<
406+
407+#
408+# getPublicStaticFields() and doInterfaces() are helper
409+# functions for getFields().
410+#
411+
412+#
413+# Return list of public static fields of this class.
414+#
415+
416+getPublicStaticFields(this : JClass, objs : list of JObject) : list of JObject
417+{
418+ flds := this.class.staticdata;
419+ for ( i := len flds - 1; i >= 0; i-- )
420+ if ( (flds[i].flags & JNI->ACC_PUBLIC) != 0 )
421+ objs = makeField(this, flds[i], i) :: objs;
422+ return objs;
423+}
424+
425+#
426+# Recursively (for superinterfaces) call getPublicStaticFields()
427+# on interfaces of this class.
428+#
429+
430+ifacelist: list of JClass;
431+
432+doInterfaces(this : JClass, objs : list of JObject) : list of JObject
433+{
434+ ifaces := this.class.interfaces;
435+outer: for ( i := 0; i < len ifaces; i++ ) {
436+ iface := jni->GetClassObject(ifaces[i].class);
437+ for ( l := ifacelist; l != nil; l = tl l )
438+ if ( hd l == iface )
439+ continue outer;
440+ ifacelist = iface :: ifacelist;
441+ objs = getPublicStaticFields(iface, objs);
442+ objs = doInterfaces(iface, objs);
443+ }
444+ return objs;
445+}
446+
447+#
448+# A helper function that gets fields for the class represented
449+# by this. p0 == 0 => PUBLIC fields, p0 == 1 => DECLARED fields.
450+# Candidate fields are found in the loader array staticdata (for
451+# static fields) and list objectdata (for instance fields).
452+#
453+
454+getFields(this : JClass, p0 : int) : list of JObject
455+{
456+ objs : list of JObject;
457+
458+ # get instance fields
459+ objdata := this.class.objectdata;
460+ flds := array[len objdata] of ref jldr->Field;
461+ super : list of ref jldr->Field = nil;
462+ if ( (superclass := jni->GetSuperclass(this.class)) != nil )
463+ super = superclass.objectdata;
464+ for ( i := 0; objdata != nil; i++ ) {
465+ if ( p0 == 1 && objdata == super )
466+ break;
467+ flds[i] = hd objdata;
468+ objdata = tl objdata;
469+ }
470+ # need to associate declaring class with each instance field ???
471+ for ( i--; i >= 0; i-- )
472+ if ( p0 != 0 || (flds[i].flags & JNI->ACC_PUBLIC) != 0 )
473+ objs = makeField(this, flds[i], i) :: objs;
474+
475+ # get class fields of this class
476+ flds = this.class.staticdata;
477+ for ( i = len flds - 1; i >= 0; i-- )
478+ if ( p0 != 0 || (flds[i].flags & JNI->ACC_PUBLIC) != 0 )
479+ objs = makeField(this, flds[i], i) :: objs;
480+
481+ # get class fields of super classes and interfaces
482+ if ( p0 == 0 ) {
483+ ifacelist = nil;
484+ objs = doInterfaces(this, objs);
485+ curclass := this;
486+ while ( ( curclass = getSuperclass_rClass(curclass) ) != nil ) {
487+ objs = getPublicStaticFields(curclass, objs);
488+ objs = doInterfaces(curclass, objs);
489+ }
490+ }
491+
492+ return objs;
493+}
494+#
495+# A helper function that gets methods for the class represented
496+# by this. p0 == 0 => PUBLIC methods, p0 == 1 => DECLARED methods.
497+# Candidate methods are found in the loader arrays staticmethods (for
498+# class methods), privatemethods (for methods private to this
499+# particular class), and virtualmethods (public instance methods of
500+# this class and all its superclasses).
501+#
502+getMethods(this : JClass, p0 : int) : list of JObject
503+{
504+ objs : list of JObject;
505+
506+ getReflect();
507+
508+ flds := this.class.staticmethods;
509+ for ( i := 0; i < len flds; i++ )
510+ if ( p0 != 0 || (flds[i].flags & JNI->ACC_PUBLIC) != 0 )
511+ objs = makeAMethod(this, flds[i], i) :: objs;
512+
513+ if ( p0 != 0 ) {
514+ flds = this.class.privatemethods;
515+ for ( i = len flds - 1; i >= 0; i-- )
516+ objs = makeAMethod(this, flds[i], i) :: objs;
517+ }
518+
519+ vflds := this.class.virtualmethods;
520+ for ( i = len vflds - 1; i >= 0; i-- )
521+ if ( (p0 == 1 && vflds[i].class == this.class) # declared, this class
522+ || ( p0 == 0 && (vflds[i].field.flags & JNI->ACC_PUBLIC) != 0 ) ) {
523+ if ( vflds[i].class != this.class )
524+ this = jni->GetClassObject(vflds[i].class);
525+ objs = makeAMethod(this, vflds[i].field, i) :: objs;
526+ }
527+
528+ return objs;
529+}
530+#
531+# A helper function that gets constructors for the class represented
532+# by this. p0 == 0 => PUBLIC constructors, p0 == 1 => DECLARED
533+# constructors. Candidate constructors are found in the loader
534+# array initmethods.
535+#
536+getConstructors(this : JClass, p0 : int) : list of JObject
537+{
538+ objs : list of JObject;
539+
540+ getReflect();
541+
542+ flds := this.class.initmethods;
543+ for ( i := len flds - 1; i >= 0; i-- )
544+ if ( p0 != 0 || (flds[i].flags & JNI->ACC_PUBLIC) != 0 )
545+ objs = makeAMethod(this, flds[i], i) :: objs;
546+
547+ return objs;
548+}
549+#
550+# Make sure Reflect module is loaded.
551+#
552+getReflect()
553+{
554+ if ( refl == nil ) {
555+ refl = load Reflect Reflect->PATH;
556+ if ( refl == nil )
557+ jni->InitError( jni->sys->sprint( "java.lang.Class: could not load %s: %r", Reflect->PATH ) );
558+ else
559+ refl->init(jni);
560+ }
561+}
562+#
563+# Construct a Field Object. The field is a member of the class
564+# represented by this, and the loader data for the field is in fld,
565+# which is at offset ix in the appropriate array or list. The 'slot'
566+# elements of a Field_obj adt is used only by native methods, and has
567+# the fields modifier flags in the low-order 16 bits, and the index
568+# into the array/list in the upper 16 bits. (The index into what
569+# depends on the modifier flags.)
570+#
571+makeField(this : JClass, fld : ref jldr->Field, ix : int) : JObject
572+{
573+ getReflect();
574+ fldobj := jni->AllocObject(jni->FindClass("java/lang/reflect/Field"));
575+
576+ clazz := ref Value.TObject(cast->FromJClass(this));
577+ jni->SetObjField(fldobj, "clazz", clazz);
578+
579+ name := ref Value.TObject(cast->FromJString(jni->NewString(fld.field)));
580+ jni->SetObjField(fldobj, "name", name);
581+
582+ class : ref Value;
583+ if ( (typ := refl->SigToType(fld.signature)) > 0 )
584+ class = refl->GetPrimitiveClass(typ);
585+ else {
586+ classname := fld.signature[1:len fld.signature - 1];
587+ class = ref Value.TObject(cast->FromJClass(
588+ jni->GetClassObject(jni->FindClass(classname))));
589+ }
590+ jni->SetObjField(fldobj, "type", class);
591+
592+ slot := ref Value.TInt((fld.flags & 16rffff) | (ix << 16));
593+ jni->SetObjField(fldobj, "slot", slot);
594+
595+ return fldobj;
596+}
597+#
598+# Make a new Method/Constructor object for a method or constructor in
599+# the class this. The loader information for the method/constructor is
600+# found in the loader Field adt fld, which is at offset ix in its
601+# array or list. The signature for the arguments is converted into
602+# a corresponding array of Class objects by makeParamClassArray, then
603+# makeMethod is called to generate the new object.
604+#
605+makeAMethod(this: JClass, fld : ref jldr->Field, ix : int) : JObject
606+{
607+ (sig, retsig) := jni->str->splitr(fld.signature, ")");
608+ objectarray := makeParamClassArray(sig);
609+
610+ classarray := cast->JArrayToClass(cast->ObjectToJArray(objectarray));
611+ return makeMethod(this, fld, ix, classarray, retsig);
612+}
613+#
614+# Construct a Method Object. Also used to make Constructor Objects,
615+# share several elements with Methods. The two can be distinguished
616+# because constructors have the name "<init>" (however, Constructor
617+# Objects do not have a 'name' field, nor do they have a 'returnType'
618+# field. The 'slot' field, which is only used by native methods,
619+# is filled with modifier flags in the lower 16 bits and an index (ix)
620+# into an appropriate loader array/list in the upper 16 bits (which
621+# array can be determined by the modifier flags. ). The arguments
622+# types required by the method are specified by the cl array of
623+# Class ofjects. The return value, if any, is specified by the
624+# signature given in retsig.
625+#
626+makeMethod(this: JClass, fld : ref jldr->Field, ix : int, cl : JArrayJClass,
627+ retsig : string) : JObject
628+{
629+ mcl : ClassData;
630+ isConstructor := 0;
631+ if ( fld.field == "<init>" )
632+ isConstructor = 1;
633+ if ( isConstructor )
634+ mcl = jni->FindClass("java/lang/reflect/Constructor");
635+ else
636+ mcl = jni->FindClass("java/lang/reflect/Method");
637+ methobj := jni->AllocObject(mcl);
638+
639+ clazz := ref Value.TObject(cast->FromJClass(this));
640+ jni->SetObjField(methobj, "clazz", clazz);
641+
642+ if ( ! isConstructor ) {
643+ name := ref Value.TObject(cast->FromJString(jni->NewString(fld.field)));
644+ jni->SetObjField(methobj, "name", name);
645+ }
646+
647+ slot := ref Value.TInt((fld.flags & 16rffff) | (ix << 16));
648+ jni->SetObjField(methobj, "slot", slot);
649+
650+ if ( ! isConstructor ) {
651+ getReflect();
652+ ret : ref Value;
653+ if ( (typ := refl->SigToType(retsig)) > 0 )
654+ ret = refl->GetPrimitiveClass(typ);
655+ else {
656+ rclass: JClass;
657+ case retsig[0] {
658+ 'L' =>
659+ rcdata := jni->FindClass(retsig[1:len retsig -1]);
660+ rclass = jni->GetClassObject(rcdata);
661+ '[' =>
662+ rclass = jni->LookupArrayClass(retsig);
663+ 'V' =>
664+ rcdata := jni->FindClass("inferno/vm/void_p");
665+ rclass = jni->GetClassObject(rcdata);
666+ }
667+ ret = ref Value.TObject(cast->FromJClass(rclass));
668+ }
669+ jni->SetObjField(methobj, "returnType", ret);
670+ }
671+
672+ args := ref Value.TObject(cast->FromJArray(cast->ClassToJArray(cl)));
673+ jni->SetObjField(methobj, "parameterTypes", args);
674+
675+ # Don't know how to get the list of exceptions thrown.
676+ # jni->SetObjField(methobj, "exceptionTypes", excs);
677+ # Set to a sensible default for now.
678+ foo := cast->JArrayToClass(cast->ObjectToJArray(makeParamClassArray("()")));
679+ excs := ref Value.TObject(cast->FromJArray(cast->ClassToJArray(foo)));
680+ jni->SetObjField(methobj, "exceptionTypes", excs);
681+ return methobj;
682+}
683+#
684+# Turn a signature into an array of Class Objects.
685+#
686+makeParamClassArray(sig : string) : JArrayJObject
687+{
688+ if ( sig[0] != '(' || sig[len sig -1] != ')' )
689+ return nil;
690+ clist := makeParamClass(sig[1:len sig -1]);
691+ jajcl := array[len clist] of JObject;
692+ for ( i := 0; i < len jajcl; i++ ) {
693+ jajcl[i] = hd clist;
694+ clist = tl clist;
695+ }
696+ paramclassarray := jni->MkAObject(jajcl);
697+ paramclassarray.class = jni->FindClass("java/lang/Class");
698+ return paramclassarray;
699+}
700+#
701+# Recursively turn a signature into a list of JClass
702+#
703+makeParamClass(sig : string) : list of JObject
704+{
705+ if ( sig == "" )
706+ return nil;
707+
708+ (first, rest) := splitSignature(sig);
709+ jobj: JObject;
710+ case first[0] {
711+ 'L' =>
712+ first = first[1:len first - 1];
713+ newcl := jni->GetClassObject(jni->FindClass(first));
714+ jobj = cast->FromJClass(newcl);
715+ '[' =>
716+ newcl := jni->LookupArrayClass(first);
717+ jobj = cast->FromJClass(newcl);
718+ 'Z' or 'B' or 'S' or 'C' or 'I' or 'J' or 'F' or 'D' =>
719+ typ := refl->SigToType(first);
720+ jobj = refl->GetPrimitiveClass(typ).Object();
721+ * =>
722+ return nil;
723+ }
724+
725+ return jobj :: makeParamClass(rest);
726+}
727+#
728+# Convert an array of JClass to the corresponding signature string.
729+#
730+MakeSignature(jcl : JArrayJClass) : string
731+{
732+ clarray: array of JClass;
733+ if ( jcl != nil )
734+ clarray = jcl.ary;
735+ sig := "";
736+ for ( i := 0; i < len clarray; i++)
737+ sig += MakeSingleSignature(clarray[i]);
738+ return sig;
739+}
740+#
741+# Convert a Jclass to the corresponding signature.
742+#
743+MakeSingleSignature(this : JClass) : string
744+{
745+ if ( (typ := jni->PrimitiveIndex(this, 1)) > 0 ) {
746+ getReflect();
747+ return refl->TypeToSig(typ);
748+ }
749+
750+ if ( this.aryname != nil )
751+ return this.aryname;
752+
753+ #
754+ # Must be a class type
755+ #
756+ return "L" + this.class.name + ";";
757+}
758+#
759+# Break a signature into an initial type plus the remainder.
760+#
761+splitSignature(sig : string) : (string, string)
762+{
763+ case sig[0] {
764+ 'L' =>
765+ for ( i := 1; sig[i] != ';'; i++ ) ;
766+ i++;
767+ return (sig[0:i], sig[i:]);
768+
769+ '[' => # recurse to get element type
770+ (first, rest) := splitSignature(sig[1:]);
771+ return ("[" + first, rest);
772+
773+ 'Z' or 'B' or 'S' or 'C' or 'I' or 'J' or 'F' or 'D' =>
774+ return (sig[0:1], sig[1:]);
775+ }
776+ return (nil, nil);
777+}
778+
java/pkg2/java/lang/Class_L.m+30−0
@@ -0,0 +1,30 @@
1+# javal v1.2 generated file: edit with care
2+
3+Class_L : module
4+{
5+
6+ init : fn( jni_p : JNI );
7+ forName_rString_rClass : fn( p0 : JString) : JClass;
8+ newInstance_rObject : fn( this : JClass) : JObject;
9+ isInstance_rObject_Z : fn( this : JClass, p0 : JObject) : int;
10+ isAssignableFrom_rClass_Z : fn( this : JClass, p0 : JClass) : int;
11+ isInterface_Z : fn( this : JClass) : int;
12+ isArray_Z : fn( this : JClass) : int;
13+ isPrimitive_Z : fn( this : JClass) : int;
14+ getName_rString : fn( this : JClass) : JString;
15+ getClassLoader_rClassLoader : fn( this : JClass) : JObject;
16+ getSuperclass_rClass : fn( this : JClass) : JClass;
17+ getInterfaces_aClass : fn( this : JClass) : JArrayJClass;
18+ getComponentType_rClass : fn( this : JClass) : JClass;
19+ getModifiers_I : fn( this : JClass) : int;
20+ getSigners_aObject : fn( this : JClass) : JArrayJObject;
21+ setSigners_aObject_V : fn( this : JClass, p0 : JArrayJObject);
22+ getPrimitiveClass_rString_rClass : fn( p0 : JString) : JClass;
23+ getFields0_I_aField : fn( this : JClass, p0 : int) : JArrayJObject;
24+ getMethods0_I_aMethod : fn( this : JClass, p0 : int) : JArrayJObject;
25+ getConstructors0_I_aConstructor : fn( this : JClass, p0 : int) : JArrayJObject;
26+ getField0_rString_I_rField : fn( this : JClass, p0 : JString,p1 : int) : JObject;
27+ getMethod0_rString_aClass_I_rMethod : fn( this : JClass, p0 : JString,p1 : JArrayJClass,p2 : int) : JObject;
28+ getConstructor0_aClass_I_rConstructor : fn( this : JClass, p0 : JArrayJClass,p1 : int) : JObject;
29+
30+};
java/pkg2/java/lang/CloneNotSupportedException.java+0−0

Empty file added.

java/pkg2/java/lang/Cloneable.java+0−0

Empty file added.

java/pkg2/java/lang/Compiler.java+0−0

Empty file added.

java/pkg2/java/lang/Double.java+0−0

Empty file added.

java/pkg2/java/lang/Double_L.b+66−0
@@ -0,0 +1,66 @@
1+implement Double_L;
2+
3+# javal v1.3 generated file: edit with care
4+
5+include "jni.m";
6+ jni : JNI;
7+ ClassModule,
8+ JString,
9+ JArray,
10+ JArrayI,
11+ JArrayC,
12+ JArrayB,
13+ JArrayS,
14+ JArrayJ,
15+ JArrayF,
16+ JArrayD,
17+ JArrayZ,
18+ JArrayJObject,
19+ JArrayJClass,
20+ JArrayJString,
21+ JClass,
22+ JThread,
23+ JObject : import jni;
24+
25+#>> extra pre includes here
26+
27+#<<
28+
29+include "Double_L.m";
30+
31+#>> extra post includes here
32+math : Math;
33+#<<
34+
35+init( jni_p : JNI )
36+{
37+ # save java native inteface mod instance
38+ jni = jni_p;
39+ #>>extra initialization here
40+ math = jni->math;
41+ #<<
42+}
43+
44+doubleToLongBits_D_J( p0 : real) : big
45+{#>>
46+ return( math->realbits64(p0) );
47+}#<<
48+
49+longBitsToDouble_J_D( p0 : big) : real
50+{#>>
51+ return( math->bits64real( p0 ) );
52+}#<<
53+
54+valueOf0_rString_D( p0 : JString) : real
55+{#>>
56+ return( real p0.str );
57+}#<<
58+
59+mkstring_D_rString( p0 : real) : JString
60+{#>>
61+ s := string p0;
62+ if(p0 == 0.0)
63+ s += ".0";
64+ return( jni->NewString( s ) );
65+}#<<
66+
java/pkg2/java/lang/Double_L.m+17−0
@@ -0,0 +1,17 @@
1+# javal v1.3 generated file: edit with care
2+
3+Double_L : module
4+{
5+ Double_obj : adt
6+ {
7+ cl_mod : ClassModule;
8+ value : real;
9+ };
10+
11+ init : fn( jni_p : JNI );
12+ doubleToLongBits_D_J : fn( p0 : real) : big;
13+ longBitsToDouble_J_D : fn( p0 : big) : real;
14+ valueOf0_rString_D : fn( p0 : JString) : real;
15+ mkstring_D_rString : fn( p0 : real) : JString;
16+
17+};
java/pkg2/java/lang/Error.java+0−0

Empty file added.

java/pkg2/java/lang/Exception.java+0−0

Empty file added.

java/pkg2/java/lang/ExceptionInInitializerE..a+73−0
@@ -0,0 +1,73 @@
1+/*
2+ * @(#)ExceptionInInitializerError.java 1.2 97/01/20
3+ *
4+ * Copyright (c) 1996 Sun Microsystems, Inc. All Rights Reserved.
5+ *
6+ * Permission to use, copy, modify, and distribute this software
7+ * and its documentation for NON-COMMERCIAL purposes and without
8+ * fee is hereby granted provided that this copyright notice
9+ * appears in all copies. Please refer to the file "copyright.html"
10+ * for further important copyright and licensing information.
11+ *
12+ * SUN MAKES NO REPRESENTATIONS OR WARRANTIES ABOUT THE SUITABILITY OF
13+ * THE SOFTWARE, EITHER EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED
14+ * TO THE IMPLIED WARRANTIES OF MERCHANTABILITY, FITNESS FOR A
15+ * PARTICULAR PURPOSE, OR NON-INFRINGEMENT. SUN SHALL NOT BE LIABLE FOR
16+ * ANY DAMAGES SUFFERED BY LICENSEE AS A RESULT OF USING, MODIFYING OR
17+ * DISTRIBUTING THIS SOFTWARE OR ITS DERIVATIVES.
18+ */
19+
20+package java.lang;
21+
22+/**
23+ * Signals that an unexpected exception has occurred in a static initializer.
24+ *
25+ * @author Frank Yellin
26+ * @version 1.2, 01/20/97
27+ *
28+ * @since JDK1.1
29+ */
30+public
31+class ExceptionInInitializerError extends LinkageError {
32+ private Throwable exception;
33+
34+ /**
35+ * Constructs an ExceptionInInitializerError with no detail message.
36+ * A detail message is a String that describes this particular exception.
37+ *
38+ * @since JDK1.1
39+ */
40+ public ExceptionInInitializerError() {
41+ super();
42+ }
43+
44+ /**
45+ * Constructs a new ExceptionInInitializerError class initialized to
46+ * the specific throwable
47+ *
48+ * @param thrown The exception thrown
49+ * @since JDK1.1
50+ */
51+ public ExceptionInInitializerError(Throwable thrown) {
52+ this.exception = thrown;
53+ }
54+
55+ /**
56+ * Constructs a ExceptionInInitializerError with the specified detail message.
57+ * A detail message is a String that describes this particular exception.
58+ *
59+ * @param s the detail message
60+ * @since JDK1.1
61+ */
62+ public ExceptionInInitializerError(String s) {
63+ super(s);
64+ }
65+
66+ /**
67+ * Returns the exception that occurred during a static initialization that
68+ * caused this Error to be created.
69+ */
70+ public Throwable getException() {
71+ return exception;
72+ }
73+}
java/pkg2/java/lang/Float.java+0−0

Empty file added.

java/pkg2/java/lang/Float_L.b+60−0
@@ -0,0 +1,60 @@
1+implement Float_L;
2+
3+# javal v1.3 generated file: edit with care
4+
5+include "jni.m";
6+ jni : JNI;
7+ ClassModule,
8+ JString,
9+ JArray,
10+ JArrayI,
11+ JArrayC,
12+ JArrayB,
13+ JArrayS,
14+ JArrayJ,
15+ JArrayF,
16+ JArrayD,
17+ JArrayZ,
18+ JArrayJObject,
19+ JArrayJClass,
20+ JArrayJString,
21+ JClass,
22+ JThread,
23+ JObject : import jni;
24+
25+#>> extra pre includes here
26+
27+#<<
28+
29+include "Float_L.m";
30+
31+#>> extra post includes here
32+math : Math;
33+#<<
34+
35+init( jni_p : JNI )
36+{
37+ # save java native inteface mod instance
38+ jni = jni_p;
39+ #>>extra initialization here
40+ math = jni->math;
41+ #<<
42+}
43+
44+floatToIntBits_F_I( p0 : real) : int
45+{#>>
46+ return( math->realbits32(p0) );
47+}#<<
48+
49+intBitsToFloat_I_F( p0 : int) : real
50+{#>>
51+ return( math->bits32real(p0) );
52+}#<<
53+
54+mkstring_F_rString( p0 : real) : JString
55+{#>>
56+ s := string p0;
57+ if(p0 == 0.0)
58+ s += ".0";
59+ return( jni->NewString( s ) );
60+}#<<
java/pkg2/java/lang/Float_L.m+16−0
@@ -0,0 +1,16 @@
1+# javal v1.3 generated file: edit with care
2+
3+Float_L : module
4+{
5+ Float_obj : adt
6+ {
7+ cl_mod : ClassModule;
8+ value : real;
9+ };
10+
11+ init : fn( jni_p : JNI );
12+ floatToIntBits_F_I : fn( p0 : real) : int;
13+ intBitsToFloat_I_F : fn( p0 : int) : real;
14+ mkstring_F_rString : fn( p0 : real) : JString;
15+
16+};
java/pkg2/java/lang/IllegalAccessError.java+0−0

Empty file added.

java/pkg2/java/lang/IllegalAccessException.java+0−0

Empty file added.

java/pkg2/java/lang/IllegalArgumentException.java+0−0

Empty file added.

java/pkg2/java/lang/IllegalMonitorStateException.java+0−0

Empty file added.

java/pkg2/java/lang/IllegalStateException.java+0−0

Empty file added.

java/pkg2/java/lang/IllegalThreadStateExcep..a+0−0

Empty file added.

java/pkg2/java/lang/IncompatibleClassChange..a+0−0

Empty file added.

java/pkg2/java/lang/IndexOutOfBoundsExcepti..a+0−0

Empty file added.

java/pkg2/java/lang/InfernoProcess.java+0−0

Empty file added.

java/pkg2/java/lang/InfernoProcess_L.b+207−0
@@ -0,0 +1,207 @@
1+implement InfernoProcess_L;
2+
3+# javal v1.3 generated file: edit with care
4+
5+include "jni.m";
6+ jni : JNI;
7+ ClassModule,
8+ JString,
9+ JArray,
10+ JArrayI,
11+ JArrayC,
12+ JArrayB,
13+ JArrayS,
14+ JArrayJ,
15+ JArrayF,
16+ JArrayD,
17+ JArrayZ,
18+ JArrayJObject,
19+ JArrayJClass,
20+ JArrayJString,
21+ JClass,
22+ JThread,
23+ JObject : import jni;
24+
25+#>> extra pre includes here
26+
27+include "java/io/FileDescriptor_L.m";
28+ FileDescriptor_obj : import FileDescriptor_L;
29+
30+#<<
31+
32+include "InfernoProcess_L.m";
33+
34+#>> extra post includes here
35+
36+include "sh.m";
37+
38+ioexception := "";
39+
40+#<<
41+
42+init( jni_p : JNI )
43+{
44+ # save java native inteface mod instance
45+ jni = jni_p;
46+ #>>extra initialization here
47+ #<<
48+}
49+
50+initProc_aString_aString_V( this : ref InfernoProcess_obj, p0 : JArrayJString,p1 : JArrayJString)
51+{#>>
52+ #
53+ # p0 : command and arguments
54+ # p1 : environment in for var=value; does not apply in Inferno
55+ #
56+ dummy := this;
57+ jstrs := p0.ary;
58+ args : list of string;
59+ l := len jstrs;
60+ for ( i := l-1; i >= 0; i--)
61+ args = jstrs[i].str :: args;
62+
63+ sync := chan of int;
64+ spawn exec(this, args, sync);
65+ pid := <- sync;
66+ if ( pid == 0 )
67+ jni->ThrowException("java.io.IOException", ioexception);
68+}#<<
69+
70+waitFor_I( this : ref InfernoProcess_obj) : int
71+{#>>
72+ if ( this.waitfd.fd == nil )
73+ this.terminated = JNI->TRUE;
74+ while ( this.terminated == JNI->FALSE ) {
75+ (ok, nil) := jni->sys->fstat(this.waitfd.fd);
76+ if ( ok < 0 )
77+ this.terminated = JNI->TRUE;
78+ else
79+ jni->sys->sleep(1000);
80+ }
81+ this.waitfd.fd = nil;
82+ return 0;
83+}#<<
84+
85+destroy_V( this : ref InfernoProcess_obj)
86+{#>>
87+ if ( this.pid == 0 || isTerminated_Z(this) == JNI->TRUE )
88+ return;
89+
90+ fd := jni->sys->open("/prog/"+string this.pid+"/ctl", jni->sys->OWRITE);
91+ if ( fd != nil )
92+ jni->sys->fprint(fd, "killgrp");
93+ this.pid = 0;
94+ this.terminated = JNI->TRUE;
95+}#<<
96+
97+isTerminated_Z( this : ref InfernoProcess_obj) : int
98+{#>>
99+ # If the file descriptor being used to wait for the process to terminate
100+ # is still good, the process hasn't terminated yet.
101+ #
102+ if ( this.waitfd.fd == nil )
103+ return this.terminated = JNI->TRUE;
104+ (ok, nil) := jni->sys->fstat(this.waitfd.fd);
105+ if ( ok < 0 )
106+ this.terminated = JNI->TRUE;
107+ return this.terminated;
108+}#<<
109+
110+
111+
112+exec(this : ref InfernoProcess_obj, args : list of string,
113+ waitpid : chan of int)
114+{
115+ # find and load module corresponding to hd args.
116+ cmd := hd args;
117+ file := cmd;
118+ if ( len file < 4 || file[len file - 4:] != ".dis" )
119+ file += ".dis";
120+
121+ c := load Command file;
122+ if ( c == nil ) {
123+ err := jni->sys->sprint("%r");
124+ if ( err == "file does not exist" && file[0] != '/' &&
125+ file[0:2] != "./" ) {
126+ c = load Command "/dis/" + file;
127+ if ( c == nil )
128+ err = jni->sys->sprint("%r");
129+ }
130+ if ( c == nil ) {
131+ ioexception = jni->sys->sprint("%s: %r", cmd);
132+ waitpid <- = 0;
133+ return;
134+ }
135+ }
136+ #
137+ # Get pid (via pctl) and save; We save the pid of the PARENT of the
138+ # thread that will actually execute the command. Then if someone
139+ # calls destroy, the whole group is killed.
140+ #
141+ this.pid = jni->sys->pctl(Sys->FORKNS | Sys->NEWPGRP, nil);
142+ #
143+ # Note: have to open the /prog/n/wait file of parent before doing the spawn.
144+ #
145+ waitfd : ref Sys->FD;;
146+ if ( this.pid > 0 )
147+ waitfd = jni->sys->open("#p/" + string this.pid + "/wait", Sys->OREAD);
148+ this.waitfd.fd = waitfd;
149+
150+ # arrange for new input/output to the command. Save in stdin & stdout.
151+ si := array[2] of ref Sys->FD;
152+ so := array[2] of ref Sys->FD;
153+ se := array[2] of ref Sys->FD;
154+ if ( jni->sys->pipe(si) < 0 ) {
155+ ioexception = "pipe failure";
156+ waitpid <- = 0;
157+ return;
158+ }
159+ if ( jni->sys->pipe(so) < 0 ) {
160+ ioexception = "pipe failure";
161+ waitpid <- = 0;
162+ return;
163+ }
164+ if ( jni->sys->pipe(se) < 0 ) {
165+ ioexception = "pipe failure";
166+ waitpid <- = 0;
167+ return;
168+ }
169+ this.stdin.fd = si[1];
170+ this.stdout.fd = so[0];
171+ this.stderr.fd = se[0];
172+ spawn exec1(c, si[0], so[1], se[1], args, waitpid);
173+ si[0] = si[1] = so[0] = so[1] = se[0] = se[1] = nil;
174+ #
175+ # We can't just exit this thread, or we could never detect completion
176+ # of the child. So we wait here for the wait notification.
177+ # Note that we nil the 'this' reference, so that it will be
178+ # possible for it to be garbage collected when not referenced elsewhere.
179+ # That means we can't set the terminated flag, so that anyone who
180+ # really needs to know whether the process has terminated has to check
181+ # to see if this.waitfd.fd is still a valid FD.
182+ #
183+ this = nil;
184+ buf := array[64] of byte;
185+ if ( waitfd != nil && jni->sys->read(waitfd, buf, len buf) < 0 )
186+ jni->sys->print("read error on wait file: %r\n")
187+ ; # even if this is an error, how do we report it?
188+}
189+
190+exec1(cmd : Command, in, out, err : ref Sys->FD, args : list of string,
191+ c : chan of int)
192+{
193+ newfds := in.fd :: out.fd :: err.fd :: nil;
194+ pid := jni->sys->pctl(Sys->NEWFD, newfds);
195+ jni->sys->dup(in.fd, 0);
196+ jni->sys->dup(out.fd, 1);
197+ jni->sys->dup(err.fd, 2);
198+ in = out = err = nil;
199+ pid = jni->sys->pctl(Sys->NEWFD, 0 :: 1 :: 2 :: nil);
200+ #
201+ # Eventually there has to be a way to get the Draw->Context.
202+ #
203+ # ctxt := jni->GetContext();
204+ c <- = pid;
205+ cmd->init(nil, args);
206+}
207+
java/pkg2/java/lang/InfernoProcess_L.m+22−0
@@ -0,0 +1,22 @@
1+# javal v1.3 generated file: edit with care
2+
3+InfernoProcess_L : module
4+{
5+ InfernoProcess_obj : adt
6+ {
7+ cl_mod : ClassModule;
8+ stdin : ref FileDescriptor_obj;
9+ stdout : ref FileDescriptor_obj;
10+ stderr : ref FileDescriptor_obj;
11+ pid : int;
12+ waitfd : ref FileDescriptor_obj;
13+ terminated : int;
14+ };
15+
16+ init : fn( jni_p : JNI );
17+ initProc_aString_aString_V : fn( this : ref InfernoProcess_obj, p0 : JArrayJString,p1 : JArrayJString);
18+ waitFor_I : fn( this : ref InfernoProcess_obj) : int;
19+ destroy_V : fn( this : ref InfernoProcess_obj);
20+ isTerminated_Z : fn( this : ref InfernoProcess_obj) : int;
21+
22+};
java/pkg2/java/lang/InstantiationError.java+0−0

Empty file added.

java/pkg2/java/lang/InstantiationException.java+0−0

Empty file added.

java/pkg2/java/lang/Integer.java+0−0

Empty file added.

java/pkg2/java/lang/InternalError.java+0−0

Empty file added.

java/pkg2/java/lang/InterruptedException.java+0−0

Empty file added.

java/pkg2/java/lang/LinkageError.java+0−0

Empty file added.

java/pkg2/java/lang/Long.java+0−0

Empty file added.

java/pkg2/java/lang/Math.java+0−0

Empty file added.

java/pkg2/java/lang/Math_L.b+119−0
@@ -0,0 +1,119 @@
1+implement Math_L;
2+
3+# javal v1.2 generated file: edit with care
4+
5+include "jni.m";
6+ jni : JNI;
7+ ClassModule,
8+ JString,
9+ JArray,
10+ JArrayI,
11+ JArrayC,
12+ JArrayB,
13+ JArrayS,
14+ JArrayJ,
15+ JArrayF,
16+ JArrayD,
17+ JArrayZ,
18+ JArrayJObject,
19+ JArrayJClass,
20+ JArrayJString,
21+ JClass,
22+ JObject : import jni;
23+
24+#>> extra pre includes here
25+
26+#<<
27+
28+include "Math_L.m";
29+
30+#>> extra post includes here
31+math : Math;
32+#<<
33+
34+init( jni_p : JNI )
35+{
36+ # save java native inteface mod instance
37+ jni = jni_p;
38+ #>>extra initialization here
39+ math = jni->math;
40+ #<<
41+}
42+
43+sin_D_D( p0 : real) : real
44+{#>>
45+ return( math->sin(p0) );
46+}#<<
47+
48+cos_D_D( p0 : real) : real
49+{#>>
50+ return( math->cos(p0) );
51+}#<<
52+
53+tan_D_D( p0 : real) : real
54+{#>>
55+ return( math->tan(p0) );
56+}#<<
57+
58+asin_D_D( p0 : real) : real
59+{#>>
60+ return( math->asin(p0) );
61+}#<<
62+
63+acos_D_D( p0 : real) : real
64+{#>>
65+ return( math->acos(p0) );
66+}#<<
67+
68+atan_D_D( p0 : real) : real
69+{#>>
70+ return( math->atan(p0) );
71+}#<<
72+
73+exp_D_D( p0 : real) : real
74+{#>>
75+ return( math->exp(p0) );
76+}#<<
77+
78+log_D_D( p0 : real) : real
79+{#>>
80+ return( math->log(p0) );
81+}#<<
82+
83+sqrt_D_D( p0 : real) : real
84+{#>>
85+ return( math->sqrt(p0) );
86+}#<<
87+
88+IEEEremainder_D_D_D( p0 : real,p1 : real) : real
89+{#>>
90+ return( math->remainder(p0,p1) );
91+}#<<
92+
93+ceil_D_D( p0 : real) : real
94+{#>>
95+ return( math->ceil(p0) );
96+}#<<
97+
98+floor_D_D( p0 : real) : real
99+{#>>
100+ return( math->floor(p0) );
101+}#<<
102+
103+rint_D_D( p0 : real) : real
104+{#>>
105+ return( math->rint(p0) );
106+}#<<
107+
108+atan2_D_D_D( p0 : real,p1 : real) : real
109+{#>>
110+ return( math->atan2(p0,p1) );
111+}#<<
112+
113+pow_D_D_D( p0 : real,p1 : real) : real
114+{#>>
115+ return( math->pow(p0,p1) );
116+}#<<
117+
118+
119+
java/pkg2/java/lang/Math_L.m+27−0
@@ -0,0 +1,27 @@
1+# javal v1.2 generated file: edit with care
2+
3+Math_L : module
4+{
5+ Math_obj : adt
6+ {
7+ cl_mod : ClassModule;
8+ };
9+
10+ init : fn( jni_p : JNI );
11+ sin_D_D : fn( p0 : real) : real;
12+ cos_D_D : fn( p0 : real) : real;
13+ tan_D_D : fn( p0 : real) : real;
14+ asin_D_D : fn( p0 : real) : real;
15+ acos_D_D : fn( p0 : real) : real;
16+ atan_D_D : fn( p0 : real) : real;
17+ exp_D_D : fn( p0 : real) : real;
18+ log_D_D : fn( p0 : real) : real;
19+ sqrt_D_D : fn( p0 : real) : real;
20+ IEEEremainder_D_D_D : fn( p0 : real,p1 : real) : real;
21+ ceil_D_D : fn( p0 : real) : real;
22+ floor_D_D : fn( p0 : real) : real;
23+ rint_D_D : fn( p0 : real) : real;
24+ atan2_D_D_D : fn( p0 : real,p1 : real) : real;
25+ pow_D_D_D : fn( p0 : real,p1 : real) : real;
26+
27+};
java/pkg2/java/lang/NegativeArraySizeExcept..a+0−0

Empty file added.

java/pkg2/java/lang/NoClassDefFoundError.java+0−0

Empty file added.

java/pkg2/java/lang/NoSuchFieldError.java+0−0

Empty file added.

java/pkg2/java/lang/NoSuchFieldException.java+0−0

Empty file added.

java/pkg2/java/lang/NoSuchMethodError.java+0−0

Empty file added.

java/pkg2/java/lang/NoSuchMethodException.java+0−0

Empty file added.

java/pkg2/java/lang/NullPointerException.java+0−0

Empty file added.

java/pkg2/java/lang/Number.java+0−0

Empty file added.

java/pkg2/java/lang/NumberFormatException.java+0−0

Empty file added.

java/pkg2/java/lang/Object.java+0−0

Empty file added.

java/pkg2/java/lang/Object_L.b+71−0
@@ -0,0 +1,71 @@
1+implement Object_L;
2+
3+include "jni.m";
4+ jni : JNI;
5+ ClassModule,
6+ JString,
7+ JArray,
8+ JArrayI,
9+ JArrayC,
10+ JArrayB,
11+ JArrayS,
12+ JArrayJ,
13+ JArrayF,
14+ JArrayD,
15+ JArrayZ,
16+ JArrayJObject,
17+ JArrayJString,
18+ JClass,
19+ JObject : import jni;
20+
21+#>> extra pre includes here
22+
23+#<<
24+
25+include "Object_L.m";
26+
27+#>> extra post includes here
28+
29+#<<
30+
31+init( jni_p : JNI )
32+{
33+ # save java native inteface mod instance
34+ jni = jni_p;
35+ #>>extra initialization here
36+ #<<
37+}
38+
39+getClass_rClass( this : JObject) : JClass
40+{#>>
41+ return( jni->GetObjectClass(this) );
42+}#<<
43+
44+hashCode_I( this : JObject ) : int
45+{#>>
46+ return( jni->IdentityHash( this ) );
47+}#<<
48+
49+clone_rObject( this : JObject ) : JObject
50+{#>>
51+ return( jni->DupObject( this ) );
52+}#<<
53+
54+notify_V( this : JObject )
55+{#>>
56+ jni->jldr->monitornotify( this, 0 );
57+}#<<
58+
59+notifyAll_V( this : JObject )
60+{#>>
61+ jni->jldr->monitornotify( this, 1 );
62+}#<<
63+
64+wait_J_V( this : JObject, p0 : big)
65+{#>>
66+ if ( p0 < big 0 )
67+ jni->ThrowException( "java.lang.IllegalArgumentException", "negative timeout value" );
68+ # limit to 30 bits of millisecond time.
69+ duration := (int p0) & 16r3FFFFFFF;
70+ jni->jldr->monitorwait( this, duration );
71+}#<<
java/pkg2/java/lang/Object_L.m+14−0
@@ -0,0 +1,14 @@
1+# generated file edit with care
2+
3+Object_L : module
4+{
5+ init : fn( jni_p : JNI );
6+ getClass_rClass : fn( this : JObject ) : JClass;
7+ hashCode_I : fn( this : JObject ) : int;
8+ clone_rObject : fn( this : JObject ) : JObject;
9+ notify_V : fn( this : JObject );
10+ notifyAll_V : fn( this : JObject );
11+ wait_J_V : fn( this : JObject, p0 : big);
12+ registerNatives_V : fn( this : JObject );
13+
14+};
java/pkg2/java/lang/OutOfMemoryError.java+0−0

Empty file added.

java/pkg2/java/lang/Process.java+0−0

Empty file added.

java/pkg2/java/lang/Runnable.java+0−0

Empty file added.

java/pkg2/java/lang/Runtime.java+0−0

Empty file added.

java/pkg2/java/lang/RuntimeException.java+0−0

Empty file added.

java/pkg2/java/lang/Runtime_L.b+161−0
@@ -0,0 +1,161 @@
1+implement Runtime_L;
2+
3+# javal v1.2 generated file: edit with care
4+
5+include "jni.m";
6+ jni : JNI;
7+ ClassModule,
8+ JString,
9+ JArray,
10+ JArrayI,
11+ JArrayC,
12+ JArrayB,
13+ JArrayS,
14+ JArrayJ,
15+ JArrayF,
16+ JArrayD,
17+ JArrayZ,
18+ JArrayJObject,
19+ JArrayJClass,
20+ JArrayJString,
21+ JClass,
22+ JObject : import jni;
23+
24+#>> extra pre includes here
25+
26+#<<
27+
28+include "Runtime_L.m";
29+
30+#>> extra post includes here
31+
32+#<<
33+
34+init( jni_p : JNI )
35+{
36+ # save java native inteface mod instance
37+ jni = jni_p;
38+ #>>extra initialization here
39+ #<<
40+}
41+
42+killgrp()
43+{
44+ # kill this process group
45+ msg := array of byte "killgrp";
46+ pid := string jni->sys->pctl(0,nil); #my pid
47+
48+ fd := jni->sys->open("#p/"+pid+"/ctl", Sys->OWRITE);
49+ if(fd != nil)
50+ jni->sys->write(fd, msg, len msg);
51+
52+ #note: we silently fail if we could not open
53+ #'#p' (i.e. because of NODEVS) or if the
54+ #write fails
55+}
56+
57+exitInternal_I_V( this : ref Runtime_obj, p0 : int)
58+{#>>
59+ # can't kill self, so spawn thread to kill group
60+ spawn killgrp();
61+ # send nowhere until killed
62+ chan of int <-= 666;
63+ junk := (this,p0); #inferno does not have an exit code
64+}#<<
65+
66+runFinalizersOnExit0_Z_V( p0 : int)
67+{#>>
68+ junk := (p0);
69+}#<<
70+
71+freeMemory_J( this : ref Runtime_obj) : big
72+{#>>
73+ # open; read; parase; memory device
74+ mfd := jni->sys->open("#c/memory", Sys->OREAD);
75+ if ( mfd == nil )
76+ return(big 0);
77+ buf := array[300] of byte;
78+ n := jni->sys->read(mfd, buf, len buf);
79+ if(n <= 0)
80+ return(big 0);
81+ (nil, arena) := jni->sys->tokenize(string buf[0:n], "\n");
82+ (used,limit) := (0,0);
83+ # walk list of arena's looking for "heap"
84+ while(arena != nil)
85+ {
86+ # break line into tokens
87+ (nil,tok) := jni->sys->tokenize( hd arena, " " );
88+ used = int (hd tok); #first tok is amount used
89+ tok = tl tok;
90+ limit = int (hd tok); #second tok is total
91+ name : string;
92+ for(tok= tl tok; tok != nil; tok = tl tok)
93+ name = hd tok;
94+
95+ if ( name == "heap" )
96+ break;
97+ arena = tl arena;
98+ }
99+
100+ # return the amount free
101+ return( big (limit-used) );
102+ junk := (this);
103+}#<<
104+
105+totalMemory_J( this : ref Runtime_obj) : big
106+{#>>
107+ # open; read; parase; memory device
108+ mfd := jni->sys->open("#c/memory", Sys->OREAD);
109+ if ( mfd == nil )
110+ return( big 0 );
111+ buf := array[300] of byte;
112+ n := jni->sys->read(mfd, buf, len buf);
113+ if(n <= 0)
114+ return(big 0);
115+ (nil, arena) := jni->sys->tokenize(string buf[0:n], "\n");
116+ limit := 0;
117+ while(arena != nil)
118+ {
119+ # break line into tokens
120+ (nil,tok) := jni->sys->tokenize( hd arena, " " );
121+ tok = tl tok;
122+ limit = int (hd tok); #second tok is total
123+ name : string;
124+ for(tok= tl tok; tok != nil; tok = tl tok)
125+ name = hd tok;
126+
127+ if ( name == "heap" )
128+ break;
129+ arena = tl arena;
130+ }
131+
132+ # return the total amount
133+ return( big limit );
134+ junk := (this);
135+}#<<
136+
137+gc_V( this : ref Runtime_obj)
138+{#>>
139+ # do nothing
140+ junk := this;
141+}#<<
142+
143+runFinalization_V( this : ref Runtime_obj)
144+{#>>
145+ # do nothing
146+ junk := this;
147+}#<<
148+
149+traceInstructions_Z_V( this : ref Runtime_obj, p0 : int)
150+{#>>
151+ # do nothing
152+ return;
153+ junk := (this,p0);
154+}#<<
155+
156+traceMethodCalls_Z_V( this : ref Runtime_obj, p0 : int)
157+{#>>
158+ # doing nothing is a valid implementation
159+ return;
160+ junk := (this,p0);
161+}#<<
java/pkg2/java/lang/Runtime_L.m+20−0
@@ -0,0 +1,20 @@
1+# javal v1.2 generated file: edit with care
2+
3+Runtime_L : module
4+{
5+ Runtime_obj : adt
6+ {
7+ cl_mod : ClassModule;
8+ };
9+
10+ init : fn( jni_p : JNI );
11+ exitInternal_I_V : fn( this : ref Runtime_obj, p0 : int);
12+ runFinalizersOnExit0_Z_V : fn( p0 : int);
13+ freeMemory_J : fn( this : ref Runtime_obj) : big;
14+ totalMemory_J : fn( this : ref Runtime_obj) : big;
15+ gc_V : fn( this : ref Runtime_obj);
16+ runFinalization_V : fn( this : ref Runtime_obj);
17+ traceInstructions_Z_V : fn( this : ref Runtime_obj, p0 : int);
18+ traceMethodCalls_Z_V : fn( this : ref Runtime_obj, p0 : int);
19+
20+};
java/pkg2/java/lang/SecurityException.java+0−0

Empty file added.

java/pkg2/java/lang/SecurityManager.java+0−0

Empty file added.

java/pkg2/java/lang/SecurityManager_L.b+175−0
@@ -0,0 +1,175 @@
1+implement SecurityManager_L;
2+
3+# javal v1.2 generated file: edit with care
4+
5+include "jni.m";
6+ jni : JNI;
7+ ClassModule,
8+ JString,
9+ JArray,
10+ JArrayI,
11+ JArrayC,
12+ JArrayB,
13+ JArrayS,
14+ JArrayJ,
15+ JArrayF,
16+ JArrayD,
17+ JArrayZ,
18+ JArrayJObject,
19+ JArrayJClass,
20+ JArrayJString,
21+ JClass,
22+ JObject : import jni;
23+
24+#>> extra pre includes here
25+
26+#<<
27+
28+include "SecurityManager_L.m";
29+
30+#>> extra post includes here
31+
32+#<<
33+
34+init( jni_p : JNI )
35+{
36+ # save java native inteface mod instance
37+ jni = jni_p;
38+ #>>extra initialization here
39+ #<<
40+}
41+
42+getClassContext_aClass( this : ref SecurityManager_obj) : JArrayJClass
43+{#>>
44+ #
45+ # return an array of classes that represent the classes of
46+ # each method on the current call stack (presumably ignoring
47+ # any native funtions).
48+ #
49+ jni->FatalError( "getClassContext() not implemented" );
50+ junk := this;
51+ return(nil);
52+}#<<
53+
54+currentClassLoader_rClassLoader( this : ref SecurityManager_obj) : JObject
55+{#>>
56+ #
57+ # this returns the most recent class loader on the current call
58+ # stack. Traditionally the call stack is walked and the class of
59+ # each "active" method is checked to obtain its class loader (if
60+ # any; null==root loader). The first such class loader we find
61+ # is returned.
62+ #
63+ return(nil); #for now we don't walk back
64+ junk := this;
65+}#<<
66+
67+classDepth_rString_I( this : ref SecurityManager_obj, p0 : JString) : int
68+{#>>
69+ #
70+ # walk the call stack looking for a method that resides in
71+ # the class specified.
72+ #
73+ if ( p0 != nil )
74+ {
75+ clname := p0.str;
76+ # change any '.' to '/'
77+ l := len clname;
78+ for(x:=0;x<l; x++)
79+ if ( clname[x] == '.' ) clname[x] = '/';
80+
81+ # attempt to open the local "prog" device (i.e. '#p')
82+ # and read the call stack into an array of bytes
83+ pid := jni->sys->pctl(0,nil);
84+ progfile := "#p/"+ (string pid) +"/stack";
85+ fd := jni->sys->open( progfile, Sys->OREAD );
86+ if ( fd != nil )
87+ {
88+ # must spin a thread to read my own call-stack
89+ result := chan of array of byte; # channel for thd results
90+ spawn ReadCallStack( fd, result );
91+ callstack := <- result; # wait for results
92+
93+ (cnt,frame) := jni->sys->tokenize( string callstack, "\n" );
94+ if ( cnt > 0 )
95+ {
96+ # walk frames looking for module-name/class-name match
97+ depth := 0;
98+ for( ; frame!=nil; frame=tl frame )
99+ {
100+ # parse each line
101+ (a,tok) := jni->sys->tokenize(hd frame, " ");
102+ if ( a > 0 )
103+ {
104+ #module name is last token
105+ for( b:=0; b<a-1; b-- )
106+ tok = tl tok;
107+ if ( (hd tok) == clname )
108+ return( depth );
109+ }
110+ depth++;
111+ }
112+ }
113+ }
114+
115+ }
116+
117+ return(-1); #if we are here we can't find the class
118+ junk := (this);
119+}#<<
120+
121+classLoaderDepth_I( this : ref SecurityManager_obj) : int
122+{#>>
123+ #
124+ # return the number of frames back to the first class
125+ # loader on the call stack. Return -1 if no classloaders.
126+ #
127+ return(-1); #for now we don't walk back
128+ junk := this;
129+}#<<
130+
131+currentLoadedClass0_rClass( this : ref SecurityManager_obj) : JClass
132+{#>>
133+ #
134+ # return the first class on the call stack that was loaded
135+ # with a class loader.
136+ #
137+ return( nil );
138+ junk := this;
139+}#<<
140+
141+
142+
143+
144+ReadCallStack( fd : ref Sys->FD, result : chan of array of byte )
145+{
146+ # read until eof
147+ buf := array[8000] of byte; #about 10 frames
148+ (n,ptr) := (0,0);
149+ do
150+ {
151+ cur := len buf-ptr;
152+ n = jni->sys->read(fd, buf[ptr:], cur);
153+ ptr += n;
154+ if ( n == cur )
155+ {
156+ # need to read more
157+ buf = ExtendBuf(buf);
158+ }
159+
160+ } while ( n != 0 );
161+
162+ result <- = buf[:ptr];
163+}
164+
165+ExtendBuf( buf : array of byte ) : array of byte
166+{
167+ curlen := len buf;
168+ newbuf := array[curlen + 8000] of byte;
169+
170+ # copy old contents
171+ for(x:=0; x<curlen; x++ )
172+ newbuf[x] = buf[x];
173+
174+ return( newbuf );
175+}
java/pkg2/java/lang/SecurityManager_L.m+19−0
@@ -0,0 +1,19 @@
1+# javal v1.2 generated file: edit with care
2+
3+SecurityManager_L : module
4+{
5+ SecurityManager_obj : adt
6+ {
7+ cl_mod : ClassModule;
8+ inCheck : int;
9+ initialized : int;
10+ };
11+
12+ init : fn( jni_p : JNI );
13+ getClassContext_aClass : fn( this : ref SecurityManager_obj) : JArrayJClass;
14+ currentClassLoader_rClassLoader : fn( this : ref SecurityManager_obj) : JObject;
15+ classDepth_rString_I : fn( this : ref SecurityManager_obj, p0 : JString) : int;
16+ classLoaderDepth_I : fn( this : ref SecurityManager_obj) : int;
17+ currentLoadedClass0_rClass : fn( this : ref SecurityManager_obj) : JClass;
18+
19+};
java/pkg2/java/lang/Short.java+0−0

Empty file added.

java/pkg2/java/lang/StackOverflowError.java+0−0

Empty file added.

java/pkg2/java/lang/String.java+0−0

Empty file added.

java/pkg2/java/lang/StringBuffer.java+0−0

Empty file added.

java/pkg2/java/lang/StringBuffer_L.b+359−0
@@ -0,0 +1,359 @@
1+implement StringBuffer_L;
2+
3+# javal v1.4 generated file: edit with care
4+
5+include "jni.m";
6+ jni : JNI;
7+ ClassModule,
8+ JString,
9+ JArray,
10+ JArrayI,
11+ JArrayC,
12+ JArrayB,
13+ JArrayS,
14+ JArrayJ,
15+ JArrayF,
16+ JArrayD,
17+ JArrayZ,
18+ JArrayJObject,
19+ JArrayJClass,
20+ JArrayJString,
21+ JClass,
22+ JThread,
23+ JObject : import jni;
24+
25+#>> extra pre includes here
26+
27+# this module implements the class java.lang.StringBuffer
28+# the buffer is really a Limbo string type. In the original
29+# Java implementation an array of char was used and the array
30+# size was always >= to the buffer contents. In this version
31+# The limbo string represents only the buffer contents and
32+# contains no extra "padding". This is done because the
33+# Inferno implementation of string is optimized for string
34+# operations. Thus, the actual buffer contents is simply the
35+# length of the Limbo string; the original Java version
36+# maintained the buffer content size in the field 'count'.
37+# For conveience of the Java code, and to negate a call into
38+# the native Limbo, the 'count' field is maintained to always
39+# be the length of the Limbo string: e.g. "count=len Ivalue".
40+#
41+# In the Java version the character array can be shared with
42+# an instance of the Java String class, hence a flag for being
43+# shared. This is not the case for the Inferno implementation.
44+# whenever data is passed out it must be a copy of the 'Ivalue'
45+# string.
46+#
47+# When this was implemented synchronizatio of native methods
48+# was not complete, so this module assumes if a method should
49+# be synchronized it is done before entering the native method
50+# so each native method should be a private method and wrapped
51+# in Java code by a synchronized method (or block).
52+#
53+# The java.lang.StringBuffer class is serialzable. For Inferno
54+# since the internal structure has changed serialization must
55+# be explitily handled by this class. This is done by adding
56+# writeObject()/readObject() methods in the Java side to write
57+# and read in the expected format, so outside VM's do not know
58+# we have a differen implementation.
59+#
60+
61+#<<
62+
63+include "StringBuffer_L.m";
64+
65+#>> extra post includes here
66+Value : import jni;
67+cast : Cast;
68+
69+#<<
70+
71+init( jni_p : JNI )
72+{
73+ # save java native inteface mod instance
74+ jni = jni_p;
75+ #>>extra initialization here
76+ cast = jni->CastMod();
77+ #<<
78+}
79+
80+setLength0_I_V( this : ref StringBuffer_obj, p0 : int)
81+{#>>
82+ # p0 => length to set buf to; assume >=0
83+
84+ l := len this.Ivalue;
85+
86+ if ( p0 < l ) # truncate
87+ this.Ivalue = this.Ivalue[:p0];
88+ else { # pad with null characters
89+ for( i := l; i < p0; i++ )
90+ this.Ivalue[i] = '\0';
91+ }
92+ this.count = len this.Ivalue;
93+}#<<
94+
95+charAt0_I_C( this : ref StringBuffer_obj, p0 : int) : int
96+{#>>
97+ # assume p0 is within the range 0..len this.Ivalue
98+ return( this.Ivalue[p0] );
99+}#<<
100+
101+getChars0_I_I_aC_I_V( this : ref StringBuffer_obj, p0 : int,p1 : int,p2 : JArrayC,p3 : int)
102+{#>>
103+ # assume the index ranges are already checked
104+ copy_count := (p1-p0);
105+ dst_end := p3 + copy_count;
106+ if ( dst_end > len p2.ary )
107+ jni->ThrowException( "java.lang.ArrayIndexOutOfBoundsException", "destination array not large enough" );
108+
109+ # copy one char at a time
110+ for( (x,y) := (p3,p0); x < copy_count; junk:=(x++,y++) )
111+ p2.ary[x] = this.Ivalue[y];
112+
113+}#<<
114+
115+setCharAt0_I_C_V( this : ref StringBuffer_obj, p0 : int,p1 : int)
116+{#>>
117+ # assume index has been checked
118+ this.Ivalue[p0] = p1;
119+}#<<
120+
121+reverse0_V( this : ref StringBuffer_obj)
122+{#>>
123+ # reverse the string buffer contents
124+ str := this.Ivalue[:]; # slice a copy
125+ for( (x,y):=(0,(len str)-1); x<len str; junk:=(x++,y--) )
126+ this.Ivalue[x] = str[y];
127+
128+}#<<
129+
130+append_int_I_V( this : ref StringBuffer_obj, p0 : int)
131+{#>>
132+ # append the Ivalue to the string
133+ this.Ivalue += string p0;
134+ this.count = len this.Ivalue;
135+}#<<
136+
137+append_long_J_V( this : ref StringBuffer_obj, p0 : big)
138+{#>>
139+ # append the Ivalue to the string
140+ this.Ivalue += string p0;
141+ this.count = len this.Ivalue;
142+}#<<
143+
144+append_str_rString_V( this : ref StringBuffer_obj, p0 : JString)
145+{#>>
146+ # append the Ivalue to the string
147+ val : string;
148+ if ( p0 == nil )
149+ val = "null"; #this is what Java wants
150+ else
151+ val = p0.str;
152+
153+ this.Ivalue += val;
154+ this.count = len this.Ivalue;
155+}#<<
156+
157+append_chars_aC_I_I_V( this : ref StringBuffer_obj, p0 : JArrayC,p1 : int,p2 : int)
158+{#>>
159+ # append the Ivalue to the string
160+ if ( p0 == nil ) return;
161+
162+ val := p0.ary[p1:p1+p2];
163+ l := len this.Ivalue;
164+ for( x:=0; x < len val; x++ )
165+ this.Ivalue[l++] = val[x];
166+ this.count = len this.Ivalue;
167+}#<<
168+
169+append_ch_C_V( this : ref StringBuffer_obj, p0 : int)
170+{#>>
171+ # append the Ivalue to the string
172+ this.Ivalue[this.count] = p0;
173+ this.count++;
174+}#<<
175+
176+append_float_F_V( this : ref StringBuffer_obj, p0 : real)
177+{#>>
178+ # append the Ivalue to the string
179+ s := string p0;
180+ if(p0 == 0.0)
181+ s += ".0";
182+ this.Ivalue += s;
183+ this.count = len this.Ivalue;
184+}#<<
185+
186+append_double_D_V( this : ref StringBuffer_obj, p0 : real)
187+{#>>
188+ # append the Ivalue to the string
189+ s := string p0;
190+ if(p0 == 0.0)
191+ s += ".0";
192+ this.Ivalue += s;
193+ this.count = len this.Ivalue;
194+}#<<
195+
196+insert_int_I_I_V( this : ref StringBuffer_obj, p0 : int,p1 : int)
197+{#>>
198+ # insert 'p1' into the string the new string is
199+ # left + p1 + right; where left is Ivalue[:p0]
200+ # and right is Ivalue[p0:]. newright is
201+ # p1+right
202+ # assume args have been checked
203+ #
204+ newright := (string p1) + this.Ivalue[p0:];
205+ this.Ivalue = this.Ivalue[:p0] + newright;
206+ this.count = len this.Ivalue;
207+}#<<
208+
209+insert_long_I_J_V( this : ref StringBuffer_obj, p0 : int,p1 : big)
210+{#>>
211+ # insert 'p1' into the string the new string is
212+ # left + p1 + right; where left is Ivalue[0:p0]
213+ # and right is Ivalue[p0:count]. newright is
214+ # p1+right
215+ #
216+ newright := (string p1) + this.Ivalue[p0:];
217+ this.Ivalue = this.Ivalue[:p0] + newright;
218+ this.count = len this.Ivalue;
219+}#<<
220+
221+insert_str_I_rString_V( this : ref StringBuffer_obj, p0 : int,p1 : JString)
222+{#>>
223+ # insert 'p1' into the string the new string is
224+ # left + p1 + right; where left is Ivalue[0:p0]
225+ # and right is Ivalue[p0:count]. newright is
226+ # p1+right
227+ #
228+ val : string;
229+ if ( p1 == nil )
230+ val = "null";
231+ else
232+ val = p1.str;
233+ newright := val + this.Ivalue[p0:];
234+ left := this.Ivalue[:p0];
235+ this.Ivalue = left + newright;
236+ this.count = len this.Ivalue;
237+}#<<
238+
239+insert_chars_I_aC_V( this : ref StringBuffer_obj, p0 : int,p1 : JArrayC)
240+{#>>
241+ # insert 'p1' into the string the new string is
242+ # left + p1 + right; where left is Ivalue[:p0]
243+ # and right is Ivalue[p0:]. newright is
244+ # p1+right
245+ #
246+ if ( p1 == nil ) return;
247+
248+ # get copy of old right part and lop it off
249+ oldright := this.Ivalue[p0:];
250+ this.Ivalue = this.Ivalue[:p0];
251+
252+ # insert char array first
253+ for( x:=0; x<len p1.ary; x++ )
254+ this.Ivalue[p0 + x] = p1.ary[x];
255+
256+ # now add the old right back
257+ this.Ivalue += oldright;
258+ this.count = len this.Ivalue;
259+}#<<
260+
261+insert_ch_I_C_V( this : ref StringBuffer_obj, p0 : int,p1 : int)
262+{#>>
263+ # insert 'p1' into the string the new string is
264+ # left + p1 + right; where left is Ivalue[:p0]
265+ # and right is Ivalue[p0:]. newright is
266+ # p1+right
267+ #
268+ newright: string;
269+ newright[0] = p1;
270+ newright += this.Ivalue[p0:];
271+ this.Ivalue = this.Ivalue[:p0] + newright;
272+ this.count = len this.Ivalue;
273+}#<<
274+
275+insert_float_I_F_V( this : ref StringBuffer_obj, p0 : int,p1 : real)
276+{#>>
277+ # insert 'p1' into the string the new string is
278+ # left + p1 + right; where left is Ivalue[0:p0]
279+ # and right is Ivalue[p0:count]. newright is
280+ # p1+right
281+ #
282+ s := string p1;
283+ if(p1 == 0.0)
284+ s += ".0";
285+ newright := s + this.Ivalue[p0:];
286+ this.Ivalue = this.Ivalue[:p0] + newright;
287+ this.count = len this.Ivalue;
288+}#<<
289+
290+insert_double_I_D_V( this : ref StringBuffer_obj, p0 : int,p1 : real)
291+{#>>
292+ # insert 'p1' into the string the new string is
293+ # left + p1 + right; where left is Ivalue[0:p0]
294+ # and right is Ivalue[p0:count]. newright is
295+ # p1+right
296+ #
297+ s := string p1;
298+ if(p1 == 0.0)
299+ s += ".0";
300+ newright := s + this.Ivalue[p0:];
301+ this.Ivalue = this.Ivalue[:p0] + newright;
302+ this.count = len this.Ivalue;
303+}#<<
304+
305+get_string_rString( this : ref StringBuffer_obj) : JString
306+{#>>
307+ return( jni->NewString( this.Ivalue[:] ) ); #return a copy
308+}#<<
309+
310+get_chars_aC( this : ref StringBuffer_obj) : JArrayC
311+{#>>
312+ # return a char array
313+ l := len this.Ivalue;
314+ chars := array[l] of int;
315+ for( x:=0; x<l; x++ )
316+ chars[x] = this.Ivalue[x];
317+
318+ return( jni->MkAChar( chars ) );
319+}#<<
320+
321+#
322+# the next two functions are for serialization
323+#
324+
325+#
326+# write this.Ivalue (a Dis string) to an ObjectOutputStream as a char[]
327+#
328+
329+writeObject0_rObjectOutputStream_V(this : ref StringBuffer_obj, p0 : JObject)
330+{#>>
331+ jaryc := jni->StringToAChar(this.Ivalue);
332+ args := array[] of {
333+ ref Value.TObject(cast->FromJArray(cast->IntToJArray(jaryc)))
334+ };
335+ jni->CallMethod(p0, "writeObject", "(Ljava/lang/Object;)V", args);
336+}#<<
337+
338+#
339+# read a char[] from an ObjectInputStream and convert it to a Dis string
340+#
341+
342+readObject0_rObjectInputStream_V(this : ref StringBuffer_obj, p0 : JObject)
343+{#>>
344+ jaryc : JArrayC;
345+
346+ (val, ok) := jni->CallMethod(p0, "readObject", "()Ljava/lang/Object;", nil);
347+ if(ok == JNI->OK) {
348+ pick v := val {
349+ TObject =>
350+ jaryc = cast->ToJArrayC(v.jobj);
351+ }
352+ }
353+ if(jaryc == nil || len jaryc.ary < this.count)
354+ jni->ThrowException("java.io.IOException", "bad StringBuffer object serialized");
355+
356+ # JavaSoft JVM serializes trailing null characters; we can ignore
357+ for(i := 0; i < this.count; i++)
358+ this.Ivalue[i] = jaryc.ary[i];
359+}#<<
java/pkg2/java/lang/StringBuffer_L.m+42−0
@@ -0,0 +1,42 @@
1+# javal v1.4 generated file: edit with care
2+
3+##EDITED
4+
5+StringBuffer_L : module
6+{
7+ StringBuffer_obj : adt
8+ {
9+ cl_mod : ClassModule;
10+ Ivalue : string;
11+ buf_capacity : int;
12+ value : array of int;
13+ count : int;
14+ shared : byte;
15+ };
16+
17+ init : fn( jni_p : JNI );
18+ setLength0_I_V : fn( this : ref StringBuffer_obj, p0 : int);
19+ charAt0_I_C : fn( this : ref StringBuffer_obj, p0 : int) : int;
20+ getChars0_I_I_aC_I_V : fn( this : ref StringBuffer_obj, p0 : int,p1 : int,p2 : JArrayC,p3 : int);
21+ setCharAt0_I_C_V : fn( this : ref StringBuffer_obj, p0 : int,p1 : int);
22+ reverse0_V : fn( this : ref StringBuffer_obj);
23+ append_int_I_V : fn( this : ref StringBuffer_obj, p0 : int);
24+ append_long_J_V : fn( this : ref StringBuffer_obj, p0 : big);
25+ append_str_rString_V : fn( this : ref StringBuffer_obj, p0 : JString);
26+ append_chars_aC_I_I_V : fn( this : ref StringBuffer_obj, p0 : JArrayC,p1 : int,p2 : int);
27+ append_ch_C_V : fn( this : ref StringBuffer_obj, p0 : int);
28+ append_float_F_V : fn( this : ref StringBuffer_obj, p0 : real);
29+ append_double_D_V : fn( this : ref StringBuffer_obj, p0 : real);
30+ insert_int_I_I_V : fn( this : ref StringBuffer_obj, p0 : int,p1 : int);
31+ insert_long_I_J_V : fn( this : ref StringBuffer_obj, p0 : int,p1 : big);
32+ insert_str_I_rString_V : fn( this : ref StringBuffer_obj, p0 : int,p1 : JString);
33+ insert_chars_I_aC_V : fn( this : ref StringBuffer_obj, p0 : int,p1 : JArrayC);
34+ insert_ch_I_C_V : fn( this : ref StringBuffer_obj, p0 : int,p1 : int);
35+ insert_float_I_F_V : fn( this : ref StringBuffer_obj, p0 : int,p1 : real);
36+ insert_double_I_D_V : fn( this : ref StringBuffer_obj, p0 : int,p1 : real);
37+ get_string_rString : fn( this : ref StringBuffer_obj) : JString;
38+ get_chars_aC : fn( this : ref StringBuffer_obj) : JArrayC;
39+
40+ writeObject0_rObjectOutputStream_V : fn(this : ref StringBuffer_obj, p0 : JObject);
41+ readObject0_rObjectInputStream_V : fn(this : ref StringBuffer_obj, p0 : JObject);
42+};
java/pkg2/java/lang/StringIndexOutOfBoundsE..a+0−0

Empty file added.

java/pkg2/java/lang/String_L.b+517−0
@@ -0,0 +1,517 @@
1+implement String_L;
2+
3+# javal v1.6 generated file: edit with care
4+
5+include "jni.m";
6+ jni : JNI;
7+ ClassModule,
8+ JString,
9+ JArray,
10+ JArrayI,
11+ JArrayC,
12+ JArrayB,
13+ JArrayS,
14+ JArrayJ,
15+ JArrayF,
16+ JArrayD,
17+ JArrayZ,
18+ JArrayJObject,
19+ JArrayJClass,
20+ JArrayJString,
21+ JClass,
22+ JThread,
23+ JObject : import jni;
24+
25+#>> extra pre includes here
26+
27+#<<
28+
29+include "String_L.m";
30+
31+#>> extra post includes here
32+include "hash.m";
33+
34+str : String;
35+hash : Hash;
36+
37+#
38+# the following are for the intern() method
39+# a pool of all Java String classes is maintained
40+# hashed on the actual string contents. For any
41+# given actual string the same Java String object
42+# should be returned. We maingain a hash table
43+# of String objects, hashed on the string value.
44+#
45+PSZ : con 31;
46+pool := array[PSZ] of list of JString;
47+
48+PoolAdd( jstr : JString )
49+{
50+ idx := hash->fun1(jstr.str,PSZ);
51+ pool[idx] = jstr :: pool[idx];
52+}
53+
54+PoolGet( val : JString ) : JString
55+{
56+ # search for an existing object with same value
57+ for( l := pool[hash->fun1(val.str,PSZ)]; l != nil; l = tl l )
58+ {
59+ jstr := hd l;
60+ if (jstr.str == val.str)
61+ return( jstr );
62+ }
63+
64+ # could not find so add this class
65+ PoolAdd( val );
66+ return( val );
67+}
68+
69+#<<
70+
71+init( jni_p : JNI )
72+{
73+ # save java native inteface mod instance
74+ jni = jni_p;
75+ #>>extra initialization here
76+ str = jni->str;
77+ hash = load Hash Hash->PATH;
78+ if ( hash == nil )
79+ jni->InitError( jni->sys->sprint( "java.lang.String: could not load %s: %r", Hash->PATH ) );
80+ #<<
81+}
82+
83+length_I( this : JString) : int
84+{#>>
85+ return( len this.str );
86+}#<<
87+
88+charAt_I_C( this : JString, p0 : int) : int
89+{#>>
90+ if ((this.str == nil) || (p0 > (len this.str -1)) || (p0 < 0))
91+ jni->ThrowException( "java.lang.StringIndexOutOfBoundsException", string p0 );
92+ return( this.str[p0] );
93+}#<<
94+
95+getChars_I_I_aC_I_V( this : JString, p0 : int,p1 : int,p2 : JArrayC,p3 : int)
96+{#>>
97+ # fill the char array with each char from the string
98+
99+ # do some checking first
100+ if ( p0 < 0 )
101+ jni->ThrowException( "java.lang.StringIndexOutOfBoundsException", string p0 );
102+ if ( p1 > len this.str )
103+ jni->ThrowException( "java.lang.StringIndexOutOfBoundsException", string p1 );
104+ if ( p0 > p1 )
105+ jni->ThrowException( "java.lang.StringIndexOutOfBoundsException", string (p1-p0) );
106+
107+ # now check array and copy chars into
108+ copy_count := p1-p0; # number of chars to copy
109+
110+ #STD?? I will just throw an exception here if I know
111+ # I will overwrite the array bounds. To really be
112+ # legit I may need to copy upto the end and then throw
113+ if ( (copy_count + p3) > (len p2.ary) )
114+ jni->ThrowException( "java.lang.ArrayIndexOutOfBoundsException", string (len p2.ary) );
115+
116+ # now copy chars from this string into
117+ # the char array, starting at the indicated
118+ # position (p3) of the char array.
119+ for( x:=0; x<copy_count; x++ )
120+ p2.ary[p3+x] = this.str[p0+x];
121+
122+}#<<
123+
124+equality_rString_Z_Z( this : JString, p0 : JString,p1 : int) : int
125+{#>>
126+ if ( p0 == nil )
127+ return( JNI->FALSE );
128+
129+ if ( this.str == p0.str )
130+ return( JNI->TRUE );
131+
132+ # check if we should ignore case
133+ if ( p1 )
134+ return( str->toupper(this.str) == str->toupper(p0.str) );
135+
136+ # strings not equal
137+ return( JNI->FALSE );
138+
139+}#<<
140+
141+compareTo_rString_I( this : JString, p0 : JString) : int
142+{#>>
143+ # compare 'p0' to this.
144+ # return: 0 => equal
145+ # <0 => this < p0
146+ # >0 => this > p0
147+
148+ this_str := this.str;
149+ other := p0.str;
150+
151+ # simple equlity check
152+ if ( this_str == other )
153+ return( 0 );
154+
155+ # otherwise, determine if "this" is
156+ # lexicographically smaller than "other"
157+
158+ this_len := len this_str;
159+ other_len := len other;
160+ min := 0;
161+ if ( this_len < other_len )
162+ min = this_len;
163+ else
164+ min = other_len;
165+
166+ # find char where strings differ
167+ x:=0;
168+ while( (x<min) && (this_str[x]==other[x]) ) x++;
169+
170+ # is one string a proper prefix of the other?
171+ if(x == min)
172+ return this_len - other_len;
173+
174+ # if some chars were common then "this" is
175+ # smaller if the character where they differ
176+ # has a smaller value than "other"
177+ return( this_str[x] - other[x] );
178+}#<<
179+
180+regionMatches_Z_I_rString_I_I_Z( this : JString, p0 : int,p1 : int,p2 : JString,p3 : int,p4 : int) : int
181+{#>>
182+ # p0 => ignore case==1
183+ # p1 => this start index
184+ # p2 => other string
185+ # p3 => other start index
186+ # p4 => length to compare
187+
188+ # check params
189+ if ( (p1<0) || (p1 > (len this.str - p4)) ||
190+ (p3<0) || (p3 > (len p2.str - p4)) )
191+ return( jni->FALSE );
192+
193+ this_str, other : string;
194+
195+ this_last := (p1+p4);
196+ other_last := (p3+p4);
197+
198+ if ( int p0 == 1 )
199+ {
200+ # ignore case
201+ this_str = str->toupper(this.str[p1:this_last]);
202+ other = str->toupper(p2.str[p3:other_last]);
203+ }
204+ else
205+ {
206+ # case sensitive
207+ this_str = this.str[p1:this_last];
208+ other = p2.str[p3:other_last];
209+ }
210+
211+ # now compare the two substrings
212+ return( this_str == other );
213+}#<<
214+
215+hashCode_I( this : JString) : int
216+{#>>
217+ # hashcode of string as defined in JLS
218+ strhash := 0;
219+ this_str := this.str;
220+ this_len := len this_str;
221+
222+ if ( this_len <= 15 )
223+ {
224+ for(x:=0; x<this_len; x++)
225+ strhash = (strhash*37) + this_str[x];
226+ }
227+ else
228+ {
229+ k := int (this_len/8);
230+ for(x:=0; x < this_len; x+=k)
231+ strhash = (strhash*39) + this_str[x];
232+ }
233+
234+ return( strhash );
235+}#<<
236+
237+substring_I_I_rString( this : JString, p0 : int,p1 : int) : JString
238+{#>>
239+ # return string composed of chars p0..p1-1 both
240+ # java and limbo allow the p1 to be (len this.str)
241+ this_len := len this.str;
242+ if ( (p0 < 0) || (p1 > this_len) || (p0 > p1) )
243+ jni->ThrowException( "java.lang.StringIndexOutOfBoundsException",
244+ jni->sys->sprint( "len=%d begin=%d end=%d", this_len, p0, p1 ) );
245+
246+ return( jni->NewString( this.str[p0:p1] ) );
247+}#<<
248+
249+concat_rString_rString( this : JString, p0 : JString) : JString
250+{#>>
251+ if ( p0 == nil )
252+ jni->ThrowException( "java.lang.NullPointerException", "concat arg is null" );
253+
254+ # as defined in JLS: if p0 is 0 len return ref to this
255+ if ( (len p0.str) == 0 )
256+ return( this );
257+
258+ # return a new string composed of this+p0
259+ return( jni->NewString( this.str + p0.str ) );
260+}#<<
261+
262+replace_C_C_rString( this : JString, p0 : int,p1 : int) : JString
263+{#>>
264+ # p0 => old char, p1 => new char
265+ # if p0 does not exist in this then
266+ # return reference to this
267+ # otherwise return a new string which
268+ # is composed of the 'this' with all
269+ # old char's (p0) replaced with new chars (p1)
270+
271+ newstr := this.str[:];
272+ found := 0;
273+ for(x:=0; x<(len newstr); x++)
274+ {
275+ if ( newstr[x] == p0 )
276+ {
277+ found = 1;
278+ newstr[x] = p1;
279+ }
280+ }
281+
282+ if ( ! found )
283+ return( this );
284+
285+ return( jni->NewString( newstr ) );
286+}#<<
287+
288+trim_rString( this : JString) : JString
289+{#>>
290+ # as defined in JLS
291+ if ( this.str == "" )
292+ return( this );
293+
294+ this_str := this.str;
295+ if ( (this_str[0] > '\u0020') && (this_str[len this_str-1] > '\u0020') )
296+ return( this );
297+
298+ # look for first char > \u0020
299+ for( x:=0; x<(len this_str); x++ )
300+ if ( this_str[x] > '\u0020' ) break;
301+
302+ # if no chars < \u0020 found return a new "empty string"
303+ if ( x == len this_str )
304+ return( jni->NewString( "" ) );
305+
306+ first := x;
307+
308+ # look for last char > \u0020
309+ for( x=(len this_str -1); x >= 0; x-- )
310+ if ( this_str[x] > '\u0020' ) break;
311+
312+ last := x; # this has to be at least ==first
313+
314+ return( jni->NewString( this_str[first:last+1] ) );
315+
316+}#<<
317+
318+intern_rString( this : JString) : JString
319+{#>>
320+ # as defined in JLS
321+ # need to maintain a private pool of String
322+ # objects and return the same object for a
323+ # given string
324+ return( PoolGet( this ) );
325+}#<<
326+
327+utfLength_I( this : JString) : int
328+{#>>
329+ b : array of byte;
330+ b = array of byte this.str;
331+ return( len b );
332+}#<<
333+
334+fill_aC_I_I_V( this : JString, p0 : JArrayC,p1 : int,p2 : int)
335+{#>>
336+ #
337+ # create a newstring from the array of int
338+ #
339+
340+ # check array length
341+ if ( (p1+p2) > len p0.ary )
342+ jni->ThrowException( "java.lang.ArrayIndexOutOfBoundsException", string (len p0.ary) );
343+
344+ this.str = nil; # get rid of what is there
345+
346+ # now append each char to the string value
347+ # Lecuona correction: for( x:=0; x<(p2-p1); x++ )
348+ for( x:=0; x<p2; x++ )
349+ this.str[x] = p0.ary[x+p1];
350+}#<<
351+
352+isPrefix_rString_I_Z( this : JString, p0 : JString,p1 : int) : int
353+{#>>
354+ # p0 => string to compare
355+ # p1 => start index
356+
357+ # do some checking
358+ if ( p0 == nil )
359+ jni->ThrowException( "java.lang.NullPointerException", "String.isPrefix()" );
360+ other_len := len p0.str;
361+ endix := other_len + p1; # can overflow
362+ if ( p1 < 0 || endix > len this.str || endix < 0 )
363+ return( jni->FALSE );
364+ if ( other_len == 0 )
365+ return( jni->TRUE ); # JLS defined
366+ return( p0.str == this.str[p1:p1+other_len] );
367+}#<<
368+
369+isSuffix_rString_Z( this : JString, p0 : JString) : int
370+{#>>
371+ start := (len this.str) - (len p0.str);
372+ if ( start < 0 )
373+ return( jni->FALSE );
374+
375+ return( p0.str == this.str[start:] );
376+}#<<
377+
378+uppercase_rString( this : JString) : JString
379+{#>>
380+ return( jni->NewString( str->toupper(this.str) ) );
381+}#<<
382+
383+lowercase_rString( this : JString) : JString
384+{#>>
385+ return( jni->NewString( str->tolower(this.str) ) );
386+}#<<
387+
388+index_rString_I_I( this : JString, p0 : JString,p1 : int) : int
389+{#>>
390+ # p0 => string to match
391+ # p1 => index to start search from
392+ # p2 => searche left-right=1 right-left=0
393+ this_str := this.str;
394+ this_len := len this_str;
395+ other := p0.str;
396+ other_len := len other;
397+
398+ # if other > this then it can't be a substring
399+ if ( other_len > this_len )
400+ return( -1 );
401+
402+ # if start index <0 make it 0, if > len return -1
403+ from := 0;
404+ if ( p1 > 0 )
405+ {
406+ from = p1;
407+ # this also handles p1 > this_len
408+ # which will return -1 below, we
409+ }
410+
411+ # null string always matches
412+ if ( other_len == 0 )
413+ return from;
414+
415+ # determine char of this to stop searching on
416+ stop_char := this_len - other_len;
417+
418+ # look for first-char match then
419+ # match the substring.
420+ for( i:=from; i <= stop_char; i++ )
421+ if ( (this_str[i] == other[0]) &&
422+ (this_str[i:i+other_len] == other) )
423+ return( i );
424+
425+ # match failed
426+ return( -1 );
427+}#<<
428+
429+index_I_I_I( this : JString, p0 : int,p1 : int) : int
430+{#>>
431+ # p0 => char to match
432+ # p1 => start index
433+
434+ this_str := this.str;
435+ this_len := len this_str;
436+
437+ # if start index <0 make it 0, if > len return -1
438+ from := 0;
439+ if ( p1 > 0 )
440+ from = p1;
441+
442+ # start from left,
443+ # look for first match
444+ for( i:=from; i < this_len; i++ )
445+ if ( this_str[i] == p0 )
446+ return( i );
447+
448+ # match failed
449+ return( -1 );
450+}#<<
451+
452+rindex_rString_I_Z_I( this : JString, p0 : JString,p1 : int,p2 : int) : int
453+{#>>
454+ # p0 => string to match
455+ # p1 => index to start search from
456+ # p2 => 1 == search from end (ignore p1)
457+ this_str := this.str;
458+ this_len := len this_str;
459+ other := p0.str;
460+ other_len := len other;
461+
462+ # if other > this then it can't be a substring
463+ if ( other_len > this_len )
464+ return( -1 );
465+
466+ # if start index > this_len-other_len make it this_len-other_len
467+ # if < 0 return -1
468+ from := this_len - other_len;
469+ if ( (p2 != 1) && (p1 < from) )
470+ {
471+ from = p1;
472+ # this also handles the defined case
473+ # of p1 < 0 is the same as p1==-1 and
474+ # will return -1 below
475+ }
476+
477+ # start from end
478+ if ( other_len == 0 )
479+ return( from ); # empty string always matches
480+
481+ # look for first char match starting from right
482+ # then match the substring
483+ for( i:=from; i >= 0; i-- )
484+ if ( (this_str[i] == other[0]) &&
485+ (this_str[i:i+other_len] == other) )
486+ return(i);
487+
488+ return(-1); #no match
489+}#<<
490+
491+rindex_I_I_Z_I( this : JString, p0 : int,p1 : int,p2 : int) : int
492+{#>>
493+ # p0 => char to match
494+ # p1 => start index
495+ # p2 => 1 == scan from (len this.str -1)
496+
497+ this_str := this.str;
498+
499+ # if start index < 0 return -1, if > len this.str make it the length
500+ from := len this_str - 1;
501+ if ( (p2 != 1) && (p1 < from) )
502+ {
503+ from = p1;
504+ }
505+
506+ # start from right
507+ # look for first match
508+ for( i:=from; i >= 0; i-- )
509+ if ( this_str[i] == p0 )
510+ return(i);
511+
512+ # match failed
513+ return( -1 );
514+}#<<
515+
516+
517+
java/pkg2/java/lang/String_L.m+30−0
@@ -0,0 +1,30 @@
1+# javal v1.6 generated file: edit with care
2+
3+String_L : module
4+{
5+
6+ init : fn( jni_p : JNI );
7+ length_I : fn( this : JString) : int;
8+ charAt_I_C : fn( this : JString, p0 : int) : int;
9+ getChars_I_I_aC_I_V : fn( this : JString, p0 : int,p1 : int,p2 : JArrayC,p3 : int);
10+ equality_rString_Z_Z : fn( this : JString, p0 : JString,p1 : int) : int;
11+ compareTo_rString_I : fn( this : JString, p0 : JString) : int;
12+ regionMatches_Z_I_rString_I_I_Z : fn( this : JString, p0 : int,p1 : int,p2 : JString,p3 : int,p4 : int) : int;
13+ hashCode_I : fn( this : JString) : int;
14+ substring_I_I_rString : fn( this : JString, p0 : int,p1 : int) : JString;
15+ concat_rString_rString : fn( this : JString, p0 : JString) : JString;
16+ replace_C_C_rString : fn( this : JString, p0 : int,p1 : int) : JString;
17+ trim_rString : fn( this : JString) : JString;
18+ intern_rString : fn( this : JString) : JString;
19+ utfLength_I : fn( this : JString) : int;
20+ fill_aC_I_I_V : fn( this : JString, p0 : JArrayC,p1 : int,p2 : int);
21+ isPrefix_rString_I_Z : fn( this : JString, p0 : JString,p1 : int) : int;
22+ isSuffix_rString_Z : fn( this : JString, p0 : JString) : int;
23+ uppercase_rString : fn( this : JString) : JString;
24+ lowercase_rString : fn( this : JString) : JString;
25+ index_rString_I_I : fn( this : JString, p0 : JString,p1 : int) : int;
26+ index_I_I_I : fn( this : JString, p0 : int,p1 : int) : int;
27+ rindex_rString_I_Z_I : fn( this : JString, p0 : JString,p1 : int,p2 : int) : int;
28+ rindex_I_I_Z_I : fn( this : JString, p0 : int,p1 : int,p2 : int) : int;
29+
30+};
java/pkg2/java/lang/System.java+0−0

Empty file added.

java/pkg2/java/lang/System_L.b+133−0
@@ -0,0 +1,133 @@
1+implement System_L;
2+
3+# javal v1.2 generated file: edit with care
4+
5+include "jni.m";
6+ jni : JNI;
7+ ClassModule,
8+ JString,
9+ JArray,
10+ JArrayI,
11+ JArrayC,
12+ JArrayB,
13+ JArrayS,
14+ JArrayJ,
15+ JArrayF,
16+ JArrayD,
17+ JArrayZ,
18+ JArrayJObject,
19+ JArrayJClass,
20+ JArrayJString,
21+ JClass,
22+ JObject : import jni;
23+
24+#>> extra pre includes here
25+
26+#<<
27+
28+include "System_L.m";
29+
30+#>> extra post includes here
31+include "workdir.m";
32+
33+cast : Cast;
34+system_class : JNI->ClassData; # java.lang.System class data
35+
36+#<<
37+
38+init( jni_p : JNI )
39+{
40+ # save java native inteface mod instance
41+ jni = jni_p;
42+ #>>extra initialization here
43+ system_class = jni->FindClass( "java/lang/System" );
44+ if ( system_class == nil )
45+ jni->InitError( "System_L.init(): failed to find System class" );
46+
47+ # we Cast in this module
48+ cast = jni->CastMod();
49+ #<<
50+}
51+
52+setIn0_rInputStream_V( p0 : JObject)
53+{#>>
54+ Value : import JNI;
55+ val := ref Value.TObject(p0);
56+ jni->SetStaticField( system_class, "in", val );
57+}#<<
58+
59+setOut0_rPrintStream_V( p0 : JObject)
60+{#>>
61+ Value : import JNI;
62+ val := ref Value.TObject(p0);
63+ jni->SetStaticField( system_class, "out", val );
64+}#<<
65+
66+setErr0_rPrintStream_V( p0 : JObject)
67+{#>>
68+ Value : import JNI;
69+ val := ref Value.TObject(p0);
70+ jni->SetStaticField( system_class, "err", val );
71+}#<<
72+
73+currentTimeMillis_J( ) : big
74+{#>>
75+ fd := jni->sys->open("#c/time", jni->sys->OREAD);
76+ if(fd == nil)
77+ return big 0;
78+ buf := array[128] of byte;
79+ n := jni->sys->read(fd, buf, len buf);
80+ if(n < 0)
81+ return big 0;
82+
83+ return ( (big string buf[:n]) / big 1000 );
84+}#<<
85+
86+arraycopy_rObject_I_rObject_I_I_V( p0 : JObject,p1 : int,p2 : JObject,p3 : int,p4 : int)
87+{#>>
88+ jni->jldr->arraycopy( cast->ToJArray(p0), p1, cast->ToJArray(p2), p3, p4 );
89+}#<<
90+
91+identityHashCode_rObject_I( p0 : JObject) : int
92+{#>>
93+ return( jni->IdentityHash(p0) );
94+}#<<
95+
96+GetUserName_rString( ) : JString
97+{#>>
98+ # return the current inferno user
99+ # name as a Java String
100+ #
101+ user_name : string;
102+
103+ fd := jni->sys->open("#c/user", jni->sys->OREAD);
104+ if(fd == nil)
105+ user_name = "unknown";
106+ else {
107+ buf := array[128] of byte;
108+ n := jni->sys->read(fd, buf, len buf);
109+ if(n < 0)
110+ user_name = "unknown";
111+ else
112+ user_name = string buf[:n];
113+ }
114+
115+ # make java string from user name
116+ return( jni->NewString( user_name ) );
117+}#<<
118+
119+GetCWD_rString( ) : JString
120+{#>>
121+ # return the current working directory
122+ # as a Java String
123+ #
124+ # this fct is really only called once so
125+ # just load Workdir right here
126+ wdir := load Workdir Workdir->PATH;
127+ if ( wdir == nil )
128+ jni->InitError( jni->sys->sprint( "java.lang.System: could not load %s: %r", Workdir->PATH ) );
129+
130+ return( jni->NewString( wdir->init() ) );
131+}#<<
132+
133+
java/pkg2/java/lang/System_L.m+20−0
@@ -0,0 +1,20 @@
1+# javal v1.2 generated file: edit with care
2+
3+System_L : module
4+{
5+ System_obj : adt
6+ {
7+ cl_mod : ClassModule;
8+ };
9+
10+ init : fn( jni_p : JNI );
11+ setIn0_rInputStream_V : fn( p0 : JObject);
12+ setOut0_rPrintStream_V : fn( p0 : JObject);
13+ setErr0_rPrintStream_V : fn( p0 : JObject);
14+ currentTimeMillis_J : fn( ) : big;
15+ arraycopy_rObject_I_rObject_I_I_V : fn( p0 : JObject,p1 : int,p2 : JObject,p3 : int,p4 : int);
16+ identityHashCode_rObject_I : fn( p0 : JObject) : int;
17+ GetUserName_rString : fn( ) : JString;
18+ GetCWD_rString : fn( ) : JString;
19+
20+};
java/pkg2/java/lang/Thread.java+0−0

Empty file added.

java/pkg2/java/lang/ThreadDeath.java+0−0

Empty file added.

java/pkg2/java/lang/ThreadGroup.java+0−0

Empty file added.

java/pkg2/java/lang/Thread_L.b+455−0
@@ -0,0 +1,455 @@
1+implement Thread_L;
2+
3+# javal v1.3 generated file: edit with care
4+
5+include "jni.m";
6+ jni : JNI;
7+ ClassModule,
8+ JString,
9+ JArray,
10+ JArrayI,
11+ JArrayC,
12+ JArrayB,
13+ JArrayS,
14+ JArrayJ,
15+ JArrayF,
16+ JArrayD,
17+ JArrayZ,
18+ JArrayJObject,
19+ JArrayJClass,
20+ JArrayJString,
21+ JClass,
22+ JThread,
23+ JObject : import jni;
24+
25+#>> extra pre includes here
26+
27+#<<
28+
29+include "Thread_L.m";
30+
31+#>> extra post includes here
32+
33+sys : Sys;
34+jldr : JavaClassLoader;
35+cast : Cast;
36+
37+# following used for calling Thread.run()
38+threadclass : JNI->ClassData; #class data for java.lang.Thread
39+thread_run_idx : int; #method index for Thread.run()
40+thread_exit_idx : int; #method index for Thread.exit()
41+
42+# some imports
43+ThreadData : import jldr;
44+
45+#<<
46+
47+init( jni_p : JNI )
48+{
49+ # save java native inteface mod instance
50+ jni = jni_p;
51+ #>>extra initialization here
52+
53+ sys = jni->sys;
54+ jldr = jni->jldr;
55+ cast = jni->CastMod();
56+
57+ threadclass = jni->FindClass( "java.lang.Thread" );
58+ if ( threadclass == nil )
59+ jni->InitError( "Thread_L.init(): could not get thread class" );
60+
61+ Class : import jldr;
62+ thread_run_idx = threadclass.findvmethod( "run", "()V" );
63+ if ( thread_run_idx == -1 )
64+ jni->InitError( "Thread_L.init(): could not locate Thread.run()" );
65+
66+ #thread_exit_idx = threadclass.findvmethod( "exit", "()V" );
67+ #if ( exit_idx == -1 )
68+ # jni->InitError( "Thread_L.init(): could not locate Thread.exit()" );
69+ #<<
70+}
71+
72+currentThread_rThread( ) : JThread
73+{#>>
74+ e := ref Sys->Exception;
75+ if ( sys->rescue("*",e) == Sys->HANDLER )
76+ {
77+ # get the java thread object assocciated
78+ # with this thread. it is stored in the
79+ # class loader's thread structure.
80+ thd_obj := jldr->getthreaddata().this;
81+ if ( thd_obj != nil )
82+ return( cast->JObjToJThd(thd_obj) );
83+ sys->unrescue();
84+ }
85+ else
86+ sys->rescued(Sys->ONCE, nil);
87+
88+
89+ # either we could not find the thread data
90+ # or no "Thread" object was stored in it
91+ # either way we are in bad shape
92+ jni->FatalError( "could not get thread object" );
93+
94+ return(nil);
95+}#<<
96+
97+yield_V( )
98+{#>>
99+ jni->sys->sleep(0);
100+}#<<
101+
102+sleep_J_V( p0 : big)
103+{#>>
104+ millis := int p0;
105+
106+ if ( millis < 1 )
107+ {
108+ if ( millis == 0 )
109+ {
110+ # just yield thread
111+ jni->sys->sleep(0);
112+ return;
113+ }
114+
115+ # bad sleep value
116+ jni->ThrowException( "java.lang.IllegalArgumentException", "timeout value is negative" );
117+ }
118+ jldr->sleep( millis );
119+}#<<
120+
121+start_V( this : JThread)
122+{#>>
123+ thdobj := cast->JThdToJObj(this);
124+
125+ # grab the lock on the thread object to ensure
126+ # no state is changed while we are starting the
127+ # thread.
128+# jni->MonitorEnter( thdobj );
129+
130+ if ( (this.stillborn == byte 0) && (this.PrivateInfo == nil) )
131+ {
132+ # spawn a limbo fct as the java
133+ # thread's starting point.
134+ ok := chan of int;
135+ spawn javathreadinit( this, ok );
136+
137+ # wait for thread to init then we can
138+ # continue. Note we hold a lock and
139+ # the thread will change some state
140+ # and notify us before the java run()
141+ # method is invoked. The purpose is to
142+ # allow for state information to be updated
143+ # while we have the lock.
144+ status := <- ok;
145+
146+ #status == 0 is an err
147+ # == 1 is ok
148+
149+ if ( status == 0 )
150+ {
151+ this.stillborn = byte 1;
152+ this.PrivateInfo = nil;
153+ }
154+
155+ }
156+# jni->MonitorExit( thdobj );
157+}#<<
158+
159+isInterrupted_Z_Z( this : JThread, p0 : int) : int
160+{#>>
161+ old_flag := int this.was_interrupted;
162+
163+ if ( old_flag )
164+ this.was_interrupted = byte p0;
165+ return( old_flag );
166+}#<<
167+
168+isAlive_Z( this : JThread) : int
169+{#>>
170+ thd := this.PrivateInfo;
171+ if ( (this.stillborn == byte 0) && (thd != nil) )
172+ {
173+ # JLS does not require that we actually determine
174+ # the "os" thread is alive, just that the object
175+ # state indicates it is
176+ return( JNI->TRUE );
177+ }
178+
179+ # looks like thread is not alive
180+ return( jni->FALSE );
181+}#<<
182+
183+countStackFrames_I( this : JThread) : int
184+{#>>
185+ junk := this;
186+ # need to do some /prog work
187+ return( 0 );
188+}#<<
189+
190+setPriority0_I_V( this : JThread, p0 : int)
191+{#>>
192+ # just save the priority, a dis thread
193+ # has no priority
194+ this.priority = p0;
195+}#<<
196+
197+stop0_rObject_V( this : JThread, p0 : JObject)
198+{#>>
199+ # the calling thread is attempting to throw an
200+ # exception at "this" thread (i.e. the one represented
201+ # by this thread object. make sure that thread at least
202+ # appears to be running and throw the exceptio at it
203+
204+ thd := this.PrivateInfo;
205+ stillborn := this.stillborn;
206+
207+ # prevent a start or re-start
208+ this.stillborn = byte 1;
209+
210+ if ( (stillborn == byte 0) && (thd != nil) )
211+ {
212+ # throw the exception (p0) at the thread
213+ jldr->stop( thd, p0 );
214+ }
215+
216+}#<<
217+
218+suspend0_V( this : JThread)
219+{#>>
220+ # the calling thread wants to suspend
221+ # the "this" thread.
222+ thd := this.PrivateInfo;
223+ if ( (this.stillborn == byte 0) && (thd != nil) )
224+ jldr->suspend( thd );
225+
226+}#<<
227+
228+resume0_V( this : JThread)
229+{#>>
230+ # the calling thread wants to resume
231+ # the "this" thread.
232+ thd := this.PrivateInfo;
233+ if ( (this.stillborn == byte 0) && (thd != nil) )
234+ jldr->resume( thd );
235+}#<<
236+
237+interrupt0_V( this : JThread)
238+{#>>
239+ # the calling thread wants to interrupt
240+ # the "this" thread.
241+ thd := this.PrivateInfo;
242+ if ( (this.stillborn == byte 0) && (thd != nil) )
243+ jldr->interrupt( thd );
244+}#<<
245+
246+lowinit_rThread_V( p0 : JThread)
247+{#>>
248+ # this fct is called once during the static init of the
249+ # java.lang.Thread object. 'p0' is the "root thread" object
250+ # which must be associated witht the Dis thread which is
251+ # calling this fuction -- i.e. associate the 'p0' java thread
252+ # object with the current Dis thread. 'p1' is the same thread
253+ # object, just with the type JObject which allows us to store
254+ # it off in the JavaClassLoader->ThreadData structure associated
255+ # with the calling Dis thread.
256+
257+ # since this is the root thread make a root thread group by
258+ # creating an instance of ThreadGroup and calling its private
259+ # default constructor.
260+ thd_grp_cl := jni->FindClass( "java.lang.ThreadGroup" );
261+ if ( thd_grp_cl == nil )
262+ jni->FatalError( "could not obtain ThreadGroup class" );
263+
264+ thd_grp := jni->NewObject( thd_grp_cl );
265+ if ( thd_grp == nil )
266+ jni->FatalError( "could not created root threadgroup" );
267+ p0.group = thd_grp;
268+
269+ # get the ThreadData structure for the calling thread
270+ thd := jldr->getthreaddata();
271+ thd.this = cast->JThdToJObj(p0); # save java object in thread data
272+ p0.PrivateInfo = thd; # save thread data in java object
273+
274+}#<<
275+
276+
277+
278+
279+
280+##### private functions used by the Thread_L module
281+
282+#
283+# this function is the first function of all java
284+# threads, except for the first thread which is
285+# controlled by the JavaClassLoader module.
286+#
287+# jthd : the Java thread object associated with this
288+# Dis thread.
289+#
290+# ok : use this channel to notify "spawner" that
291+# we are under-way. send 0==fail; 1==ok
292+#
293+javathreadinit( jthd : JNI->JThread, ok : chan of int )
294+{
295+ # create a JavaClassLoader->ThreadData structure
296+ # and "register" it with the class loader.
297+
298+ thd := jldr->getthreaddata();
299+
300+ if ( thd.this != nil )
301+ {
302+ # this should be nil, else the java thread
303+ # already is set for this Dis thread and we
304+ # are in some screwed-up state.
305+ ok <-= 0;
306+ return;
307+ }
308+
309+ # now fill in the java thread obj (after
310+ # the putthreaddata so any init is not affected
311+ thdobj := cast->JThdToJObj( jthd );
312+ thd.this = thdobj;
313+
314+ # now save the ThreadData in the java object in order
315+ # to allow a lookup from the other diretion
316+ jthd.PrivateInfo = thd;
317+
318+ # set our daemon thread status
319+ if ( jthd.daemon == JNI->BTRUE )
320+ jldr->daemonize();
321+
322+ # notify spawner we are under-way
323+ ok <- = 1;
324+
325+ # we need to catch any exceptions in order
326+ # to clean up the thread object's state
327+ ee := ref Sys->Exception;
328+ if ( sys->rescue( "*", ee ) == Sys->HANDLER )
329+ {
330+
331+ # call Thread.run() or Runnable.run()
332+ Run( jthd, thdobj );
333+
334+ # call Thread.exit()
335+ (mod,idx) := jni->FindMethod( threadclass, "exit", "()V", JNI->METH_PRIVATE );
336+ jni->jassist->mcall1( mod, idx, thdobj );
337+ sys->unrescue();
338+ }
339+ else
340+ {
341+ # clear exception
342+ sys->rescued( Sys->ONCE, nil );
343+
344+ # thread threw an unhandled exception so
345+ # call the ThreadGroup.uncaughtException()
346+ # method.
347+ UncaughtException( jthd, thdobj, ee );
348+ }
349+
350+ # java thread clean up
351+
352+ jni->jldr->monitorenter( thdobj ); ##LOCK thread object
353+ {
354+
355+ jthd.stillborn = byte 1; # prevent re-run
356+
357+ # notify ALL "waiters" (which includes any Thread.join()'s)
358+ jni->jldr->monitornotify( thdobj, 1 );
359+ }
360+ jni->jldr->monitorexit( thdobj ); ##UNLOCK thread object
361+
362+ # clean up thread structures
363+ jldr->delthreaddata();
364+ thd.this = nil;
365+ jthd.PrivateInfo = nil;
366+}
367+
368+
369+#
370+# if the thread object contains a "registered" Runnable
371+# object then execute that Runnable's run() method, else
372+# execute the Thread's run() method (which should be
373+# overridden.
374+#
375+Run( jthd : JNI->JThread, thdobj : JObject )
376+{
377+ Class : import jldr;
378+ class : JNI->ClassData;
379+ run_idx := thread_run_idx; #default to Thread.run()
380+ obj := thdobj; #this obj for run() call
381+
382+ if ( jthd.target != nil )
383+ {
384+ # the thread has a registered Runnable
385+ # object, find its run() method
386+ class = jni->GetObjectClassData( jthd.target );
387+ run_idx = class.findvmethod( "run", "()V" );
388+ if ( run_idx == -1 )
389+ return;
390+ obj = jthd.target; #set 'this' to the runnable obj
391+ }
392+ else
393+ {
394+ # use the thread object's run()
395+ class = jni->GetObjectClassData(thdobj);
396+ }
397+
398+ run_method := class.virtualmethods[run_idx];
399+
400+ # do the run()
401+ jni->jassist->mcall1( run_method.class.mod, run_method.field.value, obj );
402+}
403+
404+#
405+# If the thread's ThreadGroup is a subclass of java.lang.ThreadGroup
406+# then invoke that class'es "uncaughtException" method. This
407+# method is called whenever a thread does not handle an exception.
408+# The method is passed an instance of the Thread along with the
409+# "throwable" (i.e. exception).
410+#
411+UncaughtException( jthd : JThread, thdobj : JObject, ee : ref Sys->Exception )
412+{
413+ tgrp_cl := jni->GetObjectClassData( jthd.group );
414+
415+ #
416+ # if the thread group is the default thread group
417+ # class, then we will handle the excepition here
418+ # which is to simply do nothing.
419+ #
420+ if ( tgrp_cl.name != "java/lang/ThreadGroup" )
421+ {
422+ # call method, protected against exceptions
423+ # since we must still clean-up the thread
424+ eee := ref Sys->Exception;
425+ if ( sys->rescue( "*", eee ) == Sys->HANDLER )
426+ {
427+ # find the uncaughtException method for the thd-grp
428+ (mod,idx) := jni->FindMethod( tgrp_cl, "uncaughtException",
429+ "(Ljava.lang.Thread;Ljava.lang.Throwable;)V",
430+ JNI->METH_VIRTUAL );
431+ if ( mod != nil )
432+ {
433+ # call the uncaughException handler
434+ Value : import jni;
435+ args := array[] of
436+ {
437+ ref Value.TObject(thdobj), #the thread
438+ ref Value.TObject(jldr->culprit(ee)) #the exception
439+ };
440+
441+ # do the call
442+ ##LATER nil := jni->LowCall( mod, idx, jthd.group, args );
443+ }
444+ sys->unrescue();
445+ }
446+ else
447+ {
448+ # if we get an exception here just return
449+ # and let the thread finish cleanup.
450+ sys->rescued( Sys->ONCE, nil );
451+ }
452+ }
453+
454+}
455+
java/pkg2/java/lang/Thread_L.m+21−0
@@ -0,0 +1,21 @@
1+# javal v1.3 generated file: edit with care
2+
3+Thread_L : module
4+{
5+
6+ init : fn( jni_p : JNI );
7+ currentThread_rThread : fn( ) : JThread;
8+ yield_V : fn( );
9+ sleep_J_V : fn( p0 : big);
10+ start_V : fn( this : JThread);
11+ isInterrupted_Z_Z : fn( this : JThread, p0 : int) : int;
12+ isAlive_Z : fn( this : JThread) : int;
13+ countStackFrames_I : fn( this : JThread) : int;
14+ setPriority0_I_V : fn( this : JThread, p0 : int);
15+ stop0_rObject_V : fn( this : JThread, p0 : JObject);
16+ suspend0_V : fn( this : JThread);
17+ resume0_V : fn( this : JThread);
18+ interrupt0_V : fn( this : JThread);
19+ lowinit_rThread_V : fn( p0 : JThread);
20+
21+};
java/pkg2/java/lang/Throwable.java+0−0

Empty file added.

java/pkg2/java/lang/Throwable_L.b+96−0
@@ -0,0 +1,96 @@
1+implement Throwable_L;
2+
3+# javal v1.2 generated file: edit with care
4+
5+include "jni.m";
6+ jni : JNI;
7+ ClassModule,
8+ JString,
9+ JArray,
10+ JArrayI,
11+ JArrayC,
12+ JArrayB,
13+ JArrayS,
14+ JArrayJ,
15+ JArrayF,
16+ JArrayD,
17+ JArrayZ,
18+ JArrayJObject,
19+ JArrayJClass,
20+ JArrayJString,
21+ JClass,
22+ JObject : import jni;
23+
24+#>> extra pre includes here
25+
26+#<<
27+
28+include "Throwable_L.m";
29+
30+#>> extra post includes here
31+
32+#<<
33+
34+init( jni_p : JNI )
35+{
36+ # save java native inteface mod instance
37+ jni = jni_p;
38+ #>>extra initialization here
39+ #<<
40+}
41+
42+printStackTrace0_rObject_V( this : ref Throwable_obj, p0 : JObject)
43+{#>>
44+ Value : import jni;
45+ jldr := jni->jldr;
46+ Object : import jldr;
47+
48+ if ( this.backtrace != nil )
49+ {
50+ args := array[] of
51+ {
52+ ref Value.TObject( jni->NewStringObject( string this.backtrace ) )
53+ };
54+ (nil,nil):=jni->CallMethod( p0, "println", "(Ljava/lang/String;)V", args );
55+ # ignore any erros
56+ }
57+
58+}#<<
59+
60+fillInStackTrace_rThrowable( this : ref Throwable_obj) : ref Throwable_obj
61+{#>>
62+ # attempt to open the local "prog" device (i.e. '#p')
63+ # and read the call stack into an array of bytes
64+ pid := jni->sys->pctl(0,nil);
65+ progfile := "#p/"+ (string pid) +"/stack";
66+ fd := jni->sys->open( progfile, Sys->OREAD );
67+ if ( fd != nil )
68+ {
69+ # must spin a thread to read my own call-stack
70+ result := chan of array of byte; # channel for thd results
71+ spawn ReadCallStack( fd, result );
72+ this.backtrace = <- result; # wait for results
73+
74+ }
75+ else
76+ this.backtrace = array of byte jni->sys->sprint("could not open %s:%r\n", progfile );
77+
78+ return( this );
79+}#<<
80+
81+####### private functions
82+
83+
84+ReadCallStack( fd : ref Sys->FD, result : chan of array of byte )
85+{
86+ buf := array[8000] of byte; #about 10 frames
87+ n := jni->sys->read(fd, buf, len buf - 1);
88+ fd = nil;
89+ if(n < 0)
90+ buf = array of byte jni->sys->sprint("could not read call-stack:%r\n");
91+ else
92+ buf[n] = byte 0;
93+
94+ result <- = buf[:n+1];
95+}
96+
java/pkg2/java/lang/Throwable_L.m+16−0
@@ -0,0 +1,16 @@
1+# javal v1.2 generated file: edit with care
2+
3+Throwable_L : module
4+{
5+ Throwable_obj : adt
6+ {
7+ cl_mod : ClassModule;
8+ backtrace : array of byte;
9+ detailMessage : JString;
10+ };
11+
12+ init : fn( jni_p : JNI );
13+ printStackTrace0_rObject_V : fn( this : ref Throwable_obj, p0 : JObject);
14+ fillInStackTrace_rThrowable : fn( this : ref Throwable_obj) : ref Throwable_obj;
15+
16+};
java/pkg2/java/lang/UnknownError.java+0−0

Empty file added.

java/pkg2/java/lang/UnsatisfiedLinkError.java+0−0

Empty file added.

java/pkg2/java/lang/VerifyError.java+0−0

Empty file added.

java/pkg2/java/lang/VirtualMachineError.java+0−0

Empty file added.

java/pkg2/java/lang/Void.java+0−0

Empty file added.

java/pkg2/java/lang/mkfile+152−0
@@ -0,0 +1,152 @@
1+<../../../../mkconfig
2+
3+DIRS=\
4+ reflect\
5+
6+TARG=\
7+ AbstractMethodError.dis\
8+ ArithmeticException.dis\
9+# for ArrayIndexOutOfBoundsException.dis\
10+ ++5KkA5LRlUzD1nsDM8Mj.dis\
11+ ArrayStoreException.dis\
12+ Boolean.dis\
13+ Byte.dis\
14+ Character.dis\
15+ Class.dis\
16+ ClassCastException.dis\
17+ ClassCircularityError.dis\
18+ ClassFormatError.dis\
19+ ClassLoader.dis\
20+# for ClassNotFoundException.dis\
21+ S1vm8N5TePhsu3h1FO7yj.dis\
22+# for CloneNotSupportedException.dis\
23+ wmF21yXDq7VxPRRLc7v5t.dis\
24+ Cloneable.dis\
25+ Compiler.dis\
26+ Double.dis\
27+ Error.dis\
28+ Exception.dis\
29+# for ExceptionInInitializerError.dis\
30+ Ub2BD3PjJRDSI4wyZi7ID.dis\
31+ Float.dis\
32+ IllegalAccessError.dis\
33+# for IllegalAccessException.dis\
34+ ClJ4BmIE1TECvv1qdqbQN.dis\
35+# for IllegalArgumentException.dis\
36+ Z07h8c1IAX5LIjYbhqgGl.dis\
37+# for IllegalMonitorStateException.dis\
38+ 375fcBxmum6K8ZSGn7W2N.dis\
39+ IllegalStateException.dis\
40+# for IllegalThreadStateException.dis\
41+ 1PLXdCFiGoZkxBoL8Bo0P.dis\
42+# for IncompatibleClassChangeError.dis\
43+ FiACrRolKM+iZTikdgUFa.dis\
44+# for IndexOutOfBoundsException.dis\
45+ IKsPHNdWGHpuZGqgvYD4e.dis\
46+ InfernoProcess.dis\
47+ InstantiationError.dis\
48+# for InstantiationException.dis\
49+ jhj+E2mCFNmQ2VUL0zYp8.dis\
50+ Integer.dis\
51+ InternalError.dis\
52+ InterruptedException.dis\
53+ LinkageError.dis\
54+ Long.dis\
55+ Math.dis\
56+# for NegativeArraySizeException.dis\
57+ iu6-cux1hLK1GoPKq9m1l.dis\
58+ NoClassDefFoundError.dis\
59+ NoSuchFieldError.dis\
60+ NoSuchFieldException.dis\
61+ NoSuchMethodError.dis\
62+ NoSuchMethodException.dis\
63+ NullPointerException.dis\
64+ NullSecurityManager.dis\
65+ Number.dis\
66+ NumberFormatException.dis\
67+ Object.dis\
68+ OutOfMemoryError.dis\
69+ Process.dis\
70+ Runnable.dis\
71+ Runtime.dis\
72+ RuntimeException.dis\
73+ SecurityException.dis\
74+ SecurityManager.dis\
75+ Short.dis\
76+ StackOverflowError.dis\
77+ String.dis\
78+ StringBuffer.dis\
79+# for StringIndexOutOfBoundsException.dis\
80+ 5ZD+zz0io892VFWeXUN1a.dis\
81+ System.dis\
82+ Thread.dis\
83+ ThreadDeath.dis\
84+ ThreadGroup.dis\
85+ Throwable.dis\
86+ UnknownError.dis\
87+ UnsatisfiedLinkError.dis\
88+ VerifyError.dis\
89+ VirtualMachineError.dis\
90+ Void.dis\
91+# Limbo code\
92+ Character_L.dis\
93+ ClassLoader_L.dis\
94+ Class_L.dis\
95+ Double_L.dis\
96+ Float_L.dis\
97+ InfernoProcess_L.dis\
98+ Math_L.dis\
99+ Object_L.dis\
100+ Runtime_L.dis\
101+ SecurityManager_L.dis\
102+ StringBuffer_L.dis\
103+ String_L.dis\
104+ System_L.dis\
105+ Thread_L.dis\
106+ Throwable_L.dis\
107+ unicode_table.dis\
108+
109+MODULES=\
110+ $ROOT/java/module/classloader.m\
111+ $ROOT/java/module/jni.m\
112+ $ROOT/java/module/cast.m\
113+ Character_L.m\
114+ ClassLoader_L.m\
115+ Class_L.m\
116+ Double_L.m\
117+ Float_L.m\
118+ InfernoProcess_L.m\
119+ Math_L.m\
120+ Object_L.m\
121+ Runtime_L.m\
122+ SecurityManager_L.m\
123+ StringBuffer_L.m\
124+ String_L.m\
125+ System_L.m\
126+ Thread_L.m\
127+ Throwable_L.m\
128+ unicode_table.m\
129+
130+SYSMODULES=\
131+ draw.m\
132+ hash.m\
133+ keyring.m\
134+ loader.m\
135+ math.m\
136+ string.m\
137+ sys.m\
138+
139+DISBIN=$ROOT/java/dis/java/java/lang
140+
141+<$ROOT/mkfiles/mkjava
142+<$ROOT/mkfiles/mksubdirs
143+
144+LIMBOINCL=\
145+ $LIMBOINCL\
146+ -I$ROOT/java/pkg\
147+
148+unicode_table.dis: unicode_table.b
149+ limbo $LIMBOINCL -gw unicode_table.b
150+
151+NullSecurityManager.dis: SecurityManager.class
152+ j2d NullSecurityManager.class
java/pkg2/java/lang/reflect/Array.java+0−0

Empty file added.

java/pkg2/java/lang/reflect/Array_L.b+417−0
@@ -0,0 +1,417 @@
1+implement Array_L;
2+
3+# javal v1.5 generated file: edit with care
4+
5+include "jni.m";
6+ jni : JNI;
7+ ClassModule,
8+ JString,
9+ JArray,
10+ JArrayI,
11+ JArrayC,
12+ JArrayB,
13+ JArrayS,
14+ JArrayJ,
15+ JArrayF,
16+ JArrayD,
17+ JArrayZ,
18+ JArrayJObject,
19+ JArrayJClass,
20+ JArrayJString,
21+ JClass,
22+ JThread,
23+ JObject : import jni;
24+
25+#>> extra pre includes here
26+
27+ ClassData,
28+ Value : import jni;
29+
30+ jldr : JavaClassLoader;
31+
32+#<<
33+
34+include "Array_L.m";
35+
36+#>> extra post includes here
37+
38+include "reflect.m";
39+ refl : Reflect;
40+ widen : import refl;
41+
42+array_class : ClassData;
43+
44+badindex := "java.lang.ArrayIndexOutOfBoundsException";
45+illegalarg := "java.lang.IllegalArgumentException";
46+nullptr := "java.lang.NullPointerException";
47+
48+ cast : Cast;
49+
50+#<<
51+
52+init( jni_p : JNI )
53+{
54+ # save java native inteface mod instance
55+ jni = jni_p;
56+ #>>extra initialization here
57+ array_class = jni->FindClass("inferno/vm/Array");
58+
59+ jldr = jni->jldr;
60+ cast = jni->CastMod();
61+ refl = load Reflect Reflect->PATH;
62+ if ( refl == nil )
63+ jni->InitError( jni->sys->sprint( "java.lang.reflect.Array: could not load %s: %r", Reflect->PATH ) );
64+ else
65+ refl->init(jni);
66+
67+ #<<
68+}
69+
70+getLength_rObject_I( p0 : JObject) : int
71+{#>>
72+ # p0 - must be a Java array; if not, exceptions are thrown
73+ # Returns the integer length of the array.
74+
75+ if ( p0 == nil )
76+ jni->ThrowException(nullptr, "");
77+ if ( jni->IsArray(p0) == JNI->FALSE)
78+ jni->ThrowException(illegalarg, "Not an array");
79+ return jni->GetArrayLength(cast->ToJArray(p0));
80+}#<<
81+
82+get_rObject_I_rObject( p0 : JObject,p1 : int) : JObject
83+{#>>
84+ # p0 - a Java object, which must be an array, else exception occurs.
85+ # p1 - an index into the array, >= 0 and < length of array
86+ # Returns the element at that index. If the array is of a primitive
87+ # type, it is put in an appropriate wrapper class instance.
88+
89+ checksOK(p0, p1);
90+
91+ #
92+ # Need to figure out what kind of an array this is, then get the
93+ # requested element and convert it to an appropriate JObject.
94+ #
95+ (typ, elem) := GetArrayElement(p0, p1);
96+ #(typ, elem) := jni->GetArrayElement(p0, p1);
97+
98+ if ( typ == 0 ) # array of Objects. good.
99+ return elem.Object();
100+
101+ if ( typ >= JNI->T_BOOLEAN && typ <= JNI->T_LONG )
102+ return refl->ValueToObject(elem);
103+
104+ return nil;
105+}#<<
106+
107+getBoolean_rObject_I_Z( p0 : JObject,p1 : int) : int
108+{#>>
109+ # p0 - a Java object, which must be an array, else exception occurs.
110+ # p1 - an index into the array, >= 0 and < length of array
111+ # Returns the element at that index as a boolean value. If the array
112+ # is not an array of something that can be converted to a boolean by
113+ # widening (and for boolean that's nothing), then getprim will throw
114+ # an exception.
115+
116+ return getprim(p0, p1, JNI->T_BOOLEAN, "boolean").Boolean();
117+}#<<
118+
119+getByte_rObject_I_B( p0 : JObject,p1 : int) : int
120+{#>>
121+ # See comments in getBoolean_rObject_I_Z, above
122+
123+ return getprim(p0, p1, JNI->T_BYTE, "byte").Byte();
124+}#<<
125+
126+getChar_rObject_I_C( p0 : JObject,p1 : int) : int
127+{#>>
128+ # See comments in getBoolean_rObject_I_Z, above
129+
130+ return getprim(p0, p1, JNI->T_CHAR, "char").Char();
131+}#<<
132+
133+getShort_rObject_I_S( p0 : JObject,p1 : int) : int
134+{#>>
135+ # See comments in getBoolean_rObject_I_Z, above
136+
137+ return getprim(p0, p1, JNI->T_SHORT, "short").Short();
138+}#<<
139+
140+getInt_rObject_I_I( p0 : JObject,p1 : int) : int
141+{#>>
142+ # See comments in getBoolean_rObject_I_Z, above
143+
144+ return getprim(p0, p1, JNI->T_INT, "int").Int();
145+}#<<
146+
147+getLong_rObject_I_J( p0 : JObject,p1 : int) : big
148+{#>>
149+ # See comments in getBoolean_rObject_I_Z, above
150+
151+ return getprim(p0, p1, JNI->T_LONG, "long").Long();
152+}#<<
153+
154+getFloat_rObject_I_F( p0 : JObject,p1 : int) : real
155+{#>>
156+ # See comments in getBoolean_rObject_I_Z, above
157+
158+ return getprim(p0, p1, JNI->T_FLOAT, "float").Float();
159+}#<<
160+
161+getDouble_rObject_I_D( p0 : JObject,p1 : int) : real
162+{#>>
163+ # See comments in getBoolean_rObject_I_Z, above
164+
165+ return getprim(p0, p1, JNI->T_DOUBLE, "double").Double();
166+}#<<
167+
168+set_rObject_I_rObject_V( p0 : JObject,p1 : int,p2 : JObject)
169+{#>>
170+ # p0 - a Java array. If null or not an array, exception.
171+ # p1 - index into the array. If < 0 or >= length of array, exception.
172+ # p2 - a value to put into the array at the specified index. If p0 is
173+ # an array of JObject, p2 must be an instance of the appropriate
174+ # class. If p0 is an array of a primitive Java type, then p2 must
175+ # be a wrapper of a primitive type that can be converted to the
176+ # the array's type by widening.
177+
178+ checksOK(p0, p1);
179+
180+ objarray := cast->ToJArray(p0);
181+ typ := objarray.primitive;
182+ if ( typ == 0 ) { # an Object array
183+ if ( jni->IsInstanceOf(p2, objarray.class) == JNI->TRUE ) {
184+ cast->JArrayToObject(objarray).ary[p1] = p2;
185+ return;
186+ }
187+ }
188+ else if ( typ >= JNI->T_BOOLEAN && typ <= JNI->T_LONG ) {
189+ (stype, val) := refl->GetVal(p2);
190+ if ( stype != 0 && (val = widen(stype, typ, val)) != nil ) {
191+ SetArrayElement(p0, p1, val);
192+ return;
193+ }
194+ }
195+ jni->ThrowException(illegalarg, "Argument can't be cast to array element");
196+}#<<
197+
198+setBoolean_rObject_I_Z_V( p0 : JObject,p1 : int,p2 : int)
199+{#>>
200+ # p0[p1] = p2
201+ # where p2 is a boolean value, and it must be possible to convert it by
202+ # widening to the type array p0.
203+
204+ putprim(p0, p1, JNI->T_BOOLEAN, "boolean", ref Value.TBoolean(p2));
205+}#<<
206+
207+setByte_rObject_I_B_V( p0 : JObject,p1 : int,p2 : int)
208+{#>>
209+ # see comments for setBoolean_rObject_I_Z_V, above.
210+
211+ putprim(p0, p1, JNI->T_BYTE, "byte", ref Value.TByte(p2));
212+}#<<
213+
214+setChar_rObject_I_C_V( p0 : JObject,p1 : int,p2 : int)
215+{#>>
216+ # see comments for setBoolean_rObject_I_Z_V, above.
217+
218+ putprim(p0, p1, JNI->T_CHAR, "char", ref Value.TChar(p2));
219+}#<<
220+
221+setShort_rObject_I_S_V( p0 : JObject,p1 : int,p2 : int)
222+{#>>
223+ # see comments for setBoolean_rObject_I_Z_V, above.
224+
225+ putprim(p0, p1, JNI->T_SHORT, "short", ref Value.TShort(p2));
226+}#<<
227+
228+setInt_rObject_I_I_V( p0 : JObject,p1 : int,p2 : int)
229+{#>>
230+ # see comments for setBoolean_rObject_I_Z_V, above.
231+
232+ putprim(p0, p1, JNI->T_INT, "int", ref Value.TInt(p2));
233+}#<<
234+
235+setLong_rObject_I_J_V( p0 : JObject,p1 : int,p2 : big)
236+{#>>
237+ # see comments for setBoolean_rObject_I_Z_V, above.
238+
239+ putprim(p0, p1, JNI->T_LONG, "long", ref Value.TLong(p2));
240+}#<<
241+
242+setFloat_rObject_I_F_V( p0 : JObject,p1 : int,p2 : real)
243+{#>>
244+ # see comments for setBoolean_rObject_I_Z_V, above.
245+
246+ putprim(p0, p1, JNI->T_FLOAT, "float", ref Value.TFloat(p2));
247+}#<<
248+
249+setDouble_rObject_I_D_V( p0 : JObject,p1 : int,p2 : real)
250+{#>>
251+ # see comments for setBoolean_rObject_I_Z_V, above.
252+
253+ putprim(p0, p1, JNI->T_DOUBLE, "double", ref Value.TDouble(p2));
254+}#<<
255+
256+newArray(jclass: JClass, bounds: array of int): JObject
257+{
258+ # Create a Java array whose components belong to class jclass.
259+ # jclass may be a class object representing a primitive type.
260+ # bounds gives the length of each dimension.
261+
262+ dims := len bounds;
263+ cldata: ClassData;
264+
265+ # See if the class represents a primitive type.
266+ typ := jni->PrimitiveIndex(jclass, 1);
267+
268+ # If jclass represents an array, then component type of array
269+ # being created is component type of jclass.
270+ s := jclass.aryname;
271+ if(s != nil) {
272+ # count [s in aryname
273+ n := 1;
274+ while(s[n] == '[')
275+ n++;
276+ dims += n;
277+ typ = refl->SigToType(s[n:]);
278+ if(typ == 0)
279+ cldata = jni->FindClass(s[n+1:len s - 1]);
280+ } else if(typ == 0) { # jclass is not array and not primitive
281+ cldata = jclass.class;
282+ }
283+
284+ return cast->FromJArray(jldr->multianewarray(dims, cldata, typ, bounds));
285+}
286+
287+newArray_rClass_I_rObject( p0 : JClass,p1 : int) : JObject
288+{#>>
289+ if ( p0 == nil )
290+ jni->ThrowException(nullptr, "");
291+
292+ return newArray(p0, array [1] of { p1 });
293+}#<<
294+
295+multiNewArray_rClass_aI_rObject( p0 : JClass,p1 : JArrayI) : JObject
296+{#>>
297+ if ( p0 == nil || p1 == nil )
298+ jni->ThrowException(nullptr, "");
299+
300+ ln := len p1.ary;
301+
302+ if ( ln < 1 || ln > 255 )
303+ jni->ThrowException(illegalarg, "dimensions out of range [1,255]");
304+
305+ return newArray(p0, p1.ary);
306+}#<<
307+
308+# An argument verification routine for use by native methods. The
309+# first argument must be non-null, and a Java array. (These conditions
310+# are actually check by calling getLength_rObject.) The second
311+# argument must be a valid index into that array. There is no return
312+# value: if the conditions above are not met, an exception is thrown;
313+# hence the routine does not return in this case. A successful return
314+# indicates the arguments are O.K.
315+#
316+checksOK(o : JObject, ix : int)
317+{
318+ if ( ix >= getLength_rObject_I(o) || ix < 0 )
319+ jni->ThrowException(badindex, "Illegal index");
320+ return;
321+}
322+#
323+# Gets element 'index' of Java array 'o' and returns it as a ref Value
324+# of the type corresponding to Java type index 'want'. String 's'
325+# is used only in creating the exception message, and should correspond
326+# to 'want'. o must be non-null and refer to a Java array, index must
327+# within range, and the array must be of a primitive type that can
328+# be made into the requested type by a widening conversion. If any of
329+# these conditions are not met, an exception is thrown.
330+#
331+getprim( o : JObject, index : int, want : int, s : string) : ref Value
332+{
333+ checksOK(o, index);
334+
335+ (typ, elem) := GetArrayElement(o, index);
336+ if ( (wider := widen(typ, want, elem)) == nil ) {
337+ if ( s != nil )
338+ jni->ThrowException(illegalarg, "Can't cast array element to " + s);
339+ else
340+ jni->ThrowException(illegalarg, "Can't cast array element");
341+ }
342+ return wider;
343+}
344+#
345+# Sets element 'index' of Java array 'o' to the ref Value 'val'
346+# of the type corresponding to Java type index 'have'. String 's'
347+# is used only in creating the exception message, and should correspond
348+# to 'have'. o must be non-null and refer to a Java array, index must
349+# within range, and the array must be of a primitive type that can
350+# be made from the provided type by a widening conversion. If any of
351+# these conditions are not met, an exception is thrown.
352+#
353+putprim( o : JObject, index : int, have : int, s : string, val : ref Value)
354+{
355+ checksOK(o, index);
356+
357+ typ := cast->ToJArray(o).primitive;
358+ if ( (val = widen(have, typ, val)) == nil ) {
359+ if ( s != nil )
360+ jni->ThrowException(illegalarg,
361+ "Can't put input value into " + s + " array");
362+ else
363+ jni->ThrowException(illegalarg,
364+ "Can't put input value into array");
365+ }
366+ SetArrayElement(o, index, val);
367+ #jni->SetArrayElement(o, index, val);
368+}
369+#
370+# Get the element at index from the Java array o and return it in
371+# in an appropriate member of the Value union.
372+# The arguments should have been verified before calling this function.
373+#
374+GetArrayElement( o : JObject, index : int ) : (int, ref Value)
375+{
376+ a := cast->ToJArray(o);
377+ val : ref Value;
378+ case a.primitive {
379+ 0 =>
380+ val = ref Value.TObject(cast->JArrayToObject(a).ary[index]);
381+ JNI->T_BOOLEAN =>
382+ val = ref Value.TBoolean(int cast->JArrayToByte(a).ary[index]);
383+ JNI->T_BYTE =>
384+ val = ref Value.TByte(int cast->JArrayToByte(a).ary[index]);
385+ JNI->T_CHAR =>
386+ val = ref Value.TChar(cast->JArrayToInt(a).ary[index]);
387+ JNI->T_SHORT =>
388+ val = ref Value.TShort(cast->JArrayToInt(a).ary[index]);
389+ JNI->T_INT =>
390+ val = ref Value.TInt(cast->JArrayToInt(a).ary[index]);
391+ JNI->T_LONG =>
392+ val = ref Value.TLong(cast->JArrayToBig(a).ary[index]);
393+ JNI->T_FLOAT =>
394+ val = ref Value.TFloat(cast->JArrayToReal(a).ary[index]);
395+ JNI->T_DOUBLE =>
396+ val = ref Value.TDouble(cast->JArrayToReal(a).ary[index]);
397+ }
398+ return (a.primitive, val);
399+}
400+#
401+# Set the element at index from the Java array o to 'val',
402+# The arguments should have been verified before calling this function.
403+#
404+SetArrayElement( o : JObject, index : int, val : ref Value)
405+{
406+ a := cast->ToJArray(o);
407+ pick sw := val {
408+ TBoolean => cast->JArrayToByte(a).ary[index] = byte sw.jboolean;
409+ TByte => cast->JArrayToByte(a).ary[index] = byte sw.jbyte;
410+ TChar => cast->JArrayToInt(a).ary[index] = sw.jchar;
411+ TShort => cast->JArrayToInt(a).ary[index] = sw.jshort;
412+ TInt => cast->JArrayToInt(a).ary[index] = sw.jint;
413+ TLong => cast->JArrayToBig(a).ary[index] = sw.jlong;
414+ TFloat => cast->JArrayToReal(a).ary[index] = sw.jfloat;
415+ TDouble => cast->JArrayToReal(a).ary[index] = sw.jdouble;
416+ }
417+}
java/pkg2/java/lang/reflect/Array_L.m+33−0
@@ -0,0 +1,33 @@
1+# javal v1.5 generated file: edit with care
2+
3+Array_L : module
4+{
5+ Array_obj : adt
6+ {
7+ cl_mod : ClassModule;
8+ };
9+
10+ init : fn( jni_p : JNI );
11+ getLength_rObject_I : fn( p0 : JObject) : int;
12+ get_rObject_I_rObject : fn( p0 : JObject,p1 : int) : JObject;
13+ getBoolean_rObject_I_Z : fn( p0 : JObject,p1 : int) : int;
14+ getByte_rObject_I_B : fn( p0 : JObject,p1 : int) : int;
15+ getChar_rObject_I_C : fn( p0 : JObject,p1 : int) : int;
16+ getShort_rObject_I_S : fn( p0 : JObject,p1 : int) : int;
17+ getInt_rObject_I_I : fn( p0 : JObject,p1 : int) : int;
18+ getLong_rObject_I_J : fn( p0 : JObject,p1 : int) : big;
19+ getFloat_rObject_I_F : fn( p0 : JObject,p1 : int) : real;
20+ getDouble_rObject_I_D : fn( p0 : JObject,p1 : int) : real;
21+ set_rObject_I_rObject_V : fn( p0 : JObject,p1 : int,p2 : JObject);
22+ setBoolean_rObject_I_Z_V : fn( p0 : JObject,p1 : int,p2 : int);
23+ setByte_rObject_I_B_V : fn( p0 : JObject,p1 : int,p2 : int);
24+ setChar_rObject_I_C_V : fn( p0 : JObject,p1 : int,p2 : int);
25+ setShort_rObject_I_S_V : fn( p0 : JObject,p1 : int,p2 : int);
26+ setInt_rObject_I_I_V : fn( p0 : JObject,p1 : int,p2 : int);
27+ setLong_rObject_I_J_V : fn( p0 : JObject,p1 : int,p2 : big);
28+ setFloat_rObject_I_F_V : fn( p0 : JObject,p1 : int,p2 : real);
29+ setDouble_rObject_I_D_V : fn( p0 : JObject,p1 : int,p2 : real);
30+ newArray_rClass_I_rObject : fn( p0 : JClass,p1 : int) : JObject;
31+ multiNewArray_rClass_aI_rObject : fn( p0 : JClass,p1 : JArrayI) : JObject;
32+
33+};
java/pkg2/java/lang/reflect/Constructor.java+0−0

Empty file added.

java/pkg2/java/lang/reflect/Constructor_L.b+90−0
@@ -0,0 +1,90 @@
1+implement Constructor_L;
2+
3+include "jni.m";
4+ jni : JNI;
5+ ClassModule,
6+ JString,
7+ JArray,
8+ JArrayI,
9+ JArrayC,
10+ JArrayB,
11+ JArrayS,
12+ JArrayJ,
13+ JArrayF,
14+ JArrayD,
15+ JArrayZ,
16+ JArrayJObject,
17+ JArrayJClass,
18+ JArrayJString,
19+ JClass,
20+ JObject : import jni;
21+
22+#>> extra pre includes here
23+
24+ Value,
25+ ClassData,
26+ jldr : import jni;
27+
28+ Object : import jldr;
29+
30+#<<
31+
32+include "Constructor_L.m";
33+
34+#>> extra post includes here
35+
36+illegalarg := "java.lang.IllegalArgumentException";
37+nullptr := "java.lang.NullPointerException";
38+
39+include "reflect.m";
40+ refl : Reflect;
41+ widen : import refl;
42+
43+#<<
44+
45+init( jni_p : JNI )
46+{
47+ # save java native inteface mod instance
48+ jni = jni_p;
49+ #>>extra initialization here
50+ refl = load Reflect Reflect->PATH;
51+ if ( refl == nil )
52+ jni->InitError( jni->sys->sprint( "java.lang.reflect.Constructor: could not load %s: %r", Reflect->PATH ) );
53+ else
54+ refl->init(jni);
55+ #<<
56+}
57+
58+getModifiers_I( this : ref Constructor_obj) : int
59+{#>>
60+ #
61+ # Assume that lower part of slot has modifier bits.
62+ #
63+ return this.slot & 16rffff;
64+}#<<
65+
66+newInstance_aObject_rObject( this : ref Constructor_obj, p0 : JArrayJObject) : JObject
67+{#>>
68+ # this - a Constructor object representing a constructor of some class
69+ # p0 - a Java array of Objects, containing argument values for the
70+ # the constructor
71+ # Returns a new instance, constructed by the 'this' constructor.
72+ #
73+ # Check inputs and build the argument list.
74+ #
75+ args := refl->BuildArgList(this.parameterTypes, p0);
76+ #
77+ # Allocate a new object, then do the call.
78+ #
79+ newobj := jni->AllocObject(this.clazz.class);
80+
81+ # Eventually may be able to do something like
82+ # (result, ok) = jni->CallConstruct(newobj, this.slot, args);
83+
84+ fld := this.clazz.class.initmethods[this.slot >> 16];
85+ (nil, ok) := jni->CallMethod(newobj, fld.field, fld.signature, args);
86+
87+ if ( ok == JNI->OK )
88+ return newobj;
89+ return nil;
90+}#<<
java/pkg2/java/lang/reflect/Constructor_L.m+18−0
@@ -0,0 +1,18 @@
1+# generated file edit with care
2+
3+Constructor_L : module
4+{
5+ Constructor_obj : adt
6+ {
7+ cl_mod : ClassModule;
8+ clazz : JClass;
9+ slot : int;
10+ parameterTypes : JArrayJClass;
11+ exceptionTypes : JArrayJClass;
12+ };
13+
14+ init : fn( jni_p : JNI );
15+ getModifiers_I : fn( this : ref Constructor_obj) : int;
16+ newInstance_aObject_rObject : fn( this : ref Constructor_obj, p0 : JArrayJObject) : JObject;
17+
18+};
java/pkg2/java/lang/reflect/Field.java+0−0

Empty file added.

java/pkg2/java/lang/reflect/Field_L.b+469−0
@@ -0,0 +1,469 @@
1+implement Field_L;
2+
3+# javal v1.5 generated file: edit with care
4+
5+include "jni.m";
6+ jni : JNI;
7+ ClassModule,
8+ JString,
9+ JArray,
10+ JArrayI,
11+ JArrayC,
12+ JArrayB,
13+ JArrayS,
14+ JArrayJ,
15+ JArrayF,
16+ JArrayD,
17+ JArrayZ,
18+ JArrayJObject,
19+ JArrayJClass,
20+ JArrayJString,
21+ JClass,
22+ JThread,
23+ JObject : import jni;
24+
25+#>> extra pre includes here
26+
27+ Value,
28+ ClassData : import jni;
29+ jldr : JavaClassLoader;
30+ Object,
31+ Class : import jldr;
32+
33+#<<
34+
35+include "Field_L.m";
36+
37+#>> extra post includes here
38+
39+include "reflect.m";
40+ refl : Reflect;
41+
42+STATIC, NONSTATIC : con iota;
43+
44+illegalacc,
45+illegalarg,
46+nullptr : string;
47+
48+#<<
49+
50+init( jni_p : JNI )
51+{
52+ # save java native inteface mod instance
53+ jni = jni_p;
54+ #>>extra initialization here
55+ jldr = jni->jldr;
56+
57+ illegalacc = "java.lang.IllegalAccessException";
58+ illegalarg = "java.lang.IllegalArgumentException";
59+ nullptr = "java.lang.NullPointerException";
60+
61+ refl = load Reflect Reflect->PATH;
62+ if ( refl == nil )
63+ jni->InitError( jni->sys->sprint( "java.lang.reflect.Field: could not load %s: %r", Reflect->PATH ) );
64+ else
65+ refl->init(jni);
66+
67+ #<<
68+}
69+
70+getModifiers_I( this : ref Field_obj) : int
71+{#>>
72+ #
73+ # Assume that lower part of slot points has modifier bits.
74+ #
75+ return this.slot & 16rffff;
76+}#<<
77+
78+get_rObject_rObject( this : ref Field_obj, p0 : JObject) : JObject
79+{#>>
80+ val := getChecks(this, p0);
81+
82+ typ := refl->ValType(val);
83+
84+ if ( typ == 0 ) # array of Objects. good.
85+ return val.Object();
86+
87+ if ( typ >= JNI->T_BOOLEAN && typ <= JNI->T_LONG )
88+ return refl->ValueToObject(val);
89+ return nil;
90+}#<<
91+
92+getBoolean_rObject_Z( this : ref Field_obj, p0 : JObject) : int
93+{#>>
94+ val := getChecks(this, p0);
95+
96+ pick sw := val {
97+ TBoolean => return sw.jboolean;
98+ }
99+ jni->ThrowException(illegalarg, "Can't convert to boolean");
100+ return JNI->FALSE;
101+}#<<
102+
103+getByte_rObject_B( this : ref Field_obj, p0 : JObject) : int
104+{#>>
105+ val := getChecks(this, p0);
106+
107+ pick sw := val {
108+ TByte => return sw.jbyte;
109+ }
110+ jni->ThrowException(illegalarg, "Can't convert to byte");
111+ return JNI->FALSE;
112+}#<<
113+
114+getChar_rObject_C( this : ref Field_obj, p0 : JObject) : int
115+{#>>
116+ val := getChecks(this, p0);
117+
118+ pick sw := val {
119+ TChar => return sw.jchar;
120+ }
121+ jni->ThrowException(illegalarg, "Can't convert to char");
122+ return 0;
123+}#<<
124+
125+getShort_rObject_S( this : ref Field_obj, p0 : JObject) : int
126+{#>>
127+ val := getChecks(this, p0);
128+
129+ pick sw := val {
130+ TByte => return int sw.jbyte;
131+ TShort => return sw.jshort;
132+ }
133+ jni->ThrowException(illegalarg, "Can't convert to short");
134+ return 0;
135+}#<<
136+
137+getInt_rObject_I( this : ref Field_obj, p0 : JObject) : int
138+{#>>
139+ val := getChecks(this, p0);
140+
141+ pick sw := val {
142+ TByte => return int sw.jbyte;
143+ TChar => return sw.jchar;
144+ TShort => return sw.jshort;
145+ TInt => return sw.jint;
146+ }
147+ jni->ThrowException(illegalarg, "Can't convert to int");
148+ return 0;
149+}#<<
150+
151+getLong_rObject_J( this : ref Field_obj, p0 : JObject) : big
152+{#>>
153+ val := getChecks(this, p0);
154+
155+ pick sw := val {
156+ TByte => return big sw.jbyte;
157+ TChar => return big sw.jchar;
158+ TShort => return big sw.jshort;
159+ TInt => return big sw.jint;
160+ TLong => return sw.jlong;
161+ }
162+ jni->ThrowException(illegalarg, "Can't convert to long");
163+ return big 0;
164+}#<<
165+
166+getFloat_rObject_F( this : ref Field_obj, p0 : JObject) : real
167+{#>>
168+ val := getChecks(this, p0);
169+
170+ pick sw := val {
171+ TByte => return real sw.jbyte;
172+ TChar => return real sw.jchar;
173+ TShort => return real sw.jshort;
174+ TInt => return real sw.jint;
175+ TLong => return real sw.jlong;
176+ TFloat => return sw.jfloat;
177+ }
178+ jni->ThrowException(illegalarg, "Can't convert to float");
179+ return 0.0;
180+}#<<
181+
182+getDouble_rObject_D( this : ref Field_obj, p0 : JObject) : real
183+{#>>
184+ val := getChecks(this, p0);
185+
186+ pick sw := val {
187+ TByte => return real sw.jbyte;
188+ TChar => return real sw.jchar;
189+ TShort => return real sw.jshort;
190+ TInt => return real sw.jint;
191+ TLong => return real sw.jlong;
192+ TFloat => return sw.jfloat;
193+ TDouble => return sw.jdouble;
194+ }
195+ jni->ThrowException(illegalarg, "Can't convert to double");
196+ return 0.0;
197+}#<<
198+
199+set_rObject_rObject_V( this : ref Field_obj, p0 : JObject,p1 : JObject)
200+{#>>
201+ want := putChecks(this, p0);
202+ clazz := jni->GetObjectClass(p1);
203+
204+ if ( want == 0 ) { # field value is Object
205+ p := ref Value.TObject;
206+ if ( jni->IsAssignable(clazz, this.clazz) == JNI->TRUE ) {
207+ p.jobj = p1;
208+ SetField(this, p0, p);
209+ return;
210+ }
211+ else {
212+ jni->ThrowException(illegalarg, "Can't safely cast");
213+ return;
214+ }
215+ }
216+ # The field is a primitive type. Then p1 better be a wrapper for that
217+ # type. (Or is it okay if it's a wrapper for something that can be
218+ # safely cast to the target type?)
219+ #
220+ # is p1 a Boolean object, or sub-classed from a Boolean object,
221+ # or a String with value "true" or "false" ?
222+ #
223+ (typ, val) := refl->GetVal(p1);
224+ if ( typ == 0 || (val = refl->widen(typ, want, val)) == nil ) {
225+ jni->ThrowException(illegalarg, "Object can't be cast to needed type");
226+ return;
227+ }
228+ SetField(this, p0, val);
229+ return;
230+}#<<
231+
232+setBoolean_rObject_Z_V( this : ref Field_obj, p0 : JObject,p1 : int)
233+{#>>
234+ want := putChecks(this, p0);
235+
236+#
237+# Note that if the field's signature is "Ljava.lang.Boolean;",
238+# we could create an appropriate Object and assign it.
239+# But it isn't clear if that is what's wanted.
240+# A similar argument applies for the other set<Type> functions.
241+#
242+ p : ref Value;
243+ case want {
244+ JNI->T_BOOLEAN => p = ref Value.TBoolean(p1);
245+ * =>
246+ jni->ThrowException(illegalarg, "Can't convert from boolean");
247+ return;
248+ }
249+ SetField(this, p0, p);
250+}#<<
251+
252+setByte_rObject_B_V( this : ref Field_obj, p0 : JObject,p1 : int)
253+{#>>
254+ want := putChecks(this, p0);
255+
256+ p : ref Value;
257+ case want {
258+ JNI->T_BYTE => p = ref Value.TByte(p1);
259+ JNI->T_SHORT => p = ref Value.TShort(int p1);
260+ JNI->T_INT => p = ref Value.TInt(int p1);
261+ JNI->T_LONG => p = ref Value.TLong(big p1);
262+ JNI->T_FLOAT => p = ref Value.TFloat(real p1);
263+ JNI->T_DOUBLE => p = ref Value.TDouble(real p1);
264+ * =>
265+ jni->ThrowException(illegalarg, "Can't convert from byte");
266+ return;
267+ }
268+ SetField(this, p0, p);
269+}#<<
270+
271+setChar_rObject_C_V( this : ref Field_obj, p0 : JObject,p1 : int)
272+{#>>
273+ want := putChecks(this, p0);
274+
275+ p : ref Value;
276+ case want {
277+ JNI->T_CHAR => p = ref Value.TChar(p1);
278+ * =>
279+ jni->ThrowException(illegalarg, "Can't convert from char");
280+ return;
281+ }
282+ SetField(this, p0, p);
283+}#<<
284+
285+setShort_rObject_S_V( this : ref Field_obj, p0 : JObject,p1 : int)
286+{#>>
287+ want := putChecks(this, p0);
288+
289+ p : ref Value;
290+ case want {
291+ JNI->T_SHORT => p = ref Value.TShort(p1);
292+ JNI->T_INT => p = ref Value.TInt(p1);
293+ JNI->T_LONG => p = ref Value.TLong(big p1);
294+ JNI->T_FLOAT => p = ref Value.TFloat(real p1);
295+ JNI->T_DOUBLE => p = ref Value.TDouble(real p1);
296+ * =>
297+ jni->ThrowException(illegalarg, "Can't convert from short");
298+ return;
299+ }
300+ SetField(this, p0, p);
301+}#<<
302+
303+setInt_rObject_I_V( this : ref Field_obj, p0 : JObject,p1 : int)
304+{#>>
305+ want := putChecks(this, p0);
306+
307+ p : ref Value;
308+ case want {
309+ JNI->T_INT => p = ref Value.TInt(p1);
310+ JNI->T_LONG => p = ref Value.TLong(big p1);
311+ JNI->T_FLOAT => p = ref Value.TFloat(real p1);
312+ JNI->T_DOUBLE => p = ref Value.TDouble(real p1);
313+ * =>
314+ jni->ThrowException(illegalarg, "Can't convert from int");
315+ return;
316+ }
317+ SetField(this, p0, p);
318+}#<<
319+
320+setLong_rObject_J_V( this : ref Field_obj, p0 : JObject,p1 : big)
321+{#>>
322+ want := putChecks(this, p0);
323+
324+ p : ref Value;
325+ case want {
326+ JNI->T_LONG => p = ref Value.TLong(p1);
327+ JNI->T_FLOAT => p = ref Value.TFloat(real p1);
328+ JNI->T_DOUBLE => p = ref Value.TDouble(real p1);
329+ * =>
330+ jni->ThrowException(illegalarg, "Can't convert from long");
331+ return;
332+ }
333+ SetField(this, p0, p);
334+}#<<
335+
336+setFloat_rObject_F_V( this : ref Field_obj, p0 : JObject,p1 : real)
337+{#>>
338+ want := putChecks(this, p0);
339+
340+ p : ref Value;
341+ case want {
342+ JNI->T_FLOAT => p = ref Value.TFloat(p1);
343+ JNI->T_DOUBLE => p = ref Value.TDouble(p1);
344+ * =>
345+ jni->ThrowException(illegalarg, "Can't convert from float");
346+ return;
347+ }
348+ SetField(this, p0, p);
349+}#<<
350+
351+setDouble_rObject_D_V( this : ref Field_obj, p0 : JObject,p1 : real)
352+{#>>
353+ want := putChecks(this, p0);
354+
355+ p : ref Value;
356+ case want {
357+ JNI->T_DOUBLE => p = ref Value.TDouble(p1);
358+ * =>
359+ jni->ThrowException(illegalarg, "Can't convert from double");
360+ return;
361+ }
362+ SetField(this, p0, p);
363+}#<<
364+
365+
366+
367+getChecks( this : ref Field_obj, p0 : JObject) : ref Value
368+{
369+ if ( (this.slot & jldr->ACC_STATIC) == 0 && p0 == nil )
370+ jni->ThrowException(nullptr, "reading field of null Object");
371+
372+ # See if the target object is the same as the one declaring the field.
373+ # this.clazz.class_data is ref to a classloader.Class adt
374+
375+ cldata := this.clazz.class;
376+ if ( (this.slot & jldr->ACC_STATIC) == 0 && jni->IsInstanceOf(p0, cldata) != JNI->TRUE ) {
377+ jni->ThrowException(illegalarg,
378+ "Object is not an instance of this class");
379+ return nil;
380+ }
381+
382+ if ( (this.slot & jldr->ACC_PUBLIC) == 0 )
383+ jni->ThrowException(illegalacc, "reading non-public field");
384+
385+ if ( this.slot & jldr->ACC_STATIC )
386+ return GetStat(cldata, this.slot);
387+ else
388+ return GetField(p0, this.slot);
389+}
390+
391+putChecks( this : ref Field_obj, p0 : JObject) : int
392+{
393+ if ( (this.slot & jldr->ACC_STATIC) == 0 && p0 == nil )
394+ jni->ThrowException(nullptr, "writing field of null Object");
395+
396+ # See if the target object is the same as the one declaring the field.
397+ # this.clazz.class_data is ref to a classloader.Class adt
398+
399+ cldata := this.clazz.class;
400+ if ( (this.slot & jldr->ACC_STATIC) == 0 && jni->IsInstanceOf(p0, cldata) != JNI->TRUE ) {
401+ jni->ThrowException(illegalarg,
402+ "Object is not an instance of this class");
403+ return 0;
404+ }
405+
406+ if ( (this.slot & jldr->ACC_PUBLIC) == 0 || (this.slot & jldr->ACC_FINAL) != 0 )
407+ jni->ThrowException(illegalacc, "writing non-public or final field");
408+
409+ if ( this.slot & jldr->ACC_STATIC )
410+ return refl->SigToType(cldata.staticdata[this.slot >> 16].signature);
411+ else {
412+ flds := cldata.objectdata;
413+ for ( i := (this.slot >> 16); i > 0; i--)
414+ flds = tl flds;
415+ return refl->SigToType((hd flds).signature);
416+ }
417+ return 0;
418+}
419+
420+checkMemberAccess(which : int)
421+{
422+ return;
423+}
424+
425+SetField(this : ref Field_obj, o : JObject, v : ref Value)
426+{
427+ cldata := this.clazz.class;
428+ if ( (this.slot & jldr->ACC_STATIC) != 0 ) {
429+ fld := cldata.staticdata[this.slot >> 16];
430+ jni->SetStaticField(cldata, fld.field, v);
431+ }
432+ else {
433+ flds := cldata.objectdata;
434+ for ( i := (this.slot >> 16); i > 0; i-- )
435+ flds = tl flds;
436+ fld := hd flds;
437+ jni->SetObjField(o, fld.field, v);
438+ }
439+}
440+
441+widen(have, want : string, val : ref Value) : ref Value
442+{
443+ if ( have == want )
444+ return val;
445+ havetype := refl->SigToType(have);
446+ wanttype := refl->SigToType(want);
447+ return refl->widen(havetype, wanttype, val);
448+}
449+#
450+# Eventually JNI may provide a funtions to do this more directly.
451+#
452+GetStat(cldata : ClassData, slot : int) : ref Value
453+{
454+ fld := cldata.staticdata[slot >> 16];
455+ return jni->GetStaticField(cldata, fld.field, fld.signature);
456+}
457+#
458+# Eventually JNI may provide a funtions to do this more directly.
459+# It would probably know what to do about privatemethods, if anything.
460+#
461+GetField(obj : JObject, slot : int) : ref Value
462+{
463+ flds := obj.class().objectdata;
464+ for ( i := (slot >> 16); i > 0; i-- )
465+ flds = tl flds;
466+ fld := hd flds;
467+ return jni->GetObjField(obj, fld.field, fld.signature);
468+}
469+
java/pkg2/java/lang/reflect/Field_L.m+35−0
@@ -0,0 +1,35 @@
1+# javal v1.5 generated file: edit with care
2+
3+Field_L : module
4+{
5+ Field_obj : adt
6+ {
7+ cl_mod : ClassModule;
8+ clazz : JClass;
9+ slot : int;
10+ name : JString;
11+ type_j : JClass;
12+ };
13+
14+ init : fn( jni_p : JNI );
15+ getModifiers_I : fn( this : ref Field_obj) : int;
16+ get_rObject_rObject : fn( this : ref Field_obj, p0 : JObject) : JObject;
17+ getBoolean_rObject_Z : fn( this : ref Field_obj, p0 : JObject) : int;
18+ getByte_rObject_B : fn( this : ref Field_obj, p0 : JObject) : int;
19+ getChar_rObject_C : fn( this : ref Field_obj, p0 : JObject) : int;
20+ getShort_rObject_S : fn( this : ref Field_obj, p0 : JObject) : int;
21+ getInt_rObject_I : fn( this : ref Field_obj, p0 : JObject) : int;
22+ getLong_rObject_J : fn( this : ref Field_obj, p0 : JObject) : big;
23+ getFloat_rObject_F : fn( this : ref Field_obj, p0 : JObject) : real;
24+ getDouble_rObject_D : fn( this : ref Field_obj, p0 : JObject) : real;
25+ set_rObject_rObject_V : fn( this : ref Field_obj, p0 : JObject,p1 : JObject);
26+ setBoolean_rObject_Z_V : fn( this : ref Field_obj, p0 : JObject,p1 : int);
27+ setByte_rObject_B_V : fn( this : ref Field_obj, p0 : JObject,p1 : int);
28+ setChar_rObject_C_V : fn( this : ref Field_obj, p0 : JObject,p1 : int);
29+ setShort_rObject_S_V : fn( this : ref Field_obj, p0 : JObject,p1 : int);
30+ setInt_rObject_I_V : fn( this : ref Field_obj, p0 : JObject,p1 : int);
31+ setLong_rObject_J_V : fn( this : ref Field_obj, p0 : JObject,p1 : big);
32+ setFloat_rObject_F_V : fn( this : ref Field_obj, p0 : JObject,p1 : real);
33+ setDouble_rObject_D_V : fn( this : ref Field_obj, p0 : JObject,p1 : real);
34+
35+};
java/pkg2/java/lang/reflect/InvocationTargetExcepti..a+0−0

Empty file added.

java/pkg2/java/lang/reflect/Member.java+0−0

Empty file added.

java/pkg2/java/lang/reflect/Method.java+0−0

Empty file added.

java/pkg2/java/lang/reflect/Method_L.b+117−0
@@ -0,0 +1,117 @@
1+implement Method_L;
2+
3+include "jni.m";
4+ jni : JNI;
5+ ClassModule,
6+ JString,
7+ JArray,
8+ JArrayI,
9+ JArrayC,
10+ JArrayB,
11+ JArrayS,
12+ JArrayJ,
13+ JArrayF,
14+ JArrayD,
15+ JArrayZ,
16+ JArrayJObject,
17+ JArrayJClass,
18+ JArrayJString,
19+ JClass,
20+ JObject : import jni;
21+
22+#>> extra pre includes here
23+
24+ Value,
25+ ClassData,
26+ jldr : import jni;
27+
28+ Object : import jldr;
29+
30+#<<
31+
32+include "Method_L.m";
33+
34+#>> extra post includes here
35+
36+illegalarg := "java.lang.IllegalArgumentException";
37+nullptr := "java.lang.NullPointerException";
38+
39+include "reflect.m";
40+ refl : Reflect;
41+ widen : import refl;
42+
43+#<<
44+
45+init( jni_p : JNI )
46+{
47+ # save java native inteface mod instance
48+ jni = jni_p;
49+ #>>extra initialization here
50+ refl = load Reflect Reflect->PATH;
51+ if ( refl == nil )
52+ jni->InitError( jni->sys->sprint( "java.lang.reflect.Method: could not load %s: %r", Reflect->PATH ) );
53+ else
54+ refl->init(jni);
55+ #<<
56+}
57+
58+getModifiers_I( this : ref Method_obj) : int
59+{#>>
60+ #
61+ # Assume that lower part of slot has modifier bits.
62+ #
63+ return this.slot & 16rffff;
64+}#<<
65+
66+invoke_rObject_aObject_rObject( this : ref Method_obj, p0 : JObject,p1 : JArrayJObject) : JObject
67+{#>>
68+ # this - a Method object. The corresponding method should be invoked for
69+ # p0 - an Object which should contain that method, with
70+ # p1 - a Java array of Objects that are the arguments to the method.
71+ # Can be null if the method has no arguments.
72+ # Returns an object reflecting the value returned by the method call.
73+ #
74+ # First do some checking. If 'this' is a static method, p0 is ignored,
75+ # otherwise it must an instance of the class in which the method is
76+ # declared.
77+ #
78+ if ( (this.slot & JNI->ACC_STATIC) == 0 ) { # not static
79+ if ( p0 == nil )
80+ jni->ThrowException(nullptr, "Must supply an instance");
81+ if ( jni->IsInstanceOf(p0, this.clazz.class) == JNI->FALSE )
82+ jni->ThrowException(illegalarg, "Method not in object");
83+ }
84+ #
85+ # Check inputs and build the argument list.
86+ #
87+ args := refl->BuildArgList(this.parameterTypes, p1);
88+ #
89+ # Do the call.
90+ #
91+ result : ref Value;
92+ ok : int;
93+ if ( this.slot & JNI->ACC_STATIC ) {
94+ fld := this.clazz.class.staticmethods[this.slot >> 16];
95+ (result, ok) = jni->CallStatic(this.clazz.class, fld.field,
96+ fld.signature, args);
97+ }
98+ else {
99+ fld : ref JavaClassLoader->Field;
100+ if ( (this.slot & JNI->ACC_PRIVATE) != 0 )
101+ fld = p0.class().privatemethods[this.slot >> 16];
102+ else
103+ fld = p0.class().virtualmethods[this.slot >> 16].field;
104+ (result, ok) = jni->CallMethod(p0, fld.field, fld.signature, args);
105+ }
106+ #
107+ # If necessary, wrap the answer up as an Object.
108+ #
109+ if ( ok == JNI->OK && result != nil ) {
110+ typ := refl->ValType(result);
111+ if ( typ >= JNI->T_BOOLEAN && typ <= JNI->T_LONG )
112+ return refl->ValueToObject(result);
113+ else
114+ return result.Object();
115+ }
116+ return nil;
117+}#<<
java/pkg2/java/lang/reflect/Method_L.m+20−0
@@ -0,0 +1,20 @@
1+# generated file edit with care
2+
3+Method_L : module
4+{
5+ Method_obj : adt
6+ {
7+ cl_mod : ClassModule;
8+ clazz : JClass;
9+ slot : int;
10+ name : JString;
11+ returnType : JClass;
12+ parameterTypes : JArrayJClass;
13+ exceptionTypes : JArrayJClass;
14+ };
15+
16+ init : fn( jni_p : JNI );
17+ getModifiers_I : fn( this : ref Method_obj) : int;
18+ invoke_rObject_aObject_rObject : fn( this : ref Method_obj, p0 : JObject,p1 : JArrayJObject) : JObject;
19+
20+};
java/pkg2/java/lang/reflect/Modifier.java+0−0

Empty file added.

java/pkg2/java/lang/reflect/mkfile+46−0
@@ -0,0 +1,46 @@
1+<../../../../../mkconfig
2+
3+TARG=\
4+ Array.dis\
5+ Constructor.dis\
6+ Field.dis\
7+# for InvocationTargetException.dis\
8+ esaAWjdsByqq9cEPQZTRT.dis\
9+ Member.dis\
10+ Method.dis\
11+ Modifier.dis\
12+# Limbo code\
13+ Array_L.dis\
14+ Constructor_L.dis\
15+ Field_L.dis\
16+ Method_L.dis\
17+ reflect.dis\
18+
19+MODULES=\
20+ $ROOT/java/module/classloader.m\
21+ $ROOT/java/module/jni.m\
22+ $ROOT/java/module/cast.m\
23+ Array_L.m\
24+ Constructor_L.m\
25+ Field_L.m\
26+ Method_L.m\
27+ reflect.m\
28+
29+SYSMODULES=\
30+ draw.m\
31+ hash.m\
32+ keyring.m\
33+ loader.m\
34+ math.m\
35+ string.m\
36+ sys.m\
37+
38+DISBIN=$ROOT/java/dis/java/java/lang/reflect
39+
40+<$ROOT/mkfiles/mkjava
41+
42+reflect.dis: reflect.b
43+ limbo $LIMBOINCL -gw reflect.b
44+
45+esaAWjdsByqq9cEPQZTRT.dis: InvocationTargetException.class
46+ j2d InvocationTargetException.class
java/pkg2/java/lang/reflect/reflect.b+327−0
@@ -0,0 +1,327 @@
1+implement Reflect;
2+
3+include "jni.m";
4+ jni : JNI;
5+ cast : Cast;
6+
7+ JObject,
8+ JClass,
9+ JArrayJClass,
10+ JArrayJObject,
11+ Value : import jni;
12+ OK,
13+ ERR,
14+ TRUE,
15+ FALSE,
16+ #T_OBJECT, T_ARRAY,
17+ T_BOOLEAN,
18+ T_BYTE,
19+ T_CHAR,
20+ T_SHORT,
21+ T_INT,
22+ T_LONG,
23+ T_FLOAT,
24+ T_DOUBLE : import JNI;
25+
26+ ClassData : import JNI;
27+
28+include "reflect.m";
29+
30+wrapper_class := array[T_LONG-T_BOOLEAN+1] of ClassData;
31+wrapper_name := array[] of { "Boolean",
32+ "Character",
33+ "Float",
34+ "Double",
35+ "Byte",
36+ "Short",
37+ "Integer",
38+ "Long" };
39+type_string := "ZCFDBSIJ";
40+
41+illegalarg := "java.lang.IllegalArgumentException";
42+nullptr := "java.lang.NullPointerException";
43+
44+init(jni_m : JNI) {
45+ jni = jni_m;
46+ for ( i := 0; i <= T_LONG - T_BOOLEAN; i++ )
47+ wrapper_class[i] = jni->FindClass("java/lang/" + wrapper_name[i]);
48+ cast = jni->CastMod();
49+}
50+
51+widen(have, want : int, val : ref Value) : ref Value
52+{
53+ if ( have == want )
54+ return val;
55+ havetype := have;
56+ wanttype := want;
57+ valint : int;
58+ valbig : big;
59+ valreal : real;
60+ if ( havetype == 0 || wanttype == 0 )
61+ return nil;
62+ pick sw := val {
63+ TByte =>
64+ valint = int sw.jbyte;
65+ valbig = big valint;
66+ valreal = real valint;
67+ TShort =>
68+ valint = sw.jshort;
69+ valbig = big valint;
70+ valreal = real valint;
71+ TChar =>
72+ valint = sw.jchar;
73+ valbig = big valint;
74+ valreal = real valint;
75+ TInt =>
76+ valint = sw.jint;
77+ valbig = big valint;
78+ valreal = real valint;
79+ TLong =>
80+ valbig = sw.jlong;
81+ valreal = real valbig;
82+ TFloat =>
83+ valreal = sw.jfloat;
84+ }
85+ case ( wanttype ) {
86+ T_BOOLEAN or T_BYTE or T_CHAR =>
87+ return nil;
88+ T_SHORT =>
89+ case ( havetype ) {
90+ T_BYTE =>
91+ sw := ref Value.TShort;
92+ sw.jshort = valint;
93+ val = sw;
94+ * =>
95+ return nil;
96+ }
97+ T_INT =>
98+ case ( havetype ) {
99+ T_BYTE or T_SHORT or T_CHAR =>
100+ sw := ref Value.TInt;
101+ sw.jint = valint;
102+ val = sw;
103+ * =>
104+ return nil;
105+ }
106+ T_LONG =>
107+ case ( havetype ) {
108+ T_BYTE or T_SHORT or T_CHAR or T_INT =>
109+ sw := ref Value.TLong;
110+ sw.jlong = valbig;
111+ val = sw;
112+ * =>
113+ return nil;
114+ }
115+ T_FLOAT =>
116+ case ( havetype ) {
117+ T_BYTE or T_SHORT or T_CHAR or T_INT or T_LONG =>
118+ sw := ref Value.TFloat;
119+ sw.jfloat = valreal;
120+ val = sw;
121+ * =>
122+ return nil;
123+ }
124+ T_DOUBLE =>
125+ case ( havetype ) {
126+ T_BYTE or T_SHORT or T_CHAR or T_INT or T_LONG or T_FLOAT =>
127+ sw := ref Value.TDouble;
128+ sw.jdouble = valreal;
129+ val = sw;
130+ * =>
131+ return nil;
132+ }
133+ }
134+ return val;
135+}
136+BuildArgList(parms : JArrayJClass, arg : JArrayJObject) : array of ref Value
137+{
138+ #
139+ # First do some checking.
140+ #
141+ l := 0;
142+ formal: array of JClass;
143+ actual: array of JObject;
144+ args: array of ref Value;
145+ if ( parms != nil ) {
146+ if ( arg == nil )
147+ jni->ThrowException(nullptr, "constructor requires parameters");
148+ if ( len parms.ary != len arg.ary )
149+ jni->ThrowException(illegalarg, "Wrong number of args");
150+ l = len parms.ary;
151+ formal = parms.ary; # array of JClass
152+ actual = arg.ary; # array of JObject
153+ args = array[l] of ref Value;
154+ }
155+ else # There are no formal parameters
156+ if ( arg != nil && len arg.ary != 0 ) # But there are actual arguments
157+ jni->ThrowException(illegalarg, "Wrong number of args");
158+
159+ #
160+ # March through the arguments, checking for type as we go.
161+ #
162+ for ( i := 0; i < l; i++ ) {
163+ #
164+ # Is the formal parameter a primitive?
165+ #
166+ if ( (want := jni->PrimitiveIndex(formal[i], 1)) > 0 ) {
167+ #
168+ # Actual parameter should be (derived from) a wrapper, and
169+ # be able to be widened to the formal parameter type.
170+ #
171+ (typ, parmval) := GetVal(actual[i]);
172+ if ( (val := widen(want, typ, parmval)) != nil )
173+ args[i] = val;
174+ else
175+ jni->ThrowException(illegalarg, "Argument " + string (i+1) +
176+ ", can't cast");
177+ }
178+ else if ( jni->IsInstanceOf(actual[i], formal[i].class) == JNI->TRUE ) {
179+ val := ref Value.TObject;
180+ val.jobj = actual[i];
181+ args[i] = val;
182+ }
183+ else
184+ jni->ThrowException(illegalarg, "Argument " + string (i+1) +
185+ " wrong type");
186+ }
187+ return args;
188+}
189+#
190+# Return a JClass corresponding to the Java type t.
191+#
192+Class(t : int) : JClass
193+{
194+ if ( t < T_BOOLEAN || t > T_LONG )
195+ return nil;
196+ return jni->GetClassObject(wrapper_class[t - T_BOOLEAN]);
197+}
198+#
199+# Return a Class Object corresponding to the Java type t.
200+#
201+ClassObject(t : int) : JObject
202+{
203+ return cast->FromJClass(Class(t));
204+}
205+#
206+# Given the java type, get the Class object representing this
207+# type, and return as a Value.
208+#
209+GetPrimitiveClass(typ : int) : ref Value
210+{
211+ return jni->GetStaticField(wrapper_class[typ - T_BOOLEAN], "TYPE",
212+ "Ljava/lang/Class;");
213+}
214+#
215+# If the Object o is a wrapper for a Java primitive type, return the
216+# primitive value (in a Value adt) and the type index.
217+# Otherwise, return 0 and a nil Value.
218+#
219+GetVal(o : JObject) : (int, ref Value)
220+{
221+ j := T_BOOLEAN;
222+ for ( i := j; i <= T_LONG; i++ ) {
223+ if ( jni->IsInstanceOf(o, wrapper_class[i-j]) == TRUE ) {
224+ val := jni->GetObjField(o, "value", type_string[i-j:i-j+1]);
225+ return (i, val);
226+ }
227+ }
228+ return (0, nil);
229+}
230+#
231+# Convert a signature to a java type index.
232+#
233+SigToType(sig : string) : int
234+{
235+ index : int;
236+ case sig[0] {
237+ 'Z' =>
238+ index = T_BOOLEAN;
239+ 'B' =>
240+ index = T_BYTE;
241+ 'C' =>
242+ index = T_CHAR;
243+ 'S' =>
244+ index = T_SHORT;
245+ 'I' =>
246+ index = T_INT;
247+ 'J' =>
248+ index = T_LONG;
249+ 'F' =>
250+ index = T_FLOAT;
251+ 'D' =>
252+ index = T_DOUBLE;
253+ * =>
254+ index = 0;
255+ }
256+ return index;
257+}
258+#
259+# Convert a java type index to a signature.
260+#
261+TypeToSig(typ : int) : string
262+{
263+ if ( typ < T_BOOLEAN || typ > T_LONG )
264+ return nil;
265+ return type_string[typ-T_BOOLEAN:typ-T_BOOLEAN+1];
266+}
267+#
268+# Convert a Java type character to its corresponding type name.
269+#
270+TypeCharToName(c : int) : string
271+{
272+ tname : string;
273+ case c {
274+ 'Z' =>
275+ tname = "boolean";
276+ 'B' =>
277+ tname = "byte";
278+ 'C' =>
279+ tname = "char";
280+ 'S' =>
281+ tname = "short";
282+ 'I' =>
283+ tname = "int";
284+ 'J' =>
285+ tname = "long";
286+ 'F' =>
287+ tname = "float";
288+ 'D' =>
289+ tname = "double";
290+ * =>
291+ tname = "blah";
292+ }
293+ return tname;
294+}
295+#
296+# Calculate the type index of the quantity in val. If it isn't a
297+# Java primitive type, return 0;
298+#
299+ValType(val : ref Value) : int
300+{
301+ pick sw := val {
302+ TBoolean => return T_BOOLEAN;
303+ TByte => return T_BYTE;
304+ TChar => return T_CHAR;
305+ TShort => return T_SHORT;
306+ TInt => return T_INT;
307+ TLong => return T_LONG;
308+ TFloat => return T_FLOAT;
309+ TDouble => return T_DOUBLE;
310+ * => return 0;
311+ }
312+}
313+#
314+# Create a wrapper Object for the primitive Java value corresponding
315+# to the argument.
316+#
317+ValueToObject(val : ref Value) : JObject
318+{
319+ typ := ValType(val);
320+ j := T_BOOLEAN;
321+ jobj := jni->AllocObject(wrapper_class[typ - j]);
322+ sig := "(" + type_string[typ-j:typ-j+1] + ")V";
323+ (nil, ok) := jni->CallMethod(jobj, "<init>", sig, array[] of { val });
324+ if ( ok == OK )
325+ return jobj;
326+ return nil;
327+}
java/pkg2/java/lang/reflect/reflect.m+19−0
@@ -0,0 +1,19 @@
1+Reflect : module {
2+
3+ PATH : con "/dis/java/java/lang/reflect/reflect.dis";
4+
5+ init : fn(jni_m : JNI);
6+ widen : fn(havetype, wanttype : int, val : ref Value) : ref Value;
7+ BuildArgList: fn(parms : JArrayJClass, arg : JArrayJObject)
8+ : array of ref Value;
9+ Class : fn(t : int) : JClass;
10+ ClassObject : fn(t : int) : JObject;
11+ GetPrimitiveClass : fn(typ : int) : ref Value;
12+ GetVal : fn(o : JObject) : (int, ref Value);
13+ SigToType : fn(sig : string) : int;
14+ TypeToSig : fn(typ : int) : string;
15+ TypeCharToName : fn(c : int) : string;
16+ ValType : fn(val : ref Value) : int;
17+ ValueToObject : fn(val : ref Value) : JObject;
18+
19+};
java/pkg2/java/lang/unicode_table.b+1285−0
@@ -0,0 +1,1285 @@
1+implement UnicodeTable;
2+
3+include "unicode_table.m";
4+
5+#
6+# the following is lifted from JavaSoft's java
7+# source for java.lang.Character. The Limbo
8+# compiler produces a more compact file then Java
9+#
10+
11+# The character properties are currently encoded into 32 bits in the following manner:
12+# 10 bits signed offset used for converting case
13+# 1 bit if 1, adding the signed offset converts the character to lowercase
14+# 1 bit if 1, subtracting the signed offset converts the character to uppercase
15+# 1 bit if 1, this character has a titlecase equivalent (possibly itself)
16+# 3 bits 0 may not be part of an identifier
17+# 1 ignorable control; may continue a Unicode identifier or Java identifier
18+# 2 may continue a Java identifier but not a Unicode identifier (unused)
19+# 3 may continue a Unicode identifier or Java identifier
20+# 4 is a Java whitespace character
21+# 5 may start or continue a Java identifier;
22+# may continue but not start a Unicode identifier (underscores)
23+# 6 may start or continue a Java identifier but not a Unicode identifier ($)
24+# 7 may start or continue a Unicode identifier or Java identifier
25+# Thus:
26+# 5, 6, 7 may start a Java identifier
27+# 1, 2, 3, 5, 6, 7 may continue a Java identifier
28+# 7 may start a Unicode identifier
29+# 1, 3, 5, 7 may continue a Unicode identifier
30+# 1 is ignorable within an identifier
31+# 4 is Java whitespace
32+# 2 bits 0 this character has no numeric property
33+# 1 adding the digit offset to the character code and then
34+# masking with 16r1F will produce the desired numeric value
35+# 2 this character has a "strange" numeric value
36+# 3 a Java supradecimal digit: adding the digit offset to the
37+# character code, then masking with 16r1F, then adding 10
38+# will produce the desired numeric value
39+# 5 bits digit offset
40+# 4 bits reserved for future use
41+# 5 bits character type
42+#
43+
44+# The X table has 1024 entries for a total of 1024 bytes.
45+
46+X = array[] of {
47+ 0, 1, 2, 3, 4, 5, 6, 7, # 16r0000
48+ 8, 9, 10, 11, 12, 13, 14, 15, # 16r0200
49+ 16, 17, 18, 19, 20, 21, 22, 23, # 16r0400
50+ 24, 25, 26, 27, 28, 28, 28, 28, # 16r0600
51+ 28, 28, 28, 28, 29, 30, 31, 32, # 16r0800
52+ 33, 34, 35, 36, 37, 38, 39, 40, # 16r0A00
53+ 41, 42, 43, 44, 45, 46, 28, 28, # 16r0C00
54+ 47, 48, 49, 50, 51, 52, 53, 28, # 16r0E00
55+ 28, 28, 54, 55, 56, 57, 58, 59, # 16r1000
56+ 28, 28, 28, 28, 28, 28, 28, 28, # 16r1200
57+ 28, 28, 28, 28, 28, 28, 28, 28, # 16r1400
58+ 28, 28, 28, 28, 28, 28, 28, 28, # 16r1600
59+ 28, 28, 28, 28, 28, 28, 28, 28, # 16r1800
60+ 28, 28, 28, 28, 28, 28, 28, 28, # 16r1A00
61+ 28, 28, 28, 28, 28, 28, 28, 28, # 16r1C00
62+ 60, 60, 61, 62, 63, 64, 65, 66, # 16r1E00
63+ 67, 68, 69, 70, 71, 72, 73, 74, # 16r2000
64+ 75, 75, 75, 76, 77, 78, 28, 28, # 16r2200
65+ 79, 80, 81, 82, 83, 83, 84, 85, # 16r2400
66+ 86, 85, 28, 28, 87, 88, 89, 28, # 16r2600
67+ 28, 28, 28, 28, 28, 28, 28, 28, # 16r2800
68+ 28, 28, 28, 28, 28, 28, 28, 28, # 16r2A00
69+ 28, 28, 28, 28, 28, 28, 28, 28, # 16r2C00
70+ 28, 28, 28, 28, 28, 28, 28, 28, # 16r2E00
71+ 90, 91, 92, 93, 94, 56, 95, 28, # 16r3000
72+ 96, 97, 98, 99, 83, 100, 83, 101, # 16r3200
73+ 28, 28, 28, 28, 28, 28, 28, 28, # 16r3400
74+ 28, 28, 28, 28, 28, 28, 28, 28, # 16r3600
75+ 28, 28, 28, 28, 28, 28, 28, 28, # 16r3800
76+ 28, 28, 28, 28, 28, 28, 28, 28, # 16r3A00
77+ 28, 28, 28, 28, 28, 28, 28, 28, # 16r3C00
78+ 28, 28, 28, 28, 28, 28, 28, 28, # 16r3E00
79+ 28, 28, 28, 28, 28, 28, 28, 28, # 16r4000
80+ 28, 28, 28, 28, 28, 28, 28, 28, # 16r4200
81+ 28, 28, 28, 28, 28, 28, 28, 28, # 16r4400
82+ 28, 28, 28, 28, 28, 28, 28, 28, # 16r4600
83+ 28, 28, 28, 28, 28, 28, 28, 28, # 16r4800
84+ 28, 28, 28, 28, 28, 28, 28, 28, # 16r4A00
85+ 28, 28, 28, 28, 28, 28, 28, 28, # 16r4C00
86+ 56, 56, 56, 56, 56, 56, 56, 56, # 16r4E00
87+ 56, 56, 56, 56, 56, 56, 56, 56, # 16r5000
88+ 56, 56, 56, 56, 56, 56, 56, 56, # 16r5200
89+ 56, 56, 56, 56, 56, 56, 56, 56, # 16r5400
90+ 56, 56, 56, 56, 56, 56, 56, 56, # 16r5600
91+ 56, 56, 56, 56, 56, 56, 56, 56, # 16r5800
92+ 56, 56, 56, 56, 56, 56, 56, 56, # 16r5A00
93+ 56, 56, 56, 56, 56, 56, 56, 56, # 16r5C00
94+ 56, 56, 56, 56, 56, 56, 56, 56, # 16r5E00
95+ 56, 56, 56, 56, 56, 56, 56, 56, # 16r6000
96+ 56, 56, 56, 56, 56, 56, 56, 56, # 16r6200
97+ 56, 56, 56, 56, 56, 56, 56, 56, # 16r6400
98+ 56, 56, 56, 56, 56, 56, 56, 56, # 16r6600
99+ 56, 56, 56, 56, 56, 56, 56, 56, # 16r6800
100+ 56, 56, 56, 56, 56, 56, 56, 56, # 16r6A00
101+ 56, 56, 56, 56, 56, 56, 56, 56, # 16r6C00
102+ 56, 56, 56, 56, 56, 56, 56, 56, # 16r6E00
103+ 56, 56, 56, 56, 56, 56, 56, 56, # 16r7000
104+ 56, 56, 56, 56, 56, 56, 56, 56, # 16r7200
105+ 56, 56, 56, 56, 56, 56, 56, 56, # 16r7400
106+ 56, 56, 56, 56, 56, 56, 56, 56, # 16r7600
107+ 56, 56, 56, 56, 56, 56, 56, 56, # 16r7800
108+ 56, 56, 56, 56, 56, 56, 56, 56, # 16r7A00
109+ 56, 56, 56, 56, 56, 56, 56, 56, # 16r7C00
110+ 56, 56, 56, 56, 56, 56, 56, 56, # 16r7E00
111+ 56, 56, 56, 56, 56, 56, 56, 56, # 16r8000
112+ 56, 56, 56, 56, 56, 56, 56, 56, # 16r8200
113+ 56, 56, 56, 56, 56, 56, 56, 56, # 16r8400
114+ 56, 56, 56, 56, 56, 56, 56, 56, # 16r8600
115+ 56, 56, 56, 56, 56, 56, 56, 56, # 16r8800
116+ 56, 56, 56, 56, 56, 56, 56, 56, # 16r8A00
117+ 56, 56, 56, 56, 56, 56, 56, 56, # 16r8C00
118+ 56, 56, 56, 56, 56, 56, 56, 56, # 16r8E00
119+ 56, 56, 56, 56, 56, 56, 56, 56, # 16r9000
120+ 56, 56, 56, 56, 56, 56, 56, 56, # 16r9200
121+ 56, 56, 56, 56, 56, 56, 56, 56, # 16r9400
122+ 56, 56, 56, 56, 56, 56, 56, 56, # 16r9600
123+ 56, 56, 56, 56, 56, 56, 56, 56, # 16r9800
124+ 56, 56, 56, 56, 56, 56, 56, 56, # 16r9A00
125+ 56, 56, 56, 56, 56, 56, 56, 56, # 16r9C00
126+ 56, 56, 56, 56, 56, 56, 102, 28, # 16r9E00
127+ 28, 28, 28, 28, 28, 28, 28, 28, # 16rA000
128+ 28, 28, 28, 28, 28, 28, 28, 28, # 16rA200
129+ 28, 28, 28, 28, 28, 28, 28, 28, # 16rA400
130+ 28, 28, 28, 28, 28, 28, 28, 28, # 16rA600
131+ 28, 28, 28, 28, 28, 28, 28, 28, # 16rA800
132+ 28, 28, 28, 28, 28, 28, 28, 28, # 16rAA00
133+ 56, 56, 56, 56, 56, 56, 56, 56, # 16rAC00
134+ 56, 56, 56, 56, 56, 56, 56, 56, # 16rAE00
135+ 56, 56, 56, 56, 56, 56, 56, 56, # 16rB000
136+ 56, 56, 56, 56, 56, 56, 56, 56, # 16rB200
137+ 56, 56, 56, 56, 56, 56, 56, 56, # 16rB400
138+ 56, 56, 56, 56, 56, 56, 56, 56, # 16rB600
139+ 56, 56, 56, 56, 56, 56, 56, 56, # 16rB800
140+ 56, 56, 56, 56, 56, 56, 56, 56, # 16rBA00
141+ 56, 56, 56, 56, 56, 56, 56, 56, # 16rBC00
142+ 56, 56, 56, 56, 56, 56, 56, 56, # 16rBE00
143+ 56, 56, 56, 56, 56, 56, 56, 56, # 16rC000
144+ 56, 56, 56, 56, 56, 56, 56, 56, # 16rC200
145+ 56, 56, 56, 56, 56, 56, 56, 56, # 16rC400
146+ 56, 56, 56, 56, 56, 56, 56, 56, # 16rC600
147+ 56, 56, 56, 56, 56, 56, 56, 56, # 16rC800
148+ 56, 56, 56, 56, 56, 56, 56, 56, # 16rCA00
149+ 56, 56, 56, 56, 56, 56, 56, 56, # 16rCC00
150+ 56, 56, 56, 56, 56, 56, 56, 56, # 16rCE00
151+ 56, 56, 56, 56, 56, 56, 56, 56, # 16rD000
152+ 56, 56, 56, 56, 56, 56, 56, 56, # 16rD200
153+ 56, 56, 56, 56, 56, 56, 56, 56, # 16rD400
154+ 56, 56, 56, 56, 56, 56, 103, 28, # 16rD600
155+ 104, 104, 104, 104, 104, 104, 104, 104, # 16rD800
156+ 104, 104, 104, 104, 104, 104, 104, 104, # 16rDA00
157+ 104, 104, 104, 104, 104, 104, 104, 104, # 16rDC00
158+ 104, 104, 104, 104, 104, 104, 104, 104, # 16rDE00
159+ 105, 105, 105, 105, 105, 105, 105, 105, # 16rE000
160+ 105, 105, 105, 105, 105, 105, 105, 105, # 16rE200
161+ 105, 105, 105, 105, 105, 105, 105, 105, # 16rE400
162+ 105, 105, 105, 105, 105, 105, 105, 105, # 16rE600
163+ 105, 105, 105, 105, 105, 105, 105, 105, # 16rE800
164+ 105, 105, 105, 105, 105, 105, 105, 105, # 16rEA00
165+ 105, 105, 105, 105, 105, 105, 105, 105, # 16rEC00
166+ 105, 105, 105, 105, 105, 105, 105, 105, # 16rEE00
167+ 105, 105, 105, 105, 105, 105, 105, 105, # 16rF000
168+ 105, 105, 105, 105, 105, 105, 105, 105, # 16rF200
169+ 105, 105, 105, 105, 105, 105, 105, 105, # 16rF400
170+ 105, 105, 105, 105, 105, 105, 105, 105, # 16rF600
171+ 105, 105, 105, 105, 56, 56, 56, 56, # 16rF800
172+ 106, 28, 28, 28, 107, 108, 109, 110, # 16rFA00
173+ 56, 56, 56, 56, 111, 112, 113, 114, # 16rFC00
174+ 115, 116, 56, 117, 118, 119, 120, 121 # 16rFE00
175+ };
176+
177+# The Y table has 7808 entries for a total of 7808 bytes.
178+
179+Y = array[] of {
180+ 0, 0, 0, 0, 0, 0, 0, 0, # 0
181+ 0, 1, 1, 1, 1, 1, 0, 0, # 0
182+ 0, 0, 0, 0, 0, 0, 0, 0, # 0
183+ 0, 0, 0, 0, 1, 1, 1, 1, # 0
184+ 2, 3, 3, 3, 4, 3, 3, 3, # 0
185+ 5, 6, 3, 7, 3, 8, 3, 3, # 0
186+ 9, 9, 9, 9, 9, 9, 9, 9, # 0
187+ 9, 9, 3, 3, 7, 7, 7, 3, # 0
188+ 3, 10, 10, 10, 10, 10, 10, 10, # 1
189+ 10, 10, 10, 10, 10, 10, 10, 10, # 1
190+ 10, 10, 10, 10, 10, 10, 10, 10, # 1
191+ 10, 10, 10, 5, 3, 6, 11, 12, # 1
192+ 11, 13, 13, 13, 13, 13, 13, 13, # 1
193+ 13, 13, 13, 13, 13, 13, 13, 13, # 1
194+ 13, 13, 13, 13, 13, 13, 13, 13, # 1
195+ 13, 13, 13, 5, 7, 6, 7, 0, # 1
196+ 0, 0, 0, 0, 0, 0, 0, 0, # 2
197+ 0, 0, 0, 0, 0, 0, 0, 0, # 2
198+ 0, 0, 0, 0, 0, 0, 0, 0, # 2
199+ 0, 0, 0, 0, 0, 0, 0, 0, # 2
200+ 14, 3, 4, 4, 4, 4, 15, 15, # 2
201+ 11, 15, 16, 5, 7, 8, 15, 11, # 2
202+ 15, 7, 17, 17, 11, 16, 15, 3, # 2
203+ 11, 18, 16, 6, 19, 19, 19, 3, # 2
204+ 20, 20, 20, 20, 20, 20, 20, 20, # 3
205+ 20, 20, 20, 20, 20, 20, 20, 20, # 3
206+ 20, 20, 20, 20, 20, 20, 20, 7, # 3
207+ 20, 20, 20, 20, 20, 20, 20, 16, # 3
208+ 21, 21, 21, 21, 21, 21, 21, 21, # 3
209+ 21, 21, 21, 21, 21, 21, 21, 21, # 3
210+ 21, 21, 21, 21, 21, 21, 21, 7, # 3
211+ 21, 21, 21, 21, 21, 21, 21, 22, # 3
212+ 23, 24, 23, 24, 23, 24, 23, 24, # 4
213+ 23, 24, 23, 24, 23, 24, 23, 24, # 4
214+ 23, 24, 23, 24, 23, 24, 23, 24, # 4
215+ 23, 24, 23, 24, 23, 24, 23, 24, # 4
216+ 23, 24, 23, 24, 23, 24, 23, 24, # 4
217+ 23, 24, 23, 24, 23, 24, 23, 24, # 4
218+ 25, 26, 23, 24, 23, 24, 23, 24, # 4
219+ 16, 23, 24, 23, 24, 23, 24, 23, # 4
220+ 24, 23, 24, 23, 24, 23, 24, 23, # 5
221+ 24, 16, 23, 24, 23, 24, 23, 24, # 5
222+ 23, 24, 23, 24, 23, 24, 23, 24, # 5
223+ 23, 24, 23, 24, 23, 24, 23, 24, # 5
224+ 23, 24, 23, 24, 23, 24, 23, 24, # 5
225+ 23, 24, 23, 24, 23, 24, 23, 24, # 5
226+ 23, 24, 23, 24, 23, 24, 23, 24, # 5
227+ 27, 23, 24, 23, 24, 23, 24, 28, # 5
228+ 16, 29, 23, 24, 23, 24, 30, 23, # 6
229+ 24, 31, 31, 23, 24, 16, 32, 32, # 6
230+ 33, 23, 24, 31, 34, 16, 35, 36, # 6
231+ 23, 24, 16, 16, 35, 37, 16, 38, # 6
232+ 23, 24, 23, 24, 23, 24, 38, 23, # 6
233+ 24, 39, 40, 16, 23, 24, 39, 23, # 6
234+ 24, 41, 41, 23, 24, 23, 24, 42, # 6
235+ 23, 24, 16, 40, 23, 24, 40, 40, # 6
236+ 40, 40, 40, 40, 43, 44, 45, 43, # 7
237+ 44, 45, 43, 44, 45, 23, 24, 23, # 7
238+ 24, 23, 24, 23, 24, 23, 24, 23, # 7
239+ 24, 23, 24, 23, 24, 16, 23, 24, # 7
240+ 23, 24, 23, 24, 23, 24, 23, 24, # 7
241+ 23, 24, 23, 24, 23, 24, 23, 24, # 7
242+ 16, 43, 44, 45, 23, 24, 46, 46, # 7
243+ 46, 46, 23, 24, 23, 24, 23, 24, # 7
244+ 23, 24, 23, 24, 23, 24, 23, 24, # 8
245+ 23, 24, 23, 24, 23, 24, 23, 24, # 8
246+ 23, 24, 23, 24, 23, 24, 23, 24, # 8
247+ 46, 46, 46, 46, 46, 46, 46, 46, # 8
248+ 46, 46, 46, 46, 46, 46, 46, 46, # 8
249+ 46, 46, 46, 46, 46, 46, 46, 46, # 8
250+ 46, 46, 46, 46, 46, 46, 46, 46, # 8
251+ 46, 46, 46, 46, 46, 46, 46, 46, # 8
252+ 46, 46, 46, 46, 46, 46, 46, 46, # 9
253+ 46, 46, 46, 46, 46, 46, 46, 46, # 9
254+ 16, 16, 16, 47, 48, 16, 49, 49, # 9
255+ 50, 50, 16, 51, 16, 16, 16, 16, # 9
256+ 49, 16, 16, 52, 16, 16, 16, 16, # 9
257+ 53, 54, 16, 16, 16, 16, 16, 54, # 9
258+ 16, 16, 55, 16, 16, 16, 16, 16, # 9
259+ 16, 16, 16, 16, 16, 16, 16, 16, # 9
260+ 16, 16, 16, 56, 16, 16, 16, 16, # 10
261+ 56, 16, 57, 57, 16, 16, 16, 16, # 10
262+ 16, 16, 58, 16, 16, 16, 16, 16, # 10
263+ 16, 16, 16, 16, 16, 16, 16, 16, # 10
264+ 16, 16, 16, 16, 16, 16, 16, 16, # 10
265+ 16, 46, 46, 46, 46, 46, 46, 46, # 10
266+ 59, 59, 59, 59, 59, 59, 59, 59, # 10
267+ 59, 11, 11, 59, 59, 59, 59, 59, # 10
268+ 59, 59, 11, 11, 11, 11, 11, 11, # 11
269+ 11, 11, 11, 11, 11, 11, 11, 11, # 11
270+ 59, 59, 11, 11, 11, 11, 11, 11, # 11
271+ 11, 11, 11, 11, 11, 11, 11, 46, # 11
272+ 59, 59, 59, 59, 59, 11, 11, 11, # 11
273+ 11, 11, 46, 46, 46, 46, 46, 46, # 11
274+ 46, 46, 46, 46, 46, 46, 46, 46, # 11
275+ 46, 46, 46, 46, 46, 46, 46, 46, # 11
276+ 60, 60, 60, 60, 60, 60, 60, 60, # 12
277+ 60, 60, 60, 60, 60, 60, 60, 60, # 12
278+ 60, 60, 60, 60, 60, 60, 60, 60, # 12
279+ 60, 60, 60, 60, 60, 60, 60, 60, # 12
280+ 60, 60, 60, 60, 60, 60, 60, 60, # 12
281+ 60, 60, 60, 60, 60, 60, 60, 60, # 12
282+ 60, 60, 60, 60, 60, 60, 60, 60, # 12
283+ 60, 60, 60, 60, 60, 60, 60, 60, # 12
284+ 60, 60, 60, 60, 60, 60, 46, 46, # 13
285+ 46, 46, 46, 46, 46, 46, 46, 46, # 13
286+ 46, 46, 46, 46, 46, 46, 46, 46, # 13
287+ 46, 46, 46, 46, 46, 46, 46, 46, # 13
288+ 60, 60, 46, 46, 46, 46, 46, 46, # 13
289+ 46, 46, 46, 46, 46, 46, 46, 46, # 13
290+ 46, 46, 46, 46, 3, 3, 46, 46, # 13
291+ 46, 46, 59, 46, 46, 46, 3, 46, # 13
292+ 46, 46, 46, 46, 11, 11, 61, 3, # 14
293+ 62, 62, 62, 46, 63, 46, 64, 64, # 14
294+ 16, 20, 20, 20, 20, 20, 20, 20, # 14
295+ 20, 20, 20, 20, 20, 20, 20, 20, # 14
296+ 20, 20, 46, 20, 20, 20, 20, 20, # 14
297+ 20, 20, 20, 20, 65, 66, 66, 66, # 14
298+ 16, 21, 21, 21, 21, 21, 21, 21, # 14
299+ 21, 21, 21, 21, 21, 21, 21, 21, # 14
300+ 21, 21, 16, 21, 21, 21, 21, 21, # 15
301+ 21, 21, 21, 21, 67, 68, 68, 46, # 15
302+ 69, 70, 38, 38, 38, 71, 72, 46, # 15
303+ 46, 46, 38, 46, 38, 46, 38, 46, # 15
304+ 38, 46, 23, 24, 23, 24, 23, 24, # 15
305+ 23, 24, 23, 24, 23, 24, 23, 24, # 15
306+ 73, 74, 16, 40, 46, 46, 46, 46, # 15
307+ 46, 46, 46, 46, 46, 46, 46, 46, # 15
308+ 46, 75, 75, 75, 75, 75, 75, 75, # 16
309+ 75, 75, 75, 75, 75, 46, 75, 75, # 16
310+ 20, 20, 20, 20, 20, 20, 20, 20, # 16
311+ 20, 20, 20, 20, 20, 20, 20, 20, # 16
312+ 20, 20, 20, 20, 20, 20, 20, 20, # 16
313+ 20, 20, 20, 20, 20, 20, 20, 20, # 16
314+ 21, 21, 21, 21, 21, 21, 21, 21, # 16
315+ 21, 21, 21, 21, 21, 21, 21, 21, # 16
316+ 21, 21, 21, 21, 21, 21, 21, 21, # 17
317+ 21, 21, 21, 21, 21, 21, 21, 21, # 17
318+ 46, 74, 74, 74, 74, 74, 74, 74, # 17
319+ 74, 74, 74, 74, 74, 46, 74, 74, # 17
320+ 23, 24, 23, 24, 23, 24, 23, 24, # 17
321+ 23, 24, 23, 24, 23, 24, 23, 24, # 17
322+ 23, 24, 23, 24, 23, 24, 23, 24, # 17
323+ 23, 24, 23, 24, 23, 24, 23, 24, # 17
324+ 23, 24, 15, 60, 60, 60, 60, 46, # 18
325+ 46, 46, 46, 46, 46, 46, 46, 46, # 18
326+ 23, 24, 23, 24, 23, 24, 23, 24, # 18
327+ 23, 24, 23, 24, 23, 24, 23, 24, # 18
328+ 23, 24, 23, 24, 23, 24, 23, 24, # 18
329+ 23, 24, 23, 24, 23, 24, 23, 24, # 18
330+ 23, 24, 23, 24, 23, 24, 23, 24, # 18
331+ 23, 24, 23, 24, 23, 24, 23, 24, # 18
332+ 40, 23, 24, 23, 24, 46, 46, 23, # 19
333+ 24, 46, 46, 23, 24, 46, 46, 46, # 19
334+ 23, 24, 23, 24, 23, 24, 23, 24, # 19
335+ 23, 24, 23, 24, 23, 24, 23, 24, # 19
336+ 23, 24, 23, 24, 23, 24, 23, 24, # 19
337+ 23, 24, 23, 24, 46, 46, 23, 24, # 19
338+ 23, 24, 23, 24, 23, 24, 46, 46, # 19
339+ 23, 24, 46, 46, 46, 46, 46, 46, # 19
340+ 46, 46, 46, 46, 46, 46, 46, 46, # 20
341+ 46, 46, 46, 46, 46, 46, 46, 46, # 20
342+ 46, 46, 46, 46, 46, 46, 46, 46, # 20
343+ 46, 46, 46, 46, 46, 46, 46, 46, # 20
344+ 46, 46, 46, 46, 46, 46, 46, 46, # 20
345+ 46, 46, 46, 46, 46, 46, 46, 46, # 20
346+ 46, 76, 76, 76, 76, 76, 76, 76, # 20
347+ 76, 76, 76, 76, 76, 76, 76, 76, # 20
348+ 76, 76, 76, 76, 76, 76, 76, 76, # 21
349+ 76, 76, 76, 76, 76, 76, 76, 76, # 21
350+ 76, 76, 76, 76, 76, 76, 76, 46, # 21
351+ 46, 59, 3, 3, 3, 3, 3, 3, # 21
352+ 46, 77, 77, 77, 77, 77, 77, 77, # 21
353+ 77, 77, 77, 77, 77, 77, 77, 77, # 21
354+ 77, 77, 77, 77, 77, 77, 77, 77, # 21
355+ 77, 77, 77, 77, 77, 77, 77, 77, # 21
356+ 77, 77, 77, 77, 77, 77, 77, 16, # 22
357+ 46, 3, 46, 46, 46, 46, 46, 46, # 22
358+ 46, 60, 60, 60, 60, 60, 60, 60, # 22
359+ 60, 60, 60, 60, 60, 60, 60, 60, # 22
360+ 60, 60, 46, 60, 60, 60, 60, 60, # 22
361+ 60, 60, 60, 60, 60, 60, 60, 60, # 22
362+ 60, 60, 60, 60, 60, 60, 60, 60, # 22
363+ 60, 60, 46, 60, 60, 60, 3, 60, # 22
364+ 3, 60, 60, 3, 60, 46, 46, 46, # 23
365+ 46, 46, 46, 46, 46, 46, 46, 46, # 23
366+ 40, 40, 40, 40, 40, 40, 40, 40, # 23
367+ 40, 40, 40, 40, 40, 40, 40, 40, # 23
368+ 40, 40, 40, 40, 40, 40, 40, 40, # 23
369+ 40, 40, 40, 46, 46, 46, 46, 46, # 23
370+ 40, 40, 40, 3, 3, 46, 46, 46, # 23
371+ 46, 46, 46, 46, 46, 46, 46, 46, # 23
372+ 46, 46, 46, 46, 46, 46, 46, 46, # 24
373+ 46, 46, 46, 46, 3, 46, 46, 46, # 24
374+ 46, 46, 46, 46, 46, 46, 46, 46, # 24
375+ 46, 46, 46, 3, 46, 46, 46, 3, # 24
376+ 46, 40, 40, 40, 40, 40, 40, 40, # 24
377+ 40, 40, 40, 40, 40, 40, 40, 40, # 24
378+ 40, 40, 40, 40, 40, 40, 40, 40, # 24
379+ 40, 40, 40, 46, 46, 46, 46, 46, # 24
380+ 59, 40, 40, 40, 40, 40, 40, 40, # 25
381+ 40, 40, 40, 60, 60, 60, 60, 60, # 25
382+ 60, 60, 60, 46, 46, 46, 46, 46, # 25
383+ 46, 46, 46, 46, 46, 46, 46, 46, # 25
384+ 78, 78, 78, 78, 78, 78, 78, 78, # 25
385+ 78, 78, 3, 3, 3, 3, 46, 46, # 25
386+ 60, 40, 40, 40, 40, 40, 40, 40, # 25
387+ 40, 40, 40, 40, 40, 40, 40, 40, # 25
388+ 40, 40, 40, 40, 40, 40, 40, 40, # 26
389+ 40, 40, 40, 40, 40, 40, 40, 40, # 26
390+ 40, 40, 40, 40, 40, 40, 40, 40, # 26
391+ 40, 40, 40, 40, 40, 40, 40, 40, # 26
392+ 40, 40, 40, 40, 40, 40, 40, 40, # 26
393+ 40, 40, 40, 40, 40, 40, 40, 40, # 26
394+ 40, 40, 40, 40, 40, 40, 40, 40, # 26
395+ 46, 46, 40, 40, 40, 40, 40, 46, # 26
396+ 40, 40, 40, 40, 40, 40, 40, 40, # 27
397+ 40, 40, 40, 40, 40, 40, 40, 46, # 27
398+ 40, 40, 40, 40, 3, 40, 60, 60, # 27
399+ 60, 60, 60, 60, 60, 79, 79, 60, # 27
400+ 60, 60, 60, 60, 60, 59, 59, 60, # 27
401+ 60, 15, 60, 60, 60, 60, 46, 46, # 27
402+ 9, 9, 9, 9, 9, 9, 9, 9, # 27
403+ 9, 9, 46, 46, 46, 46, 46, 46, # 27
404+ 46, 46, 46, 46, 46, 46, 46, 46, # 28
405+ 46, 46, 46, 46, 46, 46, 46, 46, # 28
406+ 46, 46, 46, 46, 46, 46, 46, 46, # 28
407+ 46, 46, 46, 46, 46, 46, 46, 46, # 28
408+ 46, 46, 46, 46, 46, 46, 46, 46, # 28
409+ 46, 46, 46, 46, 46, 46, 46, 46, # 28
410+ 46, 46, 46, 46, 46, 46, 46, 46, # 28
411+ 46, 46, 46, 46, 46, 46, 46, 46, # 28
412+ 46, 60, 60, 80, 46, 40, 40, 40, # 29
413+ 40, 40, 40, 40, 40, 40, 40, 40, # 29
414+ 40, 40, 40, 40, 40, 40, 40, 40, # 29
415+ 40, 40, 40, 40, 40, 40, 40, 40, # 29
416+ 40, 40, 40, 40, 40, 40, 40, 40, # 29
417+ 40, 40, 40, 40, 40, 40, 40, 40, # 29
418+ 40, 40, 40, 40, 40, 40, 40, 40, # 29
419+ 40, 40, 46, 46, 60, 40, 80, 80, # 29
420+ 80, 60, 60, 60, 60, 60, 60, 60, # 30
421+ 60, 80, 80, 80, 80, 60, 46, 46, # 30
422+ 15, 60, 60, 60, 60, 46, 46, 46, # 30
423+ 40, 40, 40, 40, 40, 40, 40, 40, # 30
424+ 40, 40, 60, 60, 3, 3, 81, 81, # 30
425+ 81, 81, 81, 81, 81, 81, 81, 81, # 30
426+ 3, 46, 46, 46, 46, 46, 46, 46, # 30
427+ 46, 46, 46, 46, 46, 46, 46, 46, # 30
428+ 46, 60, 80, 80, 46, 40, 40, 40, # 31
429+ 40, 40, 40, 40, 40, 46, 46, 40, # 31
430+ 40, 46, 46, 40, 40, 40, 40, 40, # 31
431+ 40, 40, 40, 40, 40, 40, 40, 40, # 31
432+ 40, 40, 40, 40, 40, 40, 40, 40, # 31
433+ 40, 46, 40, 40, 40, 40, 40, 40, # 31
434+ 40, 46, 40, 46, 46, 46, 40, 40, # 31
435+ 40, 40, 46, 46, 60, 46, 80, 80, # 31
436+ 80, 60, 60, 60, 60, 46, 46, 80, # 32
437+ 80, 46, 46, 80, 80, 60, 46, 46, # 32
438+ 46, 46, 46, 46, 46, 46, 46, 80, # 32
439+ 46, 46, 46, 46, 40, 40, 46, 40, # 32
440+ 40, 40, 60, 60, 46, 46, 81, 81, # 32
441+ 81, 81, 81, 81, 81, 81, 81, 81, # 32
442+ 40, 40, 4, 4, 82, 82, 82, 82, # 32
443+ 19, 83, 15, 46, 46, 46, 46, 46, # 32
444+ 46, 46, 60, 46, 46, 40, 40, 40, # 33
445+ 40, 40, 40, 46, 46, 46, 46, 40, # 33
446+ 40, 46, 46, 40, 40, 40, 40, 40, # 33
447+ 40, 40, 40, 40, 40, 40, 40, 40, # 33
448+ 40, 40, 40, 40, 40, 40, 40, 40, # 33
449+ 40, 46, 40, 40, 40, 40, 40, 40, # 33
450+ 40, 46, 40, 40, 46, 40, 40, 46, # 33
451+ 40, 40, 46, 46, 60, 46, 80, 80, # 33
452+ 80, 60, 60, 46, 46, 46, 46, 60, # 34
453+ 60, 46, 46, 60, 60, 60, 46, 46, # 34
454+ 46, 46, 46, 46, 46, 46, 46, 46, # 34
455+ 46, 40, 40, 40, 40, 46, 40, 46, # 34
456+ 46, 46, 46, 46, 46, 46, 81, 81, # 34
457+ 81, 81, 81, 81, 81, 81, 81, 81, # 34
458+ 60, 60, 40, 40, 40, 46, 46, 46, # 34
459+ 46, 46, 46, 46, 46, 46, 46, 46, # 34
460+ 46, 60, 60, 80, 46, 40, 40, 40, # 35
461+ 40, 40, 40, 40, 46, 40, 46, 40, # 35
462+ 40, 40, 46, 40, 40, 40, 40, 40, # 35
463+ 40, 40, 40, 40, 40, 40, 40, 40, # 35
464+ 40, 40, 40, 40, 40, 40, 40, 40, # 35
465+ 40, 46, 40, 40, 40, 40, 40, 40, # 35
466+ 40, 46, 40, 40, 46, 40, 40, 40, # 35
467+ 40, 40, 46, 46, 60, 40, 80, 80, # 35
468+ 80, 60, 60, 60, 60, 60, 46, 60, # 36
469+ 60, 80, 46, 80, 80, 60, 46, 46, # 36
470+ 15, 46, 46, 46, 46, 46, 46, 46, # 36
471+ 46, 46, 46, 46, 46, 46, 46, 46, # 36
472+ 40, 46, 46, 46, 46, 46, 81, 81, # 36
473+ 81, 81, 81, 81, 81, 81, 81, 81, # 36
474+ 46, 46, 46, 46, 46, 46, 46, 46, # 36
475+ 46, 46, 46, 46, 46, 46, 46, 46, # 36
476+ 46, 60, 80, 80, 46, 40, 40, 40, # 37
477+ 40, 40, 40, 40, 40, 46, 46, 40, # 37
478+ 40, 46, 46, 40, 40, 40, 40, 40, # 37
479+ 40, 40, 40, 40, 40, 40, 40, 40, # 37
480+ 40, 40, 40, 40, 40, 40, 40, 40, # 37
481+ 40, 46, 40, 40, 40, 40, 40, 40, # 37
482+ 40, 46, 40, 40, 46, 46, 40, 40, # 37
483+ 40, 40, 46, 46, 60, 40, 80, 60, # 37
484+ 80, 60, 60, 60, 46, 46, 46, 80, # 38
485+ 80, 46, 46, 80, 80, 60, 46, 46, # 38
486+ 46, 46, 46, 46, 46, 46, 60, 80, # 38
487+ 46, 46, 46, 46, 40, 40, 46, 40, # 38
488+ 40, 40, 46, 46, 46, 46, 81, 81, # 38
489+ 81, 81, 81, 81, 81, 81, 81, 81, # 38
490+ 15, 46, 46, 46, 46, 46, 46, 46, # 38
491+ 46, 46, 46, 46, 46, 46, 46, 46, # 38
492+ 46, 46, 60, 80, 46, 40, 40, 40, # 39
493+ 40, 40, 40, 46, 46, 46, 40, 40, # 39
494+ 40, 46, 40, 40, 40, 40, 46, 46, # 39
495+ 46, 40, 40, 46, 40, 46, 40, 40, # 39
496+ 46, 46, 46, 40, 40, 46, 46, 46, # 39
497+ 40, 40, 40, 46, 46, 46, 40, 40, # 39
498+ 40, 40, 40, 40, 40, 40, 46, 40, # 39
499+ 40, 40, 46, 46, 46, 46, 80, 80, # 39
500+ 60, 80, 80, 46, 46, 46, 80, 80, # 40
501+ 80, 46, 80, 80, 80, 60, 46, 46, # 40
502+ 46, 46, 46, 46, 46, 46, 46, 80, # 40
503+ 46, 46, 46, 46, 46, 46, 46, 46, # 40
504+ 46, 46, 46, 46, 46, 46, 46, 81, # 40
505+ 81, 81, 81, 81, 81, 81, 81, 81, # 40
506+ 84, 19, 19, 46, 46, 46, 46, 46, # 40
507+ 46, 46, 46, 46, 46, 46, 46, 46, # 40
508+ 46, 80, 80, 80, 46, 40, 40, 40, # 41
509+ 40, 40, 40, 40, 40, 46, 40, 40, # 41
510+ 40, 46, 40, 40, 40, 40, 40, 40, # 41
511+ 40, 40, 40, 40, 40, 40, 40, 40, # 41
512+ 40, 40, 40, 40, 40, 40, 40, 40, # 41
513+ 40, 46, 40, 40, 40, 40, 40, 40, # 41
514+ 40, 40, 40, 40, 46, 40, 40, 40, # 41
515+ 40, 40, 46, 46, 46, 46, 60, 60, # 41
516+ 60, 80, 80, 80, 80, 46, 60, 60, # 42
517+ 60, 46, 60, 60, 60, 60, 46, 46, # 42
518+ 46, 46, 46, 46, 46, 60, 60, 46, # 42
519+ 46, 46, 46, 46, 46, 46, 46, 46, # 42
520+ 40, 40, 46, 46, 46, 46, 81, 81, # 42
521+ 81, 81, 81, 81, 81, 81, 81, 81, # 42
522+ 46, 46, 46, 46, 46, 46, 46, 46, # 42
523+ 46, 46, 46, 46, 46, 46, 46, 46, # 42
524+ 46, 46, 80, 80, 46, 40, 40, 40, # 43
525+ 40, 40, 40, 40, 40, 46, 40, 40, # 43
526+ 40, 46, 40, 40, 40, 40, 40, 40, # 43
527+ 40, 40, 40, 40, 40, 40, 40, 40, # 43
528+ 40, 40, 40, 40, 40, 40, 40, 40, # 43
529+ 40, 46, 40, 40, 40, 40, 40, 40, # 43
530+ 40, 40, 40, 40, 46, 40, 40, 40, # 43
531+ 40, 40, 46, 46, 46, 46, 80, 60, # 43
532+ 80, 80, 80, 80, 80, 46, 60, 80, # 44
533+ 80, 46, 80, 80, 60, 60, 46, 46, # 44
534+ 46, 46, 46, 46, 46, 80, 80, 46, # 44
535+ 46, 46, 46, 46, 46, 46, 40, 46, # 44
536+ 40, 40, 46, 46, 46, 46, 81, 81, # 44
537+ 81, 81, 81, 81, 81, 81, 81, 81, # 44
538+ 46, 46, 46, 46, 46, 46, 46, 46, # 44
539+ 46, 46, 46, 46, 46, 46, 46, 46, # 44
540+ 46, 46, 80, 80, 46, 40, 40, 40, # 45
541+ 40, 40, 40, 40, 40, 46, 40, 40, # 45
542+ 40, 46, 40, 40, 40, 40, 40, 40, # 45
543+ 40, 40, 40, 40, 40, 40, 40, 40, # 45
544+ 40, 40, 40, 40, 40, 40, 40, 40, # 45
545+ 40, 46, 40, 40, 40, 40, 40, 40, # 45
546+ 40, 40, 40, 40, 40, 40, 40, 40, # 45
547+ 40, 40, 46, 46, 46, 46, 80, 80, # 45
548+ 80, 60, 60, 60, 46, 46, 80, 80, # 46
549+ 80, 46, 80, 80, 80, 60, 46, 46, # 46
550+ 46, 46, 46, 46, 46, 46, 46, 80, # 46
551+ 46, 46, 46, 46, 46, 46, 46, 46, # 46
552+ 40, 40, 46, 46, 46, 46, 81, 81, # 46
553+ 81, 81, 81, 81, 81, 81, 81, 81, # 46
554+ 46, 46, 46, 46, 46, 46, 46, 46, # 46
555+ 46, 46, 46, 46, 46, 46, 46, 46, # 46
556+ 46, 40, 40, 40, 40, 40, 40, 40, # 47
557+ 40, 40, 40, 40, 40, 40, 40, 40, # 47
558+ 40, 40, 40, 40, 40, 40, 40, 40, # 47
559+ 40, 40, 40, 40, 40, 40, 40, 40, # 47
560+ 40, 40, 40, 40, 40, 40, 40, 40, # 47
561+ 40, 40, 40, 40, 40, 40, 40, 3, # 47
562+ 40, 60, 40, 40, 60, 60, 60, 60, # 47
563+ 60, 60, 60, 46, 46, 46, 46, 4, # 47
564+ 40, 40, 40, 40, 40, 40, 59, 60, # 48
565+ 60, 60, 60, 60, 60, 60, 60, 15, # 48
566+ 9, 9, 9, 9, 9, 9, 9, 9, # 48
567+ 9, 9, 3, 3, 46, 46, 46, 46, # 48
568+ 46, 46, 46, 46, 46, 46, 46, 46, # 48
569+ 46, 46, 46, 46, 46, 46, 46, 46, # 48
570+ 46, 46, 46, 46, 46, 46, 46, 46, # 48
571+ 46, 46, 46, 46, 46, 46, 46, 46, # 48
572+ 46, 40, 40, 46, 40, 46, 46, 40, # 49
573+ 40, 46, 40, 46, 46, 40, 46, 46, # 49
574+ 46, 46, 46, 46, 40, 40, 40, 40, # 49
575+ 46, 40, 40, 40, 40, 40, 40, 40, # 49
576+ 46, 40, 40, 40, 46, 40, 46, 40, # 49
577+ 46, 46, 40, 40, 46, 40, 40, 3, # 49
578+ 40, 60, 40, 40, 60, 60, 60, 60, # 49
579+ 60, 60, 46, 60, 60, 40, 46, 46, # 49
580+ 40, 40, 40, 40, 40, 46, 59, 46, # 50
581+ 60, 60, 60, 60, 60, 60, 46, 46, # 50
582+ 9, 9, 9, 9, 9, 9, 9, 9, # 50
583+ 9, 9, 46, 46, 40, 40, 46, 46, # 50
584+ 46, 46, 46, 46, 46, 46, 46, 46, # 50
585+ 46, 46, 46, 46, 46, 46, 46, 46, # 50
586+ 46, 46, 46, 46, 46, 46, 46, 46, # 50
587+ 46, 46, 46, 46, 46, 46, 46, 46, # 50
588+ 15, 15, 15, 15, 3, 3, 3, 3, # 51
589+ 3, 3, 3, 3, 3, 3, 3, 3, # 51
590+ 3, 3, 3, 15, 15, 15, 15, 15, # 51
591+ 60, 60, 15, 15, 15, 15, 15, 15, # 51
592+ 78, 78, 78, 78, 78, 78, 78, 78, # 51
593+ 78, 78, 85, 85, 85, 85, 85, 85, # 51
594+ 85, 85, 85, 85, 15, 60, 15, 60, # 51
595+ 15, 60, 5, 6, 5, 6, 80, 80, # 51
596+ 40, 40, 40, 40, 40, 40, 40, 40, # 52
597+ 46, 40, 40, 40, 40, 40, 40, 40, # 52
598+ 40, 40, 40, 40, 40, 40, 40, 40, # 52
599+ 40, 40, 40, 40, 40, 40, 40, 40, # 52
600+ 40, 40, 40, 40, 40, 40, 40, 40, # 52
601+ 40, 40, 46, 46, 46, 46, 46, 46, # 52
602+ 46, 60, 60, 60, 60, 60, 60, 60, # 52
603+ 60, 60, 60, 60, 60, 60, 60, 80, # 52
604+ 60, 60, 60, 60, 60, 3, 60, 60, # 53
605+ 60, 60, 60, 60, 46, 46, 46, 46, # 53
606+ 60, 60, 60, 60, 60, 60, 46, 60, # 53
607+ 46, 60, 60, 60, 60, 60, 60, 60, # 53
608+ 60, 60, 60, 60, 60, 60, 60, 60, # 53
609+ 60, 60, 60, 60, 60, 60, 46, 46, # 53
610+ 46, 60, 60, 60, 60, 60, 60, 60, # 53
611+ 46, 60, 46, 46, 46, 46, 46, 46, # 53
612+ 46, 46, 46, 46, 46, 46, 46, 46, # 54
613+ 46, 46, 46, 46, 46, 46, 46, 46, # 54
614+ 46, 46, 46, 46, 46, 46, 46, 46, # 54
615+ 46, 46, 46, 46, 46, 46, 46, 46, # 54
616+ 76, 76, 76, 76, 76, 76, 76, 76, # 54
617+ 76, 76, 76, 76, 76, 76, 76, 76, # 54
618+ 76, 76, 76, 76, 76, 76, 76, 76, # 54
619+ 76, 76, 76, 76, 76, 76, 76, 76, # 54
620+ 76, 76, 76, 76, 76, 76, 46, 46, # 55
621+ 46, 46, 46, 46, 46, 46, 46, 46, # 55
622+ 16, 16, 16, 16, 16, 16, 16, 16, # 55
623+ 16, 16, 16, 16, 16, 16, 16, 16, # 55
624+ 16, 16, 16, 16, 16, 16, 16, 16, # 55
625+ 16, 16, 16, 16, 16, 16, 16, 16, # 55
626+ 16, 16, 16, 16, 16, 16, 16, 46, # 55
627+ 46, 46, 46, 3, 46, 46, 46, 46, # 55
628+ 40, 40, 40, 40, 40, 40, 40, 40, # 56
629+ 40, 40, 40, 40, 40, 40, 40, 40, # 56
630+ 40, 40, 40, 40, 40, 40, 40, 40, # 56
631+ 40, 40, 40, 40, 40, 40, 40, 40, # 56
632+ 40, 40, 40, 40, 40, 40, 40, 40, # 56
633+ 40, 40, 40, 40, 40, 40, 40, 40, # 56
634+ 40, 40, 40, 40, 40, 40, 40, 40, # 56
635+ 40, 40, 40, 40, 40, 40, 40, 40, # 56
636+ 40, 40, 40, 40, 40, 40, 40, 40, # 57
637+ 40, 40, 40, 40, 40, 40, 40, 40, # 57
638+ 40, 40, 40, 40, 40, 40, 40, 40, # 57
639+ 40, 40, 46, 46, 46, 46, 46, 40, # 57
640+ 40, 40, 40, 40, 40, 40, 40, 40, # 57
641+ 40, 40, 40, 40, 40, 40, 40, 40, # 57
642+ 40, 40, 40, 40, 40, 40, 40, 40, # 57
643+ 40, 40, 40, 40, 40, 40, 40, 40, # 57
644+ 40, 40, 40, 40, 40, 40, 40, 40, # 58
645+ 40, 40, 40, 40, 40, 40, 40, 40, # 58
646+ 40, 40, 40, 40, 40, 40, 40, 40, # 58
647+ 40, 40, 40, 40, 40, 40, 40, 40, # 58
648+ 40, 40, 40, 46, 46, 46, 46, 46, # 58
649+ 40, 40, 40, 40, 40, 40, 40, 40, # 58
650+ 40, 40, 40, 40, 40, 40, 40, 40, # 58
651+ 40, 40, 40, 40, 40, 40, 40, 40, # 58
652+ 40, 40, 40, 40, 40, 40, 40, 40, # 59
653+ 40, 40, 40, 40, 40, 40, 40, 40, # 59
654+ 40, 40, 40, 40, 40, 40, 40, 40, # 59
655+ 40, 40, 40, 40, 40, 40, 40, 40, # 59
656+ 40, 40, 40, 40, 40, 40, 40, 40, # 59
657+ 40, 40, 40, 40, 40, 40, 40, 40, # 59
658+ 40, 40, 40, 40, 40, 40, 40, 40, # 59
659+ 40, 40, 46, 46, 46, 46, 46, 46, # 59
660+ 23, 24, 23, 24, 23, 24, 23, 24, # 60
661+ 23, 24, 23, 24, 23, 24, 23, 24, # 60
662+ 23, 24, 23, 24, 23, 24, 23, 24, # 60
663+ 23, 24, 23, 24, 23, 24, 23, 24, # 60
664+ 23, 24, 23, 24, 23, 24, 23, 24, # 60
665+ 23, 24, 23, 24, 23, 24, 23, 24, # 60
666+ 23, 24, 23, 24, 23, 24, 23, 24, # 60
667+ 23, 24, 23, 24, 23, 24, 23, 24, # 60
668+ 23, 24, 23, 24, 23, 24, 23, 24, # 61
669+ 23, 24, 23, 24, 23, 24, 23, 24, # 61
670+ 23, 24, 23, 24, 23, 24, 16, 16, # 61
671+ 16, 16, 16, 16, 46, 46, 46, 46, # 61
672+ 23, 24, 23, 24, 23, 24, 23, 24, # 61
673+ 23, 24, 23, 24, 23, 24, 23, 24, # 61
674+ 23, 24, 23, 24, 23, 24, 23, 24, # 61
675+ 23, 24, 23, 24, 23, 24, 23, 24, # 61
676+ 23, 24, 23, 24, 23, 24, 23, 24, # 62
677+ 23, 24, 23, 24, 23, 24, 23, 24, # 62
678+ 23, 24, 23, 24, 23, 24, 23, 24, # 62
679+ 23, 24, 23, 24, 23, 24, 23, 24, # 62
680+ 23, 24, 23, 24, 23, 24, 23, 24, # 62
681+ 23, 24, 23, 24, 23, 24, 23, 24, # 62
682+ 23, 24, 23, 24, 23, 24, 23, 24, # 62
683+ 23, 24, 46, 46, 46, 46, 46, 46, # 62
684+ 86, 86, 86, 86, 86, 86, 86, 86, # 63
685+ 87, 87, 87, 87, 87, 87, 87, 87, # 63
686+ 86, 86, 86, 86, 86, 86, 46, 46, # 63
687+ 87, 87, 87, 87, 87, 87, 46, 46, # 63
688+ 86, 86, 86, 86, 86, 86, 86, 86, # 63
689+ 87, 87, 87, 87, 87, 87, 87, 87, # 63
690+ 86, 86, 86, 86, 86, 86, 86, 86, # 63
691+ 87, 87, 87, 87, 87, 87, 87, 87, # 63
692+ 86, 86, 86, 86, 86, 86, 46, 46, # 64
693+ 87, 87, 87, 87, 87, 87, 46, 46, # 64
694+ 16, 86, 16, 86, 16, 86, 16, 86, # 64
695+ 46, 87, 46, 87, 46, 87, 46, 87, # 64
696+ 86, 86, 86, 86, 86, 86, 86, 86, # 64
697+ 87, 87, 87, 87, 87, 87, 87, 87, # 64
698+ 88, 88, 89, 89, 89, 89, 90, 90, # 64
699+ 91, 91, 92, 92, 93, 93, 46, 46, # 64
700+ 86, 86, 86, 86, 86, 86, 86, 86, # 65
701+ 87, 87, 87, 87, 87, 87, 87, 87, # 65
702+ 86, 86, 86, 86, 86, 86, 86, 86, # 65
703+ 87, 87, 87, 87, 87, 87, 87, 87, # 65
704+ 86, 86, 86, 86, 86, 86, 86, 86, # 65
705+ 87, 87, 87, 87, 87, 87, 87, 87, # 65
706+ 86, 86, 16, 94, 16, 46, 16, 16, # 65
707+ 87, 87, 95, 95, 96, 11, 38, 11, # 65
708+ 11, 11, 16, 94, 16, 46, 16, 16, # 66
709+ 97, 97, 97, 97, 96, 11, 11, 11, # 66
710+ 86, 86, 16, 16, 46, 46, 16, 16, # 66
711+ 87, 87, 98, 98, 46, 11, 11, 11, # 66
712+ 86, 86, 16, 16, 16, 99, 16, 16, # 66
713+ 87, 87, 100, 100, 101, 11, 11, 11, # 66
714+ 46, 46, 16, 94, 16, 46, 16, 16, # 66
715+ 102, 102, 103, 103, 96, 11, 11, 46, # 66
716+ 2, 2, 2, 2, 2, 2, 2, 2, # 67
717+ 2, 2, 2, 2, 104, 104, 104, 104, # 67
718+ 8, 8, 8, 8, 8, 8, 3, 3, # 67
719+ 5, 6, 5, 5, 5, 6, 5, 5, # 67
720+ 3, 3, 3, 3, 3, 3, 3, 3, # 67
721+ 105, 106, 104, 104, 104, 104, 104, 46, # 67
722+ 3, 3, 3, 3, 3, 3, 3, 3, # 67
723+ 3, 5, 6, 3, 3, 3, 3, 12, # 67
724+ 12, 3, 3, 3, 7, 5, 6, 46, # 68
725+ 46, 46, 46, 46, 46, 46, 46, 46, # 68
726+ 46, 46, 46, 46, 46, 46, 46, 46, # 68
727+ 46, 46, 46, 46, 46, 46, 46, 46, # 68
728+ 46, 46, 46, 46, 46, 46, 46, 46, # 68
729+ 46, 46, 104, 104, 104, 104, 104, 104, # 68
730+ 17, 46, 46, 46, 17, 17, 17, 17, # 68
731+ 17, 17, 7, 7, 7, 5, 6, 16, # 68
732+ 107, 107, 107, 107, 107, 107, 107, 107, # 69
733+ 107, 107, 7, 7, 7, 5, 6, 46, # 69
734+ 46, 46, 46, 46, 46, 46, 46, 46, # 69
735+ 46, 46, 46, 46, 46, 46, 46, 46, # 69
736+ 4, 4, 4, 4, 4, 4, 4, 4, # 69
737+ 4, 4, 4, 4, 46, 46, 46, 46, # 69
738+ 46, 46, 46, 46, 46, 46, 46, 46, # 69
739+ 46, 46, 46, 46, 46, 46, 46, 46, # 69
740+ 46, 46, 46, 46, 46, 46, 46, 46, # 70
741+ 46, 46, 46, 46, 46, 46, 46, 46, # 70
742+ 60, 60, 60, 60, 60, 60, 60, 60, # 70
743+ 60, 60, 60, 60, 60, 79, 79, 79, # 70
744+ 79, 60, 46, 46, 46, 46, 46, 46, # 70
745+ 46, 46, 46, 46, 46, 46, 46, 46, # 70
746+ 46, 46, 46, 46, 46, 46, 46, 46, # 70
747+ 46, 46, 46, 46, 46, 46, 46, 46, # 70
748+ 15, 15, 38, 15, 15, 15, 15, 38, # 71
749+ 15, 15, 16, 38, 38, 38, 16, 16, # 71
750+ 38, 38, 38, 16, 15, 38, 15, 15, # 71
751+ 38, 38, 38, 38, 38, 38, 15, 15, # 71
752+ 15, 15, 15, 15, 38, 15, 38, 15, # 71
753+ 38, 15, 38, 38, 38, 38, 16, 16, # 71
754+ 38, 38, 15, 38, 16, 40, 40, 40, # 71
755+ 40, 46, 46, 46, 46, 46, 46, 46, # 71
756+ 46, 46, 46, 46, 46, 46, 46, 46, # 72
757+ 46, 46, 46, 46, 46, 46, 46, 46, # 72
758+ 46, 46, 46, 19, 19, 19, 19, 19, # 72
759+ 19, 19, 19, 19, 19, 19, 19, 108, # 72
760+ 109, 109, 109, 109, 109, 109, 109, 109, # 72
761+ 109, 109, 109, 109, 110, 110, 110, 110, # 72
762+ 111, 111, 111, 111, 111, 111, 111, 111, # 72
763+ 111, 111, 111, 111, 112, 112, 112, 112, # 72
764+ 113, 113, 113, 46, 46, 46, 46, 46, # 73
765+ 46, 46, 46, 46, 46, 46, 46, 46, # 73
766+ 7, 7, 7, 7, 7, 15, 15, 15, # 73
767+ 15, 15, 15, 15, 15, 15, 15, 15, # 73
768+ 15, 15, 15, 15, 15, 15, 15, 15, # 73
769+ 15, 15, 15, 15, 15, 15, 15, 15, # 73
770+ 15, 15, 15, 15, 15, 15, 15, 15, # 73
771+ 15, 15, 15, 15, 15, 15, 15, 15, # 73
772+ 15, 15, 15, 15, 15, 15, 15, 15, # 74
773+ 15, 15, 15, 15, 15, 15, 15, 15, # 74
774+ 15, 15, 7, 15, 7, 15, 15, 15, # 74
775+ 15, 15, 15, 15, 15, 15, 15, 15, # 74
776+ 15, 15, 15, 15, 15, 15, 15, 15, # 74
777+ 15, 15, 15, 46, 46, 46, 46, 46, # 74
778+ 46, 46, 46, 46, 46, 46, 46, 46, # 74
779+ 46, 46, 46, 46, 46, 46, 46, 46, # 74
780+ 7, 7, 7, 7, 7, 7, 7, 7, # 75
781+ 7, 7, 7, 7, 7, 7, 7, 7, # 75
782+ 7, 7, 7, 7, 7, 7, 7, 7, # 75
783+ 7, 7, 7, 7, 7, 7, 7, 7, # 75
784+ 7, 7, 7, 7, 7, 7, 7, 7, # 75
785+ 7, 7, 7, 7, 7, 7, 7, 7, # 75
786+ 7, 7, 7, 7, 7, 7, 7, 7, # 75
787+ 7, 7, 7, 7, 7, 7, 7, 7, # 75
788+ 7, 7, 7, 7, 7, 7, 7, 7, # 76
789+ 7, 7, 7, 7, 7, 7, 7, 7, # 76
790+ 7, 7, 7, 7, 7, 7, 7, 7, # 76
791+ 7, 7, 7, 7, 7, 7, 7, 7, # 76
792+ 7, 7, 7, 7, 7, 7, 7, 7, # 76
793+ 7, 7, 7, 7, 7, 7, 7, 7, # 76
794+ 7, 7, 46, 46, 46, 46, 46, 46, # 76
795+ 46, 46, 46, 46, 46, 46, 46, 46, # 76
796+ 15, 46, 15, 15, 15, 15, 15, 15, # 77
797+ 7, 7, 7, 7, 15, 15, 15, 15, # 77
798+ 15, 15, 15, 15, 15, 15, 15, 15, # 77
799+ 15, 15, 15, 15, 15, 15, 15, 15, # 77
800+ 7, 7, 15, 15, 15, 15, 15, 15, # 77
801+ 15, 5, 6, 15, 15, 15, 15, 15, # 77
802+ 15, 15, 15, 15, 15, 15, 15, 15, # 77
803+ 15, 15, 15, 15, 15, 15, 15, 15, # 77
804+ 15, 15, 15, 15, 15, 15, 15, 15, # 78
805+ 15, 15, 15, 15, 15, 15, 15, 15, # 78
806+ 15, 15, 15, 15, 15, 15, 15, 15, # 78
807+ 15, 15, 15, 15, 15, 15, 15, 15, # 78
808+ 15, 15, 15, 15, 15, 15, 15, 15, # 78
809+ 15, 15, 15, 15, 15, 15, 15, 15, # 78
810+ 15, 15, 15, 15, 15, 15, 15, 15, # 78
811+ 15, 15, 15, 46, 46, 46, 46, 46, # 78
812+ 15, 15, 15, 15, 15, 15, 15, 15, # 79
813+ 15, 15, 15, 15, 15, 15, 15, 15, # 79
814+ 15, 15, 15, 15, 15, 15, 15, 15, # 79
815+ 15, 15, 15, 15, 15, 15, 15, 15, # 79
816+ 15, 15, 15, 15, 15, 46, 46, 46, # 79
817+ 46, 46, 46, 46, 46, 46, 46, 46, # 79
818+ 46, 46, 46, 46, 46, 46, 46, 46, # 79
819+ 46, 46, 46, 46, 46, 46, 46, 46, # 79
820+ 15, 15, 15, 15, 15, 15, 15, 15, # 80
821+ 15, 15, 15, 46, 46, 46, 46, 46, # 80
822+ 46, 46, 46, 46, 46, 46, 46, 46, # 80
823+ 46, 46, 46, 46, 46, 46, 46, 46, # 80
824+ 114, 114, 114, 114, 114, 114, 114, 114, # 80
825+ 114, 114, 114, 114, 114, 114, 114, 114, # 80
826+ 114, 114, 114, 114, 82, 82, 82, 82, # 80
827+ 82, 82, 82, 82, 82, 82, 82, 82, # 80
828+ 82, 82, 82, 82, 82, 82, 82, 82, # 81
829+ 115, 115, 115, 115, 115, 115, 115, 115, # 81
830+ 115, 115, 115, 115, 115, 115, 115, 115, # 81
831+ 115, 115, 115, 115, 15, 15, 15, 15, # 81
832+ 15, 15, 15, 15, 15, 15, 15, 15, # 81
833+ 15, 15, 15, 15, 15, 15, 15, 15, # 81
834+ 15, 15, 15, 15, 15, 15, 116, 116, # 81
835+ 116, 116, 116, 116, 116, 116, 116, 116, # 81
836+ 116, 116, 116, 116, 116, 116, 116, 116, # 82
837+ 116, 116, 116, 116, 116, 116, 116, 116, # 82
838+ 117, 117, 117, 117, 117, 117, 117, 117, # 82
839+ 117, 117, 117, 117, 117, 117, 117, 117, # 82
840+ 117, 117, 117, 117, 117, 117, 117, 117, # 82
841+ 117, 117, 118, 46, 46, 46, 46, 46, # 82
842+ 46, 46, 46, 46, 46, 46, 46, 46, # 82
843+ 46, 46, 46, 46, 46, 46, 46, 46, # 82
844+ 15, 15, 15, 15, 15, 15, 15, 15, # 83
845+ 15, 15, 15, 15, 15, 15, 15, 15, # 83
846+ 15, 15, 15, 15, 15, 15, 15, 15, # 83
847+ 15, 15, 15, 15, 15, 15, 15, 15, # 83
848+ 15, 15, 15, 15, 15, 15, 15, 15, # 83
849+ 15, 15, 15, 15, 15, 15, 15, 15, # 83
850+ 15, 15, 15, 15, 15, 15, 15, 15, # 83
851+ 15, 15, 15, 15, 15, 15, 15, 15, # 83
852+ 15, 15, 15, 15, 15, 15, 15, 15, # 84
853+ 15, 15, 15, 15, 15, 15, 15, 15, # 84
854+ 15, 15, 15, 15, 15, 15, 46, 46, # 84
855+ 46, 46, 46, 46, 46, 46, 46, 46, # 84
856+ 15, 15, 15, 15, 15, 15, 15, 15, # 84
857+ 15, 15, 15, 15, 15, 15, 15, 15, # 84
858+ 15, 15, 15, 15, 15, 15, 15, 15, # 84
859+ 15, 15, 15, 15, 15, 15, 15, 15, # 84
860+ 15, 15, 15, 15, 15, 15, 15, 15, # 85
861+ 15, 15, 15, 15, 15, 15, 15, 15, # 85
862+ 15, 15, 15, 15, 15, 15, 15, 15, # 85
863+ 15, 15, 15, 15, 15, 15, 15, 15, # 85
864+ 15, 15, 15, 15, 15, 15, 15, 15, # 85
865+ 15, 15, 15, 15, 15, 15, 15, 15, # 85
866+ 46, 46, 46, 46, 46, 46, 46, 46, # 85
867+ 46, 46, 46, 46, 46, 46, 46, 46, # 85
868+ 15, 15, 15, 15, 15, 15, 15, 15, # 86
869+ 15, 15, 15, 15, 15, 15, 15, 15, # 86
870+ 15, 15, 15, 15, 46, 46, 46, 46, # 86
871+ 46, 46, 15, 15, 15, 15, 15, 15, # 86
872+ 15, 15, 15, 15, 15, 15, 15, 15, # 86
873+ 15, 15, 15, 15, 15, 15, 15, 15, # 86
874+ 15, 15, 15, 15, 15, 15, 15, 15, # 86
875+ 15, 15, 15, 15, 15, 15, 15, 15, # 86
876+ 46, 15, 15, 15, 15, 46, 15, 15, # 87
877+ 15, 15, 46, 46, 15, 15, 15, 15, # 87
878+ 15, 15, 15, 15, 15, 15, 15, 15, # 87
879+ 15, 15, 15, 15, 15, 15, 15, 15, # 87
880+ 15, 15, 15, 15, 15, 15, 15, 15, # 87
881+ 46, 15, 15, 15, 15, 15, 15, 15, # 87
882+ 15, 15, 15, 15, 15, 15, 15, 15, # 87
883+ 15, 15, 15, 15, 15, 15, 15, 15, # 87
884+ 15, 15, 15, 15, 15, 15, 15, 15, # 88
885+ 15, 15, 15, 15, 46, 15, 46, 15, # 88
886+ 15, 15, 15, 46, 46, 46, 15, 46, # 88
887+ 15, 15, 15, 15, 15, 15, 15, 46, # 88
888+ 46, 15, 15, 15, 15, 15, 15, 15, # 88
889+ 46, 46, 46, 46, 46, 46, 46, 46, # 88
890+ 46, 46, 46, 46, 46, 46, 119, 119, # 88
891+ 119, 119, 119, 119, 119, 119, 119, 119, # 88
892+ 114, 114, 114, 114, 114, 114, 114, 114, # 89
893+ 114, 114, 83, 83, 83, 83, 83, 83, # 89
894+ 83, 83, 83, 83, 15, 46, 46, 46, # 89
895+ 15, 15, 15, 15, 15, 15, 15, 15, # 89
896+ 15, 15, 15, 15, 15, 15, 15, 15, # 89
897+ 15, 15, 15, 15, 15, 15, 15, 15, # 89
898+ 46, 15, 15, 15, 15, 15, 15, 15, # 89
899+ 15, 15, 15, 15, 15, 15, 15, 46, # 89
900+ 2, 3, 3, 3, 15, 59, 3, 120, # 90
901+ 5, 6, 5, 6, 5, 6, 5, 6, # 90
902+ 5, 6, 15, 15, 5, 6, 5, 6, # 90
903+ 5, 6, 5, 6, 8, 5, 6, 5, # 90
904+ 15, 121, 121, 121, 121, 121, 121, 121, # 90
905+ 121, 121, 60, 60, 60, 60, 60, 60, # 90
906+ 8, 59, 59, 59, 59, 59, 15, 15, # 90
907+ 46, 46, 46, 46, 46, 46, 46, 15, # 90
908+ 46, 40, 40, 40, 40, 40, 40, 40, # 91
909+ 40, 40, 40, 40, 40, 40, 40, 40, # 91
910+ 40, 40, 40, 40, 40, 40, 40, 40, # 91
911+ 40, 40, 40, 40, 40, 40, 40, 40, # 91
912+ 40, 40, 40, 40, 40, 40, 40, 40, # 91
913+ 40, 40, 40, 40, 40, 40, 40, 40, # 91
914+ 40, 40, 40, 40, 40, 40, 40, 40, # 91
915+ 40, 40, 40, 40, 40, 40, 40, 40, # 91
916+ 40, 40, 40, 40, 40, 40, 40, 40, # 92
917+ 40, 40, 40, 40, 40, 40, 40, 40, # 92
918+ 40, 40, 40, 40, 40, 46, 46, 46, # 92
919+ 46, 60, 60, 59, 59, 59, 59, 46, # 92
920+ 46, 40, 40, 40, 40, 40, 40, 40, # 92
921+ 40, 40, 40, 40, 40, 40, 40, 40, # 92
922+ 40, 40, 40, 40, 40, 40, 40, 40, # 92
923+ 40, 40, 40, 40, 40, 40, 40, 40, # 92
924+ 40, 40, 40, 40, 40, 40, 40, 40, # 93
925+ 40, 40, 40, 40, 40, 40, 40, 40, # 93
926+ 40, 40, 40, 40, 40, 40, 40, 40, # 93
927+ 40, 40, 40, 40, 40, 40, 40, 40, # 93
928+ 40, 40, 40, 40, 40, 40, 40, 40, # 93
929+ 40, 40, 40, 40, 40, 40, 40, 40, # 93
930+ 40, 40, 40, 40, 40, 40, 40, 40, # 93
931+ 40, 40, 40, 3, 59, 59, 59, 46, # 93
932+ 46, 46, 46, 46, 46, 40, 40, 40, # 94
933+ 40, 40, 40, 40, 40, 40, 40, 40, # 94
934+ 40, 40, 40, 40, 40, 40, 40, 40, # 94
935+ 40, 40, 40, 40, 40, 40, 40, 40, # 94
936+ 40, 40, 40, 40, 40, 40, 40, 40, # 94
937+ 40, 40, 40, 40, 40, 46, 46, 46, # 94
938+ 46, 40, 40, 40, 40, 40, 40, 40, # 94
939+ 40, 40, 40, 40, 40, 40, 40, 40, # 94
940+ 40, 40, 40, 40, 40, 40, 40, 40, # 95
941+ 40, 40, 40, 40, 40, 40, 40, 46, # 95
942+ 15, 15, 85, 85, 85, 85, 15, 15, # 95
943+ 15, 15, 15, 15, 15, 15, 15, 15, # 95
944+ 46, 46, 46, 46, 46, 46, 46, 46, # 95
945+ 46, 46, 46, 46, 46, 46, 46, 46, # 95
946+ 46, 46, 46, 46, 46, 46, 46, 46, # 95
947+ 46, 46, 46, 46, 46, 46, 46, 46, # 95
948+ 15, 15, 15, 15, 15, 15, 15, 15, # 96
949+ 15, 15, 15, 15, 15, 15, 15, 15, # 96
950+ 15, 15, 15, 15, 15, 15, 15, 15, # 96
951+ 15, 15, 15, 15, 15, 46, 46, 46, # 96
952+ 85, 85, 85, 85, 85, 85, 85, 85, # 96
953+ 85, 85, 15, 15, 15, 15, 15, 15, # 96
954+ 15, 15, 15, 15, 15, 15, 15, 15, # 96
955+ 15, 15, 15, 15, 15, 15, 15, 15, # 96
956+ 15, 15, 15, 15, 46, 46, 46, 46, # 97
957+ 46, 46, 46, 46, 46, 46, 46, 46, # 97
958+ 46, 46, 46, 46, 46, 46, 46, 46, # 97
959+ 46, 46, 46, 46, 46, 46, 46, 46, # 97
960+ 15, 15, 15, 15, 15, 15, 15, 15, # 97
961+ 15, 15, 15, 15, 15, 15, 15, 15, # 97
962+ 15, 15, 15, 15, 15, 15, 15, 15, # 97
963+ 15, 15, 15, 15, 46, 46, 46, 15, # 97
964+ 114, 114, 114, 114, 114, 114, 114, 114, # 98
965+ 114, 114, 15, 15, 15, 15, 15, 15, # 98
966+ 15, 15, 15, 15, 15, 15, 15, 15, # 98
967+ 15, 15, 15, 15, 15, 15, 15, 15, # 98
968+ 15, 15, 15, 15, 15, 15, 15, 15, # 98
969+ 15, 15, 15, 15, 15, 15, 15, 15, # 98
970+ 15, 46, 46, 46, 46, 46, 46, 46, # 98
971+ 46, 46, 46, 46, 46, 46, 46, 46, # 98
972+ 15, 15, 15, 15, 15, 15, 15, 15, # 99
973+ 15, 15, 15, 15, 46, 46, 46, 46, # 99
974+ 15, 15, 15, 15, 15, 15, 15, 15, # 99
975+ 15, 15, 15, 15, 15, 15, 15, 15, # 99
976+ 15, 15, 15, 15, 15, 15, 15, 15, # 99
977+ 15, 15, 15, 15, 15, 15, 15, 15, # 99
978+ 15, 15, 15, 15, 15, 15, 15, 15, # 99
979+ 15, 15, 15, 15, 15, 15, 15, 46, # 99
980+ 15, 15, 15, 15, 15, 15, 15, 15, # 100
981+ 15, 15, 15, 15, 15, 15, 15, 15, # 100
982+ 15, 15, 15, 15, 15, 15, 15, 15, # 100
983+ 15, 15, 15, 15, 15, 15, 15, 15, # 100
984+ 15, 15, 15, 15, 15, 15, 15, 15, # 100
985+ 15, 15, 15, 15, 15, 15, 15, 15, # 100
986+ 15, 15, 15, 15, 15, 15, 15, 46, # 100
987+ 46, 46, 46, 15, 15, 15, 15, 15, # 100
988+ 15, 15, 15, 15, 15, 15, 15, 15, # 101
989+ 15, 15, 15, 15, 15, 15, 15, 15, # 101
990+ 15, 15, 15, 15, 15, 15, 15, 15, # 101
991+ 15, 15, 15, 15, 15, 15, 46, 46, # 101
992+ 15, 15, 15, 15, 15, 15, 15, 15, # 101
993+ 15, 15, 15, 15, 15, 15, 15, 15, # 101
994+ 15, 15, 15, 15, 15, 15, 15, 15, # 101
995+ 15, 15, 15, 15, 15, 15, 15, 46, # 101
996+ 40, 40, 40, 40, 40, 40, 40, 40, # 102
997+ 40, 40, 40, 40, 40, 40, 40, 40, # 102
998+ 40, 40, 40, 40, 40, 40, 40, 40, # 102
999+ 40, 40, 40, 40, 40, 40, 40, 40, # 102
1000+ 40, 40, 40, 40, 40, 40, 46, 46, # 102
1001+ 46, 46, 46, 46, 46, 46, 46, 46, # 102
1002+ 46, 46, 46, 46, 46, 46, 46, 46, # 102
1003+ 46, 46, 46, 46, 46, 46, 46, 46, # 102
1004+ 40, 40, 40, 40, 40, 40, 40, 40, # 103
1005+ 40, 40, 40, 40, 40, 40, 40, 40, # 103
1006+ 40, 40, 40, 40, 40, 40, 40, 40, # 103
1007+ 40, 40, 40, 40, 40, 40, 40, 40, # 103
1008+ 40, 40, 40, 40, 46, 46, 46, 46, # 103
1009+ 46, 46, 46, 46, 46, 46, 46, 46, # 103
1010+ 46, 46, 46, 46, 46, 46, 46, 46, # 103
1011+ 46, 46, 46, 46, 46, 46, 46, 46, # 103
1012+ 122, 122, 122, 122, 122, 122, 122, 122, # 104
1013+ 122, 122, 122, 122, 122, 122, 122, 122, # 104
1014+ 122, 122, 122, 122, 122, 122, 122, 122, # 104
1015+ 122, 122, 122, 122, 122, 122, 122, 122, # 104
1016+ 122, 122, 122, 122, 122, 122, 122, 122, # 104
1017+ 122, 122, 122, 122, 122, 122, 122, 122, # 104
1018+ 122, 122, 122, 122, 122, 122, 122, 122, # 104
1019+ 122, 122, 122, 122, 122, 122, 122, 122, # 104
1020+ 123, 123, 123, 123, 123, 123, 123, 123, # 105
1021+ 123, 123, 123, 123, 123, 123, 123, 123, # 105
1022+ 123, 123, 123, 123, 123, 123, 123, 123, # 105
1023+ 123, 123, 123, 123, 123, 123, 123, 123, # 105
1024+ 123, 123, 123, 123, 123, 123, 123, 123, # 105
1025+ 123, 123, 123, 123, 123, 123, 123, 123, # 105
1026+ 123, 123, 123, 123, 123, 123, 123, 123, # 105
1027+ 123, 123, 123, 123, 123, 123, 123, 123, # 105
1028+ 40, 40, 40, 40, 40, 40, 40, 40, # 106
1029+ 40, 40, 40, 40, 40, 40, 40, 40, # 106
1030+ 40, 40, 40, 40, 40, 40, 40, 40, # 106
1031+ 40, 40, 40, 40, 40, 40, 40, 40, # 106
1032+ 40, 40, 40, 40, 40, 40, 40, 40, # 106
1033+ 40, 40, 40, 40, 40, 40, 46, 46, # 106
1034+ 46, 46, 46, 46, 46, 46, 46, 46, # 106
1035+ 46, 46, 46, 46, 46, 46, 46, 46, # 106
1036+ 16, 16, 16, 16, 16, 16, 16, 46, # 107
1037+ 46, 46, 46, 46, 46, 46, 46, 46, # 107
1038+ 46, 46, 46, 16, 16, 16, 16, 16, # 107
1039+ 46, 46, 46, 46, 46, 46, 60, 40, # 107
1040+ 40, 40, 40, 40, 40, 40, 40, 40, # 107
1041+ 40, 7, 40, 40, 40, 40, 40, 40, # 107
1042+ 40, 40, 40, 40, 40, 40, 40, 46, # 107
1043+ 40, 40, 40, 40, 40, 46, 40, 46, # 107
1044+ 40, 40, 46, 40, 40, 46, 40, 40, # 108
1045+ 40, 40, 40, 40, 40, 40, 40, 40, # 108
1046+ 40, 40, 40, 40, 40, 40, 40, 40, # 108
1047+ 40, 40, 40, 40, 40, 40, 40, 40, # 108
1048+ 40, 40, 40, 40, 40, 40, 40, 40, # 108
1049+ 40, 40, 40, 40, 40, 40, 40, 40, # 108
1050+ 40, 40, 40, 40, 40, 40, 40, 40, # 108
1051+ 40, 40, 40, 40, 40, 40, 40, 40, # 108
1052+ 40, 40, 40, 40, 40, 40, 40, 40, # 109
1053+ 40, 40, 40, 40, 40, 40, 40, 40, # 109
1054+ 40, 40, 40, 40, 40, 40, 40, 40, # 109
1055+ 40, 40, 40, 40, 40, 40, 40, 40, # 109
1056+ 40, 40, 40, 40, 40, 40, 40, 40, # 109
1057+ 40, 40, 40, 40, 40, 40, 40, 40, # 109
1058+ 40, 40, 46, 46, 46, 46, 46, 46, # 109
1059+ 46, 46, 46, 46, 46, 46, 46, 46, # 109
1060+ 46, 46, 46, 46, 46, 46, 46, 46, # 110
1061+ 46, 46, 46, 46, 46, 46, 46, 46, # 110
1062+ 46, 46, 46, 40, 40, 40, 40, 40, # 110
1063+ 40, 40, 40, 40, 40, 40, 40, 40, # 110
1064+ 40, 40, 40, 40, 40, 40, 40, 40, # 110
1065+ 40, 40, 40, 40, 40, 40, 40, 40, # 110
1066+ 40, 40, 40, 40, 40, 40, 40, 40, # 110
1067+ 40, 40, 40, 40, 40, 40, 40, 40, # 110
1068+ 40, 40, 40, 40, 40, 40, 40, 40, # 111
1069+ 40, 40, 40, 40, 40, 40, 40, 40, # 111
1070+ 40, 40, 40, 40, 40, 40, 40, 40, # 111
1071+ 40, 40, 40, 40, 40, 40, 40, 40, # 111
1072+ 40, 40, 40, 40, 40, 40, 40, 40, # 111
1073+ 40, 40, 40, 40, 40, 40, 40, 40, # 111
1074+ 40, 40, 40, 40, 40, 40, 40, 40, # 111
1075+ 40, 40, 40, 40, 40, 40, 5, 6, # 111
1076+ 46, 46, 46, 46, 46, 46, 46, 46, # 112
1077+ 46, 46, 46, 46, 46, 46, 46, 46, # 112
1078+ 40, 40, 40, 40, 40, 40, 40, 40, # 112
1079+ 40, 40, 40, 40, 40, 40, 40, 40, # 112
1080+ 40, 40, 40, 40, 40, 40, 40, 40, # 112
1081+ 40, 40, 40, 40, 40, 40, 40, 40, # 112
1082+ 40, 40, 40, 40, 40, 40, 40, 40, # 112
1083+ 40, 40, 40, 40, 40, 40, 40, 40, # 112
1084+ 40, 40, 40, 40, 40, 40, 40, 40, # 113
1085+ 40, 40, 40, 40, 40, 40, 40, 40, # 113
1086+ 46, 46, 40, 40, 40, 40, 40, 40, # 113
1087+ 40, 40, 40, 40, 40, 40, 40, 40, # 113
1088+ 40, 40, 40, 40, 40, 40, 40, 40, # 113
1089+ 40, 40, 40, 40, 40, 40, 40, 40, # 113
1090+ 40, 40, 40, 40, 40, 40, 40, 40, # 113
1091+ 40, 40, 40, 40, 40, 40, 40, 40, # 113
1092+ 40, 40, 40, 40, 40, 40, 40, 40, # 114
1093+ 46, 46, 46, 46, 46, 46, 46, 46, # 114
1094+ 46, 46, 46, 46, 46, 46, 46, 46, # 114
1095+ 46, 46, 46, 46, 46, 46, 46, 46, # 114
1096+ 46, 46, 46, 46, 46, 46, 46, 46, # 114
1097+ 46, 46, 46, 46, 46, 46, 46, 46, # 114
1098+ 40, 40, 40, 40, 40, 40, 40, 40, # 114
1099+ 40, 40, 40, 40, 46, 46, 46, 46, # 114
1100+ 46, 46, 46, 46, 46, 46, 46, 46, # 115
1101+ 46, 46, 46, 46, 46, 46, 46, 46, # 115
1102+ 46, 46, 46, 46, 46, 46, 46, 46, # 115
1103+ 46, 46, 46, 46, 46, 46, 46, 46, # 115
1104+ 60, 60, 60, 60, 46, 46, 46, 46, # 115
1105+ 46, 46, 46, 46, 46, 46, 46, 46, # 115
1106+ 3, 8, 8, 12, 12, 5, 6, 5, # 115
1107+ 6, 5, 6, 5, 6, 5, 6, 5, # 115
1108+ 6, 5, 6, 5, 6, 46, 46, 46, # 116
1109+ 46, 3, 3, 3, 3, 12, 12, 12, # 116
1110+ 3, 3, 3, 46, 3, 3, 3, 3, # 116
1111+ 8, 5, 6, 5, 6, 5, 6, 3, # 116
1112+ 3, 3, 7, 8, 7, 7, 7, 46, # 116
1113+ 3, 4, 3, 3, 46, 46, 46, 46, # 116
1114+ 40, 40, 40, 46, 40, 46, 40, 40, # 116
1115+ 40, 40, 40, 40, 40, 40, 40, 40, # 116
1116+ 40, 40, 40, 40, 40, 40, 40, 40, # 117
1117+ 40, 40, 40, 40, 40, 40, 40, 40, # 117
1118+ 40, 40, 40, 40, 40, 40, 40, 40, # 117
1119+ 40, 40, 40, 40, 40, 40, 40, 40, # 117
1120+ 40, 40, 40, 40, 40, 40, 40, 40, # 117
1121+ 40, 40, 40, 40, 40, 40, 40, 40, # 117
1122+ 40, 40, 40, 40, 40, 40, 40, 40, # 117
1123+ 40, 40, 40, 40, 40, 46, 46, 104, # 117
1124+ 46, 3, 3, 3, 4, 3, 3, 3, # 118
1125+ 5, 6, 3, 7, 3, 8, 3, 3, # 118
1126+ 9, 9, 9, 9, 9, 9, 9, 9, # 118
1127+ 9, 9, 3, 3, 7, 7, 7, 3, # 118
1128+ 3, 10, 10, 10, 10, 10, 10, 10, # 118
1129+ 10, 10, 10, 10, 10, 10, 10, 10, # 118
1130+ 10, 10, 10, 10, 10, 10, 10, 10, # 118
1131+ 10, 10, 10, 5, 3, 6, 11, 12, # 118
1132+ 11, 13, 13, 13, 13, 13, 13, 13, # 119
1133+ 13, 13, 13, 13, 13, 13, 13, 13, # 119
1134+ 13, 13, 13, 13, 13, 13, 13, 13, # 119
1135+ 13, 13, 13, 5, 7, 6, 7, 46, # 119
1136+ 46, 3, 5, 6, 3, 3, 40, 40, # 119
1137+ 40, 40, 40, 40, 40, 40, 40, 40, # 119
1138+ 59, 40, 40, 40, 40, 40, 40, 40, # 119
1139+ 40, 40, 40, 40, 40, 40, 40, 40, # 119
1140+ 40, 40, 40, 40, 40, 40, 40, 40, # 120
1141+ 40, 40, 40, 40, 40, 40, 40, 40, # 120
1142+ 40, 40, 40, 40, 40, 40, 40, 40, # 120
1143+ 40, 40, 40, 40, 40, 40, 59, 59, # 120
1144+ 40, 40, 40, 40, 40, 40, 40, 40, # 120
1145+ 40, 40, 40, 40, 40, 40, 40, 40, # 120
1146+ 40, 40, 40, 40, 40, 40, 40, 40, # 120
1147+ 40, 40, 40, 40, 40, 40, 40, 46, # 120
1148+ 46, 46, 40, 40, 40, 40, 40, 40, # 121
1149+ 46, 46, 40, 40, 40, 40, 40, 40, # 121
1150+ 46, 46, 40, 40, 40, 40, 40, 40, # 121
1151+ 46, 46, 40, 40, 40, 46, 46, 46, # 121
1152+ 4, 4, 7, 11, 15, 4, 4, 46, # 121
1153+ 7, 7, 7, 7, 7, 15, 15, 46, # 121
1154+ 46, 46, 46, 46, 46, 46, 46, 46, # 121
1155+ 46, 46, 46, 46, 46, 15, 46, 46 # 121
1156+ };
1157+
1158+# The A table has 124 entries for a total of 496 bytes.
1159+
1160+A = array[] of {
1161+ 16r0001000F, # 0 Cc, ignorable
1162+ 16r0004000F, # 1 Cc, whitespace
1163+ 16r0004000C, # 2 Zs, whitespace
1164+ 16r00000018, # 3 Po
1165+ 16r0006001A, # 4 Sc, currency
1166+ 16r00000015, # 5 Ps
1167+ 16r00000016, # 6 Pe
1168+ 16r00000019, # 7 Sm
1169+ 16r00000014, # 8 Pd
1170+ 16r00036009, # 9 Nd, identifier part, decimal 16
1171+ 16r0827FE01, # 10 Lu, hasLower (add 32), identifier start, supradecimal 31
1172+ 16r0000001B, # 11 Sk
1173+ 16r00050017, # 12 Pc, underscore
1174+ 16r0817FE02, # 13 Ll, hasUpper (subtract 32), identifier start, supradecimal 31
1175+ 16r0000000C, # 14 Zs
1176+ 16r0000001C, # 15 So
1177+ 16r00070002, # 16 Ll, identifier start
1178+ 16r0000600B, # 17 No, decimal 16
1179+ 16r0000500B, # 18 No, decimal 8
1180+ 16r0000800B, # 19 No, strange
1181+ 16r08270001, # 20 Lu, hasLower (add 32), identifier start
1182+ 16r08170002, # 21 Ll, hasUpper (subtract 32), identifier start
1183+ int 16rE1D70002, # 22 Ll, hasUpper (subtract -121), identifier start
1184+ 16r00670001, # 23 Lu, hasLower (add 1), identifier start
1185+ 16r00570002, # 24 Ll, hasUpper (subtract 1), identifier start
1186+ int 16rCE670001, # 25 Lu, hasLower (add -199), identifier start
1187+ 16r3A170002, # 26 Ll, hasUpper (subtract 232), identifier start
1188+ int 16rE1E70001, # 27 Lu, hasLower (add -121), identifier start
1189+ 16r4B170002, # 28 Ll, hasUpper (subtract 300), identifier start
1190+ 16r34A70001, # 29 Lu, hasLower (add 210), identifier start
1191+ 16r33A70001, # 30 Lu, hasLower (add 206), identifier start
1192+ 16r33670001, # 31 Lu, hasLower (add 205), identifier start
1193+ 16r32A70001, # 32 Lu, hasLower (add 202), identifier start
1194+ 16r32E70001, # 33 Lu, hasLower (add 203), identifier start
1195+ 16r33E70001, # 34 Lu, hasLower (add 207), identifier start
1196+ 16r34E70001, # 35 Lu, hasLower (add 211), identifier start
1197+ 16r34670001, # 36 Lu, hasLower (add 209), identifier start
1198+ 16r35670001, # 37 Lu, hasLower (add 213), identifier start
1199+ 16r00070001, # 38 Lu, identifier start
1200+ 16r36A70001, # 39 Lu, hasLower (add 218), identifier start
1201+ 16r00070005, # 40 Lo, identifier start
1202+ 16r36670001, # 41 Lu, hasLower (add 217), identifier start
1203+ 16r36E70001, # 42 Lu, hasLower (add 219), identifier start
1204+ 16r00AF0001, # 43 Lu, hasLower (add 2), hasTitle, identifier start
1205+ 16r007F0003, # 44 Lt, hasUpper (subtract 1), hasLower (add 1), hasTitle, identifier start
1206+ 16r009F0002, # 45 Ll, hasUpper (subtract 2), hasTitle, identifier start
1207+ 16r00000000, # 46 unassigned
1208+ 16r34970002, # 47 Ll, hasUpper (subtract 210), identifier start
1209+ 16r33970002, # 48 Ll, hasUpper (subtract 206), identifier start
1210+ 16r33570002, # 49 Ll, hasUpper (subtract 205), identifier start
1211+ 16r32970002, # 50 Ll, hasUpper (subtract 202), identifier start
1212+ 16r32D70002, # 51 Ll, hasUpper (subtract 203), identifier start
1213+ 16r33D70002, # 52 Ll, hasUpper (subtract 207), identifier start
1214+ 16r34570002, # 53 Ll, hasUpper (subtract 209), identifier start
1215+ 16r34D70002, # 54 Ll, hasUpper (subtract 211), identifier start
1216+ 16r35570002, # 55 Ll, hasUpper (subtract 213), identifier start
1217+ 16r36970002, # 56 Ll, hasUpper (subtract 218), identifier start
1218+ 16r36570002, # 57 Ll, hasUpper (subtract 217), identifier start
1219+ 16r36D70002, # 58 Ll, hasUpper (subtract 219), identifier start
1220+ 16r00070004, # 59 Lm, identifier start
1221+ 16r00030006, # 60 Mn, identifier part
1222+ 16r09A70001, # 61 Lu, hasLower (add 38), identifier start
1223+ 16r09670001, # 62 Lu, hasLower (add 37), identifier start
1224+ 16r10270001, # 63 Lu, hasLower (add 64), identifier start
1225+ 16r0FE70001, # 64 Lu, hasLower (add 63), identifier start
1226+ 16r09970002, # 65 Ll, hasUpper (subtract 38), identifier start
1227+ 16r09570002, # 66 Ll, hasUpper (subtract 37), identifier start
1228+ 16r10170002, # 67 Ll, hasUpper (subtract 64), identifier start
1229+ 16r0FD70002, # 68 Ll, hasUpper (subtract 63), identifier start
1230+ 16r0F970002, # 69 Ll, hasUpper (subtract 62), identifier start
1231+ 16r0E570002, # 70 Ll, hasUpper (subtract 57), identifier start
1232+ 16r0BD70002, # 71 Ll, hasUpper (subtract 47), identifier start
1233+ 16r0D970002, # 72 Ll, hasUpper (subtract 54), identifier start
1234+ 16r15970002, # 73 Ll, hasUpper (subtract 86), identifier start
1235+ 16r14170002, # 74 Ll, hasUpper (subtract 80), identifier start
1236+ 16r14270001, # 75 Lu, hasLower (add 80), identifier start
1237+ 16r0C270001, # 76 Lu, hasLower (add 48), identifier start
1238+ 16r0C170002, # 77 Ll, hasUpper (subtract 48), identifier start
1239+ 16r00034009, # 78 Nd, identifier part, decimal 0
1240+ 16r00000007, # 79 Me
1241+ 16r00030008, # 80 Mc, identifier part
1242+ 16r00037409, # 81 Nd, identifier part, decimal 26
1243+ 16r00005A0B, # 82 No, decimal 13
1244+ 16r00006E0B, # 83 No, decimal 23
1245+ 16r0000740B, # 84 No, decimal 26
1246+ 16r0000000B, # 85 No
1247+ int 16rFE170002, # 86 Ll, hasUpper (subtract -8), identifier start
1248+ int 16rFE270001, # 87 Lu, hasLower (add -8), identifier start
1249+ int 16rED970002, # 88 Ll, hasUpper (subtract -74), identifier start
1250+ int 16rEA970002, # 89 Ll, hasUpper (subtract -86), identifier start
1251+ int 16rE7170002, # 90 Ll, hasUpper (subtract -100), identifier start
1252+ int 16rE0170002, # 91 Ll, hasUpper (subtract -128), identifier start
1253+ int 16rE4170002, # 92 Ll, hasUpper (subtract -112), identifier start
1254+ int 16rE0970002, # 93 Ll, hasUpper (subtract -126), identifier start
1255+ int 16rFDD70002, # 94 Ll, hasUpper (subtract -9), identifier start
1256+ int 16rEDA70001, # 95 Lu, hasLower (add -74), identifier start
1257+ int 16rFDE70001, # 96 Lu, hasLower (add -9), identifier start
1258+ int 16rEAA70001, # 97 Lu, hasLower (add -86), identifier start
1259+ int 16rE7270001, # 98 Lu, hasLower (add -100), identifier start
1260+ int 16rFE570002, # 99 Ll, hasUpper (subtract -7), identifier start
1261+ int 16rE4270001, # 100 Lu, hasLower (add -112), identifier start
1262+ int 16rFE670001, # 101 Lu, hasLower (add -7), identifier start
1263+ int 16rE0270001, # 102 Lu, hasLower (add -128), identifier start
1264+ int 16rE0A70001, # 103 Lu, hasLower (add -126), identifier start
1265+ 16r00010010, # 104 Cf, ignorable
1266+ 16r0004000D, # 105 Zl, whitespace
1267+ 16r0004000E, # 106 Zp, whitespace
1268+ 16r0000400B, # 107 No, decimal 0
1269+ 16r0000440B, # 108 No, decimal 2
1270+ 16r0427420A, # 109 Nl, hasLower (add 16), identifier start, decimal 1
1271+ 16r0427800A, # 110 Nl, hasLower (add 16), identifier start, strange
1272+ 16r0417620A, # 111 Nl, hasUpper (subtract 16), identifier start, decimal 17
1273+ 16r0417800A, # 112 Nl, hasUpper (subtract 16), identifier start, strange
1274+ 16r0007800A, # 113 Nl, identifier start, strange
1275+ 16r0000420B, # 114 No, decimal 1
1276+ 16r0000720B, # 115 No, decimal 25
1277+ 16r06A0001C, # 116 So, hasLower (add 26)
1278+ 16r0690001C, # 117 So, hasUpper (subtract 26)
1279+ 16r00006C0B, # 118 No, decimal 22
1280+ 16r0000560B, # 119 No, decimal 11
1281+ 16r0007720A, # 120 Nl, identifier start, decimal 25
1282+ 16r0007400A, # 121 Nl, identifier start, decimal 0
1283+ 16r00000013, # 122 Cs
1284+ 16r00000012 # 123 Co
1285+ };
java/pkg2/java/lang/unicode_table.m+8−0
@@ -0,0 +1,8 @@
1+UnicodeTable : module
2+{
3+ PATH : con "/dis/java/java/lang/unicode_table.dis";
4+
5+ A : array of int;
6+ X : array of int;
7+ Y : array of int;
8+};