2
0
Эх сурвалжийг харах

Minor correction to bytes.Buffer's vtable

gingerBill 4 жил өмнө
parent
commit
a82c902f99

+ 4 - 0
core/bytes/buffer.odin

@@ -310,6 +310,10 @@ _buffer_vtable := &io.Stream_VTable{
 		b := (^Buffer)(s.stream_data);
 		b := (^Buffer)(s.stream_data);
 		return buffer_write_byte(b, c);
 		return buffer_write_byte(b, c);
 	},
 	},
+	impl_write_rune = proc(s: io.Stream, r: rune) -> (int, io.Error) {
+		b := (^Buffer)(s.stream_data);
+		return buffer_write_rune(b, r);
+	},
 	impl_unread_byte = proc(s: io.Stream) -> io.Error {
 	impl_unread_byte = proc(s: io.Stream) -> io.Error {
 		b := (^Buffer)(s.stream_data);
 		b := (^Buffer)(s.stream_data);
 		return buffer_unread_byte(b);
 		return buffer_unread_byte(b);

+ 26 - 18
core/io/io.odin

@@ -44,22 +44,23 @@ Error :: enum i32 {
 	Empty = -1,
 	Empty = -1,
 }
 }
 
 
-Close_Proc       :: distinct proc(using s: Stream) -> Error;
-Flush_Proc       :: distinct proc(using s: Stream) -> Error;
-Seek_Proc        :: distinct proc(using s: Stream, offset: i64, whence: Seek_From) -> (n: i64, err: Error);
-Size_Proc        :: distinct proc(using s: Stream) -> i64;
-Read_Proc        :: distinct proc(using s: Stream, p: []byte) -> (n: int, err: Error);
-Read_At_Proc     :: distinct proc(using s: Stream, p: []byte, off: i64) -> (n: int, err: Error);
-Read_From_Proc   :: distinct proc(using s: Stream, r: Reader) -> (n: i64, err: Error);
-Read_Byte_Proc   :: distinct proc(using s: Stream) -> (byte, Error);
-Read_Rune_Proc   :: distinct proc(using s: Stream) -> (ch: rune, size: int, err: Error);
-Unread_Byte_Proc :: distinct proc(using s: Stream) -> Error;
-Unread_Rune_Proc :: distinct proc(using s: Stream) -> Error;
-Write_Proc       :: distinct proc(using s: Stream, p: []byte) -> (n: int, err: Error);
-Write_At_Proc    :: distinct proc(using s: Stream, p: []byte, off: i64) -> (n: int, err: Error);
-Write_To_Proc    :: distinct proc(using s: Stream, w: Writer) -> (n: i64, err: Error);
-Write_Byte_Proc  :: distinct proc(using s: Stream, c: byte) -> Error;
-Destroy_Proc     :: distinct proc(using s: Stream) -> Error;
+Close_Proc       :: proc(using s: Stream) -> Error;
+Flush_Proc       :: proc(using s: Stream) -> Error;
+Seek_Proc        :: proc(using s: Stream, offset: i64, whence: Seek_From) -> (n: i64, err: Error);
+Size_Proc        :: proc(using s: Stream) -> i64;
+Read_Proc        :: proc(using s: Stream, p: []byte) -> (n: int, err: Error);
+Read_At_Proc     :: proc(using s: Stream, p: []byte, off: i64) -> (n: int, err: Error);
+Read_From_Proc   :: proc(using s: Stream, r: Reader) -> (n: i64, err: Error);
+Read_Byte_Proc   :: proc(using s: Stream) -> (byte, Error);
+Read_Rune_Proc   :: proc(using s: Stream) -> (ch: rune, size: int, err: Error);
+Unread_Byte_Proc :: proc(using s: Stream) -> Error;
+Unread_Rune_Proc :: proc(using s: Stream) -> Error;
+Write_Proc       :: proc(using s: Stream, p: []byte) -> (n: int, err: Error);
+Write_At_Proc    :: proc(using s: Stream, p: []byte, off: i64) -> (n: int, err: Error);
+Write_To_Proc    :: proc(using s: Stream, w: Writer) -> (n: i64, err: Error);
+Write_Byte_Proc  :: proc(using s: Stream, c: byte) -> Error;
+Write_Rune_Proc  :: proc(using s: Stream, r: rune) -> (size: int, err: Error);
+Destroy_Proc     :: proc(using s: Stream) -> Error;
 
 
 
 
 Stream :: struct {
 Stream :: struct {
@@ -82,6 +83,7 @@ Stream_VTable :: struct {
 	impl_write:      Write_Proc,
 	impl_write:      Write_Proc,
 	impl_write_at:   Write_At_Proc,
 	impl_write_at:   Write_At_Proc,
 	impl_write_byte: Write_Byte_Proc,
 	impl_write_byte: Write_Byte_Proc,
+	impl_write_rune: Write_Rune_Proc,
 	impl_read_from:  Read_From_Proc,
 	impl_read_from:  Read_From_Proc,
 
 
 	impl_unread_byte: Unread_Byte_Proc,
 	impl_unread_byte: Unread_Byte_Proc,
@@ -371,10 +373,16 @@ write_string :: proc(s: Writer, str: string) -> (n: int, err: Error) {
 	return write(s, transmute([]byte)str);
 	return write(s, transmute([]byte)str);
 }
 }
 
 
-write_rune :: proc(s: Writer, r: rune) -> (n: int, err: Error) {
+write_rune :: proc(s: Writer, r: rune) -> (size: int, err: Error) {
+	if s.stream_vtable != nil && s.impl_write_rune != nil {
+		return s->impl_write_rune(r);
+	}
+
 	if r < utf8.RUNE_SELF {
 	if r < utf8.RUNE_SELF {
 		err = write_byte(s, byte(r));
 		err = write_byte(s, byte(r));
-		n = 1 if err == nil else 0;
+		if err == nil {
+			size = 1;
+		}
 		return;
 		return;
 	}
 	}
 	buf, w := utf8.encode_rune(r);
 	buf, w := utf8.encode_rune(r);