Changes
This commit is contained in:
parent
1ac96b0d60
commit
767f03e765
3 changed files with 21 additions and 3 deletions
|
@ -441,13 +441,27 @@ Value add(Value a, Value b){
|
|||
break;
|
||||
case T_str:
|
||||
if(a.vstr.len + b.vstr.len > 4){
|
||||
runtime_err("not implem");
|
||||
u32 tmp = flisp_alloc(a.vstr.len + b.vstr.len);
|
||||
if(!tmp){
|
||||
a.tag = ntag;
|
||||
break;
|
||||
}
|
||||
a.vstr.pos = tmp;
|
||||
char *nstr = get_addr(tmp);
|
||||
if(a.vstr.len > 4)
|
||||
memcpy(nstr, get_addr(a.vstr.pos), a.vstr.len);
|
||||
else
|
||||
memcpy(nstr, a.vstr.str, a.vstr.len);
|
||||
if(b.vstr.len > 4)
|
||||
memcpy(nstr+a.vstr.len, get_addr(b.vstr.pos), b.vstr.len);
|
||||
else
|
||||
memcpy(nstr+a.vstr.len, b.vstr.str, b.vstr.len);
|
||||
}
|
||||
else {
|
||||
for(int i = 0; i < b.vstr.len; i++)
|
||||
a.vstr.str[a.vstr.len + i] = b.vstr.str[i];
|
||||
a.vstr.len += b.vstr.len;
|
||||
}
|
||||
a.vstr.len += b.vstr.len;
|
||||
break;
|
||||
default:
|
||||
runtime_err("Add : Invalid types");
|
||||
|
|
|
@ -49,5 +49,6 @@ Value cast(Tag tag, Value b);
|
|||
// Makes a copy of the string
|
||||
// If len < 0, will copy up to a '\0'
|
||||
Value str_to_val(char *str, i32 len);
|
||||
void clean_strval(Value str);
|
||||
|
||||
void symbol_map_add_bi(HashMap *map);
|
||||
|
|
|
@ -38,8 +38,11 @@ void assign(Value *dst, Value src){
|
|||
printf("Assign : %d -> %d\n", src.tag.type, dst->tag.type);
|
||||
#endif
|
||||
if((dst->tag.type == src.tag.type || dst->tag.type == T_any)
|
||||
&& dst->tag.is_array == src.tag.is_array)
|
||||
&& dst->tag.is_array == src.tag.is_array){
|
||||
if(dst->tag.type == T_str)
|
||||
clean_strval(*dst);
|
||||
*dst = src;
|
||||
}
|
||||
else{
|
||||
fprintf(stderr, "Warning : Possibly incorrect assignement\n"
|
||||
"This may error in the future\n");
|
||||
|
|
Loading…
Add table
Reference in a new issue