Commit 4b99f5978f
Changed files (2)
std
test
std/io.zig
@@ -101,6 +101,7 @@ pub const OutStream = struct {
CloseBrace,
Integer,
IntegerWidth,
+ Character,
};
/// Calls print and then flushes the buffer.
@@ -155,6 +156,9 @@ pub const OutStream = struct {
width = 0;
state = State.Integer;
},
+ 'c' => {
+ state = State.Character;
+ },
else => @compileError("Unknown format character: " ++ []u8{c}),
},
State.CloseBrace => switch (c) {
@@ -188,6 +192,15 @@ pub const OutStream = struct {
'0' ... '9' => {},
else => @compileError("Unexpected character in format string: " ++ []u8{c}),
},
+ State.Character => switch (c) {
+ '}' => {
+ self.printAsciiChar(args[next_arg]);
+ next_arg += 1;
+ state = State.Start;
+ start_index = i + 1;
+ },
+ else => @compileError("Unexpected character in format string: " ++ []u8{c}),
+ },
}
}
comptime {
@@ -228,6 +241,14 @@ pub const OutStream = struct {
self.index += amt_printed;
}
+ pub fn printAsciiChar(self: &OutStream, c: u8) -> %void {
+ if (self.index + 1 >= self.buffer.len) {
+ %return self.flush();
+ }
+ self.buffer[self.index] = c;
+ self.index += 1;
+ }
+
pub fn flush(self: &OutStream) -> %void {
while (true) {
const write_ret = system.write(self.fd, &self.buffer[0], self.index);
test/run_tests.cpp
@@ -335,9 +335,9 @@ pub const b_text = a_text;
const io = @import("std").io;
pub fn main(args: [][]u8) -> %void {
- %%io.stdout.printf("Hello, world!\n{d4} {x3}\n", u32(12), u16(0x12));
+ %%io.stdout.printf("Hello, world!\n{d4} {x3} {c}\n", u32(12), u16(0x12), u8('a'));
}
- )SOURCE", "Hello, world!\n0012 012\n");
+ )SOURCE", "Hello, world!\n0012 012 a\n");
add_simple_case_libc("number literals", R"SOURCE(