summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--pod/perldebguts.pod4
-rw-r--r--regcomp.sym10
-rw-r--r--regen/regcomp.pl7
-rw-r--r--regnodes.h4
4 files changed, 16 insertions, 9 deletions
diff --git a/pod/perldebguts.pod b/pod/perldebguts.pod
index 94b83fe278..080daac63f 100644
--- a/pod/perldebguts.pod
+++ b/pod/perldebguts.pod
@@ -737,8 +737,8 @@ will be lost.
BRANCHJ off 1 1 BRANCH with long offset.
# Special Case Regops
- IFMATCH off 1 2 Succeeds if the following matches.
- UNLESSM off 1 2 Fails if the following matches.
+ IFMATCH off 1 1 Succeeds if the following matches.
+ UNLESSM off 1 1 Fails if the following matches.
SUSPEND off 1 1 "Independent" sub-RE.
IFTHEN off 1 1 Switch, should be preceded by switcher.
GROUPP num 1 Whether the group matched.
diff --git a/regcomp.sym b/regcomp.sym
index f275c7b6c8..6305bfbbcf 100644
--- a/regcomp.sym
+++ b/regcomp.sym
@@ -11,8 +11,10 @@
# Note that the order in this file is important.
#
# Format for first section:
-# NAME \s+ TYPE, arg-description [num-args] [flags] [longjump-len] ; DESCRIPTION
-# flag <S> means is REGNODE_SIMPLE; flag <V> means is REGNODE_VARIES
+# NAME \s+ TYPE, arg-description [num-args] [flags] [longjump] ; DESCRIPTION
+# flag <S> means is REGNODE_SIMPLE; flag <V> means is REGNODE_VARIES; <.> is
+# a placeholder
+# longjump is 1 if the (first) argument holds the next offset.
#
#
# run perl regen.pl after editing this file
@@ -162,8 +164,8 @@ LONGJMP LONGJMP, off 1 . 1 ; Jump far away.
BRANCHJ BRANCHJ, off 1 V 1 ; BRANCH with long offset.
#*Special Case Regops
-IFMATCH BRANCHJ, off 1 . 2 ; Succeeds if the following matches.
-UNLESSM BRANCHJ, off 1 . 2 ; Fails if the following matches.
+IFMATCH BRANCHJ, off 1 . 1 ; Succeeds if the following matches.
+UNLESSM BRANCHJ, off 1 . 1 ; Fails if the following matches.
SUSPEND BRANCHJ, off 1 V 1 ; "Independent" sub-RE.
IFTHEN BRANCHJ, off 1 V 1 ; Switch, should be preceded by switcher.
GROUPP GROUPP, num 1 ; Whether the group matched.
diff --git a/regen/regcomp.pl b/regen/regcomp.pl
index ffb7d7a13f..cb9861318d 100644
--- a/regen/regcomp.pl
+++ b/regen/regcomp.pl
@@ -54,7 +54,7 @@ use strict;
# code Op what code is associated with this node (???)
# args Op what type of args the node has (which regnode struct)
# flags Op (???)
-# longj Op Whether this node is a longjump
+# longj Op Boolean as to if this node is a longjump
# comment Both Comment about node, if any
# pod_comment Both Special comments for pod output (preceding lines in def)
@@ -89,6 +89,11 @@ sub register_node {
$node->{id}= 0 + @all;
push @all, $node;
$all{ $node->{name} }= $node;
+
+ if ($node->{longj} && $node->{longj} != 1) {
+ die "longj field must be in [01] if present in ", Dumper($node);
+ }
+
}
# Parse and add an opcode definition to the global state.
diff --git a/regnodes.h b/regnodes.h
index 849d2ec494..f94b16b8e7 100644
--- a/regnodes.h
+++ b/regnodes.h
@@ -479,8 +479,8 @@ static const char reg_off_by_arg[] = {
0, /* NREFFA */
1, /* LONGJMP */
1, /* BRANCHJ */
- 2, /* IFMATCH */
- 2, /* UNLESSM */
+ 1, /* IFMATCH */
+ 1, /* UNLESSM */
1, /* SUSPEND */
1, /* IFTHEN */
0, /* GROUPP */