Skip to main content

litex/stmt/
tooling_stmt.rs

1use crate::prelude::*;
2use std::fmt;
3
4#[derive(Clone)]
5pub enum ImportStmt {
6    ImportRelativePath(ImportRelativePathStmt),
7    ImportGlobalModule(ImportGlobalModuleStmt),
8}
9
10#[derive(Clone)]
11pub struct ImportRelativePathStmt {
12    pub path: String,
13    pub as_mod_name: Option<String>,
14    pub line_file: LineFile,
15}
16
17#[derive(Clone)]
18pub struct ImportGlobalModuleStmt {
19    pub mod_name: String,
20    pub as_mod_name: Option<String>,
21    pub line_file: LineFile,
22}
23
24#[derive(Clone)]
25pub struct RunFileStmt {
26    pub file_path: String,
27    pub line_file: LineFile,
28}
29
30impl RunFileStmt {
31    pub fn new(file_path: String, line_file: LineFile) -> Self {
32        RunFileStmt {
33            file_path,
34            line_file,
35        }
36    }
37}
38
39impl fmt::Display for RunFileStmt {
40    fn fmt(&self, f: &mut fmt::Formatter<'_>) -> fmt::Result {
41        write!(f, "{}", self.file_path)
42    }
43}
44
45impl fmt::Display for ImportStmt {
46    fn fmt(&self, f: &mut fmt::Formatter<'_>) -> fmt::Result {
47        match self {
48            ImportStmt::ImportRelativePath(import_relative_path) => {
49                write!(f, "{}", import_relative_path)
50            }
51            ImportStmt::ImportGlobalModule(import_global_mod) => write!(f, "{}", import_global_mod),
52        }
53    }
54}
55
56impl ImportRelativePathStmt {
57    pub fn new(path: String, as_mod_name: Option<String>, line_file: LineFile) -> Self {
58        ImportRelativePathStmt {
59            path,
60            as_mod_name,
61            line_file,
62        }
63    }
64}
65
66impl ImportGlobalModuleStmt {
67    pub fn new(mod_name: String, as_mod_name: Option<String>, line_file: LineFile) -> Self {
68        ImportGlobalModuleStmt {
69            mod_name,
70            as_mod_name,
71            line_file,
72        }
73    }
74}
75
76impl fmt::Display for ImportRelativePathStmt {
77    fn fmt(&self, f: &mut fmt::Formatter<'_>) -> fmt::Result {
78        match &self.as_mod_name {
79            Some(name) => write!(
80                f,
81                "{} {}{}{} {} {}",
82                IMPORT, DOUBLE_QUOTE, self.path, DOUBLE_QUOTE, AS, name
83            ),
84            None => write!(
85                f,
86                "{} {}{}{}",
87                IMPORT, DOUBLE_QUOTE, self.path, DOUBLE_QUOTE
88            ),
89        }
90    }
91}
92
93impl fmt::Display for ImportGlobalModuleStmt {
94    fn fmt(&self, f: &mut fmt::Formatter<'_>) -> fmt::Result {
95        match &self.as_mod_name {
96            Some(name) => write!(f, "{} {} {} {}", IMPORT, self.mod_name, AS, name),
97            None => write!(f, "{} {}", IMPORT, self.mod_name),
98        }
99    }
100}
101
102impl ImportStmt {
103    pub fn line_file(&self) -> LineFile {
104        match self {
105            ImportStmt::ImportRelativePath(import_relative_path) => import_relative_path.line_file.clone(),
106            ImportStmt::ImportGlobalModule(import_global_mod) => import_global_mod.line_file.clone(),
107        }
108    }
109}
110
111#[derive(Clone)]
112pub struct DoNothingStmt {
113    pub line_file: LineFile,
114}
115
116impl DoNothingStmt {
117    pub fn new(line_file: LineFile) -> Self {
118        DoNothingStmt { line_file }
119    }
120}
121
122impl fmt::Display for DoNothingStmt {
123    fn fmt(&self, f: &mut fmt::Formatter<'_>) -> fmt::Result {
124        write!(f, "{}", DO_NOTHING)
125    }
126}