Add more placeholders with TODO messages

This commit is contained in:
Guojie Luo 2022-02-24 09:13:15 +08:00
parent c93df679d3
commit 975d44e212
8 changed files with 98 additions and 6 deletions

10
src/cst/case_statement.rs Normal file
View File

@ -0,0 +1,10 @@
use crate::cst::ModuleContext;
use json::JsonValue;
pub struct CaseStatement {}
impl CaseStatement {
pub fn codegen(_json: &JsonValue, _context: &ModuleContext) {
println!("TODO: implement CaseStatement::codegen()");
}
}

View File

@ -1,8 +1,45 @@
use crate::cst::ModuleContext;
use crate::cst::{Expression, ModuleContext, Tag, Tools};
use json::JsonValue;
pub struct ConditionalStatement {}
impl ConditionalStatement {
pub fn codegen(_json: &JsonValue, _context: &ModuleContext) {}
pub fn codegen(json: &JsonValue, context: &ModuleContext) {
let json_if_header = Tools::match_tags(
vec![json],
vec![
Tag::CONDITIONAL_STATEMENT,
Tag::IF_CLAUSE,
Tag::IF_HEADER,
Tag::PAREN_GROUP,
Tag::EXPRESSION,
],
);
assert_eq!(json_if_header.len(), 1);
Expression::codegen(json_if_header[0], context);
let json_if_body = Tools::match_tags(
vec![json],
vec![Tag::CONDITIONAL_STATEMENT, Tag::IF_CLAUSE, Tag::IF_BODY],
);
assert_eq!(json_if_body.len(), 1);
Self::visit_if_body(json_if_body[0], context);
let json_else_body = Tools::match_tags(
vec![json],
vec![Tag::CONDITIONAL_STATEMENT, Tag::ELSE_CLAUSE, Tag::ELSE_BODY],
);
assert!(json_else_body.len() <= 1);
if json_else_body.len() == 1 {
Self::visit_else_body(json_else_body[0], context);
}
}
fn visit_if_body(_json: &JsonValue, _context: &ModuleContext) {
println!("TODO: implement ConditionalStatement::visit_if_body()");
}
fn visit_else_body(_json: &JsonValue, _context: &ModuleContext) {
println!("TODO: implement ConditionalStatement::visit_else_body()");
}
}

View File

@ -4,5 +4,7 @@ use json::JsonValue;
pub struct EventExpressionList {}
impl EventExpressionList {
pub fn codegen(_json: &JsonValue, _context: &ModuleContext) {}
pub fn codegen(_json: &JsonValue, _context: &ModuleContext) {
println!("TODO: implement EventExpressionList::codegen()");
}
}

10
src/cst/expression.rs Normal file
View File

@ -0,0 +1,10 @@
use crate::cst::ModuleContext;
use json::JsonValue;
pub struct Expression {}
impl Expression {
pub fn codegen(_json: &JsonValue, _context: &ModuleContext) {
println!("TODO: implement Expression::codegen()");
}
}

View File

@ -1,9 +1,12 @@
mod always_statement;
mod case_statement;
mod conditional_statement;
mod context;
mod description_list;
mod event_expression_list;
mod expression;
mod module_declaration;
mod nonblocking_assignment_statement;
mod procedural_timing_control_statement;
mod seq_block;
mod statement;
@ -11,13 +14,17 @@ mod tags;
mod tools;
use always_statement::AlwaysStatement;
use case_statement::CaseStatement;
use conditional_statement::ConditionalStatement;
use context::{ArgInfo, ModuleContext};
pub use description_list::DescriptionList;
use event_expression_list::EventExpressionList;
use expression::Expression;
use module_declaration::ModuleDeclaration;
use nonblocking_assignment_statement::NonblockingAssignmentStatement;
use procedural_timing_control_statement::ProceduralTimingControlStatement;
use seq_block::SeqBlock;
use statement::Statement;
pub use description_list::DescriptionList;
pub use tags::Tag;
pub use tools::{CodeReporter, Tools};

View File

@ -0,0 +1,10 @@
use crate::cst::ModuleContext;
use json::JsonValue;
pub struct NonblockingAssignmentStatement {}
impl NonblockingAssignmentStatement {
pub fn codegen(_json: &JsonValue, _context: &ModuleContext) {
println!("TODO: implement NonblockingAssignmentStatement::codegen()");
}
}

View File

@ -1,4 +1,7 @@
use crate::cst::{ConditionalStatement, ModuleContext, SeqBlock, Tag};
use crate::cst::{
CaseStatement, ConditionalStatement, ModuleContext, NonblockingAssignmentStatement, SeqBlock,
Tag,
};
use json::JsonValue;
pub struct Statement {}
@ -8,8 +11,12 @@ impl Statement {
match json["tag"].as_str() {
Some(Tag::SEQ_BLOCK) => SeqBlock::codegen(json, context),
Some(Tag::CONDITIONAL_STATEMENT) => ConditionalStatement::codegen(json, context),
Some(Tag::CASE_STATEMENT) => CaseStatement::codegen(json, context),
Some(Tag::NONBLOCKING_ASSIGNMENT_STATEMENT) => {
NonblockingAssignmentStatement::codegen(json, context)
}
Some(x) => {
println!("{}", x);
println!("FIXME: missing {}", x);
}
_ => panic!(),
};

View File

@ -28,7 +28,16 @@ impl Tag {
pub const EVENT_EXPRESSION_LIST: &'static str = "kEventExpressionList";
pub const SEQ_BLOCK: &'static str = "kSeqBlock";
pub const BLOCK_ITEM_STATEMENT_LIST: &'static str = "kBlockItemStatementList";
pub const CONDITIONAL_STATEMENT: &'static str = "kConditionalStatement";
pub const IF_CLAUSE: &'static str = "kIfClause";
pub const IF_HEADER: &'static str = "kIfHeader";
pub const IF_BODY: &'static str = "kIfBody";
pub const ELSE_CLAUSE: &'static str = "kElseClause";
pub const ELSE_BODY: &'static str = "kElseBody";
pub const NONBLOCKING_ASSIGNMENT_STATEMENT: &'static str = "kNonblockingAssignmentStatement";
pub const CASE_STATEMENT: &'static str = "kCaseStatement";
pub const SYMBOL_IDENTIFIER: &'static str = "SymbolIdentifier";
pub const DEC_NUMBER: &'static str = "TK_DecNumber";