private int compileLengthOptionNode(EncloseNode node) { int prev = regex.options; regex.options = node.option; int tlen = compileLengthTree(node.target); regex.options = prev; if (Config.USE_DYNAMIC_OPTION && isDynamic(prev ^ node.option)) { return OPSize.SET_OPTION_PUSH + OPSize.SET_OPTION + OPSize.FAIL + tlen + OPSize.SET_OPTION; } else { return tlen; } }
private int compileLengthOptionNode(EncloseNode node) { int prev = regex.options; regex.options = node.option; int tlen = compileLengthTree(node.target); regex.options = prev; if (Config.USE_DYNAMIC_OPTION && isDynamic(prev ^ node.option)) { return OPSize.SET_OPTION_PUSH + OPSize.SET_OPTION + OPSize.FAIL + tlen + OPSize.SET_OPTION; } else { return tlen; } }
private int compileLengthAnchorNode(AnchorNode node) { int tlen; if (node.target != null) { tlen = compileLengthTree(node.target); } else { tlen = 0; } int len; switch (node.type) { case AnchorType.PREC_READ: len = OPSize.PUSH_POS + tlen + OPSize.POP_POS; break; case AnchorType.PREC_READ_NOT: len = OPSize.PUSH_POS_NOT + tlen + OPSize.FAIL_POS; break; case AnchorType.LOOK_BEHIND: len = OPSize.LOOK_BEHIND + tlen; break; case AnchorType.LOOK_BEHIND_NOT: len = OPSize.PUSH_LOOK_BEHIND_NOT + tlen + OPSize.FAIL_LOOK_BEHIND_NOT; break; default: len = OPSize.OPCODE; break; } // switch return len; }
private int compileLengthAnchorNode(AnchorNode node) { int tlen; if (node.target != null) { tlen = compileLengthTree(node.target); } else { tlen = 0; } int len; switch (node.type) { case AnchorType.PREC_READ: len = OPSize.PUSH_POS + tlen + OPSize.POP_POS; break; case AnchorType.PREC_READ_NOT: len = OPSize.PUSH_POS_NOT + tlen + OPSize.FAIL_POS; break; case AnchorType.LOOK_BEHIND: len = OPSize.LOOK_BEHIND + tlen; break; case AnchorType.LOOK_BEHIND_NOT: len = OPSize.PUSH_LOOK_BEHIND_NOT + tlen + OPSize.FAIL_LOOK_BEHIND_NOT; break; default: len = OPSize.OPCODE; break; } // switch return len; }
@Override protected void compileAltNode(ListNode node) { ListNode aln = node; int len = 0; do { len += compileLengthTree(aln.value); if (aln.tail != null) { len += OPSize.PUSH + OPSize.JUMP; } } while ((aln = aln.tail) != null); int pos = codeLength + len; /* goal position */ aln = node; do { len = compileLengthTree(aln.value); if (aln.tail != null) { regex.requireStack = true; addOpcodeRelAddr(OPCode.PUSH, len + OPSize.JUMP); } compileTree(aln.value); if (aln.tail != null) { len = pos - (codeLength + OPSize.JUMP); addOpcodeRelAddr(OPCode.JUMP, len); } } while ((aln = aln.tail) != null); }
@Override protected void compileAltNode(ListNode node) { ListNode aln = node; int len = 0; do { len += compileLengthTree(aln.value); if (aln.tail != null) { len += OPSize.PUSH + OPSize.JUMP; } } while ((aln = aln.tail) != null); int pos = codeLength + len; /* goal position */ aln = node; do { len = compileLengthTree(aln.value); if (aln.tail != null) { regex.requireStack = true; addOpcodeRelAddr(OPCode.PUSH, len + OPSize.JUMP); } compileTree(aln.value); if (aln.tail != null) { len = pos - (codeLength + OPSize.JUMP); addOpcodeRelAddr(OPCode.JUMP, len); } } while ((aln = aln.tail) != null); }
int emptyInfo = qn.targetEmptyInfo; int tlen = compileLengthTree(qn.target);
int emptyInfo = qn.targetEmptyInfo; int tlen = compileLengthTree(qn.target);
tlen = compileLengthTree(node.target); } else { tlen = 0; if (node.isStopBtSimpleRepeat()) { QuantifierNode qn = (QuantifierNode)node.target; tlen = compileLengthTree(qn.target); len = tlen * qn.lower + OPSize.PUSH + tlen + OPSize.POP + OPSize.JUMP; } else { if (node.target.getType() == NodeType.ALT) { ListNode x = (ListNode)node.target; tlen = compileLengthTree(x.value); /* yes-node */ len += tlen + OPSize.JUMP; if (x.tail == null) newInternalException(PARSER_BUG); x = x.tail; tlen = compileLengthTree(x.value); /* no-node */ len += tlen; if (x.tail != null) newSyntaxException(INVALID_CONDITION_PATTERN);
tlen = compileLengthTree(node.target); } else { tlen = 0; if (node.isStopBtSimpleRepeat()) { QuantifierNode qn = (QuantifierNode)node.target; tlen = compileLengthTree(qn.target); len = tlen * qn.lower + OPSize.PUSH + tlen + OPSize.POP + OPSize.JUMP; } else { if (node.target.getType() == NodeType.ALT) { ListNode x = (ListNode)node.target; tlen = compileLengthTree(x.value); /* yes-node */ len += tlen + OPSize.JUMP; if (x.tail == null) newInternalException(PARSER_BUG); x = x.tail; tlen = compileLengthTree(x.value); /* no-node */ len += tlen; if (x.tail != null) newSyntaxException(INVALID_CONDITION_PATTERN);
ListNode lin = (ListNode)node; do { len += compileLengthTree(lin.value); } while ((lin = lin.tail) != null); break; int n = 0; do { len += compileLengthTree(aln.value); n++; } while ((aln = aln.tail) != null);
ListNode lin = (ListNode)node; do { len += compileLengthTree(lin.value); } while ((lin = lin.tail) != null); break; int n = 0; do { len += compileLengthTree(aln.value); n++; } while ((aln = aln.tail) != null);
int emptyInfo = qn.targetEmptyInfo; int tlen = compileLengthTree(qn.target); int ckn = regex.numCombExpCheck > 0 ? qn.combExpCheckNum : 0; int cklen = cknOn(ckn) ? OPSize.STATE_CHECK_NUM : 0;
int emptyInfo = qn.targetEmptyInfo; int tlen = compileLengthTree(qn.target); int ckn = regex.numCombExpCheck > 0 ? qn.combExpCheckNum : 0; int cklen = cknOn(ckn) ? OPSize.STATE_CHECK_NUM : 0;
node.setAddrFixed(); addAbsAddr(node.callAddr); len = compileLengthTree(node.target); len += OPSize.MEMORY_START_PUSH + OPSize.RETURN; if (bsAt(regex.btMemEnd, node.regNum)) { len = compileLengthTree(qn.target); addOpcodeRelAddr(OPCode.PUSH, len + OPSize.POP + OPSize.JUMP); compileTree(qn.target); if (node.target.getType() == NodeType.ALT) { ListNode x = (ListNode)node.target; len = compileLengthTree(x.value); /* yes-node */ if (x.tail == null) newInternalException(PARSER_BUG); x = x.tail; int len2 = compileLengthTree(x.value); /* no-node */ if (x.tail != null) newSyntaxException(INVALID_CONDITION_PATTERN); x = (ListNode)node.target; len = compileLengthTree(node.target); addOpcode(OPCode.PUSH_ABSENT_POS); addOpcodeRelAddr(OPCode.ABSENT, len + OPSize.ABSENT_END);
node.setAddrFixed(); addAbsAddr(node.callAddr); len = compileLengthTree(node.target); len += OPSize.MEMORY_START_PUSH + OPSize.RETURN; if (bsAt(regex.btMemEnd, node.regNum)) { len = compileLengthTree(qn.target); addOpcodeRelAddr(OPCode.PUSH, len + OPSize.POP + OPSize.JUMP); compileTree(qn.target); if (node.target.getType() == NodeType.ALT) { ListNode x = (ListNode)node.target; len = compileLengthTree(x.value); /* yes-node */ if (x.tail == null) newInternalException(PARSER_BUG); x = x.tail; int len2 = compileLengthTree(x.value); /* no-node */ if (x.tail != null) newSyntaxException(INVALID_CONDITION_PATTERN); x = (ListNode)node.target; len = compileLengthTree(node.target); addOpcode(OPCode.PUSH_ABSENT_POS); addOpcodeRelAddr(OPCode.ABSENT, len + OPSize.ABSENT_END);
len = compileLengthTree(node.target); addOpcodeRelAddr(OPCode.PUSH_POS_NOT, len + OPSize.FAIL_POS); compileTree(node.target); len = compileLengthTree(node.target); addOpcodeRelAddr(OPCode.PUSH_LOOK_BEHIND_NOT, len + OPSize.FAIL_LOOK_BEHIND_NOT); if (node.charLength < 0) {
len = compileLengthTree(node.target); addOpcodeRelAddr(OPCode.PUSH_POS_NOT, len + OPSize.FAIL_POS); compileTree(node.target); len = compileLengthTree(node.target); addOpcodeRelAddr(OPCode.PUSH_LOOK_BEHIND_NOT, len + OPSize.FAIL_LOOK_BEHIND_NOT); if (node.charLength < 0) {
int emptyInfo = qn.targetEmptyInfo; int tlen = compileLengthTree(qn.target);
int emptyInfo = qn.targetEmptyInfo; int tlen = compileLengthTree(qn.target);