2
0
Эх сурвалжийг харах

Fix issue #8 - https://github.com/gingerBill/Odin/issues/8

Ginger Bill 8 жил өмнө
parent
commit
12498b2d39
4 өөрчлөгдсөн 66 нэмэгдсэн , 89 устгасан
  1. 58 82
      code/demo.odin
  2. 3 2
      src/checker.c
  3. 1 1
      src/ir_print.c
  4. 4 4
      src/main.c

+ 58 - 82
code/demo.odin

@@ -1,85 +1,61 @@
+#import "atomic.odin";
 #import "fmt.odin";
+#import "hash.odin";
+#import "math.odin";
+#import "mem.odin";
+#import "opengl.odin";
 #import "os.odin";
-
-fgetc :: proc(fd : os.Handle) -> ?byte
-{
-	c : [1]byte;
-
-	if bytes_read, _ := os.read(fd, c[:]); bytes_read == 0
-	{
-		return nil;
-	}
-
-	return c[0];
-}
-
-main :: proc ()
-{
-	b := fgetc(os.stdin);
-
-	if bv, ok := b?; ok
-	{
-		fmt.println(b);
-	}
+#import win32 "sys/windows.odin";
+#import "sync.odin";
+#import "utf8.odin";
+
+T :: struct { x, y: int };
+thread_local t: T;
+
+main :: proc() {
+	immutable using t := T{123, 321};
+	fmt.println(t);
+
+
+	// foo :: proc(x: ^i32) -> (int, int) {
+	// 	fmt.println("^int");
+	// 	return 123, int(x^);
+	// }
+	// foo :: proc(x: rawptr) {
+	// 	fmt.println("rawptr");
+	// }
+
+	// THINGI :: 14451;
+	// THINGF :: 14451.1;
+
+	// a: i32 = 111111;
+	// b: f32;
+	// c: rawptr;
+	// fmt.println(foo(^a));
+	// foo(^b);
+	// foo(c);
+	// // foo(nil);
+	// atomic.store(^a, 1);
+
+	// foo :: proc() {
+	// 	fmt.printf("Zero args\n");
+	// }
+	// foo :: proc(i: int) {
+	// 	fmt.printf("int arg, i=%d\n", i);
+	// }
+	// foo :: proc(f: f64) {
+	// 	i := int(f);
+	// 	fmt.printf("f64 arg, f=%d\n", i);
+	// }
+
+	// foo();
+	// // foo(THINGI);
+	// foo(THINGF);
+	// foo(int(THINGI));
+	// fmt.println(THINGI);
+	// fmt.println(THINGF);
+
+	// f: proc();
+	// f = foo;
+	// f();
 }
-// #import "atomic.odin";
-// #import "fmt.odin";
-// #import "hash.odin";
-// #import "math.odin";
-// #import "mem.odin";
-// #import "opengl.odin";
-// #import "os.odin";
-// #import win32 "sys/windows.odin";
-// #import "sync.odin";
-// #import "utf8.odin";
-
-// T :: struct { x, y: int };
-// thread_local t: T;
-
-// main :: proc() {
-// 	immutable using t := T{123, 321};
-// 	fmt.println(t);
-
-
-// 	// foo :: proc(x: ^i32) -> (int, int) {
-// 	// 	fmt.println("^int");
-// 	// 	return 123, int(x^);
-// 	// }
-// 	// foo :: proc(x: rawptr) {
-// 	// 	fmt.println("rawptr");
-// 	// }
-
-// 	// THINGI :: 14451;
-// 	// THINGF :: 14451.1;
-
-// 	// a: i32 = 111111;
-// 	// b: f32;
-// 	// c: rawptr;
-// 	// fmt.println(foo(^a));
-// 	// foo(^b);
-// 	// foo(c);
-// 	// // foo(nil);
-// 	// atomic.store(^a, 1);
-
-// 	// foo :: proc() {
-// 	// 	fmt.printf("Zero args\n");
-// 	// }
-// 	// foo :: proc(i: int) {
-// 	// 	fmt.printf("int arg, i=%d\n", i);
-// 	// }
-// 	// foo :: proc(f: f64) {
-// 	// 	i := int(f);
-// 	// 	fmt.printf("f64 arg, f=%d\n", i);
-// 	// }
-
-// 	// foo();
-// 	// // foo(THINGI);
-// 	// foo(THINGF);
-// 	// foo(int(THINGI));
-// 	// fmt.println(THINGI);
-// 	// fmt.println(THINGF);
-
-// 	// f: proc();
-// 	// f = foo;
-// 	// f();
-// }

+ 3 - 2
src/checker.c

@@ -5,12 +5,13 @@ typedef enum AddressingMode {
 	Addressing_Invalid,
 
 	Addressing_NoValue,
-	Addressing_Value,
-	Addressing_Variable,
+	Addressing_Value,    // R-value
+	Addressing_Variable, // L-value
 	Addressing_Constant,
 	Addressing_Type,
 	Addressing_Builtin,
 	Addressing_Overload,
+
 	Addressing_Count,
 } AddressingMode;
 

+ 1 - 1
src/ir_print.c

@@ -141,7 +141,7 @@ void ir_print_type(irFileBuffer *f, irModule *m, Type *t) {
 	i64 word_bits = 8*s.word_size;
 	GB_ASSERT_NOT_NULL(t);
 	t = default_type(t);
-	// GB_ASSERT(is_type_typed(t));
+	GB_ASSERT(is_type_typed(t));
 
 	switch (t->kind) {
 	case Type_Basic:

+ 4 - 4
src/main.c

@@ -202,7 +202,7 @@ int main(int argc, char **argv) {
 	i32 exit_code = 0;
 	// For more passes arguments: http://llvm.org/docs/Passes.html
 	exit_code = win32_exec_command_line_app("llvm-opt", false,
-		"%.*sbin/opt %s -o %.*s.bc "
+		"\"%.*sbin/opt\" \"%s\" -o \"%.*s\".bc "
 		"-mem2reg "
 		"-memcpyopt "
 		"-die "
@@ -220,7 +220,7 @@ int main(int argc, char **argv) {
 	timings_start_section(&timings, str_lit("llvm-llc"));
 	// For more arguments: http://llvm.org/docs/CommandGuide/llc.html
 	exit_code = win32_exec_command_line_app("llvm-llc", false,
-		"%.*sbin/llc %.*s.bc -filetype=obj -O%d "
+		"\"%.*sbin/llc\" \"%.*s.bc\" -filetype=obj -O%d "
 		"%.*s "
 		// "-debug-pass=Arguments "
 		"",
@@ -240,7 +240,7 @@ int main(int argc, char **argv) {
 	for_array(i, checker.info.foreign_libraries) {
 		String lib = checker.info.foreign_libraries.e[i];
 		isize len = gb_snprintf(lib_str_buf, gb_size_of(lib_str_buf),
-		                        " %.*s.lib", LIT(lib));
+		                        " \"%.*s.lib\"", LIT(lib));
 		lib_str = gb_string_appendc(lib_str, lib_str_buf);
 	}
 
@@ -254,7 +254,7 @@ int main(int argc, char **argv) {
 	}
 
 	exit_code = win32_exec_command_line_app("msvc-link", true,
-		"link %.*s.obj -OUT:%.*s.%s %s "
+		"link \"%.*s\".obj -OUT:\"%.*s.%s\" %s "
 		"/defaultlib:libcmt "
 		"/nologo /incremental:no /opt:ref /subsystem:CONSOLE "
 		" %.*s "