summaryrefslogtreecommitdiff
path: root/graphics/asymptote/env.h
diff options
context:
space:
mode:
Diffstat (limited to 'graphics/asymptote/env.h')
-rw-r--r--graphics/asymptote/env.h25
1 files changed, 15 insertions, 10 deletions
diff --git a/graphics/asymptote/env.h b/graphics/asymptote/env.h
index 1cf628f095..3916facd5e 100644
--- a/graphics/asymptote/env.h
+++ b/graphics/asymptote/env.h
@@ -19,7 +19,7 @@ class record;
}
namespace absyntax {
-class namedTyEntry;
+class namedTy;
}
namespace trans {
@@ -140,20 +140,27 @@ public:
ve.add(source.ve, qualifier, c);
}
+ struct Added : public gc {
+ tyEntry *typeAdded;
+ mem::vector<varEntry*> varsAdded;
+ bool empty() { return !typeAdded && varsAdded.empty(); }
+ };
+
// Add variables and types of name src from another environment under the
// name dest in this environment.
- bool add(symbol src, symbol dest,
+ Added *add(symbol src, symbol dest,
protoenv &source, varEntry *qualifier, coder &c)
{
- bool teAdd=te.add(src, dest, source.te, qualifier, c);
- bool veAdd=ve.add(src, dest, source.ve, qualifier, c);
- return teAdd || veAdd;
+ Added *retv = new Added();
+ retv->typeAdded=te.add(src, dest, source.te, qualifier, c);
+ bool varAdded=ve.add(src, dest, source.ve, qualifier, c, &retv->varsAdded);
+ assert(varAdded == (retv->varsAdded.size() > 0));
+ return retv;
}
// Add the standard functions for a new type.
void addArrayOps(types::array *t);
void addRecordOps(types::record *r);
- void addFunctionOps(types::function *f);
void list(record *r=0)
{
@@ -186,10 +193,8 @@ public:
~env();
record *getModule(symbol id, string filename);
- record *getTemplatedModule(symbol index,
- string filename,
- mem::vector<absyntax::namedTyEntry*> *args,
- coenv& e);
+ record *getTemplatedModule(string filename,
+ mem::vector<absyntax::namedTy*> *args);
record *getLoadedModule(symbol id);
};