summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--ChangeLog4
-rw-r--r--Src/Modules/parameter.c5
-rw-r--r--Src/builtin.c2
-rw-r--r--Src/exec.c2
-rw-r--r--Src/hashtable.c2
-rw-r--r--Src/init.c2
-rw-r--r--Src/text.c14
7 files changed, 14 insertions, 17 deletions
diff --git a/ChangeLog b/ChangeLog
index a370973ae..1d825c0af 100644
--- a/ChangeLog
+++ b/ChangeLog
@@ -1,5 +1,9 @@
2008-09-11 Peter Stephenson <pws@csr.com>
+ * 25651: Src/builtin.c, Src/exec.c, Src/hashtable.c, Src/init.c,
+ Src/text.c, Src/Modules/parameter.c: make indentation for code
+ output by getpermtext() more logical.
+
* 25643: Doc/Zsh/builtins.yo, Src/exec.c: keep DEBUG and ZERR
traps in subshells.
diff --git a/Src/Modules/parameter.c b/Src/Modules/parameter.c
index b6c8c5608..4e1205ec8 100644
--- a/Src/Modules/parameter.c
+++ b/Src/Modules/parameter.c
@@ -390,7 +390,7 @@ getfunction(UNUSED(HashTable ht), const char *name, int dis)
((shf->node.flags & PM_TAGGED) ? "Ut" : "U") :
((shf->node.flags & PM_TAGGED) ? "t" : "")));
} else {
- char *t = getpermtext(shf->funcdef, NULL), *n, *h;
+ char *t = getpermtext(shf->funcdef, NULL, 1), *n, *h;
if (shf->funcdef->flags & EF_RUN) {
n = nicedupstring(name);
@@ -455,7 +455,8 @@ scanfunctions(UNUSED(HashTable ht), ScanFunc func, int flags, int dis)
((shf->node.flags & PM_TAGGED) ? "Ut" : "U") :
((shf->node.flags & PM_TAGGED) ? "t" : "")));
} else {
- char *t = getpermtext(((Shfunc) hn)->funcdef, NULL), *n;
+ char *t = getpermtext(((Shfunc) hn)->funcdef, NULL, 1);
+ char *n;
if (((Shfunc) hn)->funcdef->flags & EF_RUN) {
n = nicedupstring(hn->nam);
diff --git a/Src/builtin.c b/Src/builtin.c
index 69f0aaa6e..8adc7fcb1 100644
--- a/Src/builtin.c
+++ b/Src/builtin.c
@@ -5725,7 +5725,7 @@ bin_trap(char *name, char **argv, UNUSED(Options ops), UNUSED(int func))
if (!siglists[sig])
printf("trap -- '' %s\n", name);
else {
- s = getpermtext(siglists[sig], NULL);
+ s = getpermtext(siglists[sig], NULL, 0);
printf("trap -- ");
quotedzputs(s, stdout);
printf(" %s\n", name);
diff --git a/Src/exec.c b/Src/exec.c
index f1c5788bf..a8098e5f8 100644
--- a/Src/exec.c
+++ b/Src/exec.c
@@ -1084,7 +1084,7 @@ execlist(Estate state, int dont_change_job, int exiting)
noerrexit = 1;
if (ltype & Z_SIMPLE) /* skip the line number */
pc2++;
- pm = setsparam("ZSH_DEBUG_CMD", getpermtext(state->prog, pc2));
+ pm = setsparam("ZSH_DEBUG_CMD", getpermtext(state->prog, pc2, 0));
exiting = donetrap;
ret = lastval;
diff --git a/Src/hashtable.c b/Src/hashtable.c
index 212882b3f..bc2a4f22e 100644
--- a/Src/hashtable.c
+++ b/Src/hashtable.c
@@ -887,7 +887,7 @@ printshfuncnode(HashNode hn, int printflags)
if (f->node.flags & PM_UNDEFINED)
printf("%c undefined\n\t", hashchar);
else
- t = getpermtext(f->funcdef, NULL);
+ t = getpermtext(f->funcdef, NULL, 1);
if (f->node.flags & PM_TAGGED)
printf("%c traced\n\t", hashchar);
if (!t) {
diff --git a/Src/init.c b/Src/init.c
index 923b94876..4c08c8c65 100644
--- a/Src/init.c
+++ b/Src/init.c
@@ -168,7 +168,7 @@ loop(int toplevel, int justonce)
else
addlinknode(args, "");
addlinknode(args, dupstring(getjobtext(prog, NULL)));
- addlinknode(args, cmdstr = getpermtext(prog, NULL));
+ addlinknode(args, cmdstr = getpermtext(prog, NULL, 0));
callhookfunc("preexec", args, 1, NULL);
diff --git a/Src/text.c b/Src/text.c
index eabb51268..074afe581 100644
--- a/Src/text.c
+++ b/Src/text.c
@@ -118,7 +118,7 @@ taddnl(void)
/**/
mod_export char *
-getpermtext(Eprog prog, Wordcode c)
+getpermtext(Eprog prog, Wordcode c, int start_indent)
{
struct estate s;
@@ -131,6 +131,7 @@ getpermtext(Eprog prog, Wordcode c)
s.pc = c;
s.strs = prog->strs;
+ tindent = start_indent;
tnewlins = 1;
tbuf = (char *)zalloc(tsiz = 32);
tptr = tbuf;
@@ -162,6 +163,7 @@ getjobtext(Eprog prog, Wordcode c)
s.pc = c;
s.strs = prog->strs;
+ tindent = 0;
tnewlins = 0;
tbuf = NULL;
tptr = jbuf;
@@ -245,16 +247,6 @@ gettext2(Estate state)
int stack = 0;
wordcode code;
- /*
- * Hack for parsing "simple" format of function definitions.
- * In this case there is no surrounding context so the initial
- * indent should be zero.
- */
- if (wc_code(*state->pc) == WC_FUNCDEF)
- tindent = 0;
- else
- tindent = 1;
-
while (1) {
if (stack) {
if (!(s = tstack))