vermaseren / form

The FORM project for symbolic manipulation of very big expressions
GNU General Public License v3.0
1.15k stars 136 forks source link

Undefining "outer" preprocessor variables breaks the preprocessor variable stack #330

Open tueda opened 4 years ago

tueda commented 4 years ago
#procedure proc(b)
  #undefine a
#endprocedure

#define a "100"

#show

#call proc(200)

#show

.end

After returning back from proc, somehow the definition of b remains.

FORM 4.2.1 (Aug 28 2019, v4.2.1-4-g0b3ab5d) 64-bits  Run: Wed Nov 13 16:15:12 2019
    #procedure proc(b)
      #undefine a
    #endprocedure

    #define a "100"

    #show
#The preprocessor variables:
0: VERSION_ = "4"
1: SUBVERSION_ = "2"
2: DATE_ = "Wed Nov 13 16:15:12 2019"
3: random_ = "________"
4: optimminvar_ = "0"
5: optimmaxvar_ = "0"
6: OLDNUMEXTRASYMBOLS_ = "0"
7: optimvalue_ = "0"
8: optimscheme_ = "0"
9: tolower_ = "0"
10: toupper_ = "0"
11: SYSTEMERROR_ = "0"
12: PID_ = "17835"
13: PARALLELTASK_ = "0"
14: NPARALLELTASKS_ = "1"
15: NAME_ = "test.frm"
16: NTHREADS_ = "1"
17: CMODULE_ = "1"
18: a = "100"

    #call proc(200)

    #show
#The preprocessor variables:
0: VERSION_ = "4"
1: SUBVERSION_ = "2"
2: DATE_ = "Wed Nov 13 16:15:12 2019"
3: random_ = "________"
4: optimminvar_ = "0"
5: optimmaxvar_ = "0"
6: OLDNUMEXTRASYMBOLS_ = "0"
7: optimvalue_ = "0"
8: optimscheme_ = "0"
9: tolower_ = "0"
10: toupper_ = "0"
11: SYSTEMERROR_ = "0"
12: PID_ = "17835"
13: PARALLELTASK_ = "0"
14: NPARALLELTASKS_ = "1"
15: NAME_ = "test.frm"
16: NTHREADS_ = "1"
17: CMODULE_ = "1"
18: b = "200"

    .end