*** empty log message ***

This commit is contained in:
hyung-hwan 2007-01-24 14:21:30 +00:00
parent 6525f98cda
commit 99bb5ee025
5 changed files with 115 additions and 83 deletions

View File

@ -1,5 +1,5 @@
/* /*
* $Id: Awk.java,v 1.20 2007-01-24 11:54:15 bacon Exp $ * $Id: Awk.java,v 1.21 2007-01-24 14:21:29 bacon Exp $
*/ */
package ase.awk; package ase.awk;
@ -57,8 +57,9 @@ public abstract class Awk
} }
/* == just in case == */ /* == just in case == */
protected void finalize () protected void finalize () throws Throwable
{ {
super.finalize ();
if (handle != 0) close (); if (handle != 0) close ();
} }
@ -69,7 +70,7 @@ public abstract class Awk
public native void run () throws Exception; public native void run () throws Exception;
private native int getmaxdepth (int id); private native int getmaxdepth (int id);
private native int setmaxdepth (int id, int depth); private native void setmaxdepth (int id, int depth);
private native void addbfn ( private native void addbfn (
String name, int min_args, int max_args) throws Exception; String name, int min_args, int max_args) throws Exception;
@ -80,7 +81,8 @@ public abstract class Awk
private native void setofilename ( private native void setofilename (
long runid, String name) throws Exception; long runid, String name) throws Exception;
private native Object strtonum (long runid, String str); private native Object strtonum (
long runid, String str) throws Exception;
private native String valtostr (long runid, Object obj); private native String valtostr (long runid, Object obj);
/* == builtin functions == */ /* == builtin functions == */
@ -95,7 +97,8 @@ public abstract class Awk
delbfn (name); delbfn (name);
} }
protected long builtinFunctionArgumentToLong (long runid, Object obj) protected long builtinFunctionArgumentToLong (
long runid, Object obj) throws Exception
{ {
long n; long n;
@ -131,7 +134,8 @@ public abstract class Awk
return n; return n;
} }
protected double builtinFunctionArgumentToDouble (long runid, Object obj) protected double builtinFunctionArgumentToDouble (
long runid, Object obj) throws Exception
{ {
double n; double n;
@ -167,7 +171,8 @@ public abstract class Awk
return n; return n;
} }
protected String builtinFunctionArgumentToString (long runid, Object obj) protected String builtinFunctionArgumentToString (
long runid, Object obj) throws Exception
{ {
String str; String str;
@ -179,7 +184,8 @@ public abstract class Awk
} }
/* == console name setters == */ /* == console name setters == */
protected void setConsoleInputName (Extio extio, String name) throws Exception protected void setConsoleInputName (
Extio extio, String name) throws Exception
{ {
/* TODO: setfilename is not safe. for example, it can /* TODO: setfilename is not safe. for example, it can
* crash the program if runid is invalid. so this wrapper * crash the program if runid is invalid. so this wrapper
@ -187,7 +193,8 @@ public abstract class Awk
setfilename (extio.getRunId(), name); setfilename (extio.getRunId(), name);
} }
protected void setConsoleOutputName (Extio extio, String name) throws Exception protected void setConsoleOutputName (
Extio extio, String name) throws Exception
{ {
setofilename (extio.getRunId(), name); setofilename (extio.getRunId(), name);
} }

View File

@ -62,8 +62,8 @@ public class Extio
return this.handle; return this.handle;
} }
protected void finalize () protected void finalize () throws Throwable
{ {
System.out.println ("Extio being finalized...."); super.finalize ();
} }
}; };

View File

@ -1,5 +1,5 @@
/* /*
* $Id: StdAwk.java,v 1.11 2007-01-23 14:23:18 bacon Exp $ * $Id: StdAwk.java,v 1.12 2007-01-24 14:21:29 bacon Exp $
*/ */
package ase.awk; package ase.awk;
@ -707,44 +707,44 @@ public abstract class StdAwk extends Awk
/* == arithmetic built-in functions */ /* == arithmetic built-in functions */
public Object sin (long runid, Object[] args) public Object sin (long runid, Object[] args) throws Exception
{ {
double x = builtinFunctionArgumentToDouble (runid, args[0]); double x = builtinFunctionArgumentToDouble (runid, args[0]);
return new Double (Math.sin(x)); return new Double (Math.sin(x));
} }
public Object cos (long runid, Object[] args) public Object cos (long runid, Object[] args) throws Exception
{ {
double x = builtinFunctionArgumentToDouble (runid, args[0]); double x = builtinFunctionArgumentToDouble (runid, args[0]);
return new Double (Math.cos(x)); return new Double (Math.cos(x));
} }
public Object tan (long runid, Object[] args) public Object tan (long runid, Object[] args) throws Exception
{ {
double x = builtinFunctionArgumentToDouble (runid, args[0]); double x = builtinFunctionArgumentToDouble (runid, args[0]);
return new Double (Math.tan(x)); return new Double (Math.tan(x));
} }
public Object atan2 (long runid, Object[] args) public Object atan2 (long runid, Object[] args) throws Exception
{ {
double y = builtinFunctionArgumentToDouble (runid, args[0]); double y = builtinFunctionArgumentToDouble (runid, args[0]);
double x = builtinFunctionArgumentToDouble (runid, args[1]); double x = builtinFunctionArgumentToDouble (runid, args[1]);
return new Double (Math.atan2(y,x)); return new Double (Math.atan2(y,x));
} }
public Object log (long runid, Object[] args) public Object log (long runid, Object[] args) throws Exception
{ {
double x = builtinFunctionArgumentToDouble (runid, args[0]); double x = builtinFunctionArgumentToDouble (runid, args[0]);
return new Double (Math.log(x)); return new Double (Math.log(x));
} }
public Object exp (long runid, Object[] args) public Object exp (long runid, Object[] args) throws Exception
{ {
double x = builtinFunctionArgumentToDouble (runid, args[0]); double x = builtinFunctionArgumentToDouble (runid, args[0]);
return new Double (Math.exp(x)); return new Double (Math.exp(x));
} }
public Object sqrt (long runid, Object[] args) public Object sqrt (long runid, Object[] args) throws Exception
{ {
double x = builtinFunctionArgumentToDouble (runid, args[0]); double x = builtinFunctionArgumentToDouble (runid, args[0]);
return new Double (Math.sqrt(x)); return new Double (Math.sqrt(x));
@ -755,7 +755,7 @@ public abstract class StdAwk extends Awk
return new Double (random.nextDouble ()); return new Double (random.nextDouble ());
} }
public Object srand (long runid, Object[] args) public Object srand (long runid, Object[] args) throws Exception
{ {
long prev_seed = seed; long prev_seed = seed;
@ -768,7 +768,7 @@ public abstract class StdAwk extends Awk
} }
/* miscellaneous built-in functions */ /* miscellaneous built-in functions */
public Object system (long runid, Object[] args) public Object system (long runid, Object[] args) throws Exception
{ {
String str = builtinFunctionArgumentToString (runid, args[0]); String str = builtinFunctionArgumentToString (runid, args[0]);
Process proc = null; Process proc = null;

View File

@ -1,5 +1,5 @@
/* /*
* $Id: jni.c,v 1.52 2007-01-24 11:54:16 bacon Exp $ * $Id: jni.c,v 1.53 2007-01-24 14:21:29 bacon Exp $
*/ */
#include <stdio.h> #include <stdio.h>
@ -13,7 +13,6 @@
#include <ase/awk/jni.h> #include <ase/awk/jni.h>
#include <ase/awk/awk.h> #include <ase/awk/awk.h>
#include <ase/awk/val.h> #include <ase/awk/val.h>
//#include <ase/awk/awk_i.h>
#include "../etc/printf.c" #include "../etc/printf.c"
@ -204,10 +203,13 @@ static void throw_exception (
{ {
(*env)->DeleteLocalRef (env, except_class); (*env)->DeleteLocalRef (env, except_class);
except_class = (*env)->FindClass (env, CLASS_OUTOFMEMORYERROR); except_class = (*env)->FindClass (
env, CLASS_OUTOFMEMORYERROR);
if (except_class == NULL) return; if (except_class == NULL) return;
(*env)->ThrowNew (env, except_class, "out of memory"); (*env)->ThrowNew (
env, except_class,
ase_awk_geterrstr(ASE_AWK_ENOMEM));
(*env)->DeleteLocalRef (env, except_class); (*env)->DeleteLocalRef (env, except_class);
return; return;
} }
@ -291,11 +293,9 @@ JNIEXPORT void JNICALL Java_ase_awk_Awk_open (JNIEnv* env, jobject obj)
(*env)->DeleteLocalRef (env, class); (*env)->DeleteLocalRef (env, class);
if (handle == NULL) if (handle == NULL)
{ {
throw_exception ( /* internal error. no handle field
env, * NoSuchFieldError, ExceptionInitializerError,
ASE_T("no handle field found"), * OutOfMemoryError might occur */
ASE_AWK_EINTERN,
0);
return; return;
} }
@ -318,7 +318,9 @@ JNIEXPORT void JNICALL Java_ase_awk_Awk_close (JNIEnv* env, jobject obj)
(*env)->DeleteLocalRef (env, class); (*env)->DeleteLocalRef (env, class);
if (handle == NULL) if (handle == NULL)
{ {
/* internal error. no handle field */ /* internal error. no handle field
* NoSuchFieldError, ExceptionInitializerError,
* OutOfMemoryError might occur */
return; return;
} }
@ -345,11 +347,9 @@ JNIEXPORT void JNICALL Java_ase_awk_Awk_parse (JNIEnv* env, jobject obj)
(*env)->DeleteLocalRef (env, class); (*env)->DeleteLocalRef (env, class);
if (handle == NULL) if (handle == NULL)
{ {
throw_exception ( /* internal error. no handle field
env, * NoSuchFieldError, ExceptionInitializerError,
ASE_T("no handle field found"), * OutOfMemoryError might occur */
ASE_AWK_EINTERN,
0);
return; return;
} }
@ -397,11 +397,9 @@ JNIEXPORT void JNICALL Java_ase_awk_Awk_run (JNIEnv* env, jobject obj)
(*env)->DeleteLocalRef (env, class); (*env)->DeleteLocalRef (env, class);
if (handle == 0) if (handle == 0)
{ {
throw_exception ( /* internal error. no handle field
env, * NoSuchFieldError, ExceptionInitializerError,
ASE_T("no handle field found"), * OutOfMemoryError might occur */
ASE_AWK_EINTERN,
0);
return; return;
} }
@ -627,8 +625,7 @@ static ase_ssize_t __java_write_source (
thrown = (*env)->ExceptionOccurred (env); thrown = (*env)->ExceptionOccurred (env);
if (thrown) if (thrown)
{ {
/* TODO: remove the following line */ if (awk->debug) (*env)->ExceptionDescribe (env);
(*env)->ExceptionDescribe (env);
(*env)->ExceptionClear (env); (*env)->ExceptionClear (env);
ret = -1; ret = -1;
} }
@ -863,7 +860,6 @@ static ase_ssize_t __java_flush_extio (
{ {
jclass class; jclass class;
jmethodID mid; jmethodID mid;
jthrowable thrown;
jint ret; jint ret;
class = (*env)->GetObjectClass(env, obj); class = (*env)->GetObjectClass(env, obj);
@ -875,10 +871,9 @@ static ase_ssize_t __java_flush_extio (
} }
ret = (*env)->CallIntMethod (env, obj, mid, extio->handle); ret = (*env)->CallIntMethod (env, obj, mid, extio->handle);
thrown = (*env)->ExceptionOccurred (env); if ((*env)->ExceptionOccurred (env))
if (thrown)
{ {
(*env)->ExceptionDescribe (env); if (awk->debug) (*env)->ExceptionDescribe (env);
(*env)->ExceptionClear (env); (*env)->ExceptionClear (env);
ret = -1; ret = -1;
} }
@ -891,7 +886,6 @@ static ase_ssize_t __java_next_extio (
{ {
jclass class; jclass class;
jmethodID mid; jmethodID mid;
jthrowable thrown;
jint ret; jint ret;
class = (*env)->GetObjectClass(env, obj); class = (*env)->GetObjectClass(env, obj);
@ -903,10 +897,9 @@ static ase_ssize_t __java_next_extio (
} }
ret = (*env)->CallIntMethod (env, obj, mid, extio->handle); ret = (*env)->CallIntMethod (env, obj, mid, extio->handle);
thrown = (*env)->ExceptionOccurred (env); if ((*env)->ExceptionOccurred (env))
if (thrown)
{ {
(*env)->ExceptionDescribe (env); if (awk->debug) (*env)->ExceptionDescribe (env);
(*env)->ExceptionClear (env); (*env)->ExceptionClear (env);
ret = -1; ret = -1;
} }
@ -1055,9 +1048,7 @@ static int __handle_bfn (
if (name == NULL) if (name == NULL)
{ {
if ((*env)->ExceptionOccurred (env)) (*env)->ExceptionClear (env);
(*env)->ExceptionClear (env);
ase_awk_setrunerror (run, ASE_AWK_ENOMEM, 0, msg_nomem); ase_awk_setrunerror (run, ASE_AWK_ENOMEM, 0, msg_nomem);
return -1; return -1;
} }
@ -1080,8 +1071,7 @@ static int __handle_bfn (
{ {
/* if the method is not found, the exception is thrown. /* if the method is not found, the exception is thrown.
* so clear it to prevent it from being thrown */ * so clear it to prevent it from being thrown */
if ((*env)->ExceptionOccurred (env)) (*env)->ExceptionClear (env);
(*env)->ExceptionClear (env);
ase_awk_setrunerrnum (run, ASE_AWK_EBFNUSER); ase_awk_setrunerrnum (run, ASE_AWK_EBFNUSER);
return -1; return -1;
} }
@ -1168,6 +1158,8 @@ static int __handle_bfn (
ret = (*env)->CallObjectMethod (env, obj, method, (jlong)run, args); ret = (*env)->CallObjectMethod (env, obj, method, (jlong)run, args);
if ((*env)->ExceptionOccurred (env)) if ((*env)->ExceptionOccurred (env))
{ {
if (awk->debug) (*env)->ExceptionDescribe (env);
(*env)->ExceptionClear (env); (*env)->ExceptionClear (env);
(*env)->DeleteLocalRef (env, args); (*env)->DeleteLocalRef (env, args);
ase_awk_setrunerrnum (run, ASE_AWK_EBFNIMPL); ase_awk_setrunerrnum (run, ASE_AWK_EBFNIMPL);
@ -1332,11 +1324,9 @@ JNIEXPORT void JNICALL Java_ase_awk_Awk_addbfn (
(*env)->DeleteLocalRef (env, class); (*env)->DeleteLocalRef (env, class);
if (handle == NULL) if (handle == NULL)
{ {
throw_exception ( /* internal error. no handle field
env, * NoSuchFieldError, ExceptionInitializerError,
ASE_T("no handle field found"), * OutOfMemoryError might occur */
ASE_AWK_EINTERN,
0);
return; return;
} }
@ -1346,8 +1336,12 @@ JNIEXPORT void JNICALL Java_ase_awk_Awk_addbfn (
ptr = (*env)->GetStringChars (env, name, JNI_FALSE); ptr = (*env)->GetStringChars (env, name, JNI_FALSE);
if (ptr == NULL) if (ptr == NULL)
{ {
if ((*env)->ExceptionOccurred (env)) (*env)->ExceptionClear (env); (*env)->ExceptionClear (env);
throw_exception (env, ASE_T("out of memory"), ASE_AWK_ENOMEM, 0); throw_exception (
env,
ase_awk_geterrstr(ASE_AWK_ENOMEM),
ASE_AWK_ENOMEM,
0);
return; return;
} }
@ -1359,7 +1353,11 @@ JNIEXPORT void JNICALL Java_ase_awk_Awk_addbfn (
if (tmp == ASE_NULL) if (tmp == ASE_NULL)
{ {
(*env)->ReleaseStringChars (env, name, ptr); (*env)->ReleaseStringChars (env, name, ptr);
throw_exception (env, ASE_T("out of memory"), ASE_AWK_ENOMEM, 0); throw_exception (
env,
ase_awk_geterrstr(ASE_AWK_ENOMEM),
ASE_AWK_ENOMEM,
0);
return; return;
} }
@ -1403,11 +1401,9 @@ JNIEXPORT void JNICALL Java_ase_awk_Awk_delbfn (
(*env)->DeleteLocalRef (env, class); (*env)->DeleteLocalRef (env, class);
if (handle == NULL) if (handle == NULL)
{ {
throw_exception ( /* internal error. no handle field
env, * NoSuchFieldError, ExceptionInitializerError,
ASE_T("no handle field found"), * OutOfMemoryError might occur */
ASE_AWK_EINTERN,
0);
return; return;
} }
@ -1417,8 +1413,12 @@ JNIEXPORT void JNICALL Java_ase_awk_Awk_delbfn (
ptr = (*env)->GetStringChars (env, name, JNI_FALSE); ptr = (*env)->GetStringChars (env, name, JNI_FALSE);
if (ptr == NULL) if (ptr == NULL)
{ {
if ((*env)->ExceptionOccurred (env)) (*env)->ExceptionClear (env); (*env)->ExceptionClear (env);
throw_exception (env, ASE_T("out of memory"), ASE_AWK_ENOMEM, 0); throw_exception (
env,
ase_awk_geterrstr(ASE_AWK_ENOMEM),
ASE_AWK_ENOMEM,
0);
return; return;
} }
@ -1430,7 +1430,11 @@ JNIEXPORT void JNICALL Java_ase_awk_Awk_delbfn (
if (tmp == ASE_NULL) if (tmp == ASE_NULL)
{ {
(*env)->ReleaseStringChars (env, name, ptr); (*env)->ReleaseStringChars (env, name, ptr);
throw_exception (env, ASE_T("out of memory"), ASE_AWK_ENOMEM, 0); throw_exception (
env,
ase_awk_geterrstr(ASE_AWK_ENOMEM),
ASE_AWK_ENOMEM,
0);
return; return;
} }
@ -1481,7 +1485,13 @@ JNIEXPORT void JNICALL Java_ase_awk_Awk_setmaxdepth (
class = (*env)->GetObjectClass(env, obj); class = (*env)->GetObjectClass(env, obj);
handle = (*env)->GetFieldID (env, class, FIELD_HANDLE, "J"); handle = (*env)->GetFieldID (env, class, FIELD_HANDLE, "J");
(*env)->DeleteLocalRef (env, class); (*env)->DeleteLocalRef (env, class);
if (handle == NULL) return; /* should never happen */ if (handle == NULL)
{
/* internal error. no handle field
* NoSuchFieldError, ExceptionInitializerError,
* OutOfMemoryError might occur */
return;
}
awk = (ase_awk_t*) (*env)->GetLongField (env, obj, handle); awk = (ase_awk_t*) (*env)->GetLongField (env, obj, handle);
ase_awk_setmaxdepth (awk, ids, depth); ase_awk_setmaxdepth (awk, ids, depth);
@ -1499,10 +1509,11 @@ JNIEXPORT void JNICALL Java_ase_awk_Awk_setfilename (
ptr = (*env)->GetStringChars (env, name, JNI_FALSE); ptr = (*env)->GetStringChars (env, name, JNI_FALSE);
if (ptr == NULL) if (ptr == NULL)
{ {
(*env)->ExceptionClear (env);
throw_exception ( throw_exception (
env, env,
ASE_T("out of memory"), ase_awk_geterrstr(ASE_AWK_ENOMEM),
ASE_AWK_ENOMEM, ASE_AWK_ENOMEM,
0); 0);
return; return;
} }
@ -1518,7 +1529,7 @@ JNIEXPORT void JNICALL Java_ase_awk_Awk_setfilename (
throw_exception ( throw_exception (
env, env,
ASE_T("out of memory"), ase_awk_geterrstr(ASE_AWK_ENOMEM),
ASE_AWK_ENOMEM, ASE_AWK_ENOMEM,
0); 0);
return; return;
@ -1557,9 +1568,10 @@ JNIEXPORT void JNICALL Java_ase_awk_Awk_setofilename (
ptr = (*env)->GetStringChars (env, name, JNI_FALSE); ptr = (*env)->GetStringChars (env, name, JNI_FALSE);
if (ptr == NULL) if (ptr == NULL)
{ {
(*env)->ExceptionClear (env);
throw_exception ( throw_exception (
env, env,
ASE_T("out of memory"), ase_awk_geterrstr(ASE_AWK_ENOMEM),
ASE_AWK_ENOMEM, ASE_AWK_ENOMEM,
0); 0);
return; return;
@ -1576,7 +1588,7 @@ JNIEXPORT void JNICALL Java_ase_awk_Awk_setofilename (
throw_exception ( throw_exception (
env, env,
ASE_T("out of memory"), ase_awk_geterrstr(ASE_AWK_ENOMEM),
ASE_AWK_ENOMEM, ASE_AWK_ENOMEM,
0); 0);
return; return;
@ -1616,7 +1628,16 @@ JNIEXPORT jobject JNICALL Java_ase_awk_Awk_strtonum (
len = (*env)->GetStringLength (env, str); len = (*env)->GetStringLength (env, str);
ptr = (*env)->GetStringChars (env, str, JNI_FALSE); ptr = (*env)->GetStringChars (env, str, JNI_FALSE);
if (ptr == NULL) return NULL; if (ptr == NULL)
{
(*env)->ExceptionClear (env);
throw_exception (
env,
ase_awk_geterrstr(ASE_AWK_ENOMEM),
ASE_AWK_ENOMEM,
0);
return NULL;
}
if (ASE_SIZEOF(jchar) != ASE_SIZEOF(ase_char_t)) if (ASE_SIZEOF(jchar) != ASE_SIZEOF(ase_char_t))
{ {
@ -1626,8 +1647,12 @@ JNIEXPORT jobject JNICALL Java_ase_awk_Awk_strtonum (
if (tmp == ASE_NULL) if (tmp == ASE_NULL)
{ {
(*env)->ReleaseStringChars (env, str, ptr); (*env)->ReleaseStringChars (env, str, ptr);
ase_awk_setrunerrnum ((ase_awk_run_t*)runid, ASE_AWK_ENOMEM); throw_exception (
return -1; env,
ase_awk_geterrstr(ASE_AWK_ENOMEM),
ASE_AWK_ENOMEM,
0);
return NULL;
} }
for (i = 0; i < len; i++) tmp[i] = (ase_char_t)ptr[i]; for (i = 0; i < len; i++) tmp[i] = (ase_char_t)ptr[i];

View File

@ -1,5 +1,5 @@
/* /*
* $Id: Awk.java,v 1.20 2007-01-23 14:23:18 bacon Exp $ * $Id: Awk.java,v 1.21 2007-01-24 14:21:30 bacon Exp $
*/ */
package ase.test.awk; package ase.test.awk;
@ -26,7 +26,7 @@ public class Awk extends ase.awk.StdAwk
public Object xxx (long runid, Object[] args) public Object xxx (long runid, Object[] args)
{ {
System.out.println ("<<BFN_SIN>>"); System.out.println ("<<BFN_XXX>>");
for (int i = 0; i < args.length; i++) for (int i = 0; i < args.length; i++)
{ {
System.out.print ("ARG #" + i); System.out.print ("ARG #" + i);