Nodes for Program and Constant
This commit is contained in:
parent
1527d10a80
commit
7f6ef1ac1e
3 changed files with 67 additions and 0 deletions
24
src/parser/nodes/constant.rs
Normal file
24
src/parser/nodes/constant.rs
Normal file
|
@ -0,0 +1,24 @@
|
||||||
|
/* parser/nodes/constant.rs
|
||||||
|
* Eryn Wells <eryn@erynwells.me>
|
||||||
|
*/
|
||||||
|
|
||||||
|
use std::fmt;
|
||||||
|
use types::{Boolean, Number};
|
||||||
|
use super::TreeDebug;
|
||||||
|
|
||||||
|
pub trait ConstantValue {}
|
||||||
|
impl ConstantValue for Boolean {}
|
||||||
|
impl ConstantValue for Number {}
|
||||||
|
|
||||||
|
#[derive(Debug)]
|
||||||
|
pub struct Constant<V: ConstantValue> {
|
||||||
|
value: V
|
||||||
|
}
|
||||||
|
|
||||||
|
impl<V: ConstantValue + fmt::Debug> TreeDebug for Constant<V> {}
|
||||||
|
|
||||||
|
impl<V: ConstantValue> Constant<V> {
|
||||||
|
pub fn new(value: V) -> Constant<V> {
|
||||||
|
Constant { value: value }
|
||||||
|
}
|
||||||
|
}
|
|
@ -2,6 +2,23 @@
|
||||||
* Eryn Wells <eryn@erynwells.me>
|
* Eryn Wells <eryn@erynwells.me>
|
||||||
*/
|
*/
|
||||||
|
|
||||||
|
use std::fmt;
|
||||||
|
|
||||||
pub use self::constant::Constant;
|
pub use self::constant::Constant;
|
||||||
|
|
||||||
mod constant;
|
mod constant;
|
||||||
|
mod program;
|
||||||
|
|
||||||
|
trait TreeDebug: fmt::Debug {
|
||||||
|
fn tree_indent(indent: u8) -> String {
|
||||||
|
(0..10).fold(String::new(), |mut acc, i| {
|
||||||
|
acc.push(' ');
|
||||||
|
acc
|
||||||
|
})
|
||||||
|
}
|
||||||
|
|
||||||
|
fn tree_fmt(&self, f: &mut fmt::Formatter, indent: u8) -> fmt::Result {
|
||||||
|
write!(f, "{}{:?}", self.tree_indent(indent), self)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
|
26
src/parser/nodes/program.rs
Normal file
26
src/parser/nodes/program.rs
Normal file
|
@ -0,0 +1,26 @@
|
||||||
|
/* parser/nodes/program.rs
|
||||||
|
* Eryn Wells <eyrn@erynwells.me>
|
||||||
|
*/
|
||||||
|
|
||||||
|
use std::fmt;
|
||||||
|
|
||||||
|
use super::TreeDebug;
|
||||||
|
use super::Constant;
|
||||||
|
|
||||||
|
pub struct Program {
|
||||||
|
forms: Vec<Constant>,
|
||||||
|
}
|
||||||
|
|
||||||
|
impl TreeDebug for Program {
|
||||||
|
fn tree_fmt(&self, f: fmt::Formatter, indent: u8) -> fmt::Result {
|
||||||
|
let spaces = self.tree_indent(indent);
|
||||||
|
let mut result = write!(f, "{}Program", spaces);
|
||||||
|
for form in self.forms {
|
||||||
|
if result.is_err() {
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
result = form.tree_fmt(f, indent + 2);
|
||||||
|
}
|
||||||
|
result
|
||||||
|
}
|
||||||
|
}
|
Loading…
Add table
Add a link
Reference in a new issue