blueloveTH 1 год назад
Родитель
Сommit
881e94e8b0
4 измененных файлов с 19 добавлено и 10 удалено
  1. 1 0
      include/pocketpy/common/vector.h
  2. 4 3
      src/common/sstream.c
  3. 12 0
      src/common/vector.c
  4. 2 7
      src/compiler/lexer.c

+ 1 - 0
include/pocketpy/common/vector.h

@@ -34,6 +34,7 @@ c11_vector c11_vector__copy(const c11_vector* self);
 void c11_vector__reserve(c11_vector* self, int capacity);
 void c11_vector__clear(c11_vector* self);
 void* c11_vector__emplace(c11_vector* self);
+c11_array c11_vector__submit(c11_vector* self);
 
 #define c11__getitem(T, self, index) (((T*)(self)->data)[index])
 #define c11__setitem(T, self, index, value) ((T*)(self)->data)[index] = value;

+ 4 - 3
src/common/sstream.c

@@ -152,12 +152,13 @@ void pk_SStream__write_any(pk_SStream* self, const char* fmt, const pk_AnyStr* a
 
 py_Str pk_SStream__submit(pk_SStream* self) {
     c11_vector__push(char, &self->data, '\0');
+    c11_array a = c11_vector__submit(&self->data);
     // TODO: optimize c11__isascii
     py_Str retval = {
-        .size = self->data.count - 1,
-        .is_ascii = c11__isascii((char*)self->data.data, self->data.count),
+        .size = a.count - 1,
+        .is_ascii = c11__isascii((char*)a.data, a.count),
         .is_sso = false,
-        ._ptr = (char*)self->data.data
+        ._ptr = (char*)a.data
     };
     return retval;
 }

+ 12 - 0
src/common/vector.c

@@ -62,3 +62,15 @@ void* c11_vector__emplace(c11_vector* self){
     self->count++;
     return p;
 }
+
+c11_array c11_vector__submit(c11_vector* self){
+    c11_array retval = {
+        .data = self->data,
+        .count = self->count,
+        .elem_size = self->elem_size
+    };
+    self->data = NULL;
+    self->count = 0;
+    self->capacity = 0;
+    return retval;
+}

+ 2 - 7
src/compiler/lexer.c

@@ -739,13 +739,8 @@ Error* pk_Lexer__process(pk_SourceData_ src, c11_array* out_tokens){
         }
     }
     // set out_tokens
-    *out_tokens = (c11_array){
-        .data = lexer.nexts.data,
-        .count = lexer.nexts.count,
-        .elem_size = lexer.nexts.elem_size
-    };
-    c11_vector__ctor(&lexer.nexts, sizeof(Token));
-    
+    *out_tokens = c11_vector__submit(&lexer.nexts);
+
     pk_Lexer__dtor(&lexer);
     return NULL;
 }