From a07edfb930066d85950d2b764af7a43d26eff074 Mon Sep 17 00:00:00 2001 From: illerokcob <113302047+illerokcob@users.noreply.github.com> Date: Fri, 24 Nov 2023 20:28:12 +0100 Subject: [PATCH 1/2] Fix syntax highlighting issue with obfuscated smali code Obfuscated apps add a strange hebrew character as the first character of the class' path which makes highlighting broken where this character is present. This commit fixes that. --- syntaxes/smali.tmLanguage | 38 +++++++++++++++++++------------------- 1 file changed, 19 insertions(+), 19 deletions(-) diff --git a/syntaxes/smali.tmLanguage b/syntaxes/smali.tmLanguage index b203c8b..bfa01a7 100644 --- a/syntaxes/smali.tmLanguage +++ b/syntaxes/smali.tmLanguage @@ -86,7 +86,7 @@ comment Class name match - ^\s*(\.class)\s*((?:(?:interface|public|protected|private|abstract|static|final|synchronized|transient|volatile|native|strictfp|synthetic|enum|annotation)\s+)*)\s*(L)([\w\-\$]+(?:/[\w\-\$]+)*)(;)(?=\s*(#.*)?$) + ^\s*(\.class)\s*((?:(?:interface|public|protected|private|abstract|static|final|synchronized|transient|volatile|native|strictfp|synthetic|enum|annotation)\s+)*)\s*(L)([\w\-\$\u05C5]+(?:/[\w\-\$\u05C5]+)*)(;)(?=\s*(#.*)?$) captures @@ -115,7 +115,7 @@ comment Super / implements class name match - ^\s*(\.(?:super|implements))\s+(L)([\w\-\$]+(?:/[\w\-\$]+)*)(;)(?=\s*(#.*)?$) + ^\s*(\.(?:super|implements))\s+(L)([\w\-\$\u05C5]+(?:/[\w\-\$\u05C5]+)*)(;)(?=\s*(#.*)?$) captures @@ -148,7 +148,7 @@ begin - ^\s*(\.method)\s*((?:(?>public|protected|private|abstract|static|final|synthetic|synchronized|native|varargs|volatile|declared-synchronized|transient|strictfp|enum|bridge)\s+)*)(constructor )?(<init>|<clinit>|[\$\p{L}_][\w\-\$]*)\(((?:\[*(?:[ZBSCIJFD]|L[\w\-\$]+(?:/[\w\-\$]+)*;))*)\)(?:(V)|\[*(?:([ZBSCIJFD])|(L)([\w\-\$]+(?:/[\w\-\$]+)*)(;)))(?=\s*(?:#.*)?$) + ^\s*(\.method)\s*((?:(?>public|protected|private|abstract|static|final|synthetic|synchronized|native|varargs|volatile|declared-synchronized|transient|strictfp|enum|bridge)\s+)*)(constructor )?(<init>|<clinit>|[\$\p{L}_][\w\-\$\u05C5]*)\(((?:\[*(?:[ZBSCIJFD]|L[\w\-\$\u05C5]+(?:/[\w\-\$\u05C5]+)*;))*)\)(?:(V)|\[*(?:([ZBSCIJFD])|(L)([\w\-\$\u05C5]+(?:/[\w\-\$\u05C5]+)*)(;)))(?=\s*(?:#.*)?$) beginCaptures 1 @@ -315,7 +315,7 @@ comment Local match - ^\s*(\.local)\s+([vp]\d+),\s+("[\w\-\$]+"):\[*(?:(?:([ZBSCIJFD])|(?:(L)([\w\-\$]+(?:/[\w\-\$]+)*)(;))))(?:,(")((?:[^"\\]|\\.)*)("))?(?:,\s*(")((?:[^"\\]|\\.)*)("))?(?=\s*(#.*)?$) + ^\s*(\.local)\s+([vp]\d+),\s+("[\w\-\$\u05C5]+"):\[*(?:(?:([ZBSCIJFD])|(?:(L)([\w\-\$\u05C5]+(?:/[\w\-\$\u05C5]+)*)(;))))(?:,(")((?:[^"\\]|\\.)*)("))?(?:,\s*(")((?:[^"\\]|\\.)*)("))?(?=\s*(#.*)?$) captures @@ -359,7 +359,7 @@ comment Catch exceptions match - ^\s*(\.catch)\s+(?:(L)([\w\-\$]+(?:/[\w\-\$]+)*)(;))\s+{(:[A-Za-z_\d]+)\s+\.\.\s+(:[A-Za-z_\d]+)}\s+(:[A-Za-z_\d]+)(?=\s*(#.*)?$) + ^\s*(\.catch)\s+(?:(L)([\w\-\$\u05C5]+(?:/[\w\-\$\u05C5]+)*)(;))\s+{(:[A-Za-z_\d]+)\s+\.\.\s+(:[A-Za-z_\d]+)}\s+(:[A-Za-z_\d]+)(?=\s*(#.*)?$) captures @@ -823,7 +823,7 @@ match - ^\s*(\.annotation)\s+(build|runtime|system)\s+(?:(L)([\w\-\$]+(?:/[\w\-\$]+)*)(;))(?=\s*(#.*)?$) + ^\s*(\.annotation)\s+(build|runtime|system)\s+(?:(L)([\w\-\$\u05C5]+(?:/[\w\-\$\u05C5]+)*)(;))(?=\s*(#.*)?$) annotation-access @@ -1013,7 +1013,7 @@ comment This is another hack because sublime can't handle multi-line regex, particulaly for 'end'. match - ^\s*(value)\s*=\s*(?:(")((?:[^"\\]|\\.)*)(")?|(?:\.(enum|subannotation)\s+)?(L)([\w\-\$]+(?:/[\w\-\$]+)*)(;))(?:->(?:([\w\-\$]+):\[*(?:(?:([ZBSCIJFD])|(?:(L)([\w\-\$]+(?:/[\w\-\$]+)*)(;))))|(<init>|<clinit>|(?:[\$\p{L}_][\w\-\$]*))\(((?:\[*(?:[ZBSCIJFD]|L(?:[\w\-\$]+(?:/[\w\-\$]+)*);))*)\)(?:(V)|\[*([ZBSCIJFD])|\[*(?:(L)([\w\-\$]+(?:/[\w\-\$]+)*)(;)))))?(?=\s*(#.*)?$) + ^\s*(value)\s*=\s*(?:(")((?:[^"\\]|\\.)*)(")?|(?:\.(enum|subannotation)\s+)?(L)([\w\-\$\u05C5]+(?:/[\w\-\$\u05C5]+)*)(;))(?:->(?:([\w\-\$\u05C5]+):\[*(?:(?:([ZBSCIJFD])|(?:(L)([\w\-\$\u05C5]+(?:/[\w\-\$\u05C5]+)*)(;))))|(<init>|<clinit>|(?:[\$\p{L}_][\w\-\$\u05C5]*))\(((?:\[*(?:[ZBSCIJFD]|L(?:[\w\-\$\u05C5]+(?:/[\w\-\$\u05C5]+)*);))*)\)(?:(V)|\[*([ZBSCIJFD])|\[*(?:(L)([\w\-\$\u05C5]+(?:/[\w\-\$\u05C5]+)*)(;)))))?(?=\s*(#.*)?$) annotation-value_list @@ -1072,7 +1072,7 @@ match - (?:(")((?:[^"\\]|\\.)*)(")?|(L)([\w\-\$]+(?:/[\w\-\$]+)*)(;))(?:,)?(?=\s*(#.*)?$) + (?:(")((?:[^"\\]|\\.)*)(")?|(L)([\w\-\$\u05C5]+(?:/[\w\-\$\u05C5]+)*)(;))(?:,)?(?=\s*(#.*)?$) @@ -1297,7 +1297,7 @@ comment Field match - ^\s*(\.field)\s+((?:(?>public|protected|private|static|abstract|final|volatile|enum|varargs|declared-synchronized|synchronized|transient|native|strictfp|synthetic|bridge)\s+)*)([\p{L}_\-\$][\w\-\$]*):\[*(?:(?:([ZBSCIJFD])|(?:(L)([\w\-\$]+(?:/[\w\-\$]+)*)(;))))(?:\s+=\s+(?:(null|true|false)|(?i:(\d+(?:\.\d+)?[fldst]?))|(?i:((?:-0x(?:0|[1-9a-f][\da-f]{0,6}|[1-7][\da-f]{7}|8[0]{7})|0x(?:0|[1-9a-f][\da-f]{0,6}|[1-7][\da-f]{7}))|(?:(?:-0x(?:0|[1-9a-f][\da-f]{0,14}|[1-7][\da-f]{15}|8[0]{15})|0x(?:0|[1-9a-f][\da-f]{0,14}|[1-7][\da-f]{15}))[fldst]?))\b)|(["'])((?:[^"'\\]|\\.)*)(["'])))?(?=\s*(#.*)?$) + ^\s*(\.field)\s+((?:(?>public|protected|private|static|abstract|final|volatile|enum|varargs|declared-synchronized|synchronized|transient|native|strictfp|synthetic|bridge)\s+)*)([\p{L}_\-\$][\w\-\$\u05C5]*):\[*(?:(?:([ZBSCIJFD])|(?:(L)([\w\-\$\u05C5]+(?:/[\w\-\$\u05C5]+)*)(;))))(?:\s+=\s+(?:(null|true|false)|(?i:(\d+(?:\.\d+)?[fldst]?))|(?i:((?:-0x(?:0|[1-9a-f][\da-f]{0,6}|[1-7][\da-f]{7}|8[0]{7})|0x(?:0|[1-9a-f][\da-f]{0,6}|[1-7][\da-f]{7}))|(?:(?:-0x(?:0|[1-9a-f][\da-f]{0,14}|[1-7][\da-f]{15}|8[0]{15})|0x(?:0|[1-9a-f][\da-f]{0,14}|[1-7][\da-f]{15}))[fldst]?))\b)|(["'])((?:[^"'\\]|\\.)*)(["'])))?(?=\s*(#.*)?$) field-end @@ -1340,7 +1340,7 @@ match - \[*(?:([ZBSCIJFD])|(L)([\w\-\$]+(?:/[\w\-\$]+)*)(;)) + \[*(?:([ZBSCIJFD])|(L)([\w\-\$\u05C5]+(?:/[\w\-\$\u05C5]+)*)(;)) opcode-format-10t-20t-30t @@ -1570,7 +1570,7 @@ comment Format: op vAA, field@BBBB match - ^\s*((?>sget|sput)(?>-wide|-object|-boolean|-byte|-char|-short)?)\s+([vp](?:0|[1-9][\d]?|1[\d]{2}|2[0-4][\d]|25[0-5])\b),\s*(L)([\w\-\$]+(?:/[\w\-\$]+)*)(;)->([\w\-\$]+):\[*(?:(?:([ZBSCIJFD])|(?:(L)([\w\-\$]+(?:/[\w\-\$]+)*)(;))))(?=\s*(#.*)?$) + ^\s*((?>sget|sput)(?>-wide|-object|-boolean|-byte|-char|-short)?)\s+([vp](?:0|[1-9][\d]?|1[\d]{2}|2[0-4][\d]|25[0-5])\b),\s*(L)([\w\-\$\u05C5]+(?:/[\w\-\$\u05C5]+)*)(;)->([\w\-\$\u05C5]+):\[*(?:(?:([ZBSCIJFD])|(?:(L)([\w\-\$\u05C5]+(?:/[\w\-\$\u05C5]+)*)(;))))(?=\s*(#.*)?$) opcode-format-21c-relaxed @@ -1658,7 +1658,7 @@ comment Format: op vAA, type@BBBB match - ^\s*(const-class|check-cast|new-instance)\s+([vp](?:0|[1-9][\d]?|1[\d]{2}|2[0-4][\d]|25[0-5])\b),\s*\[*(?:(?:([ZBSCIJFD])|(?:(L)([\w\-\$]+(?:/[\w\-\$]+)*)(;))))(?=\s*(#.*)?$) + ^\s*(const-class|check-cast|new-instance)\s+([vp](?:0|[1-9][\d]?|1[\d]{2}|2[0-4][\d]|25[0-5])\b),\s*\[*(?:(?:([ZBSCIJFD])|(?:(L)([\w\-\$\u05C5]+(?:/[\w\-\$\u05C5]+)*)(;))))(?=\s*(#.*)?$) opcode-format-21h @@ -1880,7 +1880,7 @@ comment Format: op vA, vB, field@CCCC match - ^\s*((?>iget|iput)(?>-wide|-object|-boolean|-byte|-char|-short)?)\s+([vp](?:0|[1-9]|1[0-5])\b),\s*([vp](?:0|[1-9]|1[0-5])\b),\s*(L)([\w\-\$]+(?:/[\w\-\$]+)*)(;)->([\w\-\$]+):\[*(?:([ZBSCIJFD]|(?:(L)([\w\-\$]+(?:/[\w\-\$]+)*)(;))))(?=\s*(#.*)?$) + ^\s*((?>iget|iput)(?>-wide|-object|-boolean|-byte|-char|-short)?)\s+([vp](?:0|[1-9]|1[0-5])\b),\s*([vp](?:0|[1-9]|1[0-5])\b),\s*(L)([\w\-\$\u05C5]+(?:/[\w\-\$\u05C5]+)*)(;)->([\w\-\$\u05C5]+):\[*(?:([ZBSCIJFD]|(?:(L)([\w\-\$\u05C5]+(?:/[\w\-\$\u05C5]+)*)(;))))(?=\s*(#.*)?$) opcode-format-22c-relaxed @@ -1938,7 +1938,7 @@ comment Format: op vA, vB, type@CCCC match - ^\s*(instance-of)\s+([vp](?:0|[1-9]|1[0-5])\b),\s*([vp](?:0|[1-9]|1[0-5])\b),\s*\[*(?:([ZBSCIJFD])|(L)([\w\-\$]+(?:/[\w\-\$]+)*)(;))(?=\s*(#.*)?$) + ^\s*(instance-of)\s+([vp](?:0|[1-9]|1[0-5])\b),\s*([vp](?:0|[1-9]|1[0-5])\b),\s*\[*(?:([ZBSCIJFD])|(L)([\w\-\$\u05C5]+(?:/[\w\-\$\u05C5]+)*)(;))(?=\s*(#.*)?$) opcode-format-22c-type_array @@ -1983,7 +1983,7 @@ comment Format: op vA, vB, [type@CCCC match - ^\s*(new-array)\s+([vp](?:0|[1-9]|1[0-5])\b),\s*([vp](?:0|[1-9]|1[0-5])\b),\s*\[+(?:([ZBSCIJFD])|(L)([\w\-\$]+(?:/[\w\-\$]+)*)(;))(?=\s*(#.*)?$) + ^\s*(new-array)\s+([vp](?:0|[1-9]|1[0-5])\b),\s*([vp](?:0|[1-9]|1[0-5])\b),\s*\[+(?:([ZBSCIJFD])|(L)([\w\-\$\u05C5]+(?:/[\w\-\$\u05C5]+)*)(;))(?=\s*(#.*)?$) opcode-format-22s @@ -2454,7 +2454,7 @@ comment Format: op {vC, vD, vE, vF, vG}, meth@BBBB match - ^\s*(invoke-(?>virtual|static|direct|interface|super)) {\s*([vp](?:0|[1-9]|1[0-5])\b)?(?:,\s*([vp](?:0|[1-9]|1[0-5])\b))?(?:,\s*([vp](?:0|[1-9]|1[0-5])\b))?(?:,\s*([vp](?:0|[1-9]|1[0-5])\b))?(?:,\s*([vp](?:0|[1-9]|1[0-5])\b))?\s*},\s*(?:[\[]*([ZBSCIJFD])|\[*(L)([\w\-\$]+(?:/[\w\-\$]+)*)(;))->(<init>|<clinit>|(?:[\-\$\p{L}_][\w\-\$]*))\((?:\[*([ZBSCIJFD])|(?:\[*(L)([\w\-\$]+(?:/[\w\-\$]+)*)(;)))?(?:\[*([ZBSCIJFD])|(?:\[*(L)([\w\-\$]+(?:/[\w\-\$]+)*)(;)))?(?:\[*([ZBSCIJFD])|(?:\[*(L)([\w\-\$]+(?:/[\w\-\$]+)*)(;)))?(?:\[*([ZBSCIJFD])|(?:\[*(L)([\w\-\$]+(?:/[\w\-\$]+)*)(;)))?(?:\[*([ZBSCIJFD])|(?:\[*(L)([\w\-\$]+(?:/[\w\-\$]+)*)(;)))?\)(?:(?:(V)|\[*([ZBSCIJFD]))|(?:\[*(L)([\w\-\$]+(?:/[\w\-\$]+)*)(;)))(?=\s*(#.*)?$) + ^\s*(invoke-(?>virtual|static|direct|interface|super)) {\s*([vp](?:0|[1-9]|1[0-5])\b)?(?:,\s*([vp](?:0|[1-9]|1[0-5])\b))?(?:,\s*([vp](?:0|[1-9]|1[0-5])\b))?(?:,\s*([vp](?:0|[1-9]|1[0-5])\b))?(?:,\s*([vp](?:0|[1-9]|1[0-5])\b))?\s*},\s*(?:[\[]*([ZBSCIJFD])|\[*(L)([\w\-\$\u05C5]+(?:/[\w\-\$\u05C5]+)*)(;))->(<init>|<clinit>|(?:[\-\$\p{L}_][\w\-\$\u05C5]*))\((?:\[*([ZBSCIJFD])|(?:\[*(L)([\w\-\$\u05C5]+(?:/[\w\-\$\u05C5]+)*)(;)))?(?:\[*([ZBSCIJFD])|(?:\[*(L)([\w\-\$\u05C5]+(?:/[\w\-\$\u05C5]+)*)(;)))?(?:\[*([ZBSCIJFD])|(?:\[*(L)([\w\-\$\u05C5]+(?:/[\w\-\$\u05C5]+)*)(;)))?(?:\[*([ZBSCIJFD])|(?:\[*(L)([\w\-\$\u05C5]+(?:/[\w\-\$\u05C5]+)*)(;)))?(?:\[*([ZBSCIJFD])|(?:\[*(L)([\w\-\$\u05C5]+(?:/[\w\-\$\u05C5]+)*)(;)))?\)(?:(?:(V)|\[*([ZBSCIJFD]))|(?:\[*(L)([\w\-\$\u05C5]+(?:/[\w\-\$\u05C5]+)*)(;)))(?=\s*(#.*)?$) opcode-format-35c-relaxed @@ -2532,7 +2532,7 @@ comment Format: op {vC, vD, vE, vF, vG}, type@BBBB match - ^\s*(filled-new-array) {([vp](?:0|[1-9]|1[0-5])\b),\s*([vp](?:0|[1-9]|1[0-5])\b)(?:,\s*([vp](?:0|[1-9]|1[0-5])\b))?(?:,\s*([vp](?:0|[1-9]|1[0-5])\b))?(?:,\s*([vp](?:0|[1-9]|1[0-5])\b))?},\s*\[+(?:([ZBSCIJFD])|(L)([\w\-\$]+(?:/[\w\-\$]+)*)(;))(?=\s*(#.*)?$) + ^\s*(filled-new-array) {([vp](?:0|[1-9]|1[0-5])\b),\s*([vp](?:0|[1-9]|1[0-5])\b)(?:,\s*([vp](?:0|[1-9]|1[0-5])\b))?(?:,\s*([vp](?:0|[1-9]|1[0-5])\b))?(?:,\s*([vp](?:0|[1-9]|1[0-5])\b))?},\s*\[+(?:([ZBSCIJFD])|(L)([\w\-\$\u05C5]+(?:/[\w\-\$\u05C5]+)*)(;))(?=\s*(#.*)?$) opcode-format-3rc-meth @@ -2612,7 +2612,7 @@ comment Format: op {vCCCC .. vNNNN}, meth@BBBB match - ^\s*(invoke-(?>virtual|static|direct|interface|super)/range) {\s*([vp](?:0|[1-9][\d]{0,3}|[1-5][\d]{4}|6[0-4][\d]{3}|65[0-4][\d]{2}|655[0-2][\d]|6553[0-5])\b) \.\. ([vp](?:0|[1-9][\d]{0,3}|[1-5][\d]{4}|6[0-4][\d]{3}|65[0-4][\d]{2}|655[0-2][\d]|6553[0-5])\b)\s*},\s*\[*(L)([\w\-\$]+(?:/[\w\-\$]+)*)(;)->(<init>|<clinit>|[\-\$\p{L}_][\w\-\$]*)\(((?:\[*(?:[ZBSCIJFD]|L[\w\-\$]+(?:/[\w\-\$]+)*;))*)\)(?:(V)|\[*(?:([ZBSCIJFD])|(L)([\w\-\$]+(?:/[\w\-\$]+)*)(;)))(?=\s*(?:#.*)?$) + ^\s*(invoke-(?>virtual|static|direct|interface|super)/range) {\s*([vp](?:0|[1-9][\d]{0,3}|[1-5][\d]{4}|6[0-4][\d]{3}|65[0-4][\d]{2}|655[0-2][\d]|6553[0-5])\b) \.\. ([vp](?:0|[1-9][\d]{0,3}|[1-5][\d]{4}|6[0-4][\d]{3}|65[0-4][\d]{2}|655[0-2][\d]|6553[0-5])\b)\s*},\s*\[*(L)([\w\-\$\u05C5]+(?:/[\w\-\$\u05C5]+)*)(;)->(<init>|<clinit>|[\-\$\p{L}_][\w\-\$\u05C5]*)\(((?:\[*(?:[ZBSCIJFD]|L[\w\-\$\u05C5]+(?:/[\w\-\$\u05C5]+)*;))*)\)(?:(V)|\[*(?:([ZBSCIJFD])|(L)([\w\-\$\u05C5]+(?:/[\w\-\$\u05C5]+)*)(;)))(?=\s*(?:#.*)?$) opcode-format-3rc-relaxed @@ -2670,7 +2670,7 @@ comment Format: op {vCCCC .. vNNNN}, type@BBBB match - ^\s*(filled-new-array/range) {([vp](?:0|[1-9][\d]{0,3}|[1-5][\d]{4}|6[0-4][\d]{3}|65[0-4][\d]{2}|655[0-2][\d]|6553[0-5])\b) \.\. ([vp](?:0|[1-9][\d]{0,3}|[1-5][\d]{4}|6[0-4][\d]{3}|65[0-4][\d]{2}|655[0-2][\d]|6553[0-5])\b)},\s*\[+(?:([ZBSCIJFD])|(L)([\w\-\$]+(?:/[\w\-\$]+)*)(;))(?=\s*(#.*)?$) + ^\s*(filled-new-array/range) {([vp](?:0|[1-9][\d]{0,3}|[1-5][\d]{4}|6[0-4][\d]{3}|65[0-4][\d]{2}|655[0-2][\d]|6553[0-5])\b) \.\. ([vp](?:0|[1-9][\d]{0,3}|[1-5][\d]{4}|6[0-4][\d]{3}|65[0-4][\d]{2}|655[0-2][\d]|6553[0-5])\b)},\s*\[+(?:([ZBSCIJFD])|(L)([\w\-\$\u05C5]+(?:/[\w\-\$\u05C5]+)*)(;))(?=\s*(#.*)?$) opcode-format-51l From bec0758d0e23a28ce74df2698a6de030dbb2a7bd Mon Sep 17 00:00:00 2001 From: illerokcob <113302047+illerokcob@users.noreply.github.com> Date: Fri, 24 Nov 2023 20:30:43 +0100 Subject: [PATCH 2/2] Fix filled-new-array one register syntax highlighting issue When the filled-new-array instruction is called with one parameter/register, snytax highlighting gets broken. This commit fixes the issue. --- syntaxes/smali.tmLanguage | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/syntaxes/smali.tmLanguage b/syntaxes/smali.tmLanguage index bfa01a7..bc6e673 100644 --- a/syntaxes/smali.tmLanguage +++ b/syntaxes/smali.tmLanguage @@ -2532,7 +2532,7 @@ comment Format: op {vC, vD, vE, vF, vG}, type@BBBB match - ^\s*(filled-new-array) {([vp](?:0|[1-9]|1[0-5])\b),\s*([vp](?:0|[1-9]|1[0-5])\b)(?:,\s*([vp](?:0|[1-9]|1[0-5])\b))?(?:,\s*([vp](?:0|[1-9]|1[0-5])\b))?(?:,\s*([vp](?:0|[1-9]|1[0-5])\b))?},\s*\[+(?:([ZBSCIJFD])|(L)([\w\-\$\u05C5]+(?:/[\w\-\$\u05C5]+)*)(;))(?=\s*(#.*)?$) + ^\s*(filled-new-array) {([vp](?:0|[1-9]|1[0-5])\b)?,?\s*([vp](?:0|[1-9]|1[0-5])\b)(?:,\s*([vp](?:0|[1-9]|1[0-5])\b))?(?:,\s*([vp](?:0|[1-9]|1[0-5])\b))?(?:,\s*([vp](?:0|[1-9]|1[0-5])\b))?},\s*\[+(?:([ZBSCIJFD])|(L)([\w\-\$\u05C5]+(?:/[\w\-\$\u05C5]+)*)(;))(?=\s*(#.*)?$) opcode-format-3rc-meth