From 0902b67f0391c6f41a2e4776e267fffc8c6c144b Mon Sep 17 00:00:00 2001 From: Christian Thaeter Date: Tue, 7 Jun 2005 13:37:35 +0000 Subject: [PATCH] not_parser git-archimport-id: chth@gmx.net--2004/mala-glibc--devel--0.2--patch-65 --- ChangeLog | 12 ++++++++++++ engine/engine.c | 5 ++--- std/std.c | 44 ++++++++++++++++++++++++++++++++------------ std/std.h | 5 +++++ 4 files changed, 51 insertions(+), 15 deletions(-) diff --git a/ChangeLog b/ChangeLog index 037571b..57c5264 100644 --- a/ChangeLog +++ b/ChangeLog @@ -2,6 +2,18 @@ # arch-tag: automatic-ChangeLog--chth@gmx.net--2004/mala-glibc--devel--0.2 # +2005-06-07 13:37:35 GMT Christian Thaeter patch-65 + + Summary: + not_parser + Revision: + mala-glibc--devel--0.2--patch-65 + + + modified files: + ChangeLog engine/engine.c std/std.c std/std.h + + 2005-06-07 00:44:04 GMT Christian Thaeter patch-64 Summary: diff --git a/engine/engine.c b/engine/engine.c index 115d0ea..36e3f6f 100644 --- a/engine/engine.c +++ b/engine/engine.c @@ -404,10 +404,9 @@ mala_engine_run (MalaEngine self) { if (self->state == MALA_LITERAL) { - self->state = (mala_engine_string_istrue (self, pptr->string) ^ self->negated)? - MALA_SUCCESS : MALA_FAILURE; mala_stringlist_elem_remove (&self->program, pptr); mala_stringlist_tail_insert (&self->arguments, pptr); + self->state = MALA_SUCCESS; } else mala_engine_eval (self, &pptr); @@ -428,7 +427,7 @@ mala_engine_eval (MalaEngine self, MalaStringListNode_ref pptr) act = mala_actiondesc_top (desc); if (act) - self->state = mala_action_execute(act, pptr, self); + self->state = mala_action_execute (act, pptr, self); if (self->state == MALA_EXCEPTION) self->state = MALA_ENOACTION; diff --git a/std/std.c b/std/std.c index 5c6cdd3..75ac775 100644 --- a/std/std.c +++ b/std/std.c @@ -48,6 +48,10 @@ static mala_actioninit std_actions[] = MALA_PARSER_HELP("--BEGIN", ("--HELP-ACTION", "TODO")), */ + MALA_PARSER("--NOT", mala_not_parser, NULL, NULL, NULL), + MALA_PARSER_BRIEF("--NOT", "negates logic"), + MALA_PARSER_HELP("--NOT", ("--HELP-ACTION", "TODO")), + MALA_PARSER("--LITERAL", mala_literal_parser, NULL, NULL, NULL), MALA_PARSER_BRIEF("--LITERAL", "Treats the next word literally"), MALA_PARSER_HELP("--LITERAL", ("--HELP-ACTION", "TODO")), @@ -129,14 +133,11 @@ mala_substitute_parser (MalaEngine eng, void * data) { if (!mala_stringlist_after_new (&eng->program, *pptr, (MalaString) data)) - goto ealloc_node; + return MALA_EALLOC; mala_stringlist_elem_delete_fwd (&eng->program, pptr); - return eng->state; - - ealloc_node: - return eng->state = MALA_EALLOC; + return MALA_SUCCESS; } int @@ -159,7 +160,7 @@ mala_expand_parser (MalaEngine eng, mala_stringlist_elem_delete_fwd (&eng->program, pptr); - return eng->state; + return MALA_SUCCESS; ealloc_node: /* remove already added things */ @@ -167,18 +168,18 @@ mala_expand_parser (MalaEngine eng, itr != end; mala_stringlist_elem_delete_fwd (&eng->program, &itr)); - return eng->state = MALA_EALLOC; + return MALA_EALLOC; } + int mala_macro_parser (MalaEngine eng, MalaStringListNode_ref pptr, void * data) { - (void) eng; - (void) pptr; (void) data; - return MALA_ENOACTION; + mala_stringlist_elem_delete_fwd (&eng->program, pptr); + return eng->state; } int @@ -211,7 +212,7 @@ mala_printl_parser (MalaEngine eng, mala_stringlist_elem_delete_fwd (&eng->program, pptr); mala_stringlist_elem_delete_fwd (&eng->program, pptr); - return eng->state = MALA_SUCCESS; + return MALA_SUCCESS; } int @@ -221,15 +222,34 @@ mala_literal_parser (MalaEngine eng, { (void) data; + if (eng->state > MALA_EFAULT) + return eng->state; + if (mala_stringlist_is_tail (&eng->program, *pptr)) return mala_engine_exception (eng, pptr, *pptr, eng->common_string[MALA_STRING_ERROR_MISSING_ARGUMENT]); + mala_stringlist_elem_delete_fwd (&eng->program, pptr); + return MALA_LITERAL; +} + +int +mala_not_parser (MalaEngine eng, + MalaStringListNode_ref pptr, + void * data) +{ + (void) data; + if (eng->state > MALA_EFAULT) return eng->state; + if (mala_stringlist_is_tail (&eng->program, *pptr)) + return mala_engine_exception (eng, pptr, *pptr, + eng->common_string[MALA_STRING_ERROR_MISSING_ARGUMENT]); + mala_stringlist_elem_delete_fwd (&eng->program, pptr); - return eng->state = MALA_LITERAL; + eng->negated = !eng->negated; + return MALA_SUCCESS; } diff --git a/std/std.h b/std/std.h index 8298006..499077c 100644 --- a/std/std.h +++ b/std/std.h @@ -100,6 +100,11 @@ mala_literal_parser (MalaEngine eng, MalaStringListNode_ref pptr, void * data); +int +mala_not_parser (MalaEngine eng, + MalaStringListNode_ref pptr, + void * data); + #endif /* MALA_STD_H */ -- 2.11.4.GIT