X-Git-Url: https://ocean-lang.org/code/?p=ocean;a=blobdiff_plain;f=csrc%2Foceani.mdc;h=b83f6bca4e5a3683d1166281cca7c2852e4dfd9b;hp=8faff44e41b8f8f7ab7c954d1436b554efa7b297;hb=9e98e1c58af49338d0a0710e27ad0529a32345e6;hpb=63a5c13d3ae31de4cc0814e83feffed6d56e0da6 diff --git a/csrc/oceani.mdc b/csrc/oceani.mdc index 8faff44..b83f6bc 100644 --- a/csrc/oceani.mdc +++ b/csrc/oceani.mdc @@ -4221,22 +4221,27 @@ analysis is a bit more interesting at this level. while (al) { struct var *v = cast(var, al->left); struct value *vl = v->var->val; + struct value arg; if (argv[0] == NULL) { printf("Not enough args\n"); exit(1); } - al = cast(binode, al->right); - if (vl) - free_value(v->var->type, vl); + if (v->var->type != Tstr) { + printf("Arg not string!!\n"); // NOTEST + exit(2); // NOTEST + } if (!vl) { vl = val_alloc(c, v->var->type, NULL); v->var->val = vl; } - free_value(v->var->type, vl); - vl->str.len = strlen(argv[0]); - vl->str.txt = malloc(vl->str.len); - memcpy(vl->str.txt, argv[0], vl->str.len); + + arg.str.txt = argv[0]; + arg.str.len = strlen(argv[0]); + free_value(Tstr, vl); + dup_value(Tstr, &arg, vl); + + al = cast(binode, al->right); argv++; } v = interp_exec(c, p->right, &vtype);