private static Group parseRootLess(String pattern) throws RegexSyntaxException { try { return new RegexParser(new RegexSource(pattern), RegexOptions.DEFAULT).parse(false); } catch (Throwable e) { LOG_INTERNAL_ERRORS.severe(() -> { StringWriter buffer = new StringWriter(); PrintWriter writer = new PrintWriter(buffer); e.printStackTrace(writer); return buffer.toString(); }); throw e; } }
private boolean eagerAndLazySearchNodesProduceSameResult(VirtualFrame frame, RegexObject regex, Object input, int fromIndex, RegexResult resultOfCurrentSearchNode) { if (lazySearchNode.captureGroupEntryNode == null || eagerSearchNode == EAGER_SEARCH_BAILED_OUT) { return true; } RegexResult lazyResult; RegexResult eagerResult; if (runRegexSearchNode == lazySearchNode) { lazyResult = resultOfCurrentSearchNode; eagerResult = eagerSearchNode.run(frame, regex, input, fromIndex); } else { lazyResult = lazySearchNode.run(frame, regex, input, fromIndex); eagerResult = resultOfCurrentSearchNode; } boolean equal; if (lazyResult == RegexResult.NO_MATCH) { equal = eagerResult == RegexResult.NO_MATCH; } else { ((LazyCaptureGroupsResult) lazyResult).debugForceEvaluation(); equal = Arrays.equals(((LazyCaptureGroupsResult) lazyResult).getResult(), ((LazyCaptureGroupsResult) eagerResult).getResult()); } if (!equal) { LOG_INTERNAL_ERRORS.severe(() -> String.format("Regex: %s\nInput: %s\nfromIndex: %d\nLazy Result: %s\nEager Result: %s", getSource(), input, fromIndex, lazyResult, eagerResult)); } return equal; }