From ba64ad437e619a8e34af38598011683876ea325f Mon Sep 17 00:00:00 2001 From: VVWVV Date: Sun, 12 Mar 2017 10:28:28 +0300 Subject: [PATCH] Update the fix --- source/compiler/sc.h | 1 + source/compiler/sc1.c | 2 ++ source/compiler/sc2.c | 7 +------ 3 files changed, 4 insertions(+), 6 deletions(-) diff --git a/source/compiler/sc.h b/source/compiler/sc.h index 3313ce3..20b4c71 100644 --- a/source/compiler/sc.h +++ b/source/compiler/sc.h @@ -145,6 +145,7 @@ typedef struct s_symbol { struct s_symbol **refer; /* referrer list, functions that "use" this symbol */ int numrefers; /* number of entries in the referrer list */ char *documentation; /* optional documentation string */ + int func_skipped; } symbol; diff --git a/source/compiler/sc1.c b/source/compiler/sc1.c index af736bd..345577a 100644 --- a/source/compiler/sc1.c +++ b/source/compiler/sc1.c @@ -3569,9 +3569,11 @@ static int newfunc(char *firstname,int firsttag,int fpublic,int fstatic,int stoc /* so it is not a prototype, proceed */ /* if this is a function that is not referred to (this can only be detected * in the second stage), shut code generation off */ + sym->func_skipped=FALSE; if (sc_status==statWRITE && (sym->usage & uREAD)==0 && !fpublic) { sc_status=statSKIP; cidx=code_idx; + sym->func_skipped=TRUE; glbdecl=glb_declared; } /* if */ if ((sym->flags & flgDEPRECATED)!=0) { diff --git a/source/compiler/sc2.c b/source/compiler/sc2.c index 3e89e9f..a509ac8 100644 --- a/source/compiler/sc2.c +++ b/source/compiler/sc2.c @@ -1335,12 +1335,7 @@ static int command(void) /* mark function as "used" */ /* do NOT mark it as written as that has a different meaning for * functions (marks them as "should return a value") */ - - /* compute the number of references on the function */ - for (count=0; countnumrefers && curfunc->refer[count]; count++) - /* nothing */; - /* if there's references on the function or/and this function was declared as public */ - if (count!=0 || (curfunc->usage & uPUBLIC)!=0) + if (!curfunc->func_skipped) markusage(sym,uREAD); } else { outval(sym->addr,FALSE);