1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
use super::ast::{FillMeta, Statement};
use super::file_definition::FileID;
use crate::file_definition::FileLocation;
use std::collections::HashMap;
pub type FunctionInfo = HashMap<String, FunctionData>;
#[derive(Clone)]
pub struct FunctionData {
name: String,
file_id: FileID,
num_of_params: usize,
name_of_params: Vec<String>,
param_location: FileLocation,
body: Statement,
}
impl FunctionData {
pub fn new(
name: String,
file_id: FileID,
mut body: Statement,
num_of_params: usize,
name_of_params: Vec<String>,
param_location: FileLocation,
elem_id: &mut usize,
) -> FunctionData {
body.fill(file_id, elem_id);
FunctionData { name, file_id, body, name_of_params, param_location, num_of_params }
}
pub fn get_file_id(&self) -> FileID {
self.file_id
}
pub fn get_body(&self) -> &Statement {
&self.body
}
pub fn get_body_as_vec(&self) -> &Vec<Statement> {
match &self.body {
Statement::Block { stmts, .. } => stmts,
_ => panic!("Function body should be a block"),
}
}
pub fn get_mut_body(&mut self) -> &mut Statement {
&mut self.body
}
pub fn replace_body(&mut self, new: Statement) -> Statement {
std::mem::replace(&mut self.body, new)
}
pub fn get_mut_body_as_vec(&mut self) -> &mut Vec<Statement> {
match &mut self.body {
Statement::Block { stmts, .. } => stmts,
_ => panic!("Function body should be a block"),
}
}
pub fn get_param_location(&self) -> FileLocation {
self.param_location.clone()
}
pub fn get_num_of_params(&self) -> usize {
self.num_of_params
}
pub fn get_name_of_params(&self) -> &Vec<String> {
&self.name_of_params
}
pub fn get_name(&self) -> &str {
&self.name
}
}