SyscallRegistryEntry rewrite to use builder pattern
All checks were successful
Intrepid/Prometeu/Runtime/pipeline/pr-master This commit looks good
All checks were successful
Intrepid/Prometeu/Runtime/pipeline/pr-master This commit looks good
This commit is contained in:
parent
e672e4d6b6
commit
f5580ae0ce
@ -96,6 +96,62 @@ pub struct SyscallRegistryEntry {
|
|||||||
pub meta: SyscallMeta,
|
pub meta: SyscallMeta,
|
||||||
}
|
}
|
||||||
|
|
||||||
|
impl SyscallRegistryEntry {
|
||||||
|
/// Starts the builder with mandatory fields and sensible default values.
|
||||||
|
pub const fn builder(syscall: Syscall, module: &'static str, name: &'static str) -> Self {
|
||||||
|
Self {
|
||||||
|
syscall,
|
||||||
|
meta: SyscallMeta {
|
||||||
|
id: syscall as u32,
|
||||||
|
module,
|
||||||
|
name,
|
||||||
|
version: 1, // Default for new syscalls
|
||||||
|
arg_slots: 0,
|
||||||
|
ret_slots: 0,
|
||||||
|
caps: 0,
|
||||||
|
determinism: Determinism::Deterministic,
|
||||||
|
may_allocate: false,
|
||||||
|
cost_hint: 1,
|
||||||
|
},
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
pub const fn version(mut self, n: u16) -> Self {
|
||||||
|
self.meta.version = n;
|
||||||
|
self
|
||||||
|
}
|
||||||
|
|
||||||
|
pub const fn args(mut self, n: u8) -> Self {
|
||||||
|
self.meta.arg_slots = n;
|
||||||
|
self
|
||||||
|
}
|
||||||
|
|
||||||
|
pub const fn rets(mut self, n: u16) -> Self {
|
||||||
|
self.meta.ret_slots = n;
|
||||||
|
self
|
||||||
|
}
|
||||||
|
|
||||||
|
pub const fn caps(mut self, caps: CapFlags) -> Self {
|
||||||
|
self.meta.caps = caps;
|
||||||
|
self
|
||||||
|
}
|
||||||
|
|
||||||
|
pub const fn non_deterministic(mut self) -> Self {
|
||||||
|
self.meta.determinism = Determinism::NonDeterministic;
|
||||||
|
self
|
||||||
|
}
|
||||||
|
|
||||||
|
pub const fn may_allocate(mut self) -> Self {
|
||||||
|
self.meta.may_allocate = true;
|
||||||
|
self
|
||||||
|
}
|
||||||
|
|
||||||
|
pub const fn cost(mut self, cost: u32) -> Self {
|
||||||
|
self.meta.cost_hint = cost;
|
||||||
|
self
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
pub fn meta_for(syscall: Syscall) -> &'static SyscallMeta {
|
pub fn meta_for(syscall: Syscall) -> &'static SyscallMeta {
|
||||||
registry::meta_for(syscall)
|
registry::meta_for(syscall)
|
||||||
}
|
}
|
||||||
|
|||||||
@ -1,53 +1,27 @@
|
|||||||
use super::entry;
|
use crate::syscalls::{Syscall, SyscallRegistryEntry, caps};
|
||||||
use crate::syscalls::{Determinism, Syscall, SyscallRegistryEntry, caps};
|
|
||||||
|
|
||||||
pub(crate) const ENTRIES: &[SyscallRegistryEntry] = &[
|
pub(crate) const ENTRIES: &[SyscallRegistryEntry] = &[
|
||||||
entry(
|
SyscallRegistryEntry::builder(Syscall::AssetLoad, "asset", "load")
|
||||||
Syscall::AssetLoad,
|
.args(2)
|
||||||
"asset",
|
.rets(2)
|
||||||
"load",
|
.caps(caps::ASSET)
|
||||||
1,
|
.non_deterministic()
|
||||||
2,
|
.cost(20),
|
||||||
2,
|
SyscallRegistryEntry::builder(Syscall::AssetStatus, "asset", "status")
|
||||||
caps::ASSET,
|
.args(1)
|
||||||
Determinism::NonDeterministic,
|
.rets(1)
|
||||||
false,
|
.caps(caps::ASSET)
|
||||||
20,
|
.non_deterministic(),
|
||||||
),
|
SyscallRegistryEntry::builder(Syscall::AssetCommit, "asset", "commit")
|
||||||
entry(
|
.args(1)
|
||||||
Syscall::AssetStatus,
|
.rets(1)
|
||||||
"asset",
|
.caps(caps::ASSET)
|
||||||
"status",
|
.non_deterministic()
|
||||||
1,
|
.cost(20),
|
||||||
1,
|
SyscallRegistryEntry::builder(Syscall::AssetCancel, "asset", "cancel")
|
||||||
1,
|
.args(1)
|
||||||
caps::ASSET,
|
.rets(1)
|
||||||
Determinism::NonDeterministic,
|
.caps(caps::ASSET)
|
||||||
false,
|
.non_deterministic()
|
||||||
1,
|
.cost(20),
|
||||||
),
|
|
||||||
entry(
|
|
||||||
Syscall::AssetCommit,
|
|
||||||
"asset",
|
|
||||||
"commit",
|
|
||||||
1,
|
|
||||||
1,
|
|
||||||
1,
|
|
||||||
caps::ASSET,
|
|
||||||
Determinism::NonDeterministic,
|
|
||||||
false,
|
|
||||||
20,
|
|
||||||
),
|
|
||||||
entry(
|
|
||||||
Syscall::AssetCancel,
|
|
||||||
"asset",
|
|
||||||
"cancel",
|
|
||||||
1,
|
|
||||||
1,
|
|
||||||
1,
|
|
||||||
caps::ASSET,
|
|
||||||
Determinism::NonDeterministic,
|
|
||||||
false,
|
|
||||||
20,
|
|
||||||
),
|
|
||||||
];
|
];
|
||||||
|
|||||||
@ -1,29 +1,14 @@
|
|||||||
use super::entry;
|
use crate::syscalls::{Syscall, SyscallRegistryEntry, caps};
|
||||||
use crate::syscalls::{Determinism, Syscall, SyscallRegistryEntry, caps};
|
|
||||||
|
|
||||||
pub(crate) const ENTRIES: &[SyscallRegistryEntry] = &[
|
pub(crate) const ENTRIES: &[SyscallRegistryEntry] = &[
|
||||||
entry(
|
SyscallRegistryEntry::builder(Syscall::AudioPlaySample, "audio", "play_sample")
|
||||||
Syscall::AudioPlaySample,
|
.args(5)
|
||||||
"audio",
|
.rets(1)
|
||||||
"play_sample",
|
.caps(caps::AUDIO)
|
||||||
1,
|
.cost(5),
|
||||||
5,
|
SyscallRegistryEntry::builder(Syscall::AudioPlay, "audio", "play")
|
||||||
1,
|
.args(7)
|
||||||
caps::AUDIO,
|
.rets(1)
|
||||||
Determinism::Deterministic,
|
.caps(caps::AUDIO)
|
||||||
false,
|
.cost(5),
|
||||||
5,
|
|
||||||
),
|
|
||||||
entry(
|
|
||||||
Syscall::AudioPlay,
|
|
||||||
"audio",
|
|
||||||
"play",
|
|
||||||
1,
|
|
||||||
7,
|
|
||||||
1,
|
|
||||||
caps::AUDIO,
|
|
||||||
Determinism::Deterministic,
|
|
||||||
false,
|
|
||||||
5,
|
|
||||||
),
|
|
||||||
];
|
];
|
||||||
|
|||||||
@ -1,29 +1,12 @@
|
|||||||
use super::entry;
|
use crate::syscalls::{Syscall, SyscallRegistryEntry, caps};
|
||||||
use crate::syscalls::{Determinism, Syscall, SyscallRegistryEntry, caps};
|
|
||||||
|
|
||||||
pub(crate) const ENTRIES: &[SyscallRegistryEntry] = &[
|
pub(crate) const ENTRIES: &[SyscallRegistryEntry] = &[
|
||||||
entry(
|
SyscallRegistryEntry::builder(Syscall::BankInfo, "bank", "info")
|
||||||
Syscall::BankInfo,
|
.args(1)
|
||||||
"bank",
|
.rets(1)
|
||||||
"info",
|
.caps(caps::BANK),
|
||||||
1,
|
SyscallRegistryEntry::builder(Syscall::BankSlotInfo, "bank", "slot_info")
|
||||||
1,
|
.args(2)
|
||||||
1,
|
.rets(1)
|
||||||
caps::BANK,
|
.caps(caps::BANK),
|
||||||
Determinism::Deterministic,
|
|
||||||
false,
|
|
||||||
1,
|
|
||||||
),
|
|
||||||
entry(
|
|
||||||
Syscall::BankSlotInfo,
|
|
||||||
"bank",
|
|
||||||
"slot_info",
|
|
||||||
1,
|
|
||||||
2,
|
|
||||||
1,
|
|
||||||
caps::BANK,
|
|
||||||
Determinism::Deterministic,
|
|
||||||
false,
|
|
||||||
1,
|
|
||||||
),
|
|
||||||
];
|
];
|
||||||
|
|||||||
@ -1,150 +1,68 @@
|
|||||||
use super::entry;
|
use crate::syscalls::{Syscall, SyscallRegistryEntry, caps};
|
||||||
use crate::syscalls::{Determinism, Syscall, SyscallRegistryEntry, caps};
|
|
||||||
|
|
||||||
pub(crate) const ENTRIES: &[SyscallRegistryEntry] = &[
|
pub(crate) const ENTRIES: &[SyscallRegistryEntry] = &[
|
||||||
entry(
|
SyscallRegistryEntry::builder(Syscall::FsOpen, "fs", "open")
|
||||||
Syscall::FsOpen,
|
.args(1)
|
||||||
"fs",
|
.rets(1)
|
||||||
"open",
|
.caps(caps::FS)
|
||||||
1,
|
.non_deterministic()
|
||||||
1,
|
.cost(20),
|
||||||
1,
|
SyscallRegistryEntry::builder(Syscall::FsRead, "fs", "read")
|
||||||
caps::FS,
|
.args(1)
|
||||||
Determinism::NonDeterministic,
|
.rets(1)
|
||||||
false,
|
.caps(caps::FS)
|
||||||
20,
|
.non_deterministic()
|
||||||
),
|
.cost(20),
|
||||||
entry(
|
SyscallRegistryEntry::builder(Syscall::FsWrite, "fs", "write")
|
||||||
Syscall::FsRead,
|
.args(2)
|
||||||
"fs",
|
.rets(1)
|
||||||
"read",
|
.caps(caps::FS)
|
||||||
1,
|
.non_deterministic()
|
||||||
1,
|
.cost(20),
|
||||||
1,
|
SyscallRegistryEntry::builder(Syscall::FsClose, "fs", "close").args(1).caps(caps::FS).cost(5),
|
||||||
caps::FS,
|
SyscallRegistryEntry::builder(Syscall::FsListDir, "fs", "list_dir")
|
||||||
Determinism::NonDeterministic,
|
.args(1)
|
||||||
false,
|
.rets(1)
|
||||||
20,
|
.caps(caps::FS)
|
||||||
),
|
.non_deterministic()
|
||||||
entry(
|
.cost(20),
|
||||||
Syscall::FsWrite,
|
SyscallRegistryEntry::builder(Syscall::FsExists, "fs", "exists").args(1).rets(1).caps(caps::FS),
|
||||||
"fs",
|
SyscallRegistryEntry::builder(Syscall::FsDelete, "fs", "delete")
|
||||||
"write",
|
.args(1)
|
||||||
1,
|
.caps(caps::FS)
|
||||||
2,
|
.non_deterministic()
|
||||||
1,
|
.cost(20),
|
||||||
caps::FS,
|
SyscallRegistryEntry::builder(Syscall::MemSlotCount, "mem", "slot_count")
|
||||||
Determinism::NonDeterministic,
|
.rets(2)
|
||||||
false,
|
.caps(caps::FS),
|
||||||
20,
|
SyscallRegistryEntry::builder(Syscall::MemSlotStat, "mem", "slot_stat")
|
||||||
),
|
.args(1)
|
||||||
entry(Syscall::FsClose, "fs", "close", 1, 1, 0, caps::FS, Determinism::Deterministic, false, 5),
|
.rets(5)
|
||||||
entry(
|
.caps(caps::FS)
|
||||||
Syscall::FsListDir,
|
.non_deterministic()
|
||||||
"fs",
|
.cost(5),
|
||||||
"list_dir",
|
SyscallRegistryEntry::builder(Syscall::MemSlotRead, "mem", "slot_read")
|
||||||
1,
|
.args(3)
|
||||||
1,
|
.rets(3)
|
||||||
1,
|
.caps(caps::FS)
|
||||||
caps::FS,
|
.non_deterministic()
|
||||||
Determinism::NonDeterministic,
|
.cost(20),
|
||||||
false,
|
SyscallRegistryEntry::builder(Syscall::MemSlotWrite, "mem", "slot_write")
|
||||||
20,
|
.args(3)
|
||||||
),
|
.rets(2)
|
||||||
entry(
|
.caps(caps::FS)
|
||||||
Syscall::FsExists,
|
.non_deterministic()
|
||||||
"fs",
|
.cost(20),
|
||||||
"exists",
|
SyscallRegistryEntry::builder(Syscall::MemSlotCommit, "mem", "slot_commit")
|
||||||
1,
|
.args(1)
|
||||||
1,
|
.rets(1)
|
||||||
1,
|
.caps(caps::FS)
|
||||||
caps::FS,
|
.non_deterministic()
|
||||||
Determinism::Deterministic,
|
.cost(20),
|
||||||
false,
|
SyscallRegistryEntry::builder(Syscall::MemSlotClear, "mem", "slot_clear")
|
||||||
1,
|
.args(1)
|
||||||
),
|
.rets(1)
|
||||||
entry(
|
.caps(caps::FS)
|
||||||
Syscall::FsDelete,
|
.non_deterministic()
|
||||||
"fs",
|
.cost(20),
|
||||||
"delete",
|
|
||||||
1,
|
|
||||||
1,
|
|
||||||
0,
|
|
||||||
caps::FS,
|
|
||||||
Determinism::NonDeterministic,
|
|
||||||
false,
|
|
||||||
20,
|
|
||||||
),
|
|
||||||
entry(
|
|
||||||
Syscall::MemSlotCount,
|
|
||||||
"mem",
|
|
||||||
"slot_count",
|
|
||||||
1,
|
|
||||||
0,
|
|
||||||
2,
|
|
||||||
caps::FS,
|
|
||||||
Determinism::Deterministic,
|
|
||||||
false,
|
|
||||||
1,
|
|
||||||
),
|
|
||||||
entry(
|
|
||||||
Syscall::MemSlotStat,
|
|
||||||
"mem",
|
|
||||||
"slot_stat",
|
|
||||||
1,
|
|
||||||
1,
|
|
||||||
5,
|
|
||||||
caps::FS,
|
|
||||||
Determinism::NonDeterministic,
|
|
||||||
false,
|
|
||||||
5,
|
|
||||||
),
|
|
||||||
entry(
|
|
||||||
Syscall::MemSlotRead,
|
|
||||||
"mem",
|
|
||||||
"slot_read",
|
|
||||||
1,
|
|
||||||
3,
|
|
||||||
3,
|
|
||||||
caps::FS,
|
|
||||||
Determinism::NonDeterministic,
|
|
||||||
false,
|
|
||||||
20,
|
|
||||||
),
|
|
||||||
entry(
|
|
||||||
Syscall::MemSlotWrite,
|
|
||||||
"mem",
|
|
||||||
"slot_write",
|
|
||||||
1,
|
|
||||||
3,
|
|
||||||
2,
|
|
||||||
caps::FS,
|
|
||||||
Determinism::NonDeterministic,
|
|
||||||
false,
|
|
||||||
20,
|
|
||||||
),
|
|
||||||
entry(
|
|
||||||
Syscall::MemSlotCommit,
|
|
||||||
"mem",
|
|
||||||
"slot_commit",
|
|
||||||
1,
|
|
||||||
1,
|
|
||||||
1,
|
|
||||||
caps::FS,
|
|
||||||
Determinism::NonDeterministic,
|
|
||||||
false,
|
|
||||||
20,
|
|
||||||
),
|
|
||||||
entry(
|
|
||||||
Syscall::MemSlotClear,
|
|
||||||
"mem",
|
|
||||||
"slot_clear",
|
|
||||||
1,
|
|
||||||
1,
|
|
||||||
1,
|
|
||||||
caps::FS,
|
|
||||||
Determinism::NonDeterministic,
|
|
||||||
false,
|
|
||||||
20,
|
|
||||||
),
|
|
||||||
];
|
];
|
||||||
|
|||||||
@ -1,113 +1,41 @@
|
|||||||
use super::entry;
|
use crate::syscalls::{Syscall, SyscallRegistryEntry, caps};
|
||||||
use crate::syscalls::{Determinism, Syscall, SyscallRegistryEntry, caps};
|
|
||||||
|
|
||||||
pub(crate) const ENTRIES: &[SyscallRegistryEntry] = &[
|
pub(crate) const ENTRIES: &[SyscallRegistryEntry] = &[
|
||||||
entry(
|
SyscallRegistryEntry::builder(Syscall::GfxClear, "gfx", "clear")
|
||||||
Syscall::GfxClear,
|
.args(1)
|
||||||
"gfx",
|
.caps(caps::GFX)
|
||||||
"clear",
|
.cost(20),
|
||||||
1,
|
SyscallRegistryEntry::builder(Syscall::GfxFillRect, "gfx", "fill_rect")
|
||||||
1,
|
.args(5)
|
||||||
0,
|
.caps(caps::GFX)
|
||||||
caps::GFX,
|
.cost(20),
|
||||||
Determinism::Deterministic,
|
SyscallRegistryEntry::builder(Syscall::GfxDrawLine, "gfx", "draw_line")
|
||||||
false,
|
.args(5)
|
||||||
20,
|
.caps(caps::GFX)
|
||||||
),
|
.cost(5),
|
||||||
entry(
|
SyscallRegistryEntry::builder(Syscall::GfxDrawCircle, "gfx", "draw_circle")
|
||||||
Syscall::GfxFillRect,
|
.args(4)
|
||||||
"gfx",
|
.caps(caps::GFX)
|
||||||
"fill_rect",
|
.cost(5),
|
||||||
1,
|
SyscallRegistryEntry::builder(Syscall::GfxDrawDisc, "gfx", "draw_disc")
|
||||||
5,
|
.args(5)
|
||||||
0,
|
.caps(caps::GFX)
|
||||||
caps::GFX,
|
.cost(5),
|
||||||
Determinism::Deterministic,
|
SyscallRegistryEntry::builder(Syscall::GfxDrawSquare, "gfx", "draw_square")
|
||||||
false,
|
.args(6)
|
||||||
20,
|
.caps(caps::GFX)
|
||||||
),
|
.cost(5),
|
||||||
entry(
|
SyscallRegistryEntry::builder(Syscall::GfxSetSprite, "gfx", "set_sprite")
|
||||||
Syscall::GfxDrawLine,
|
.args(10)
|
||||||
"gfx",
|
.rets(1)
|
||||||
"draw_line",
|
.caps(caps::GFX)
|
||||||
1,
|
.cost(5),
|
||||||
5,
|
SyscallRegistryEntry::builder(Syscall::GfxDrawText, "gfx", "draw_text")
|
||||||
0,
|
.args(4)
|
||||||
caps::GFX,
|
.caps(caps::GFX)
|
||||||
Determinism::Deterministic,
|
.cost(20),
|
||||||
false,
|
SyscallRegistryEntry::builder(Syscall::GfxClear565, "gfx", "clear_565")
|
||||||
5,
|
.args(1)
|
||||||
),
|
.caps(caps::GFX)
|
||||||
entry(
|
.cost(20),
|
||||||
Syscall::GfxDrawCircle,
|
|
||||||
"gfx",
|
|
||||||
"draw_circle",
|
|
||||||
1,
|
|
||||||
4,
|
|
||||||
0,
|
|
||||||
caps::GFX,
|
|
||||||
Determinism::Deterministic,
|
|
||||||
false,
|
|
||||||
5,
|
|
||||||
),
|
|
||||||
entry(
|
|
||||||
Syscall::GfxDrawDisc,
|
|
||||||
"gfx",
|
|
||||||
"draw_disc",
|
|
||||||
1,
|
|
||||||
5,
|
|
||||||
0,
|
|
||||||
caps::GFX,
|
|
||||||
Determinism::Deterministic,
|
|
||||||
false,
|
|
||||||
5,
|
|
||||||
),
|
|
||||||
entry(
|
|
||||||
Syscall::GfxDrawSquare,
|
|
||||||
"gfx",
|
|
||||||
"draw_square",
|
|
||||||
1,
|
|
||||||
6,
|
|
||||||
0,
|
|
||||||
caps::GFX,
|
|
||||||
Determinism::Deterministic,
|
|
||||||
false,
|
|
||||||
5,
|
|
||||||
),
|
|
||||||
entry(
|
|
||||||
Syscall::GfxSetSprite,
|
|
||||||
"gfx",
|
|
||||||
"set_sprite",
|
|
||||||
1,
|
|
||||||
10,
|
|
||||||
1,
|
|
||||||
caps::GFX,
|
|
||||||
Determinism::Deterministic,
|
|
||||||
false,
|
|
||||||
5,
|
|
||||||
),
|
|
||||||
entry(
|
|
||||||
Syscall::GfxDrawText,
|
|
||||||
"gfx",
|
|
||||||
"draw_text",
|
|
||||||
1,
|
|
||||||
4,
|
|
||||||
0,
|
|
||||||
caps::GFX,
|
|
||||||
Determinism::Deterministic,
|
|
||||||
false,
|
|
||||||
20,
|
|
||||||
),
|
|
||||||
entry(
|
|
||||||
Syscall::GfxClear565,
|
|
||||||
"gfx",
|
|
||||||
"clear_565",
|
|
||||||
1,
|
|
||||||
1,
|
|
||||||
0,
|
|
||||||
caps::GFX,
|
|
||||||
Determinism::Deterministic,
|
|
||||||
false,
|
|
||||||
20,
|
|
||||||
),
|
|
||||||
];
|
];
|
||||||
|
|||||||
@ -1,29 +1,14 @@
|
|||||||
use super::entry;
|
use crate::syscalls::{Syscall, SyscallRegistryEntry, caps};
|
||||||
use crate::syscalls::{Determinism, Syscall, SyscallRegistryEntry, caps};
|
|
||||||
|
|
||||||
pub(crate) const ENTRIES: &[SyscallRegistryEntry] = &[
|
pub(crate) const ENTRIES: &[SyscallRegistryEntry] = &[
|
||||||
entry(
|
SyscallRegistryEntry::builder(Syscall::LogWrite, "log", "write")
|
||||||
Syscall::LogWrite,
|
.args(2)
|
||||||
"log",
|
.caps(caps::LOG)
|
||||||
"write",
|
.non_deterministic()
|
||||||
1,
|
.cost(5),
|
||||||
2,
|
SyscallRegistryEntry::builder(Syscall::LogWriteTag, "log", "write_tag")
|
||||||
0,
|
.args(3)
|
||||||
caps::LOG,
|
.caps(caps::LOG)
|
||||||
Determinism::NonDeterministic,
|
.non_deterministic()
|
||||||
false,
|
.cost(5),
|
||||||
5,
|
|
||||||
),
|
|
||||||
entry(
|
|
||||||
Syscall::LogWriteTag,
|
|
||||||
"log",
|
|
||||||
"write_tag",
|
|
||||||
1,
|
|
||||||
3,
|
|
||||||
0,
|
|
||||||
caps::LOG,
|
|
||||||
Determinism::NonDeterministic,
|
|
||||||
false,
|
|
||||||
5,
|
|
||||||
),
|
|
||||||
];
|
];
|
||||||
|
|||||||
@ -6,36 +6,7 @@ mod gfx;
|
|||||||
mod log;
|
mod log;
|
||||||
mod system;
|
mod system;
|
||||||
|
|
||||||
use super::{CapFlags, Determinism, Syscall, SyscallMeta, SyscallRegistryEntry};
|
use super::SyscallRegistryEntry;
|
||||||
|
|
||||||
pub(crate) const fn entry(
|
|
||||||
syscall: Syscall,
|
|
||||||
module: &'static str,
|
|
||||||
name: &'static str,
|
|
||||||
version: u16,
|
|
||||||
arg_slots: u8,
|
|
||||||
ret_slots: u16,
|
|
||||||
caps: CapFlags,
|
|
||||||
determinism: Determinism,
|
|
||||||
may_allocate: bool,
|
|
||||||
cost_hint: u32,
|
|
||||||
) -> SyscallRegistryEntry {
|
|
||||||
SyscallRegistryEntry {
|
|
||||||
syscall,
|
|
||||||
meta: SyscallMeta {
|
|
||||||
id: syscall as u32,
|
|
||||||
module,
|
|
||||||
name,
|
|
||||||
version,
|
|
||||||
arg_slots,
|
|
||||||
ret_slots,
|
|
||||||
caps,
|
|
||||||
determinism,
|
|
||||||
may_allocate,
|
|
||||||
cost_hint,
|
|
||||||
},
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
pub(crate) fn all_entries() -> impl Iterator<Item = &'static SyscallRegistryEntry> {
|
pub(crate) fn all_entries() -> impl Iterator<Item = &'static SyscallRegistryEntry> {
|
||||||
system::ENTRIES
|
system::ENTRIES
|
||||||
|
|||||||
@ -1,29 +1,11 @@
|
|||||||
use super::entry;
|
use crate::syscalls::{Syscall, SyscallRegistryEntry, caps};
|
||||||
use crate::syscalls::{Determinism, Syscall, SyscallRegistryEntry, caps};
|
|
||||||
|
|
||||||
pub(crate) const ENTRIES: &[SyscallRegistryEntry] = &[
|
pub(crate) const ENTRIES: &[SyscallRegistryEntry] = &[
|
||||||
entry(
|
SyscallRegistryEntry::builder(Syscall::SystemHasCart, "system", "has_cart")
|
||||||
Syscall::SystemHasCart,
|
.rets(1)
|
||||||
"system",
|
.caps(caps::SYSTEM),
|
||||||
"has_cart",
|
SyscallRegistryEntry::builder(Syscall::SystemRunCart, "system", "run_cart")
|
||||||
1,
|
.caps(caps::SYSTEM)
|
||||||
0,
|
.non_deterministic()
|
||||||
1,
|
.cost(50),
|
||||||
caps::SYSTEM,
|
|
||||||
Determinism::Deterministic,
|
|
||||||
false,
|
|
||||||
1,
|
|
||||||
),
|
|
||||||
entry(
|
|
||||||
Syscall::SystemRunCart,
|
|
||||||
"system",
|
|
||||||
"run_cart",
|
|
||||||
1,
|
|
||||||
0,
|
|
||||||
0,
|
|
||||||
caps::SYSTEM,
|
|
||||||
Determinism::NonDeterministic,
|
|
||||||
false,
|
|
||||||
50,
|
|
||||||
),
|
|
||||||
];
|
];
|
||||||
|
|||||||
@ -146,10 +146,10 @@ impl Verifier {
|
|||||||
|
|
||||||
let func_code = &code[func_start..func_end];
|
let func_code = &code[func_start..func_end];
|
||||||
|
|
||||||
// Funções vazias (sem qualquer byte de código) são consideradas válidas no verificador.
|
// Empty functions (no code bytes) are considered valid in the verifier.
|
||||||
// Elas não consomem nem produzem valores na pilha e não possuem fluxo interno.
|
// They do not consume or produce values on the stack and have no internal flow.
|
||||||
// Observação: se uma função vazia for chamada em tempo de execução e retorno/efeitos
|
// Note: if an empty function is called at runtime and return/effects
|
||||||
// forem esperados, caberá ao gerador de código/linker impedir tal situação.
|
// are expected, it is the responsibility of the code generator/linker to prevent this situation.
|
||||||
if func_code.is_empty() {
|
if func_code.is_empty() {
|
||||||
return Ok(0);
|
return Ok(0);
|
||||||
}
|
}
|
||||||
|
|||||||
Loading…
x
Reference in New Issue
Block a user