Use a stack to manage "where" location
[scilab.git] / scilab / modules / ast / includes / system_env / configvariable.hxx
index 84f1124..958c9d3 100644 (file)
@@ -18,6 +18,7 @@
 #pragma warning (disable : 4251)
 #endif
 
+#include <vector>
 #include <list>
 #include <map>
 #include <string>
@@ -375,17 +376,24 @@ public :
     static int getFuncprot();
 
     // where
-private :
-    static std::list< std::pair<int, std::wstring> > m_Where;
-    static std::list<int> m_FirstMacroLine;
 public :
-    static void where_begin(int _iLineNum, std::wstring _wstName);
+    struct WhereEntry
+    {
+        int m_line;
+        int m_absolute_line;
+        std::wstring m_name;
+        WhereEntry(int line, int absolute_line, const std::wstring& name) : m_line(line), m_absolute_line(absolute_line), m_name(name) {}
+    };
+    static void where_begin(int _iLineNum, int _iLineLocation, const std::wstring& _wstName);
     static void where_end();
-    static std::list< std::pair<int, std::wstring> >& getWhere();
+    static const std::vector<WhereEntry>& getWhere();
 
     static void macroFirstLine_begin(int _iLine);
     static void macroFirstLine_end();
     static int getMacroFirstLines();
+private :
+    static std::vector<WhereEntry> m_Where;
+    static std::vector<int> m_FirstMacroLine;
 
     //module called with variable by reference
 private :