diff --git a/src/runtime/retired/experimental/pdl.rs b/src/runtime/retired/experimental/pdl.rs new file mode 100644 index 0000000000000000000000000000000000000000..0f2d07cbbc6af35251da6794fd5fb9b624c58b2c --- /dev/null +++ b/src/runtime/retired/experimental/pdl.rs @@ -0,0 +1,46 @@ +use crate::common::Port; + +#[derive(Debug, Clone, serde::Serialize, serde::Deserialize)] +struct Pdl { + ops: Vec, +} + +#[derive(Debug, Clone, serde::Serialize, serde::Deserialize)] +enum Op { + JumpIfEq, // + SyncStart, // + SyncEnd, // + Exit, // + Firing, // pop port A. push bool B. + Put, // pop port A. pop payload B. + Get, // pop port A. push payload B. + // + PushConst(Value), + Store, // pop unslong A. pop B. store[A] := B. + Load, // pop unslong A. push store[A]. + Dup, // pop A. push A. push A. + // + Lt, // pop A. pop B. push bool C. + Eq, // pop A. pop B. push bool C. + Add, // pop integer A. pop integer B. push A+B + Neg, // pop signed integer A. push -A. + // + Nand, // pop bool A. pop bool B. push nand(A,B) +} + +#[derive(Debug, Clone, serde::Serialize, serde::Deserialize)] +struct State { + op_index: usize, + store: Vec, // TODO multiple frames + stack: Vec, +} + +#[derive(Debug, Clone, serde::Serialize, serde::Deserialize)] +enum Value { + Null, + Int(i32), + Bool(bool), + UnsLong(u64), + Payload(Vec), + Port(Port), +}