WIP: assembly
authorLukas Krickl <lukas@krickl.dev>
Mon, 13 Nov 2023 18:39:45 +0000 (19:39 +0100)
committerLukas Krickl <lukas@krickl.dev>
Mon, 13 Nov 2023 18:39:45 +0000 (19:39 +0100)
include/ulas.h
src/test.c
src/ulas.c

index d5d41784459fb4b713dba40cbbd1ec3d3a9a14d1..a772c9b5794ccd0dc4e65afa76c4f9e1067354d1 100644 (file)
@@ -94,12 +94,12 @@ struct ulas_str {
  */
 
 struct ulas {
-  char **strs;
-  size_t strslen;
-
   char *filename;
   size_t line;
 
+  // holds the current token
+  struct ulas_str tok;
+
   // internal counter
   // used whenever a new unique number might be needed
   int icntr;
@@ -226,6 +226,7 @@ extern struct ulas_config ulascfg;
 
 struct ulas_config ulas_cfg_from_env(void);
 void ulas_init(struct ulas_config cfg);
+void ulas_free(void);
 
 int ulas_main(struct ulas_config cfg);
 
@@ -250,6 +251,9 @@ struct ulas_str ulas_str(size_t n);
 // ensure the string buffer is at least n bytes long, if not realloc
 struct ulas_str ulas_strensr(struct ulas_str *s, size_t maxlen);
 
+// require at least n bytes + the current strlen
+struct ulas_str ulas_strreq(struct ulas_str *s, size_t n);
+
 void ulas_strfree(struct ulas_str *s);
 
 /*
index f5badfdf7b55dd5ac29259b4ee97d9361937b8ba..51c973157e26b4cc43a077f8bc51ef5876a60fd0 100644 (file)
@@ -152,5 +152,7 @@ int main(int arc, char **argv) {
   test_strbuf();
   test_preproc();
 
+  ulas_free();
+
   return 0;
 }
index f6e2dc6a1b7a9c9d08e6cfe8c9a75a465bd2681b..0e9d7b326f67da2ce5770a529d2d68d7502f528a 100644 (file)
@@ -11,6 +11,7 @@ struct ulas_config ulascfg;
 struct ulas ulas;
 
 void ulas_init(struct ulas_config cfg) {
+  // init global cfg
   if (ulasin == NULL) {
     ulasin = stdin;
   }
@@ -22,9 +23,14 @@ void ulas_init(struct ulas_config cfg) {
   }
   ulascfg = cfg;
 
+  // init assembly context
   memset(&ulas, 0, sizeof(ulas));
+
+  ulas.tok = ulas_str(8);
 }
 
+void ulas_free(void) { ulas_strfree(&ulas.tok); }
+
 int ulas_icntr(void) { return ulas.icntr++; }
 
 struct ulas_config ulas_cfg_from_env(void) {
@@ -89,6 +95,8 @@ cleanup:
     fclose(ulasin);
   }
 
+  ulas_free();
+
   return rc;
 }
 
@@ -224,6 +232,10 @@ struct ulas_str ulas_strensr(struct ulas_str *s, size_t maxlen) {
   return *s;
 }
 
+struct ulas_str ulas_strreq(struct ulas_str *s, size_t n) {
+  return ulas_strensr(s, strnlen(s->buf, s->maxlen)+n); 
+}
+
 void ulas_strfree(struct ulas_str *s) {
   if (s->buf) {
     free(s->buf);
@@ -694,6 +706,8 @@ int ulas_asmline(FILE *dst, FILE *src, const char *line, size_t n) {
 
   fprintf(dst, "%s", line);
 
+  // read the first token and decide
+
   return rc;
 }