/// A declared core function. /// /// This is a member of both the core alias and canon sections. #[derive(Debug)] pubstruct CoreFunc<'a> { /// Where this `core func` was defined. pub span: Span, /// An identifier that this function is resolved with (optionally) for name /// resolution. pub id: Option<Id<'a>>, /// An optional name for this function stored in the custom `name` section. pub name: Option<NameAnnotation<'a>>, /// The kind of core function. pub kind: CoreFuncKind<'a>,
}
impl<'a> Parse<'a> for CoreFunc<'a> { fn parse(parser: Parser<'a>) -> Result<Self> { let span = parser.parse::<kw::core>()?.0;
parser.parse::<kw::func>()?; let id = parser.parse()?; let name = parser.parse()?; let kind = parser.parse()?;
Ok(Self {
span,
id,
name,
kind,
})
}
}
/// Represents the kind of core functions. #[derive(Debug)] #[allow(missing_docs)] pubenum CoreFuncKind<'a> { /// The core function is defined in terms of lowering a component function. /// /// The core function is actually a member of the canon section.
Lower(CanonLower<'a>), /// The core function is defined in terms of aliasing a module instance export. /// /// The core function is actually a member of the core alias section.
Alias(InlineExportAlias<'a, true>),
ResourceNew(CanonResourceNew<'a>),
ResourceDrop(CanonResourceDrop<'a>),
ResourceRep(CanonResourceRep<'a>),
ThreadSpawn(CanonThreadSpawn<'a>),
ThreadHwConcurrency(CanonThreadHwConcurrency),
}
/// A declared component function. /// /// This may be a member of the import, alias, or canon sections. #[derive(Debug)] pubstruct Func<'a> { /// Where this `func` was defined. pub span: Span, /// An identifier that this function is resolved with (optionally) for name /// resolution. pub id: Option<Id<'a>>, /// An optional name for this function stored in the custom `name` section. pub name: Option<NameAnnotation<'a>>, /// If present, inline export annotations which indicate names this /// definition should be exported under. pub exports: InlineExport<'a>, /// The kind of function. pub kind: FuncKind<'a>,
}
impl<'a> Parse<'a> for Func<'a> { fn parse(parser: Parser<'a>) -> Result<Self> { let span = parser.parse::<kw::func>()?.0; let id = parser.parse()?; let name = parser.parse()?; let exports = parser.parse()?; let kind = parser.parse()?;
Ok(Self {
span,
id,
name,
exports,
kind,
})
}
}
/// Represents the kind of component functions. #[derive(Debug)] pubenum FuncKind<'a> { /// A function which is actually defined as an import, such as: /// /// ```text /// (func (import "foo") (param string)) /// ```
Import { /// The import name of this import.
import: InlineImport<'a>, /// The type that this function will have.
ty: ComponentTypeUse<'a, ComponentFunctionType<'a>>,
}, /// The function is defined in terms of lifting a core function. /// /// The function is actually a member of the canon section.
Lift { /// The lifted function's type.
ty: ComponentTypeUse<'a, ComponentFunctionType<'a>>, /// Information relating to the lifting of the core function.
info: CanonLift<'a>,
}, /// The function is defined in terms of aliasing a component instance export. /// /// The function is actually a member of the alias section.
Alias(InlineExportAlias<'a, false>),
}
/// A WebAssembly canonical function to be inserted into a component. /// /// This is a member of the canonical section. #[derive(Debug)] pubstruct CanonicalFunc<'a> { /// Where this `func` was defined. pub span: Span, /// An identifier that this function is resolved with (optionally) for name /// resolution. pub id: Option<Id<'a>>, /// An optional name for this function stored in the custom `name` section. pub name: Option<NameAnnotation<'a>>, /// What kind of function this is, be it a lowered or lifted function. pub kind: CanonicalFuncKind<'a>,
}
impl<'a> Parse<'a> for CanonicalFunc<'a> { fn parse(parser: Parser<'a>) -> Result<Self> { let span = parser.parse::<kw::canon>()?.0;
if parser.peek::<kw::lift>()? { let info = parser.parse()?; let (id, name, ty) = parser.parens(|parser| {
parser.parse::<kw::func>()?; let id = parser.parse()?; let name = parser.parse()?; let ty = parser.parse()?;
Ok((id, name, ty))
})?;
/// Possible ways to define a canonical function in the text format. #[derive(Debug)] #[allow(missing_docs)] pubenum CanonicalFuncKind<'a> { /// A canonical function that is defined in terms of lifting a core function.
Lift { /// The lifted function's type.
ty: ComponentTypeUse<'a, ComponentFunctionType<'a>>, /// Information relating to the lifting of the core function.
info: CanonLift<'a>,
}, /// A canonical function that is defined in terms of lowering a component function.
Lower(CanonLower<'a>),
/// Information relating to lifting a core function. #[derive(Debug)] pubstruct CanonLift<'a> { /// The core function being lifted. pub func: CoreItemRef<'a, kw::func>, /// The canonical options for the lifting. pub opts: Vec<CanonOpt<'a>>,
}
/// Information relating to lowering a component function. #[derive(Debug)] pubstruct CanonLower<'a> { /// The function being lowered. pub func: ItemRef<'a, kw::func>, /// The canonical options for the lowering. pub opts: Vec<CanonOpt<'a>>,
}
/// Information relating to the `resource.new` intrinsic. #[derive(Debug)] pubstruct CanonResourceNew<'a> { /// The resource type that this intrinsic creates an owned reference to. pub ty: Index<'a>,
}
/// Information relating to the `resource.drop` intrinsic. #[derive(Debug)] pubstruct CanonResourceDrop<'a> { /// The resource type that this intrinsic is dropping. pub ty: Index<'a>,
}
/// Information relating to the `resource.rep` intrinsic. #[derive(Debug)] pubstruct CanonResourceRep<'a> { /// The resource type that this intrinsic is accessing. pub ty: Index<'a>,
}
/// Information relating to the `thread.spawn` intrinsic. #[derive(Debug)] pubstruct CanonThreadSpawn<'a> { /// The function type that is being spawned. pub ty: Index<'a>,
}
#[derive(Debug)] /// Canonical ABI options. pubenum CanonOpt<'a> { /// Encode strings as UTF-8.
StringUtf8, /// Encode strings as UTF-16.
StringUtf16, /// Encode strings as "compact UTF-16".
StringLatin1Utf16, /// Use the specified memory for canonical ABI memory access.
Memory(CoreItemRef<'a, kw::memory>), /// Use the specified reallocation function for memory allocations.
Realloc(CoreItemRef<'a, kw::func>), /// Call the specified function after the lifted function has returned.
PostReturn(CoreItemRef<'a, kw::func>),
}
Die Informationen auf dieser Webseite wurden
nach bestem Wissen sorgfältig zusammengestellt. Es wird jedoch weder Vollständigkeit, noch Richtigkeit,
noch Qualität der bereit gestellten Informationen zugesichert.
Bemerkung:
Die farbliche Syntaxdarstellung und die Messung sind noch experimentell.