public functions can now be passed as arguments, with the tag 'Function:' dvander
authorDavid Anderson <dvander@alliedmods.net>
Fri Jul 14 06:47:51 2006 +0000 (2006-07-14)
branchdvander
changeset 1425616b5b1503
parent 13 c44780a225a6
child 17 9c9a85736197
public functions can now be passed as arguments, with the tag 'Function:'
compiler-init/sc3.c
     1.1 --- a/compiler-init/sc3.c	Fri Jul 14 06:21:07 2006 +0000
     1.2 +++ b/compiler-init/sc3.c	Fri Jul 14 06:47:51 2006 +0000
     1.3 @@ -1670,13 +1670,29 @@
     1.4      if (sc_allowproccall) {
     1.5        callfunction(sym,lval1,FALSE);
     1.6      } else {
     1.7 -      lval1->sym=NULL;
     1.8 -      lval1->ident=iEXPRESSION;
     1.9 -      lval1->constval=0;
    1.10 -      lval1->tag=0;
    1.11 -      error(76);                /* invalid function call, or syntax error */
    1.12 -    } /* if */
    1.13 -    return FALSE;
    1.14 +      int n=-1,iter=0;
    1.15 +      for (sym=glbtab.next; sym!=NULL; sym=sym->next) {
    1.16 +        if (sym->ident==iFUNCTN
    1.17 +            && (sym->usage & uPUBLIC)!=0 && (sym->usage & uDEFINE)!=0)
    1.18 +        {
    1.19 +          assert(sym->vclass==sGLOBAL);
    1.20 +          if (strcmp(sym->name, lval1->sym->name)==0) {
    1.21 +            n = iter;
    1.22 +            break;
    1.23 +          }
    1.24 +          iter++;
    1.25 +        }
    1.26 +      }
    1.27 +      if (n!=-1) {
    1.28 +        lval1->sym=NULL;
    1.29 +        lval1->ident=iCONSTEXPR;
    1.30 +        lval1->constval=n;
    1.31 +        lval1->tag=pc_addtag("Function");
    1.32 +      } else {
    1.33 +        error(76);                /* invalid function call, or syntax error */
    1.34 +      } /* if */
    1.35 +      return FALSE;
    1.36 +    }
    1.37    } /* if */
    1.38    return lvalue;
    1.39  }