zig

fork of https://codeberg.org/ziglang/zig
Log | Files | Refs | README | LICENSE

commit 1abb4e59be4ceed603ec377d89b4b8ce831dbebe (tree)
parent fb1e3a5be976c76f821abf387bdd69446f2ab07b
Author: Andrew Kelley <superjoe30@gmail.com>
Date:   Sat,  2 Jan 2016 21:56:33 -0700

fix various bugs related to guess number example

Diffstat:
Mexample/guess_number/main.zig | 4+++-
Msrc/analyze.cpp | 1+
Msrc/codegen.cpp | 1+
Msrc/parser.cpp | 2+-
Mstd/std.zig | 34+++++++++++++++++++---------------
5 files changed, 25 insertions(+), 17 deletions(-)

diff --git a/example/guess_number/main.zig b/example/guess_number/main.zig @@ -10,7 +10,9 @@ pub fn main(argc: isize, argv: &&u8, env: &&u8) -> i32 { print_str("Welcome to the Guess Number Game in Zig.\n"); var seed : u32; - if (os_get_random_bytes(&seed as &u8, 4) != 0) { + var err : isize; + // TODO #sizeof(u32) instead of 4 + if ({err = os_get_random_bytes(&seed as &u8, 4); err != 4}) { // TODO full error message fprint_str(stderr_fileno, "unable to get random bytes"); return 1; diff --git a/src/analyze.cpp b/src/analyze.cpp @@ -196,6 +196,7 @@ static TypeTableEntry *get_array_type(CodeGen *g, TypeTableEntry *child_type, ui entry->size_in_bits = child_type->size_in_bits * array_size; entry->align_in_bits = child_type->align_in_bits; + entry->di_type = LLVMZigCreateDebugArrayType(g->dbuilder, entry->size_in_bits, entry->align_in_bits, child_type->di_type, array_size); entry->data.array.child_type = child_type; diff --git a/src/codegen.cpp b/src/codegen.cpp @@ -1570,6 +1570,7 @@ static void do_code_gen(CodeGen *g) { add_debug_source_node(g, var->decl_node); var->value_ref = LLVMBuildAlloca(g->builder, var->type->type_ref, buf_ptr(&var->name)); + LLVMSetAlignment(var->value_ref, var->type->align_in_bits / 8); } var->di_loc_var = LLVMZigCreateLocalVariable(g->dbuilder, tag, diff --git a/src/parser.cpp b/src/parser.cpp @@ -628,7 +628,7 @@ static uint8_t parse_char_literal(ParseContext *pc, Token *token) { } else if (return_count > 1) { ast_error(pc, token, "character literal too long"); } - return return_count; + return return_value; } static void parse_string_literal(ParseContext *pc, Token *token, Buf *buf, bool *out_c_str, diff --git a/std/std.zig b/std/std.zig @@ -1,9 +1,6 @@ const SYS_write : usize = 1; const SYS_exit : usize = 60; -const SYS_getrandom : usize = 278; - -const stdout_fileno : isize = 1; -const stderr_fileno : isize = 2; +const SYS_getrandom : usize = 318; fn syscall1(number: usize, arg1: usize) -> usize { asm volatile ("syscall" @@ -19,32 +16,37 @@ fn syscall3(number: usize, arg1: usize, arg2: usize, arg3: usize) -> usize { : "rcx", "r11") } -pub fn getrandom(buf: &u8, count: usize, flags: u32) -> i32 { - return syscall3(SYS_getrandom, buf as usize, count, flags as usize) as i32; -} - pub fn write(fd: isize, buf: &const u8, count: usize) -> isize { - return syscall3(SYS_write, fd as usize, buf as usize, count) as isize; + syscall3(SYS_write, fd as usize, buf as usize, count) as isize } pub fn exit(status: i32) -> unreachable { syscall1(SYS_exit, status as usize); - unreachable; + unreachable +} + +pub fn getrandom(buf: &u8, count: usize, flags: u32) -> isize { + syscall3(SYS_getrandom, buf as usize, count, flags as usize) as isize } +const stdout_fileno : isize = 1; +const stderr_fileno : isize = 2; + // TODO error handling -pub fn os_get_random_bytes(buf: &u8, count: usize) -> i32 { - return getrandom(buf, count, 0); +pub fn os_get_random_bytes(buf: &u8, count: usize) -> isize { + getrandom(buf, count, 0) } // TODO error handling // TODO handle buffering and flushing (mutex protected) -pub fn print_str(str: string) -> isize { fprint_str(stdout_fileno, str) } +pub fn print_str(str: string) -> isize { + fprint_str(stdout_fileno, str) +} // TODO error handling // TODO handle buffering and flushing (mutex protected) pub fn fprint_str(fd: isize, str: string) -> isize { - return write(fd, str.ptr, str.len); + write(fd, str.ptr, str.len) } // TODO handle buffering and flushing (mutex protected) @@ -56,7 +58,9 @@ pub fn print_u64(x: u64) -> isize { return write(stdout_fileno, buf.ptr, len); } -fn digit_to_char(digit: u64) -> u8 { '0' + (digit as u8) } +fn digit_to_char(digit: u64) -> u8 { + '0' + (digit as u8) +} const max_u64_base10_digits: usize = 20;