summaryrefslogtreecommitdiff
path: root/Build/source/utils/asymptote/dec.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/dec.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/dec.cc')
-rw-r--r--Build/source/utils/asymptote/dec.cc908
1 files changed, 0 insertions, 908 deletions
diff --git a/Build/source/utils/asymptote/dec.cc b/Build/source/utils/asymptote/dec.cc
deleted file mode 100644
index bcf842b40dc..00000000000
--- a/Build/source/utils/asymptote/dec.cc
+++ /dev/null
@@ -1,908 +0,0 @@
-/*****
- * dec.cc
- * Andy Hammerlindl 2002/8/29
- *
- * Represents the abstract syntax tree for declarations in the language.
- * Also included is an abstract syntax for types as they are most often
- * used with declarations.
- *****/
-
-#include "errormsg.h"
-#include "coenv.h"
-#include "dec.h"
-#include "fundec.h"
-#include "newexp.h"
-#include "stm.h"
-#include "exp.h"
-#include "modifier.h"
-#include "runtime.h"
-#include "parser.h"
-
-namespace absyntax {
-
-using namespace trans;
-using namespace types;
-
-using mem::list;
-
-trans::tyEntry *ty::transAsTyEntry(coenv &e, record *where)
-{
- return new trans::tyEntry(trans(e, false), 0, where, getPos());
-}
-
-
-void nameTy::prettyprint(ostream &out, Int indent)
-{
- prettyname(out, "nameTy",indent);
-
- id->prettyprint(out, indent+1);
-}
-
-types::ty *nameTy::trans(coenv &e, bool tacit)
-{
- return id->typeTrans(e, tacit);
-}
-
-trans::tyEntry *nameTy::transAsTyEntry(coenv &e, record *)
-{
- return id->tyEntryTrans(e);
-}
-
-
-void dimensions::prettyprint(ostream &out, Int indent)
-{
- prettyindent(out, indent);
- out << "dimensions (" << depth << ")\n";
-}
-
-types::array *dimensions::truetype(types::ty *base)
-{
- if (base->kind == ty_void) {
- em.error(getPos());
- em << "cannot declare array of type void";
- }
-
- assert(depth >= 1);
- size_t d=depth;
- types::array *a=new types::array(base); d--;
- for (; d > 0; d--) {
- a = new types::array(a);
- }
- return a;
-}
-
-
-void arrayTy::prettyprint(ostream &out, Int indent)
-{
- prettyname(out, "arrayTy",indent);
-
- cell->prettyprint(out, indent+1);
- dims->prettyprint(out, indent+1);
-}
-
-// NOTE: Can this be merged with trans somehow?
-void arrayTy::addOps(coenv &e, record *r)
-{
- types::ty *t=trans(e, true);
-
- // Only add ops if it is an array (and not, say, an error)
- if (t->kind == types::ty_array) {
- types::array *at=dynamic_cast<types::array *>(t);
- assert(at);
- e.e.addArrayOps(at);
- if (r)
- r->e.addArrayOps(at);
- }
-}
-
-types::ty *arrayTy::trans(coenv &e, bool tacit)
-{
- types::ty *ct = cell->trans(e, tacit);
- assert(ct);
-
- // Don't make an array of errors.
- if (ct->kind == types::ty_error)
- return ct;
-
- types::array *t = dims->truetype(ct);
- assert(t);
-
- return t;
-}
-
-tyEntryTy::tyEntryTy(position pos, types::ty *t)
- : ty(pos), ent(new trans::tyEntry(t, 0, 0, position()))
-{
-}
-
-void tyEntryTy::prettyprint(ostream &out, Int indent)
-{
- prettyindent(out,indent);
- out << "tyEntryTy: " << *(ent->t) << "\n";
-}
-
-types::ty *tyEntryTy::trans(coenv &, bool) {
- return ent->t;
-}
-
-
-vm::lambda *runnable::transAsCodelet(coenv &e)
-{
- coder c=e.c.newCodelet(getPos());
- coenv ce(c, e.e);
- markTrans(ce);
- return c.close();
-}
-
-
-void block::prettystms(ostream &out, Int indent)
-{
- for (list<runnable *>::iterator p = stms.begin(); p != stms.end(); ++p)
- (*p)->prettyprint(out, indent);
-}
-
-void block::prettyprint(ostream &out, Int indent)
-{
- prettyname(out,"block",indent);
- prettystms(out, indent+1);
-}
-
-void block::trans(coenv &e)
-{
- if (scope) e.e.beginScope();
- for (list<runnable *>::iterator p = stms.begin(); p != stms.end(); ++p) {
- (*p)->markTrans(e);
- }
- if (scope) e.e.endScope();
-}
-
-void block::transAsField(coenv &e, record *r)
-{
- if (scope) e.e.beginScope();
- for (list<runnable *>::iterator p = stms.begin(); p != stms.end(); ++p) {
- (*p)->markTransAsField(e, r);
- }
- if (scope) e.e.endScope();
-}
-
-void block::transAsRecordBody(coenv &e, record *r)
-{
- transAsField(e, r);
- e.c.closeRecord();
-}
-
-record *block::transAsFile(genv& ge, symbol id)
-{
- // Create the new module.
- record *r = new record(id, new frame(id,0,0));
-
- // Create coder and environment to translate the module.
- // File-level modules have dynamic fields by default.
- coder c(getPos(), r, 0);
- env e(ge);
- coenv ce(c, e);
-
- // Translate the abstract syntax.
- if (settings::getSetting<bool>("autoplain")) {
- autoplainRunnable()->transAsField(ce, r);
- }
- transAsRecordBody(ce, r);
- em.sync();
-
- return r;
-}
-
-bool block::returns() {
- // Search for a returning runnable, starting at the end for efficiency.
- for (list<runnable *>::reverse_iterator p=stms.rbegin();
- p != stms.rend();
- ++p)
- if ((*p)->returns())
- return true;
- return false;
-}
-
-vardec *block::asVardec()
-{
- vardec *var = 0;
- for (list<runnable *>::iterator p=stms.begin();
- p != stms.end();
- ++p)
- {
- vardec *v = dynamic_cast<vardec *>(*p);
- if (v) {
- if (var)
- // Multiple vardecs.
- return 0;
- var = v;
- }
- else if (!dynamic_cast<emptyStm *>(*p))
- // Failure due to another runnable in the block.
- return 0;
- }
-
- return var;
-}
-
-
-void dec::prettyprint(ostream &out, Int indent)
-{
- prettyname(out, "dec", indent);
-}
-
-
-void modifierList::prettyprint(ostream &out, Int indent)
-{
- prettyindent(out,indent);
- out << "modifierList (";
-
- for (list<modifier>::iterator p = mods.begin(); p != mods.end(); ++p) {
- if (p != mods.begin())
- out << ", ";
- switch (*p) {
- case EXPLICIT_STATIC:
- out << "static";
- break;
-#if 0
- case EXPLICIT_DYNAMIC:
- out << "dynamic";
- break;
-#endif
- default:
- out << "invalid code";
- }
- }
-
- for (list<permission>::iterator p = perms.begin(); p != perms.end(); ++p) {
- if (p != perms.begin() || !mods.empty())
- out << ", ";
- switch (*p) {
- case PUBLIC:
- out << "public";
- break;
- case PRIVATE:
- out << "private";
- break;
- default:
- out << "invalid code";
- }
- }
-
- out << ")\n";
-}
-
-bool modifierList::staticSet()
-{
- return !mods.empty();
-}
-
-modifier modifierList::getModifier()
-{
- if (mods.size() > 1) {
- em.error(getPos());
- em << "too many modifiers";
- }
-
- assert(staticSet());
- return mods.front();
-}
-
-permission modifierList::getPermission()
-{
- if (perms.size() > 1) {
- em.error(getPos());
- em << "too many modifiers";
- }
-
- return perms.empty() ? DEFAULT_PERM : perms.front();
-}
-
-
-void modifiedRunnable::prettyprint(ostream &out, Int indent)
-{
- prettyname(out, "modifierRunnable",indent);
-
- mods->prettyprint(out, indent+1);
- body->prettyprint(out, indent+1);
-}
-
-void modifiedRunnable::transAsField(coenv &e, record *r)
-{
- if (mods->staticSet()) {
- if (e.c.isTopLevel()) {
- em.warning(getPos());
- em << "static modifier is meaningless at top level";
- }
- e.c.pushModifier(mods->getModifier());
- }
-
- permission p = mods->getPermission();
-#if 0 // This is innocuous
- if (p != DEFAULT_PERM && (!r || !body->allowPermissions())) {
- em.warning(pos);
- em << "permission modifier is meaningless";
- }
-#endif
- e.c.setPermission(p);
-
- body->transAsField(e,r);
-
- e.c.clearPermission();
- if (mods->staticSet())
- e.c.popModifier();
-}
-
-
-void decidstart::prettyprint(ostream &out, Int indent)
-{
- prettyindent(out, indent);
- out << "decidstart '" << id << "'\n";
-
- if (dims)
- dims->prettyprint(out, indent+1);
-}
-
-types::ty *decidstart::getType(types::ty *base, coenv &, bool)
-{
- return dims ? dims->truetype(base) : base;
-}
-
-trans::tyEntry *decidstart::getTyEntry(trans::tyEntry *base, coenv &e,
- record *where)
-{
- return dims ? new trans::tyEntry(getType(base->t,e,false), 0,
- where, getPos()) :
- base;
-}
-
-void decidstart::addOps(types::ty *base, coenv &e, record *r)
-{
- if (dims) {
- e.e.addArrayOps(dims->truetype(base));
- if (r)
- r->e.addArrayOps(dims->truetype(base));
- }
-}
-
-
-void fundecidstart::prettyprint(ostream &out, Int indent)
-{
- prettyindent(out, indent);
- out << "fundecidstart '" << id << "'\n";
-
- if (dims)
- dims->prettyprint(out, indent+1);
- if (params)
- params->prettyprint(out, indent+1);
-}
-
-types::ty *fundecidstart::getType(types::ty *base, coenv &e, bool tacit)
-{
- types::ty *result = decidstart::getType(base, e, tacit);
-
- if (params) {
- return params->getType(result, e, true, tacit);
- }
- else {
- types::ty *t = new function(base);
- return t;
- }
-}
-
-trans::tyEntry *fundecidstart::getTyEntry(trans::tyEntry *base, coenv &e,
- record *where)
-{
- return new trans::tyEntry(getType(base->t,e,false), 0, where, getPos());
-}
-
-void fundecidstart::addOps(types::ty *base, coenv &e, record *r)
-{
- decidstart::addOps(base, e, r);
-
- params->addOps(e, r);
-
- types::function *ft=dynamic_cast<types::function *>(getType(base, e, true));
- assert(ft);
-
- e.e.addFunctionOps(ft);
- if (r)
- r->e.addFunctionOps(ft);
-}
-
-
-void decid::prettyprint(ostream &out, Int indent)
-{
- prettyname(out, "decid",indent);
-
- start->prettyprint(out, indent+1);
- if (init)
- init->prettyprint(out, indent+1);
-}
-
-
-varEntry *makeVarEntryWhere(coenv &e, record *r, types::ty *t,
- record *where, position pos)
-{
- access *a = r ? r->allocField(e.c.isStatic()) :
- e.c.allocLocal();
-
- return r ? new varEntry(t, a, e.c.getPermission(), r, where, pos) :
- new varEntry(t, a, where, pos);
-}
-
-varEntry *makeVarEntry(position pos, coenv &e, record *r, types::ty *t) {
- return makeVarEntryWhere(e, r, t, r, pos);
-}
-
-
-// Defined in constructor.cc.
-bool definesImplicitConstructor(coenv &e, record *r, varEntry *v, symbol id);
-void addConstructorFromInitializer(position pos, coenv &e, record *r,
- varEntry *init);
-
-void addVar(coenv &e, record *r, varEntry *v, symbol id)
-{
- // Test for 'operator init' definitions that implicitly define constructors:
- if (definesImplicitConstructor(e, r, v, id))
- addConstructorFromInitializer(position(), e, r, v);
-
- // Add to the record so it can be accessed when qualified; add to the
- // environment so it can be accessed unqualified in the scope of the
- // record definition.
- if (r)
- r->e.addVar(id, v);
- e.e.addVar(id, v);
-}
-
-void initializeVar(position pos, coenv &e, varEntry *v, varinit *init)
-{
- types::ty *t=v->getType();
-
- if (init)
- init->transToType(e, t);
- else {
- definit d(pos);
- d.transToType(e, t);
- }
-
- v->getLocation()->encode(WRITE, pos, e.c);
- e.c.encodePop();
-}
-
-types::ty *inferType(position pos, coenv &e, varinit *init)
-{
- if (!init) {
- em.error(pos);
- em << "inferred variable declaration without initializer";
- return primError();
- }
-
- exp *base = dynamic_cast<exp *>(init);
- if (base) {
- types::ty *t = base->cgetType(e);
- if (t->kind != ty_overloaded)
- return t;
- }
-
- em.error(pos);
- em << "could not infer type of initializer";
- return primError();
-}
-
-void createVar(position pos, coenv &e, record *r,
- symbol id, types::ty *t, varinit *init)
-{
- // I'm not sure how to handle inferred types in these cases.
- assert(t->kind != types::ty_inferred);
-
- varEntry *v=makeVarEntry(pos, e, r, t);
- addVar(e, r, v, id);
- initializeVar(pos, e, v, init);
-}
-
-void createVarOutOfOrder(position pos, coenv &e, record *r,
- symbol id, types::ty *t, varinit *init)
-{
- /* For declarations such as "var x = 5;", infer the type from the
- * initializer.
- */
- if (t->kind == types::ty_inferred)
- t = inferType(pos, e, init);
-
- varEntry *v=makeVarEntry(pos, e, r, t);
- initializeVar(pos, e, v, init);
- addVar(e, r, v, id);
-}
-
-void addTypeWithPermission(coenv &e, record *r, tyEntry *base, symbol id)
-{
- // Only bother encoding permissions for private types.
- tyEntry *ent = (r && e.c.getPermission()==PRIVATE) ?
- new trans::tyEntry(base, PRIVATE, r) :
- base;
-
- if (r)
- r->e.addType(id, ent);
- e.e.addType(id, ent);
-}
-
-
-void decid::transAsField(coenv &e, record *r, types::ty *base)
-{
- types::ty *t = start->getType(base, e);
- assert(t);
- if (t->kind == ty_void) {
- em.error(getPos());
- em << "cannot declare variable of type void";
- }
-
- start->addOps(base, e, r);
-
- createVarOutOfOrder(getPos(), e, r, start->getName(), t, init);
-}
-
-void decid::transAsTypedefField(coenv &e, trans::tyEntry *base, record *r)
-{
- trans::tyEntry *ent = start->getTyEntry(base, e, r);
- assert(ent && ent->t);
-
- if (init) {
- em.error(getPos());
- em << "type definition cannot have initializer";
- }
-
- start->addOps(base->t, e, r);
-
- addTypeWithPermission(e, r, ent, start->getName());
-}
-
-
-void decidlist::prettyprint(ostream &out, Int indent)
-{
- prettyname(out, "decidlist",indent);
-
- for (list<decid *>::iterator p = decs.begin(); p != decs.end(); ++p)
- (*p)->prettyprint(out, indent+1);
-}
-
-void decidlist::transAsField(coenv &e, record *r, types::ty *base)
-{
- for (list<decid *>::iterator p = decs.begin(); p != decs.end(); ++p)
- (*p)->transAsField(e, r, base);
-}
-
-void decidlist::transAsTypedefField(coenv &e, trans::tyEntry *base, record *r)
-{
- for (list<decid *>::iterator p = decs.begin(); p != decs.end(); ++p)
- (*p)->transAsTypedefField(e, base, r);
-}
-
-
-void vardec::prettyprint(ostream &out, Int indent)
-{
- prettyname(out, "vardec",indent);
-
- base->prettyprint(out, indent+1);
- decs->prettyprint(out, indent+1);
-}
-
-void vardec::transAsTypedefField(coenv &e, record *r)
-{
- base->addOps(e, r);
- decs->transAsTypedefField(e, base->transAsTyEntry(e, r), r);
-}
-
-symbol vardec::singleName()
-{
- decid *did = decs->singleEntry();
- if (!did)
- return symbol::nullsym;
- return did->getStart()->getName();
-}
-
-types::ty *vardec::singleGetType(coenv &e)
-{
- decid *did = decs->singleEntry();
- if (!did)
- return 0;
- return did->getStart()->getType(base->trans(e), e);
-}
-
-
-// Helper class for imports. This essentially evaluates to the run::loadModule
-// function. However, that function returns different types of records
-// depending on the filename given to it, so we cannot add it to the
-// environment. Instead, we explicitly tell it what types::record it is
-// returning for each use.
-class loadModuleExp : public exp {
- function *ft;
-
-public:
- loadModuleExp(position pos, record *imp)
- : exp(pos) {ft=new function(imp,primString());}
-
- void prettyprint(ostream &out, Int indent) {
- prettyname(out, "loadModuleExp", indent);
- }
-
- types::ty *trans(coenv &) {
- em.compiler(getPos());
- em << "trans called for loadModuleExp";
- return primError();
- }
-
- void transCall(coenv &e, types::ty *t) {
- assert(equivalent(t, ft));
- e.c.encode(inst::builtin, run::loadModule);
- }
-
- types::ty *getType(coenv &) {
- return ft;
- }
-
- exp *evaluate(coenv &, types::ty *) {
- // Don't alias.
- return this;
- }
-};
-
-// Creates a local variable to hold the import and translate the accessing of
-// the import, but doesn't add the import to the environment.
-varEntry *accessModule(position pos, coenv &e, record *r, symbol id)
-{
- record *imp=e.e.getModule(id, (string)id);
- if (!imp) {
- em.error(pos);
- em << "could not load module '" << id << "'";
- em.sync();
- return 0;
- }
- else {
- // Create a varinit that evaluates to the module.
- // This is effectively the expression "loadModule(filename)".
- callExp init(pos, new loadModuleExp(pos, imp),
- new stringExp(pos, (string)id));
-
- // The varEntry should have whereDefined()==0 as it is not defined inside
- // the record r.
- varEntry *v=makeVarEntryWhere(e, r, imp, 0, pos);
- initializeVar(pos, e, v, &init);
- return v;
- }
-}
-
-
-void idpair::prettyprint(ostream &out, Int indent)
-{
- prettyindent(out, indent);
- out << "idpair (" << "'" << src << "' as " << dest << ")\n";
-}
-
-void idpair::transAsAccess(coenv &e, record *r)
-{
- checkValidity();
-
- varEntry *v=accessModule(getPos(), e, r, src);
- if (v)
- addVar(e, r, v, dest);
-}
-
-void idpair::transAsUnravel(coenv &e, record *r,
- protoenv &source, varEntry *qualifier)
-{
- checkValidity();
-
- if (r)
- r->e.add(src, dest, source, qualifier, e.c);
- if (!e.e.add(src, dest, source, qualifier, e.c)) {
- em.error(getPos());
- em << "no matching types or fields of name '" << src << "'";
- }
-}
-
-
-void idpairlist::prettyprint(ostream &out, Int indent)
-{
- for (list<idpair *>::iterator p=base.begin();
- p != base.end();
- ++p)
- (*p)->prettyprint(out, indent);
-}
-
-void idpairlist::transAsAccess(coenv &e, record *r)
-{
- for (list<idpair *>::iterator p=base.begin();
- p != base.end();
- ++p)
- (*p)->transAsAccess(e,r);
-}
-
-void idpairlist::transAsUnravel(coenv &e, record *r,
- protoenv &source, varEntry *qualifier)
-{
- for (list<idpair *>::iterator p=base.begin();
- p != base.end();
- ++p)
- (*p)->transAsUnravel(e,r,source,qualifier);
-}
-
-idpairlist * const WILDCARD = 0;
-
-void accessdec::prettyprint(ostream &out, Int indent)
-{
- prettyname(out, "accessdec", indent);
- base->prettyprint(out, indent+1);
-}
-
-
-void fromdec::prettyprint(ostream &out, Int indent)
-{
- prettyname(out, "fromdec", indent);
- fields->prettyprint(out, indent+1);
-}
-
-void fromdec::transAsField(coenv &e, record *r)
-{
- qualifier q=getQualifier(e,r);
- if (q.t) {
- if (fields==WILDCARD) {
- if (r)
- r->e.add(q.t->e, q.v, e.c);
- e.e.add(q.t->e, q.v, e.c);
- }
- else
- fields->transAsUnravel(e, r, q.t->e, q.v);
- }
-}
-
-
-void unraveldec::prettyprint(ostream &out, Int indent)
-{
- prettyname(out, "unraveldec", indent);
- id->prettyprint(out, indent+1);
- idpairlist *f=this->fields;
- if(f) f->prettyprint(out, indent+1);
-}
-
-fromdec::qualifier unraveldec::getQualifier(coenv &e, record *)
-{
- // getType is where errors in the qualifier are reported.
- record *qt=dynamic_cast<record *>(id->getType(e, false));
- if (!qt) {
- em.error(getPos());
- em << "qualifier is not a record";
- }
-
- return qualifier(qt,id->getVarEntry(e));
-}
-
-void fromaccessdec::prettyprint(ostream &out, Int indent)
-{
- prettyindent(out, indent);
- out << "fromaccessdec '" << id << "'\n";
- idpairlist *f=this->fields;
- if(f) f->prettyprint(out, indent+1);
-}
-
-fromdec::qualifier fromaccessdec::getQualifier(coenv &e, record *r)
-{
- varEntry *v=accessModule(getPos(), e, r, id);
- if (v) {
- record *qt=dynamic_cast<record *>(v->getType());
- if (!qt) {
- em.compiler(getPos());
- em << "qualifier is not a record";
- }
- return qualifier(qt, v);
- }
- else
- return qualifier(0,0);
-}
-
-void importdec::prettyprint(ostream &out, Int indent)
-{
- prettyname(out, "importdec", indent);
- base.prettyprint(out, indent+1);
-}
-
-void includedec::prettyprint(ostream &out, Int indent)
-{
- prettyindent(out, indent);
- out << "includedec ('" << filename << "')\n";
-}
-
-void includedec::loadFailed(coenv &)
-{
- em.warning(getPos());
- em << "could not parse file of name '" << filename << "'";
- em.sync();
-}
-
-void includedec::transAsField(coenv &e, record *r)
-{
- file *ast = parser::parseFile(filename,"Including");
- em.sync();
-
- // The runnables will be translated, one at a time, without any additional
- // scoping.
- ast->transAsField(e, r);
-}
-
-
-void typedec::prettyprint(ostream &out, Int indent)
-{
- prettyname(out, "typedec",indent);
-
- body->prettyprint(out, indent+1);
-}
-
-
-void recorddec::prettyprint(ostream &out, Int indent)
-{
- prettyindent(out, indent);
- out << "structdec '" << id << "'\n";
-
- body->prettyprint(out, indent+1);
-}
-
-void recorddec::transRecordInitializer(coenv &e, record *parent)
-{
- position here=getPos();
-
- // This is equivalent to the code
- // A operator init() { return new A; }
- // where A is the name of the record.
- formals formals(here);
- simpleName recordName(here, id);
- nameTy result(here, &recordName);
- newRecordExp exp(here, &result);
- returnStm stm(here, &exp);
- fundec init(here, &result, symbol::opTrans("init"), &formals, &stm);
-
- init.transAsField(e, parent);
-}
-
-void recorddec::addPostRecordEnvironment(coenv &e, record *r, record *parent) {
- if (parent)
- parent->e.add(r->postdefenv, 0, e.c);
- e.e.add(r->postdefenv, 0, e.c);
-}
-
-void recorddec::transAsField(coenv &e, record *parent)
-{
- record *r = parent ? parent->newRecord(id, e.c.isStatic()) :
- e.c.newRecord(id);
-
- addTypeWithPermission(e, parent, new trans::tyEntry(r,0,parent,getPos()), id);
- e.e.addRecordOps(r);
- if (parent)
- parent->e.addRecordOps(r);
-
- // Start translating the initializer.
- coder c=e.c.newRecordInit(getPos(), r);
- coenv re(c,e.e);
-
- body->transAsRecordBody(re, r);
-
- // After the record is translated, add a default initializer so that a
- // variable of the type of the record is initialized to a new instance by
- // default.
- transRecordInitializer(e, parent);
-
- // Add types and variables defined during the record that should be added to
- // the enclosing environment. These are the implicit constructors defined by
- // "operator init".
- addPostRecordEnvironment(e, r, parent);
-}
-
-runnable *autoplainRunnable() {
- // Abstract syntax for the code:
- // private import plain;
- position pos=position();
- static importdec ap(pos, new idpair(pos, symbol::trans("plain")));
- static modifiedRunnable mr(pos, trans::PRIVATE, &ap);
-
- return &mr;
-}
-
-} // namespace absyntax