]> Nishi Git Mirror - gwion.git/commitdiff
:art: Keep track of string *delim*
authorJérémie Astor <fennecdjay@gmail.com>
Mon, 16 Aug 2021 06:39:38 +0000 (08:39 +0200)
committerJérémie Astor <fennecdjay@gmail.com>
Mon, 16 Aug 2021 06:39:38 +0000 (08:39 +0200)
ast
fmt
src/emit/emit.c
src/lib/string.c
src/parse/check.c

diff --git a/ast b/ast
index 83f857146706db6c97b5489152cded2be8083852..1279070bc5b6fe3ed22bef485c5e66bd85f50da7 160000 (submodule)
--- a/ast
+++ b/ast
@@ -1 +1 @@
-Subproject commit 83f857146706db6c97b5489152cded2be8083852
+Subproject commit 1279070bc5b6fe3ed22bef485c5e66bd85f50da7
diff --git a/fmt b/fmt
index 2e1dfca4383f2672dc524ca999a1c014a24f503c..03d98cb98e0f51492f1b0e569debc01ddabd2167 160000 (submodule)
--- a/fmt
+++ b/fmt
@@ -1 +1 @@
-Subproject commit 2e1dfca4383f2672dc524ca999a1c014a24f503c
+Subproject commit 03d98cb98e0f51492f1b0e569debc01ddabd2167
index 4b348a8a7ade40f99622e1daa2b99a5f46c918c6..cede186500c63278ad64c82329f458145322beac 100644 (file)
@@ -713,13 +713,14 @@ ANN static m_bool emit_prim_char(const Emitter emit, const m_str *str) {
   return GW_OK;
 }
 
-ANN static m_bool emit_prim_str(const Emitter emit, const m_str *str) {
+ANN static m_bool emit_prim_str(const Emitter emit, const struct AstString *str) {
   const Value v = prim_self(str)->value;
   if (!v->d.obj) {
-    char c[strlen(*str) + 1];
-    if (strlen(*str)) {
-      strcpy(c, *str);
-      CHECK_BB(escape_str(emit, c, prim_pos(str)));
+    const size_t sz = strlen(str->data);
+    char c[sz + 1];
+    if (sz) {
+      strcpy(c, str->data);
+      CHECK_BB(escape_str(emit, c, prim_pos(str->data)));
       ;
     } else
       c[0] = '\0';
index 06814347d3149743c20b02b40c644c9b0d584690..05c56d9afebaa97290a928e91ead7be4fc9b16ff 100644 (file)
@@ -45,8 +45,8 @@ describe_string_logical(eq, (!strcmp(STRING(lhs), STRING(rhs))))
     return env->gwion->type[et_bool];                                          \
   }
 
-opck_str(eq, !strcmp(bin->lhs->d.prim.d.str, bin->rhs->d.prim.d.str))
-    opck_str(neq, strcmp(bin->lhs->d.prim.d.str, bin->rhs->d.prim.d.str))
+opck_str(eq, !strcmp(bin->lhs->d.prim.d.string.data, bin->rhs->d.prim.d.string.data))
+    opck_str(neq, strcmp(bin->lhs->d.prim.d.string.data, bin->rhs->d.prim.d.string.data))
 
         static CTOR(string_ctor) {
   STRING(o) = _mp_calloc(shred->info->mp, 1);
@@ -56,10 +56,11 @@ static DTOR(string_dtor) { free_mstr(shred->info->mp, STRING(o)); }
 
 ID_CHECK(check_funcpp) {
   ((Exp_Primary *)prim)->prim_type = ae_prim_str;
-  ((Exp_Primary *)prim)->d.str     = env->func        ? env->func->name
+  ((Exp_Primary *)prim)->d.string.data     = env->func        ? env->func->name
                                      : env->class_def ? env->class_def->name
                                                       : env->name;
-  ((Exp_Primary *)prim)->value     = global_string(env, prim->d.str);
+// handle delim?
+  ((Exp_Primary *)prim)->value     = global_string(env, prim->d.string.data);
   return prim->value->type;
 }
 
index 17fe2b3a5f98377026557b8c308d8bb1f9e3775c..217289bf3543d166478f644c7fbaa68f764e50cd 100644 (file)
@@ -348,9 +348,9 @@ ANN static Type prim_id_non_res(const Env env, const Symbol *data) {
   return v->type;
 }
 
-ANN Type check_prim_str(const Env env, const m_str *data) {
+ANN Type check_prim_str(const Env env, const struct AstString *data) {
   if (!prim_self(data)->value)
-    prim_self(data)->value = global_string(env, *data);
+    prim_self(data)->value = global_string(env, data->data);
   return env->gwion->type[et_string]; // prim->value
 }