prepare for imperative scripts

main
Ziyang Hu 2 years ago
parent e4d082ddc4
commit e795a2cb9a

@ -13,6 +13,7 @@ use std::sync::Arc;
use miette::{bail, ensure, Diagnostic, IntoDiagnostic, Result};
use pest::error::InputLocation;
use pest::Parser;
use smartstring::{LazyCompact, SmartString};
use thiserror::Error;
use crate::data::program::InputProgram;
@ -40,15 +41,27 @@ pub(crate) enum CozoScript {
Sys(SysOp),
}
pub(crate) enum ImperativeElement {
JumpIfNot(usize),
Goto(usize),
pub(crate) enum ImperativeElement<T> {
JumpIfNot {
goto: usize,
},
Goto {
goto: usize,
},
Prog {
prog: Box<T>,
ignore_error: bool,
},
Swap {
left: SmartString<LazyCompact>,
right: SmartString<LazyCompact>,
},
Remove {
name: SmartString<LazyCompact>,
},
}
pub(crate) struct ImperativeProgram {
}
pub(crate) struct ImperativeProgram {}
impl CozoScript {
pub(crate) fn get_single_program(self) -> Result<InputProgram> {
@ -69,7 +82,7 @@ impl CozoScript {
}
#[derive(
Eq, PartialEq, Debug, serde_derive::Serialize, serde_derive::Deserialize, Copy, Clone, Default,
Eq, PartialEq, Debug, serde_derive::Serialize, serde_derive::Deserialize, Copy, Clone, Default,
)]
pub struct SourceSpan(pub(crate) usize, pub(crate) usize);
@ -117,7 +130,7 @@ pub(crate) fn parse_script(
src: &str,
param_pool: &BTreeMap<String, DataValue>,
algorithms: &BTreeMap<String, Arc<Box<dyn FixedRule>>>,
cur_vld: ValidityTs
cur_vld: ValidityTs,
) -> Result<CozoScript> {
let parsed = CozoScriptParser::parse(Rule::script, src)
.map_err(|err| {
@ -138,14 +151,22 @@ pub(crate) fn parse_script(
let mut qs = vec![];
for pair in parsed.into_inner() {
if pair.as_rule() != Rule::EOI {
qs.push(parse_query(pair.into_inner(), param_pool, algorithms, cur_vld)?);
qs.push(parse_query(
pair.into_inner(),
param_pool,
algorithms,
cur_vld,
)?);
}
}
CozoScript::Multi(qs)
}
Rule::sys_script => {
CozoScript::Sys(parse_sys(parsed.into_inner(), param_pool, algorithms, cur_vld)?)
}
Rule::sys_script => CozoScript::Sys(parse_sys(
parsed.into_inner(),
param_pool,
algorithms,
cur_vld,
)?),
_ => unreachable!(),
})
}

Loading…
Cancel
Save