code: function maintain_this_binding(parent, orig, val) {
          if (parent instanceof AST_UnaryPrefix && parent.operator == "delete"
              || parent instanceof AST_Call && parent.expression === orig
                  && (val instanceof AST_PropAccess || val instanceof AST_SymbolRef && val.name == "eval")) {
              return make_node(AST_Seq, orig, {
                  car: make_node(AST_Number, orig, {
                      value: 0
                  }),
                  cdr: val
              });
          }
          return val;
      }
docs: we shouldn't compress (1,func)(something) to func(something) because that changes the meaning of the func (becomes lexical instead of global).