Overview
Comment: | The previous attempted fix of trying to call a macro whose definition is empty had a problem with defining new macros. Instead, make a macro with a single TF_MACRO+TF_ABNORMAL token if it is empty, and skip the TF_MACRO+TF_ABNORMAL token during expansion. |
---|---|
Downloads: | Tarball | ZIP archive | SQL archive |
Timelines: | family | ancestors | descendants | both | trunk |
Files: | files | file ages | folders |
SHA1: |
4ce94e1d08056ff116b4899d17193445 |
User & Date: | user on 2022-08-05 06:22:01 |
Other Links: | manifest | tags |
Context
2022-08-05
| ||
08:52 | Fix a mistake in picedit.c with freeing memory after saving a multidependent picture. check-in: 95af598a76 user: user tags: trunk | |
06:22 | The previous attempted fix of trying to call a macro whose definition is empty had a problem with defining new macros. Instead, make a macro with a single TF_MACRO+TF_ABNORMAL token if it is empty, and skip the TF_MACRO+TF_ABNORMAL token during expansion. check-in: 4ce94e1d08 user: user tags: trunk | |
05:37 | Fix the {include} macro file name dealing (to allow lowercase letters), and fix the case of trying to call a macro whose definition is empty. check-in: 00437dafd6 user: user tags: trunk | |
Changes
Modified class.c from [bbafd4c28a] to [7edc77ca68].
︙ | ︙ | |||
415 416 417 418 419 420 421 422 423 424 425 426 427 428 | ms->args=0; ms->next=macstack; macstack=ms; } if(main_options['M']) printf("M^ %d\n",tl?1:0); goto magain; } return; } fl=n=pr=0; tokent=tokenv=0; *tokenstr=0; again: c=fgetc(classfp); | > | 415 416 417 418 419 420 421 422 423 424 425 426 427 428 429 | ms->args=0; ms->next=macstack; macstack=ms; } if(main_options['M']) printf("M^ %d\n",tl?1:0); goto magain; } if(tokent==TF_MACRO+TF_ABNORMAL) goto magain; // denotes a empty macro return; } fl=n=pr=0; tokent=tokenv=0; *tokenstr=0; again: c=fgetc(classfp); |
︙ | ︙ | |||
619 620 621 622 623 624 625 626 627 628 629 630 631 632 | } if(tokent==TF_MACRO+TF_OPEN && ++i>65000) ParseError("Too much macro nesting\n"); if(tokent==TF_MACRO+TF_CLOSE && !--i) break; *t=add_macro(); t=&(*t)->next; } if(main_options['M']) printf("M> %04X %04X %p\n",name,glohash[name].id,macros[glohash[name].id-0xC000]); } static void begin_include_file(const char*name) { InputStack*nxt=inpstack; inpstack=malloc(sizeof(InputStack)); if(!inpstack) fatal("Allocation failed\n"); inpstack->classfp=classfp; | > > > > > > > | 620 621 622 623 624 625 626 627 628 629 630 631 632 633 634 635 636 637 638 639 640 | } if(tokent==TF_MACRO+TF_OPEN && ++i>65000) ParseError("Too much macro nesting\n"); if(tokent==TF_MACRO+TF_CLOSE && !--i) break; *t=add_macro(); t=&(*t)->next; } if(main_options['M']) printf("M> %04X %04X %p\n",name,glohash[name].id,macros[glohash[name].id-0xC000]); if(!macros[glohash[name].id-0xC000]) { // The macro is empty, so add a token which denotes a empty macro. // This token will be skipped during macro expansion. tokent=TF_MACRO+TF_ABNORMAL; *tokenstr=0; macros[glohash[name].id-0xC000]=add_macro(); } } static void begin_include_file(const char*name) { InputStack*nxt=inpstack; inpstack=malloc(sizeof(InputStack)); if(!inpstack) fatal("Allocation failed\n"); inpstack->classfp=classfp; |
︙ | ︙ | |||
647 648 649 650 651 652 653 | static void begin_macro(TokenList*mac) { MacroStack*ms=malloc(sizeof(MacroStack)); TokenList**ap=0; int a=0; int b=0; int c=0; if(StackProtection()) fatal("Stack overflow\n"); | < < < < < < < < < < < < < < < < < < < < < | 655 656 657 658 659 660 661 662 663 664 665 666 667 668 | static void begin_macro(TokenList*mac) { MacroStack*ms=malloc(sizeof(MacroStack)); TokenList**ap=0; int a=0; int b=0; int c=0; if(StackProtection()) fatal("Stack overflow\n"); ref_macro(mac); if(!ms) fatal("Allocation failed\n"); ms->tok=mac; ms->n=0; ms->args=0; for(;;) { nxttok1(); |
︙ | ︙ |
Modified comconfig.doc from [e827074f10] to [67db4df1f4].
︙ | ︙ | |||
12 13 14 15 16 17 18 | decimal notation, as a string token (not as a numeric token). CONFIG_DEFAULT_RESOURCES If defined, read resource configuration from the specified file if it cannot find the configuration file in the home directory. CONFIG_GLOBAL_HASH_SIZE | | > | > | 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 | decimal notation, as a string token (not as a numeric token). CONFIG_DEFAULT_RESOURCES If defined, read resource configuration from the specified file if it cannot find the configuration file in the home directory. CONFIG_GLOBAL_HASH_SIZE Size of global hash table when reading class definition file. This must be less than 65535. CONFIG_LOCAL_HASH_SIZE Size of local hash table when reading class definition file. This must be less than 65535. CONFIG_NO_PORTABLE If defined, then portable mode by checking argv[0] is disabled. (It is still possible to use portable mode by HEROMESH_PREFIX) CONFIG_USING_32BIT_TIMESTAMPS If defined, force use of 32-bit timestamps. (This is needed in order to |
︙ | ︙ |