diff options
author | Nicholas <nbnoll@eml.cc> | 2021-11-15 18:54:20 -0800 |
---|---|---|
committer | Nicholas <nbnoll@eml.cc> | 2021-11-15 18:54:20 -0800 |
commit | a93cc453bd8072e7d79ebe8f00614e1b99eb5852 (patch) | |
tree | 12f85f32daf8fce0387b07db6a960b21e3889faf /src/cmd | |
parent | 5baa63ab502c98f6f62368302d92b6b90f9fcd26 (diff) |
Feat: added match keyword
However, it is not tested in the slightest.
Diffstat (limited to 'src/cmd')
-rw-r--r-- | src/cmd/rc/exec.c | 22 | ||||
-rw-r--r-- | src/cmd/rc/exec.h | 1 | ||||
-rw-r--r-- | src/cmd/rc/syntax.y | 3 |
3 files changed, 25 insertions, 1 deletions
diff --git a/src/cmd/rc/exec.c b/src/cmd/rc/exec.c index 62375df..2bdaebd 100644 --- a/src/cmd/rc/exec.c +++ b/src/cmd/rc/exec.c @@ -712,6 +712,28 @@ Xgoto(void) } void +Xmatch(void) +{ + Word *p; + Word *s; + + for(p=runner->args->word; p; p=p->link){ + for(s=runner->args->link->word; s; s=s->link){ + if(match(s->str, p->str, 0)) + goto match; + } + } +nomatch: + runner->status = 0; + goto cleanup; +match: + runner->status = 1; +cleanup: + poplist(); + poplist(); +} + +void Xcase(void) { Word *p; // pattern diff --git a/src/cmd/rc/exec.h b/src/cmd/rc/exec.h index 78250f1..d14c0f6 100644 --- a/src/cmd/rc/exec.h +++ b/src/cmd/rc/exec.h @@ -8,6 +8,7 @@ */ void Xcase(void); +void Xmatch(void); void Xmark(void); // Xmark marks stack location for word void Xindex(void); // Xindex void Xlocal(void); // Xlocal(name,val) create local variable, assign value diff --git a/src/cmd/rc/syntax.y b/src/cmd/rc/syntax.y index 9750002..78a7ae2 100644 --- a/src/cmd/rc/syntax.y +++ b/src/cmd/rc/syntax.y @@ -93,6 +93,7 @@ cmd: | assign cmd %prec Tbang { $$ = hangchild1($1, $2, 2); } | Tbang cmd { $$ = maketree1(Tbang, $2); } | Tsubshell cmd { $$ = maketree1(Tsubshell, $2); } +| Ttwiddle word words { $$ = hangchild2($1, $2, 0, $3, 1); } | Tfor '(' word ')' nl cmd { $$ = hangchild3($1, $3, nil, $6); } | Tfor '(' word Tin words ')' nl cmd { $$ = hangchild3($1, $3, $5, $8); } | Twhile paren nl cmd { $$ = hangchild2($1, $2, 0, $4, 1); } @@ -127,7 +128,7 @@ nonkeyword: //| Tredir block { $$ = hangchild1($1, $2, 0); $$->type = Tpipefd; } keyword: - Tfor|Tin|Twhile|Tif|Telse|Tswitch|Tcase|Tbang|Tsubshell|Tfunc + Tfor|Tin|Twhile|Tif|Telse|Tswitch|Tcase|Tbang|Tsubshell|Ttwiddle|Tfunc words: /* empty */ { $$ = nil; } |