return Reader.{ s };
}
-reader_from_string :: (s: str) -> Reader {
- stream_ptr := new(StringStream); @Leak
+// You need to free the StringStream from the context.allocator when you use this. For example,
+// reader, stream := reader_from_string(s);
+// defer cfree(stream);
+reader_from_string :: (s: str) -> (Reader, ^StringStream) {
+ stream_ptr := new(StringStream);
*stream_ptr = string_stream_make(s);
- return Reader.{ stream_ptr };
+ return Reader.{ stream_ptr }, stream_ptr;
}
read_byte :: (use reader: ^Reader) -> u8 {
Basic_Flag_Numeric = Basic_Flag_Integer | Basic_Flag_Float,
Basic_Flag_Ordered = Basic_Flag_Integer | Basic_Flag_Float | Basic_Flag_Pointer,
- Basic_Flag_Equality = Basic_Flag_Ordered | Basic_Flag_Type_Index,
+ Basic_Flag_Equality = Basic_Flag_Ordered | Basic_Flag_Type_Index | Basic_Flag_Boolean,
Basic_Flag_Constant_Type = Basic_Flag_Boolean | Basic_Flag_Numeric | Basic_Flag_Pointer,
Basic_Flag_Numeric_Ordered = Basic_Flag_Numeric | Basic_Flag_Ordered,
};
if (to->kind == Type_Kind_Slice && from->kind == Type_Kind_VarArgs) {
// Nothing needs to be done because they are identical
+ *pcode = code;
return;
}
main :: (args: [] cstr) {
contents := #file_contents "./tests/aoc-2020/input/day1.txt";
- reader := io.reader_from_string(contents);
+ reader, stream := io.reader_from_string(contents);
+ defer cfree(stream);
nums := array.make(u32, 128);
defer array.free(^nums);
main :: (args: [] cstr) {
contents := #file_contents "./tests/aoc-2020/input/day2.txt";
- reader := io.reader_from_string(contents);
+ reader, stream := io.reader_from_string(contents);
+ defer cfree(stream);
valid := 0;