1 29 30 package com.caucho.quercus.program; 31 32 import com.caucho.quercus.Location; 33 import com.caucho.quercus.env.BreakValue; 34 import com.caucho.quercus.env.ContinueValue; 35 import com.caucho.quercus.env.Env; 36 import com.caucho.quercus.env.Value; 37 import com.caucho.quercus.expr.Expr; 38 39 42 public class ForStatement extends Statement { 43 protected final Expr _init; 44 protected final Expr _test; 45 protected final Expr _incr; 46 protected final Statement _block; 47 48 public ForStatement(Location location, Expr init, Expr test, Expr incr, Statement block) 49 { 50 super(location); 51 52 _init = init; 53 _test = test; 54 _incr = incr; 55 56 _block = block; 57 } 58 59 public Value execute(Env env) 60 { 61 try { 62 if (_init != null) 63 _init.eval(env); 64 65 while (_test == null || _test.evalBoolean(env)) { 66 env.checkTimeout(); 67 68 Value value = _block.execute(env); 69 70 if (value == null || value instanceof ContinueValue) { 71 } 72 else if (value instanceof BreakValue) 73 return null; 74 else 75 return value; 76 77 if (_incr != null) 78 _incr.eval(env); 79 } 80 } 81 catch (RuntimeException t) { 82 rethrow(t, RuntimeException .class); 83 } 84 85 return null; 86 } 87 } 88 89 | Popular Tags |