History

Copied and fixed Throwable class native module.

Dmitry Kabak (userdima committed 13 years ago

Commit a5ec5c31 parent 3b7c6ec2 files · +111 −0Browse files

Showing the changes to java (2 of 2 files). Show all

Unified · Split

2 files
  1. java/pkg/java/lang/Throwable_L.b +95 −0
  2. java/pkg/java/lang/Throwable_L.m +16 −0
java/pkg/java/lang/Throwable_L.b+95−0
@@ -0,0 +1,95 @@
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 [1] of ref Value;
51 args[0] = ref Value.TObject( jni->NewStringObject( string this.backtrace ) );
52
53 (nil,nil):=jni->CallMethod( p0, "println", "(Ljava/lang/String;)V", args );
54 # ignore any erros
55 }
56
57}#<<
58
59fillInStackTrace_rThrowable( this : ref Throwable_obj) : ref Throwable_obj
60{#>>
61 # attempt to open the local "prog" device (i.e. '#p')
62 # and read the call stack into an array of bytes
63 pid := jni->sys->pctl(0,nil);
64 progfile := "#p/"+ (string pid) +"/stack";
65 fd := jni->sys->open( progfile, Sys->OREAD );
66 if ( fd != nil )
67 {
68 # must spin a thread to read my own call-stack
69 result := chan of array of byte; # channel for thd results
70 spawn ReadCallStack( fd, result );
71 this.backtrace = <- result; # wait for results
72
73 }
74 else
75 this.backtrace = array of byte jni->sys->sprint("could not open %s:%r\n", progfile );
76
77 return( this );
78}#<<
79
80####### private functions
81
82
83ReadCallStack( fd : ref Sys->FD, result : chan of array of byte )
84{
85 buf := array[8000] of byte; #about 10 frames
86 n := jni->sys->read(fd, buf, len buf - 1);
87 fd = nil;
88 if(n < 0)
89 buf = array of byte jni->sys->sprint("could not read call-stack:%r\n");
90 else
91 buf[n] = byte 0;
92
93 result <- = buf[:n+1];
94}
95
java/pkg/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};