diff --git a/core/runtime/internal.odin b/core/runtime/internal.odin index bf8a7c9c9..4a707f196 100644 --- a/core/runtime/internal.odin +++ b/core/runtime/internal.odin @@ -2,31 +2,31 @@ package runtime import "core:os" -bswap_16 :: proc "pure" (x: u16) -> u16 { +bswap_16 :: proc "none" (x: u16) -> u16 { return x>>8 | x<<8; } -bswap_32 :: proc "pure" (x: u32) -> u32 { +bswap_32 :: proc "none" (x: u32) -> u32 { return x>>24 | (x>>8)&0xff00 | (x<<8)&0xff0000 | x<<24; } -bswap_64 :: proc "pure" (x: u64) -> u64 { +bswap_64 :: proc "none" (x: u64) -> u64 { return u64(bswap_32(u32(x))) | u64(bswap_32(u32(x>>32))); } -bswap_128 :: proc "pure" (x: u128) -> u128 { +bswap_128 :: proc "none" (x: u128) -> u128 { return u128(bswap_64(u64(x))) | u128(bswap_64(u64(x>>64))); } -bswap_f32 :: proc "pure" (f: f32) -> f32 { +bswap_f32 :: proc "none" (f: f32) -> f32 { x := transmute(u32)f; z := x>>24 | (x>>8)&0xff00 | (x<<8)&0xff0000 | x<<24; return transmute(f32)z; } -bswap_f64 :: proc "pure" (f: f64) -> f64 { +bswap_f64 :: proc "none" (f: f64) -> f64 { x := transmute(u64)f; z := u64(bswap_32(u32(x))) | u64(bswap_32(u32(x>>32))); return transmute(f64)z; diff --git a/src/check_decl.cpp b/src/check_decl.cpp index c8070598b..639bf7d4f 100644 --- a/src/check_decl.cpp +++ b/src/check_decl.cpp @@ -1197,13 +1197,15 @@ void check_proc_body(CheckerContext *ctx_, Token token, DeclInfo *decl, Type *ty ctx->curr_proc_sig = type; ctx->curr_proc_calling_convention = type->Proc.calling_convention; - switch (type->Proc.calling_convention) { - case ProcCC_None: - error(body, "Procedures with the calling convention \"none\" are not allowed a body"); - break; - case ProcCC_PureNone: - error(body, "Procedures with the calling convention \"pure_none\" are not allowed a body"); - break; + if (ctx->pkg->name != "runtime") { + switch (type->Proc.calling_convention) { + case ProcCC_None: + error(body, "Procedures with the calling convention \"none\" are not allowed a body"); + break; + case ProcCC_PureNone: + error(body, "Procedures with the calling convention \"pure_none\" are not allowed a body"); + break; + } } ast_node(bs, BlockStmt, body);