Anforderungen  |   Konzepte  |   Entwurf  |   Entwicklung  |   Qualitätssicherung  |   Lebenszyklus  |   Steuerung
 
 
 
 


Quelle  module.rs   Sprache: unbekannt

 
use crate::component::*;
use crate::core;
use crate::kw;
use crate::parser::{Parse, Parser, Result};
use crate::token::{Id, NameAnnotation, Span};

/// A core WebAssembly module to be created as part of a component.
///
/// This is a member of the core module section.
#[derive(Debug)]
pub struct CoreModule<'a> {
    /// Where this `core module` was defined.
    pub span: Span,
    /// An identifier that this module is resolved with (optionally) for name
    /// resolution.
    pub id: Option<Id<'a>>,
    /// An optional name for this module 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>,
    /// What kind of module this is, be it an inline-defined or imported one.
    pub kind: CoreModuleKind<'a>,
}

/// Possible ways to define a core module in the text format.
#[derive(Debug)]
pub enum CoreModuleKind<'a> {
    /// A core module which is actually defined as an import
    Import {
        /// Where this core module is imported from
        import: InlineImport<'a>,
        /// The type that this core module will have.
        ty: CoreTypeUse<'a, ModuleType<'a>>,
    },

    /// Modules that are defined inline.
    Inline {
        /// Fields in the core module.
        fields: Vec<core::ModuleField<'a>>,
    },
}

impl<'a> Parse<'a> for CoreModule<'a> {
    fn parse(parser: Parser<'a>) -> Result<Self> {
        parser.depth_check()?;

        let span = parser.parse::<kw::core>()?.0;
        parser.parse::<kw::module>()?;
        let id = parser.parse()?;
        let name = parser.parse()?;
        let exports = parser.parse()?;

        let kind = if let Some(import) = parser.parse()? {
            CoreModuleKind::Import {
                import,
                ty: parser.parse()?,
            }
        } else {
            let mut fields = Vec::new();
            while !parser.is_empty() {
                fields.push(parser.parens(|p| p.parse())?);
            }
            CoreModuleKind::Inline { fields }
        };

        Ok(Self {
            span,
            id,
            name,
            exports,
            kind,
        })
    }
}

[ Dauer der Verarbeitung: 0.21 Sekunden  (vorverarbeitet)  ]

                                                                                                                                                                                                                                                                                                                                                                                                     


Neuigkeiten

     Aktuelles
     Motto des Tages

Software

     Produkte
     Quellcodebibliothek

Aktivitäten

     Artikel über Sicherheit
     Anleitung zur Aktivierung von SSL

Muße

     Gedichte
     Musik
     Bilder

Jenseits des Üblichen ....

Besucherstatistik

Besucherstatistik

Monitoring

Montastic status badge