32bit operations for session storage + rethinking ownership of char* names for symbol table storage (now it is up to the symbol table and we let it be invalidated)

This commit is contained in:
Richard Thier 2024-09-29 01:38:07 +02:00
parent ac3d9f41c6
commit 967960d9bc
2 changed files with 12 additions and 3 deletions

View File

@ -144,6 +144,8 @@ enum SLC_SESSION_OP {
SLC_SESSION_PUSH, SLC_SESSION_PUSH,
SLC_SESSION_GET, SLC_SESSION_GET,
SLC_SESSION_SET, SLC_SESSION_SET,
SLC_SESSION_GET32,
SLC_SESSION_SET32,
SLC_SESSION_PROCESS SLC_SESSION_PROCESS
}; };
typedef enum SLC_SESSION_OP SLC_SESSION_OP; typedef enum SLC_SESSION_OP SLC_SESSION_OP;
@ -166,6 +168,11 @@ union symptr {
}; };
typedef union symptr symptr; typedef union symptr symptr;
struct slc_tmp_charptr {
char *ptr;
};
typedef struct slc_tmp_charptr slc_tmp_charptr;
/** /**
* Function-abstraction for a "symbol-table". * Function-abstraction for a "symbol-table".
* *
@ -178,11 +185,11 @@ typedef union symptr symptr;
* Rem.: On GET we return a word* in case the key is to a word and a regular uint32_t* if its a variable name! * Rem.: On GET we return a word* in case the key is to a word and a regular uint32_t* if its a variable name!
* *
* @param op Defines which operation the caller wants. * @param op Defines which operation the caller wants.
* @param key The key (both for SET and GET) * @param key The key (both for SET and GET). This pointer can get easily invalidated so you might need a copy on SET.
* @param ptr When adding a found word/variable to the symbol table, the key will point to this word* or uint32_t* * @param ptr When adding a found word/variable to the symbol table, the key will point to this word* or uint32_t*
* @returns The word/var definition stored for the key, or NULL when it is not stored yet or op is SET and there was an error. * @returns The word/var definition stored for the key, or NULL when it is not stored yet or op is SET and there was an error.
*/ */
typedef symptr (*sym)(SLC_SYM_OP op, char *key, symptr ptr); typedef symptr (*sym)(SLC_SYM_OP op, slc_tmp_charptr key, symptr ptr);
/** /**
* Function-abstraction for an integer "stack". * Function-abstraction for an integer "stack".
@ -210,6 +217,8 @@ typedef uint32_t (*stack)(SLC_STACK_OP op, uint32_t param);
* SLC_SESSION_PUSH adds the given byte (value in i) to the end of the session storage (by growing it) - j unused * SLC_SESSION_PUSH adds the given byte (value in i) to the end of the session storage (by growing it) - j unused
* SLC_SESSION_GET gets byte at the ith accessor index - j unused * SLC_SESSION_GET gets byte at the ith accessor index - j unused
* SLC_SESSION_SET gets byte at the ith accessor index to be of (byte)j * SLC_SESSION_SET gets byte at the ith accessor index to be of (byte)j
* SLC_SESSION_GET32 gets uint32_t at the ith accessor index - j unused. XXX: Beware, architectures unaligned access crash!
* SLC_SESSION_SET32 gets uint32_t at the ith accessor index to be of j. XXX: Beware, architectures unaligned access crash!
* SLC_SESSION_PROCESS gets the last j bytes and moves them overriding bytes at index i, then "shrinks" the storage by j. * SLC_SESSION_PROCESS gets the last j bytes and moves them overriding bytes at index i, then "shrinks" the storage by j.
* *
* @param op Defines which operation the caller wants. * @param op Defines which operation the caller wants.

2
main.c
View File

@ -6,7 +6,7 @@
#define SLC_DEBUG #define SLC_DEBUG
#include "engine/slc.h" #include "engine/slc.h"
symptr nopsym(SLC_SYM_OP op, char *key, symptr ptr) { symptr nopsym(SLC_SYM_OP op, slc_tmp_charptr key, symptr ptr) {
symptr ret; symptr ret;
ret.worp = NULL; ret.worp = NULL;
return ret; return ret;