1
16
17 import org.as2lib.regexp.node.Node;
18 import org.as2lib.regexp.node.NotRange;
19 import org.as2lib.regexp.node.TreeInfo;
20
21
27
28 class org.as2lib.regexp.node.Range extends Node {
29
30 private var lower, upper:Number;
31
32 public function Range(n:Number) {
33 if (n != null) {
34 lower = n >>> 16;
35 upper = n & 0xFFFF;
36 }
37 }
38
39 public function dup(flag:Boolean):Node {
40 return (flag) ?
41 new NotRange((lower << 16) + upper) :
42 new Range((lower << 16) + upper);
43 }
44
45 public function match(matcher:Object, i:Number, seq:String):Boolean {
46 if (i < matcher.to) {
47 var ch:Number = seq.charCodeAt(i);
48 return ((ch-lower)|(upper-ch)) >= 0 && next.match(matcher, i+1, seq);
49 }
50 return false;
51 }
52
53 public function study(info:TreeInfo):Boolean {
54 info.minLength++;
55 info.maxLength++;
56 return next.study(info);
57 }
58 }
59
60