mt-lang 0.3.14 → 0.3.16
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/README.md +2 -2
- data/docs/index.html +8 -8
- data/docs/language-design.md +4 -8
- data/docs/language-manual.md +17 -5
- data/lib/milk_tea/base.rb +1 -1
- data/lib/milk_tea/core/ast.rb +2 -2
- data/lib/milk_tea/core/control_flow/builder.rb +62 -2
- data/lib/milk_tea/core/lowering/async/analysis.rb +3 -9
- data/lib/milk_tea/core/lowering/async/lowering.rb +2 -10
- data/lib/milk_tea/core/lowering/async/normalization.rb +2 -7
- data/lib/milk_tea/core/lowering/block.rb +1 -5
- data/lib/milk_tea/core/lowering/proc.rb +1 -5
- data/lib/milk_tea/core/lowering/scans.rb +3 -1
- data/lib/milk_tea/core/lowering/utils.rb +1 -27
- data/lib/milk_tea/core/parser/statements.rb +18 -12
- data/lib/milk_tea/core/pretty_printer/ast_formatter.rb +3 -11
- data/lib/milk_tea/core/semantic_analyzer/analysis_context.rb +2 -3
- data/lib/milk_tea/core/semantic_analyzer/flow_refinement.rb +1 -1
- data/lib/milk_tea/core/semantic_analyzer/function_binding.rb +1 -2
- data/lib/milk_tea/core/semantic_analyzer/nullability.rb +2 -4
- data/lib/milk_tea/core/semantic_analyzer/statements.rb +2 -8
- data/lib/milk_tea/tooling/linter/imports_platform.rb +2 -4
- data/lib/milk_tea/tooling/linter/release_rules.rb +1 -6
- data/lib/milk_tea/tooling/linter/source_helpers.rb +0 -6
- data/lib/milk_tea/tooling/linter/visitors.rb +4 -8
- data/lib/milk_tea/tooling/sexpr_dumper.rb +2 -0
- data/std/asset_pack.mt +1 -1
- data/std/async/libuv_runtime.mt +6 -6
- data/std/async/mailbox.mt +4 -4
- data/std/cookie.mt +2 -2
- data/std/crypto.mt +1 -1
- data/std/curl/runtime.mt +10 -10
- data/std/fs.linux.mt +26 -26
- data/std/fs.windows.mt +22 -22
- data/std/goap.mt +2 -2
- data/std/http/server.mt +21 -21
- data/std/http.mt +14 -14
- data/std/jobs.mt +4 -4
- data/std/json.mt +5 -5
- data/std/log.mt +1 -1
- data/std/mem/tracking.mt +1 -1
- data/std/net/channel.mt +4 -4
- data/std/net/clock.mt +6 -6
- data/std/net/discovery.mt +7 -7
- data/std/net/lobby.mt +10 -10
- data/std/net/manager.mt +1 -1
- data/std/net/mux.mt +4 -4
- data/std/net/nat.mt +4 -4
- data/std/net/packet.mt +3 -3
- data/std/net/punch.mt +3 -3
- data/std/net/rpc.mt +3 -3
- data/std/net/session.mt +15 -15
- data/std/net/stun.mt +4 -4
- data/std/net/turn.mt +4 -4
- data/std/oauth2.mt +12 -12
- data/std/path.mt +8 -8
- data/std/process.mt +4 -4
- data/std/raylib/packed_assets.mt +5 -5
- data/std/serialize.mt +1 -1
- data/std/tar.mt +10 -10
- data/std/terminal.mt +18 -18
- data/std/tls.mt +8 -8
- data/std/uri.mt +1 -1
- data/std/utility.mt +1 -1
- metadata +2 -2
data/std/net/discovery.mt
CHANGED
|
@@ -130,17 +130,17 @@ public async function announce(
|
|
|
130
130
|
return
|
|
131
131
|
Result.success as addr_p:
|
|
132
132
|
var announce_addr = addr_p.value
|
|
133
|
-
defer announce_addr.release()
|
|
133
|
+
defer: announce_addr.release()
|
|
134
134
|
|
|
135
135
|
match net.udp_bind(announce_addr):
|
|
136
136
|
Result.failure:
|
|
137
137
|
return
|
|
138
138
|
Result.success as bp:
|
|
139
139
|
var socket = bp.value
|
|
140
|
-
defer socket.release()
|
|
140
|
+
defer: socket.release()
|
|
141
141
|
|
|
142
142
|
var response = build_response(game_port, ubyte<-0, max_players, game_name)
|
|
143
|
-
defer response.release()
|
|
143
|
+
defer: response.release()
|
|
144
144
|
|
|
145
145
|
while true:
|
|
146
146
|
let recv_task = socket.recv_from(1500)
|
|
@@ -177,7 +177,7 @@ public async function discover_on(
|
|
|
177
177
|
)
|
|
178
178
|
Result.success as la:
|
|
179
179
|
var local_addr = la.value
|
|
180
|
-
defer local_addr.release()
|
|
180
|
+
defer: local_addr.release()
|
|
181
181
|
|
|
182
182
|
match net.udp_bind_on(runtime, local_addr):
|
|
183
183
|
Result.failure:
|
|
@@ -186,7 +186,7 @@ public async function discover_on(
|
|
|
186
186
|
)
|
|
187
187
|
Result.success as bp:
|
|
188
188
|
var socket = bp.value
|
|
189
|
-
defer socket.release()
|
|
189
|
+
defer: socket.release()
|
|
190
190
|
|
|
191
191
|
match socket.set_broadcast(true):
|
|
192
192
|
0:
|
|
@@ -207,10 +207,10 @@ public async function discover_on(
|
|
|
207
207
|
)
|
|
208
208
|
Result.success as broad_addr:
|
|
209
209
|
var broadcast_addr = broad_addr.value
|
|
210
|
-
defer broadcast_addr.release()
|
|
210
|
+
defer: broadcast_addr.release()
|
|
211
211
|
|
|
212
212
|
var probe = build_probe()
|
|
213
|
-
defer probe.release()
|
|
213
|
+
defer: probe.release()
|
|
214
214
|
|
|
215
215
|
var results = vec.Vec[ServerInfo].create()
|
|
216
216
|
|
data/std/net/lobby.mt
CHANGED
|
@@ -256,7 +256,7 @@ public async function discover_lobbies_on(
|
|
|
256
256
|
return Result[vec.Vec[LobbyInfo], net.Error].failure(error = p.error)
|
|
257
257
|
Result.success as p:
|
|
258
258
|
var conn = p.value
|
|
259
|
-
defer conn.release()
|
|
259
|
+
defer: conn.release()
|
|
260
260
|
match await conn.connect_to_peer():
|
|
261
261
|
Result.failure as pe:
|
|
262
262
|
return Result[vec.Vec[LobbyInfo], net.Error].failure(error = pe.error)
|
|
@@ -389,7 +389,7 @@ async function drain_lobby_client(client: ref[LobbyClient]) -> void:
|
|
|
389
389
|
if conn_state == sess.ConnectionState.connected:
|
|
390
390
|
client.pending_join = false
|
|
391
391
|
var encoded = encode_string(client.pending_name.as_str())
|
|
392
|
-
defer encoded.release()
|
|
392
|
+
defer: encoded.release()
|
|
393
393
|
let _ = await client.mux.mux_send(lobby_channel, type_join_request, encoded.as_span(), mux.flag_reliable)
|
|
394
394
|
|
|
395
395
|
while true:
|
|
@@ -455,7 +455,7 @@ async function handle_join_request(host: ref[LobbyHost], msg: ref[mux.MuxedMessa
|
|
|
455
455
|
return
|
|
456
456
|
Result.success as name_payload:
|
|
457
457
|
var player_name = name_payload.value
|
|
458
|
-
defer player_name.release()
|
|
458
|
+
defer: player_name.release()
|
|
459
459
|
|
|
460
460
|
var first_free: int = -1
|
|
461
461
|
var slot_index: ubyte = 0
|
|
@@ -469,7 +469,7 @@ async function handle_join_request(host: ref[LobbyHost], msg: ref[mux.MuxedMessa
|
|
|
469
469
|
|
|
470
470
|
if first_free < 0:
|
|
471
471
|
var reject_data = encode_join_reject(reject_reason_full)
|
|
472
|
-
defer reject_data.release()
|
|
472
|
+
defer: reject_data.release()
|
|
473
473
|
let _ = await host.mux.mux_send(
|
|
474
474
|
msg.peer_id,
|
|
475
475
|
lobby_channel,
|
|
@@ -489,7 +489,7 @@ async function handle_join_request(host: ref[LobbyHost], msg: ref[mux.MuxedMessa
|
|
|
489
489
|
unsafe: read(slot_ptr).occupied = true
|
|
490
490
|
|
|
491
491
|
var accept_data = encode_join_accept(msg.peer_id, slot)
|
|
492
|
-
defer accept_data.release()
|
|
492
|
+
defer: accept_data.release()
|
|
493
493
|
let _ = await host.mux.mux_send(
|
|
494
494
|
msg.peer_id,
|
|
495
495
|
lobby_channel,
|
|
@@ -516,7 +516,7 @@ async function handle_discover_request(host: ref[LobbyHost], msg: ref[mux.MuxedM
|
|
|
516
516
|
var w = bin.Writer.with_capacity(256)
|
|
517
517
|
encode_lobby_info_payload(ref_of(w), host.info)
|
|
518
518
|
var payload = w.finish()
|
|
519
|
-
defer payload.release()
|
|
519
|
+
defer: payload.release()
|
|
520
520
|
let _ = await host.mux.mux_send(
|
|
521
521
|
msg.peer_id,
|
|
522
522
|
lobby_channel,
|
|
@@ -650,7 +650,7 @@ async function broadcast_player_joined(
|
|
|
650
650
|
w.write_uint(uint<-new_player_name.len)
|
|
651
651
|
w.write_bytes(text.as_byte_span(new_player_name))
|
|
652
652
|
var payload = w.finish()
|
|
653
|
-
defer payload.release()
|
|
653
|
+
defer: payload.release()
|
|
654
654
|
|
|
655
655
|
var peer_index: ptr_uint = 0
|
|
656
656
|
let peer_count = host.mux.peer_count()
|
|
@@ -801,11 +801,11 @@ public async function respond_to_beacon(
|
|
|
801
801
|
match recv_result:
|
|
802
802
|
Result.success as dp:
|
|
803
803
|
var datagram = dp.value
|
|
804
|
-
defer datagram.data.release()
|
|
805
|
-
defer datagram.source.release()
|
|
804
|
+
defer: datagram.data.release()
|
|
805
|
+
defer: datagram.source.release()
|
|
806
806
|
if is_beacon_probe(datagram.data.as_span()):
|
|
807
807
|
var response = build_beacon_response(info)
|
|
808
|
-
defer response.release()
|
|
808
|
+
defer: response.release()
|
|
809
809
|
let _ = await socket.send_to(response.as_span(), datagram.source)
|
|
810
810
|
Result.failure:
|
|
811
811
|
pass
|
data/std/net/manager.mt
CHANGED
|
@@ -418,7 +418,7 @@ async function process_stored_peer_id_events(manager: ref[NetworkManager]) -> vo
|
|
|
418
418
|
let player_id = join_event.player_id
|
|
419
419
|
join_event.release()
|
|
420
420
|
var assign_data = build_assign_id(player_id)
|
|
421
|
-
defer assign_data.release()
|
|
421
|
+
defer: assign_data.release()
|
|
422
422
|
let _ = await manager.mux_session.mux_send(
|
|
423
423
|
player_id,
|
|
424
424
|
channel_system,
|
data/std/net/mux.mt
CHANGED
|
@@ -382,7 +382,7 @@ async function send_single_conn(
|
|
|
382
382
|
send_flags: ubyte
|
|
383
383
|
) -> Result[bool, net.Error]:
|
|
384
384
|
var frame = encode_frame(channel_id, type_id, send_flags, data)
|
|
385
|
-
defer frame.release()
|
|
385
|
+
defer: frame.release()
|
|
386
386
|
if (send_flags & flag_reliable) != 0:
|
|
387
387
|
let result = await mux.conn.send_reliable(frame.as_span(), 0)
|
|
388
388
|
return result
|
|
@@ -399,7 +399,7 @@ async function send_single_session(
|
|
|
399
399
|
send_flags: ubyte
|
|
400
400
|
) -> Result[bool, net.Error]:
|
|
401
401
|
var frame = encode_frame(channel_id, type_id, send_flags, data)
|
|
402
|
-
defer frame.release()
|
|
402
|
+
defer: frame.release()
|
|
403
403
|
if (send_flags & flag_reliable) != 0:
|
|
404
404
|
let result = await mux.session.send_reliable(peer_id, frame.as_span(), 0)
|
|
405
405
|
return result
|
|
@@ -436,7 +436,7 @@ async function send_fragmented_conn(
|
|
|
436
436
|
break
|
|
437
437
|
let chunk = unsafe: span[ubyte](data = data.data + offset, len = chunk_len)
|
|
438
438
|
var frame = encode_fragment_frame(channel_id, type_id, frag_flags, group_id, frag_index, total, chunk)
|
|
439
|
-
defer frame.release()
|
|
439
|
+
defer: frame.release()
|
|
440
440
|
if (send_flags & flag_reliable) != 0:
|
|
441
441
|
let _ = await mux.conn.send_reliable(frame.as_span(), 0)
|
|
442
442
|
else:
|
|
@@ -477,7 +477,7 @@ async function send_fragmented_session(
|
|
|
477
477
|
break
|
|
478
478
|
let chunk = unsafe: span[ubyte](data = data.data + offset, len = chunk_len)
|
|
479
479
|
var frame = encode_fragment_frame(channel_id, type_id, frag_flags, group_id, frag_index, total, chunk)
|
|
480
|
-
defer frame.release()
|
|
480
|
+
defer: frame.release()
|
|
481
481
|
if (send_flags & flag_reliable) != 0:
|
|
482
482
|
let _ = await mux.session.send_reliable(peer_id, frame.as_span(), 0)
|
|
483
483
|
else:
|
data/std/net/nat.mt
CHANGED
|
@@ -53,7 +53,7 @@ public async function detect(
|
|
|
53
53
|
)
|
|
54
54
|
Result.success as pr:
|
|
55
55
|
var public_1 = pr.value
|
|
56
|
-
defer public_1.release()
|
|
56
|
+
defer: public_1.release()
|
|
57
57
|
|
|
58
58
|
let local_result = socket.local_address()
|
|
59
59
|
match local_result:
|
|
@@ -78,7 +78,7 @@ public async function detect(
|
|
|
78
78
|
)
|
|
79
79
|
Result.success as ar:
|
|
80
80
|
var public_2 = ar.value
|
|
81
|
-
defer public_2.release()
|
|
81
|
+
defer: public_2.release()
|
|
82
82
|
|
|
83
83
|
if not public_1.public_address.equal(public_2.public_address):
|
|
84
84
|
return Result[NatResult, Error].success(
|
|
@@ -107,7 +107,7 @@ public async function detect_default(
|
|
|
107
107
|
)
|
|
108
108
|
Result.success as pp:
|
|
109
109
|
var primary = pp.value
|
|
110
|
-
defer primary.release()
|
|
110
|
+
defer: primary.release()
|
|
111
111
|
|
|
112
112
|
let alt_result = net.ipv4(google_alternate, google_port)
|
|
113
113
|
match alt_result:
|
|
@@ -117,6 +117,6 @@ public async function detect_default(
|
|
|
117
117
|
)
|
|
118
118
|
Result.success as ap:
|
|
119
119
|
var alternate = ap.value
|
|
120
|
-
defer alternate.release()
|
|
120
|
+
defer: alternate.release()
|
|
121
121
|
|
|
122
122
|
return await detect(socket, primary, alternate)
|
data/std/net/packet.mt
CHANGED
|
@@ -50,7 +50,7 @@ function decode_packet_length(header: bytes.Bytes) -> ptr_uint:
|
|
|
50
50
|
|
|
51
51
|
function frame_bytes(content: span[ubyte]) -> bytes.Bytes:
|
|
52
52
|
var framed = vec.Vec[ubyte].with_capacity(frame_header_bytes + content.len)
|
|
53
|
-
defer framed.release()
|
|
53
|
+
defer: framed.release()
|
|
54
54
|
|
|
55
55
|
let header = encode_packet_length(content.len)
|
|
56
56
|
framed.append_array(header)
|
|
@@ -157,7 +157,7 @@ extending Stream:
|
|
|
157
157
|
return Result[ptr_uint, Error].failure(error = packet_error(-3, "packet exceeds 32-bit frame limit"))
|
|
158
158
|
|
|
159
159
|
var framed = frame_bytes(content)
|
|
160
|
-
defer framed.release()
|
|
160
|
+
defer: framed.release()
|
|
161
161
|
|
|
162
162
|
let write_result = await this.stream.write_bytes(framed.as_span())
|
|
163
163
|
match write_result:
|
|
@@ -175,7 +175,7 @@ extending Stream:
|
|
|
175
175
|
return Result[bytes.Bytes, Error].failure(error = error_from_net(payload.error))
|
|
176
176
|
Result.success as payload:
|
|
177
177
|
var header = payload.value
|
|
178
|
-
defer header.release()
|
|
178
|
+
defer: header.release()
|
|
179
179
|
let packet_length = decode_packet_length(header)
|
|
180
180
|
if packet_length > this.max_packet_bytes:
|
|
181
181
|
let discard_result = await discard_exactly(this.stream, packet_length)
|
data/std/net/punch.mt
CHANGED
|
@@ -104,8 +104,8 @@ function poll_recv(
|
|
|
104
104
|
return Option[PunchResult].none()
|
|
105
105
|
Result.success as dp:
|
|
106
106
|
var dg = dp.value
|
|
107
|
-
defer dg.data.release()
|
|
108
|
-
defer dg.source.release()
|
|
107
|
+
defer: dg.data.release()
|
|
108
|
+
defer: dg.source.release()
|
|
109
109
|
return result_from_datagram(dg, remote_candidates)
|
|
110
110
|
|
|
111
111
|
|
|
@@ -114,7 +114,7 @@ public async function punch(
|
|
|
114
114
|
remote_candidates: vec.Vec[Candidate]
|
|
115
115
|
) -> Result[PunchResult, Error]:
|
|
116
116
|
var probe = build_punch_probe()
|
|
117
|
-
defer probe.release()
|
|
117
|
+
defer: probe.release()
|
|
118
118
|
var recv_task = socket.recv_from(512)
|
|
119
119
|
|
|
120
120
|
var c: uint = 0
|
data/std/net/rpc.mt
CHANGED
|
@@ -63,7 +63,7 @@ public async function call_and_wait(
|
|
|
63
63
|
payload: span[ubyte]
|
|
64
64
|
) -> Result[bytes.Bytes, Error]:
|
|
65
65
|
var call_packet = build_call(request_id, payload)
|
|
66
|
-
defer call_packet.release()
|
|
66
|
+
defer: call_packet.release()
|
|
67
67
|
|
|
68
68
|
let send_result = await conn.mux_send(channel_id, call_type_id, call_packet.as_span(), mux.flag_reliable)
|
|
69
69
|
match send_result:
|
|
@@ -78,7 +78,7 @@ public async function call_and_wait(
|
|
|
78
78
|
match msg_opt:
|
|
79
79
|
Option.some as mp:
|
|
80
80
|
var msg = mp.value
|
|
81
|
-
defer msg.release()
|
|
81
|
+
defer: msg.release()
|
|
82
82
|
if msg.type_id == response_type_id and msg.channel_id == channel_id:
|
|
83
83
|
let id_result = parse_request_id(msg.payload.as_span())
|
|
84
84
|
match id_result:
|
|
@@ -110,7 +110,7 @@ public async function send_reply(
|
|
|
110
110
|
payload: span[ubyte]
|
|
111
111
|
) -> Result[bool, Error]:
|
|
112
112
|
var reply_packet = build_reply(request_id, payload)
|
|
113
|
-
defer reply_packet.release()
|
|
113
|
+
defer: reply_packet.release()
|
|
114
114
|
let send_result = await conn.mux_send(channel_id, response_type_id, reply_packet.as_span(), mux.flag_reliable)
|
|
115
115
|
match send_result:
|
|
116
116
|
Result.failure:
|
data/std/net/session.mt
CHANGED
|
@@ -312,7 +312,7 @@ extending Connection:
|
|
|
312
312
|
if this.state == ConnectionState.connected:
|
|
313
313
|
if frame >= this.last_heartbeat_sent + this.heartbeat_interval:
|
|
314
314
|
var hb = build_heartbeat(frame)
|
|
315
|
-
defer hb.release()
|
|
315
|
+
defer: hb.release()
|
|
316
316
|
let send_result = await this.channel.send(hb.as_span())
|
|
317
317
|
match send_result:
|
|
318
318
|
Result.failure:
|
|
@@ -395,7 +395,7 @@ extending Connection:
|
|
|
395
395
|
))
|
|
396
396
|
|
|
397
397
|
var framed = build_user_data(data)
|
|
398
|
-
defer framed.release()
|
|
398
|
+
defer: framed.release()
|
|
399
399
|
let send_result = await this.channel.send(framed.as_span())
|
|
400
400
|
match send_result:
|
|
401
401
|
Result.failure as payload:
|
|
@@ -415,7 +415,7 @@ extending Connection:
|
|
|
415
415
|
))
|
|
416
416
|
|
|
417
417
|
var framed = build_user_data(data)
|
|
418
|
-
defer framed.release()
|
|
418
|
+
defer: framed.release()
|
|
419
419
|
let send_result = await this.channel.send_reliable(framed.as_span(), frame)
|
|
420
420
|
match send_result:
|
|
421
421
|
Result.failure as payload:
|
|
@@ -444,7 +444,7 @@ extending Connection:
|
|
|
444
444
|
Result.success as ksp:
|
|
445
445
|
key = ksp.value
|
|
446
446
|
var req = build_connect_request(this.protocol_version, key)
|
|
447
|
-
defer req.release()
|
|
447
|
+
defer: req.release()
|
|
448
448
|
let send_result = await this.channel.send_reliable(req.as_span(), this.last_heartbeat_sent)
|
|
449
449
|
match send_result:
|
|
450
450
|
Result.failure as send_payload:
|
|
@@ -463,7 +463,7 @@ extending Connection:
|
|
|
463
463
|
))
|
|
464
464
|
|
|
465
465
|
var d = build_disconnect(disconnect_reason_local)
|
|
466
|
-
defer d.release()
|
|
466
|
+
defer: d.release()
|
|
467
467
|
let send_result = await this.channel.send_reliable(d.as_span(), 0)
|
|
468
468
|
this.state = ConnectionState.disconnected
|
|
469
469
|
match send_result:
|
|
@@ -588,7 +588,7 @@ async function drain_outgoing_conn(conn: ref[Connection]) -> Result[bool, net.Er
|
|
|
588
588
|
return Result[bool, net.Error].success(value = true)
|
|
589
589
|
Option.some as payload:
|
|
590
590
|
var outgoing = payload.value
|
|
591
|
-
defer outgoing.release()
|
|
591
|
+
defer: outgoing.release()
|
|
592
592
|
if outgoing.reliable:
|
|
593
593
|
let _ = await conn.channel.send_reliable(
|
|
594
594
|
outgoing.payload.as_span(),
|
|
@@ -648,13 +648,13 @@ extending Session:
|
|
|
648
648
|
if unsafe: read(peer_ptr).channel_state == ConnectionState.connected:
|
|
649
649
|
if frame >= unsafe: read(peer_ptr).last_heartbeat_sent + this.config.heartbeat_interval:
|
|
650
650
|
var hb = build_heartbeat(frame)
|
|
651
|
-
defer hb.release()
|
|
651
|
+
defer: hb.release()
|
|
652
652
|
let peer_id = unsafe: read(peer_ptr).peer_id
|
|
653
653
|
let peer_address_result = find_peer_address(ref_of(this), peer_id)
|
|
654
654
|
match peer_address_result:
|
|
655
655
|
Result.success as addr_payload:
|
|
656
656
|
var addr = addr_payload.value
|
|
657
|
-
defer addr.release()
|
|
657
|
+
defer: addr.release()
|
|
658
658
|
let send_result = await this.host.send(addr, hb.as_span())
|
|
659
659
|
match send_result:
|
|
660
660
|
Result.failure:
|
|
@@ -748,9 +748,9 @@ extending Session:
|
|
|
748
748
|
return Result[bool, net.Error].failure(error = payload.error)
|
|
749
749
|
Result.success as payload:
|
|
750
750
|
var address = payload.value
|
|
751
|
-
defer address.release()
|
|
751
|
+
defer: address.release()
|
|
752
752
|
var framed = build_user_data(data)
|
|
753
|
-
defer framed.release()
|
|
753
|
+
defer: framed.release()
|
|
754
754
|
let send_result = await this.host.send(address, framed.as_span())
|
|
755
755
|
match send_result:
|
|
756
756
|
Result.failure as send_payload:
|
|
@@ -773,9 +773,9 @@ extending Session:
|
|
|
773
773
|
return Result[bool, net.Error].failure(error = payload.error)
|
|
774
774
|
Result.success as payload:
|
|
775
775
|
var address = payload.value
|
|
776
|
-
defer address.release()
|
|
776
|
+
defer: address.release()
|
|
777
777
|
var framed = build_user_data(data)
|
|
778
|
-
defer framed.release()
|
|
778
|
+
defer: framed.release()
|
|
779
779
|
let send_result = await this.host.send_reliable(address, framed.as_span(), frame)
|
|
780
780
|
match send_result:
|
|
781
781
|
Result.failure as send_payload:
|
|
@@ -794,9 +794,9 @@ extending Session:
|
|
|
794
794
|
return Result[bool, net.Error].failure(error = payload.error)
|
|
795
795
|
Result.success as payload:
|
|
796
796
|
var address = payload.value
|
|
797
|
-
defer address.release()
|
|
797
|
+
defer: address.release()
|
|
798
798
|
var d = build_disconnect(reason)
|
|
799
|
-
defer d.release()
|
|
799
|
+
defer: d.release()
|
|
800
800
|
let send_result = await this.host.send_reliable(address, d.as_span(), 0)
|
|
801
801
|
match send_result:
|
|
802
802
|
Result.failure:
|
|
@@ -1054,7 +1054,7 @@ async function drain_outgoing_session(session: ref[Session]) -> Result[bool, net
|
|
|
1054
1054
|
return Result[bool, net.Error].success(value = true)
|
|
1055
1055
|
Option.some as payload:
|
|
1056
1056
|
var outgoing = payload.value
|
|
1057
|
-
defer outgoing.release()
|
|
1057
|
+
defer: outgoing.release()
|
|
1058
1058
|
if outgoing.reliable:
|
|
1059
1059
|
let send_result = await session.host.send_reliable(
|
|
1060
1060
|
outgoing.address,
|
data/std/net/stun.mt
CHANGED
|
@@ -150,7 +150,7 @@ public function parse_binding_response(
|
|
|
150
150
|
let xaddr = read_uint_be(data, offset + 8z)
|
|
151
151
|
let ip = xaddr ^ stun_magic_cookie
|
|
152
152
|
var ip_str = format_ipv4(ip)
|
|
153
|
-
defer ip_str.release()
|
|
153
|
+
defer: ip_str.release()
|
|
154
154
|
let addr_result = net.ipv4(ip_str.as_str(), int<-port)
|
|
155
155
|
match addr_result:
|
|
156
156
|
Result.failure:
|
|
@@ -185,7 +185,7 @@ public async function resolve_public_address(
|
|
|
185
185
|
let tid = transaction_id_from_bytes(rp.value)
|
|
186
186
|
rp.value.release()
|
|
187
187
|
var request = build_binding_request(tid)
|
|
188
|
-
defer request.release()
|
|
188
|
+
defer: request.release()
|
|
189
189
|
let send_result = await socket.send_to(request.as_span(), stun_server)
|
|
190
190
|
match send_result:
|
|
191
191
|
Result.failure:
|
|
@@ -233,7 +233,7 @@ public async function resolve_public_address_on(
|
|
|
233
233
|
)
|
|
234
234
|
Result.success as bp:
|
|
235
235
|
var socket = bp.value
|
|
236
|
-
defer socket.release()
|
|
236
|
+
defer: socket.release()
|
|
237
237
|
return await resolve_public_address(socket, stun_server)
|
|
238
238
|
|
|
239
239
|
|
|
@@ -248,5 +248,5 @@ public async function resolve(
|
|
|
248
248
|
)
|
|
249
249
|
Result.success as la:
|
|
250
250
|
var local_addr = la.value
|
|
251
|
-
defer local_addr.release()
|
|
251
|
+
defer: local_addr.release()
|
|
252
252
|
return await resolve_public_address_on(aio.current_runtime(), local_addr, stun_server)
|
data/std/net/turn.mt
CHANGED
|
@@ -188,7 +188,7 @@ public function parse_allocate_response(
|
|
|
188
188
|
let xaddr = read_uint_be(data, offset + 8z)
|
|
189
189
|
let ip = xaddr ^ stun_magic_cookie
|
|
190
190
|
var ip_str = format_ipv4(ip)
|
|
191
|
-
defer ip_str.release()
|
|
191
|
+
defer: ip_str.release()
|
|
192
192
|
let addr_result = net.ipv4(ip_str.as_str(), int<-port)
|
|
193
193
|
match addr_result:
|
|
194
194
|
Result.success as ap:
|
|
@@ -220,7 +220,7 @@ public async function allocate(
|
|
|
220
220
|
let tid = transaction_id_from_bytes(rp.value)
|
|
221
221
|
rp.value.release()
|
|
222
222
|
var request = build_allocate_request(tid)
|
|
223
|
-
defer request.release()
|
|
223
|
+
defer: request.release()
|
|
224
224
|
let send_result = await socket.send_to(request.as_span(), turn_server)
|
|
225
225
|
match send_result:
|
|
226
226
|
Result.failure:
|
|
@@ -363,7 +363,7 @@ public function parse_data_indication(
|
|
|
363
363
|
let xaddr = read_uint_be(data, offset + 8z)
|
|
364
364
|
let ip = xaddr ^ stun_magic_cookie
|
|
365
365
|
var ip_str = format_ipv4(ip)
|
|
366
|
-
defer ip_str.release()
|
|
366
|
+
defer: ip_str.release()
|
|
367
367
|
let addr_result = net.ipv4(ip_str.as_str(), int<-port)
|
|
368
368
|
match addr_result:
|
|
369
369
|
Result.success as ap:
|
|
@@ -417,7 +417,7 @@ public async function send_data(
|
|
|
417
417
|
return Result[ptr_uint, Error].failure(error = bp.error)
|
|
418
418
|
Result.success as bp:
|
|
419
419
|
var packet = bp.value
|
|
420
|
-
defer packet.release()
|
|
420
|
+
defer: packet.release()
|
|
421
421
|
let send_result = await socket.send_to(packet.as_span(), turn_server)
|
|
422
422
|
match send_result:
|
|
423
423
|
Result.failure as sp:
|
data/std/oauth2.mt
CHANGED
|
@@ -78,7 +78,7 @@ public function generate_pkce() -> Result[PkcePair, Error]:
|
|
|
78
78
|
random_data.release()
|
|
79
79
|
|
|
80
80
|
var challenge = crypto.sha256(text.as_byte_span(verifier.as_str()))
|
|
81
|
-
defer challenge.release()
|
|
81
|
+
defer: challenge.release()
|
|
82
82
|
|
|
83
83
|
let challenge_b64 = base64.encode_urlsafe(challenge.as_span())
|
|
84
84
|
|
|
@@ -141,9 +141,9 @@ function append_query_param(target: ref[string.String], key: str, value: str) ->
|
|
|
141
141
|
target.push_byte(38)
|
|
142
142
|
|
|
143
143
|
var encoded_key = url.percent_encode(key)
|
|
144
|
-
defer encoded_key.release()
|
|
144
|
+
defer: encoded_key.release()
|
|
145
145
|
var encoded_value = url.percent_encode(value)
|
|
146
|
-
defer encoded_value.release()
|
|
146
|
+
defer: encoded_value.release()
|
|
147
147
|
|
|
148
148
|
target.append(encoded_key.as_str())
|
|
149
149
|
target.push_byte(61)
|
|
@@ -156,7 +156,7 @@ public async function exchange_code(
|
|
|
156
156
|
pkce_verifier: Option[str]
|
|
157
157
|
) -> Result[Tokens, Error]:
|
|
158
158
|
var body_params = vec.Vec[url.FormField].create()
|
|
159
|
-
defer release_form_fields(ref_of(body_params))
|
|
159
|
+
defer: release_form_fields(ref_of(body_params))
|
|
160
160
|
|
|
161
161
|
body_params.push(url.FormField(key = "grant_type", value = "authorization_code"))
|
|
162
162
|
body_params.push(url.FormField(key = "code", value = code))
|
|
@@ -170,10 +170,10 @@ public async function exchange_code(
|
|
|
170
170
|
body_params.push(url.FormField(key = "code_verifier", value = payload.value))
|
|
171
171
|
|
|
172
172
|
var form_body = url.encode_form(body_params.as_span())
|
|
173
|
-
defer form_body.release()
|
|
173
|
+
defer: form_body.release()
|
|
174
174
|
|
|
175
175
|
var auth_header = build_basic_auth_header(config.client_id.as_str(), config.client_secret.as_str())
|
|
176
|
-
defer auth_header.release()
|
|
176
|
+
defer: auth_header.release()
|
|
177
177
|
|
|
178
178
|
var headers = array[http.RequestHeader, 2](
|
|
179
179
|
http.RequestHeader(name = "Content-Type", value = "application/x-www-form-urlencoded"),
|
|
@@ -194,7 +194,7 @@ public async function exchange_code(
|
|
|
194
194
|
return Result[Tokens, Error].failure(error = http_error_to_oauth(payload.error))
|
|
195
195
|
Result.success as payload:
|
|
196
196
|
var response = payload.value
|
|
197
|
-
defer response.release()
|
|
197
|
+
defer: response.release()
|
|
198
198
|
|
|
199
199
|
let body_str = response.body_as_str() else:
|
|
200
200
|
return Result[Tokens, Error].failure(error = oauth_error("token response body is not valid UTF-8"))
|
|
@@ -226,7 +226,7 @@ function parse_token_response(body_str: str, status_code: int) -> Result[Tokens,
|
|
|
226
226
|
return Result[Tokens, Error].failure(error = oauth_error("token response is not valid JSON"))
|
|
227
227
|
Result.success as json_payload:
|
|
228
228
|
let json_value = json_payload.value
|
|
229
|
-
defer json.release_value(json_value)
|
|
229
|
+
defer: json.release_value(json_value)
|
|
230
230
|
|
|
231
231
|
if status_code != 200:
|
|
232
232
|
let object_ptr = json_value.as_object() else:
|
|
@@ -306,17 +306,17 @@ public async function refresh_access_token(
|
|
|
306
306
|
refresh_token: str
|
|
307
307
|
) -> Result[Tokens, Error]:
|
|
308
308
|
var body_params = vec.Vec[url.FormField].create()
|
|
309
|
-
defer release_form_fields(ref_of(body_params))
|
|
309
|
+
defer: release_form_fields(ref_of(body_params))
|
|
310
310
|
|
|
311
311
|
body_params.push(url.FormField(key = "grant_type", value = "refresh_token"))
|
|
312
312
|
body_params.push(url.FormField(key = "refresh_token", value = refresh_token))
|
|
313
313
|
body_params.push(url.FormField(key = "client_id", value = config.client_id.as_str()))
|
|
314
314
|
|
|
315
315
|
var form_body = url.encode_form(body_params.as_span())
|
|
316
|
-
defer form_body.release()
|
|
316
|
+
defer: form_body.release()
|
|
317
317
|
|
|
318
318
|
var auth_header = build_basic_auth_header(config.client_id.as_str(), config.client_secret.as_str())
|
|
319
|
-
defer auth_header.release()
|
|
319
|
+
defer: auth_header.release()
|
|
320
320
|
|
|
321
321
|
var headers = array[http.RequestHeader, 2](
|
|
322
322
|
http.RequestHeader(name = "Content-Type", value = "application/x-www-form-urlencoded"),
|
|
@@ -337,7 +337,7 @@ public async function refresh_access_token(
|
|
|
337
337
|
return Result[Tokens, Error].failure(error = http_error_to_oauth(payload.error))
|
|
338
338
|
Result.success as payload:
|
|
339
339
|
var response = payload.value
|
|
340
|
-
defer response.release()
|
|
340
|
+
defer: response.release()
|
|
341
341
|
|
|
342
342
|
let body_str = response.body_as_str() else:
|
|
343
343
|
return Result[Tokens, Error].failure(error = oauth_error("token response body is not valid UTF-8"))
|
data/std/path.mt
CHANGED
|
@@ -54,9 +54,9 @@ public function join(left: str, right: str) -> string.String:
|
|
|
54
54
|
|
|
55
55
|
public function relative_path(path: str, base: str) -> Option[string.String]:
|
|
56
56
|
var normalized_path = normalize_separators(path)
|
|
57
|
-
defer normalized_path.release()
|
|
57
|
+
defer: normalized_path.release()
|
|
58
58
|
var normalized_base = normalize_separators(base)
|
|
59
|
-
defer normalized_base.release()
|
|
59
|
+
defer: normalized_base.release()
|
|
60
60
|
|
|
61
61
|
let path_text = normalized_path.as_str()
|
|
62
62
|
let base_text = normalized_base.as_str()
|
|
@@ -66,11 +66,11 @@ public function relative_path(path: str, base: str) -> Option[string.String]:
|
|
|
66
66
|
return Option[string.String].none
|
|
67
67
|
|
|
68
68
|
var path_segments = vec.Vec[Segment].create()
|
|
69
|
-
defer path_segments.release()
|
|
69
|
+
defer: path_segments.release()
|
|
70
70
|
collect_normalized_segments(path_text, path_root, ref_of(path_segments))
|
|
71
71
|
|
|
72
72
|
var base_segments = vec.Vec[Segment].create()
|
|
73
|
-
defer base_segments.release()
|
|
73
|
+
defer: base_segments.release()
|
|
74
74
|
collect_normalized_segments(base_text, base_root, ref_of(base_segments))
|
|
75
75
|
|
|
76
76
|
var common: ptr_uint = 0
|
|
@@ -111,9 +111,9 @@ public function relative_path(path: str, base: str) -> Option[string.String]:
|
|
|
111
111
|
|
|
112
112
|
public function is_within_root(path: str, root: str) -> bool:
|
|
113
113
|
var normalized_path = normalize_separators(path)
|
|
114
|
-
defer normalized_path.release()
|
|
114
|
+
defer: normalized_path.release()
|
|
115
115
|
var normalized_root = normalize_separators(root)
|
|
116
|
-
defer normalized_root.release()
|
|
116
|
+
defer: normalized_root.release()
|
|
117
117
|
|
|
118
118
|
let path_text = normalized_path.as_str()
|
|
119
119
|
let root_text = normalized_root.as_str()
|
|
@@ -123,11 +123,11 @@ public function is_within_root(path: str, root: str) -> bool:
|
|
|
123
123
|
return false
|
|
124
124
|
|
|
125
125
|
var path_segments = vec.Vec[Segment].create()
|
|
126
|
-
defer path_segments.release()
|
|
126
|
+
defer: path_segments.release()
|
|
127
127
|
collect_normalized_segments(path_text, path_root, ref_of(path_segments))
|
|
128
128
|
|
|
129
129
|
var root_segments = vec.Vec[Segment].create()
|
|
130
|
-
defer root_segments.release()
|
|
130
|
+
defer: root_segments.release()
|
|
131
131
|
collect_normalized_segments(root_text, root_root, ref_of(root_segments))
|
|
132
132
|
|
|
133
133
|
if path_segments.len() < root_segments.len():
|
data/std/process.mt
CHANGED
|
@@ -437,7 +437,7 @@ function spawn_internal(
|
|
|
437
437
|
return Result[ChildProcess, ProcessError].failure(error= payload.error)
|
|
438
438
|
Result.success as payload:
|
|
439
439
|
var prepared = payload.value
|
|
440
|
-
defer prepared.release()
|
|
440
|
+
defer: prepared.release()
|
|
441
441
|
|
|
442
442
|
var raw_handle = zero[c.mt_process_spawn_handle]
|
|
443
443
|
var raw_error = zero[c.mt_process_error]
|
|
@@ -478,7 +478,7 @@ function spawn_pty_internal(
|
|
|
478
478
|
return Result[PtyProcess, ProcessError].failure(error= payload.error)
|
|
479
479
|
Result.success as payload:
|
|
480
480
|
var prepared = payload.value
|
|
481
|
-
defer prepared.release()
|
|
481
|
+
defer: prepared.release()
|
|
482
482
|
|
|
483
483
|
var raw_handle = zero[c.mt_process_pty_handle]
|
|
484
484
|
var raw_error = zero[c.mt_process_error]
|
|
@@ -512,7 +512,7 @@ function capture_internal(
|
|
|
512
512
|
return Result[CaptureResult, ProcessError].failure(error= payload.error)
|
|
513
513
|
Result.success as payload:
|
|
514
514
|
var prepared = payload.value
|
|
515
|
-
defer prepared.release()
|
|
515
|
+
defer: prepared.release()
|
|
516
516
|
|
|
517
517
|
var raw_result = zero[c.mt_process_capture_result]
|
|
518
518
|
var raw_error = zero[c.mt_process_error]
|
|
@@ -547,7 +547,7 @@ function spawn_detached_internal(
|
|
|
547
547
|
return Result[int, ProcessError].failure(error= payload.error)
|
|
548
548
|
Result.success as payload:
|
|
549
549
|
var prepared = payload.value
|
|
550
|
-
defer prepared.release()
|
|
550
|
+
defer: prepared.release()
|
|
551
551
|
|
|
552
552
|
var pid: int = 0
|
|
553
553
|
var raw_error = zero[c.mt_process_error]
|