[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.
|