aboutsummaryrefslogtreecommitdiff
path: root/src/cmd/rc/code.c
diff options
context:
space:
mode:
authorlufia <lufia@lufia.org>2025-07-21 13:36:21 +0900
committerDan Cross <crossd@gmail.com>2025-07-27 09:55:45 -0400
commit8ff39da0623dbab13c00ce25a16dda168f6ec0a0 (patch)
tree7ad6a351cf9a0538ece73813da14872c6bd90785 /src/cmd/rc/code.c
parentcc89d242358cc777a22beefe2456d11e12e94197 (diff)
src/cmd/rc: import rc syntax `delim{cmd} for splitting commands from 9atom
Co-authored-by: <ori@eigenstate.org>
Diffstat (limited to 'src/cmd/rc/code.c')
-rw-r--r--src/cmd/rc/code.c18
1 files changed, 16 insertions, 2 deletions
diff --git a/src/cmd/rc/code.c b/src/cmd/rc/code.c
index 208476ae..436e754a 100644
--- a/src/cmd/rc/code.c
+++ b/src/cmd/rc/code.c
@@ -94,6 +94,8 @@ outcode(tree *t, int eflag)
{
int p, q;
tree *tt;
+ char *ifs;
+
if(t==0)
return;
if(t->type!=NOT && t->type!=';')
@@ -141,14 +143,26 @@ outcode(tree *t, int eflag)
emitf(Xconc);
break;
case '`':
+ emitf(Xmark);
+ if(c0){
+ outcode(c0, 0);
+ emitf(Xglob);
+ }else{
+ if((ifs = strdup("ifs")) == nil)
+ sysfatal("strdup: %r");
+ emitf(Xmark);
+ emitf(Xword);
+ emits(ifs);
+ emitf(Xdol);
+ }
emitf(Xbackq);
if(havefork){
p = emiti(0);
- outcode(c0, 0);
+ outcode(c1, 0);
emitf(Xexit);
stuffdot(p);
} else
- emits(fnstr(c0));
+ emits(fnstr(c1));
break;
case ANDAND:
outcode(c0, 0);