Infix and Postfix procedure calls

This commit is contained in:
gingerBill
2016-08-23 11:11:01 +01:00
parent aaecb18c8f
commit 975705f1fc
9 changed files with 153 additions and 78 deletions
+11 -11
View File
@@ -53,8 +53,8 @@ print_rune :: proc(r: rune) {
print_string(str);
}
print_space :: proc() { print_rune(' '); }
print_nl :: proc() { print_rune('\n'); }
print_space :: proc() { print_rune($ $); }
print_nl :: proc() { print_rune($\n$); }
print_int :: proc(i: int) {
print_int_base(i, 10);
@@ -70,7 +70,7 @@ print_int_base :: proc(i, base: int) {
i = -i;
}
if i == 0 {
buf[len] = '0';
buf[len] = $0$;
len++;
}
for i > 0 {
@@ -80,7 +80,7 @@ print_int_base :: proc(i, base: int) {
}
if negative {
buf[len] = '-';
buf[len] = $-$;
len++;
}
@@ -89,7 +89,7 @@ print_int_base :: proc(i, base: int) {
}
print_uint :: proc(i: uint) {
print__uint(i, 10, 0, ' ');
print__uint(i, 10, 0, $ $);
}
print__uint :: proc(i, base: uint, min_width: int, pad_char: byte) {
NUM_TO_CHAR_TABLE :: "0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz@$";
@@ -97,7 +97,7 @@ print__uint :: proc(i, base: uint, min_width: int, pad_char: byte) {
buf: [65]byte;
len := 0;
if i == 0 {
buf[len] = '0';
buf[len] = $0$;
len++;
}
for i > 0 {
@@ -119,18 +119,18 @@ print_bool :: proc(b : bool) {
else { print_string("false"); }
}
print_pointer :: proc(p: rawptr) #inline { print__uint(p as uint, 16, 0, ' '); }
print_pointer :: proc(p: rawptr) #inline { print__uint(p as uint, 16, 0, $ $); }
print_f32 :: proc(f: f32) #inline { print__f64(f as f64, 7); }
print_f64 :: proc(f: f64) #inline { print__f64(f, 10); }
print__f64 :: proc(f: f64, decimal_places: int) {
if f == 0 {
print_rune('0');
print_rune($0$);
return;
}
if f < 0 {
print_rune('-');
print_rune($-$);
f = -f;
}
@@ -140,7 +140,7 @@ print__f64 :: proc(f: f64, decimal_places: int) {
buf: [22]byte;
len := 0;
if i == 0 {
buf[len] = '0';
buf[len] = $0$;
len++;
}
for i > 0 {
@@ -156,7 +156,7 @@ print__f64 :: proc(f: f64, decimal_places: int) {
print_u64(i);
f -= i as f64;
print_rune('.');
print_rune($.$);
mult := 10.0;
for decimal_places := 6; decimal_places >= 0; decimal_places-- {
+14 -9
View File
@@ -11,7 +11,7 @@ main :: proc() {
// types();
// data_control();
run_game();
// run_game();
}
hellope :: proc() -> int {
@@ -118,7 +118,7 @@ procedures :: proc() {
return x + y;
}
print_int(add(3, 4)); // 7
print_rune('\n');
print_nl();
add_v2 :: proc(x, y: int) -> int {
return x + y;
@@ -152,6 +152,11 @@ procedures :: proc() {
proc2 :: proc(a, b: int) #no_inline {
print_int(a + b);
}
print_int(3 'add' 4); // Infix style
print_nl();
print_int(12 'fibonacci); // Postfix style
print_nl();
}
@@ -175,7 +180,7 @@ constants :: proc() {
c := DIFF;
}
nl :: proc() { print_rune('\n'); }
nl :: proc() { print_nl(); }
types :: proc() {
@@ -390,8 +395,8 @@ types :: proc() {
// FORENOTE: 5 * h was originally allowed but it was an edge case in the
// compiler I didn't think it was enough to justify have it it.
print_f32(i[0]); print_rune(',');
print_f32(i[1]); print_rune('\n');
print_f32(i[0]); print_rune($,$);
print_f32(i[1]); print_nl();
}
@@ -452,12 +457,12 @@ void main() {
}`;
hearts1 := '💕';
hearts2 := '\U0001f495'; // 32 bit
hearts1 := $💕$;
hearts2 := $\U0001f495$; // 32 bit
hearts3 := "\xf0\x9f\x92\x95"; // Note it's a string, should I allow untyped string -> untyped rune casts?
:= '㐒';
㐒16 := '\u4db5'; // 16 bit
:= $$;
㐒16 := $\u4db5$; // 16 bit
// String ideas "nicked" from Go, so far. I think I might change how some of it works later.
}
+1 -1
View File
@@ -2,7 +2,7 @@
#load "opengl.odin"
#load "math.odin"
TWO_HEARTS :: '💕';
TWO_HEARTS :: $💕$;
win32_perf_count_freq := GetQueryPerformanceFrequency();
time_now :: proc() -> f64 {
+13 -7
View File
@@ -61,7 +61,7 @@ floor :: proc(x: f32) -> f32 {
}
return (x-0.5) as int as f32;
}
ceil :: proc(x: f32) -> f32 {
ceil :: proc(x: f32) -> f32 {
if x < 0 {
return x as int as f32;
}
@@ -91,14 +91,20 @@ to_degrees :: proc(radians: f32) -> f32 { return radians * 360 / MATH_TAU; }
vec2_dot :: proc(a, b: Vec2) -> f32 { c := a*b; return c[0] + c[1]; }
vec3_dot :: proc(a, b: Vec3) -> f32 { c := a*b; return c[0] + c[1] + c[2]; }
vec4_dot :: proc(a, b: Vec4) -> f32 { c := a*b; return c[0] + c[1] + c[2] + c[3]; }
dot2 :: proc(a, b: Vec2) -> f32 { c := a*b; return c[0] + c[1]; }
dot3 :: proc(a, b: Vec3) -> f32 { c := a*b; return c[0] + c[1] + c[2]; }
dot4 :: proc(a, b: Vec4) -> f32 { c := a*b; return c[0] + c[1] + c[2] + c[3]; }
cross :: proc(x, y: Vec3) -> Vec3 {
a := swizzle(x, 1, 2, 0) * swizzle(y, 2, 0, 1);
b := swizzle(x, 2, 0, 1) * swizzle(y, 1, 2, 0);
return a - b;
}
vec2_mag :: proc(v: Vec2) -> f32 { return fsqrt(vec2_dot(v, v)); }
vec3_mag :: proc(v: Vec3) -> f32 { return fsqrt(vec3_dot(v, v)); }
vec4_mag :: proc(v: Vec4) -> f32 { return fsqrt(vec4_dot(v, v)); }
vec2_mag :: proc(v: Vec2) -> f32 { return fsqrt(v 'dot2' v); }
vec3_mag :: proc(v: Vec3) -> f32 { return fsqrt(v 'dot3' v); }
vec4_mag :: proc(v: Vec4) -> f32 { return fsqrt(v 'dot4' v); }
vec2_norm :: proc(v: Vec2) -> Vec2 { return v / Vec2{vec2_mag(v)}; }
vec3_norm :: proc(v: Vec3) -> Vec3 { return v / Vec3{vec3_mag(v)}; }
+36 -36
View File
@@ -291,43 +291,43 @@ VK_INSERT :: 0x2D;
VK_DELETE :: 0x2E;
VK_HELP :: 0x2F;
VK_0 :: '0';
VK_1 :: '1';
VK_2 :: '2';
VK_3 :: '3';
VK_4 :: '4';
VK_5 :: '5';
VK_6 :: '6';
VK_7 :: '7';
VK_8 :: '8';
VK_9 :: '9';
VK_0 :: $0$;
VK_1 :: $1$;
VK_2 :: $2$;
VK_3 :: $3$;
VK_4 :: $4$;
VK_5 :: $5$;
VK_6 :: $6$;
VK_7 :: $7$;
VK_8 :: $8$;
VK_9 :: $9$;
VK_A :: 'A';
VK_B :: 'B';
VK_C :: 'C';
VK_D :: 'D';
VK_E :: 'E';
VK_F :: 'F';
VK_G :: 'G';
VK_H :: 'H';
VK_I :: 'I';
VK_J :: 'J';
VK_K :: 'K';
VK_L :: 'L';
VK_M :: 'M';
VK_N :: 'N';
VK_O :: 'O';
VK_P :: 'P';
VK_Q :: 'Q';
VK_R :: 'R';
VK_S :: 'S';
VK_T :: 'T';
VK_U :: 'U';
VK_V :: 'V';
VK_W :: 'W';
VK_X :: 'X';
VK_Y :: 'Y';
VK_Z :: 'Z';
VK_A :: $A$;
VK_B :: $B$;
VK_C :: $C$;
VK_D :: $D$;
VK_E :: $E$;
VK_F :: $F$;
VK_G :: $G$;
VK_H :: $H$;
VK_I :: $I$;
VK_J :: $J$;
VK_K :: $K$;
VK_L :: $L$;
VK_M :: $M$;
VK_N :: $N$;
VK_O :: $O$;
VK_P :: $P$;
VK_Q :: $Q$;
VK_R :: $R$;
VK_S :: $S$;
VK_T :: $T$;
VK_U :: $U$;
VK_V :: $V$;
VK_W :: $W$;
VK_X :: $X$;
VK_Y :: $Y$;
VK_Z :: $Z$;
VK_LWIN :: 0x5B;
VK_RWIN :: 0x5C;