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>