mirror of
https://github.com/Ed94/Odin.git
synced 2026-08-07 16:18:52 +00:00
Fix checking termination of a procedure
This commit is contained in:
+66
-1
@@ -1,5 +1,70 @@
|
|||||||
|
#foreign_system_library "winmm" when ODIN_OS == "windows";
|
||||||
|
#import win32 "sys/windows.odin" when ODIN_OS == "windows";
|
||||||
#import "fmt.odin";
|
#import "fmt.odin";
|
||||||
|
|
||||||
|
timeGetTime :: proc() -> u32 #foreign #dll_import
|
||||||
|
GetSystemTimeAsFileTime :: proc(SystemTimeAsFileTime : ^win32.FILETIME) #foreign #dll_import
|
||||||
|
|
||||||
|
GetCommandLineArguments :: proc() -> []string {
|
||||||
|
argString := win32.GetCommandLineA();
|
||||||
|
fullArgString := to_odin_string(argString);
|
||||||
|
// Count Spaces
|
||||||
|
for r : fullArgString {
|
||||||
|
fmt.println(r);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
to_odin_string :: proc(c: ^byte) -> string {
|
||||||
|
s: string;
|
||||||
|
s.data = c;
|
||||||
|
while (c + s.count)^ != 0 {
|
||||||
|
s.count += 1;
|
||||||
|
}
|
||||||
|
return s;
|
||||||
|
}
|
||||||
|
//("Hellope!\x00" as string).data
|
||||||
|
|
||||||
|
MAGIC_VALUE :: 0xCA5E713F;
|
||||||
|
|
||||||
|
timing_file_header :: struct #ordered {
|
||||||
|
MagicValue : u32;
|
||||||
|
}
|
||||||
|
|
||||||
|
timing_file_date :: struct #ordered {
|
||||||
|
E : [2]u32;
|
||||||
|
}
|
||||||
|
|
||||||
|
timing_file_entry_flag :: enum {
|
||||||
|
Complete = 0x1,
|
||||||
|
NoErrors = 0x2,
|
||||||
|
}
|
||||||
|
|
||||||
|
timing_file_entry :: struct #ordered {
|
||||||
|
StarDate : timing_file_date;
|
||||||
|
Flags : u32;
|
||||||
|
MillisecondsElapsed : u32;
|
||||||
|
}
|
||||||
|
|
||||||
|
timing_entry_array :: struct #ordered {
|
||||||
|
Entries : []timing_file_entry;
|
||||||
|
}
|
||||||
|
|
||||||
|
GetClock :: proc () -> u32 {
|
||||||
|
return timeGetTime();
|
||||||
|
}
|
||||||
|
|
||||||
|
GetDate :: proc() -> timing_file_date {
|
||||||
|
Result : timing_file_date;
|
||||||
|
FileTime : win32.FILETIME;
|
||||||
|
GetSystemTimeAsFileTime(^FileTime);
|
||||||
|
|
||||||
|
Result.E[0] = FileTime.lo;
|
||||||
|
Result.E[1] = FileTime.hi;
|
||||||
|
|
||||||
|
return Result;
|
||||||
|
}
|
||||||
|
|
||||||
main :: proc () {
|
main :: proc () {
|
||||||
fmt.println("Hellope!");
|
EntryClock := GetClock();
|
||||||
|
GetCommandLineArguments();
|
||||||
}
|
}
|
||||||
|
|||||||
+3
-3
@@ -128,14 +128,14 @@ bool check_is_terminating(AstNode *node) {
|
|||||||
case_end;
|
case_end;
|
||||||
|
|
||||||
case_ast_node(ws, WhileStmt, node);
|
case_ast_node(ws, WhileStmt, node);
|
||||||
if (ws->cond == NULL && !check_has_break(ws->body, true)) {
|
if (ws->cond != NULL && !check_has_break(ws->body, true)) {
|
||||||
return true;
|
return check_is_terminating(ws->body);
|
||||||
}
|
}
|
||||||
case_end;
|
case_end;
|
||||||
|
|
||||||
case_ast_node(rs, ForStmt, node);
|
case_ast_node(rs, ForStmt, node);
|
||||||
if (!check_has_break(rs->body, true)) {
|
if (!check_has_break(rs->body, true)) {
|
||||||
return true;
|
return check_is_terminating(rs->body);
|
||||||
}
|
}
|
||||||
case_end;
|
case_end;
|
||||||
|
|
||||||
|
|||||||
Reference in New Issue
Block a user