From e162d378c717e0cc1157aa06d99af69e51fdc20e Mon Sep 17 00:00:00 2001 From: Rainer Gerhards Date: Thu, 13 Sep 2012 15:26:22 +0200 Subject: Add set/unset stmt to grammar & AST ... but not yet to executing engine --- grammar/rainerscript.c | 38 ++++++++++++++++++++++++++++++++++++++ 1 file changed, 38 insertions(+) (limited to 'grammar/rainerscript.c') diff --git a/grammar/rainerscript.c b/grammar/rainerscript.c index b0a79458..c7344628 100644 --- a/grammar/rainerscript.c +++ b/grammar/rainerscript.c @@ -1466,6 +1466,16 @@ cnfstmtPrint(struct cnfstmt *root, int indent) } doIndent(indent); dbgprintf("END IF\n"); break; + case S_SET: + doIndent(indent); dbgprintf("SET %s =\n", + stmt->d.s_set.varname); + cnfexprPrint(stmt->d.s_set.expr, indent+1); + doIndent(indent); dbgprintf("END SET\n"); + break; + case S_UNSET: + doIndent(indent); dbgprintf("UNSET %s\n", + stmt->d.s_unset.varname); + break; case S_PRIFILT: doIndent(indent); dbgprintf("PRIFILT '%s'\n", stmt->printable); cnfstmtPrint(stmt->d.s_prifilt.t_then, indent+1); @@ -1569,6 +1579,13 @@ cnfstmtDestruct(struct cnfstmt *root) cnfstmtDestruct(stmt->d.s_if.t_else); } break; + case S_SET: + free(stmt->d.s_set.varname); + cnfexprDestruct(stmt->d.s_set.expr); + break; + case S_UNSET: + free(stmt->d.s_set.varname); + break; case S_PRIFILT: cnfstmtDestruct(stmt->d.s_prifilt.t_then); break; @@ -1593,6 +1610,27 @@ cnfstmtDestruct(struct cnfstmt *root) } } +struct cnfstmt * +cnfstmtNewSet(char *var, struct cnfexpr *expr) +{ + struct cnfstmt* cnfstmt; + if((cnfstmt = cnfstmtNew(S_SET)) != NULL) { + cnfstmt->d.s_set.varname = (uchar*) var; + cnfstmt->d.s_set.expr = expr; + } + return cnfstmt; +} + +struct cnfstmt * +cnfstmtNewUnset(char *var) +{ + struct cnfstmt* cnfstmt; + if((cnfstmt = cnfstmtNew(S_UNSET)) != NULL) { + cnfstmt->d.s_unset.varname = (uchar*) var; + } + return cnfstmt; +} + struct cnfstmt * cnfstmtNewPRIFILT(char *prifilt, struct cnfstmt *t_then) { -- cgit v1.2.3