From: Lukas Krickl Date: Sun, 3 Dec 2023 12:07:35 +0000 (+0100) Subject: Fixed scope tests X-Git-Url: https://git.krickl.dev/?a=commitdiff_plain;h=35355ccf5147342fbce6621632f5808331f234b6;p=ulas%2F.git Fixed scope tests --- diff --git a/include/ulas.h b/include/ulas.h index fe14628..c942e13 100644 --- a/include/ulas.h +++ b/include/ulas.h @@ -8,6 +8,7 @@ // if this is used as a path use stdin or stdout instead #define ULAS_STDFILEPATH "-" +#define ULAS_SYMNAMEMAX 256 #define ULAS_PATHMAX 4096 #define ULAS_LINEMAX 4096 #define ULAS_OUTBUFMAX 64 diff --git a/src/test.c b/src/test.c index df50573..e1c97c0 100644 --- a/src/test.c +++ b/src/test.c @@ -3,7 +3,7 @@ #include #define ULAS_TOKMAX 64 - +#define ULAS_SYMNAMEMAX 256 #define TESTBEGIN(name) printf("[test %s]\n", (name)); #define TESTEND(name) printf("[%s ok]\n", (name)); @@ -312,8 +312,8 @@ void test_asminstr(void) { void test_symscope(void) { TESTBEGIN("symscope"); - ASSERT_SYMSCOPE(0, "t1", -1, 1); - ASSERT_SYMSCOPE(-1, "t1", -1, 1); + ASSERT_SYMSCOPE(0, "t1:", -1, 1); + ASSERT_SYMSCOPE(-1, "t1:", -1, 1); TESTEND("symscope"); } diff --git a/src/ulas.c b/src/ulas.c index 6654413..6466d64 100644 --- a/src/ulas.c +++ b/src/ulas.c @@ -211,12 +211,19 @@ int ulas_islabelname(const char *tok, unsigned long n) { return tok[n - 1] == ':' && ulas_isname(tok, n - 1); } -struct ulas_sym *ulas_symbolresolve(const char *name, int *rc) { +struct ulas_sym *ulas_symbolresolve(const char *cname, int *rc) { + char name[ULAS_SYMNAMEMAX]; + long len = strlen(cname); + assert(len < ULAS_SYMNAMEMAX); + strncpy(name, cname, len); + if (name[len - 1] == ':') { + name[len - 1] = '\0'; + } + for (int i = 0; i < ulas.syms.len; i++) { struct ulas_sym *sym = &ulas.syms.buf[i]; // when scope is the same as the current one, or scope 0 (global) if ((sym->scope & ulas.scope) == 0 && strcmp(name, sym->name) == 0) { - puts("scope"); return sym; } } @@ -248,7 +255,11 @@ int ulas_symbolset(const char *name, int scope, struct ulas_tok tok, // def new symbol struct ulas_sym new_sym = {strdup(name), tok, scope, ulas.pass, constant}; // last char of name has to be : so we trim it away - new_sym.name[strlen(new_sym.name) - 1] = '\0'; + long len = strlen(new_sym.name); + assert(len < ULAS_SYMNAMEMAX); + if (new_sym.name[len - 1] == ':') { + new_sym.name[len - 1] = '\0'; + } ulas_symbufpush(&ulas.syms, new_sym); } else if (exisitng->lastdefin != ulas.pass) { // redefine if not defined this pass