8000 [refactoring] Removed the old environment definition. · UnBCIC-TP2/r-python@a3f1850 · GitHub
[go: up one dir, main page]

Skip to content

Commit a3f1850

Browse files
committed
[refactoring] Removed the old environment definition.
1 parent fca8f06 commit a3f1850

File tree

1 file changed

+1
-144
lines changed

1 file changed

+1
-144
lines changed

src/ir/ast.rs

Lines changed: 1 addition & 144 deletions
2
Original file line numberDiff line numberDiff line change
@@ -1,116 +1,5 @@
11
pub type Name = String;
2

3-
use nom::IResult;
4-
use std::collections::HashMap;
5-
6-
#[derive(Debug, PartialEq, Clone)]
7-
pub struct Frame<A> {
8-
pub parent_function: Option<Function>,
9-
pub parent_key: Option<(Name, i32)>,
10-
pub variables: HashMap<Name, A>,
11-
pub tests: HashMap<Name, Function>,
12-
}
13-
14-
impl<A> Frame<A> {
15-
pub fn new(func: Option<Function>, key: Option<(Name, i32)>) -> Frame<A> {
16-
let variables: HashMap<Name, A> = HashMap::new();
17-
let tests: HashMap<Name, Function> = HashMap::new();
18-
return Frame {
19-
parent_function: func,
20-
parent_key: key,
21-
variables,
22-
tests,
23-
};
24-
}
25-
}
26-
27-
#[derive(Debug, PartialEq, Clone)]
28-
pub struct Environment<A> {
29-
pub scope: Function,
30-
pub recursion: i32,
31-
pub stack: HashMap<(Name, i32), Frame<A>>,
32-
pub type_env: HashMap<Name, Vec<ValueConstructor>>,
33-
}
34-
35-
impl<A> Environment<A> {
36-
pub fn new() -> Environment<A> {
37-
let frame: Frame<A> = Frame::new(None, None);
38-
let scope = Function::new();
39-
40-
return Environment {
41-
scope,
42-
recursion: 0,
43-
stack: HashMap::from([(("__main__".to_string(), 0), frame)]),
44-
type_env: HashMap::new(),
45-
};
46-
}
47-
48-
pub fn scope_key(&self) -> (Name, i32) {
49-
return (self.scope_name(), self.recursion);
50-
}
51-
52-
pub fn scope_name(&self) -> Name {
53-
return self.scope.name.clone();
54-
}
55-
56-
pub fn scope_return(&self) -> Option<&A> {
57-
return self.search_frame(self.scope_name());
58-
}
59-
60-
pub fn get_frame(&self, key: (Name, i32)) -> &Frame<A> {
61-
return self.stack.get(&key).unwrap();
62-
}
63-
64-
pub fn search_frame(&self, name: Name) -> Option<&A> {
65-
return self
66-
.stack
67-
.get(&self.scope_key())
68-
.unwrap()
69-
.variables
70-
.get(&name);
71-
}
72-
73-
pub fn insert_frame(&mut self, func: Function) -> () {
74-
let new_frame: Frame<A> = Frame::new(Some(self.scope.clone()), Some(self.scope_key()));
75-
76-
self.stack
77-
.insert((func.name.clone(), self.scope_key().1 + 1), new_frame);
78-
self.scope = func;
79-
self.recursion += 1;
80-
}
81-
82-
pub fn remove_frame(&mut self) -> () {
83-
let recursion = self.scope_key().1 - 1;
84-
self.scope = self
85-
.stack
86-
.remove(&self.scope_key())
87-
.unwrap()
88-
.parent_function
89-
.unwrap();
90-
self.recursion = recursion;
91-
}
92-
93-
pub fn insert_variable(&mut self, name: Name, kind: A) -> () {
94-
if let Some(frame) = self.stack.get_mut(&self.scope_key()) {
95-
frame.variables.insert(name, kind);
96-
}
97-
}
98-
99-
pub fn insert_type(&mut self, name: Name, constructors: Vec<ValueConstructor>) {
100-
self.type_env.insert(name, constructors);
101-
}
102-
103-
pub fn get_type(&self, name: &Name) -> Option<&Vec<ValueConstructor>> {
104-
self.type_env.get(name)
105-
}
106-
107-
pub fn insert_test(&mut self, name: Name, test: Function) -> () {
108-
if let Some(frame) = self.stack.get_mut(&self.scope_key()) {
109-
frame.tests.insert(name, test);
110-
}
111-
}
112-
}
113-
1143
#[derive(Clone, Debug, PartialEq)]
1154
pub struct Function {
1165
pub name: Name,
@@ -145,21 +34,6 @@ impl FormalArgument {
14534
}
14635
}
14736

148-
#[derive(Debug, PartialEq, Clone)]
149-
pub struct TestEnvironment<A> {
150-
pub name: Name,
151-
pub env: Environment<A>,
152-
}
153-
154-
impl<A> TestEnvironment<A> {
155-
pub fn new() -> TestEnvironment<A> {
156-
return TestEnvironment {
157-
name: "__test__".to_string(),
158-
env: Environment::<A>::new(),
159-
};
160-
}
161-
}
162-
16337
#[derive(Clone, Debug, PartialEq)]
16438
pub enum Type {
16539
TInteger,
@@ -260,21 +134,4 @@ pub enum Statement {
260134
FuncDef(Function),
261135
Return(Box<Expression>),
262136
TypeDeclaration(Name, Vec<ValueConstructor>),
263-
}
264-
265-
#[derive(Debug)]
266-
pub enum ParseError {
267-
IndentationError(usize),
268-
UnexpectedToken(String),
269-
InvalidExpression(String),
270-
}
271-
272-
pub fn with_error_context<'a, T>(
273-
parser: impl Fn(&'a str) -> IResult<&'a str, T>,
274-
_context: &'a str,
275-
) -> impl Fn(&'a str) -> IResult<&'a str, T> {
276-
move |input| {
277-
parser(input)
278-
.map_err(|_| nom::Err::Error(nom::error::Error::new(input, nom::error::ErrorKind::Tag)))
279-
}
280-
}
137+
}

0 commit comments

Comments
 (0)
0