mirror of
https://github.com/roc-lang/roc.git
synced 2025-09-28 14:24:45 +00:00
use associated const
This commit is contained in:
parent
fea8ab47cc
commit
e7f59ea62d
2 changed files with 30 additions and 14 deletions
|
@ -24,7 +24,7 @@ pub fn proc_spec(proc: &Proc) -> Result<FuncDef> {
|
|||
// introduce the arguments
|
||||
let mut argument_layouts = Vec::new();
|
||||
for (i, (layout, symbol)) in proc.args.iter().enumerate() {
|
||||
let value_id = builder.add_get_tuple_field(block, morphic_lib::ARG_VALUE_ID, i as u32)?;
|
||||
let value_id = builder.add_get_tuple_field(block, ValueId::ARGUMENT, i as u32)?;
|
||||
env.symbols.insert(*symbol, value_id);
|
||||
|
||||
argument_layouts.push(*layout);
|
||||
|
|
38
vendor/morphic_lib/src/api.rs
vendored
38
vendor/morphic_lib/src/api.rs
vendored
|
@ -91,10 +91,12 @@ pub struct TypeNameBuf(Vec<u8>);
|
|||
#[derive(Clone, Copy, Debug, PartialEq, Eq, PartialOrd, Ord, Hash)]
|
||||
pub struct ValueId(pub u32);
|
||||
|
||||
/// Value id 0 always refers to the argument to the current function.
|
||||
impl ValueId {
|
||||
/// The `ValueId` that refers to the argument to the current function.
|
||||
///
|
||||
/// Every function takes exactly one argument. Multiple arguments can be represented via tuples.
|
||||
pub const ARG_VALUE_ID: ValueId = ValueId(0);
|
||||
pub const ARGUMENT: Self = ValueId(0);
|
||||
}
|
||||
|
||||
/// A reference to an arena-allocated join point in a function body.
|
||||
///
|
||||
|
@ -171,12 +173,16 @@ pub trait TypeContext {
|
|||
fn add_bag_type(&mut self, item_type: TypeId) -> Result<TypeId>;
|
||||
}
|
||||
|
||||
#[derive(Debug, Default)]
|
||||
#[derive(Debug)]
|
||||
struct SeqGen {
|
||||
next: u32,
|
||||
}
|
||||
|
||||
impl SeqGen {
|
||||
fn new() -> Self {
|
||||
Self { next: 0 }
|
||||
}
|
||||
|
||||
fn next(&mut self) -> u32 {
|
||||
let result = self.next;
|
||||
self.next += 1;
|
||||
|
@ -208,7 +214,7 @@ impl Default for TypeDefBuilder {
|
|||
impl TypeDefBuilder {
|
||||
pub fn new() -> Self {
|
||||
Self {
|
||||
tid_gen: SeqGen::default(),
|
||||
tid_gen: SeqGen::new(),
|
||||
}
|
||||
}
|
||||
|
||||
|
@ -304,16 +310,16 @@ impl Default for FuncDefBuilder {
|
|||
impl FuncDefBuilder {
|
||||
pub fn new() -> Self {
|
||||
let mut result = Self {
|
||||
tid_gen: SeqGen::default(),
|
||||
bid_gen: SeqGen::default(),
|
||||
vid_gen: SeqGen::default(),
|
||||
jid_gen: SeqGen::default(),
|
||||
tid_gen: SeqGen::new(),
|
||||
bid_gen: SeqGen::new(),
|
||||
vid_gen: SeqGen::new(),
|
||||
jid_gen: SeqGen::new(),
|
||||
blocks: BTreeMap::new(),
|
||||
join_points: BTreeMap::new(),
|
||||
callee_spec_vars: BTreeMap::new(),
|
||||
update_mode_vars: BTreeSet::new(),
|
||||
};
|
||||
// Generate `ARG_VALUE_ID`
|
||||
// Generate `ValueId::ARGUMENT`
|
||||
result.vid_gen.next();
|
||||
result
|
||||
}
|
||||
|
@ -799,12 +805,17 @@ pub struct ModDef {
|
|||
func_defs: BTreeMap<FuncNameBuf, FuncDef>,
|
||||
}
|
||||
|
||||
#[derive(Default)]
|
||||
pub struct ModDefBuilder {
|
||||
type_names: BTreeSet<TypeNameBuf>,
|
||||
func_defs: BTreeMap<FuncNameBuf, FuncDef>,
|
||||
}
|
||||
|
||||
impl Default for ModDefBuilder {
|
||||
fn default() -> Self {
|
||||
Self::new()
|
||||
}
|
||||
}
|
||||
|
||||
impl ModDefBuilder {
|
||||
pub fn new() -> Self {
|
||||
Self {
|
||||
|
@ -842,12 +853,17 @@ pub struct Program {
|
|||
entry_points: BTreeMap<EntryPointNameBuf, (ModNameBuf, FuncNameBuf)>,
|
||||
}
|
||||
|
||||
#[derive(Default)]
|
||||
pub struct ProgramBuilder {
|
||||
mods: BTreeMap<ModNameBuf, ModDef>,
|
||||
entry_points: BTreeMap<EntryPointNameBuf, (ModNameBuf, FuncNameBuf)>,
|
||||
}
|
||||
|
||||
impl Default for ProgramBuilder {
|
||||
fn default() -> Self {
|
||||
Self::new()
|
||||
}
|
||||
}
|
||||
|
||||
impl ProgramBuilder {
|
||||
pub fn new() -> Self {
|
||||
Self {
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue