mt-lang 0.2.0 → 0.2.1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- checksums.yaml +4 -4
- data/docs/index.html +4 -3
- data/lib/milk_tea/base.rb +1 -1
- data/std/asset_pack.mt +267 -0
- data/std/async/libuv_runtime.mt +539 -0
- data/std/async/mailbox.mt +191 -0
- data/std/async/runtime.mt +87 -0
- data/std/async.mt +87 -0
- data/std/base64.mt +185 -0
- data/std/behavior_tree.mt +396 -0
- data/std/binary.mt +314 -0
- data/std/binary_heap.mt +157 -0
- data/std/bitset.mt +239 -0
- data/std/box2d.mt +535 -0
- data/std/bytes.mt +46 -0
- data/std/c/box2d.mt +1254 -0
- data/std/c/cgltf.mt +647 -0
- data/std/c/cjson.mt +106 -0
- data/std/c/crypto.mt +11 -0
- data/std/c/crypto_support.h +51 -0
- data/std/c/ctype.mt +19 -0
- data/std/c/ctype_bindgen.h +29 -0
- data/std/c/curl.mt +1223 -0
- data/std/c/enet.mt +473 -0
- data/std/c/errno.mt +41 -0
- data/std/c/errno_bindgen.h +53 -0
- data/std/c/flecs.mt +2945 -0
- data/std/c/fs.linux.mt +43 -0
- data/std/c/fs.windows.mt +43 -0
- data/std/c/fs_support.h +954 -0
- data/std/c/gl.mt +2065 -0
- data/std/c/gl_registry_helpers.h +10748 -0
- data/std/c/glfw.mt +499 -0
- data/std/c/libc.mt +167 -0
- data/std/c/libuv.mt +1491 -0
- data/std/c/math.mt +22 -0
- data/std/c/math_bindgen.h +31 -0
- data/std/c/miniaudio.mt +3420 -0
- data/std/c/pcre2.mt +735 -0
- data/std/c/process.mt +58 -0
- data/std/c/process_support.h +1147 -0
- data/std/c/raygui.mt +1602 -0
- data/std/c/raylib.mt +1245 -0
- data/std/c/raymath.mt +163 -0
- data/std/c/rlgl.mt +434 -0
- data/std/c/rpng.mt +60 -0
- data/std/c/rres.mt +187 -0
- data/std/c/sdl3.mt +4132 -0
- data/std/c/sqlite3.mt +951 -0
- data/std/c/stb_image.mt +52 -0
- data/std/c/stb_image_resize2.mt +128 -0
- data/std/c/stb_image_write.mt +19 -0
- data/std/c/stb_rect_pack.mt +38 -0
- data/std/c/stb_truetype.mt +175 -0
- data/std/c/stb_vorbis.mt +31 -0
- data/std/c/stdio.mt +90 -0
- data/std/c/steamworks.h +5769 -0
- data/std/c/steamworks.mt +4771 -0
- data/std/c/string.mt +16 -0
- data/std/c/string_bindgen.h +36 -0
- data/std/c/sync.mt +33 -0
- data/std/c/sync_support.h +219 -0
- data/std/c/terminal.mt +24 -0
- data/std/c/terminal_support.h +408 -0
- data/std/c/time.mt +26 -0
- data/std/c/tls.mt +24 -0
- data/std/c/tls_support.h +626 -0
- data/std/c/tracy.mt +53 -0
- data/std/c/zlib.mt +20 -0
- data/std/c/zlib_support.h +239 -0
- data/std/c/zstd.mt +231 -0
- data/std/cell.mt +60 -0
- data/std/cgltf.mt +115 -0
- data/std/cjson.mt +90 -0
- data/std/cli.mt +768 -0
- data/std/cookie.mt +198 -0
- data/std/counter.mt +160 -0
- data/std/crypto.mt +74 -0
- data/std/cstring.mt +13 -0
- data/std/ctype.mt +52 -0
- data/std/curl/runtime.mt +261 -0
- data/std/curl.mt +38 -0
- data/std/deque.mt +348 -0
- data/std/encoding.mt +93 -0
- data/std/enet.mt +133 -0
- data/std/env.mt +41 -0
- data/std/errno.mt +47 -0
- data/std/flecs.mt +978 -0
- data/std/fmt.mt +271 -0
- data/std/fs.linux.mt +696 -0
- data/std/fs.windows.mt +711 -0
- data/std/fsm.mt +267 -0
- data/std/gl.mt +2062 -0
- data/std/glfw.mt +471 -0
- data/std/goap.mt +342 -0
- data/std/graph.mt +521 -0
- data/std/gzip.mt +77 -0
- data/std/hash.mt +429 -0
- data/std/http/server.mt +810 -0
- data/std/http.mt +1227 -0
- data/std/intern.mt +53 -0
- data/std/jobs.mt +288 -0
- data/std/json.mt +627 -0
- data/std/libc.mt +34 -0
- data/std/libuv.mt +554 -0
- data/std/linear_algebra.mt +243 -0
- data/std/linked_map.mt +372 -0
- data/std/linked_map_view.mt +49 -0
- data/std/linked_set.mt +117 -0
- data/std/log.mt +69 -0
- data/std/map.mt +418 -0
- data/std/math.mt +24 -0
- data/std/mem/arena.mt +137 -0
- data/std/mem/endian.mt +51 -0
- data/std/mem/heap.mt +298 -0
- data/std/mem/pool.mt +164 -0
- data/std/mem/stack.mt +47 -0
- data/std/mem/tracking.mt +119 -0
- data/std/miniaudio.mt +1299 -0
- data/std/multiset.mt +191 -0
- data/std/net/channel.mt +727 -0
- data/std/net/clock.mt +237 -0
- data/std/net/discovery.mt +277 -0
- data/std/net/lobby.mt +813 -0
- data/std/net/manager.mt +539 -0
- data/std/net/mux.mt +839 -0
- data/std/net/nat.mt +122 -0
- data/std/net/packet.mt +219 -0
- data/std/net/punch.mt +162 -0
- data/std/net/rpc.mt +119 -0
- data/std/net/session.mt +1157 -0
- data/std/net/stun.mt +252 -0
- data/std/net/sync.mt +183 -0
- data/std/net/turn.mt +459 -0
- data/std/net.mt +2944 -0
- data/std/oauth2.mt +408 -0
- data/std/option.mt +51 -0
- data/std/ordered_map.mt +497 -0
- data/std/ordered_set.mt +348 -0
- data/std/path.mt +368 -0
- data/std/pcre2/runtime.mt +35 -0
- data/std/pcre2.mt +78 -0
- data/std/priority_queue.mt +55 -0
- data/std/process.mt +837 -0
- data/std/queue.mt +55 -0
- data/std/random.mt +146 -0
- data/std/raygui.mt +99 -0
- data/std/raylib/debug_console.mt +71 -0
- data/std/raylib/easing.mt +388 -0
- data/std/raylib/packed_assets.mt +255 -0
- data/std/raylib/runtime.mt +30 -0
- data/std/raylib/tracy_gpu.mt +37 -0
- data/std/raylib.mt +1510 -0
- data/std/raymath.mt +153 -0
- data/std/result.mt +89 -0
- data/std/rlgl.mt +268 -0
- data/std/rpng.mt +46 -0
- data/std/rres.mt +36 -0
- data/std/sdl3/runtime.mt +54 -0
- data/std/sdl3.mt +1731 -0
- data/std/serialize.mt +68 -0
- data/std/set.mt +124 -0
- data/std/spatial.mt +176 -0
- data/std/sqlite3.mt +151 -0
- data/std/stack.mt +55 -0
- data/std/stb_image.mt +47 -0
- data/std/stb_image_resize2.mt +41 -0
- data/std/stb_image_write.mt +17 -0
- data/std/stb_rect_pack.mt +15 -0
- data/std/stb_truetype.mt +77 -0
- data/std/stb_vorbis.mt +16 -0
- data/std/stdio.mt +88 -0
- data/std/steamworks.mt +1542 -0
- data/std/str.mt +293 -0
- data/std/string.mt +234 -0
- data/std/sync.mt +194 -0
- data/std/tar.mt +704 -0
- data/std/terminal.mt +1002 -0
- data/std/testing.mt +266 -0
- data/std/thread.mt +120 -0
- data/std/time.mt +105 -0
- data/std/tls.mt +616 -0
- data/std/toml.mt +1310 -0
- data/std/tracy.mt +42 -0
- data/std/uri.mt +118 -0
- data/std/url.mt +372 -0
- data/std/vec.mt +433 -0
- data/std/zstd.mt +94 -0
- metadata +187 -2
data/std/mem/tracking.mt
ADDED
|
@@ -0,0 +1,119 @@
|
|
|
1
|
+
import std.mem.heap as heap
|
|
2
|
+
import std.vec as vec
|
|
3
|
+
import std.string as string
|
|
4
|
+
import std.terminal as terminal
|
|
5
|
+
import std.fmt as fmt
|
|
6
|
+
|
|
7
|
+
public struct Tracker:
|
|
8
|
+
entries: vec.Vec[Entry]
|
|
9
|
+
|
|
10
|
+
public struct Entry:
|
|
11
|
+
pointer: ptr[void]?
|
|
12
|
+
size: ptr_uint
|
|
13
|
+
tag: str
|
|
14
|
+
|
|
15
|
+
public type Tag = str
|
|
16
|
+
|
|
17
|
+
|
|
18
|
+
public function create() -> Tracker:
|
|
19
|
+
return Tracker(entries = vec.Vec[Entry].create())
|
|
20
|
+
|
|
21
|
+
|
|
22
|
+
extending Tracker:
|
|
23
|
+
public editable function release() -> void:
|
|
24
|
+
this.entries.release()
|
|
25
|
+
|
|
26
|
+
|
|
27
|
+
public function count() -> ptr_uint:
|
|
28
|
+
return this.entries.len()
|
|
29
|
+
|
|
30
|
+
|
|
31
|
+
public function is_empty() -> bool:
|
|
32
|
+
return this.entries.len() == 0
|
|
33
|
+
|
|
34
|
+
|
|
35
|
+
public function total_bytes() -> ptr_uint:
|
|
36
|
+
var total: ptr_uint = 0
|
|
37
|
+
var iter = this.entries.iter()
|
|
38
|
+
var ep = iter.next()
|
|
39
|
+
while ep != null:
|
|
40
|
+
total += unsafe: read(ep).size
|
|
41
|
+
ep = iter.next()
|
|
42
|
+
return total
|
|
43
|
+
|
|
44
|
+
|
|
45
|
+
public function report() -> void:
|
|
46
|
+
if this.entries.len() == 0:
|
|
47
|
+
return
|
|
48
|
+
|
|
49
|
+
var sb = string.String.create()
|
|
50
|
+
defer sb.release()
|
|
51
|
+
|
|
52
|
+
sb.append("[tracking] ")
|
|
53
|
+
sb.append(fmt.format(f"#{this.entries.len()} leaked allocation(s):\n").as_str())
|
|
54
|
+
|
|
55
|
+
var i: ptr_uint = 0
|
|
56
|
+
while i < this.entries.len():
|
|
57
|
+
let ep = this.entries.get(i) else:
|
|
58
|
+
fatal(c"tracking.report entry is null")
|
|
59
|
+
let entry = unsafe: read(ep)
|
|
60
|
+
sb.append(" ")
|
|
61
|
+
sb.append(entry.tag)
|
|
62
|
+
sb.append(": ")
|
|
63
|
+
sb.append(fmt.format(f"#{entry.size} bytes\n").as_str())
|
|
64
|
+
i += 1
|
|
65
|
+
|
|
66
|
+
sb.append(fmt.format(f"total: #{this.total_bytes()} bytes in #{this.entries.len()} allocation(s)\n").as_str())
|
|
67
|
+
|
|
68
|
+
let _ = terminal.write_stderr(sb.as_str())
|
|
69
|
+
terminal.flush_stderr()
|
|
70
|
+
|
|
71
|
+
|
|
72
|
+
public function alloc_bytes(tracker: ref[Tracker], size: ptr_uint, tag: Tag) -> ptr[void]?:
|
|
73
|
+
let p = heap.alloc_bytes(size) else:
|
|
74
|
+
return null
|
|
75
|
+
tracker.entries.push(Entry(pointer = p, size = size, tag = tag))
|
|
76
|
+
return p
|
|
77
|
+
|
|
78
|
+
|
|
79
|
+
public function must_alloc_bytes(tracker: ref[Tracker], size: ptr_uint, tag: Tag) -> ptr[void]:
|
|
80
|
+
let p = alloc_bytes(tracker, size, tag) else:
|
|
81
|
+
fatal(c"tracking.must_alloc_bytes allocation failed")
|
|
82
|
+
return p
|
|
83
|
+
|
|
84
|
+
|
|
85
|
+
public function alloc[T](tracker: ref[Tracker], count: ptr_uint, tag: Tag) -> own[T]?:
|
|
86
|
+
let raw = heap.alloc_bytes(size_of(T) * count) else:
|
|
87
|
+
return null
|
|
88
|
+
tracker.entries.push(Entry(pointer = raw, size = size_of(T) * count, tag = tag))
|
|
89
|
+
unsafe:
|
|
90
|
+
return own[T]<-raw
|
|
91
|
+
|
|
92
|
+
|
|
93
|
+
public function must_alloc[T](tracker: ref[Tracker], count: ptr_uint, tag: Tag) -> own[T]:
|
|
94
|
+
let p = alloc[T](tracker, count, tag) else:
|
|
95
|
+
fatal(c"tracking.must_alloc allocation failed")
|
|
96
|
+
return p
|
|
97
|
+
|
|
98
|
+
|
|
99
|
+
public function release_bytes(tracker: ref[Tracker], memory: ptr[void]?) -> void:
|
|
100
|
+
if memory == null:
|
|
101
|
+
return
|
|
102
|
+
var i: ptr_uint = 0
|
|
103
|
+
var found = false
|
|
104
|
+
while i < tracker.entries.len():
|
|
105
|
+
let ep = tracker.entries.get(i) else:
|
|
106
|
+
fatal(c"tracking.release_bytes entry is null")
|
|
107
|
+
let entry = unsafe: read(ep)
|
|
108
|
+
if entry.pointer == memory:
|
|
109
|
+
tracker.entries.swap_remove(i)
|
|
110
|
+
found = true
|
|
111
|
+
break
|
|
112
|
+
i += 1
|
|
113
|
+
if not found:
|
|
114
|
+
fatal(c"tracking.release_bytes: pointer not tracked (bad free or double free)")
|
|
115
|
+
heap.release_bytes(memory)
|
|
116
|
+
|
|
117
|
+
|
|
118
|
+
public function release[T](tracker: ref[Tracker], memory: ptr[T]?) -> void:
|
|
119
|
+
release_bytes(tracker, unsafe: ptr[void]<-memory)
|