code: plan9front

Download patch

ref: cfebef4330c5197ea1f91747c570aa2788eaae53
parent: 613fd6b4294ad3277a91c9a2e58b2b2d4f22ab1c
author: Sigrid Solveig Haflínudóttir <sigrid@ftrv.se>
date: Fri Mar 17 18:10:42 EDT 2023

cc: fndecls: use current fn node directly

--- a/sys/src/cmd/cc/cc.h
+++ b/sys/src/cmd/cc/cc.h
@@ -463,6 +463,7 @@
 EXTERN	int	thechar;
 EXTERN	char*	thestring;
 EXTERN	Type*	thisfn;
+EXTERN	Node*	thisfnnode;
 EXTERN	Type*	types[NTYPE];
 EXTERN	Type*	fntypes[NTYPE];
 EXTERN	Node*	initlist;
@@ -583,7 +584,7 @@
 void	edecl(int, Type*, Sym*);
 Type*	fnproto(Node*);
 Type*	fnproto1(Node*);
-void	fndecls(Node*, int);
+void	fndecls(int);
 void	markdcl(void);
 Type*	paramconv(Type*, int);
 void	pdecl(int, Type*, Sym*);
--- a/sys/src/cmd/cc/cc.y
+++ b/sys/src/cmd/cc/cc.y
@@ -82,7 +82,7 @@
 	{
 		lastdcl = T;
 		firstarg = S;
-		dodecl(xdecl, lastclass, lasttype, $2);
+		thisfnnode = dodecl(xdecl, lastclass, lasttype, $2);
 		if(lastdcl == T || lastdcl->etype != TFUNC) {
 			diag($2, "not a function");
 			lastdcl = types[TFUNC];
@@ -95,13 +95,13 @@
 	pdecl
 	{
 		argmark($2, 1);
-		fndecls($2, 0);
+		fndecls(0);
 	}
 	block
 	{
 		Node *n;
 
-		fndecls($2, 1);
+		fndecls(1);
 		n = revertdcl();
 		if(n)
 			$6 = new(OLIST, n, $6);
--- a/sys/src/cmd/cc/dcl.c
+++ b/sys/src/cmd/cc/dcl.c
@@ -732,7 +732,7 @@
 }
 
 void
-fndecls(Node *f, int pass)
+fndecls(int pass)
 {
 	static Sym *funcsym;
 	Node *n;
@@ -746,7 +746,7 @@
 		funcsym = dodecl(adecl, CLOCAL, n->type, n)->sym;
 	}else if(funcsym->aused){
 		n = new(OSTRING, Z, Z);
-		n->cstring = f->left->sym->name;
+		n->cstring = thisfnnode->sym->name;
 		n->type = copytyp(funcsym->type);
 		n->type->width = strlen(n->cstring)+1;
 		n->etype = TARRAY;