mt-lang 0.3.14 → 0.3.17
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 +7 -12
- data/docs/language-manual.md +20 -8
- data/lib/milk_tea/base.rb +1 -1
- data/lib/milk_tea/core/ast.rb +2 -2
- data/lib/milk_tea/core/{binding_types.rb → bindings.rb} +1 -1
- data/lib/milk_tea/core/c_backend.rb +14 -15
- data/lib/milk_tea/core/compile_time.rb +181 -2
- data/lib/milk_tea/core/control_flow/builder.rb +62 -2
- data/lib/milk_tea/core/control_flow/constant_propagation.rb +1 -1
- data/lib/milk_tea/core/{compatibility_helpers.rb → intrinsics.rb} +2 -2
- data/lib/milk_tea/core/lexer.rb +10 -14
- 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/lowering.rb +18 -18
- data/lib/milk_tea/core/module_loader.rb +26 -15
- data/lib/milk_tea/core/parser/statements.rb +18 -12
- data/lib/milk_tea/core/parser.rb +17 -17
- 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/core/semantic_analyzer.rb +1 -1
- data/lib/milk_tea/core.rb +6 -2
- data/lib/milk_tea/dap/lldb_dap_backend.rb +153 -0
- data/lib/milk_tea/dap/server/lldb_backend.rb +1 -1
- data/lib/milk_tea/dap.rb +1 -1
- data/lib/milk_tea/lsp.rb +1 -7
- data/lib/milk_tea/{bindings/cli.rb → tooling/bindgen_cli.rb} +1 -1
- 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/lib/milk_tea/tooling.rb +1 -1
- 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 +7 -9
- data/lib/milk_tea/core/compile_time/const_eval.rb +0 -182
- data/lib/milk_tea/core/module_loader/errors.rb +0 -23
- data/lib/milk_tea/dap/backends/lldb_dap.rb +0 -156
- /data/lib/milk_tea/core/lowering/{async.rb → async/frame_builder.rb} +0 -0
data/std/jobs.mt
CHANGED
|
@@ -53,7 +53,7 @@ function noop_completion(arg: ptr[void]) -> void:
|
|
|
53
53
|
function stop_pool_state(state: ptr[PoolState]) -> void:
|
|
54
54
|
let mutex = unsafe: read(state).mutex
|
|
55
55
|
mutex.lock()
|
|
56
|
-
defer mutex.unlock()
|
|
56
|
+
defer: mutex.unlock()
|
|
57
57
|
unsafe: read(state).stopping = true
|
|
58
58
|
let condition = unsafe: read(state).condition
|
|
59
59
|
condition.broadcast()
|
|
@@ -229,7 +229,7 @@ extending Pool:
|
|
|
229
229
|
|
|
230
230
|
let mutex = unsafe: read(state).mutex
|
|
231
231
|
mutex.lock()
|
|
232
|
-
defer mutex.unlock()
|
|
232
|
+
defer: mutex.unlock()
|
|
233
233
|
|
|
234
234
|
if unsafe: read(state).stopping:
|
|
235
235
|
return Result[bool, Error].failure(error = jobs_error(-1, "jobs pool is stopping"))
|
|
@@ -270,7 +270,7 @@ extending Pool:
|
|
|
270
270
|
|
|
271
271
|
let mutex = unsafe: read(state).mutex
|
|
272
272
|
mutex.lock()
|
|
273
|
-
defer mutex.unlock()
|
|
273
|
+
defer: mutex.unlock()
|
|
274
274
|
return unsafe: read(state).queued_jobs
|
|
275
275
|
|
|
276
276
|
|
|
@@ -280,7 +280,7 @@ extending Pool:
|
|
|
280
280
|
|
|
281
281
|
let mutex = unsafe: read(state).mutex
|
|
282
282
|
mutex.lock()
|
|
283
|
-
defer mutex.unlock()
|
|
283
|
+
defer: mutex.unlock()
|
|
284
284
|
return unsafe: read(state).queued_jobs + read(state).running_jobs
|
|
285
285
|
|
|
286
286
|
|
data/std/json.mt
CHANGED
|
@@ -375,12 +375,12 @@ function build_raw_value(value: Value) -> Result[ptr[cjson.JSON], Error]:
|
|
|
375
375
|
|
|
376
376
|
function render_with_mode(value: Value, pretty: bool) -> Result[string.String, Error]:
|
|
377
377
|
let raw_value = build_raw_value(value)?
|
|
378
|
-
defer cjson.delete(raw_value)
|
|
378
|
+
defer: cjson.delete(raw_value)
|
|
379
379
|
|
|
380
380
|
if pretty:
|
|
381
381
|
let rendered_ptr = cjson.print(raw_value) else:
|
|
382
382
|
return Result[string.String, Error].failure(error = error_message("json print failed"))
|
|
383
|
-
defer raw.cJSON_free(unsafe: rendered_ptr)
|
|
383
|
+
defer: raw.cJSON_free(unsafe: rendered_ptr)
|
|
384
384
|
return Result[
|
|
385
385
|
string.String,
|
|
386
386
|
Error
|
|
@@ -388,13 +388,13 @@ function render_with_mode(value: Value, pretty: bool) -> Result[string.String, E
|
|
|
388
388
|
|
|
389
389
|
let rendered_ptr = cjson.print_unformatted(raw_value) else:
|
|
390
390
|
return Result[string.String, Error].failure(error = error_message("json print failed"))
|
|
391
|
-
defer raw.cJSON_free(unsafe: rendered_ptr)
|
|
391
|
+
defer: raw.cJSON_free(unsafe: rendered_ptr)
|
|
392
392
|
return Result[string.String, Error].success(value = string.String.from_str(text.chars_as_str(rendered_ptr)))
|
|
393
393
|
|
|
394
394
|
|
|
395
395
|
public function parse(text_value: str) -> Result[Value, Error]:
|
|
396
396
|
var storage = arena.create(text_value.len + 1)
|
|
397
|
-
defer storage.release()
|
|
397
|
+
defer: storage.release()
|
|
398
398
|
|
|
399
399
|
let c_text = storage.to_cstr(text_value)
|
|
400
400
|
let raw_value = raw.cJSON_Parse(c_text) else:
|
|
@@ -406,7 +406,7 @@ public function parse(text_value: str) -> Result[Value, Error]:
|
|
|
406
406
|
return Result[Value, Error].failure(error = error_message("json parse failed"))
|
|
407
407
|
return Result[Value, Error].failure(error = Error(message = string.String.from_str(error_text)))
|
|
408
408
|
|
|
409
|
-
defer raw.cJSON_Delete(raw_value)
|
|
409
|
+
defer: raw.cJSON_Delete(raw_value)
|
|
410
410
|
return convert_raw_value(unsafe: ptr[cjson.JSON]?<-raw_value)
|
|
411
411
|
|
|
412
412
|
|
data/std/log.mt
CHANGED
|
@@ -34,7 +34,7 @@ public function log(level: Level, message: str) -> void:
|
|
|
34
34
|
if int<-level < int<-global_level:
|
|
35
35
|
return
|
|
36
36
|
var output = string.String.create()
|
|
37
|
-
defer output.release()
|
|
37
|
+
defer: output.release()
|
|
38
38
|
output.append("[")
|
|
39
39
|
output.append(level_label(level))
|
|
40
40
|
output.append("] ")
|
data/std/mem/tracking.mt
CHANGED
data/std/net/channel.mt
CHANGED
|
@@ -154,7 +154,7 @@ function build_packet(
|
|
|
154
154
|
content: span[ubyte]
|
|
155
155
|
) -> bytes.Bytes:
|
|
156
156
|
var buffer = vec.Vec[ubyte].with_capacity(header_bytes + content.len)
|
|
157
|
-
defer buffer.release()
|
|
157
|
+
defer: buffer.release()
|
|
158
158
|
|
|
159
159
|
buffer.append_array(encode_uint(header_magic))
|
|
160
160
|
buffer.append_array(encode_uint(sequence))
|
|
@@ -275,7 +275,7 @@ async function send_connected_packet(
|
|
|
275
275
|
ack_bits = unsafe: read(protocol).received_mask
|
|
276
276
|
|
|
277
277
|
var framed = build_packet(sequence, ack, ack_bits, packet_flags, content)
|
|
278
|
-
defer framed.release()
|
|
278
|
+
defer: framed.release()
|
|
279
279
|
|
|
280
280
|
(await socket.send(framed.as_span()))?
|
|
281
281
|
return Result[bool, net.Error].success(value = true)
|
|
@@ -297,7 +297,7 @@ async function send_packet_to(
|
|
|
297
297
|
ack_bits = unsafe: read(protocol).received_mask
|
|
298
298
|
|
|
299
299
|
var framed = build_packet(sequence, ack, ack_bits, packet_flags, content)
|
|
300
|
-
defer framed.release()
|
|
300
|
+
defer: framed.release()
|
|
301
301
|
|
|
302
302
|
(await socket.send_to(framed.as_span(), destination))?
|
|
303
303
|
return Result[bool, net.Error].success(value = true)
|
|
@@ -475,7 +475,7 @@ extending Channel:
|
|
|
475
475
|
|
|
476
476
|
public async editable function recv() -> Result[Option[Message], net.Error]:
|
|
477
477
|
var packet = (await this.socket.recv(this.config.max_payload_bytes + header_bytes))?
|
|
478
|
-
defer packet.release()
|
|
478
|
+
defer: packet.release()
|
|
479
479
|
|
|
480
480
|
let header = decode_header(packet)?
|
|
481
481
|
let protocol = unsafe: ptr_of(this.protocol)
|
data/std/net/clock.mt
CHANGED
|
@@ -137,7 +137,7 @@ public async function measure_offset(
|
|
|
137
137
|
) -> Result[ClockSync, Error]:
|
|
138
138
|
let t1 = libuv.hrtime()
|
|
139
139
|
var request = build_request(t1)
|
|
140
|
-
defer request.release()
|
|
140
|
+
defer: request.release()
|
|
141
141
|
(await socket.send_to(request.as_span(), peer)).map_error(proc(_: net.Error) -> Error:
|
|
142
142
|
clock_error(err_send_failed, "failed to send sync request")
|
|
143
143
|
)?
|
|
@@ -154,8 +154,8 @@ public async function measure_offset(
|
|
|
154
154
|
)
|
|
155
155
|
Result.success as dp:
|
|
156
156
|
var datagram = dp.value
|
|
157
|
-
defer datagram.data.release()
|
|
158
|
-
defer datagram.source.release()
|
|
157
|
+
defer: datagram.data.release()
|
|
158
|
+
defer: datagram.source.release()
|
|
159
159
|
if is_clock_packet(datagram.data.as_span()):
|
|
160
160
|
let parse_result = parse_response(datagram.data.as_span())
|
|
161
161
|
match parse_result:
|
|
@@ -182,15 +182,15 @@ public async function respond_to_sync(
|
|
|
182
182
|
match recv_result:
|
|
183
183
|
Result.success as dp:
|
|
184
184
|
var datagram = dp.value
|
|
185
|
-
defer datagram.data.release()
|
|
186
|
-
defer datagram.source.release()
|
|
185
|
+
defer: datagram.data.release()
|
|
186
|
+
defer: datagram.source.release()
|
|
187
187
|
if is_clock_packet(datagram.data.as_span()):
|
|
188
188
|
let parse_result = parse_request(datagram.data.as_span())
|
|
189
189
|
match parse_result:
|
|
190
190
|
Result.success as tp:
|
|
191
191
|
let t2 = libuv.hrtime()
|
|
192
192
|
var resp = build_response(tp.value, t2)
|
|
193
|
-
defer resp.release()
|
|
193
|
+
defer: resp.release()
|
|
194
194
|
let _ = await socket.send_to(resp.as_span(), datagram.source)
|
|
195
195
|
Result.failure:
|
|
196
196
|
pass
|
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:
|