aboutsummaryrefslogtreecommitdiffstats
path: root/symbol.c
diff options
context:
space:
mode:
authorArnold D. Robbins <arnold@skeeve.com>2020-08-12 18:15:18 +0300
committerArnold D. Robbins <arnold@skeeve.com>2020-08-12 18:15:18 +0300
commitd389d4cd9e2d75159f69a23bfa6d038f74502b12 (patch)
tree54a67069f473d69f4f5de76b01f69081121ec4ef /symbol.c
parent8110b4b66d9bf0f94b4595aadd4e9439df526fa5 (diff)
downloadegawk-d389d4cd9e2d75159f69a23bfa6d038f74502b12.tar.gz
egawk-d389d4cd9e2d75159f69a23bfa6d038f74502b12.tar.bz2
egawk-d389d4cd9e2d75159f69a23bfa6d038f74502b12.zip
Fix issues with function ordering in pretty printed output. Add doc.
Diffstat (limited to 'symbol.c')
-rw-r--r--symbol.c13
1 files changed, 12 insertions, 1 deletions
diff --git a/symbol.c b/symbol.c
index 29052366..844d8ee8 100644
--- a/symbol.c
+++ b/symbol.c
@@ -366,7 +366,18 @@ comp_symbol(const void *v1, const void *v2)
n1 = *npp1;
n2 = *npp2;
- return strcmp(n1->vname, n2->vname);
+ // names in awk namespace come out first
+ bool n1_is_in_ns = (strchr(n1->vname, ':') != NULL);
+ bool n2_is_in_ns = (strchr(n2->vname, ':') != NULL);
+
+ if (n1_is_in_ns && n2_is_in_ns)
+ return strcmp(n1->vname, n2->vname);
+ else if (n1_is_in_ns && ! n2_is_in_ns)
+ return 1;
+ else if (! n1_is_in_ns && n2_is_in_ns)
+ return -1;
+ else
+ return strcmp(n1->vname, n2->vname);
}