Skip to content

Commit

Permalink
Fix checking termination of a procedure
Browse files Browse the repository at this point in the history
  • Loading branch information
gingerBill committed Jan 5, 2017
1 parent 1356dfe commit 207b252
Show file tree
Hide file tree
Showing 2 changed files with 70 additions and 5 deletions.
69 changes: 67 additions & 2 deletions code/demo.odin
Original file line number Diff line number Diff line change
@@ -1,5 +1,70 @@
#foreign_system_library "winmm" when ODIN_OS == "windows";
#import win32 "sys/windows.odin" when ODIN_OS == "windows";
#import "fmt.odin";

main :: proc() {
fmt.println("Hellope!");
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 () {
EntryClock := GetClock();
GetCommandLineArguments();
}
6 changes: 3 additions & 3 deletions src/checker/stmt.c
Original file line number Diff line number Diff line change
Expand Up @@ -128,14 +128,14 @@ bool check_is_terminating(AstNode *node) {
case_end;

case_ast_node(ws, WhileStmt, node);
if (ws->cond == NULL && !check_has_break(ws->body, true)) {
return true;
if (ws->cond != NULL && !check_has_break(ws->body, true)) {
return check_is_terminating(ws->body);
}
case_end;

case_ast_node(rs, ForStmt, node);
if (!check_has_break(rs->body, true)) {
return true;
return check_is_terminating(rs->body);
}
case_end;

Expand Down

0 comments on commit 207b252

Please sign in to comment.