137 private static boolean first =
false;
160 static private void SetupTmpl() {
164 System.loadLibrary(
"jvmkkernel");
169 static ThreadLocal<StackTraceElement> stack_t =
new ThreadLocal<>();
172 static void getCallerStack() {
174 StackTraceElement[] stack_tl = Thread.currentThread().getStackTrace();
175 if (stack_tl.length > 2) {
176 String mark = stack_tl[2].getMethodName();
177 for (stack_il=3; stack_il<stack_tl.length; stack_il++) {
178 if (stack_tl[stack_il].getMethodName() != mark)
break;
181 stack_il = stack_tl.length-1;
183 stack_t.set(stack_tl[stack_il]);
187 static String getCallerProc() {
188 var mn = stack_t.get().getMethodName();
189 return (mn ==
"Callback" ? stack_t.get().getClassName() : mn);
193 static String getCallerFile() {
194 return stack_t.get().getFileName();
198 static int getCallerLine() {
199 return stack_t.get().getLineNumber();
272 private static class SpaceBuffer {
273 private StringBuffer val =
null;
274 private Deque<Integer> stack =
null;
276 public SpaceBuffer (String sp) {
277 val =
new StringBuffer(sp);
278 stack =
new ArrayDeque<Integer>();
281 public SpaceBuffer push (String space) {
282 stack.push(val.length());
288 val.delete(stack.pop(),val.length());
291 public String toString() {
292 return val.toString();
297 System.err.println(
dump(o,
new SpaceBuffer(
"")));
299 public static String
dump(Object o) {
300 return dump(o,
new SpaceBuffer(
""));
303 private static String
dump(Object o, SpaceBuffer sp) {
304 StringBuffer buffer =
new StringBuffer();
306 buffer.append(sp.toString() +
"NULL");
308 Class<?> oClass = o.getClass();
309 if (oClass.isArray()) {
310 buffer.append(sp.toString() +
"Array: ");
312 for (
int i = 0; i < Array.getLength(o); i++) {
313 Object value = Array.get(o, i);
314 if (value.getClass().isPrimitive() ||
315 value.getClass() == java.lang.Long.class ||
316 value.getClass() == java.lang.Integer.class ||
317 value.getClass() == java.lang.Boolean.class ||
318 value.getClass() == java.lang.String.class ||
319 value.getClass() == java.lang.Double.class ||
320 value.getClass() == java.lang.Short.class ||
321 value.getClass() == java.lang.Byte.class
323 buffer.append(value);
324 if(i != (Array.getLength(o)-1)) buffer.append(
",");
326 buffer.append(
dump(value));
329 buffer.append(
"]\n");
331 buffer.append(sp.toString() +
"Class: " + oClass.getName());
332 buffer.append(
" {\n");
334 while (oClass !=
null) {
335 Field[] fields = oClass.getDeclaredFields();
336 for (
int i = 0; i < fields.length; i++) {
337 fields[i].setAccessible(
true);
338 buffer.append(sp.toString() + fields[i].getName());
341 Object value = fields[i].get(o);
343 if (value.getClass().isPrimitive() ||
344 value.getClass() == java.lang.Long.class ||
345 value.getClass() == java.lang.String.class ||
346 value.getClass() == java.lang.Integer.class ||
347 value.getClass() == java.lang.Boolean.class ||
348 value.getClass() == java.lang.Double.class ||
349 value.getClass() == java.lang.Short.class ||
350 value.getClass() == java.lang.Byte.class
352 buffer.append(value);
354 buffer.append(
dump(value, sp));
357 }
catch (IllegalAccessException e) {
358 buffer.append(e.getMessage());
362 oClass = oClass.getSuperclass();
365 buffer.append(
"}\n");
368 return buffer.toString();