tamer: obj::xmlo::{lower=>air}: Rename {LowerState=>XmloToAir}
This provides much more clarity as to what is going on. Further, it's less ambiguous, since I'm about to introduce a new type of xmlo lowering into XIR for writing the actual xmlo files. DEV-7145main
parent
8d92667388
commit
45bbf3879e
|
@ -36,7 +36,10 @@ use crate::{
|
|||
VisitOnceFilesystem,
|
||||
},
|
||||
ld::xmle::Sections,
|
||||
obj::xmlo::{self, XmloError, XmloLowerError, XmloReader, XmloToken},
|
||||
obj::xmlo::{
|
||||
XmloAirContext, XmloAirError, XmloError, XmloReader, XmloToAir,
|
||||
XmloToken,
|
||||
},
|
||||
parse::{Lower, ParseError, Parsed, ParsedObject, UnknownToken},
|
||||
sym::{GlobalSymbolResolve, SymbolId},
|
||||
xir::reader::XmlXirReader,
|
||||
|
@ -67,10 +70,10 @@ pub fn xmle(package_path: &str, output: &str) -> Result<(), TameldError> {
|
|||
&mut fs,
|
||||
LinkerAsg::with_capacity(65536, 65536),
|
||||
&escaper,
|
||||
xmlo::LowerContext::default(),
|
||||
XmloAirContext::default(),
|
||||
)?;
|
||||
|
||||
let xmlo::LowerContext {
|
||||
let XmloAirContext {
|
||||
prog_name: name,
|
||||
relroot,
|
||||
..
|
||||
|
@ -125,7 +128,7 @@ pub fn graphml(package_path: &str, output: &str) -> Result<(), TameldError> {
|
|||
&mut fs,
|
||||
LinkerAsg::with_capacity(65536, 65536),
|
||||
&escaper,
|
||||
xmlo::LowerContext::default(),
|
||||
XmloAirContext::default(),
|
||||
)?;
|
||||
|
||||
// if we move away from petgraph, we will need to abstract this away
|
||||
|
@ -177,8 +180,8 @@ fn load_xmlo<'a, P: AsRef<Path>, S: Escaper>(
|
|||
fs: &mut VisitOnceFilesystem<FsCanonicalizer, FxBuildHasher>,
|
||||
asg: Asg,
|
||||
escaper: &S,
|
||||
state: xmlo::LowerContext,
|
||||
) -> Result<(Asg, xmlo::LowerContext), TameldError> {
|
||||
state: XmloAirContext,
|
||||
) -> Result<(Asg, XmloAirContext), TameldError> {
|
||||
let PathFile(path, file, ctx): PathFile<BufReader<fs::File>> =
|
||||
match fs.open(path_str)? {
|
||||
VisitOnceFile::FirstVisit(file) => file,
|
||||
|
@ -187,12 +190,11 @@ fn load_xmlo<'a, P: AsRef<Path>, S: Escaper>(
|
|||
|
||||
// TODO: This entire block is a WIP and will be incrementally
|
||||
// abstracted away.
|
||||
let (mut asg, mut state) = Lower::<
|
||||
ParsedObject<XirToken, XirError>,
|
||||
flat::State<64>,
|
||||
>::lower::<_, TameldError>(
|
||||
&mut XmlXirReader::new(file, escaper, ctx),
|
||||
|toks| {
|
||||
let (mut asg, mut state) =
|
||||
Lower::<ParsedObject<XirToken, XirError>, flat::State<64>>::lower::<
|
||||
_,
|
||||
TameldError,
|
||||
>(&mut XmlXirReader::new(file, escaper, ctx), |toks| {
|
||||
Lower::<flat::State<64>, XmloReader>::lower(toks, |xmlo| {
|
||||
let mut iter = xmlo.scan(false, |st, rtok| match st {
|
||||
true => None,
|
||||
|
@ -205,27 +207,27 @@ fn load_xmlo<'a, P: AsRef<Path>, S: Escaper>(
|
|||
}
|
||||
});
|
||||
|
||||
Lower::<XmloReader, xmlo::LowerState>::lower_with_context(
|
||||
Lower::<XmloReader, XmloToAir>::lower_with_context(
|
||||
&mut iter,
|
||||
state,
|
||||
|air| {
|
||||
let (_, asg) = Lower::<xmlo::LowerState, AirState>::lower_with_context(
|
||||
air,
|
||||
asg,
|
||||
|end| {
|
||||
end.fold(
|
||||
Result::<(), TameldError>::Ok(()),
|
||||
|x, _| x,
|
||||
)
|
||||
},
|
||||
)?;
|
||||
let (_, asg) =
|
||||
Lower::<XmloToAir, AirState>::lower_with_context(
|
||||
air,
|
||||
asg,
|
||||
|end| {
|
||||
end.fold(
|
||||
Result::<(), TameldError>::Ok(()),
|
||||
|x, _| x,
|
||||
)
|
||||
},
|
||||
)?;
|
||||
|
||||
Ok(asg)
|
||||
},
|
||||
)
|
||||
})
|
||||
},
|
||||
)?;
|
||||
})?;
|
||||
|
||||
let mut dir: PathBuf = path.clone();
|
||||
dir.pop();
|
||||
|
@ -280,7 +282,7 @@ pub enum TameldError {
|
|||
XirParseError(ParseError<UnknownToken, XirError>),
|
||||
XirfParseError(ParseError<XirToken, XirfError>),
|
||||
XmloParseError(ParseError<XirfToken, XmloError>),
|
||||
XmloLowerError(ParseError<XmloToken, XmloLowerError>),
|
||||
XmloLowerError(ParseError<XmloToken, XmloAirError>),
|
||||
AirLowerError(ParseError<AirToken, AsgError>),
|
||||
XirWriterError(XirWriterError),
|
||||
CycleError(Vec<Vec<SymbolId>>),
|
||||
|
@ -317,8 +319,8 @@ impl From<ParseError<XirToken, XirfError>> for TameldError {
|
|||
}
|
||||
}
|
||||
|
||||
impl From<ParseError<XmloToken, XmloLowerError>> for TameldError {
|
||||
fn from(e: ParseError<XmloToken, XmloLowerError>) -> Self {
|
||||
impl From<ParseError<XmloToken, XmloAirError>> for TameldError {
|
||||
fn from(e: ParseError<XmloToken, XmloAirError>) -> Self {
|
||||
Self::XmloLowerError(e)
|
||||
}
|
||||
}
|
||||
|
|
|
@ -1,4 +1,4 @@
|
|||
// Lower `xmlo` object file into the ASG
|
||||
// Lower `xmlo` object file into AIR
|
||||
//
|
||||
// Copyright (C) 2014-2022 Ryan Specialty Group, LLC.
|
||||
//
|
||||
|
@ -39,9 +39,9 @@ use super::XmloToken;
|
|||
|
||||
/// Persistent `xmlo` lowering context to be shared among all `xmlo` files.
|
||||
///
|
||||
/// TODO: Continue refactoring this into [`LowerState`] and the ASG itself.
|
||||
/// TODO: Continue refactoring this into [`XmloToAir`] and the ASG itself.
|
||||
#[derive(Debug)]
|
||||
pub struct LowerContext {
|
||||
pub struct XmloAirContext {
|
||||
/// Relative paths to imported packages that have been discovered.
|
||||
///
|
||||
/// The caller will use these to perform recursive loads.
|
||||
|
@ -65,7 +65,7 @@ pub struct LowerContext {
|
|||
first: bool,
|
||||
}
|
||||
|
||||
impl Default for LowerContext {
|
||||
impl Default for XmloAirContext {
|
||||
fn default() -> Self {
|
||||
Self {
|
||||
found: None,
|
||||
|
@ -76,7 +76,7 @@ impl Default for LowerContext {
|
|||
}
|
||||
}
|
||||
|
||||
impl LowerContext {
|
||||
impl XmloAirContext {
|
||||
/// Whether this is the first discovered package.
|
||||
#[inline]
|
||||
fn is_first(&self) -> bool {
|
||||
|
@ -89,7 +89,7 @@ type PackageName = SymbolId;
|
|||
/// State machine for lowering into the [`Asg`](crate::asg::Asg) via
|
||||
/// [`AirToken`].
|
||||
#[derive(Debug, PartialEq, Eq, Default)]
|
||||
pub enum LowerState {
|
||||
pub enum XmloToAir {
|
||||
#[default]
|
||||
PackageExpected,
|
||||
Package(PackageName, Span),
|
||||
|
@ -98,19 +98,19 @@ pub enum LowerState {
|
|||
Done(Span),
|
||||
}
|
||||
|
||||
impl ParseState for LowerState {
|
||||
impl ParseState for XmloToAir {
|
||||
type Token = XmloToken;
|
||||
type Object = AirToken;
|
||||
type Error = XmloLowerError;
|
||||
type Error = XmloAirError;
|
||||
|
||||
type Context = LowerContext;
|
||||
type Context = XmloAirContext;
|
||||
|
||||
fn parse_token(
|
||||
self,
|
||||
tok: Self::Token,
|
||||
ctx: &mut Self::Context,
|
||||
) -> crate::parse::TransitionResult<Self> {
|
||||
use LowerState::*;
|
||||
use XmloToAir::*;
|
||||
|
||||
match (self, tok) {
|
||||
(PackageExpected, XmloToken::PkgName(name, span)) => {
|
||||
|
@ -239,9 +239,9 @@ impl ParseState for LowerState {
|
|||
}
|
||||
}
|
||||
|
||||
impl Display for LowerState {
|
||||
impl Display for XmloToAir {
|
||||
fn fmt(&self, f: &mut std::fmt::Formatter) -> std::fmt::Result {
|
||||
use LowerState::*;
|
||||
use XmloToAir::*;
|
||||
|
||||
match self {
|
||||
PackageExpected => write!(f, "expecting package definition"),
|
||||
|
@ -257,7 +257,7 @@ impl Display for LowerState {
|
|||
}
|
||||
|
||||
impl TryFrom<SymAttrs> for IdentKind {
|
||||
type Error = XmloLowerError;
|
||||
type Error = XmloAirError;
|
||||
|
||||
/// Attempt to raise [`SymAttrs`] into an [`IdentKind`].
|
||||
///
|
||||
|
@ -269,7 +269,7 @@ impl TryFrom<SymAttrs> for IdentKind {
|
|||
}
|
||||
|
||||
impl TryFrom<&SymAttrs> for IdentKind {
|
||||
type Error = XmloLowerError;
|
||||
type Error = XmloAirError;
|
||||
|
||||
/// Attempt to raise [`SymAttrs`] into an [`IdentKind`].
|
||||
///
|
||||
|
@ -342,7 +342,7 @@ impl From<SymAttrs> for Source {
|
|||
///
|
||||
/// TODO: Spans are needed!
|
||||
#[derive(Debug, PartialEq)]
|
||||
pub enum XmloLowerError {
|
||||
pub enum XmloAirError {
|
||||
/// Symbol type was not provided.
|
||||
MissingType,
|
||||
|
||||
|
@ -359,7 +359,7 @@ pub enum XmloLowerError {
|
|||
BadEligRef(SymbolId),
|
||||
}
|
||||
|
||||
impl Display for XmloLowerError {
|
||||
impl Display for XmloAirError {
|
||||
fn fmt(&self, fmt: &mut std::fmt::Formatter) -> std::fmt::Result {
|
||||
match self {
|
||||
Self::MissingType => write!(fmt, "missing symbol type"),
|
||||
|
@ -374,9 +374,9 @@ impl Display for XmloLowerError {
|
|||
}
|
||||
}
|
||||
|
||||
impl Diagnostic for XmloLowerError {
|
||||
impl Diagnostic for XmloAirError {
|
||||
fn describe(&self) -> Vec<AnnotatedSpan> {
|
||||
use XmloLowerError::*;
|
||||
use XmloAirError::*;
|
||||
|
||||
match self {
|
||||
// TODO: Missing spans!
|
||||
|
@ -385,7 +385,7 @@ impl Diagnostic for XmloLowerError {
|
|||
}
|
||||
}
|
||||
|
||||
impl Error for XmloLowerError {
|
||||
impl Error for XmloAirError {
|
||||
fn source(&self) -> Option<&(dyn std::error::Error + 'static)> {
|
||||
None
|
||||
}
|
||||
|
@ -403,7 +403,7 @@ mod test {
|
|||
sym::GlobalSymbolIntern,
|
||||
};
|
||||
|
||||
type Sut = LowerState;
|
||||
type Sut = XmloToAir;
|
||||
|
||||
const S1: Span = DUMMY_SPAN;
|
||||
const S2: Span = S1.offset_add(1).unwrap();
|
||||
|
@ -643,7 +643,7 @@ mod test {
|
|||
// This is all that's needed to not consider this to be the first
|
||||
// package,
|
||||
// so that pkg_name is retained below.
|
||||
let ctx = LowerContext {
|
||||
let ctx = XmloAirContext {
|
||||
first: false,
|
||||
..Default::default()
|
||||
};
|
||||
|
@ -686,7 +686,7 @@ mod test {
|
|||
let sym = "sym".into();
|
||||
let pkg_name = "pkg name".into();
|
||||
|
||||
let ctx = LowerContext {
|
||||
let ctx = XmloAirContext {
|
||||
first: false,
|
||||
..Default::default()
|
||||
};
|
||||
|
@ -796,7 +796,7 @@ mod test {
|
|||
})
|
||||
.expect_err("must fail when missing dim");
|
||||
|
||||
assert_eq!(XmloLowerError::MissingDim, result);
|
||||
assert_eq!(XmloAirError::MissingDim, result);
|
||||
}
|
||||
};
|
||||
|
||||
|
@ -822,7 +822,7 @@ mod test {
|
|||
})
|
||||
.expect_err("must fail when missing dtype");
|
||||
|
||||
assert_eq!(XmloLowerError::MissingDtype, result);
|
||||
assert_eq!(XmloAirError::MissingDtype, result);
|
||||
}
|
||||
};
|
||||
|
||||
|
@ -851,7 +851,7 @@ mod test {
|
|||
})
|
||||
.expect_err("must fail when missing dim");
|
||||
|
||||
assert_eq!(XmloLowerError::MissingDim, dim_result);
|
||||
assert_eq!(XmloAirError::MissingDim, dim_result);
|
||||
|
||||
// no dtype
|
||||
let dtype_result = IdentKind::try_from(SymAttrs {
|
||||
|
@ -861,7 +861,7 @@ mod test {
|
|||
})
|
||||
.expect_err("must fail when missing dtype");
|
||||
|
||||
assert_eq!(XmloLowerError::MissingDtype, dtype_result);
|
||||
assert_eq!(XmloAirError::MissingDtype, dtype_result);
|
||||
}
|
||||
};
|
||||
}
|
|
@ -74,14 +74,14 @@
|
|||
//! </package>
|
||||
//! ```
|
||||
|
||||
mod air;
|
||||
mod error;
|
||||
mod ir;
|
||||
mod lower;
|
||||
mod reader;
|
||||
|
||||
pub use error::XmloError;
|
||||
pub use ir::{SymAttrs, SymType};
|
||||
// TODO: Encapsulate LowerContext once it is no longer needed by the caller
|
||||
// in `poc.rs`.
|
||||
pub use lower::{LowerContext, LowerState, XmloLowerError};
|
||||
pub use air::{XmloAirContext, XmloAirError, XmloToAir};
|
||||
pub use reader::{XmloReader, XmloToken};
|
||||
|
|
Loading…
Reference in New Issue