Add extensions without allocating and copying string

This commit is contained in:
Benjamin Vedder 2022-01-14 11:22:17 +01:00
parent 6c0c85bbee
commit 06386fb28f
2 changed files with 25 additions and 1 deletions

View File

@ -53,7 +53,7 @@ extension_fptr extensions_lookup(UINT sym) {
bool extensions_add(char *sym_str, extension_fptr ext) {
VALUE symbol;
int res = symrepr_addsym(sym_str, &symbol);
int res = symrepr_addsym_const(sym_str, &symbol);
if (!res) return false;

View File

@ -232,6 +232,30 @@ int symrepr_addsym(char *name, UINT* id) {
return 1;
}
// Same as above, but assume that the name pointer stays valid
int symrepr_addsym_const(char *name, UINT* id) {
if (strlen(name) == 0) return 0; // failure if empty symbol
uint32_t *m = memory_allocate(3);
if (m == NULL) {
return 0;
}
m[NAME] = (uint32_t)name;
if (symlist == NULL) {
m[NEXT] = (uint32_t) NULL;
symlist = m;
} else {
m[NEXT] = (uint32_t) symlist;
symlist = m;
}
m[ID] = MAX_SPECIAL_SYMBOLS + next_symbol_id++;
*id = m[ID];
return 1;
}
unsigned int symrepr_size(void) {
unsigned int n = 0;