touched up code

This commit is contained in:
hyung-hwan 2009-05-23 19:21:10 +00:00
parent f7d8234c21
commit 9fb84cf713
5 changed files with 75 additions and 50 deletions

View File

@ -59,7 +59,7 @@ protected:
/** /**
* The reallocMem() function resizes a chunk of memory previously * The reallocMem() function resizes a chunk of memory previously
* allocated with the allocMem() function. When resized, the contents * allocated with the allocMem() function. When resized, the contents
* of a surviving memory chunk is left untouched. If it fails to * of the surviving part of a memory chunk is preserved. If it fails to
* resize memory, it should return QSE_NULL. * resize memory, it should return QSE_NULL.
*/ */
virtual void* reallocMem ( virtual void* reallocMem (

View File

@ -170,14 +170,6 @@ int qse_sed_getoption (qse_sed_t* sed)
return sed->option; return sed->option;
} }
/* get the current charanter of the source code */
#define CURSC(sed) \
(((sed)->src.cur < (sed)->src.end)? (*(sed)->src.cur): QSE_CHAR_EOF)
/* advance the current pointer of the source code */
#define ADVSCP(sed) ((sed)->src.cur++)
#define NXTSC(sed) \
(((++(sed)->src.cur) < (sed)->src.end)? (*(sed)->src.cur): QSE_CHAR_EOF)
/* check if c is a space character */ /* check if c is a space character */
#define IS_SPACE(c) (c == QSE_T(' ') || c == QSE_T('\t')) #define IS_SPACE(c) (c == QSE_T(' ') || c == QSE_T('\t'))
#define IS_LINTERM(c) (c == QSE_T('\n') || c == QSE_T('\r')) #define IS_LINTERM(c) (c == QSE_T('\n') || c == QSE_T('\r'))
@ -188,6 +180,22 @@ int qse_sed_getoption (qse_sed_t* sed)
(c == QSE_CHAR_EOF || c == QSE_T('#') || \ (c == QSE_CHAR_EOF || c == QSE_T('#') || \
c == QSE_T(';') || IS_LINTERM(c)) c == QSE_T(';') || IS_LINTERM(c))
#define CURSC(sed) ((sed)->src.cc)
#define NXTSC(sed) getnextsc(sed)
static qse_cint_t getnextsc (qse_sed_t* sed)
{
if (++sed->src.cur < sed->src.end)
{
sed->src.cc = *(sed)->src.cur;
/* TODO: support different line end convension */
if (sed->src.cc == QSE_T('\n')) sed->src.lnum++;
}
else sed->src.cc = QSE_CHAR_EOF;
return sed->src.cc;
}
static void free_address (qse_sed_t* sed, qse_sed_cmd_t* cmd) static void free_address (qse_sed_t* sed, qse_sed_cmd_t* cmd)
{ {
if (cmd->a2.type == QSE_SED_ADR_REX) if (cmd->a2.type == QSE_SED_ADR_REX)
@ -262,7 +270,10 @@ static void* compile_rex (qse_sed_t* sed, qse_char_t rxend)
c = NXTSC (sed); c = NXTSC (sed);
if (c == QSE_CHAR_EOF || c == QSE_T('\n')) if (c == QSE_CHAR_EOF || c == QSE_T('\n'))
{ {
SETERR1 (sed, QSE_SED_EREXIC, 0, qse_size_t lnum = sed->src.lnum;
if (c == QSE_T('\n')) lnum--;
SETERR1 (
sed, QSE_SED_EREXIC, lnum,
QSE_STR_PTR(&sed->rexbuf), QSE_STR_PTR(&sed->rexbuf),
QSE_STR_LEN(&sed->rexbuf) QSE_STR_LEN(&sed->rexbuf)
); );
@ -273,11 +284,13 @@ static void* compile_rex (qse_sed_t* sed, qse_char_t rxend)
if (c == QSE_T('\\')) if (c == QSE_T('\\'))
{ {
ADVSCP (sed); c = NXTSC (sed);
c = CURSC (sed);
if (c == QSE_CHAR_EOF || c == QSE_T('\n')) if (c == QSE_CHAR_EOF || c == QSE_T('\n'))
{ {
SETERR1 (sed, QSE_SED_EREXIC, 0, qse_size_t lnum = sed->src.lnum;
if (c == QSE_T('\n')) lnum--;
SETERR1 (
sed, QSE_SED_EREXIC, lnum,
QSE_STR_PTR(&sed->rexbuf), QSE_STR_PTR(&sed->rexbuf),
QSE_STR_LEN(&sed->rexbuf) QSE_STR_LEN(&sed->rexbuf)
); );
@ -304,7 +317,8 @@ static void* compile_rex (qse_sed_t* sed, qse_char_t rxend)
); );
if (code == QSE_NULL) if (code == QSE_NULL)
{ {
SETERR1 (sed, QSE_SED_EREXBL, 0, SETERR1 (
sed, QSE_SED_EREXBL, sed->src.lnum,
QSE_STR_PTR(&sed->rexbuf), QSE_STR_PTR(&sed->rexbuf),
QSE_STR_LEN(&sed->rexbuf) QSE_STR_LEN(&sed->rexbuf)
); );
@ -322,14 +336,14 @@ static qse_sed_adr_t* get_address (qse_sed_t* sed, qse_sed_adr_t* a)
if (c == QSE_T('$')) if (c == QSE_T('$'))
{ {
a->type = QSE_SED_ADR_DOL; a->type = QSE_SED_ADR_DOL;
ADVSCP (sed); NXTSC (sed);
} }
else if (c == QSE_T('/')) else if (c == QSE_T('/'))
{ {
a->u.rex = compile_rex (sed, c); a->u.rex = compile_rex (sed, c);
if (a->u.rex == QSE_NULL) return QSE_NULL; if (a->u.rex == QSE_NULL) return QSE_NULL;
a->type = QSE_SED_ADR_REX; a->type = QSE_SED_ADR_REX;
ADVSCP (sed); NXTSC (sed);
} }
else if (c >= QSE_T('0') && c <= QSE_T('9')) else if (c >= QSE_T('0') && c <= QSE_T('9'))
{ {
@ -337,7 +351,7 @@ static qse_sed_adr_t* get_address (qse_sed_t* sed, qse_sed_adr_t* a)
do do
{ {
lno = lno * 10 + c - QSE_T('0'); lno = lno * 10 + c - QSE_T('0');
ADVSCP (sed); NXTSC (sed);
} }
while ((c = CURSC(sed)) >= QSE_T('0') && c <= QSE_T('9')); while ((c = CURSC(sed)) >= QSE_T('0') && c <= QSE_T('9'));
@ -352,14 +366,16 @@ static qse_sed_adr_t* get_address (qse_sed_t* sed, qse_sed_adr_t* a)
c = NXTSC (sed); c = NXTSC (sed);
if (c == QSE_CHAR_EOF || c == QSE_T('\n')) if (c == QSE_CHAR_EOF || c == QSE_T('\n'))
{ {
SETERR1 (sed, QSE_SED_EREXIC, 0, QSE_T(""), 0); qse_size_t lnum = sed->src.lnum;
if (c == QSE_T('\n')) lnum--;
SETERR1 (sed, QSE_SED_EREXIC, lnum, QSE_T(""), 0);
return QSE_NULL; return QSE_NULL;
} }
a->u.rex = compile_rex (sed, c); a->u.rex = compile_rex (sed, c);
if (a->u.rex == QSE_NULL) return QSE_NULL; if (a->u.rex == QSE_NULL) return QSE_NULL;
a->type = QSE_SED_ADR_REX; a->type = QSE_SED_ADR_REX;
ADVSCP (sed); NXTSC (sed);
} }
else else
{ {
@ -424,7 +440,7 @@ do { \
if (c == QSE_T('\n')) if (c == QSE_T('\n'))
{ {
ADVSCP (sed); NXTSC (sed);
if (nl) goto done; if (nl) goto done;
break; break;
} }
@ -506,7 +522,7 @@ static int get_label (qse_sed_t* sed, qse_sed_cmd_t* cmd)
/* the label can be followed by a command on the same line without /* the label can be followed by a command on the same line without
* a semicolon as in ':label p'. */ * a semicolon as in ':label p'. */
if (c != QSE_T('#') && c != QSE_CHAR_EOF) ADVSCP (sed); if (c != QSE_T('#') && c != QSE_CHAR_EOF) NXTSC (sed);
qse_str_close (t); qse_str_close (t);
return 0; return 0;
@ -530,7 +546,7 @@ static int terminate_command (qse_sed_t* sed)
/* if the target is terminated by #, it should let the caller /* if the target is terminated by #, it should let the caller
* to skip the comment e.txt. so don't read in the next character */ * to skip the comment e.txt. so don't read in the next character */
if (c != QSE_T('#') && c != QSE_CHAR_EOF) ADVSCP (sed); if (c != QSE_T('#') && c != QSE_CHAR_EOF) NXTSC (sed);
return 0; return 0;
} }
@ -796,7 +812,7 @@ static int get_subst (qse_sed_t* sed, qse_sed_cmd_t* cmd)
} }
else if (c == QSE_T('w')) else if (c == QSE_T('w'))
{ {
ADVSCP (sed); NXTSC (sed);
if (get_file (sed, &cmd->u.subst.file) <= -1) return -1; if (get_file (sed, &cmd->u.subst.file) <= -1) return -1;
break; break;
} }
@ -818,7 +834,8 @@ static int get_subst (qse_sed_t* sed, qse_sed_cmd_t* cmd)
); );
if (cmd->u.subst.rex == QSE_NULL) if (cmd->u.subst.rex == QSE_NULL)
{ {
SETERR1 (sed, QSE_SED_EREXBL, 0, SETERR1 (
sed, QSE_SED_EREXBL, sed->src.lnum,
QSE_STR_PTR(t[0]), QSE_STR_PTR(t[0]),
QSE_STR_LEN(t[0]) QSE_STR_LEN(t[0])
); );
@ -940,7 +957,7 @@ static int get_transet (qse_sed_t* sed, qse_sed_cmd_t* cmd)
goto oops; goto oops;
} }
ADVSCP (sed); NXTSC (sed);
if (terminate_command (sed) <= -1) goto oops; if (terminate_command (sed) <= -1) goto oops;
qse_str_yield (t, &cmd->u.transet, 0); qse_str_yield (t, &cmd->u.transet, 0);
@ -964,12 +981,12 @@ restart:
default: default:
{ {
qse_char_t cc = c; qse_char_t cc = c;
SETERR1 (sed, QSE_SED_ECMDNR, 0, &cc, 1); SETERR1 (sed, QSE_SED_ECMDNR, sed->src.lnum, &cc, 1);
return -1; return -1;
} }
case QSE_CHAR_EOF: case QSE_CHAR_EOF:
SETERR0 (sed, QSE_SED_ECMDMS, 0); SETERR0 (sed, QSE_SED_ECMDMS, sed->src.lnum);
return -1; return -1;
case QSE_T(':'): case QSE_T(':'):
@ -982,7 +999,7 @@ restart:
return -1; return -1;
} }
ADVSCP (sed); NXTSC (sed);
if (get_label (sed, cmd) <= -1) return -1; if (get_label (sed, cmd) <= -1) return -1;
c = CURSC (sed); c = CURSC (sed);
@ -1006,7 +1023,7 @@ restart:
} }
sed->grp.cmd[sed->grp.level++] = cmd; sed->grp.cmd[sed->grp.level++] = cmd;
ADVSCP (sed); NXTSC (sed);
break; break;
case QSE_T('}'): case QSE_T('}'):
@ -1018,7 +1035,7 @@ restart:
} }
sed->grp.cmd[--sed->grp.level]->u.branch.target = cmd; sed->grp.cmd[--sed->grp.level]->u.branch.target = cmd;
ADVSCP (sed); NXTSC (sed);
return 0; return 0;
case QSE_T('q'): case QSE_T('q'):
@ -1030,7 +1047,7 @@ restart:
return -1; return -1;
} }
ADVSCP (sed); NXTSC (sed);
if (terminate_command (sed) <= -1) return -1; if (terminate_command (sed) <= -1) return -1;
break; break;
@ -1066,7 +1083,7 @@ restart:
return -1; return -1;
} }
ADVSCP (sed); /* skip the new line */ NXTSC (sed); /* skip the new line */
/* get_text() starts from the next line */ /* get_text() starts from the next line */
if (get_text (sed, cmd) <= -1) return -1; if (get_text (sed, cmd) <= -1) return -1;
@ -1097,14 +1114,14 @@ restart:
case QSE_T('n'): case QSE_T('n'):
case QSE_T('N'): case QSE_T('N'):
cmd->type = c; cmd->type = c;
ADVSCP (sed); NXTSC (sed);
if (terminate_command (sed) <= -1) return -1; if (terminate_command (sed) <= -1) return -1;
break; break;
case QSE_T('b'): case QSE_T('b'):
case QSE_T('t'): case QSE_T('t'):
cmd->type = c; cmd->type = c;
ADVSCP (sed); NXTSC (sed);
if (get_branch_target (sed, cmd) <= -1) return -1; if (get_branch_target (sed, cmd) <= -1) return -1;
break; break;
@ -1113,19 +1130,19 @@ restart:
case QSE_T('w'): case QSE_T('w'):
case QSE_T('W'): case QSE_T('W'):
cmd->type = c; cmd->type = c;
ADVSCP (sed); NXTSC (sed);
if (get_file (sed, &cmd->u.file) <= -1) return -1; if (get_file (sed, &cmd->u.file) <= -1) return -1;
break; break;
case QSE_T('s'): case QSE_T('s'):
cmd->type = c; cmd->type = c;
ADVSCP (sed); NXTSC (sed);
if (get_subst (sed, cmd) <= -1) return -1; if (get_subst (sed, cmd) <= -1) return -1;
break; break;
case QSE_T('y'): case QSE_T('y'):
cmd->type = c; cmd->type = c;
ADVSCP (sed); NXTSC (sed);
if (get_transet (sed, cmd) <= -1) return -1; if (get_transet (sed, cmd) <= -1) return -1;
break; break;
} }
@ -1140,9 +1157,11 @@ static int compile_source (
qse_sed_cmd_t* cmd = sed->cmd.cur; qse_sed_cmd_t* cmd = sed->cmd.cur;
/* store the source code pointers */ /* store the source code pointers */
sed->src.ptr = ptr; sed->src.ptr = ptr;
sed->src.end = ptr + len; sed->src.end = ptr + len;
sed->src.cur = ptr; sed->src.cur = ptr;
sed->src.lnum = 1;
sed->src.cc = (len > 0)? (*ptr): QSE_CHAR_EOF;
/* /*
* # comment * # comment
@ -1162,7 +1181,7 @@ static int compile_source (
if (c == QSE_T('#')) if (c == QSE_T('#'))
{ {
do c = NXTSC (sed); while (!IS_LINTERM(c)); do c = NXTSC (sed); while (!IS_LINTERM(c));
ADVSCP (sed); NXTSC (sed);
continue; continue;
} }
@ -1172,7 +1191,7 @@ static int compile_source (
if (c == QSE_T(';')) if (c == QSE_T(';'))
{ {
/* semicolon without a address-command pair */ /* semicolon without a address-command pair */
ADVSCP (sed); NXTSC (sed);
continue; continue;
} }

View File

@ -42,6 +42,8 @@ struct qse_sed_t
/** source text pointers */ /** source text pointers */
struct struct
{ {
qse_size_t lnum; /**< line number */
qse_cint_t cc; /**< last character read */
const qse_char_t* ptr; /**< beginning of the source text */ const qse_char_t* ptr; /**< beginning of the source text */
const qse_char_t* end; /**< end of the source text */ const qse_char_t* end; /**< end of the source text */
const qse_char_t* cur; /**< current source text pointer */ const qse_char_t* cur; /**< current source text pointer */

View File

@ -32,7 +32,8 @@ PRE_UNINSTALL = :
POST_UNINSTALL = : POST_UNINSTALL = :
build_triplet = @build@ build_triplet = @build@
host_triplet = @host@ host_triplet = @host@
bin_PROGRAMS = sed01$(EXEEXT) sed02$(EXEEXT) bin_PROGRAMS = sed01$(EXEEXT) $(am__EXEEXT_1)
@ENABLE_CXX_TRUE@am__append_1 = sed02
subdir = test/sed subdir = test/sed
DIST_COMMON = $(srcdir)/Makefile.am $(srcdir)/Makefile.in DIST_COMMON = $(srcdir)/Makefile.am $(srcdir)/Makefile.in
ACLOCAL_M4 = $(top_srcdir)/aclocal.m4 ACLOCAL_M4 = $(top_srcdir)/aclocal.m4
@ -42,6 +43,7 @@ am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \
mkinstalldirs = $(install_sh) -d mkinstalldirs = $(install_sh) -d
CONFIG_HEADER = $(top_builddir)/include/qse/config.h CONFIG_HEADER = $(top_builddir)/include/qse/config.h
CONFIG_CLEAN_FILES = CONFIG_CLEAN_FILES =
@ENABLE_CXX_TRUE@am__EXEEXT_1 = sed02$(EXEEXT)
am__installdirs = "$(DESTDIR)$(bindir)" am__installdirs = "$(DESTDIR)$(bindir)"
binPROGRAMS_INSTALL = $(INSTALL_PROGRAM) binPROGRAMS_INSTALL = $(INSTALL_PROGRAM)
PROGRAMS = $(bin_PROGRAMS) PROGRAMS = $(bin_PROGRAMS)
@ -50,10 +52,11 @@ sed01_OBJECTS = $(am_sed01_OBJECTS)
sed01_LDADD = $(LDADD) sed01_LDADD = $(LDADD)
am__DEPENDENCIES_1 = am__DEPENDENCIES_1 =
sed01_DEPENDENCIES = $(am__DEPENDENCIES_1) sed01_DEPENDENCIES = $(am__DEPENDENCIES_1)
am_sed02_OBJECTS = sed02.$(OBJEXT) am__sed02_SOURCES_DIST = sed02.cpp
@ENABLE_CXX_TRUE@am_sed02_OBJECTS = sed02.$(OBJEXT)
sed02_OBJECTS = $(am_sed02_OBJECTS) sed02_OBJECTS = $(am_sed02_OBJECTS)
am__DEPENDENCIES_2 = $(am__DEPENDENCIES_1) am__DEPENDENCIES_2 = $(am__DEPENDENCIES_1)
sed02_DEPENDENCIES = $(am__DEPENDENCIES_2) @ENABLE_CXX_TRUE@sed02_DEPENDENCIES = $(am__DEPENDENCIES_2)
DEFAULT_INCLUDES = -I.@am__isrc@ -I$(top_builddir)/include/qse DEFAULT_INCLUDES = -I.@am__isrc@ -I$(top_builddir)/include/qse
depcomp = $(SHELL) $(top_srcdir)/autoconf/depcomp depcomp = $(SHELL) $(top_srcdir)/autoconf/depcomp
am__depfiles_maybe = depfiles am__depfiles_maybe = depfiles
@ -76,7 +79,7 @@ CXXLINK = $(LIBTOOL) --tag=CXX $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) \
--mode=link $(CXXLD) $(AM_CXXFLAGS) $(CXXFLAGS) $(AM_LDFLAGS) \ --mode=link $(CXXLD) $(AM_CXXFLAGS) $(CXXFLAGS) $(AM_LDFLAGS) \
$(LDFLAGS) -o $@ $(LDFLAGS) -o $@
SOURCES = $(sed01_SOURCES) $(sed02_SOURCES) SOURCES = $(sed01_SOURCES) $(sed02_SOURCES)
DIST_SOURCES = $(sed01_SOURCES) $(sed02_SOURCES) DIST_SOURCES = $(sed01_SOURCES) $(am__sed02_SOURCES_DIST)
ETAGS = etags ETAGS = etags
CTAGS = ctags CTAGS = ctags
DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST) DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST)
@ -208,8 +211,8 @@ top_srcdir = @top_srcdir@
AM_CPPFLAGS = -I$(top_srcdir)/include AM_CPPFLAGS = -I$(top_srcdir)/include
LDADD = -lqsesed -lqseutl -lqsecmn $(LIBM) LDADD = -lqsesed -lqseutl -lqsecmn $(LIBM)
sed01_SOURCES = sed01.c sed01_SOURCES = sed01.c
sed02_SOURCES = sed02.cpp @ENABLE_CXX_TRUE@sed02_SOURCES = sed02.cpp
sed02_LDADD = -lqsesed++ $(LDADD) @ENABLE_CXX_TRUE@sed02_LDADD = -lqsesed++ $(LDADD)
all: all-am all: all-am
.SUFFIXES: .SUFFIXES:

View File

@ -118,8 +118,9 @@ int sed_main (int argc, qse_char_t* argv[])
if (qse_sed_comp (sed, argv[1], qse_strlen(argv[1])) == -1) if (qse_sed_comp (sed, argv[1], qse_strlen(argv[1])) == -1)
{ {
qse_fprintf (QSE_STDERR, qse_fprintf (QSE_STDERR,
QSE_T("cannot compile - %s\n"), QSE_T("cannot compile - %s at line %lu\n"),
qse_sed_geterrmsg(sed) qse_sed_geterrmsg(sed),
(unsigned long)qse_sed_geterrlin(sed)
); );
goto oops; goto oops;
} }