protected override ICode VisitJsByRefWrapper(ExprJsByRefWrapper e)
 {
     this.js.Append("(");
     foreach (var byRef in e.ByRefs)
     {
         this.Visit(byRef.Item2);
         this.js.Append(" = [");
         this.Visit(byRef.Item1);
         this.js.Append("], ");
     }
     this.Visit(e.ResultTemp);
     this.js.Append(" = ");
     this.Visit(e.Expr);
     foreach (var byRef in e.ByRefs)
     {
         this.js.Append(", ");
         this.Visit(byRef.Item1);
         this.js.Append(" = ");
         this.Visit(byRef.Item2);
         this.js.Append("[0]");
     }
     this.js.Append(", ");
     this.Visit(e.ResultTemp);
     this.js.Append(")");
     return(e);
 }
        protected virtual ICode VisitJsByRefWrapper(ExprJsByRefWrapper e)
        {
            this.ThrowOnNoOverride();
            var expr = (Expr)this.Visit(e.Expr);

            // These visits are required so the variable namer finds them
            this.Visit(e.ResultTemp);
            foreach (var byRef in e.ByRefs)
            {
                this.Visit(byRef.Item1);
                this.Visit(byRef.Item2);
            }
            if (expr != e.Expr)
            {
                return(new ExprJsByRefWrapper(e.Ctx, expr, e.ResultTemp, e.ByRefs));
            }
            else
            {
                return(e);
            }
        }
 protected virtual ICode VisitJsByRefWrapper(ExprJsByRefWrapper e) {
     this.ThrowOnNoOverride();
     var expr = (Expr)this.Visit(e.Expr);
     // These visits are required so the variable namer finds them
     this.Visit(e.ResultTemp);
     foreach (var byRef in e.ByRefs) {
         this.Visit(byRef.Item1);
         this.Visit(byRef.Item2);
     }
     if (expr != e.Expr) {
         return new ExprJsByRefWrapper(e.Ctx, expr, e.ResultTemp, e.ByRefs);
     } else {
         return e;
     }
 }
 protected override ICode VisitJsByRefWrapper(ExprJsByRefWrapper e) {
     this.js.Append("(");
     foreach (var byRef in e.ByRefs) {
         this.Visit(byRef.Item2);
         this.js.Append(" = [");
         this.Visit(byRef.Item1);
         this.js.Append("], ");
     }
     this.Visit(e.ResultTemp);
     this.js.Append(" = ");
     this.Visit(e.Expr);
     foreach (var byRef in e.ByRefs) {
         this.js.Append(", ");
         this.Visit(byRef.Item1);
         this.js.Append(" = ");
         this.Visit(byRef.Item2);
         this.js.Append("[0]");
     }
     this.js.Append(", ");
     this.Visit(e.ResultTemp);
     this.js.Append(")");
     return e;
 }
 protected override ICode VisitJsByRefWrapper(ExprJsByRefWrapper e) {
     this.code.Append("byref-wrapper(");
     this.Visit(e.Expr);
     this.code.Append(")");
     return e;
 }