feat: replace M4 callback writers with safe handles
This commit is contained in:
@@ -0,0 +1,7 @@
|
||||
unit m4_bad_buffer_writer;
|
||||
|
||||
fn main() -> void {
|
||||
var raw: [4]u8 = [0, 0, 0, 0];
|
||||
var buf: []mut u8 = raw[..];
|
||||
let w = io.buf_writer(buf);
|
||||
}
|
||||
@@ -2,6 +2,6 @@ unit m4_bad_writer;
|
||||
|
||||
fn main() -> i32 {
|
||||
var x: i32 = 0;
|
||||
@fprint(&mut x, "bad");
|
||||
@fprint(x, "bad");
|
||||
return 0;
|
||||
}
|
||||
|
||||
@@ -8,15 +8,15 @@ fn main() -> i32 {
|
||||
var raw3: [8]u8 = [0, 0, 0, 0, 0, 0, 0, 0];
|
||||
var raw4: [8]u8 = [0, 0, 0, 0, 0, 0, 0, 0];
|
||||
var raw5: [8]u8 = [0, 0, 0, 0, 0, 0, 0, 0];
|
||||
var buf: []u8 = raw[..];
|
||||
var buf2: []u8 = raw2[..];
|
||||
var buf3: []u8 = raw3[..];
|
||||
var buf4: []u8 = raw4[..];
|
||||
var buf5: []u8 = raw5[..];
|
||||
let w: io.Writer = io.buf_writer(&mut buf);
|
||||
var buf: []mut u8 = raw[..];
|
||||
var buf2: []mut u8 = raw2[..];
|
||||
var buf3: []mut u8 = raw3[..];
|
||||
var buf4: []mut u8 = raw4[..];
|
||||
var buf5: []mut u8 = raw5[..];
|
||||
let w: io.Writer = io.null_writer();
|
||||
const LOCAL_FMT: str = "value={}\n";
|
||||
@print(FMT, 7, 15, 'A', "yes", true);
|
||||
@fprint(&mut w, LOCAL_FMT, 12);
|
||||
@fprint(w, LOCAL_FMT, 12);
|
||||
let n: usize = @sprint(buf2, "A\x42\u0043defghi");
|
||||
let n2: usize = @sprint(buf3, "xy");
|
||||
let inner_n: usize = @sprint(buf4, "xy");
|
||||
|
||||
@@ -1,5 +1,5 @@
|
||||
unit m4_prop;
|
||||
|
||||
pub fn propagate(w: &mut io.Writer) -> !void {
|
||||
pub fn propagate(w: io.Writer) -> !void {
|
||||
try @fprint(w, "a{}b", 1);
|
||||
}
|
||||
|
||||
+4
-16
@@ -1,23 +1,11 @@
|
||||
#include "prop.c"
|
||||
|
||||
static unsigned short calls;
|
||||
|
||||
static unsigned short fail_write(void *ctx, const unsigned char *p,
|
||||
unsigned long n)
|
||||
{
|
||||
(void)ctx;
|
||||
(void)p;
|
||||
(void)n;
|
||||
++calls;
|
||||
return calls == 1 ? 7 : 0;
|
||||
}
|
||||
|
||||
int main(void)
|
||||
{
|
||||
fe_writer w;
|
||||
unsigned short result;
|
||||
w.ctx=0;
|
||||
w.write_fn=fail_write;
|
||||
result=fe_m4_prop_propagate(&w);
|
||||
return (result==7 && calls==1) ? 0 : 1;
|
||||
w.tag=2;
|
||||
w.handle=99;
|
||||
result=fe_m4_prop_propagate(w);
|
||||
return result==1 ? 0 : 1;
|
||||
}
|
||||
|
||||
@@ -2,7 +2,7 @@ unit m4_try_fprint;
|
||||
|
||||
fn main() -> !void {
|
||||
var raw: [4]u8 = [0, 0, 0, 0];
|
||||
var buf: []u8 = raw[..];
|
||||
let w: io.Writer = io.buf_writer(&mut buf);
|
||||
try @fprint(&mut w, "ok");
|
||||
var buf: []mut u8 = raw[..];
|
||||
let w: io.Writer = io.null_writer();
|
||||
try @fprint(w, "ok");
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user