Lines Matching refs:Environment
436 class Environment;
450 static ExprEffect NoneWithEnv(Environment* env) {
459 Environment* env() {
460 return reinterpret_cast<Environment*>(effect_ & ~kAllEffects);
468 ExprEffect(int effect, Environment* env)
479 class Environment {
481 Environment() = default;
483 static Environment Unreachable() {
484 Environment env;
489 static Environment Merge(const Environment& l,
490 const Environment& r) {
491 Environment out(l);
496 Environment ApplyEffect(ExprEffect effect) const {
497 Environment out = effect.hasGC() ? Environment() : Environment(*this);
510 bool Equal(const Environment& env) {
519 Environment Define(const std::string& name) const {
520 return Environment(*this, SymbolToCode(name));
538 for (Environment* e : envs_) delete e;
555 static Environment* Allocate(const Environment& env) {
556 Environment* allocated_env = new Environment(env);
562 Environment(const Environment& l, int code)
577 Environment& operator|=(const Environment& o) {
589 Environment& operator&=(const Environment& o) {
604 static std::vector<Environment*> envs_;
656 Environment* env_;
660 Environment::SymbolTable Environment::symbol_table_;
661 std::vector<Environment*> Environment::envs_;
664 Environment* a_env = a.env();
665 Environment* b_env = b.env();
666 Environment* out = NULL;
668 out = Environment::Allocate(*a_env);
676 Environment* a_env = b.hasGC() ? NULL : a.env();
677 Environment* b_env = b.env();
678 Environment* out = (b_env == NULL) ? a_env : b_env;
680 out = Environment::Allocate(*b_env);
688 Environment* e = env();
690 e = Environment::Allocate(Environment());
720 ExprEffect VisitExpr(clang::Expr* expr, const Environment& env) {
792 ExprEffect Visit##type (clang::type* expr, const Environment& env)
795 ExprEffect Visit##type (clang::type* expr, const Environment& env) { \
838 Environment after_cond = env.ApplyEffect(VisitExpr(expr->getCond(), env));
967 const Environment& env) {
980 const Environment& env) {
982 Environment out_env = env;
999 const Environment& env) {
1016 const Environment& env) {
1023 ExprEffect VisitArguments(ExprType* call, const Environment& env) {
1034 const Environment& env) {
1044 const Environment& env) {
1116 Environment VisitStmt(clang::Stmt* stmt, const Environment& env) {
1154 Environment Visit##type (clang::type* stmt, const Environment& env)
1157 Environment Visit##type (clang::type* stmt, const Environment& env) { \
1175 Block(const Environment& in,
1178 out_(Environment::Unreachable()),
1188 void MergeIn(const Environment& env) {
1189 Environment old_in = in_;
1190 in_ = Environment::Merge(in_, env);
1200 const Environment& in() {
1204 const Environment& out() {
1208 void MergeOut(const Environment& env) {
1209 out_ = Environment::Merge(out_, env);
1213 Environment a_out = owner_->VisitStmt(a, in());
1214 Environment b_out = owner_->VisitStmt(b, a_out);
1215 Environment c_out = owner_->VisitStmt(c, b_out);
1220 Environment a_out = owner_->VisitStmt(a, in());
1221 Environment b_out = owner_->VisitStmt(b, a_out);
1237 Environment in_;
1238 Environment out_;
1247 return Environment::Unreachable();
1252 return Environment::Unreachable();
1257 Environment out = env;
1293 Environment cond_out = VisitStmt(stmt->getCond(), env);
1294 Environment then_out = VisitStmt(stmt->getThen(), cond_out);
1295 Environment else_out = VisitStmt(stmt->getElse(), cond_out);
1296 return Environment::Merge(then_out, else_out);
1306 Environment in = Environment::Merge(env, block_->in());
1307 Environment after_lhs = VisitStmt(stmt->getLHS(), in);
1312 Environment in = Environment::Merge(env, block_->in());
1318 return Environment::Unreachable();
1400 Environment VisitDecl(clang::Decl* decl, Environment& env) {
1402 Environment out = var->hasInit() ? VisitStmt(var->getInit(), env) : env;
1419 Environment out = env;
1431 Environment* env) {
1445 Environment env;
1448 Environment::ClearSymbolTable();