remove variable out of context
This commit is contained in:
		
							
								
								
									
										7
									
								
								spf.py
									
									
									
									
									
								
							
							
						
						
									
										7
									
								
								spf.py
									
									
									
									
									
								
							@ -15,19 +15,22 @@ class SPFInterpreter(lark.visitors.Interpreter):
 | 
				
			|||||||
        self.variables = Variables(trace)
 | 
					        self.variables = Variables(trace)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    def while_loop(self, el):
 | 
					    def while_loop(self, el):
 | 
				
			||||||
 | 
					        old = self.variables.variables.copy()
 | 
				
			||||||
        while self.visit_children(el.children[0])[0]:
 | 
					        while self.visit_children(el.children[0])[0]:
 | 
				
			||||||
            self.visit_children(el.children[1])
 | 
					            self.visit_children(el.children[1])
 | 
				
			||||||
 | 
					        self.variables.variables = old.copy()
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    def for_loop(self, el):
 | 
					    def for_loop(self, el):
 | 
				
			||||||
        type = el.children[0].value
 | 
					        type = el.children[0].value
 | 
				
			||||||
        name = el.children[1].value
 | 
					        name = el.children[1].value
 | 
				
			||||||
 | 
					        old = self.variables.variables.copy()
 | 
				
			||||||
        self.variables.declare(type, name)
 | 
					        self.variables.declare(type, name)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
        target = self.visit_children(el.children[2])[0]
 | 
					        target = self.visit_children(el.children[2])[0]
 | 
				
			||||||
        for i in target:
 | 
					        for i in target:
 | 
				
			||||||
            self.variables.assign(name, i)
 | 
					            self.variables.assign(name, i)
 | 
				
			||||||
            self.visit_children(el.children[3])
 | 
					            self.visit_children(el.children[3])
 | 
				
			||||||
        # TODO: delete the variable out of scope
 | 
					        self.variables.variables = old.copy()
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    def afficher(self, el):
 | 
					    def afficher(self, el):
 | 
				
			||||||
        ligne = ""
 | 
					        ligne = ""
 | 
				
			||||||
@ -126,10 +129,12 @@ class SPFInterpreter(lark.visitors.Interpreter):
 | 
				
			|||||||
        return self.variables.get(el.children[0].value)
 | 
					        return self.variables.get(el.children[0].value)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    def test(self,el):
 | 
					    def test(self,el):
 | 
				
			||||||
 | 
					        old = self.variables.variables.copy()
 | 
				
			||||||
        if self.visit_children(el.children[0])[0]:
 | 
					        if self.visit_children(el.children[0])[0]:
 | 
				
			||||||
            self.visit_children(el.children[1])
 | 
					            self.visit_children(el.children[1])
 | 
				
			||||||
        elif len(el.children) >= 3:
 | 
					        elif len(el.children) >= 3:
 | 
				
			||||||
            self.visit_children(el.children[2])
 | 
					            self.visit_children(el.children[2])
 | 
				
			||||||
 | 
					        self.variables.variables = old.copy()
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    # Literals
 | 
					    # Literals
 | 
				
			||||||
 | 
				
			|||||||
		Reference in New Issue
	
	Block a user