| 182 | |
| 183 | // Exposed to ExecTests. |
| 184 | static RE2 compileImpl(String expr, int mode, boolean longest) throws PatternSyntaxException { |
| 185 | Regexp re = Parser.parse(expr, mode); |
| 186 | int maxCap = re.maxCap(); // (may shrink during simplify) |
| 187 | re = Simplify.simplify(re); |
| 188 | Prog prog = Compiler.compileRegexp(re); |
| 189 | RE2 re2 = new RE2(expr, prog, maxCap, longest); |
| 190 | StringBuilder prefixBuilder = new StringBuilder(); |
| 191 | re2.prefixComplete = prog.prefix(prefixBuilder); |
| 192 | re2.prefix = prefixBuilder.toString(); |
| 193 | try { |
| 194 | re2.prefixUTF8 = re2.prefix.getBytes("UTF-8"); |
| 195 | } catch (UnsupportedEncodingException e) { |
| 196 | throw new IllegalStateException("can't happen"); |
| 197 | } |
| 198 | if (!re2.prefix.isEmpty()) { |
| 199 | re2.prefixRune = re2.prefix.codePointAt(0); |
| 200 | } |
| 201 | re2.namedGroups = re.namedGroups; |
| 202 | return re2; |
| 203 | } |
| 204 | |
| 205 | /** |
| 206 | * Returns the number of parenthesized subexpressions in this regular expression. |