| 
					
				 | 
			
			
				@@ -2,6 +2,7 @@ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 #define QLOW_SEMANTIC_H 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				  
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 #include <string> 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+#include <map> 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 #include "Util.h" 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				  
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 namespace qlow 
			 | 
		
	
	
		
			
				| 
					
				 | 
			
			
				@@ -9,6 +10,9 @@ namespace qlow 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				     namespace sem 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				     { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				  
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        template<typename T> 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        using std::map<std::string, std::unique_ptr<T>> SymbolTable; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				         struct Class; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				  
			 | 
		
	
		
			
				 | 
				 | 
			
			
				         struct Field; 
			 | 
		
	
	
		
			
				| 
					
				 | 
			
			
				@@ -20,14 +24,16 @@ namespace qlow 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 struct Class 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				     std::string name; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-    util::OwningList<Field> fields; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-    util::OwningList<Method> methods; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    SymbolTable<Field> fields; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    SymbolTable<Method> methods; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 }; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				  
			 | 
		
	
		
			
				 | 
				 | 
			
			
				  
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 struct Field 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				     Class* type; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				  
			 | 
		
	
		
			
				 | 
				 | 
			
			
				  
			 |