mirror of
https://github.com/Ed94/Odin.git
synced 2026-08-06 07:38:48 +00:00
Merge branch 'master' of https://github.com/odin-lang/Odin
This commit is contained in:
@@ -215,6 +215,12 @@ unmarshal_value :: proc(p: ^Parser, v: any) -> (err: Unmarshal_Error) {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
switch dst in &v {
|
||||||
|
// Handle json.Value as an unknown type
|
||||||
|
case Value:
|
||||||
|
dst = parse_value(p) or_return
|
||||||
|
return
|
||||||
|
}
|
||||||
|
|
||||||
#partial switch token.kind {
|
#partial switch token.kind {
|
||||||
case .Null:
|
case .Null:
|
||||||
|
|||||||
@@ -2058,7 +2058,7 @@ gb_internal lbValue lb_build_builtin_proc(lbProcedure *p, Ast *expr, TypeAndValu
|
|||||||
i64 al = exact_value_to_i64(type_and_value_of_expr(ce->args[1]).value);
|
i64 al = exact_value_to_i64(type_and_value_of_expr(ce->args[1]).value);
|
||||||
|
|
||||||
lbValue res = {};
|
lbValue res = {};
|
||||||
res.type = t_u8_ptr;
|
res.type = alloc_type_multi_pointer(t_u8);
|
||||||
res.value = LLVMBuildArrayAlloca(p->builder, lb_type(p->module, t_u8), sz.value, "");
|
res.value = LLVMBuildArrayAlloca(p->builder, lb_type(p->module, t_u8), sz.value, "");
|
||||||
LLVMSetAlignment(res.value, cast(unsigned)al);
|
LLVMSetAlignment(res.value, cast(unsigned)al);
|
||||||
return res;
|
return res;
|
||||||
@@ -2379,9 +2379,15 @@ gb_internal lbValue lb_build_builtin_proc(lbProcedure *p, Ast *expr, TypeAndValu
|
|||||||
{
|
{
|
||||||
lbValue dst = lb_build_expr(p, ce->args[0]);
|
lbValue dst = lb_build_expr(p, ce->args[0]);
|
||||||
lbValue src = lb_build_expr(p, ce->args[1]);
|
lbValue src = lb_build_expr(p, ce->args[1]);
|
||||||
src = lb_address_from_load_or_generate_local(p, src);
|
|
||||||
Type *t = type_deref(dst.type);
|
Type *t = type_deref(dst.type);
|
||||||
lb_mem_copy_non_overlapping(p, dst, src, lb_const_int(p->module, t_int, type_size_of(t)), false);
|
|
||||||
|
if (is_type_simd_vector(t)) {
|
||||||
|
LLVMValueRef store = LLVMBuildStore(p->builder, src.value, dst.value);
|
||||||
|
LLVMSetAlignment(store, 1);
|
||||||
|
} else {
|
||||||
|
src = lb_address_from_load_or_generate_local(p, src);
|
||||||
|
lb_mem_copy_non_overlapping(p, dst, src, lb_const_int(p->module, t_int, type_size_of(t)), false);
|
||||||
|
}
|
||||||
return {};
|
return {};
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -2389,9 +2395,17 @@ gb_internal lbValue lb_build_builtin_proc(lbProcedure *p, Ast *expr, TypeAndValu
|
|||||||
{
|
{
|
||||||
lbValue src = lb_build_expr(p, ce->args[0]);
|
lbValue src = lb_build_expr(p, ce->args[0]);
|
||||||
Type *t = type_deref(src.type);
|
Type *t = type_deref(src.type);
|
||||||
lbAddr dst = lb_add_local_generated(p, t, false);
|
if (is_type_simd_vector(t)) {
|
||||||
lb_mem_copy_non_overlapping(p, dst.addr, src, lb_const_int(p->module, t_int, type_size_of(t)), false);
|
lbValue res = {};
|
||||||
return lb_addr_load(p, dst);
|
res.type = t;
|
||||||
|
res.value = LLVMBuildLoad2(p->builder, lb_type(p->module, t), src.value, "");
|
||||||
|
LLVMSetAlignment(res.value, 1);
|
||||||
|
return res;
|
||||||
|
} else {
|
||||||
|
lbAddr dst = lb_add_local_generated(p, t, false);
|
||||||
|
lb_mem_copy_non_overlapping(p, dst.addr, src, lb_const_int(p->module, t_int, type_size_of(t)), false);
|
||||||
|
return lb_addr_load(p, dst);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
case BuiltinProc_atomic_add:
|
case BuiltinProc_atomic_add:
|
||||||
|
|||||||
Reference in New Issue
Block a user