summaryrefslogtreecommitdiff
path: root/Build/source/utils/asymptote/env.cc
diff options
context:
space:
mode:
authorDenis Bitouzé <dbitouze@wanadoo.fr>2021-02-25 18:23:07 +0000
committerDenis Bitouzé <dbitouze@wanadoo.fr>2021-02-25 18:23:07 +0000
commitc6101f91d071883b48b1b4b51e5eba0f36d9a78d (patch)
tree1bf7f5a881d7a4f5c5bf59d0b2821943dd822372 /Build/source/utils/asymptote/env.cc
parent07ee7222e389b0777456b427a55c22d0e6ffd267 (diff)
French translation for tlmgr updated
git-svn-id: svn://tug.org/texlive/trunk@57912 c570f23f-e606-0410-a88d-b1316a301751
Diffstat (limited to 'Build/source/utils/asymptote/env.cc')
-rw-r--r--Build/source/utils/asymptote/env.cc217
1 files changed, 0 insertions, 217 deletions
diff --git a/Build/source/utils/asymptote/env.cc b/Build/source/utils/asymptote/env.cc
deleted file mode 100644
index 3b0a59b7a32..00000000000
--- a/Build/source/utils/asymptote/env.cc
+++ /dev/null
@@ -1,217 +0,0 @@
-/*****
- * env.cc
- * Andy Hammerlindl 2002/6/20
- *
- * Keeps track of the namespaces of variables and types when traversing
- * the abstract syntax.
- *****/
-
-#include "env.h"
-#include "record.h"
-#include "genv.h"
-#include "builtin.h"
-
-using namespace types;
-
-namespace trans {
-
-// Instances of this class are passed to types::ty objects so that they can call
-// back to env when checking casting of subtypes.
-class envCaster : public caster {
- protoenv &e;
- symbol name;
-public:
- envCaster(protoenv &e, symbol name)
- : e(e), name(name) {}
-
- access *operator() (ty *target, ty *source) {
- return e.lookupCast(target, source, name);
- }
-
- bool castable(ty *target, ty *source) {
- return e.castable(target, source, name);
- }
-};
-
-access *protoenv::baseLookupCast(ty *target, ty *source, symbol name) {
- static identAccess id;
-
- assert(target->kind != ty_overloaded &&
- source->kind != ty_overloaded);
-
- // If errors already exist, don't report more. This may, however, cause
- // problems with resoving the signature of an overloaded function. The
- // abstract syntax should check if any of the parameters had an error before
- // finding the signature.
- if (target->kind == ty_error || source->kind == ty_error)
- return &id;
- else if (equivalent(target,source))
- return &id;
- else {
- varEntry *v=lookupVarByType(name,new function(target,source));
- return v ? v->getLocation() : 0;
- }
-}
-
-access *protoenv::lookupCast(ty *target, ty *source, symbol name) {
- access *a=baseLookupCast(target, source, name);
- if (a)
- return a;
-
- envCaster ec(*this, name);
- return source->castTo(target, ec);
-}
-
-bool protoenv::castable(ty *target, ty *source, symbol name) {
- struct castTester : public tester {
- protoenv &e;
- symbol name;
-
- castTester(protoenv &e, symbol name)
- : e(e), name(name) {}
-
- bool base(ty *t, ty *s) {
- access *a=e.baseLookupCast(t, s, name);
- if (a)
- return true;
-
- envCaster ec(e, name);
- return s->castable(t, ec);
- }
- };
-
- castTester ct(*this, name);
- return ct.test(target,source);
-}
-
-bool protoenv::fastCastable(ty *target, ty *source) {
- assert(target->kind != types::ty_overloaded);
- assert(target->kind != types::ty_error);
- assert(source->kind != types::ty_error);
-
- // To avoid memory allocation, fill one static variable with new parameters
- // in each call.
- // Warning: This is not re-entrant if asy ever goes multi-threaded.
- static types::function castFunc(primVoid(), primVoid());
- castFunc.result = target;
-
- if (source->kind == types::ty_overloaded) {
- bool result = false;
- types::ty_vector& v = ((overloaded *)source)->sub;
- for (size_t i = 0; i < v.size(); ++i) {
- castFunc.sig.formals[0].t = v[i];
- if (lookupVarByType(symbol::castsym, &castFunc)) {
- result = true;
- break;
- }
- }
- //assert(result == castable(target, source, symbol::castsym));
- //cout << "fc OVERLOADED " << (result ? "CAST" : "FAIL") << endl;
- return result;
- }
- //else cout << "fc SIMPLE" << endl;
-
- // Don't test for equivalent, as that is already done by the castScore
- // code. Assert disabled for speed.
-#if 0
- assert(!equivalent(target, source));
-#endif
-
- castFunc.sig.formals[0].t = source;
-
- if (lookupVarByType(symbol::castsym, &castFunc))
- return true;
-
- // Test for generic casts of null. This should be moved to a types.h
- // routine.
- return source->kind == ty_null && target->isReference();
-}
-
-access *protoenv::fastLookupCast(ty *target, ty *source) {
- assert(target->kind != types::ty_overloaded);
- assert(target->kind != types::ty_error);
- assert(source->kind != types::ty_overloaded);
- assert(source->kind != types::ty_error);
-
- // Warning: This is not re-entrant.
- static types::function castFunc(primVoid(), primVoid());
- castFunc.result = target;
- castFunc.sig.formals[0].t = source;
-
- varEntry *ve = lookupVarByType(symbol::castsym, &castFunc);
- if (ve)
- return ve->getLocation();
-
- // Fall back on slow routine.
- return lookupCast(target, source, symbol::castsym);
-}
-
-
-ty *protoenv::castTarget(ty *target, ty *source, symbol name) {
- struct resolver : public collector {
- protoenv &e;
- symbol name;
-
- resolver(protoenv &e, symbol name)
- : e(e), name(name) {}
-
- types::ty *base(types::ty *target, types::ty *source) {
- return e.castable(target, source, name) ? target : 0;
- }
- };
-
- resolver r(*this, name);
- return r.collect(target, source);
-}
-
-ty *protoenv::castSource(ty *target, ty *source, symbol name) {
- struct resolver : public collector {
- protoenv &e;
- symbol name;
-
- resolver(protoenv &e, symbol name)
- : e(e), name(name) {}
-
- types::ty *base(types::ty *target, types::ty *source) {
- return e.castable(target, source, name) ? source : 0;
- }
- };
-
- resolver r(*this, name);
- return r.collect(target, source);
-}
-
-void protoenv::addArrayOps(array *a)
-{
- trans::addArrayOps(ve, a);
-}
-
-void protoenv::addRecordOps(record *r)
-{
- trans::addRecordOps(ve, r);
-}
-
-void protoenv::addFunctionOps(function *f)
-{
- trans::addFunctionOps(ve, f);
-}
-
-env::env(genv &ge)
- : protoenv(venv::file_env_tag()), ge(ge)
-{
- // NOTE: May want to make this initial environment into a "builtin" module,
- // and then import the builtin module.
- base_tenv(te);
- base_venv(ve);
-}
-
-env::~env()
-{
-}
-
-record *env::getModule(symbol id, string filename)
-{
- return ge.getModule(id, filename);
-}
-
-}