40 case (_, File(name)) => Some((1, name)) |
38 case (_, File(name)) => Some((1, name)) |
41 case _ => None |
39 case _ => None |
42 } |
40 } |
43 } |
41 } |
44 |
42 |
45 object Def_Line_File |
43 object Def_Line_File { |
46 { |
|
47 def unapply(pos: T): Option[(Int, String)] = |
44 def unapply(pos: T): Option[(Int, String)] = |
48 (pos, pos) match { |
45 (pos, pos) match { |
49 case (Def_Line(i), Def_File(name)) => Some((i, name)) |
46 case (Def_Line(i), Def_File(name)) => Some((i, name)) |
50 case (_, Def_File(name)) => Some((1, name)) |
47 case (_, Def_File(name)) => Some((1, name)) |
51 case _ => None |
48 case _ => None |
52 } |
49 } |
53 } |
50 } |
54 |
51 |
55 object Range |
52 object Range { |
56 { |
|
57 def apply(range: Symbol.Range): T = Offset(range.start) ::: End_Offset(range.stop) |
53 def apply(range: Symbol.Range): T = Offset(range.start) ::: End_Offset(range.stop) |
58 def unapply(pos: T): Option[Symbol.Range] = |
54 def unapply(pos: T): Option[Symbol.Range] = |
59 (pos, pos) match { |
55 (pos, pos) match { |
60 case (Offset(start), End_Offset(stop)) if start <= stop => Some(Text.Range(start, stop)) |
56 case (Offset(start), End_Offset(stop)) if start <= stop => Some(Text.Range(start, stop)) |
61 case (Offset(start), _) => Some(Text.Range(start, start + 1)) |
57 case (Offset(start), _) => Some(Text.Range(start, start + 1)) |
62 case _ => None |
58 case _ => None |
63 } |
59 } |
64 } |
60 } |
65 |
61 |
66 object Def_Range |
62 object Def_Range { |
67 { |
|
68 def apply(range: Symbol.Range): T = Def_Offset(range.start) ::: Def_End_Offset(range.stop) |
63 def apply(range: Symbol.Range): T = Def_Offset(range.start) ::: Def_End_Offset(range.stop) |
69 def unapply(pos: T): Option[Symbol.Range] = |
64 def unapply(pos: T): Option[Symbol.Range] = |
70 (pos, pos) match { |
65 (pos, pos) match { |
71 case (Def_Offset(start), Def_End_Offset(stop)) if start <= stop => Some(Text.Range(start, stop)) |
66 case (Def_Offset(start), Def_End_Offset(stop)) if start <= stop => Some(Text.Range(start, stop)) |
72 case (Def_Offset(start), _) => Some(Text.Range(start, start + 1)) |
67 case (Def_Offset(start), _) => Some(Text.Range(start, start + 1)) |
73 case _ => None |
68 case _ => None |
74 } |
69 } |
75 } |
70 } |
76 |
71 |
77 object Item_Id |
72 object Item_Id { |
78 { |
|
79 def unapply(pos: T): Option[(Long, Symbol.Range)] = |
73 def unapply(pos: T): Option[(Long, Symbol.Range)] = |
80 pos match { |
74 pos match { |
81 case Id(id) => |
75 case Id(id) => |
82 val offset = Offset.unapply(pos) getOrElse 0 |
76 val offset = Offset.unapply(pos) getOrElse 0 |
83 val end_offset = End_Offset.unapply(pos) getOrElse (offset + 1) |
77 val end_offset = End_Offset.unapply(pos) getOrElse (offset + 1) |
84 Some((id, Text.Range(offset, end_offset))) |
78 Some((id, Text.Range(offset, end_offset))) |
85 case _ => None |
79 case _ => None |
86 } |
80 } |
87 } |
81 } |
88 |
82 |
89 object Item_Def_Id |
83 object Item_Def_Id { |
90 { |
|
91 def unapply(pos: T): Option[(Long, Symbol.Range)] = |
84 def unapply(pos: T): Option[(Long, Symbol.Range)] = |
92 pos match { |
85 pos match { |
93 case Def_Id(id) => |
86 case Def_Id(id) => |
94 val offset = Def_Offset.unapply(pos) getOrElse 0 |
87 val offset = Def_Offset.unapply(pos) getOrElse 0 |
95 val end_offset = Def_End_Offset.unapply(pos) getOrElse (offset + 1) |
88 val end_offset = Def_End_Offset.unapply(pos) getOrElse (offset + 1) |
96 Some((id, Text.Range(offset, end_offset))) |
89 Some((id, Text.Range(offset, end_offset))) |
97 case _ => None |
90 case _ => None |
98 } |
91 } |
99 } |
92 } |
100 |
93 |
101 object Item_File |
94 object Item_File { |
102 { |
|
103 def unapply(pos: T): Option[(String, Int, Symbol.Range)] = |
95 def unapply(pos: T): Option[(String, Int, Symbol.Range)] = |
104 pos match { |
96 pos match { |
105 case Line_File(line, name) => |
97 case Line_File(line, name) => |
106 val offset = Offset.unapply(pos) getOrElse 0 |
98 val offset = Offset.unapply(pos) getOrElse 0 |
107 val end_offset = End_Offset.unapply(pos) getOrElse (offset + 1) |
99 val end_offset = End_Offset.unapply(pos) getOrElse (offset + 1) |
108 Some((name, line, Text.Range(offset, end_offset))) |
100 Some((name, line, Text.Range(offset, end_offset))) |
109 case _ => None |
101 case _ => None |
110 } |
102 } |
111 } |
103 } |
112 |
104 |
113 object Item_Def_File |
105 object Item_Def_File { |
114 { |
|
115 def unapply(pos: T): Option[(String, Int, Symbol.Range)] = |
106 def unapply(pos: T): Option[(String, Int, Symbol.Range)] = |
116 pos match { |
107 pos match { |
117 case Def_Line_File(line, name) => |
108 case Def_Line_File(line, name) => |
118 val offset = Def_Offset.unapply(pos) getOrElse 0 |
109 val offset = Def_Offset.unapply(pos) getOrElse 0 |
119 val end_offset = Def_End_Offset.unapply(pos) getOrElse (offset + 1) |
110 val end_offset = Def_End_Offset.unapply(pos) getOrElse (offset + 1) |