*** empty log message ***

This commit is contained in:
hyung-hwan 2006-11-23 14:27:52 +00:00
parent 899e913665
commit 0098186950
8 changed files with 84 additions and 57 deletions

View File

@ -1,5 +1,5 @@
/* /*
* $Id: awk.h,v 1.149 2006-11-23 03:31:35 bacon Exp $ * $Id: awk.h,v 1.150 2006-11-23 14:27:51 bacon Exp $
*/ */
#ifndef _ASE_AWK_AWK_H_ #ifndef _ASE_AWK_AWK_H_
@ -190,10 +190,10 @@ enum
ASE_AWK_STRIPSPACES = (1 << 12), ASE_AWK_STRIPSPACES = (1 << 12),
/* enable the nextoutfile keyword */ /* enable the nextoutfile keyword */
ASE_AWK_NEXTOUTFILE = (1 << 13), ASE_AWK_NEXTOFILE = (1 << 13),
/* a newline terminates a statement */ /* a newline terminates a statement */
ASE_AWK_NEWLINE = (1 << 14) ASE_AWK_NEWLINE = (1 << 14)
}; };
/* error code */ /* error code */

View File

@ -1,5 +1,5 @@
/* /*
* $Id: extio.c,v 1.63 2006-11-23 03:31:35 bacon Exp $ * $Id: extio.c,v 1.64 2006-11-23 14:27:51 bacon Exp $
*/ */
#include <ase/awk/awk_i.h> #include <ase/awk/awk_i.h>
@ -283,6 +283,7 @@ int ase_awk_readextio (
* terminator of the previous line */ * terminator of the previous line */
/* TODO: handle different line terminator like \r\n */ /* TODO: handle different line terminator like \r\n */
ASE_AWK_STR_LEN(buf) -= 1; ASE_AWK_STR_LEN(buf) -= 1;
break; break;
} }
} }

View File

@ -1,5 +1,5 @@
/* /*
* $Id: jni.c,v 1.21 2006-11-23 03:31:36 bacon Exp $ * $Id: jni.c,v 1.22 2006-11-23 14:27:51 bacon Exp $
*/ */
#include <ase/awk/jni.h> #include <ase/awk/jni.h>
@ -197,7 +197,7 @@ JNIEXPORT void JNICALL Java_ase_awk_Awk_open (JNIEnv* env, jobject obj)
opt = ASE_AWK_EXPLICIT | ASE_AWK_UNIQUE | ASE_AWK_DBLSLASHES | opt = ASE_AWK_EXPLICIT | ASE_AWK_UNIQUE | ASE_AWK_DBLSLASHES |
ASE_AWK_SHADING | ASE_AWK_IMPLICIT | ASE_AWK_SHIFT | ASE_AWK_SHADING | ASE_AWK_IMPLICIT | ASE_AWK_SHIFT |
ASE_AWK_EXTIO | ASE_AWK_BLOCKLESS | ASE_AWK_HASHSIGN | ASE_AWK_EXTIO | ASE_AWK_BLOCKLESS | ASE_AWK_HASHSIGN |
ASE_AWK_NEXTOUTFILE; ASE_AWK_NEXTOFILE;
ase_awk_setopt (awk, opt); ase_awk_setopt (awk, opt);
printf ("__awk(native) done => %u, 0x%X\n", awk, awk); printf ("__awk(native) done => %u, 0x%X\n", awk, awk);

View File

@ -1,5 +1,5 @@
/* /*
* $Id: parse.c,v 1.205 2006-11-23 03:31:36 bacon Exp $ * $Id: parse.c,v 1.206 2006-11-23 14:27:51 bacon Exp $
*/ */
#include <ase/awk/awk_i.h> #include <ase/awk/awk_i.h>
@ -79,7 +79,7 @@ enum
TOKEN_NEXT, TOKEN_NEXT,
TOKEN_NEXTFILE, TOKEN_NEXTFILE,
TOKEN_NEXTINFILE, TOKEN_NEXTINFILE,
TOKEN_NEXTOUTFILE, TOKEN_NEXTOFILE,
TOKEN_DELETE, TOKEN_DELETE,
TOKEN_PRINT, TOKEN_PRINT,
TOKEN_PRINTF, TOKEN_PRINTF,
@ -128,7 +128,7 @@ static ase_awk_t* __parse_progunit (ase_awk_t* awk);
static ase_awk_t* __collect_globals (ase_awk_t* awk); static ase_awk_t* __collect_globals (ase_awk_t* awk);
static ase_awk_t* __add_builtin_globals (ase_awk_t* awk); static ase_awk_t* __add_builtin_globals (ase_awk_t* awk);
static ase_awk_t* __add_global ( static ase_awk_t* __add_global (
ase_awk_t* awk, const ase_char_t* name, ase_size_t name_len); ase_awk_t* awk, const ase_char_t* name, ase_size_t len, int force);
static ase_awk_t* __collect_locals (ase_awk_t* awk, ase_size_t nlocals); static ase_awk_t* __collect_locals (ase_awk_t* awk, ase_size_t nlocals);
static ase_awk_nde_t* __parse_function (ase_awk_t* awk); static ase_awk_nde_t* __parse_function (ase_awk_t* awk);
@ -245,7 +245,7 @@ static struct __kwent __kwtab[] =
{ ASE_T("exit"), 4, TOKEN_EXIT, 0 }, { ASE_T("exit"), 4, TOKEN_EXIT, 0 },
{ ASE_T("next"), 4, TOKEN_NEXT, 0 }, { ASE_T("next"), 4, TOKEN_NEXT, 0 },
{ ASE_T("nextfile"), 8, TOKEN_NEXTFILE, 0 }, { ASE_T("nextfile"), 8, TOKEN_NEXTFILE, 0 },
{ ASE_T("nextoutfile"), 11, TOKEN_NEXTOUTFILE, ASE_AWK_NEXTOUTFILE }, { ASE_T("nextofile"), 9, TOKEN_NEXTOFILE, ASE_AWK_NEXTOFILE },
{ ASE_T("delete"), 6, TOKEN_DELETE, 0 }, { ASE_T("delete"), 6, TOKEN_DELETE, 0 },
{ ASE_T("print"), 5, TOKEN_PRINT, ASE_AWK_EXTIO }, { ASE_T("print"), 5, TOKEN_PRINT, ASE_AWK_EXTIO },
{ ASE_T("printf"), 6, TOKEN_PRINTF, ASE_AWK_EXTIO }, { ASE_T("printf"), 6, TOKEN_PRINTF, ASE_AWK_EXTIO },
@ -265,26 +265,25 @@ struct __bvent
static struct __bvent __bvtab[] = static struct __bvent __bvtab[] =
{ {
{ ASE_T("ARGC"), 4, 0 }, { ASE_T("ARGC"), 4, 0 },
{ ASE_T("ARGV"), 4, 0 }, { ASE_T("ARGV"), 4, 0 },
{ ASE_T("CONVFMT"), 7, 0 }, { ASE_T("CONVFMT"), 7, 0 },
{ ASE_T("ENVIRON"), 7, 0 }, { ASE_T("ENVIRON"), 7, 0 },
{ ASE_T("ERRNO"), 5, 0 }, { ASE_T("ERRNO"), 5, 0 },
{ ASE_T("FILENAME"), 8, 0 }, { ASE_T("FILENAME"), 8, 0 },
{ ASE_T("FNR"), 3, 0 }, { ASE_T("FNR"), 3, 0 },
{ ASE_T("FS"), 2, 0 }, { ASE_T("FS"), 2, 0 },
{ ASE_T("IGNORECASE"), 10, 0 }, { ASE_T("IGNORECASE"), 10, 0 },
{ ASE_T("NF"), 2, 0 }, { ASE_T("NF"), 2, 0 },
{ ASE_T("NR"), 2, 0 }, { ASE_T("NR"), 2, 0 },
{ ASE_T("OFMT"), 4, 0 }, { ASE_T("OFMT"), 4, 0 },
{ ASE_T("OFS"), 3, 0 }, { ASE_T("OFS"), 3, 0 },
{ ASE_T("ORS"), 3, 0 }, { ASE_T("ORS"), 3, 0 },
{ ASE_T("RS"), 2, 0 }, { ASE_T("RLENGTH"), 7, 0 },
{ ASE_T("RT"), 2, 0 }, { ASE_T("RS"), 2, 0 },
{ ASE_T("RSTART"), 6, 0 }, { ASE_T("RSTART"), 6, 0 },
{ ASE_T("RLENGTH"), 7, 0 }, { ASE_T("SUBSEP"), 6, 0 },
{ ASE_T("SUBSEP"), 6, 0 }, { ASE_NULL, 0, 0 }
{ ASE_NULL, 0, 0 }
}; };
#define GET_CHAR(awk) \ #define GET_CHAR(awk) \
@ -1009,12 +1008,26 @@ and merged to top-level block */
static ase_awk_t* __add_builtin_globals (ase_awk_t* awk) static ase_awk_t* __add_builtin_globals (ase_awk_t* awk)
{ {
struct __bvent* p = __bvtab; struct __bvent* p = __bvtab;
ase_awk_t* tmp;
awk->tree.nbglobals = 0; awk->tree.nbglobals = 0;
while (p->name != ASE_NULL) while (p->name != ASE_NULL)
{ {
if (__add_global (awk,
p->name, p->name_len) == ASE_NULL) return ASE_NULL; if (p->valid != 0 && (awk->option & p->valid) == 0)
{
/* an invalid global variable are still added
* to the global variable table with an empty name.
* this is to prevent the run-time from looking up
* the variable */
tmp =__add_global (awk, ASE_T(""), 0, 1);
}
else
{
tmp =__add_global (awk, p->name, p->name_len, 0);
}
if (tmp == ASE_NULL) return ASE_NULL;
awk->tree.nbglobals++; awk->tree.nbglobals++;
p++; p++;
} }
@ -1023,21 +1036,26 @@ static ase_awk_t* __add_builtin_globals (ase_awk_t* awk)
} }
static ase_awk_t* __add_global ( static ase_awk_t* __add_global (
ase_awk_t* awk, const ase_char_t* name, ase_size_t len) ase_awk_t* awk, const ase_char_t* name, ase_size_t len, int force)
{ {
if (awk->option & ASE_AWK_UNIQUE) if (!force)
{ {
/* check if it conflict with a function name */ if (awk->option & ASE_AWK_UNIQUE)
if (ase_awk_map_get(&awk->tree.afns, name, len) != ASE_NULL)
{ {
PANIC (awk, ASE_AWK_EDUPNAME); /* check if it conflict with a function name */
if (ase_awk_map_get (
&awk->tree.afns, name, len) != ASE_NULL)
{
PANIC (awk, ASE_AWK_EDUPNAME);
}
} }
}
/* check if it conflicts with other global variable names */ /* check if it conflicts with other global variable names */
if (ase_awk_tab_find (&awk->parse.globals, 0, name, len) != (ase_size_t)-1) if (ase_awk_tab_find (
{ &awk->parse.globals, 0, name, len) != (ase_size_t)-1)
PANIC (awk, ASE_AWK_EDUPVAR); {
PANIC (awk, ASE_AWK_EDUPVAR);
}
} }
if (ase_awk_tab_getsize(&awk->parse.globals) >= ASE_AWK_MAX_GLOBALS) if (ase_awk_tab_getsize(&awk->parse.globals) >= ASE_AWK_MAX_GLOBALS)
@ -1062,9 +1080,11 @@ static ase_awk_t* __collect_globals (ase_awk_t* awk)
PANIC (awk, ASE_AWK_EIDENT); PANIC (awk, ASE_AWK_EIDENT);
} }
if (__add_global (awk, if (__add_global (
awk,
ASE_AWK_STR_BUF(&awk->token.name), ASE_AWK_STR_BUF(&awk->token.name),
ASE_AWK_STR_LEN(&awk->token.name)) == ASE_NULL) return ASE_NULL; ASE_AWK_STR_LEN(&awk->token.name),
0) == ASE_NULL) return ASE_NULL;
if (__get_token(awk) == -1) return ASE_NULL; if (__get_token(awk) == -1) return ASE_NULL;
@ -1261,7 +1281,7 @@ awk->parse.nl_semicolon = 1;
if (__get_token(awk) == -1) return ASE_NULL; if (__get_token(awk) == -1) return ASE_NULL;
nde = __parse_nextfile (awk, 0); nde = __parse_nextfile (awk, 0);
} }
else if (MATCH(awk,TOKEN_NEXTOUTFILE)) else if (MATCH(awk,TOKEN_NEXTOFILE))
{ {
if (__get_token(awk) == -1) return ASE_NULL; if (__get_token(awk) == -1) return ASE_NULL;
nde = __parse_nextfile (awk, 1); nde = __parse_nextfile (awk, 1);

View File

@ -1,5 +1,5 @@
/* /*
* $Id: run.c,v 1.282 2006-11-23 03:45:06 bacon Exp $ * $Id: run.c,v 1.283 2006-11-23 14:27:51 bacon Exp $
*/ */
#include <ase/awk/awk_i.h> #include <ase/awk/awk_i.h>
@ -2049,7 +2049,6 @@ static int __run_nextoutfile (ase_awk_run_t* run)
return 0; return 0;
} }
/* TODO: update_ofnr */
return 0; return 0;
} }

View File

@ -1,5 +1,5 @@
/* /*
* $Id: run.h,v 1.26 2006-11-19 11:55:17 bacon Exp $ * $Id: run.h,v 1.27 2006-11-23 14:27:52 bacon Exp $
*/ */
#ifndef _ASE_AWK_RUN_H_ #ifndef _ASE_AWK_RUN_H_
@ -93,10 +93,9 @@ enum ase_awk_global_id_t
ASE_AWK_GLOBAL_OFMT, ASE_AWK_GLOBAL_OFMT,
ASE_AWK_GLOBAL_OFS, ASE_AWK_GLOBAL_OFS,
ASE_AWK_GLOBAL_ORS, ASE_AWK_GLOBAL_ORS,
ASE_AWK_GLOBAL_RS,
ASE_AWK_GLOBAL_RT,
ASE_AWK_GLOBAL_RSTART,
ASE_AWK_GLOBAL_RLENGTH, ASE_AWK_GLOBAL_RLENGTH,
ASE_AWK_GLOBAL_RS,
ASE_AWK_GLOBAL_RSTART,
ASE_AWK_GLOBAL_SUBSEP ASE_AWK_GLOBAL_SUBSEP
}; };

View File

@ -1,5 +1,5 @@
/* /*
* $Id: val.c,v 1.92 2006-11-22 06:05:45 bacon Exp $ * $Id: val.c,v 1.93 2006-11-23 14:27:52 bacon Exp $
*/ */
#include <ase/awk/awk_i.h> #include <ase/awk/awk_i.h>
@ -15,10 +15,13 @@ static ase_char_t* __val_real_to_str (
int opt, ase_awk_str_t* buf, ase_size_t* len); int opt, ase_awk_str_t* buf, ase_size_t* len);
static ase_awk_val_nil_t __awk_nil = { ASE_AWK_VAL_NIL, 0 }; static ase_awk_val_nil_t __awk_nil = { ASE_AWK_VAL_NIL, 0 };
ase_awk_val_t* ase_awk_val_nil = (ase_awk_val_t*)&__awk_nil;
static ase_awk_val_str_t __awk_zls = { ASE_AWK_VAL_STR, 0, ASE_T(""), 0 }; static ase_awk_val_str_t __awk_zls = { ASE_AWK_VAL_STR, 0, ASE_T(""), 0 };
/* TODO: consider different line ending schemes */
static ase_awk_val_str_t __awk_nl = { ASE_AWK_VAL_STR, 0, ASE_T("\n"), 1 };
ase_awk_val_t* ase_awk_val_nil = (ase_awk_val_t*)&__awk_nil;
ase_awk_val_t* ase_awk_val_zls = (ase_awk_val_t*)&__awk_zls; ase_awk_val_t* ase_awk_val_zls = (ase_awk_val_t*)&__awk_zls;
ase_awk_val_t* ase_awk_val_nl = (ase_awk_val_t*)&__awk_nl;
static ase_awk_val_int_t __awk_int[] = static ase_awk_val_int_t __awk_int[] =
{ {
@ -249,8 +252,11 @@ ase_awk_val_t* ase_awk_makerefval (ase_awk_run_t* run, int id, ase_awk_val_t** a
ase_bool_t ase_awk_isbuiltinval (ase_awk_val_t* val) ase_bool_t ase_awk_isbuiltinval (ase_awk_val_t* val)
{ {
return val == ASE_NULL || return val == ASE_NULL ||
val == ase_awk_val_nil || val == ase_awk_val_zls || val == ase_awk_val_nil ||
val == ase_awk_val_zero || val == ase_awk_val_one || val == ase_awk_val_zls ||
val == ase_awk_val_nl ||
val == ase_awk_val_zero ||
val == ase_awk_val_one ||
(val >= (ase_awk_val_t*)&__awk_int[0] && (val >= (ase_awk_val_t*)&__awk_int[0] &&
val <= (ase_awk_val_t*)&__awk_int[ase_countof(__awk_int)-1]); val <= (ase_awk_val_t*)&__awk_int[ase_countof(__awk_int)-1]);
} }

View File

@ -1,5 +1,5 @@
/* /*
* $Id: val.h,v 1.52 2006-11-19 11:55:17 bacon Exp $ * $Id: val.h,v 1.53 2006-11-23 14:27:52 bacon Exp $
*/ */
#ifndef _ASE_AWK_VAL_H_ #ifndef _ASE_AWK_VAL_H_
@ -137,6 +137,8 @@ extern "C" {
extern ase_awk_val_t* ase_awk_val_nil; extern ase_awk_val_t* ase_awk_val_nil;
extern ase_awk_val_t* ase_awk_val_zls; extern ase_awk_val_t* ase_awk_val_zls;
extern ase_awk_val_t* ase_awk_val_nl;
extern ase_awk_val_t* ase_awk_val_bnl;
extern ase_awk_val_t* ase_awk_val_zero; extern ase_awk_val_t* ase_awk_val_zero;
extern ase_awk_val_t* ase_awk_val_one; extern ase_awk_val_t* ase_awk_val_one;