From fee81a2dbda7791f462adc70e080e4bb6e96365f Mon Sep 17 00:00:00 2001 From: Raymaekers Luca Date: Tue, 18 Mar 2025 11:26:40 +0100 Subject: Bug fixes Fixed not outputting '@' if no keyword follows Fixed not outputting newline after @expand expression --- build/metac | Bin 32816 -> 28576 bytes examples/table.c | 27 +++++++++++++++++++++++++++ examples/table.meta | Bin 0 -> 15488 bytes examples/table.meta.c | 21 +++++++++++++++++++++ source/expected.c | 7 ------- source/meta.c | 16 +++++----------- source/table.c | 27 --------------------------- source/table.meta | Bin 21088 -> 0 bytes source/table.meta.c | 25 ------------------------- 9 files changed, 53 insertions(+), 70 deletions(-) create mode 100644 examples/table.c create mode 100755 examples/table.meta create mode 100644 examples/table.meta.c delete mode 100644 source/expected.c delete mode 100644 source/table.c delete mode 100755 source/table.meta delete mode 100644 source/table.meta.c diff --git a/build/metac b/build/metac index cac4e03..790907c 100755 Binary files a/build/metac and b/build/metac differ diff --git a/examples/table.c b/examples/table.c new file mode 100644 index 0000000..63edb16 --- /dev/null +++ b/examples/table.c @@ -0,0 +1,27 @@ +#include + +@table(name, str) MyEnumTable +{ + { A "A" } + { B "Beau Gosse" } + { C "C" } +} + +typedef enum { +@expand(MyEnumTable a) +` MyEnum_$(a.name),` + MyEnum_Count +} MyEnum; + +char *StringTable[MyEnum_Count] = { +@expand(MyEnumTable a) +` $(a.str),` +}; + +int +main(int Argc, char *Args[]) +{ + printf("@: %s\n", StringTable[MyEnum_B]); + + return 0; +} diff --git a/examples/table.meta b/examples/table.meta new file mode 100755 index 0000000..2976f54 Binary files /dev/null and b/examples/table.meta differ diff --git a/examples/table.meta.c b/examples/table.meta.c new file mode 100644 index 0000000..5534457 --- /dev/null +++ b/examples/table.meta.c @@ -0,0 +1,21 @@ +#include + + + +typedef enum { + MyEnum_A, // "A" MyEnum_B, // "Beau Gosse" MyEnum_C, // "C" MyEnum_Count +} MyEnum; + +char *StringTable[MyEnum_Count] = { + "A", + "Beau Gosse", + "C", +}; + +int +main(int Argc, char *Args[]) +{ + printf("%s\n", StringTable[MyEnum_B]); + + return 0; +} diff --git a/source/expected.c b/source/expected.c deleted file mode 100644 index 6db128a..0000000 --- a/source/expected.c +++ /dev/null @@ -1,7 +0,0 @@ -typedef enum { - MyEnum_A, - MyEnum_B, - MyEnum_C, - MyEnum_Count -} MyEnum; - diff --git a/source/meta.c b/source/meta.c index 1eb643d..9b7faff 100644 --- a/source/meta.c +++ b/source/meta.c @@ -180,12 +180,11 @@ main(int ArgC, char *Args[]) { Filename = Args[1]; } -#if 1 else { - Filename = "table.c"; + fprintf(stderr, "Usage: %s [filename]\n", Args[0]); + return 1; } -#endif // NOTE(luca): The memory is assumed to stay mapped until program exits, because we will use // pointers into that memory. @@ -239,7 +238,6 @@ main(int ArgC, char *Args[]) } Assert(ExpressionTable); - // TODO: not used yet while (IsWhitespace(In[At]) && At < InSize) At++; Assert(At < InSize); ExpressionTableArgumentAt = At; @@ -309,17 +307,13 @@ main(int ArgC, char *Args[]) memcpy(Out, Expansion.Memory, Expansion.Size); Out += Expansion.Size; } - else if (In[At] == '`') - { - // ERROR: When the last character is '`' does not print. - *Out++ = '\n'; - } - else + else if (In[At] != '`') { *Out++ = In[At++]; } } + *Out++ = '\n'; } Assert(At < InSize); @@ -486,7 +480,7 @@ main(int ArgC, char *Args[]) } else { - // ERROR: What if the code contains a non meta-"@_expand" tag ??? + *Out++ = '@'; *Out++ = In[At]; } diff --git a/source/table.c b/source/table.c deleted file mode 100644 index d2ec1ad..0000000 --- a/source/table.c +++ /dev/null @@ -1,27 +0,0 @@ -#include - -@table(name, str) MyEnumTable -{ - { A "A" } - { B "B" } - { C "C" } -} - -typedef enum { -@expand(MyEnumTable a) - `MyEnum_$(a.name),` -MyEnum_Count -} MyEnum; - -char *StringTable[MyEnum_Count] = { -@expand(MyEnumTable a) `$(a.str),` -}; - - -int -main(int Argc, char *Args[]) -{ - printf("%s\n", StringTable[MyEnum_B]); - - return 0; -} diff --git a/source/table.meta b/source/table.meta deleted file mode 100755 index 63edbd2..0000000 Binary files a/source/table.meta and /dev/null differ diff --git a/source/table.meta.c b/source/table.meta.c deleted file mode 100644 index 4f38e0e..0000000 --- a/source/table.meta.c +++ /dev/null @@ -1,25 +0,0 @@ -#include - - - -typedef enum { -MyEnum_A, -MyEnum_B, -MyEnum_C, -MyEnum_Count -} MyEnum; - -char *StringTable[MyEnum_Count] = { -"A", -"B", -"C", -}; - - -int -main(int Argc, char *Args[]) -{ - printf("%s\n", StringTable[MyEnum_B]); - - return 0; -} -- cgit v1.2.3