diff --git a/Parser/FunctionManager.cpp b/Parser/FunctionManager.cpp
index 8c7abdb06aedd939b177b114668455f97376530c..784e565464ff3cd3d7defb7c7212d18a6d8e34eb 100644
--- a/Parser/FunctionManager.cpp
+++ b/Parser/FunctionManager.cpp
@@ -1,4 +1,4 @@
-// $Id: FunctionManager.cpp,v 1.12 2001-08-17 12:19:34 geuzaine Exp $
+// $Id: FunctionManager.cpp,v 1.13 2001-10-04 14:32:11 geuzaine Exp $
 
 #include <map>
 #include <stdio.h>
@@ -21,6 +21,7 @@ class File_Position
     int lineno;
     fpos_t position;
     FILE *file;
+    char filename[256];
 };
 
 // Pour utiliser un namespace global sur SGI, il faut compiler avec
@@ -55,22 +56,24 @@ FunctionManager* FunctionManager::Instance()
   return instance;
 }
 
-int FunctionManager::enterFunction(char *name, FILE **f, int &lno) const
+int FunctionManager::enterFunction(char *name, FILE **f, char *filename, int &lno) const
 {
   if(functions->m.find(name) == functions->m.end())return 0;
   File_Position fpold;
   fpold.lineno = lno;
+  strcpy(fpold.filename,filename);
   fpold.file = *f;
   fgetpos(fpold.file,&fpold.position);
   calls->s.push(fpold);
   File_Position fp = (functions->m)[name];
   fsetpos(fp.file,&fp.position);
   *f = fp.file;
+  strcpy(filename, fp.filename);
   lno = fp.lineno;
   return 1;
 }
 
-int FunctionManager::leaveFunction(FILE **f,int &lno)
+int FunctionManager::leaveFunction(FILE **f, char *filename, int &lno)
 {
   if(!calls->s.size())return 0;
   File_Position fp;
@@ -78,14 +81,16 @@ int FunctionManager::leaveFunction(FILE **f,int &lno)
   calls->s.pop();
   fsetpos(fp.file,&fp.position);
   *f = fp.file;
+  strcpy(filename, fp.filename);
   lno = fp.lineno;
   return 1;
 }
 
-int FunctionManager::createFunction(char *name, FILE *f, int lno)
+int FunctionManager::createFunction(char *name, FILE *f, char *filename, int lno)
 {
   File_Position fp;
   fp.file = f;
+  strcpy(fp.filename, filename);
   fp.lineno = lno;
   fgetpos(fp.file,&fp.position);
   (functions->m)[name] = fp;
diff --git a/Parser/FunctionManager.h b/Parser/FunctionManager.h
index 0e82deb1bb8a54201d87f60a51bae01d1e83195c..ad623b363d20a09a49ab3f413de41dd39fd440f8 100644
--- a/Parser/FunctionManager.h
+++ b/Parser/FunctionManager.h
@@ -17,9 +17,9 @@ class FunctionManager
     static FunctionManager *instance;
   public :
     static FunctionManager* Instance();
-    int enterFunction (char *name, FILE **f, int &) const;
-    int createFunction  (char *name, FILE *f, int);
-    int leaveFunction (FILE **f, int &);
+    int createFunction  (char *name, FILE *f, char *filename, int lineno);
+    int enterFunction (char *name, FILE **f, char *filename, int &lineno) const;
+    int leaveFunction (FILE **f, char *filename, int &lineno);
 };
 
 #endif
diff --git a/Parser/Gmsh.tab.cpp b/Parser/Gmsh.tab.cpp
index dd567020ec632c5d98b01fffbf8eec6fd745d0ab..f21871f4ef2e95fbc8a20cc9c11cc1471c9105bf 100644
--- a/Parser/Gmsh.tab.cpp
+++ b/Parser/Gmsh.tab.cpp
@@ -175,7 +175,7 @@
 #line 1 "Gmsh.y"
  
 
-// $Id: Gmsh.tab.cpp,v 1.117 2001-10-04 12:07:01 geuzaine Exp $
+// $Id: Gmsh.tab.cpp,v 1.118 2001-10-04 14:32:11 geuzaine Exp $
 
 #include <stdarg.h>
 #ifndef _NOPLUGIN
@@ -4792,7 +4792,7 @@ case 208:
 case 209:
 #line 1690 "Gmsh.y"
 {
-      if(!FunctionManager::Instance()->createFunction(yyvsp[0].c,yyin,yylineno))
+      if(!FunctionManager::Instance()->createFunction(yyvsp[0].c,yyin,yyname,yylineno))
 	vyyerror("Redefinition of function %s",yyvsp[0].c);
       skip_until(NULL, "Return");
     ;
@@ -4800,14 +4800,14 @@ case 209:
 case 210:
 #line 1696 "Gmsh.y"
 {
-      if(!FunctionManager::Instance()->leaveFunction(&yyin,yylineno))
+      if(!FunctionManager::Instance()->leaveFunction(&yyin,yyname,yylineno))
 	vyyerror("Error while exiting function");
     ;
     break;}
 case 211:
 #line 1701 "Gmsh.y"
 {
-      if(!FunctionManager::Instance()->enterFunction(yyvsp[-1].c,&yyin,yylineno))
+      if(!FunctionManager::Instance()->enterFunction(yyvsp[-1].c,&yyin,yyname,yylineno))
 	vyyerror("Unknown function %s",yyvsp[-1].c);
     ;
     break;}
diff --git a/Parser/Gmsh.y b/Parser/Gmsh.y
index 74fd1e2a6ac7b30dc2d487132221b93d119d6f94..989e0b0168d7967aa3efc60e259d3cd0b6e2688e 100644
--- a/Parser/Gmsh.y
+++ b/Parser/Gmsh.y
@@ -1,6 +1,6 @@
 %{ 
 
-// $Id: Gmsh.y,v 1.103 2001-10-04 12:07:02 geuzaine Exp $
+// $Id: Gmsh.y,v 1.104 2001-10-04 14:32:11 geuzaine Exp $
 
 #include <stdarg.h>
 #ifndef _NOPLUGIN
@@ -1688,18 +1688,18 @@ Loop :
     }
   | tFunction tSTRING
     {
-      if(!FunctionManager::Instance()->createFunction($2,yyin,yylineno))
+      if(!FunctionManager::Instance()->createFunction($2,yyin,yyname,yylineno))
 	vyyerror("Redefinition of function %s",$2);
       skip_until(NULL, "Return");
     }
   | tReturn
     {
-      if(!FunctionManager::Instance()->leaveFunction(&yyin,yylineno))
+      if(!FunctionManager::Instance()->leaveFunction(&yyin,yyname,yylineno))
 	vyyerror("Error while exiting function");
     } 
   | tCall tSTRING tEND
     {
-      if(!FunctionManager::Instance()->enterFunction($2,&yyin,yylineno))
+      if(!FunctionManager::Instance()->enterFunction($2,&yyin,yyname,yylineno))
 	vyyerror("Unknown function %s",$2);
     } 
   | tIf '(' FExpr ')'
diff --git a/Parser/Gmsh.yy.cpp b/Parser/Gmsh.yy.cpp
index f872b8d4cb416c59047d99637d62bcfbcb439291..46efad4b0bf7e6838574cc24740e1328d287179a 100644
--- a/Parser/Gmsh.yy.cpp
+++ b/Parser/Gmsh.yy.cpp
@@ -2,7 +2,7 @@
 /* A lexical scanner generated by flex */
 
 /* Scanner skeleton version:
- * $Header: /cvsroot/gmsh/Parser/Gmsh.yy.cpp,v 1.117 2001-10-04 12:07:02 geuzaine Exp $
+ * $Header: /cvsroot/gmsh/Parser/Gmsh.yy.cpp,v 1.118 2001-10-04 14:32:12 geuzaine Exp $
  */
 
 #define FLEX_SCANNER
@@ -998,7 +998,7 @@ char *yytext;
 #define INITIAL 0
 #line 2 "Gmsh.l"
 
-// $Id: Gmsh.yy.cpp,v 1.117 2001-10-04 12:07:02 geuzaine Exp $
+// $Id: Gmsh.yy.cpp,v 1.118 2001-10-04 14:32:12 geuzaine Exp $
 
 #include <stdio.h>
 #include <stdlib.h>