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 @@
1implement Character_L;
2
3# javal v1.3 generated file: edit with care
4
5include "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
29include "Character_L.m";
30
31#>> extra post includes here
32
33include "unicode_table.m";
34
35unicode_table : UnicodeTable;
36 A,
37 Y,
38 X : import unicode_table;
39
40#<<
41
42init( jni_p : JNI )
43{
44 # save java native inteface mod instance
45 jni = jni_p;
46 #>>extra initialization here
47 #<<
48}
49
50lookup_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
58loadtable()
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
3Character_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 @@
1implement ClassLoader_L;
2
3# javal v1.2 generated file: edit with care
4
5include "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
28include "ClassLoader_L.m";
29
30#>> extra post includes here
31
32#<<
33
34init( jni_p : JNI )
35{
36 # save java native inteface mod instance
37 jni = jni_p;
38 #>>extra initialization here
39 #<<
40}
41
42init_V( this : ref ClassLoader_obj)
43{#>>
44 junk := this;
45}#<<
46
47defineClass0_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
54resolveClass0_rClass_V( this : ref ClassLoader_obj, p0 : JClass)
55{#>>
56 junk := (this,p0);
57 jni->FatalError( "resolveClass() not implemented" );
58}#<<
59
60findSystemClass0_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
67getSystemResourceAsStream0_rString_rInputStream( p0 : JString) : JObject
68{#>>
69 junk := p0;
70 jni->FatalError( "getSystemResourceAsStream() not implemented" );
71 return( nil );
72}#<<
73
74getSystemResourceAsName0_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
3ClassLoader_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 @@
1implement Class_L;
2
3# javal v1.2 generated file: edit with care
4
5include "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
31include "Class_L.m";
32
33#>> extra post includes here
34
35 ClassData,
36 Value : import jni;
37
38include "reflect/reflect.m";
39 refl : Reflect;
40
41#<<
42
43init( 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
53forName_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
70newInstance_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
86isInstance_rObject_Z( this : JClass, p0 : JObject) : int
87{#>>
88 return( jni->IsInstanceOf( p0, this.class ) );
89}#<<
90
91isAssignableFrom_rClass_Z( this : JClass, p0 : JClass) : int
92{#>>
93 return( jni->IsAssignable( p0, this ) );
94}#<<
95
96isInterface_Z( this : JClass) : int
97{#>>
98 return( this.class.flags & JNI->ACC_INTERFACE );
99}#<<
100
101isArray_Z( this : JClass) : int
102{#>>
103 return( this.class.name == "inferno/vm/Array" );
104}#<<
105
106isPrimitive_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
116getName_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
142getClassLoader_rClassLoader( this : JClass) : JObject
143{#>>
144 junk := (this);
145 jni->FatalError( "getClassLoader() not implemented" );
146 return(nil);
147}#<<
148
149getSuperclass_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
159getInterfaces_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
178getComponentType_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
198getModifiers_I( this : JClass) : int
199{#>>
200 return( this.class.flags & (~ JNI->ACC_SYNCHRONIZED));
201}#<<
202
203getSigners_aObject( this : JClass) : JArrayJObject
204{#>>
205 junk := (this);
206 jni->FatalError( "getSigners() not implemented" );
207 return(nil);
208}#<<
209
210setSigners_aObject_V( this : JClass, p0 : JArrayJObject)
211{#>>
212 junk := (this,p0);
213 jni->FatalError( "setSigners() not implemented" );
214}#<<
215
216getPrimitiveClass_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
226getFields0_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
247getMethods0_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
272getConstructors0_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
293getField0_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
336getMethod0_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
378getConstructor0_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
416getPublicStaticFields(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
430ifacelist: list of JClass;
431
432doInterfaces(this : JClass, objs : list of JObject) : list of JObject
433{
434 ifaces := this.class.interfaces;
435outer: 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
454getFields(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#
502getMethods(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#
536getConstructors(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#
552getReflect()
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#
571makeField(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#
605makeAMethod(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#
626makeMethod(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#
686makeParamClassArray(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#
703makeParamClass(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#
730MakeSignature(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#
743MakeSingleSignature(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#
761splitSignature(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
3Class_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 @@
1implement Double_L;
2
3# javal v1.3 generated file: edit with care
4
5include "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
29include "Double_L.m";
30
31#>> extra post includes here
32math : Math;
33#<<
34
35init( 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
44doubleToLongBits_D_J( p0 : real) : big
45{#>>
46 return( math->realbits64(p0) );
47}#<<
48
49longBitsToDouble_J_D( p0 : big) : real
50{#>>
51 return( math->bits64real( p0 ) );
52}#<<
53
54valueOf0_rString_D( p0 : JString) : real
55{#>>
56 return( real p0.str );
57}#<<
58
59mkstring_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
3Double_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
20package 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 */
30public
31class 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 @@
1implement Float_L;
2
3# javal v1.3 generated file: edit with care
4
5include "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
29include "Float_L.m";
30
31#>> extra post includes here
32math : Math;
33#<<
34
35init( 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
44floatToIntBits_F_I( p0 : real) : int
45{#>>
46 return( math->realbits32(p0) );
47}#<<
48
49intBitsToFloat_I_F( p0 : int) : real
50{#>>
51 return( math->bits32real(p0) );
52}#<<
53
54mkstring_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
3Float_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 @@
1implement InfernoProcess_L;
2
3# javal v1.3 generated file: edit with care
4
5include "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
27include "java/io/FileDescriptor_L.m";
28 FileDescriptor_obj : import FileDescriptor_L;
29
30#<<
31
32include "InfernoProcess_L.m";
33
34#>> extra post includes here
35
36include "sh.m";
37
38ioexception := "";
39
40#<<
41
42init( jni_p : JNI )
43{
44 # save java native inteface mod instance
45 jni = jni_p;
46 #>>extra initialization here
47 #<<
48}
49
50initProc_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
70waitFor_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
85destroy_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
97isTerminated_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
112exec(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
190exec1(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
3InfernoProcess_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 @@
1implement Math_L;
2
3# javal v1.2 generated file: edit with care
4
5include "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
28include "Math_L.m";
29
30#>> extra post includes here
31math : Math;
32#<<
33
34init( 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
43sin_D_D( p0 : real) : real
44{#>>
45 return( math->sin(p0) );
46}#<<
47
48cos_D_D( p0 : real) : real
49{#>>
50 return( math->cos(p0) );
51}#<<
52
53tan_D_D( p0 : real) : real
54{#>>
55 return( math->tan(p0) );
56}#<<
57
58asin_D_D( p0 : real) : real
59{#>>
60 return( math->asin(p0) );
61}#<<
62
63acos_D_D( p0 : real) : real
64{#>>
65 return( math->acos(p0) );
66}#<<
67
68atan_D_D( p0 : real) : real
69{#>>
70 return( math->atan(p0) );
71}#<<
72
73exp_D_D( p0 : real) : real
74{#>>
75 return( math->exp(p0) );
76}#<<
77
78log_D_D( p0 : real) : real
79{#>>
80 return( math->log(p0) );
81}#<<
82
83sqrt_D_D( p0 : real) : real
84{#>>
85 return( math->sqrt(p0) );
86}#<<
87
88IEEEremainder_D_D_D( p0 : real,p1 : real) : real
89{#>>
90 return( math->remainder(p0,p1) );
91}#<<
92
93ceil_D_D( p0 : real) : real
94{#>>
95 return( math->ceil(p0) );
96}#<<
97
98floor_D_D( p0 : real) : real
99{#>>
100 return( math->floor(p0) );
101}#<<
102
103rint_D_D( p0 : real) : real
104{#>>
105 return( math->rint(p0) );
106}#<<
107
108atan2_D_D_D( p0 : real,p1 : real) : real
109{#>>
110 return( math->atan2(p0,p1) );
111}#<<
112
113pow_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
3Math_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 @@
1implement Object_L;
2
3include "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
25include "Object_L.m";
26
27#>> extra post includes here
28
29#<<
30
31init( jni_p : JNI )
32{
33 # save java native inteface mod instance
34 jni = jni_p;
35 #>>extra initialization here
36 #<<
37}
38
39getClass_rClass( this : JObject) : JClass
40{#>>
41 return( jni->GetObjectClass(this) );
42}#<<
43
44hashCode_I( this : JObject ) : int
45{#>>
46 return( jni->IdentityHash( this ) );
47}#<<
48
49clone_rObject( this : JObject ) : JObject
50{#>>
51 return( jni->DupObject( this ) );
52}#<<
53
54notify_V( this : JObject )
55{#>>
56 jni->jldr->monitornotify( this, 0 );
57}#<<
58
59notifyAll_V( this : JObject )
60{#>>
61 jni->jldr->monitornotify( this, 1 );
62}#<<
63
64wait_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
3Object_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 @@
1implement Runtime_L;
2
3# javal v1.2 generated file: edit with care
4
5include "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
28include "Runtime_L.m";
29
30#>> extra post includes here
31
32#<<
33
34init( jni_p : JNI )
35{
36 # save java native inteface mod instance
37 jni = jni_p;
38 #>>extra initialization here
39 #<<
40}
41
42killgrp()
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
57exitInternal_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
66runFinalizersOnExit0_Z_V( p0 : int)
67{#>>
68 junk := (p0);
69}#<<
70
71freeMemory_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
105totalMemory_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
137gc_V( this : ref Runtime_obj)
138{#>>
139 # do nothing
140 junk := this;
141}#<<
142
143runFinalization_V( this : ref Runtime_obj)
144{#>>
145 # do nothing
146 junk := this;
147}#<<
148
149traceInstructions_Z_V( this : ref Runtime_obj, p0 : int)
150{#>>
151 # do nothing
152 return;
153 junk := (this,p0);
154}#<<
155
156traceMethodCalls_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
3Runtime_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 @@
1implement SecurityManager_L;
2
3# javal v1.2 generated file: edit with care
4
5include "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
28include "SecurityManager_L.m";
29
30#>> extra post includes here
31
32#<<
33
34init( jni_p : JNI )
35{
36 # save java native inteface mod instance
37 jni = jni_p;
38 #>>extra initialization here
39 #<<
40}
41
42getClassContext_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
54currentClassLoader_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
67classDepth_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
121classLoaderDepth_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
131currentLoadedClass0_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
144ReadCallStack( 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
165ExtendBuf( 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
3SecurityManager_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 @@
1implement StringBuffer_L;
2
3# javal v1.4 generated file: edit with care
4
5include "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
63include "StringBuffer_L.m";
64
65#>> extra post includes here
66Value : import jni;
67cast : Cast;
68
69#<<
70
71init( 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
80setLength0_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
95charAt0_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
101getChars0_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
115setCharAt0_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
121reverse0_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
130append_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
137append_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
144append_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
157append_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
169append_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
176append_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
186append_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
196insert_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
209insert_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
221insert_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
239insert_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
261insert_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
275insert_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
290insert_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
305get_string_rString( this : ref StringBuffer_obj) : JString
306{#>>
307 return( jni->NewString( this.Ivalue[:] ) ); #return a copy
308}#<<
309
310get_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
329writeObject0_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
342readObject0_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
5StringBuffer_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 @@
1implement String_L;
2
3# javal v1.6 generated file: edit with care
4
5include "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
29include "String_L.m";
30
31#>> extra post includes here
32include "hash.m";
33
34str : String;
35hash : 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#
45PSZ : con 31;
46pool := array[PSZ] of list of JString;
47
48PoolAdd( jstr : JString )
49{
50 idx := hash->fun1(jstr.str,PSZ);
51 pool[idx] = jstr :: pool[idx];
52}
53
54PoolGet( 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
71init( 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
83length_I( this : JString) : int
84{#>>
85 return( len this.str );
86}#<<
87
88charAt_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
95getChars_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
124equality_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
141compareTo_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
180regionMatches_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
215hashCode_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
237substring_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
249concat_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
262replace_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
288trim_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
318intern_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
327utfLength_I( this : JString) : int
328{#>>
329 b : array of byte;
330 b = array of byte this.str;
331 return( len b );
332}#<<
333
334fill_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
352isPrefix_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
369isSuffix_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
378uppercase_rString( this : JString) : JString
379{#>>
380 return( jni->NewString( str->toupper(this.str) ) );
381}#<<
382
383lowercase_rString( this : JString) : JString
384{#>>
385 return( jni->NewString( str->tolower(this.str) ) );
386}#<<
387
388index_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
429index_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
452rindex_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
491rindex_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
3String_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 @@
1implement System_L;
2
3# javal v1.2 generated file: edit with care
4
5include "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
28include "System_L.m";
29
30#>> extra post includes here
31include "workdir.m";
32
33cast : Cast;
34system_class : JNI->ClassData; # java.lang.System class data
35
36#<<
37
38init( 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
52setIn0_rInputStream_V( p0 : JObject)
53{#>>
54 Value : import JNI;
55 val := ref Value.TObject(p0);
56 jni->SetStaticField( system_class, "in", val );
57}#<<
58
59setOut0_rPrintStream_V( p0 : JObject)
60{#>>
61 Value : import JNI;
62 val := ref Value.TObject(p0);
63 jni->SetStaticField( system_class, "out", val );
64}#<<
65
66setErr0_rPrintStream_V( p0 : JObject)
67{#>>
68 Value : import JNI;
69 val := ref Value.TObject(p0);
70 jni->SetStaticField( system_class, "err", val );
71}#<<
72
73currentTimeMillis_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
86arraycopy_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
91identityHashCode_rObject_I( p0 : JObject) : int
92{#>>
93 return( jni->IdentityHash(p0) );
94}#<<
95
96GetUserName_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
119GetCWD_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
3System_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 @@
1implement Thread_L;
2
3# javal v1.3 generated file: edit with care
4
5include "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
29include "Thread_L.m";
30
31#>> extra post includes here
32
33sys : Sys;
34jldr : JavaClassLoader;
35cast : Cast;
36
37# following used for calling Thread.run()
38threadclass : JNI->ClassData; #class data for java.lang.Thread
39thread_run_idx : int; #method index for Thread.run()
40thread_exit_idx : int; #method index for Thread.exit()
41
42# some imports
43ThreadData : import jldr;
44
45#<<
46
47init( 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
72currentThread_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
97yield_V( )
98{#>>
99 jni->sys->sleep(0);
100}#<<
101
102sleep_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
121start_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
159isInterrupted_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
168isAlive_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
183countStackFrames_I( this : JThread) : int
184{#>>
185 junk := this;
186 # need to do some /prog work
187 return( 0 );
188}#<<
189
190setPriority0_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
197stop0_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
218suspend0_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
228resume0_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
237interrupt0_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
246lowinit_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#
293javathreadinit( 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#
375Run( 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#
411UncaughtException( 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
3Thread_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 @@
1implement Throwable_L;
2
3# javal v1.2 generated file: edit with care
4
5include "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
28include "Throwable_L.m";
29
30#>> extra post includes here
31
32#<<
33
34init( jni_p : JNI )
35{
36 # save java native inteface mod instance
37 jni = jni_p;
38 #>>extra initialization here
39 #<<
40}
41
42printStackTrace0_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
60fillInStackTrace_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
84ReadCallStack( 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
3Throwable_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
3DIRS=\
4 reflect\
5
6TARG=\
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
109MODULES=\
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
130SYSMODULES=\
131 draw.m\
132 hash.m\
133 keyring.m\
134 loader.m\
135 math.m\
136 string.m\
137 sys.m\
138
139DISBIN=$ROOT/java/dis/java/java/lang
140
141<$ROOT/mkfiles/mkjava
142<$ROOT/mkfiles/mksubdirs
143
144LIMBOINCL=\
145 $LIMBOINCL\
146 -I$ROOT/java/pkg\
147
148unicode_table.dis: unicode_table.b
149 limbo $LIMBOINCL -gw unicode_table.b
150
151NullSecurityManager.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 @@
1implement Array_L;
2
3# javal v1.5 generated file: edit with care
4
5include "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
34include "Array_L.m";
35
36#>> extra post includes here
37
38include "reflect.m";
39 refl : Reflect;
40 widen : import refl;
41
42array_class : ClassData;
43
44badindex := "java.lang.ArrayIndexOutOfBoundsException";
45illegalarg := "java.lang.IllegalArgumentException";
46nullptr := "java.lang.NullPointerException";
47
48 cast : Cast;
49
50#<<
51
52init( 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
70getLength_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
82get_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
107getBoolean_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
119getByte_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
126getChar_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
133getShort_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
140getInt_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
147getLong_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
154getFloat_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
161getDouble_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
168set_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
198setBoolean_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
207setByte_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
214setChar_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
221setShort_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
228setInt_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
235setLong_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
242setFloat_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
249setDouble_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
256newArray(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
287newArray_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
295multiNewArray_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#
316checksOK(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#
331getprim( 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#
353putprim( 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#
374GetArrayElement( 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#
404SetArrayElement( 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
3Array_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 @@
1implement Constructor_L;
2
3include "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
32include "Constructor_L.m";
33
34#>> extra post includes here
35
36illegalarg := "java.lang.IllegalArgumentException";
37nullptr := "java.lang.NullPointerException";
38
39include "reflect.m";
40 refl : Reflect;
41 widen : import refl;
42
43#<<
44
45init( 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
58getModifiers_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
66newInstance_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
3Constructor_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 @@
1implement Field_L;
2
3# javal v1.5 generated file: edit with care
4
5include "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
35include "Field_L.m";
36
37#>> extra post includes here
38
39include "reflect.m";
40 refl : Reflect;
41
42STATIC, NONSTATIC : con iota;
43
44illegalacc,
45illegalarg,
46nullptr : string;
47
48#<<
49
50init( 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
70getModifiers_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
78get_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
92getBoolean_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
103getByte_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
114getChar_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
125getShort_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
137getInt_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
151getLong_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
166getFloat_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
182getDouble_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
199set_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
232setBoolean_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
252setByte_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
271setChar_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
285setShort_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
303setInt_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
320setLong_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
336setFloat_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
351setDouble_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
367getChecks( 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
391putChecks( 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
420checkMemberAccess(which : int)
421{
422 return;
423}
424
425SetField(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
441widen(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#
452GetStat(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#
461GetField(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
3Field_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 @@
1implement Method_L;
2
3include "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
32include "Method_L.m";
33
34#>> extra post includes here
35
36illegalarg := "java.lang.IllegalArgumentException";
37nullptr := "java.lang.NullPointerException";
38
39include "reflect.m";
40 refl : Reflect;
41 widen : import refl;
42
43#<<
44
45init( 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
58getModifiers_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
66invoke_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
3Method_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
3TARG=\
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
19MODULES=\
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
29SYSMODULES=\
30 draw.m\
31 hash.m\
32 keyring.m\
33 loader.m\
34 math.m\
35 string.m\
36 sys.m\
37
38DISBIN=$ROOT/java/dis/java/java/lang/reflect
39
40<$ROOT/mkfiles/mkjava
41
42reflect.dis: reflect.b
43 limbo $LIMBOINCL -gw reflect.b
44
45esaAWjdsByqq9cEPQZTRT.dis: InvocationTargetException.class
46 j2d InvocationTargetException.class
java/pkg2/java/lang/reflect/reflect.b+327−0
@@ -0,0 +1,327 @@
1implement Reflect;
2
3include "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
28include "reflect.m";
29
30wrapper_class := array[T_LONG-T_BOOLEAN+1] of ClassData;
31wrapper_name := array[] of { "Boolean",
32 "Character",
33 "Float",
34 "Double",
35 "Byte",
36 "Short",
37 "Integer",
38 "Long" };
39type_string := "ZCFDBSIJ";
40
41illegalarg := "java.lang.IllegalArgumentException";
42nullptr := "java.lang.NullPointerException";
43
44init(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
51widen(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}
136BuildArgList(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#
192Class(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#
201ClassObject(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#
209GetPrimitiveClass(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#
219GetVal(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#
233SigToType(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#
261TypeToSig(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#
270TypeCharToName(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#
299ValType(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#
317ValueToObject(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 @@
1Reflect : 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 @@
1implement UnicodeTable;
2
3include "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
46X = 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
179Y = 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
1160A = 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 @@
1UnicodeTable : 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};