mirror of
https://github.com/Ed94/Odin.git
synced 2026-06-20 12:44:59 -07:00
67 lines
1.2 KiB
Odin
67 lines
1.2 KiB
Odin
#import "fmt.odin";
|
|
#import "utf8.odin";
|
|
#import "hash.odin";
|
|
#import "mem.odin";
|
|
|
|
main :: proc() {
|
|
{ // New Standard Library stuff
|
|
s := "Hello";
|
|
fmt.println(s,
|
|
utf8.valid_string(s),
|
|
hash.murmur64(cast([]byte)s));
|
|
|
|
// utf8.odin
|
|
// hash.odin
|
|
// - crc, fnv, fnva, murmur
|
|
// mem.odin
|
|
// - Custom allocators
|
|
// - Helpers
|
|
}
|
|
|
|
{
|
|
arena: mem.Arena;
|
|
mem.init_arena_from_context(^arena, mem.megabytes(16)); // Uses default allocator
|
|
defer mem.free_arena(^arena);
|
|
|
|
push_allocator mem.arena_allocator(^arena) {
|
|
x := new(int);
|
|
x^ = 1337;
|
|
|
|
fmt.println(x^);
|
|
}
|
|
|
|
/*
|
|
push_allocator x {
|
|
...
|
|
}
|
|
|
|
is equivalent to:
|
|
|
|
{
|
|
prev_allocator := __context.allocator
|
|
__context.allocator = x
|
|
defer __context.allocator = prev_allocator
|
|
|
|
...
|
|
}
|
|
*/
|
|
|
|
// You can also "push" a context
|
|
|
|
c := context; // Create copy of the allocator
|
|
c.allocator = mem.arena_allocator(^arena);
|
|
|
|
push_context c {
|
|
x := new(int);
|
|
x^ = 365;
|
|
|
|
fmt.println(x^);
|
|
}
|
|
}
|
|
|
|
// Backend improvements
|
|
// - Minimal dependency building (only build what is needed)
|
|
// - Numerous bugs fixed
|
|
// - Mild parsing recovery after bad syntax error
|
|
}
|