1
16
17 import org.as2lib.regexp.node.Node;
18 import org.as2lib.regexp.node.TreeInfo;
19
20
25
26 class org.as2lib.regexp.node.Conditional extends Node {
27
28 private var cond, yes, nope:Node;
29
30 public function Conditional(cond:Node, yes:Node, nope:Node) {
31 this.cond = cond;
32 this.yes = yes;
33 this.nope = nope;
34 }
35
36 public function match(matcher:Object, i:Number, seq:String):Boolean {
37 if (cond.match(matcher, i, seq)) {
38 return yes.match(matcher, i, seq);
39 } else {
40 return nope.match(matcher, i, seq);
41 }
42 }
43
44 public function study(info:TreeInfo):Boolean {
45 var minL:Number = info.minLength;
46 var maxL:Number = info.maxLength;
47 var maxV:Boolean = info.maxValid;
48 info.reset();
49 yes.study(info);
50
51 var minL2:Number = info.minLength;
52 var maxL2:Number = info.maxLength;
53 var maxV2:Boolean = info.maxValid;
54 info.reset();
55 nope.study(info);
56
57 info.minLength = minL + Math.min(minL2, info.minLength);
58 info.maxLength = maxL + Math.max(maxL2, info.maxLength);
59 info.maxValid = (maxV && maxV2 && info.maxValid);
60 info.deterministic = false;
61 return next.study(info);
62 }
63 }
64
65