From 07b451aedb334f1abfaef2c94b5848f8943e812c Mon Sep 17 00:00:00 2001 From: hyung-hwan Date: Sun, 29 Jun 2008 03:38:00 +0000 Subject: [PATCH] --- ase/cmd/awk/awk.c | 2 +- ase/include/ase/awk/awk.h | 16 +++++++++++++--- ase/include/ase/lsp/lsp.h | 11 +++++++++++ ase/lib/awk/Awk.cpp | 6 ++++-- ase/lib/awk/awk.c | 21 +++++++++++++-------- ase/lib/awk/awk_i.h | 4 ++-- ase/lib/awk/jni.c | 14 ++++++++------ ase/lib/lsp/lsp.c | 13 ++++++++++++- ase/lib/lsp/lsp_i.h | 4 +++- 9 files changed, 67 insertions(+), 24 deletions(-) diff --git a/ase/cmd/awk/awk.c b/ase/cmd/awk/awk.c index ff78870f..392b5b5b 100644 --- a/ase/cmd/awk/awk.c +++ b/ase/cmd/awk/awk.c @@ -1153,7 +1153,7 @@ static int awk_main (int argc, ase_char_t* argv[]) prmfns.misc.dprintf = custom_awk_dprintf; prmfns.misc.custom_data = NULL; - awk = ase_awk_open(&prmfns, ASE_NULL); + awk = ase_awk_open(&prmfns); if (awk == ASE_NULL) { #ifdef _WIN32 diff --git a/ase/include/ase/awk/awk.h b/ase/include/ase/awk/awk.h index b3704426..5aeae8ef 100644 --- a/ase/include/ase/awk/awk.h +++ b/ase/include/ase/awk/awk.h @@ -1,5 +1,5 @@ /* - * $Id: awk.h 223 2008-06-26 06:44:41Z baconevi $ + * $Id: awk.h 232 2008-06-28 09:38:00Z baconevi $ * * {License} */ @@ -458,12 +458,22 @@ enum ase_awk_global_id_t extern "C" { #endif -ase_awk_t* ase_awk_open (const ase_awk_prmfns_t* prmfns, void* custom_data); +ase_awk_t* ase_awk_open (const ase_awk_prmfns_t* prmfns); int ase_awk_close (ase_awk_t* awk); int ase_awk_clear (ase_awk_t* awk); +/** + * @function ase_awk_setassocdata + * @brief ssociats the user-specified data with an interpreter + */ +void ase_awk_setassocdata (ase_awk_t* awk, void* data); +/** + * @function ase_awk_getassocdata + * @brief returns the user-specified data associated with an interpreter + */ +void* ase_awk_getassocdata (ase_awk_t* awk); + ase_mmgr_t* ase_awk_getmmgr (ase_awk_t* awk); -void* ase_awk_getcustomdata (ase_awk_t* awk); const ase_char_t* ase_awk_geterrstr (ase_awk_t* awk, int num); int ase_awk_seterrstr (ase_awk_t* awk, int num, const ase_char_t* str); diff --git a/ase/include/ase/lsp/lsp.h b/ase/include/ase/lsp/lsp.h index 67838c7e..6f6b888b 100644 --- a/ase/include/ase/lsp/lsp.h +++ b/ase/include/ase/lsp/lsp.h @@ -94,6 +94,17 @@ ase_lsp_t* ase_lsp_open ( void ase_lsp_close (ase_lsp_t* lsp); +/** + * @function ase_lsp_setassocdata + * @brief ssociats the user-specified data with an interpreter + */ +void ase_lsp_setassocdata (ase_lsp_t* lsp, void* data); +/** + * @function ase_lsp_getassocdata + * @brief returns the user-specified data associated with an interpreter + */ +void* ase_lsp_getassocdata (ase_lsp_t* lsp); + void ase_lsp_geterror ( ase_lsp_t* lsp, int* errnum, const ase_char_t** errmsg); diff --git a/ase/lib/awk/Awk.cpp b/ase/lib/awk/Awk.cpp index c5a81bb7..00d784a1 100644 --- a/ase/lib/awk/Awk.cpp +++ b/ase/lib/awk/Awk.cpp @@ -1,5 +1,5 @@ /* - * $Id: Awk.cpp 129 2008-03-13 05:45:36Z baconevi $ + * $Id: Awk.cpp 232 2008-06-28 09:38:00Z baconevi $ * * {License} */ @@ -1158,13 +1158,15 @@ int Awk::open () prmfns.misc.dprintf = dprintf; prmfns.misc.custom_data = this; - awk = ase_awk_open (&prmfns, this); + awk = ase_awk_open (&prmfns); if (awk == ASE_NULL) { setError (ERR_NOMEM); return -1; } + ase_awk_setassocdata (awk, this); + functionMap = ase_map_open ( this, 512, 70, freeFunctionMapValue, ASE_NULL, ase_awk_getmmgr(awk)); diff --git a/ase/lib/awk/awk.c b/ase/lib/awk/awk.c index 19396796..5a34065e 100644 --- a/ase/lib/awk/awk.c +++ b/ase/lib/awk/awk.c @@ -1,5 +1,5 @@ /* - * $Id: awk.c 197 2008-06-09 06:24:10Z baconevi $ + * $Id: awk.c 232 2008-06-28 09:38:00Z baconevi $ * * {License} */ @@ -24,7 +24,7 @@ static void free_bfn (void* awk, void* afn); ase_awk_seterror ((awk), (code), (line), &errarg, 1); \ } while (0) -ase_awk_t* ase_awk_open (const ase_awk_prmfns_t* prmfns, void* custom_data) +ase_awk_t* ase_awk_open (const ase_awk_prmfns_t* prmfns) { ase_awk_t* awk; @@ -224,7 +224,7 @@ ase_awk_t* ase_awk_open (const ase_awk_prmfns_t* prmfns, void* custom_data) ase_awk_setmaxdepth (awk, ASE_AWK_DEPTH_REX_BUILD, 0); ase_awk_setmaxdepth (awk, ASE_AWK_DEPTH_REX_MATCH, 0); - awk->custom_data = custom_data; + awk->assoc_data = ASE_NULL; if (ase_awk_initglobals (awk) == -1) { @@ -375,6 +375,16 @@ int ase_awk_clear (ase_awk_t* awk) return 0; } +void ase_awk_setassocdata (ase_awk_t* awk, void* data) +{ + awk->assoc_data = data; +} + +void* ase_awk_getassocdata (ase_awk_t* awk) +{ + return awk->assoc_data; +} + int ase_awk_getoption (ase_awk_t* awk) { return awk->option; @@ -390,11 +400,6 @@ ase_mmgr_t* ase_awk_getmmgr (ase_awk_t* awk) return &awk->prmfns.mmgr; } -void* ase_awk_getcustomdata (ase_awk_t* awk) -{ - return awk->custom_data; -} - void ase_awk_stopall (ase_awk_t* awk) { awk->stopall = ASE_TRUE; diff --git a/ase/lib/awk/awk_i.h b/ase/lib/awk/awk_i.h index 670d8854..a015dba7 100644 --- a/ase/lib/awk/awk_i.h +++ b/ase/lib/awk/awk_i.h @@ -1,5 +1,5 @@ /* - * $Id: awk_i.h 192 2008-06-06 10:33:44Z baconevi $ + * $Id: awk_i.h 232 2008-06-28 09:38:00Z baconevi $ * * {License} */ @@ -75,7 +75,7 @@ struct ase_awk_tree_t struct ase_awk_t { ase_awk_prmfns_t prmfns; - void* custom_data; + void* assoc_data; /* options */ int option; diff --git a/ase/lib/awk/jni.c b/ase/lib/awk/jni.c index 787a48ce..8de52e2d 100644 --- a/ase/lib/awk/jni.c +++ b/ase/lib/awk/jni.c @@ -1,5 +1,5 @@ /* - * $Id: jni.c 115 2008-03-03 11:13:15Z baconevi $ + * $Id: jni.c 232 2008-06-28 09:38:00Z baconevi $ * * {License} */ @@ -407,7 +407,7 @@ static void throw_exception ( static jboolean is_debug (ase_awk_t* awk) { - awk_data_t* awk_data = (awk_data_t*)ase_awk_getcustomdata (awk); + awk_data_t* awk_data = (awk_data_t*)ase_awk_getassocdata (awk); return awk_data->debug? JNI_TRUE: JNI_FALSE; } @@ -490,7 +490,7 @@ JNIEXPORT void JNICALL Java_ase_awk_Awk_open (JNIEnv* env, jobject obj) awk_data->heap = heap; #endif - awk = ase_awk_open (&prmfns, awk_data); + awk = ase_awk_open (&prmfns); if (awk == ASE_NULL) { #if defined(_WIN32) && defined(__DMC__) @@ -503,6 +503,8 @@ JNIEXPORT void JNICALL Java_ase_awk_Awk_open (JNIEnv* env, jobject obj) return; } + ase_awk_setassocdata (awk, awk_data); + class = (*env)->GetObjectClass(env, obj); handle = (*env)->GetFieldID (env, class, FIELD_AWKID, "J"); (*env)->DeleteLocalRef (env, class); @@ -551,7 +553,7 @@ JNIEXPORT void JNICALL Java_ase_awk_Awk_close (JNIEnv* env, jobject obj, jlong a OutputDebugStringW (L"<<>>\n"); #endif - tmp = (awk_data_t*)ase_awk_getcustomdata (awk); + tmp = (awk_data_t*)ase_awk_getassocdata (awk); #if defined(_WIN32) && defined(__DMC__) HANDLE heap = tmp->heap; #endif @@ -1938,7 +1940,7 @@ JNIEXPORT jboolean JNICALL Java_ase_awk_Awk_getdebug (JNIEnv* env, jobject obj, { ase_awk_t* awk = (ase_awk_t*)awkid; EXCEPTION_ON_ASE_NULL_AWK_RETURNING (env, awk, JNI_FALSE); - return ((awk_data_t*)ase_awk_getcustomdata(awk))->debug? JNI_TRUE: JNI_FALSE; + return ((awk_data_t*)ase_awk_getassocdata(awk))->debug? JNI_TRUE: JNI_FALSE; } JNIEXPORT void JNICALL Java_ase_awk_Awk_setdebug ( @@ -1946,7 +1948,7 @@ JNIEXPORT void JNICALL Java_ase_awk_Awk_setdebug ( { ase_awk_t* awk = (ase_awk_t*)awkid; EXCEPTION_ON_ASE_NULL_AWK (env, awk); - ((awk_data_t*)ase_awk_getcustomdata(awk))->debug = debug; + ((awk_data_t*)ase_awk_getassocdata(awk))->debug = debug; } JNIEXPORT jstring JNICALL Java_ase_awk_Awk_getword ( diff --git a/ase/lib/lsp/lsp.c b/ase/lib/lsp/lsp.c index 2370ddfb..15e17bf4 100644 --- a/ase/lib/lsp/lsp.c +++ b/ase/lib/lsp/lsp.c @@ -1,5 +1,5 @@ /* - * $Id: lsp.c 215 2008-06-19 10:27:37Z baconevi $ + * $Id: lsp.c 232 2008-06-28 09:38:00Z baconevi $ * * {License} */ @@ -54,6 +54,7 @@ ase_lsp_t* ase_lsp_open ( * fully initialized yet */ ase_memset (lsp, 0, ASE_SIZEOF(ase_lsp_t)); ase_memcpy (&lsp->prmfns, prmfns, ASE_SIZEOF(lsp->prmfns)); + lsp->assoc_data = ASE_NULL; if (ase_lsp_name_open(&lsp->token.name, 0, lsp) == ASE_NULL) { @@ -101,6 +102,16 @@ void ase_lsp_close (ase_lsp_t* lsp) ASE_LSP_FREE (lsp, lsp); } +void ase_lsp_setassocdata (ase_lsp_t* lsp, void* data) +{ + lsp->assoc_data = data; +} + +void* ase_lsp_getassocdata (ase_lsp_t* lsp) +{ + return lsp->assoc_data; +} + int ase_lsp_attinput (ase_lsp_t* lsp, ase_lsp_io_t input, void* arg) { if (ase_lsp_detinput(lsp) == -1) return -1; diff --git a/ase/lib/lsp/lsp_i.h b/ase/lib/lsp/lsp_i.h index 401081a7..a0efa1ba 100644 --- a/ase/lib/lsp/lsp_i.h +++ b/ase/lib/lsp/lsp_i.h @@ -1,5 +1,5 @@ /* - * $Id: lsp_i.h 215 2008-06-19 10:27:37Z baconevi $ + * $Id: lsp_i.h 232 2008-06-28 09:38:00Z baconevi $ * * {License} */ @@ -43,6 +43,8 @@ struct ase_lsp_t { ase_lsp_prmfns_t prmfns; + /* user-specified data */ + void* assoc_data; /* error */ int errnum;