aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorgingerBill <bill@gingerbill.org>2017-11-04 00:16:54 +0000
committergingerBill <bill@gingerbill.org>2017-11-04 00:16:54 +0000
commit6bc5584addffa20639d5bc7dcc789f76a298e1e5 (patch)
treed7b0816c7b2a1d70bd0e7f90ed576a9bf6c8fb3f
parent121f0185d6923c84d64ee75326d15013eb5d1fe0 (diff)
Fix fmt printing `uintptr` type
-rw-r--r--core/_preload.odin7
-rw-r--r--core/bits.odin23
-rw-r--r--core/fmt.odin34
-rw-r--r--core/math.odin5
-rw-r--r--core/mem.odin6
-rw-r--r--core/opengl.odin51
-rw-r--r--core/sys/wgl.odin2
-rw-r--r--core/thread.odin10
-rw-r--r--src/ir.cpp12
9 files changed, 77 insertions, 73 deletions
diff --git a/core/_preload.odin b/core/_preload.odin
index 7cc2f07e0..92458572d 100644
--- a/core/_preload.odin
+++ b/core/_preload.odin
@@ -38,6 +38,7 @@ Type_Info_Enum_Value :: union {
rune,
i8, i16, i32, i64, i128, int,
u8, u16, u32, u64, u128, uint,
+ uintptr,
f32, f64,
};
@@ -687,13 +688,13 @@ __string_decode_rune :: inline proc "contextless" (s: string) -> (rune, int) {
return utf8.decode_rune(s);
}
-__bounds_check_error_loc :: proc "contextless" (using loc := #caller_location, index, count: int) {
+__bounds_check_error_loc :: inline proc "contextless" (using loc := #caller_location, index, count: int) {
__bounds_check_error(file_path, int(line), int(column), index, count);
}
-__slice_expr_error_loc :: proc "contextless" (using loc := #caller_location, low, high, max: int) {
+__slice_expr_error_loc :: inline proc "contextless" (using loc := #caller_location, low, high, max: int) {
__slice_expr_error(file_path, int(line), int(column), low, high, max);
}
-__substring_expr_error_loc :: proc "contextless" (using loc := #caller_location, low, high: int) {
+__substring_expr_error_loc :: inline proc "contextless" (using loc := #caller_location, low, high: int) {
__substring_expr_error(file_path, int(line), int(column), low, high);
}
diff --git a/core/bits.odin b/core/bits.odin
index 225300ffb..774602b8e 100644
--- a/core/bits.odin
+++ b/core/bits.odin
@@ -4,23 +4,24 @@ U32_MIN :: u32(0);
U64_MIN :: u64(0);
U128_MIN :: u128(0);
-I8_MIN :: i8(-0x80);
-I16_MIN :: i16(-0x8000);
-I32_MIN :: i32(-0x8000_0000);
-I64_MIN :: i64(-0x8000_0000_0000_0000);
-I128_MIN :: i128(-0x8000_0000_0000_0000_0000_0000_0000_0000);
-
U8_MAX :: ~u8(0);
U16_MAX :: ~u16(0);
U32_MAX :: ~u32(0);
U64_MAX :: ~u64(0);
U128_MAX :: ~u128(0);
-I8_MAX :: i8(0x7f);
-I16_MAX :: i16(0x7fff);
-I32_MAX :: i32(0x7fff_ffff);
-I64_MAX :: i64(0x7fff_ffff_ffff_ffff);
-I128_MAX :: i128(0x7fff_ffff_ffff_ffff_ffff_ffff_ffff_ffff);
+I8_MIN :: i8( ~u8(0) >> 1);
+I16_MIN :: i16( ~u16(0) >> 1);
+I32_MIN :: i32( ~u32(0) >> 1);
+I64_MIN :: i64( ~u64(0) >> 1);
+I128_MIN :: i128(~u128(0) >> 1);
+
+I8_MAX :: -I8_MIN - 1;
+I16_MAX :: -I16_MIN - 1;
+I32_MAX :: -I32_MIN - 1;
+I64_MAX :: -I64_MIN - 1;
+I128_MAX :: -I128_MIN - 1;
+
count_ones :: proc(i: u8) -> u8 { foreign __llvm_core @(link_name="llvm.ctpop.i8") __llvm_ctpop :: proc(u8) -> u8 ---; return __llvm_ctpop(i); }
count_ones :: proc(i: i8) -> i8 { foreign __llvm_core @(link_name="llvm.ctpop.i8") __llvm_ctpop :: proc(i8) -> i8 ---; return __llvm_ctpop(i); }
diff --git a/core/fmt.odin b/core/fmt.odin
index be6c032ac..084c5f9e2 100644
--- a/core/fmt.odin
+++ b/core/fmt.odin
@@ -184,8 +184,9 @@ write_type :: proc(buf: ^String_Buffer, ti: ^Type_Info) {
write_string(buf, info.name);
case Type_Info_Integer:
switch {
- case ti == type_info_of(int): write_string(buf, "int");
- case ti == type_info_of(uint): write_string(buf, "uint");
+ case ti == type_info_of(int): write_string(buf, "int");
+ case ti == type_info_of(uint): write_string(buf, "uint");
+ case ti == type_info_of(uintptr): write_string(buf, "uintptr");
case:
if info.signed do write_byte(buf, 'i');
else do write_byte(buf, 'u');
@@ -674,19 +675,20 @@ enum_value_to_string :: proc(v: any) -> (string, bool) {
a := any{v.data, type_info_base(e.base)};
switch v in a {
- case rune: return get_str(v, e);
- case i8: return get_str(v, e);
- case i16: return get_str(v, e);
- case i32: return get_str(v, e);
- case i64: return get_str(v, e);
- case i128: return get_str(v, e);
- case int: return get_str(v, e);
- case u8: return get_str(v, e);
- case u16: return get_str(v, e);
- case u32: return get_str(v, e);
- case u64: return get_str(v, e);
- case u128: return get_str(v, e);
- case uint: return get_str(v, e);
+ case rune: return get_str(v, e);
+ case i8: return get_str(v, e);
+ case i16: return get_str(v, e);
+ case i32: return get_str(v, e);
+ case i64: return get_str(v, e);
+ case i128: return get_str(v, e);
+ case int: return get_str(v, e);
+ case u8: return get_str(v, e);
+ case u16: return get_str(v, e);
+ case u32: return get_str(v, e);
+ case u64: return get_str(v, e);
+ case u128: return get_str(v, e);
+ case uint: return get_str(v, e);
+ case uintptr: return get_str(v, e);
case f32: return get_str(v, e);
case f64: return get_str(v, e);
@@ -1017,6 +1019,8 @@ fmt_arg :: proc(fi: ^Fmt_Info, arg: any, verb: rune) {
case i64: fmt_int(fi, u128(a), true, 64, verb);
case i128: fmt_int(fi, u128(a), true, 128, verb);
+ case uintptr: fmt_int(fi, u128(a), false, 8*size_of(uintptr), verb);
+
case uint: fmt_int(fi, u128(a), false, 8*size_of(uint), verb);
case u8: fmt_int(fi, u128(a), false, 8, verb);
case u16: fmt_int(fi, u128(a), false, 16, verb);
diff --git a/core/math.odin b/core/math.odin
index 0ea41e520..41cd64718 100644
--- a/core/math.odin
+++ b/core/math.odin
@@ -27,6 +27,7 @@ Mat4 :: [4][4]f32;
Complex :: complex64;
+@(default_calling_convention="c")
foreign __llvm_core {
@(link_name="llvm.sqrt.f32")
sqrt :: proc(x: f32) -> f32 ---;
@@ -54,8 +55,8 @@ foreign __llvm_core {
fmuladd :: proc(a, b, c: f64) -> f64 ---;
}
-tan :: proc(θ: f32) -> f32 do return sin(θ)/cos(θ);
-tan :: proc(θ: f64) -> f64 do return sin(θ)/cos(θ);
+tan :: proc "c" (θ: f32) -> f32 do return sin(θ)/cos(θ);
+tan :: proc "c" (θ: f64) -> f64 do return sin(θ)/cos(θ);
lerp :: proc(a, b: $T, t: $E) -> (x: T) do return a*(1-t) + b*t;
diff --git a/core/mem.odin b/core/mem.odin
index b385555a1..ea13e8a20 100644
--- a/core/mem.odin
+++ b/core/mem.odin
@@ -1,9 +1,9 @@
import "core:raw.odin"
foreign __llvm_core {
- @(link_name = "llvm.bswap.i16") swap :: proc(b: u16) -> u16 ---;
- @(link_name = "llvm.bswap.i32") swap :: proc(b: u32) -> u32 ---;
- @(link_name = "llvm.bswap.i64") swap :: proc(b: u64) -> u64 ---;
+ @(link_name = "llvm.bswap.i16") swap :: proc(b: u16) -> u16 ---;
+ @(link_name = "llvm.bswap.i32") swap :: proc(b: u32) -> u32 ---;
+ @(link_name = "llvm.bswap.i64") swap :: proc(b: u64) -> u64 ---;
}
set :: proc "contextless" (data: rawptr, value: i32, len: int) -> rawptr {
diff --git a/core/opengl.odin b/core/opengl.odin
index 6941f8026..0103e36ad 100644
--- a/core/opengl.odin
+++ b/core/opengl.odin
@@ -10,32 +10,33 @@ export "core:opengl_constants.odin"
_ := compile_assert(ODIN_OS != "osx");
+@(default_calling_convention="c", link_prefix="gl")
foreign lib {
- @(link_name="glClear") Clear :: proc(mask: u32) ---;
- @(link_name="glClearColor") ClearColor :: proc(r, g, b, a: f32) ---;
- @(link_name="glBegin") Begin :: proc(mode: i32) ---;
- @(link_name="glEnd") End :: proc() ---;
- @(link_name="glFinish") Finish :: proc() ---;
- @(link_name="glBlendFunc") BlendFunc :: proc(sfactor, dfactor: i32) ---;
- @(link_name="glEnable") Enable :: proc(cap: i32) ---;
- @(link_name="glDisable") Disable :: proc(cap: i32) ---;
- @(link_name="glGenTextures") GenTextures :: proc(count: i32, result: ^u32) ---;
- @(link_name="glDeleteTextures") DeleteTextures :: proc(count: i32, result: ^u32) ---;
- @(link_name="glTexParameteri") TexParameteri :: proc(target, pname, param: i32) ---;
- @(link_name="glTexParameterf") TexParameterf :: proc(target: i32, pname: i32, param: f32) ---;
- @(link_name="glBindTexture") BindTexture :: proc(target: i32, texture: u32) ---;
- @(link_name="glLoadIdentity") LoadIdentity :: proc() ---;
- @(link_name="glViewport") Viewport :: proc(x, y, width, height: i32) ---;
- @(link_name="glOrtho") Ortho :: proc(left, right, bottom, top, near, far: f64) ---;
- @(link_name="glColor3f") Color3f :: proc(r, g, b: f32) ---;
- @(link_name="glVertex3f") Vertex3f :: proc(x, y, z: f32) ---;
- @(link_name="glGetError") GetError :: proc() -> i32 ---;
- @(link_name="glGetString") GetString :: proc(name: i32) -> ^u8 ---;
- @(link_name="glGetIntegerv") GetIntegerv :: proc(name: i32, v: ^i32) ---;
- @(link_name="glTexCoord2f") TexCoord2f :: proc(x, y: f32) ---;
- @(link_name="glTexImage2D") TexImage2D :: proc(target, level, internal_format,
- width, height, border,
- format, type_: i32, pixels: rawptr) ---;
+ Clear :: proc(mask: u32) ---;
+ ClearColor :: proc(r, g, b, a: f32) ---;
+ Begin :: proc(mode: i32) ---;
+ End :: proc() ---;
+ Finish :: proc() ---;
+ BlendFunc :: proc(sfactor, dfactor: i32) ---;
+ Enable :: proc(cap: i32) ---;
+ Disable :: proc(cap: i32) ---;
+ GenTextures :: proc(count: i32, result: ^u32) ---;
+ DeleteTextures :: proc(count: i32, result: ^u32) ---;
+ TexParameteri :: proc(target, pname, param: i32) ---;
+ TexParameterf :: proc(target: i32, pname: i32, param: f32) ---;
+ BindTexture :: proc(target: i32, texture: u32) ---;
+ LoadIdentity :: proc() ---;
+ Viewport :: proc(x, y, width, height: i32) ---;
+ Ortho :: proc(left, right, bottom, top, near, far: f64) ---;
+ Color3f :: proc(r, g, b: f32) ---;
+ Vertex3f :: proc(x, y, z: f32) ---;
+ GetError :: proc() -> i32 ---;
+ GetString :: proc(name: i32) -> ^u8 ---;
+ GetIntegerv :: proc(name: i32, v: ^i32) ---;
+ TexCoord2f :: proc(x, y: f32) ---;
+ TexImage2D :: proc(target, level, internal_format: i32,
+ width, height, border: i32,
+ format, type_: i32, pixels: rawptr) ---;
}
diff --git a/core/sys/wgl.odin b/core/sys/wgl.odin
index 1de6790dc..4f8aa29e7 100644
--- a/core/sys/wgl.odin
+++ b/core/sys/wgl.odin
@@ -1,7 +1,7 @@
when ODIN_OS == "windows" {
foreign import "system:opengl32.lib"
+ using import "core:sys/windows.odin"
}
-using import "core:sys/windows.odin"
CONTEXT_MAJOR_VERSION_ARB :: 0x2091;
diff --git a/core/thread.odin b/core/thread.odin
index 113c0f3a2..bd24e66e1 100644
--- a/core/thread.odin
+++ b/core/thread.odin
@@ -25,11 +25,7 @@ Thread :: struct {
create :: proc(procedure: Thread_Proc) -> ^Thread {
win32_thread_id: u32;
- __windows_thread_entry_proc :: proc "c" (data: rawptr) -> i32 {
- if data == nil do return 0;
-
- t := cast(^Thread)data;
-
+ __windows_thread_entry_proc :: proc "c" (t: ^Thread) -> i32 {
c := context;
if t.use_init_context {
c = t.init_context;
@@ -40,11 +36,11 @@ create :: proc(procedure: Thread_Proc) -> ^Thread {
exit = t.procedure(t);
}
- return cast(i32)exit;
+ return i32(exit);
}
- win32_thread_proc := cast(rawptr)__windows_thread_entry_proc;
+ win32_thread_proc := rawptr(__windows_thread_entry_proc);
thread := new(Thread);
win32_thread := win32.create_thread(nil, 0, win32_thread_proc, thread, win32.CREATE_SUSPENDED, &win32_thread_id);
diff --git a/src/ir.cpp b/src/ir.cpp
index 4056dc88f..e015a7056 100644
--- a/src/ir.cpp
+++ b/src/ir.cpp
@@ -376,12 +376,12 @@ enum irParamPasskind {
};
struct irValueParam {
- irParamPasskind kind;
- irProcedure * parent;
- Entity * entity;
- Type * type;
- Type * original_type;
- Array<irValue *> referrers;
+ irParamPasskind kind;
+ irProcedure * parent;
+ Entity * entity;
+ Type * type;
+ Type * original_type;
+ Array<irValue *> referrers;
};
struct irValue {