gnupic: some question about the directive GLOBAL in the source code.
Subject:
Re: some question about the directive GLOBAL in the source code.
From:
Marko Kohtala ####@####.####
Date:
17 Aug 2012 18:53:20 -0000
Message-Id: <CAJ0yFazXHWg15ABL8di5LoC9H733c=R_K1PYkjQtpQwwr0i8zw@mail.gmail.com>
I think you are missing the read of gperror. It wont print the error on
first pass, and on second pass the symbol is already defined.
Marko
2012/8/14 feqin fan ####@####.####
> Hello, everybody, I'm sorry to trouble you again.
> I have read most of the source code of gputils. I have a query about
> the implementation of the directive GLOBAL.
> for example, Have this code:
>
> global var
>
> udata
> var res 1
>
> the assembler deal with the first line "global var",
> the calling sequence is like this : yyparse() - do_or_append_insn(char *,
> struct pnode *) - do_insn(char *, struct pnode *) - do_global()
> the function do_global() source code :
>
> 1, if (state.mode == absolute) {
> 2, gperror(GPE_OBJECT_ONLY, NULL);
> 3, } else {
> 4, for (; parms; parms = TAIL(parms)) {
> 5, p = maybe_evaluate_concat(HEAD(parms)); //p will point to
> "var".
> 6, if (p) {
> 7, s = get_symbol(state.stTop, p); //s will be NULL
> 8, if (s == NULL) {
> 9, snprintf(buf,
> 10, sizeof(buf),
> 11 "Symbol not previously defined (%s).",
> 12, p);
> 13, gperror(GPE_NOSYM, buf);
>
>
>
> the line 4 must be first executed, in line 5 the p will point to "var". and
> in line 7, because the source code "global var" is the first line of the
> being assembled code.
> So. in the function do_global() line 7, the s will be NULL,so the error
> will be print..
>
> Please tell what's wring in my analyses..??
> :-)
>
> THX, Guys..
>