[pure-lang-svn] SF.net SVN: pure-lang:[635] pure/trunk
Status: Beta
Brought to you by:
agraef
From: <ag...@us...> - 2008-08-27 18:35:51
|
Revision: 635 http://pure-lang.svn.sourceforge.net/pure-lang/?rev=635&view=rev Author: agraef Date: 2008-08-27 18:35:59 +0000 (Wed, 27 Aug 2008) Log Message: ----------- Bugfixes. Modified Paths: -------------- pure/trunk/interpreter.cc pure/trunk/lexer.ll pure/trunk/parser.yy pure/trunk/pure.cc Modified: pure/trunk/interpreter.cc =================================================================== --- pure/trunk/interpreter.cc 2008-08-27 18:27:08 UTC (rev 634) +++ pure/trunk/interpreter.cc 2008-08-27 18:35:59 UTC (rev 635) @@ -631,7 +631,7 @@ source = s; declare_op = false; source_s = 0; srcdir = dirname(fname); - modno = (temp == 0 && !s.empty())?modctr++:-1; + modno = modctr++; errmsg.clear(); if (check && !interactive) temp = 0; bool ok = lex_begin(fname); @@ -701,7 +701,7 @@ source = ""; declare_op = false; source_s = s.c_str(); srcdir = ""; - modno = -1; + modno = modctr++; errmsg.clear(); bool ok = lex_begin(); if (ok) { Modified: pure/trunk/lexer.ll =================================================================== --- pure/trunk/lexer.ll 2008-08-27 18:27:08 UTC (rev 634) +++ pure/trunk/lexer.ll 2008-08-27 18:35:59 UTC (rev 635) @@ -170,7 +170,8 @@ symbol list. */ while (f <= n) { /* Skip non-toplevel symbols. */ - if (interp.symtab.sym(f).modno >= 0 || + const symbol& sym = interp.symtab.sym(f); + if (sym.modno >= 0 && sym.modno != interp.modno || interp.globenv.find(f) == interp.globenv.end() && interp.macenv.find(f) == interp.macenv.end() && interp.globalvars.find(f) == interp.globalvars.end() && @@ -178,7 +179,7 @@ f++; continue; } - const string& s = interp.symtab.sym(f).s; + const string& s = sym.s; f++; if (strncmp(s.c_str(), text, len) == 0) return strdup(s.c_str()); @@ -437,7 +438,7 @@ int32_t f = it->first; const env_info& e = it->second; const symbol& sym = interp.symtab.sym(f); - if (sym.modno >= 0 || // skip private symbols + if (sym.modno >= 0 && sym.modno != interp.modno || !((e.t == env_info::fun)?fflag: (e.t == env_info::cvar)?cflag: (e.t == env_info::fvar)?vflag:0)) @@ -479,7 +480,7 @@ int32_t f = it->first; if (syms.find(f) == syms.end()) { const symbol& sym = interp.symtab.sym(f); - if (sym.modno >= 0) continue; // skip private symbols + if (sym.modno >= 0 && sym.modno != interp.modno) continue; bool matches = true; if (!args.l.empty()) { matches = false; @@ -507,7 +508,7 @@ if (syms.find(f) == syms.end()) { const env_info& e = it->second; const symbol& sym = interp.symtab.sym(f); - if (sym.modno >= 0) continue; // skip private symbols + if (sym.modno >= 0 && sym.modno != interp.modno) continue; bool matches = e.temp >= tflag; if (!matches && !sflag && args.l.empty()) { // if not in summary mode, also list temporary rules for a @@ -737,7 +738,7 @@ else if (args.c > 0) { list<string>::iterator s; for (s = args.l.begin(); s != args.l.end(); s++) { - const symbol *sym = interp.symtab.lookup(*s); + const symbol *sym = interp.symtab.lookup(*s, interp.modno); if (sym && sym->f > 0) interp.clear(sym->f); else Modified: pure/trunk/parser.yy =================================================================== --- pure/trunk/parser.yy 2008-08-27 18:27:08 UTC (rev 634) +++ pure/trunk/parser.yy 2008-08-27 18:35:59 UTC (rev 635) @@ -294,7 +294,7 @@ { if ($1->priv && $1->prec > 10 || !$1->priv && $1->fix != nullary && $1->prec > 9) { error(yylloc, "invalid fixity declaration"); YYERROR; - } else + } else if ($1->fix == nullary || $1->prec < 10) interp.declare_op = true; } ids { interp.declare_op = false; Modified: pure/trunk/pure.cc =================================================================== --- pure/trunk/pure.cc 2008-08-27 18:27:08 UTC (rev 634) +++ pure/trunk/pure.cc 2008-08-27 18:35:59 UTC (rev 635) @@ -94,7 +94,8 @@ symbol list. */ while (f <= n) { /* Skip non-toplevel symbols. */ - if (interp.symtab.sym(f).modno >= 0 || + const symbol& sym = interp.symtab.sym(f); + if (sym.modno >= 0 && sym.modno != interp.modno || interp.globenv.find(f) == interp.globenv.end() && interp.macenv.find(f) == interp.macenv.end() && interp.globalvars.find(f) == interp.globalvars.end() && @@ -102,7 +103,7 @@ f++; continue; } - const string& s = interp.symtab.sym(f).s; + const string& s = sym.s; f++; if (strncmp(s.c_str(), text, len) == 0) return strdup(s.c_str()); @@ -133,7 +134,8 @@ symbol list. */ while (f <= n) { /* Skip non-toplevel symbols. */ - if (interp.symtab.sym(f).modno >= 0 || + const symbol& sym = interp.symtab.sym(f); + if (sym.modno >= 0 && sym.modno != interp.modno || interp.globenv.find(f) == interp.globenv.end() && interp.macenv.find(f) == interp.macenv.end() && interp.globalvars.find(f) == interp.globalvars.end() && @@ -141,7 +143,7 @@ f++; continue; } - const string& s = interp.symtab.sym(f).s; + const string& s = sym.s; f++; if (strncmp(s.c_str(), text, len) == 0) return strdup(s.c_str()); This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |