Overview

A reference for the P-code instruction set executed by the Visual Basic 6 runtime (MSVBVM60.DLL 6.00.8268). It is generated from vbpcode.db, reference revision 1.007. Every dispatch slot is listed with its encoding, behaviour, the VB6 source that makes the compiler emit it, and the evidence behind each claim.

1165defined dispatch slots
775distinct handlers (real opcodes)
390duplicate slots (share a handler)
650slots the VB6 compiler emits (probe-verified)
625handlers reached by compiled code
907slots with a description

Instruction encoding

A P-code procedure is a byte stream interpreted by MSVBVM60's dispatcher, which works on an evaluation stack, the procedure frame (addressed by signed offsets from EBP) and a constant pool attached to the procedure.

  • The first byte indexes the primary table (table 0, 256 entries).
  • Bytes FB–FF in table 0 are lead bytes: they select tables 1–5, and the next byte is the index into that table. An opcode is therefore written (table, index); for example (4,0x64) ForI4 is encoded FE 64.
  • Operands follow inline, little-endian. The DB's size column counts the index byte plus operand bytes but not the lead byte, so the instruction length is size in table 0 and size+1 in tables 1–5. A size of -1/-2 marks a variable-length operand block whose first word is its byte count.
  • Branch targets are 16-bit offsets from the start of the procedure's P-code.
  • Frame operands (%a) are signed 16-bit offsets from EBP: negative values are locals and temporaries (vbdec shows var_XX), positive values are arguments (arg_XX).
  • The interpreter keeps a cached object/structure pointer, written pr ([ebp-4Ch]). FLdPr, FLdPrThis, AryLdPr, LdPrVar and NewIfNull* load it, and the Mem* opcodes address fields relative to it.

Operand markers

vbdec printf-style templates describe operands with these markers:

MarkerCategoryBytesMeaning
%!literal_single44-byte single literal
%1immediate_byte11-byte immediate
%2immediate_word22-byte immediate (integer)
%4immediate_dword44-byte immediate (long)
%Cliteral_currency88-byte currency literal
%Dliteral_double88-byte double literal
%Epool_pcode_proc_offvar.same as %e but adds arg2 offset
%Gguid_extractvar.extract GUID variant (see CastAd %G)
%Lbranch_target_no_loc2local jump target, no loc_xx label added
%alocal_var_ref2argument/local reference, esp-xx offset
%cpool_proc_or_global2const pool: proc address or global var address
%dliteral_date_wordvar.date literal
%epool_pcode_procvar.read offset from pool as pcode proc to call
%gguid_extractvar.extract GUID from operand stream
%lbranch_target_local2local jump target, adds label reference
%rvt_type_byte1VT type byte for variant typing
%spool_string2string from const pool offset
%tcode_object_ref2code object by base offset (GUID fallback)
%vvtable_call42-byte vtable offset + 2-byte pool GUID index
%xpool_external_api2external API call resolved from pool index
%ysafearray_flagsvar.SafeArray flag decoder
%zguid_property_lookupvar.GUID from pool, call getProperty for lookup
%}eop_marker0end of procedure marker (display only)

Handlers and duplicate slots

The six dispatch tables define 1165 slots, but many slots point at the same machine-code handler. After grouping by handler address, there are 775 distinct opcodes. In each group one slot is the primary, chosen in this order: emitted by the compiler, then most corpus hits, then marked primary in modOpcodes, then table 0 first. The other 390 slots are marked dup and point to it.

Slots sharing one handler1234567
Handler groups4982015671021

A shared handler means the slots behave identically at runtime. It does not always mean they are interchangeable at compile time. In 22 groups the compiler deliberately emits different slots depending on the source type (Integer vs Long `Xor`, Single vs Double `CBool`, …), so the slot still carries type information that is useful to a decompiler. Each entry's notes list these selections. Groups whose slots carry different names:

HandlerSlotsNames
#232(0,EB),(2,24),(2,25),(2,2C),(2,2D),(2,3C),(2,3D)CR8I2,FnCSngI2
#10(0,0B),(0,5E),(4,21),(4,22),(4,27),(4,28)ImpAdCallI2,ImpAdCallI4
#105(0,6C),(2,E2),(2,E3),(2,E7),(2,E8),(3,1C)ILdRf,FLdR4
#14(0,0F),(4,11),(4,12),(4,17),(4,18)VCallAd,VCallStr
#16(0,11),(4,09),(4,0A),(4,0C),(5,2C)ThisVCallFPR8,ThisVCallHidden
#17(0,12),(4,01),(4,02),(4,07),(4,08)ThisVCallAd,ThisVCallI2
#19(0,14),(2,CE),(2,D3),(2,D4),(2,D5)ExitProcI4,ExitProcStr
#115(0,76),(3,A2),(3,A3),(3,A7),(3,A8)ImpAdLdI4,ImpAdLdStr
#135(0,8A),(3,72),(3,73),(3,77),(3,78)MemLdStr,MemLdR4
#193(0,C4),(1,21),(1,22),(1,23)AndI4,AndUI1
#194(0,C5),(1,19),(1,1A),(1,1B)OrI4,OrI2
#65(0,42),(2,2A),(2,32)CR4Var,CR8Var
#102(0,69),(4,7C),(4,84)NextStepR8,NextR8
#121(0,7C),(3,B4),(3,B5)ImpAdStCy,ImpAdStR8
#140(0,8F),(3,82),(3,83)MemStI4,MemStR4
#141(0,90),(3,84),(3,85)MemStR8,MemStCy

Naming conventions

PartMeaning
FFrame slot: a local, temporary or ByVal argument addressed by %a.
IIndirect: the frame slot holds a pointer, usually a ByRef argument.
MemField at an offset from the cached pointer pr (class members, Static locals, multi-dimensional array elements).
FMemField at an offset from a pointer held in a frame slot (ActiveX DLL/EXE per-thread module variables; fields of ByRef UDT parameters).
ImpAdAbsolute address taken from the constant pool (Standard-EXE module variables; calls to imports and procedures).
WMem/IWMemField relative to dispatcher argument 3 ([ebp+10h]). The compiler was never observed emitting these.
Ld/StLoad (push) / store (pop).
UI1 I2 I4Byte / Integer-Boolean / Long.
R4 R8 (in Ld/St names)Raw 4/8-byte move. The compiler uses R4 for Long and R8 for Currency, not for floating point.
FPR4 FPR8Single / Double-Date moved through the FPU.
R4 R8 (in arithmetic/compare names)Floating-point operation. Single arithmetic still compiles to the R8 forms.
Cy Str Var Ad Pr RfCurrency / String (BSTR) / Variant / object reference / object pointer into pr / address (reference).
Copy, Func, NoPop, UnkCopy the value rather than move it / value comes from a call (adopt, no extra AddRef) / leave the value on the stack / VT_UNKNOWN rather than VT_DISPATCH.
Var suffix on operatorsVariant operation; %a names the temporary that receives the result. …VarBool pushes a plain Boolean for conditions.
TextComparison under Option Compare Text.

Findings from compiler probes

**1. CStr slots (1,FC) and (1,FD) appear swapped

  • CStr(<Byte>) emits (1,0xFC), which is labeled CStrI2.
  • CStr(<Integer>) emits (1,0xFD), which is labeled CStrUI1.

The rest of the run lines up with its source type: FE=I4, FF=R4, (2,00)=R8, (2,01)=Cy. Probes: op\1_FC_CStrI2, op\1_FD_CStrUI1.

**2. Sixteen alias groups have more than one compiler-emitted slot

Phase 3b showed that these slots share a handler. The compiler still picks between them by source type, so the shared name hides a real compile-time distinction:

SlotsLabelWhat selects each slot
(1,0A) / (1,0B)EqvI4Integer/Boolean operands / Long, Single, Double, Currency, Date, String
(1,02) / (1,03)ImpI4same split as Eqv
(1,11) / (1,12) / (1,13)XorI4Byte / Integer, Boolean / Long and wider
(2,50) / (2,51)CBoolUI1CBool(Byte) / CBool(Integer) (Integer arithmetic on Booleans too)
(2,53) / (2,54)CBoolR4CBool(Single) / CBool(Double or Date)
(2,0F) / (2,10)CUI1R4CByte(Single) / CByte(Double)
(2,3A) / (2,3B)FnCDblR8CDbl(Single) / CDbl(Double)
(1,DE) / (1,DF)FnFixR8Fix(Single) / Fix(Double, Date, String)
(1,E6) / (1,E7)FnIntR8Int(Single) / Int(Double, Date, String)
(1,87) / (1,88)BetweenR4Case a To b on Single / on Double or Date
(2,4E) / (2,4F)FnCDateVarexplicit CDate(v) / implicit Variant→Date coercion
(4,7E) / (4,86)NextStepVarVariant For with no Step / with Step
(3,CB) / (3,CC) / (3,CD)ExitForCollObjFor Each control variable is Variant / Object / a specific class
(0,0E) / (5,2B)VCallFPR8see finding 5
(0,3E) / (0,51)FLdZeroAdboth are emitted, in different object-type contexts
(0,59) / (3,C7)PopTmpLdAdStr(3,C7) appears for fixed-length string temporaries

Each slot's source_gen shows the source construct that selects it. This looks like strong evidence for renaming the second slot in several groups, for example EqvI2/EqvI4, CBoolI2, CBoolR8, and CUI1R8. Renaming is David's decision, so no mnemonics were changed.

**3. Single-precision math reuses the R8 (FPU) opcodes

Single + Single emits AddR8. The same holds for SubR8, MulR8, DivR8, UMiR8, EqR8, LtR8, NeR8, GeR8, GtR8, and LeR8. The *R4 arithmetic and compare slots (AddR4, MulR4, UMiR4, LtR4, NeR4, and so on) were never emitted.

**4. Old-style Print, Input, and Write item opcodes are never emitted

  • Print # and form Print compile to one PrintFile (5,0E) or PrintObject (5,0D) with a descriptor.
  • Input # compiles to InputFile (5,10), and Write # to WriteFile (5,0F).

None of the following came out of any variant: PrintChan/PrintComma/PrintNL/PrintItem*/PrintSpc/PrintTab/PrintObj, Input/InputDone/InputItem*, and WriteChan. They look like a legacy encoding that this compiler doesn't use.

**5. Typed (non-HRESULT) vtable calls use three slots only

A type library was built for this (probes\_tlb\probetlb.idl). Its ITyped interface has methods that return each type directly. The compiler emitted:

  • VCallAd (0,0F) for I2, I4, Bool, and Str returns
  • VCallUI1 (4,10) for Byte returns
  • VCallFPR8 (0,0E) for Single and Double returns
  • (5,2B), the second VCallFPR8 slot, for Currency returns
  • (0,0E) also for calls whose result is discarded (e.g. o.GetI2 3)

VCallI2, VCallR4, VCallR8, VCallStr, VCallCy, VCallCbFrame, and every typed ThisVCall* were never emitted. The probes included 34 Me-qualified Form intrinsics (Me.TextWidth, Me.hWnd, Me.Left, ...), and none of them produced a typed ThisVCall*.

**6. Literal slots

  • (0,FA), labeled LitDate, is emitted for plain Double literals (c = 2.5) as well as dates.
  • (0,F6), labeled LitCy, carries Currency literals. It also carries raw double bytes when a Double literal is passed ByVal or appears in a Print # list.

This suggests FA means "8-byte literal pushed to the FPU" and F6 means "8-byte literal pushed raw onto the stack". vbdec's display then decodes F6 as Currency even when it isn't. Handler confirmation is still needed.

**7. W/IW prefix: still never emitted

None of the 64 WMem* or IWMem* slots appeared in any probe. The following contexts were tried:

  • Static locals in class, form, and module procedures, and Static Sub
  • Class, form, and module UDT members, including With
  • With on local, global, array-element, parameter, static, and public-module UDTs
  • WithEvents sinks and Implements
  • ActiveX DLL and ActiveX EXE module globals of every type

DLL globals turned out to compile to **FMem***, which goes through [this+off] on the per-thread data block. So FMem is the TLS route, and it is not what the W prefix means. The [ebp+10h] base therefore still has no known source construct. It may only be reachable from the IDE or from p-code produced by a different compiler version.

**7b. W/IW and special project types (round 4)

David suggested that W/IW might belong to particular project types. Round 4 put the same body (members of every type, statics, With on a member UDT, host implicit members) into each of these:

  • a UserControl, in an OCX and in an EXE
  • a PropertyPage
  • an ActiveX Document, as a DLL and as an EXE
  • an Add-in (Connect designer plus form)
  • a DHTML Application (HTMLPage designer)
  • a DataReport designer

The same body was also put in a plain class, a DLL class, and a form as controls. No W/IW opcode appeared in any of them.

Member, static, and With access compiled to the same opcodes as in a plain class. The only differences came from reaching the host object:

  • MemLdPr (0,58): the module's self-reference at [pr+0x10], e.g. UserControl.Width or UserDocument.Width. Now probed.
  • ILdPr (0,48): a method call on a ByRef object parameter (Sub P(c As Collection): n = c.Count). It showed up through AsyncReadComplete(AsyncProp As AsyncProperty). Ordinary ByVal object parameters are copied to a local first and use FLdPr. Now probed.

The IIS Application (WebClass) remains untested. Its designer refuses to compile unless IIS or Peer Web Services 3.0+ is installed on this machine.

**8. Other compile-time observations

  • (0,E7), labeled CI4UI1, is emitted for CLng(Integer) and CLng(Boolean), which is I2→I4. Assigning an integer literal to a Byte emits (2,0D) CUI1I2 first.
  • Debug.Assert and Debug.Print are stripped from the compiled exe, so Assert (5,0B) cannot be probed this way.
  • Records in Variants need a public UDT. Using the typelib's TPubRec, or a public class UDT in an ActiveX DLL, produced CVarUdt, CVarRefUdt, StUdtVar, RedimVarUdt, RedimPreserveVarUdt, CDargRefUdt, and ExitProcFrameCbHresult.
  • IUnknown-typed function returns stored into Variants produce the *VarUnk and *VarUnkFunc stores: FStVarUnkFunc, Ary1StVarUnk, Ary1StVargUnk, MemStVarUnk, ImpAdStVarUnk[Func], FMemStVarUnkFunc, and IStDargUnkFunc.

---

Method and confidence

  • Static tables (mnemonics, templates, sizes, handler addresses) come from vbdec's modOpcodes.bas and the MSVBVM60 dispatch tables.
  • Handler identity was resolved with IDA/idalib against MSVBVM60.DLL 6.00.8268 (Phase 3).
  • Compiler probes (Phase 4): about 3,070 small VB6 programs were compiled as P-code with VB6 SP6 and disassembled with vbdec. Every emitted slot has a minimal program, kept in probes\op\, that is proven to produce it. not emitted means no tested construct produced the slot; it does not prove the slot is unreachable.
  • Descriptions are drafts written by AI agents and are not yet reviewed (status=draft). 0 drafts are marked needs revision because probe evidence contradicts them; the correction appears in their notes.
  • Each existing example in vb6_source_eq was compiled and checked. The result is shown as "example check" in the entry's notes.

About

This reference was created by David Zimmer (sandsprite.com), working with Claude (Anthropic).

On the shoulders of others

None of this starts from zero. This reference stands on the shoulders of several generations of VB reversers, who mapped the runtime, the file format and the P-code engine long before AI tools existed, and who shared what they found.

Credits include the VB Decompiling community, Sarge, Napalm, VbGamer45, Mr. Unleaded, Moogman, _aLfa_, Alex Ionescu, Warning, josephCo, Darker, Trick, Firehacker, dodi, sysenter-eip and others.

Special thanks go out to:

  • VbGamer45 for his work on Semi VB Decompiler
  • Mr. Unleaded for allowing the old forums to be rebuilt
  • Mr Silver and Mr Snow for their excellent work on the WKTVBDebugger
  • Darker for his excellent work on p32Dasm
  • Reginald Wong for his vb.idc script
  • The OG wizards who created VB6

How it was built

The starting point was the opcode table in vbdec, the VB6 disassembler and decompiler: mnemonics, operand templates, instruction sizes and the dispatch-table address of every slot. That table was loaded into a SQLite database. AI agents then filled it in phase by phase, and each phase was handed off through written briefs and a running lessons-learned file.

Handler-level analysis was done in IDA Pro against MSVBVM60.DLL 6.00.8268, with Claude driving IDA through mrexodia's IDA MCP server (ida-pro-mcp) and idalib. Every dispatch slot was resolved to the machine code that executes it. That is how the 1,165 slots were reduced to 775 distinct handlers, how the aliases were classified, and how the operand sizes were checked.

Runtime evidence came from vbdec itself. With remote scripting enabled, vbdec publishes its live object model on the Windows Running Object Table, so an agent can open a binary and read every procedure's disassembly from a script. Claude used this first to sweep a real P-code application (PDFStreamDumper) for opcode usage, then as the disassembler in an automated test loop.

That loop is what verifies the source examples in this reference. Claude generated a few thousand small VB6 programs, compiled each one to P-code with the VB6 compiler from the command line, disassembled the result in vbdec, and recorded which opcodes each program produced. For every opcode the compiler emits, the smallest such program was then reduced line by line to the minimal source that still produces it. Description examples were compiled the same way, which is how incorrect drafts were found and fixed.

Two companion kits describe the setup in detail and are meant for anyone repeating this work with an AI agent:

  • vbdec AI (the vbdec operator briefing and object-model prototypes): how an agent connects to vbdec over the ROT and reads projects, procedures and disassembly, with example tasks such as call graphs and SQL export.
  • VB6 AI compile help (vbai_compile_help): how an agent builds VB6 projects headlessly, covering CRLF/ANSI source files, /make with error logs, line-number mapping, the elevation rules for OCX projects, and test-harness templates.

The descriptions are AI-written drafts that have not yet been reviewed. Treat the probe evidence and the verified source on each entry as the primary record.

Opcodes by data type

Every slot grouped by the kind of value it works on. Casts are grouped together under Conversion, with the source and target types in the detail column. Within a group, rows are sorted by operation, then mnemonic. dup marks a duplicate slot, and emitted marks slots the VB6 compiler is known to produce.

String 73 slots, 56 distinct handlers, 49 emitted

BSTR operations: concatenation, Mid/Len/InStr/StrComp, fixed-length String handling and String loads/stores.

SlotMnemonicOperationTypesStatusSummary
(1,8B)BetweenStrCompareStringemittedCase lo To hi range test on a String selector; push Boolean.
(1,8D)BetweenTextStrCompareString (text compare)emittedCase lo To hi range test on a String selector; push Boolean.
(1,30)EqStrCompareStringemittedCompare two values with =; push Boolean result.
(1,32)EqTextStrCompareString (text compare)emittedCompare two values with =; push Boolean result.
(1,57)GeStrCompareStringemittedCompare two values with >=; push Boolean result.
(1,59)GeTextStrCompareString (text compare)emittedCompare two values with >=; push Boolean result.
(1,71)GtStrCompareStringemittedCompare two values with >; push Boolean result.
(1,73)GtTextStrCompareString (text compare)emittedCompare two values with >; push Boolean result.
(1,4A)LeStrCompareStringemittedCompare two values with <=; push Boolean result.
(1,4C)LeTextStrCompareString (text compare)emittedCompare two values with <=; push Boolean result.
(1,7E)LikeStrCompareStringemittedPop two strings; push True if the first matches the pattern in the second.
(1,80)LikeTextStrCompareString (text compare)emittedLike between two Strings under Option Compare Text; push Boolean.
(1,64)LtStrCompareStringemittedCompare two values with <; push Boolean result.
(1,66)LtTextStrCompareString (text compare)emittedCompare two values with <; push Boolean result.
(1,3D)NeStrCompareStringemittedCompare two values with <>; push Boolean result.
(1,3F)NeTextStrCompareString (text compare)emittedCompare two values with <>; push Boolean result.
(0,1B)LitStrLiteralStringemittedPush a BSTR literal from the const pool.
(4,BF)LitStrLiteralStringnever dupPush a BSTR literal from the const pool.
(3,A2)ImpAdLdStrLoadString, globalnever dupLoad Long from a module-level (global) variable.
(3,A3)ImpAdLdStrLoadString, globalnever dupLoad Long from a module-level (global) variable.
(3,A7)ImpAdLdStrLoadString, globalnever dupLoad Long from a module-level (global) variable.
(3,A8)ImpAdLdStrLoadString, globalnever dupLoad Long from a module-level (global) variable.
(0,8A)MemLdStrLoadString, member via premittedLoad a BSTR (VB6 String) from [pr + offset] where pr is on the stack.
(4,D2)WMemLdStrLoadString, W-baseneverLOAD a BSTR pointer (VB6 String) at [W-base+offset] via the procedure's secondary-object pointer [ebp+10h] (W-base) (4-byte (pointer)).
(4,D3)WMemLdStrLoadString, W-basenever dupLOAD a BSTR pointer (VB6 String) at [W-base+offset] via the procedure's secondary-object pointer [ebp+10h] (W-base) (4-byte (pointer)).
(4,D7)WMemLdStrLoadString, W-basenever dupLOAD a BSTR pointer (VB6 String) at [W-base+offset] via the procedure's secondary-object pointer [ebp+10h] (W-base) (4-byte (pointer)).
(4,D8)WMemLdStrLoadString, W-basenever dupLOAD a BSTR pointer (VB6 String) at [W-base+offset] via the procedure's secondary-object pointer [ebp+10h] (W-base) (4-byte (pointer)).
(4,93)FDupStrOthernever
(3,E7)FMemStStrStoreString, via frame pointeremittedStore String into a field reached through a pointer held in a frame slot.
(0,54)FMemStStrCopyStoreString, via frame pointeremittedStore a value of suffix ` via [frame[%a] + offset] (FMemStStrCopy`).
(3,F1)FMemStStrCopyStoreString, via frame pointernever dupStore a value of suffix ` via [frame[%a] + offset] (FMemStStrCopy`).
(0,31)FStStrStoreString, frameemittedPop a BSTR (VB6 String); store into frame slot [ebp+%a].
(2,F7)FStStrStoreString, framenever dupPop a BSTR (VB6 String); store into frame slot [ebp+%a].
(0,43)FStStrCopyStoreString, frameemittedPop a value of suffix `; store into frame slot [ebp+%a]`.
(3,01)FStStrCopyStoreString, framenever dupPop a value of suffix `; store into frame slot [ebp+%a]`.
(0,23)FStStrNoPopStoreString, frameemittedPop a value of suffix `; store into frame slot [ebp+%a]`.
(3,64)FStStrNoPopStoreString, framenever dupPop a value of suffix `; store into frame slot [ebp+%a]`.
(3,27)IStStrStoreString, ByRef/indirectemittedPop value and address; write the BSTR (VB6 String) through the address.
(3,31)IStStrCopyStoreString, ByRef/indirectemittedPop value and address; write the value of suffix `` through the address.
(3,57)IWMemStStrStoreString, W-base indirectneverSTORE through a BSTR pointer (VB6 String) at [W-base+offset] -> [eax], one extra dereference (4-byte (pointer), W+indirect).
(3,61)IWMemStStrCopyStoreString, W-base indirectneverSTORE through a value of suffix `` at [W-base+offset] -> [eax], one extra dereference (unknown-size, W+indirect).
(3,B7)ImpAdStStrStoreString, globalemittedStore String into a module-level (global) variable.
(3,C1)ImpAdStStrCopyStoreString, globalemittedStore String (copied) into a module-level (global) variable.
(3,87)MemStStrStoreString, member via prnever
(3,91)MemStStrCopyStoreString, member via premittedStore a value of suffix ` into [pr + offset]` (pr on the stack).
(4,E7)WMemStStrStoreString, W-baseneverSTORE a BSTR pointer (VB6 String) at [W-base+offset] via the procedure's secondary-object pointer [ebp+10h] (W-base) (4-byte (pointer)).
(4,F1)WMemStStrCopyStoreString, W-baseneverSTORE a value of suffix `` at [W-base+offset] via the procedure's secondary-object pointer [ebp+10h] (W-base) (unknown-size).
(0,2A)ConcatStrString functionString/VariantemittedConcatenate the top two BSTR (VB6 String)s; push the result.
(1,F0)ConcatStrString functionString/Variantnever dup(alias) Concatenate the top two BSTR (VB6 String)s; push the result.
(1,EF)ConcatVarString functionString/VariantemittedConcatenate (&) where at least one operand is a Variant; result Variant in a temporary.
(4,FD)FnInStr4String functionString/VariantemittedString built-in: FnInStr4.
(4,FE)FnInStr4VarString functionString/VariantemittedString built-in: FnInStr4Var.
(4,FB)FnInStrB4String functionString/VariantemittedString built-in: FnInStrB4.
(4,FC)FnInStrB4VarString functionString/VariantemittedInStrB with Variant operands; push the Variant result.
(1,EE)FnLenBStrString functionString/VariantemittedString built-in: FnLenBStr.
(1,ED)FnLenBVarString functionString/VariantemittedLenB() of a Variant; push the Variant result.
(0,4A)FnLenStrString functionString/VariantemittedString built-in: FnLenStr.
(1,EC)FnLenStrString functionString/Variantnever dup(alias) String built-in: FnLenStr.
(1,EB)FnLenVarString functionString/VariantemittedString built-in: FnLenVar.
(4,FF)FnStrComp3String functionString/VariantemittedString built-in: FnStrComp3.
(5,00)FnStrComp3VarString functionString/VariantemittedStrComp(a, b, compare) with Variant operands; push the Variant result.
(0,33)LdFixedStrString functionfixed-length StringemittedLoad a fixed-length String as a normal (variable-length) String.
(4,61)LdFixedStrString functionfixed-length Stringnever dupLoad a fixed-length String as a normal (variable-length) String.
(2,BC)MidBStrString functionString/Variantnever dupMid statement: replace characters inside a String variable.
(2,BE)MidBStrBString functionString/VariantemittedMidB statement: replace bytes inside a String variable.
(2,BD)MidBVarString functionString/VariantemittedString built-in: MidBVar.
(0,4F)MidStrString functionString/VariantemittedMid statement: replace characters inside a String variable.
(2,BB)MidVarString functionString/VariantemittedString built-in: MidVar.
(0,47)StFixedStrString functionfixed-length StringemittedFixed-length string operation (StFixedStr).
(4,0F)StFixedStrFreeString functionfixed-length StringemittedStore a String temporary into a fixed-length String and free the temporary.
(4,1E)StFixedStrRString functionfixed-length StringemittedRSet into a fixed-length String.
(4,1F)StFixedStrRFreeString functionfixed-length StringemittedRSet into a fixed-length String from a temporary, then free the temporary.
(4,0E)StLsetFixStrString functionfixed-length Stringnever dupFixed-length string operation (StFixedStr).
Integer 196 slots, 103 distinct handlers, 96 emitted

Byte, Integer/Boolean and Long values: arithmetic, logic, compares, loads/stores (including the raw 4-byte R4 moves used for Long) and integer For loops.

SlotMnemonicOperationTypesStatusSummary
(0,A9)AddI2ArithmeticInteger/BooleanemittedPop two 16-bit signed integer (VB6 Integer) values; push their addition result.
(1,8F)AddI2ArithmeticInteger/Booleannever dup(alias) Pop two 16-bit signed integer (VB6 Integer) values; push their addition result.
(0,AA)AddI4ArithmeticLongemittedPop two 32-bit signed integer (VB6 Long) values; push their addition result.
(1,90)AddI4ArithmeticLongnever dup(alias) Pop two 32-bit signed integer (VB6 Long) values; push their addition result.
(1,8E)AddUI1ArithmeticByteemittedPop two 8-bit unsigned integer (VB6 Byte) values; push their addition result.
(0,BF)IDvI2ArithmeticInteger/BooleanemittedPop two 16-bit signed integer (VB6 Integer) values; push their integer division (truncated) result.
(1,A7)IDvI2ArithmeticInteger/Booleannever dup(alias) Pop two 16-bit signed integer (VB6 Integer) values; push their integer division (truncated) result.
(0,C0)IDvI4ArithmeticLongemittedPop two 32-bit signed integer (VB6 Long) values; push their integer division (truncated) result.
(1,A8)IDvI4ArithmeticLongnever dup(alias) Pop two 32-bit signed integer (VB6 Long) values; push their integer division (truncated) result.
(1,A6)IDvUI1ArithmeticByteemittedPop two 8-bit unsigned integer (VB6 Byte) values; push their integer division (truncated) result.
(0,C1)ModI2ArithmeticInteger/BooleanemittedPop two 16-bit signed integer (VB6 Integer) values; push their modulo result.
(1,9F)ModI2ArithmeticInteger/Booleannever dup(alias) Pop two 16-bit signed integer (VB6 Integer) values; push their modulo result.
(0,C2)ModI4ArithmeticLongemittedPop two 32-bit signed integer (VB6 Long) values; push their modulo result.
(1,A0)ModI4ArithmeticLongnever dup(alias) Pop two 32-bit signed integer (VB6 Long) values; push their modulo result.
(1,9E)ModUI1ArithmeticByteemittedPop two 8-bit unsigned integer (VB6 Byte) values; push their modulo result.
(0,B1)MulI2ArithmeticInteger/BooleanemittedPop two 16-bit signed integer (VB6 Integer) values; push their multiplication result.
(1,AF)MulI2ArithmeticInteger/Booleannever dup(alias) Pop two 16-bit signed integer (VB6 Integer) values; push their multiplication result.
(0,B2)MulI4ArithmeticLongemittedPop two 32-bit signed integer (VB6 Long) values; push their multiplication result.
(1,B0)MulI4ArithmeticLongnever dup(alias) Pop two 32-bit signed integer (VB6 Long) values; push their multiplication result.
(1,AE)MulUI1ArithmeticByteemittedPop two 8-bit unsigned integer (VB6 Byte) values; push their multiplication result.
(0,AD)SubI2ArithmeticInteger/BooleanemittedPop two 16-bit signed integer (VB6 Integer) values; push their subtraction result.
(1,97)SubI2ArithmeticInteger/Booleannever dup(alias) Pop two 16-bit signed integer (VB6 Integer) values; push their subtraction result.
(0,AE)SubI4ArithmeticLongemittedPop two 32-bit signed integer (VB6 Long) values; push their subtraction result.
(1,98)SubI4ArithmeticLongnever dup(alias) Pop two 32-bit signed integer (VB6 Long) values; push their subtraction result.
(1,96)SubUI1ArithmeticByteemittedPop two 8-bit unsigned integer (VB6 Byte) values; push their subtraction result.
(0,B7)UMiI2ArithmeticInteger/BooleanemittedPop one 16-bit signed integer (VB6 Integer); push its arithmetic negation.
(1,C7)UMiI2ArithmeticInteger/Booleannever dup(alias) Pop one 16-bit signed integer (VB6 Integer); push its arithmetic negation.
(1,C8)UMiI2ArithmeticInteger/Booleannever dupNegate a 32-bit value (handler behaves as UMiI4 despite the UMiI2 name); never emitted.
(0,B8)UMiI4ArithmeticLongemittedPop one 32-bit signed integer (VB6 Long); push its arithmetic negation.
(4,63)ForI2Branch/loopFor loop, Integer/Boolean counteremittedInitialise a For loop with a Integer counter.
(4,64)ForI4Branch/loopFor loop, Long counteremittedInitialize a For loop (ForI4).
(4,6B)ForStepI2Branch/loopFor loop, Integer/Boolean counteremittedInitialise a For loop with a Integer counter and an explicit Step.
(4,6C)ForStepI4Branch/loopFor loop, Long counteremittedInitialise a For loop with a Long counter and an explicit Step.
(4,6A)ForStepUI1Branch/loopFor loop, Byte counteremittedInitialise a For loop with a Byte counter and explicit Step.
(4,62)ForUI1Branch/loopFor loop, Byte counteremittedInitialise a For loop with a Byte counter.
(0,64)NextI2Branch/loopFor loop, Integer/Boolean counteremittedNext of a For loop with a Integer counter.
(4,79)NextI2Branch/loopFor loop, Integer/Boolean counternever dupNext of a For loop with a Integer counter.
(0,66)NextI4Branch/loopFor loop, Long counteremittedNext of a For loop with a Long counter.
(4,7A)NextI4Branch/loopFor loop, Long counternever dupNext of a For loop with a Long counter.
(0,65)NextStepI2Branch/loopFor loop, Integer/Boolean counteremittedNext of a For loop with a Integer counter and an explicit Step.
(4,81)NextStepI2Branch/loopFor loop, Integer/Boolean counternever dupNext of a For loop with a Integer counter and an explicit Step.
(0,67)NextStepI4Branch/loopFor loop, Long counteremittedNext of a For loop with a Long counter and an explicit Step.
(4,82)NextStepI4Branch/loopFor loop, Long counternever dupNext of a For loop with a Long counter and an explicit Step.
(4,80)NextStepUI1Branch/loopFor loop, Byte counteremitted dupNext for a Byte loop counter with Step.
(4,78)NextUI1Branch/loopFor loop, Byte counteremittedNext for a Byte loop counter.
(1,85)BetweenI2CompareInteger/BooleanemittedCase lo To hi range test on a Integer selector; push Boolean.
(1,86)BetweenI4CompareLongemittedCase lo To hi range test on a Long selector; push Boolean.
(1,84)BetweenUI1CompareByteemittedCase lo To hi range test on a Byte selector; push Boolean.
(0,C6)EqI2CompareInteger/BooleanemittedCompare two values with =; push Boolean result.
(1,29)EqI2CompareInteger/Booleannever dup(alias) Compare two values with =; push Boolean result.
(1,2A)EqI2CompareInteger/Booleannever dup(alias) Compare two values with =; push Boolean result.
(0,C7)EqI4CompareLongemittedCompare two values with =; push Boolean result.
(1,2B)EqI4CompareLongnever dup(alias) Compare two values with =; push Boolean result.
(0,DF)GeI2CompareInteger/BooleanemittedCompare two values with >=; push Boolean result.
(1,51)GeI2CompareInteger/Booleannever dup(alias) Compare two values with >=; push Boolean result.
(0,E0)GeI4CompareLongemittedCompare two values with >=; push Boolean result.
(1,52)GeI4CompareLongnever dup(alias) Compare two values with >=; push Boolean result.
(1,50)GeUI1CompareByteemittedCompare two values with >=; push Boolean result.
(0,DA)GtI2CompareInteger/BooleanemittedCompare two values with >; push Boolean result.
(1,6B)GtI2CompareInteger/Booleannever dup(alias) Compare two values with >; push Boolean result.
(0,DB)GtI4CompareLongemittedCompare two values with >; push Boolean result.
(1,6C)GtI4CompareLongnever dup(alias) Compare two values with >; push Boolean result.
(1,6A)GtUI1CompareByteemittedCompare two values with >; push Boolean result.
(0,D5)LeI2CompareInteger/BooleanemittedCompare two values with <=; push Boolean result.
(1,44)LeI2CompareInteger/Booleannever dup(alias) Compare two values with <=; push Boolean result.
(0,D6)LeI4CompareLongemittedCompare two values with <=; push Boolean result.
(1,45)LeI4CompareLongnever dup(alias) Compare two values with <=; push Boolean result.
(1,43)LeUI1CompareByteemittedCompare two values with <=; push Boolean result.
(0,D0)LtI2CompareInteger/BooleanemittedCompare two values with <; push Boolean result.
(1,5E)LtI2CompareInteger/Booleannever dup(alias) Compare two values with <; push Boolean result.
(0,D1)LtI4CompareLongemittedCompare two values with <; push Boolean result.
(1,5F)LtI4CompareLongnever dup(alias) Compare two values with <; push Boolean result.
(1,5D)LtUI1CompareByteemittedCompare two values with <; push Boolean result.
(0,CB)NeI2CompareInteger/BooleanemittedCompare two values with <>; push Boolean result.
(0,CC)NeI4CompareLongemittedCompare two values with <>; push Boolean result.
(1,38)NeI4CompareLongnever dup(alias) Compare two values with <>; push Boolean result.
(1,36)NeUI1CompareBytenever dupCompare two values with <>; push Boolean result.
(1,37)NeUI1CompareBytenever dup(alias) Compare two values with <>; push Boolean result.
(0,F3)LitI2LiteralInteger/Longemitted(alias) Push a 16-bit Integer literal.
(4,B5)LitI2LiteralInteger/Longnever dup(alias) Push a 16-bit Integer literal.
(0,F8)LitI2FPLiteralInteger/Longnever
(4,B6)LitI2FPLiteralInteger/Longnever dup
(0,F4)LitI2_ByteLiteralInteger/LongemittedPush a 1-byte immediate sign-extended to Integer.
(5,1A)LitI2_ByteLiteralInteger/Longnever dupPush a 1-byte immediate sign-extended to Integer.
(0,F5)LitI4LiteralInteger/LongemittedPush a 32-bit Long literal.
(4,B8)LitI4LiteralInteger/Longnever dupPush a 32-bit Long literal.
(4,B9)LitI4LiteralInteger/Longnever dupPush a 32-bit Long literal.
(0,6B)FLdI2LoadInteger/Boolean, frameemittedFrame-relative load: FLdI2.
(2,E1)FLdI2LoadInteger/Boolean, framenever dupFrame-relative load: FLdI2.
(2,E2)FLdR4Load4-byte raw (Long), framenever dupRe-load the pointer held in a ByRef frame slot [ebp+%a]; push it as a typed reference.
(2,E3)FLdR4Load4-byte raw (Long), framenever dupRe-load the pointer held in a ByRef frame slot [ebp+%a]; push it as a typed reference.
(2,E7)FLdR4Load4-byte raw (Long), framenever dupRe-load the pointer held in a ByRef frame slot [ebp+%a]; push it as a typed reference.
(2,E8)FLdR4Load4-byte raw (Long), framenever dupRe-load the pointer held in a ByRef frame slot [ebp+%a]; push it as a typed reference.
(3,1C)FLdR4Load4-byte raw (Long), framenever dupRe-load the pointer held in a ByRef frame slot [ebp+%a]; push it as a typed reference.
(2,E0)FLdUI1LoadByte, frameemittedFrame-relative load: FLdUI1.
(0,93)FMemLdI2LoadInteger/Boolean, via frame pointeremittedLoad a 16-bit signed integer (VB6 Integer) via [frame[%a] + offset] (FMemLdI2).
(3,D1)FMemLdI2LoadInteger/Boolean, via frame pointernever dupLoad a 16-bit signed integer (VB6 Integer) via [frame[%a] + offset] (FMemLdI2).
(0,94)FMemLdR4Load4-byte raw (Long), via frame pointeremittedLoad a 4-byte value through a pointer held in a frame slot plus offset (FMem); not a Single-specific opcode.
(3,D2)FMemLdR4Load4-byte raw (Long), via frame pointernever dupLoad a 4-byte value through a pointer held in a frame slot plus offset (FMem); not a Single-specific opcode.
(3,D3)FMemLdR4Load4-byte raw (Long), via frame pointernever dupLoad a 4-byte value through a pointer held in a frame slot plus offset (FMem); not a Single-specific opcode.
(3,D7)FMemLdR4Load4-byte raw (Long), via frame pointernever dupLoad a 4-byte value through a pointer held in a frame slot plus offset (FMem); not a Single-specific opcode.
(3,D8)FMemLdR4Load4-byte raw (Long), via frame pointernever dupLoad a 4-byte value through a pointer held in a frame slot plus offset (FMem); not a Single-specific opcode.
(3,D0)FMemLdUI1LoadByte, via frame pointeremittedLoad Byte from a field reached through a pointer held in a frame slot.
(0,7F)ILdI2LoadInteger/Boolean, ByRef/indirectemittedPop an address; push the 16-bit signed integer (VB6 Integer) read from it.
(3,11)ILdI2LoadInteger/Boolean, ByRef/indirectnever dupPop an address; push the 16-bit signed integer (VB6 Integer) read from it.
(0,80)ILdI4LoadLong, ByRef/indirectemittedPop an address; push the 32-bit signed integer (VB6 Long) read from it.
(3,12)ILdI4LoadLong, ByRef/indirectnever dupPop an address; push the 32-bit signed integer (VB6 Long) read from it.
(3,13)ILdI4LoadLong, ByRef/indirectnever dupPop an address; push the 32-bit signed integer (VB6 Long) read from it.
(3,17)ILdI4LoadLong, ByRef/indirectnever dupPop an address; push the 32-bit signed integer (VB6 Long) read from it.
(3,18)ILdI4LoadLong, ByRef/indirectnever dupPop an address; push the 32-bit signed integer (VB6 Long) read from it.
(3,10)ILdUI1LoadByte, ByRef/indirectemittedPop an address; push the 8-bit unsigned integer (VB6 Byte) read from it.
(3,41)IWMemLdI2LoadInteger/Boolean, W-base indirectneverLOAD through a 16-bit signed integer (VB6 Integer) at [W-base+offset] -> [eax], one extra dereference (2-byte, W+indirect).
(3,42)IWMemLdI4LoadLong, W-base indirectneverLOAD through a 32-bit signed integer (VB6 Long) at [W-base+offset] -> [eax], one extra dereference (4-byte, W+indirect).
(3,43)IWMemLdI4LoadLong, W-base indirectnever dupLOAD through a 32-bit signed integer (VB6 Long) at [W-base+offset] -> [eax], one extra dereference (4-byte, W+indirect).
(3,47)IWMemLdI4LoadLong, W-base indirectnever dupLOAD through a 32-bit signed integer (VB6 Long) at [W-base+offset] -> [eax], one extra dereference (4-byte, W+indirect).
(3,48)IWMemLdI4LoadLong, W-base indirectnever dupLOAD through a 32-bit signed integer (VB6 Long) at [W-base+offset] -> [eax], one extra dereference (4-byte, W+indirect).
(3,40)IWMemLdUI1LoadByte, W-base indirectneverLOAD through a 8-bit unsigned (VB6 Byte) at [W-base+offset] -> [eax], one extra dereference (1-byte, W+indirect).
(0,75)ImpAdLdI2LoadInteger/Boolean, globalemittedLoad Integer/Boolean from a module-level (global) variable.
(3,A1)ImpAdLdI2LoadInteger/Boolean, globalnever dupLoad Integer/Boolean from a module-level (global) variable.
(0,76)ImpAdLdI4LoadLong, globalemittedLoad Long from a module-level (global) variable.
(3,A0)ImpAdLdUI1LoadByte, globalemittedLoad Byte from a module-level (global) variable.
(0,89)MemLdI2LoadInteger/Boolean, member via premitted(alias) Load a 16-bit signed integer (VB6 Integer) from [pr + offset] where pr is on the stack.
(3,71)MemLdI2LoadInteger/Boolean, member via prnever dup(alias) Load a 16-bit signed integer (VB6 Integer) from [pr + offset] where pr is on the stack.
(3,72)MemLdR4Load4-byte raw (Long), member via prnever dupLoad a BSTR (VB6 String) from [pr + offset] where pr is on the stack.
(3,73)MemLdR4Load4-byte raw (Long), member via prnever dupLoad a BSTR (VB6 String) from [pr + offset] where pr is on the stack.
(3,77)MemLdR4Load4-byte raw (Long), member via prnever dupLoad a BSTR (VB6 String) from [pr + offset] where pr is on the stack.
(3,78)MemLdR4Load4-byte raw (Long), member via prnever dupLoad a BSTR (VB6 String) from [pr + offset] where pr is on the stack.
(3,70)MemLdUI1LoadByte, member via premittedLoad a 8-bit unsigned integer (VB6 Byte) from [pr + offset] where pr is on the stack.
(4,D1)WMemLdI2LoadInteger/Boolean, W-baseneverLOAD a 16-bit signed integer (VB6 Integer) at [W-base+offset] via the procedure's secondary-object pointer [ebp+10h] (W-base) (2-byte).
(4,D0)WMemLdUI1LoadByte, W-baseneverLOAD a 8-bit unsigned (VB6 Byte) at [W-base+offset] via the procedure's secondary-object pointer [ebp+10h] (W-base) (1-byte).
(0,C4)AndI4LogicLongemittedPop operand(s); push bitwise And.
(1,21)AndUI1LogicBytenever dupPop operand(s); push bitwise And.
(1,22)AndUI1LogicBytenever dup(alias) Pop operand(s); push bitwise And.
(1,23)AndUI1LogicBytenever dup(alias) Pop operand(s); push bitwise And.
(1,0A)EqvI4LogicLongemittedPop two operands; push the bitwise equivalence (Eqv).
(1,0B)EqvI4LogicLongemitted dup(alias) Pop two operands; push the bitwise equivalence (Eqv).
(1,09)EqvUI1LogicByteemittedPop two operands; push the bitwise equivalence (Eqv).
(1,02)ImpI4LogicLongemittedPop two operands; push the logical implication (Imp).
(1,03)ImpI4LogicLongemitted dup(alias) Pop two operands; push the logical implication (Imp).
(1,01)ImpUI1LogicByteemittedPop two operands; push the logical implication (Imp).
(0,C3)NotI4LogicLongemittedPop operand(s); push bitwise Not.
(1,BF)NotI4LogicLongnever dup(alias) Pop operand(s); push bitwise Not.
(1,C0)NotI4LogicLongnever dup(alias) Pop operand(s); push bitwise Not.
(1,BE)NotUI1LogicByteemittedPop operand(s); push bitwise Not.
(1,19)OrI2LogicInteger/Booleannever dupPop operand(s); push bitwise Or.
(1,1A)OrI2LogicInteger/Booleannever dup(alias) Pop operand(s); push bitwise Or.
(1,1B)OrI2LogicInteger/Booleannever dup(alias) Pop operand(s); push bitwise Or.
(0,C5)OrI4LogicLongemittedPop operand(s); push bitwise Or.
(1,11)XorI4LogicLongemitted dupPop operand(s); push bitwise Xor.
(1,12)XorI4LogicLongemitted(alias) Pop operand(s); push bitwise Xor.
(1,13)XorI4LogicLongemitted dup(alias) Pop operand(s); push bitwise Xor.
(0,BB)FnAbsI2Math functionInteger/BooleanemittedPop one 16-bit signed integer (VB6 Integer); push its absolute value.
(1,D4)FnAbsI2Math functionInteger/Booleannever dup(alias) Pop one 16-bit signed integer (VB6 Integer); push its absolute value.
(0,BC)FnAbsI4Math functionLongemittedPop one 32-bit signed integer (VB6 Long); push its absolute value.
(1,D5)FnAbsI4Math functionLongnever dup(alias) Pop one 32-bit signed integer (VB6 Long); push its absolute value.
(1,F4)FnSgnI4Math functionLongemittedSgn() of a Long value; push an Integer (-1, 0 or 1).
(1,F2)FnSgnUI1Math functionBytenever dup(duplicate slot of (1,F3) FnSgnUI1) (alias) Pop one 8-bit unsigned integer (VB6 Byte); push its absolute value.
(1,F3)FnSgnUI1Math functionByteemittedSgn() of a Integer, Boolean or Byte value; push an Integer (-1, 0 or 1).
(0,98)FMemStI2StoreInteger/Boolean, via frame pointeremittedStore a 16-bit signed integer (VB6 Integer) via [frame[%a] + offset] (FMemStI2).
(3,E1)FMemStI2StoreInteger/Boolean, via frame pointernever dupStore a 16-bit signed integer (VB6 Integer) via [frame[%a] + offset] (FMemStI2).
(0,99)FMemStI4StoreLong, via frame pointeremittedStore a 32-bit signed integer (VB6 Long) via [frame[%a] + offset] (FMemStI4).
(3,E2)FMemStR4Store4-byte raw (Long), via frame pointernever dupStore a 32-bit signed integer (VB6 Long) via [frame[%a] + offset] (FMemStI4).
(3,E3)FMemStR4Store4-byte raw (Long), via frame pointernever dupStore a 32-bit signed integer (VB6 Long) via [frame[%a] + offset] (FMemStI4).
(3,E0)FMemStUI1StoreByte, via frame pointeremittedStore Byte into a field reached through a pointer held in a frame slot.
(0,70)FStI2StoreInteger/Boolean, frameemittedPop a 16-bit signed integer (VB6 Integer); store into frame slot [ebp+%a].
(2,F1)FStI2StoreInteger/Boolean, framenever dupPop a 16-bit signed integer (VB6 Integer); store into frame slot [ebp+%a].
(0,71)FStR4Store4-byte raw (Long), frameemittedPop a 4-byte value and store it into a frame slot (Long locals; not Single).
(2,F2)FStR4Store4-byte raw (Long), framenever dupPop a 4-byte value and store it into a frame slot (Long locals; not Single).
(2,F3)FStR4Store4-byte raw (Long), framenever dupPop a 4-byte value and store it into a frame slot (Long locals; not Single).
(2,F0)FStUI1StoreByte, frameemittedPop a 8-bit unsigned integer (VB6 Byte); store into frame slot [ebp+%a].
(0,84)IStI2StoreInteger/Boolean, ByRef/indirectemittedPop value and address; write the 16-bit signed integer (VB6 Integer) through the address.
(3,21)IStI2StoreInteger/Boolean, ByRef/indirectnever dupPop value and address; write the 16-bit signed integer (VB6 Integer) through the address.
(0,85)IStI4StoreLong, ByRef/indirectemittedPop value and address; write the 32-bit signed integer (VB6 Long) through the address.
(3,22)IStI4StoreLong, ByRef/indirectnever dupPop value and address; write the 32-bit signed integer (VB6 Long) through the address.
(3,23)IStI4StoreLong, ByRef/indirectnever dupPop value and address; write the 32-bit signed integer (VB6 Long) through the address.
(3,20)IStUI1StoreByte, ByRef/indirectemittedPop value and address; write the 8-bit unsigned integer (VB6 Byte) through the address.
(3,51)IWMemStI2StoreInteger/Boolean, W-base indirectneverSTORE through a 16-bit signed integer (VB6 Integer) at [W-base+offset] -> [eax], one extra dereference (2-byte, W+indirect).
(3,52)IWMemStR4Store4-byte raw (Long), W-base indirectneverStore a raw 4-byte value at [W-base + offset] plus one extra dereference (W-base = dispatcher argument [ebp+10h]); not a floating-point store.
(3,53)IWMemStR4Store4-byte raw (Long), W-base indirectnever dupStore a raw 4-byte value at [W-base + offset] plus one extra dereference (W-base = dispatcher argument [ebp+10h]); not a floating-point store.
(3,50)IWMemStUI1StoreByte, W-base indirectneverSTORE through a 8-bit unsigned (VB6 Byte) at [W-base+offset] -> [eax], one extra dereference (1-byte, W+indirect).
(0,7A)ImpAdStI2StoreInteger/Boolean, globalemittedStore Integer/Boolean into a module-level (global) variable.
(3,B1)ImpAdStI2StoreInteger/Boolean, globalnever dupStore Integer/Boolean into a module-level (global) variable.
(0,7B)ImpAdStR4Store4-byte raw (Long), globalemittedStore 4-byte value into a module-level (global) variable.
(3,B2)ImpAdStR4Store4-byte raw (Long), globalnever dupStore 4-byte value into a module-level (global) variable.
(3,B3)ImpAdStR4Store4-byte raw (Long), globalnever dupStore 4-byte value into a module-level (global) variable.
(3,B0)ImpAdStUI1StoreByte, globalemittedStore Byte into a module-level (global) variable.
(0,8E)MemStI2StoreInteger/Boolean, member via premitted(alias) Store a 16-bit signed integer (VB6 Integer) into [pr + offset] (pr on the stack).
(3,81)MemStI2StoreInteger/Boolean, member via prnever dup(alias) Store a 16-bit signed integer (VB6 Integer) into [pr + offset] (pr on the stack).
(0,8F)MemStI4StoreLong, member via premittedStore a 32-bit signed integer (VB6 Long) into [pr + offset] (pr on the stack).
(3,82)MemStR4Store4-byte raw (Long), member via prnever dupStore a 32-bit signed integer (VB6 Long) into [pr + offset] (pr on the stack).
(3,83)MemStR4Store4-byte raw (Long), member via prnever dupStore a 32-bit signed integer (VB6 Long) into [pr + offset] (pr on the stack).
(3,80)MemStUI1StoreByte, member via premittedStore a 8-bit unsigned integer (VB6 Byte) into [pr + offset] (pr on the stack).
(4,E1)WMemStI2StoreInteger/Boolean, W-baseneverSTORE a 16-bit signed integer (VB6 Integer) at [W-base+offset] via the procedure's secondary-object pointer [ebp+10h] (W-base) (2-byte).
(4,E2)WMemStR4Store4-byte raw (Long), W-baseneverStore a raw 4-byte value at [W-base + offset] (W-base = dispatcher argument [ebp+10h]); not a floating-point store.
(4,E3)WMemStR4Store4-byte raw (Long), W-basenever dupStore a raw 4-byte value at [W-base + offset] (W-base = dispatcher argument [ebp+10h]); not a floating-point store.
(4,E0)WMemStUI1StoreByte, W-baseneverSTORE a 8-bit unsigned (VB6 Byte) at [W-base+offset] via the procedure's secondary-object pointer [ebp+10h] (W-base) (1-byte).
Floating point 111 slots, 54 distinct handlers, 49 emitted

Single, Double and Date values carried on the FPU: arithmetic, compares, FPR4/FPR8 loads and stores, float literals and loops.

SlotMnemonicOperationTypesStatusSummary
(1,91)AddR4ArithmeticSinglenever dupPop two 32-bit IEEE 754 float (VB6 Single) values; push their addition result.
(1,92)AddR4ArithmeticSinglenever dup(alias) Pop two 32-bit IEEE 754 float (VB6 Single) values; push their addition result.
(0,AB)AddR8ArithmeticDoubleemittedPop two 64-bit IEEE 754 float (VB6 Double) values; push their addition result.
(0,B6)DivR8ArithmeticDoubleemittedPop two 64-bit IEEE 754 float (VB6 Double) values; push their floating-point division result.
(1,B9)DivR8ArithmeticDoublenever dup(alias) Pop two 64-bit IEEE 754 float (VB6 Double) values; push their floating-point division result.
(1,BA)DivR8ArithmeticDoublenever dup(alias) Pop two 64-bit IEEE 754 float (VB6 Double) values; push their floating-point division result.
(1,B1)MulR4ArithmeticSinglenever dupPop two 32-bit IEEE 754 float (VB6 Single) values; push their multiplication result.
(1,B2)MulR4ArithmeticSinglenever dup(alias) Pop two 32-bit IEEE 754 float (VB6 Single) values; push their multiplication result.
(0,B3)MulR8ArithmeticDoubleemittedPop two 64-bit IEEE 754 float (VB6 Double) values; push their multiplication result.
(1,D0)PwrR8I2ArithmeticDouble x Integer/BooleanneverRaise a Double to an Integer power; never emitted.
(1,CF)PwrR8R8ArithmeticDouble x DoubleemittedPop two 64-bit IEEE 754 float (VB6 Double) values; push their exponentiation result.
(0,AF)SubR8ArithmeticDoubleemittedPop two 64-bit IEEE 754 float (VB6 Double) values; push their subtraction result.
(1,99)SubR8ArithmeticDoublenever dup(alias) Pop two 64-bit IEEE 754 float (VB6 Double) values; push their subtraction result.
(1,9A)SubR8ArithmeticDoublenever dup(alias) Pop two 64-bit IEEE 754 float (VB6 Double) values; push their subtraction result.
(1,C9)UMiR4ArithmeticSinglenever dupPop one 32-bit IEEE 754 float (VB6 Single); push its arithmetic negation.
(1,CA)UMiR4ArithmeticSinglenever dup(alias) Pop one 32-bit IEEE 754 float (VB6 Single); push its arithmetic negation.
(0,B9)UMiR8ArithmeticDoubleemittedPop one 64-bit IEEE 754 float (VB6 Double); push its arithmetic negation.
(4,65)ForR4Branch/loopFor loop, Single counteremittedInitialise a For loop with a Single counter.
(4,66)ForR8Branch/loopFor loop, Double counteremittedInitialise a For loop with a Double counter.
(4,6D)ForStepR4Branch/loopFor loop, Single counteremittedInitialise a For loop with a Single counter and explicit Step.
(4,6E)ForStepR8Branch/loopFor loop, Double counteremittedInitialise a For loop with a Double counter and explicit Step.
(4,7C)NextR8Branch/loopFor loop, Double counternever dupNext for a Double loop counter with Step.
(4,84)NextR8Branch/loopFor loop, Double counternever dupNext for a Double loop counter with Step.
(0,68)NextStepR4Branch/loopFor loop, Single counteremittedNext for a Single loop counter with Step.
(4,7B)NextStepR4Branch/loopFor loop, Single counternever dupNext for a Single loop counter with Step.
(4,83)NextStepR4Branch/loopFor loop, Single counternever dupNext for a Single loop counter with Step.
(0,69)NextStepR8Branch/loopFor loop, Double counteremittedNext for a Double loop counter with Step.
(1,87)BetweenR4CompareSingleemittedCase lo To hi range test on a Single selector; push Boolean.
(1,88)BetweenR4CompareSingleemitted dupCase lo To hi range test on a Double selector; push Boolean.
(0,C8)EqR8CompareDoubleemittedCompare two values with =; push Boolean result.
(1,2C)EqR8CompareDoublenever dup(alias) Compare two values with =; push Boolean result.
(1,2D)EqR8CompareDoublenever dup(alias) Compare two values with =; push Boolean result.
(1,53)GeR4CompareSinglenever dupCompare two values with >=; push Boolean result.
(1,54)GeR4CompareSinglenever dup(alias) Compare two values with >=; push Boolean result.
(0,E1)GeR8CompareDoubleemittedCompare two values with >=; push Boolean result.
(0,DC)GtR8CompareDoubleemittedCompare two values with >; push Boolean result.
(1,6D)GtR8CompareDoublenever dup(alias) Compare two values with >; push Boolean result.
(1,6E)GtR8CompareDoublenever dup(alias) Compare two values with >; push Boolean result.
(1,46)LeR4CompareSinglenever dupCompare two values with <=; push Boolean result.
(1,47)LeR4CompareSinglenever dup(alias) Compare two values with <=; push Boolean result.
(0,D7)LeR8CompareDoubleemittedCompare two values with <=; push Boolean result.
(1,60)LtR4CompareSinglenever dupCompare two values with <; push Boolean result.
(1,61)LtR4CompareSinglenever dup(alias) Compare two values with <; push Boolean result.
(0,D2)LtR8CompareDoubleemittedCompare two values with <; push Boolean result.
(1,39)NeR4CompareSinglenever dupCompare two values with <>; push Boolean result.
(1,3A)NeR4CompareSinglenever dup(alias) Compare two values with <>; push Boolean result.
(0,CD)NeR8CompareDoubleemittedCompare two values with <>; push Boolean result.
(0,FA)LitDateLiteralDouble/Date (FPU)emittedPush an 8-byte floating-point literal onto the FPU (Double and Date literals).
(0,F9)LitR4FPLiteralSingle (FPU)emittedPush a 4-byte Single literal onto the FPU.
(4,BA)LitR4FPLiteralSingle (FPU)never dupPush a 4-byte Single literal onto the FPU.
(4,BB)LitR8LiteralDoublenever dupPush an 8-byte literal (Currency literals; also raw 8-byte double payloads).
(4,BC)LitR8LiteralDoublenever dupPush an 8-byte literal (Currency literals; also raw 8-byte double payloads).
(4,BD)LitR8FPLiteralDouble (FPU)never dupPush an 8-byte floating-point literal onto the FPU (Double and Date literals).
(4,BE)LitR8FPLiteralDouble (FPU)never dupPush an 8-byte floating-point literal onto the FPU (Double and Date literals).
(0,6E)FLdFPR4LoadSingle (FPU), frameemittedFrame-relative load: FLdFPR4.
(2,E9)FLdFPR4LoadSingle (FPU), framenever dupFrame-relative load: FLdFPR4.
(0,6F)FLdFPR8LoadDouble/Date (FPU), frameemittedFrame-relative load: FLdFPR8.
(2,EA)FLdFPR8LoadDouble/Date (FPU), framenever dupFrame-relative load: FLdFPR8.
(0,96)FMemLdFPR4LoadSingle (FPU), via frame pointeremittedLoad Single from a field reached through a pointer held in a frame slot.
(3,D9)FMemLdFPR4LoadSingle (FPU), via frame pointernever dupLoad Single from a field reached through a pointer held in a frame slot.
(0,97)FMemLdFPR8LoadDouble/Date (FPU), via frame pointeremittedLoad Double/Date from a field reached through a pointer held in a frame slot.
(3,DA)FMemLdFPR8LoadDouble/Date (FPU), via frame pointernever dupLoad Double/Date from a field reached through a pointer held in a frame slot.
(0,82)ILdFPR4LoadSingle (FPU), ByRef/indirectemittedPop an address; push the Single on the x87 FPU stack read from it.
(3,19)ILdFPR4LoadSingle (FPU), ByRef/indirectnever dupPop an address; push the Single on the x87 FPU stack read from it.
(0,83)ILdFPR8LoadDouble/Date (FPU), ByRef/indirectemittedLoad Double/Date from the variable a ByRef argument (or other frame-held pointer) points to.
(3,1A)ILdFPR8LoadDouble/Date (FPU), ByRef/indirectnever dupLoad Double/Date from the variable a ByRef argument (or other frame-held pointer) points to.
(3,49)IWMemLdFPR4LoadSingle (FPU), W-base indirectneverLOAD through a Single via x87 FPU at [W-base+offset] -> [eax], one extra dereference (4-byte (FPU), W+indirect).
(3,4A)IWMemLdFPR8LoadDouble/Date (FPU), W-base indirectneverLOAD through a Double via x87 FPU at [W-base+offset] -> [eax], one extra dereference (8-byte (FPU), W+indirect).
(0,78)ImpAdLdFPR4LoadSingle (FPU), globalemittedLoad Single from a module-level (global) variable.
(3,A9)ImpAdLdFPR4LoadSingle (FPU), globalnever dupLoad Single from a module-level (global) variable.
(0,79)ImpAdLdFPR8LoadDouble/Date (FPU), globalemittedLoad Double/Date from a module-level (global) variable.
(3,AA)ImpAdLdFPR8LoadDouble/Date (FPU), globalnever dupLoad Double/Date from a module-level (global) variable.
(0,8C)MemLdFPR4LoadSingle (FPU), member via premittedLoad Single from a field at an offset from the cached object pointer pr.
(3,79)MemLdFPR4LoadSingle (FPU), member via prnever dupLoad Single from a field at an offset from the cached object pointer pr.
(0,8D)MemLdFPR8LoadDouble/Date (FPU), member via premittedLoad Double/Date from a field at an offset from the cached object pointer pr.
(3,7A)MemLdFPR8LoadDouble/Date (FPU), member via prnever dupLoad Double/Date from a field at an offset from the cached object pointer pr.
(4,D9)WMemLdFPR4LoadSingle (FPU), W-baseneverLOAD a Single via x87 FPU at [W-base+offset] via the procedure's secondary-object pointer [ebp+10h] (W-base) (4-byte (FPU)).
(4,DA)WMemLdFPR8LoadDouble/Date (FPU), W-baseneverLOAD a Double via x87 FPU at [W-base+offset] via the procedure's secondary-object pointer [ebp+10h] (W-base) (8-byte (FPU)).
(0,BD)FnAbsR4Math functionSingleemittedPop one 32-bit IEEE 754 float (VB6 Single); push its absolute value.
(1,D6)FnAbsR4Math functionSinglenever dup(alias) Pop one 32-bit IEEE 754 float (VB6 Single); push its absolute value.
(1,D7)FnAbsR4Math functionSinglenever dup(alias) Pop one 32-bit IEEE 754 float (VB6 Single); push its absolute value.
(1,DE)FnFixR8Math functionDoubleemittedFix() of a Single value: truncates toward zero.
(1,DF)FnFixR8Math functionDoubleemitted dupFix() of a Double, Date or String value: truncates toward zero.
(1,E6)FnIntR8Math functionDoubleemitted dupInt() of a Single value: rounds down toward negative infinity.
(1,E7)FnIntR8Math functionDoubleemittedInt() of a Double, Date or String value: rounds down toward negative infinity.
(1,F6)FnSgnR4Math functionSingleemitted dupSgn() of a Double, Date, String or Variant (after coercion) value; push an Integer (-1, 0 or 1).
(1,F5)FnSgnR8Math functionDoubleemittedSgn() of a Single value; push an Integer (-1, 0 or 1).
(0,9B)FMemStFPR4StoreSingle (FPU), via frame pointeremittedStore Single into a field reached through a pointer held in a frame slot.
(3,E9)FMemStFPR4StoreSingle (FPU), via frame pointernever dupStore Single into a field reached through a pointer held in a frame slot.
(0,9C)FMemStFPR8StoreDouble/Date (FPU), via frame pointeremittedStore Double/Date into a field reached through a pointer held in a frame slot.
(3,EA)FMemStFPR8StoreDouble/Date (FPU), via frame pointernever dupStore Double/Date into a field reached through a pointer held in a frame slot.
(0,73)FStFPR4StoreSingle (FPU), frameemittedPop a Single on the x87 FPU stack; store into frame slot [ebp+%a].
(2,F9)FStFPR4StoreSingle (FPU), framenever dupPop a Single on the x87 FPU stack; store into frame slot [ebp+%a].
(0,74)FStFPR8StoreDouble/Date (FPU), frameemittedPop a Double on the x87 FPU stack; store into frame slot [ebp+%a].
(2,FA)FStFPR8StoreDouble/Date (FPU), framenever dupPop a Double on the x87 FPU stack; store into frame slot [ebp+%a].
(0,87)IStFPR4StoreSingle (FPU), ByRef/indirectemittedStore Single into the variable a ByRef argument (or other frame-held pointer) points to.
(3,29)IStFPR4StoreSingle (FPU), ByRef/indirectnever dupStore Single into the variable a ByRef argument (or other frame-held pointer) points to.
(0,88)IStFPR8StoreDouble/Date (FPU), ByRef/indirectemittedStore Double/Date into the variable a ByRef argument (or other frame-held pointer) points to.
(3,2A)IStFPR8StoreDouble/Date (FPU), ByRef/indirectnever dupStore Double/Date into the variable a ByRef argument (or other frame-held pointer) points to.
(3,59)IWMemStFPR4StoreSingle (FPU), W-base indirectneverSTORE through a Single via x87 FPU at [W-base+offset] -> [eax], one extra dereference (4-byte (FPU), W+indirect).
(3,5A)IWMemStFPR8StoreDouble/Date (FPU), W-base indirectneverSTORE through a Double via x87 FPU at [W-base+offset] -> [eax], one extra dereference (8-byte (FPU), W+indirect).
(0,7D)ImpAdStFPR4StoreSingle (FPU), globalemittedStore Single into a module-level (global) variable.
(3,B9)ImpAdStFPR4StoreSingle (FPU), globalnever dupStore Single into a module-level (global) variable.
(0,7E)ImpAdStFPR8StoreDouble/Date (FPU), globalemittedStore Double/Date into a module-level (global) variable.
(3,BA)ImpAdStFPR8StoreDouble/Date (FPU), globalnever dupStore Double/Date into a module-level (global) variable.
(0,91)MemStFPR4StoreSingle (FPU), member via premittedStore Single into a field at an offset from the cached object pointer pr.
(3,89)MemStFPR4StoreSingle (FPU), member via prnever dupStore Single into a field at an offset from the cached object pointer pr.
(0,92)MemStFPR8StoreDouble/Date (FPU), member via premittedStore Double/Date into a field at an offset from the cached object pointer pr.
(3,8A)MemStFPR8StoreDouble/Date (FPU), member via prnever dupStore Double/Date into a field at an offset from the cached object pointer pr.
(4,E9)WMemStFPR4StoreSingle (FPU), W-baseneverSTORE a Single via x87 FPU at [W-base+offset] via the procedure's secondary-object pointer [ebp+10h] (W-base) (4-byte (FPU)).
(4,EA)WMemStFPR8StoreDouble/Date (FPU), W-baseneverSTORE a Double via x87 FPU at [W-base+offset] via the procedure's secondary-object pointer [ebp+10h] (W-base) (8-byte (FPU)).
Currency 86 slots, 41 distinct handlers, 36 emitted

Currency (scaled 64-bit integer) values: arithmetic, compares (including Currency against other numbers), the raw 8-byte R8 moves, literals and loops.

SlotMnemonicOperationTypesStatusSummary
(0,AC)AddCyArithmeticCurrencyemittedPop two 64-bit scaled-integer Currency (×10^4) values; push their addition result.
(1,93)AddCyArithmeticCurrencynever dup(alias) Pop two 64-bit scaled-integer Currency (×10^4) values; push their addition result.
(0,B4)MulCyArithmeticCurrencyemittedPop two 64-bit scaled-integer Currency (×10^4) values; push their multiplication result.
(1,B3)MulCyArithmeticCurrencynever dup(alias) Pop two 64-bit scaled-integer Currency (×10^4) values; push their multiplication result.
(0,B5)MulCyI2ArithmeticCurrency x Integer/BooleanemittedMultiply a Currency by an Integer; push Currency.
(1,D1)MulCyI2ArithmeticCurrency x Integer/Booleannever dup(duplicate slot of (0,B5) MulCyI2) Multiply a Currency by an Integer; push Currency.
(0,B0)SubCyArithmeticCurrencyemittedPop two 64-bit scaled-integer Currency (×10^4) values; push their subtraction result.
(1,9B)SubCyArithmeticCurrencynever dup(alias) Pop two 64-bit scaled-integer Currency (×10^4) values; push their subtraction result.
(0,BA)UMiCyArithmeticCurrencyemittedPop one 64-bit scaled-integer Currency (×10^4); push its arithmetic negation.
(1,CB)UMiCyArithmeticCurrencynever dup(alias) Pop one 64-bit scaled-integer Currency (×10^4); push its arithmetic negation.
(4,67)ForCyBranch/loopFor loop, Currency counteremittedInitialise a For loop with a Currency counter.
(4,6F)ForStepCyBranch/loopFor loop, Currency counteremittedInitialise a For loop with a Currency counter and explicit Step.
(0,6A)NextStepCyBranch/loopFor loop, Currency counteremittedNext for a Currency loop counter with Step.
(4,7D)NextStepCyBranch/loopFor loop, Currency counternever dupNext for a Currency loop counter with Step.
(4,85)NextStepCyBranch/loopFor loop, Currency counternever dupNext for a Currency loop counter with Step.
(1,89)BetweenCyCompareCurrencyemittedCase lo To hi range test on a Currency selector; push Boolean.
(0,C9)EqCyCompareCurrencyemittedCompare two values with =; push Boolean result.
(1,2E)EqCyCompareCurrencynever dup(alias) Compare two values with =; push Boolean result.
(0,CA)EqCyR8CompareCurrency vs numberemittedCompare a Currency with a non-Currency number using =; push Boolean.
(1,35)EqCyR8CompareCurrency vs numbernever dup(duplicate slot of (0,CA) EqCyR8) Compare a Currency with a non-Currency number using =; push Boolean.
(0,E2)GeCyCompareCurrencyemittedCompare two values with >=; push Boolean result.
(1,55)GeCyCompareCurrencynever dup(alias) Compare two values with >=; push Boolean result.
(0,E3)GeCyR8CompareCurrency vs numberemittedCompare a Currency with a non-Currency number using >=; push Boolean.
(1,5C)GeCyR8CompareCurrency vs numbernever dup(duplicate slot of (0,E3) GeCyR8) Compare a Currency with a non-Currency number using >=; push Boolean.
(0,DD)GtCyCompareCurrencyemittedCompare two values with >; push Boolean result.
(1,6F)GtCyCompareCurrencynever dup(alias) Compare two values with >; push Boolean result.
(0,DE)GtCyR8CompareCurrency vs numberemittedCompare a Currency with a non-Currency number using >; push Boolean.
(1,76)GtCyR8CompareCurrency vs numbernever dup(duplicate slot of (0,DE) GtCyR8) Compare a Currency with a non-Currency number using >; push Boolean.
(0,D8)LeCyCompareCurrencyemittedCompare two values with <=; push Boolean result.
(1,48)LeCyCompareCurrencynever dup(alias) Compare two values with <=; push Boolean result.
(0,D9)LeCyR8CompareCurrency vs numberemittedCompare a Currency with a non-Currency number using <=; push Boolean.
(1,4F)LeCyR8CompareCurrency vs numbernever dup(duplicate slot of (0,D9) LeCyR8) Compare a Currency with a non-Currency number using <=; push Boolean.
(0,D3)LtCyCompareCurrencyemittedCompare two values with <; push Boolean result.
(1,62)LtCyCompareCurrencynever dup(alias) Compare two values with <; push Boolean result.
(0,D4)LtCyR8CompareCurrency vs numberemittedCompare a Currency with a non-Currency number using <; push Boolean.
(1,69)LtCyR8CompareCurrency vs numbernever dup(duplicate slot of (0,D4) LtCyR8) Compare a Currency with a non-Currency number using <; push Boolean.
(0,CE)NeCyCompareCurrencyemittedCompare two values with <>; push Boolean result.
(1,3B)NeCyCompareCurrencynever dup(alias) Compare two values with <>; push Boolean result.
(0,CF)NeCyR8CompareCurrency vs numberemittedCompare a Currency with a non-Currency number using <>; push Boolean.
(1,42)NeCyR8CompareCurrency vs numbernever dup(duplicate slot of (0,CF) NeCyR8) Compare a Currency with a non-Currency number using <>; push Boolean.
(0,F6)LitCyLiteral8-byte (Currency)emittedPush an 8-byte literal (Currency literals; also raw 8-byte double payloads).
(0,F7)LitCy4LiteralCurrencynever
(4,B7)LitCy4LiteralCurrencynever dup
(0,6D)FLdR8Load8-byte raw (Currency), frameemittedLoad 8-byte value from a frame slot (local variable, temporary or ByVal argument).
(2,E4)FLdR8Load8-byte raw (Currency), framenever dupLoad 8-byte value from a frame slot (local variable, temporary or ByVal argument).
(2,E5)FLdR8Load8-byte raw (Currency), framenever dupLoad 8-byte value from a frame slot (local variable, temporary or ByVal argument).
(0,95)FMemLdCyLoadCurrency, via frame pointeremittedLoad Currency from a field reached through a pointer held in a frame slot.
(3,D4)FMemLdR8Load8-byte raw (Currency), via frame pointernever dupLoad Currency from a field reached through a pointer held in a frame slot.
(3,D5)FMemLdR8Load8-byte raw (Currency), via frame pointernever dupLoad Currency from a field reached through a pointer held in a frame slot.
(0,81)ILdR8Load8-byte raw (Currency), ByRef/indirectemittedLoad 8-byte value from the variable a ByRef argument (or other frame-held pointer) points to.
(3,14)ILdR8Load8-byte raw (Currency), ByRef/indirectnever dupLoad 8-byte value from the variable a ByRef argument (or other frame-held pointer) points to.
(3,15)ILdR8Load8-byte raw (Currency), ByRef/indirectnever dupLoad 8-byte value from the variable a ByRef argument (or other frame-held pointer) points to.
(3,44)IWMemLdCyLoadCurrency, W-base indirectneverLOAD through a Currency (64-bit scaled int) at [W-base+offset] -> [eax], one extra dereference (8-byte, W+indirect).
(3,45)IWMemLdCyLoadCurrency, W-base indirectnever dupLOAD through a Currency (64-bit scaled int) at [W-base+offset] -> [eax], one extra dereference (8-byte, W+indirect).
(0,77)ImpAdLdCyLoadCurrency, globalemittedLoad Currency from a module-level (global) variable.
(3,A4)ImpAdLdCyLoadCurrency, globalnever dupLoad Currency from a module-level (global) variable.
(3,A5)ImpAdLdCyLoadCurrency, globalnever dupLoad Currency from a module-level (global) variable.
(0,8B)MemLdR8Load8-byte raw (Currency), member via premittedLoad 8-byte value from a field at an offset from the cached object pointer pr.
(3,74)MemLdR8Load8-byte raw (Currency), member via prnever dupLoad 8-byte value from a field at an offset from the cached object pointer pr.
(3,75)MemLdR8Load8-byte raw (Currency), member via prnever dupLoad 8-byte value from a field at an offset from the cached object pointer pr.
(4,D4)WMemLdCyLoadCurrency, W-baseneverLOAD a Currency (64-bit scaled int) at [W-base+offset] via the procedure's secondary-object pointer [ebp+10h] (W-base) (8-byte).
(4,D5)WMemLdCyLoadCurrency, W-basenever dupLOAD a Currency (64-bit scaled int) at [W-base+offset] via the procedure's secondary-object pointer [ebp+10h] (W-base) (8-byte).
(0,BE)FnAbsCyMath functionCurrencyemittedPop one 64-bit scaled-integer Currency (×10^4); push its absolute value.
(1,D8)FnAbsCyMath functionCurrencynever dup(alias) Pop one 64-bit scaled-integer Currency (×10^4); push its absolute value.
(1,E0)FnFixCyMath functionCurrencyemittedFix() of a Currency value: truncates toward zero.
(1,E8)FnIntCyMath functionCurrencyemittedInt() of a Currency value: rounds down toward negative infinity.
(1,F7)FnSgnCyMath functionCurrencyemittedSgn() of a Currency value; push an Integer (-1, 0 or 1).
(0,9A)FMemStR8Store8-byte raw (Currency), via frame pointeremittedStore 8-byte value into a field reached through a pointer held in a frame slot.
(3,E4)FMemStR8Store8-byte raw (Currency), via frame pointernever dupStore 8-byte value into a field reached through a pointer held in a frame slot.
(3,E5)FMemStR8Store8-byte raw (Currency), via frame pointernever dupStore 8-byte value into a field reached through a pointer held in a frame slot.
(0,72)FStR8Store8-byte raw (Currency), frameemittedStore 8-byte value into a frame slot (local variable, temporary or ByVal argument).
(2,F4)FStR8Store8-byte raw (Currency), framenever dupStore 8-byte value into a frame slot (local variable, temporary or ByVal argument).
(2,F5)FStR8Store8-byte raw (Currency), framenever dupStore 8-byte value into a frame slot (local variable, temporary or ByVal argument).
(0,86)IStR8Store8-byte raw (Currency), ByRef/indirectemittedStore 8-byte value into the variable a ByRef argument (or other frame-held pointer) points to.
(3,24)IStR8Store8-byte raw (Currency), ByRef/indirectnever dupStore 8-byte value into the variable a ByRef argument (or other frame-held pointer) points to.
(3,25)IStR8Store8-byte raw (Currency), ByRef/indirectnever dupStore 8-byte value into the variable a ByRef argument (or other frame-held pointer) points to.
(3,54)IWMemStCyStoreCurrency, W-base indirectneverSTORE through a Currency (64-bit scaled int) at [W-base+offset] -> [eax], one extra dereference (8-byte, W+indirect).
(3,55)IWMemStCyStoreCurrency, W-base indirectnever dupSTORE through a Currency (64-bit scaled int) at [W-base+offset] -> [eax], one extra dereference (8-byte, W+indirect).
(0,7C)ImpAdStCyStoreCurrency, globalemittedStore Currency into a module-level (global) variable.
(3,B4)ImpAdStR8Store8-byte raw (Currency), globalnever dupStore Currency into a module-level (global) variable.
(3,B5)ImpAdStR8Store8-byte raw (Currency), globalnever dupStore Currency into a module-level (global) variable.
(3,84)MemStCyStoreCurrency, member via prnever dupStore 8-byte value into a field at an offset from the cached object pointer pr.
(3,85)MemStCyStoreCurrency, member via prnever dupStore 8-byte value into a field at an offset from the cached object pointer pr.
(0,90)MemStR8Store8-byte raw (Currency), member via premittedStore 8-byte value into a field at an offset from the cached object pointer pr.
(4,E4)WMemStR8Store8-byte raw (Currency), W-baseneverStore a raw 8-byte value at [W-base + offset] (W-base = dispatcher argument [ebp+10h]); not a floating-point store.
(4,E5)WMemStR8Store8-byte raw (Currency), W-basenever dupStore a raw 8-byte value at [W-base + offset] (W-base = dispatcher argument [ebp+10h]); not a floating-point store.
Variant 129 slots, 121 distinct handlers, 96 emitted

Variant operations: Variant arithmetic, logic and compares (results in a temporary), Variant literals, loads/stores, and ByRef Variant parameters.

SlotMnemonicOperationTypesStatusSummary
(1,94)AddVarArithmeticVariantemittedPop two VBA Variant values; push their addition result.
(1,BC)DivVarArithmeticVariantemittedPop two VBA Variant values; push their floating-point division result.
(1,AC)IDvVarArithmeticVariantemittedVariant integer division (\); result Variant in a temporary.
(1,A4)ModVarArithmeticVariantemittedPop two VBA Variant values; push their modulo result.
(1,B4)MulVarArithmeticVariantemittedPop two VBA Variant values; push their multiplication result.
(1,CE)PwrVarArithmeticVariantemittedVariant exponentiation (^); result Variant in a temporary.
(1,9C)SubVarArithmeticVariantemittedPop two VBA Variant values; push their subtraction result.
(1,CC)UMiVarArithmeticVariantemittedVariant unary minus; result Variant in a temporary.
(4,70)ForStepVarBranch/loopFor loop, Variant counteremittedInitialise a For loop with a Variant counter and an explicit Step.
(4,68)ForVarBranch/loopFor loop, Variant counteremittedInitialise a For loop with a Variant counter.
(4,7E)NextStepVarBranch/loopFor loop, Variant counteremittedStep and re-test a For loop (NextStepVar).
(4,86)NextStepVarBranch/loopFor loop, Variant counteremitted dup(alias) Step and re-test a For loop (NextStepVar).
(1,8C)BetweenTextVarCompareVariant (text compare)emittedCase lo To hi range test on a Variant selector; push Boolean.
(1,8A)BetweenVarCompareVariantemittedPop three values (val, lo, hi); push True if lo <= val <= hi, else False.
(1,31)EqTextVarCompareVariant (text compare)emittedVariant = comparison (case-insensitive (Option Compare Text)); result Variant in a temporary.
(1,34)EqTextVarBoolCompareVariant (text compare)emittedVariant = comparison (text mode) whose result is used directly as a condition; push Boolean.
(1,2F)EqVarCompareVariantemittedCompare two values with =; push Boolean result.
(1,33)EqVarBoolCompareVariantemittedVariant = comparison (binary mode) whose result is used directly as a condition; push Boolean.
(1,58)GeTextVarCompareVariant (text compare)emittedVariant >= comparison (case-insensitive (Option Compare Text)); result Variant in a temporary.
(1,5B)GeTextVarBoolCompareVariant (text compare)emittedVariant >= comparison (text mode) whose result is used directly as a condition; push Boolean.
(1,56)GeVarCompareVariantemittedCompare two values with >=; push Boolean result.
(1,5A)GeVarBoolCompareVariantemittedVariant >= comparison (binary mode) whose result is used directly as a condition; push Boolean.
(1,72)GtTextVarCompareVariant (text compare)emittedVariant > comparison (case-insensitive (Option Compare Text)); result Variant in a temporary.
(1,75)GtTextVarBoolCompareVariant (text compare)emittedVariant > comparison (text mode) whose result is used directly as a condition; push Boolean.
(1,70)GtVarCompareVariantemittedCompare two values with >; push Boolean result.
(1,74)GtVarBoolCompareVariantemittedVariant > comparison (binary mode) whose result is used directly as a condition; push Boolean.
(1,4B)LeTextVarCompareVariant (text compare)emittedVariant <= comparison (case-insensitive (Option Compare Text)); result Variant in a temporary.
(1,4E)LeTextVarBoolCompareVariant (text compare)emittedVariant <= comparison (text mode) whose result is used directly as a condition; push Boolean.
(1,49)LeVarCompareVariantemittedVariant <= comparison (binary); result Variant in a temporary.
(1,4D)LeVarBoolCompareVariantemittedVariant <= comparison (binary mode) whose result is used directly as a condition; push Boolean.
(1,7F)LikeTextVarCompareVariant (text compare)emittedVariant Like comparison (case-insensitive (Option Compare Text)); result Variant in a temporary.
(1,82)LikeTextVarBoolCompareVariant (text compare)neverLike (text mode) with Variant operands, Boolean form; never emitted.
(1,7D)LikeVarCompareVariantemittedLike with a Variant operand; result Variant in a temporary.
(1,81)LikeVarBoolCompareVariantneverLike with Variant operands, Boolean form; never emitted.
(1,65)LtTextVarCompareVariant (text compare)emittedVariant < comparison (case-insensitive (Option Compare Text)); result Variant in a temporary.
(1,68)LtTextVarBoolCompareVariant (text compare)emittedVariant < comparison (text mode) whose result is used directly as a condition; push Boolean.
(1,63)LtVarCompareVariantemittedCompare two values with <; push Boolean result.
(1,67)LtVarBoolCompareVariantemittedVariant < comparison (binary mode) whose result is used directly as a condition; push Boolean.
(1,3E)NeTextVarCompareVariant (text compare)emittedVariant <> comparison (case-insensitive (Option Compare Text)); result Variant in a temporary.
(1,41)NeTextVarBoolCompareVariant (text compare)emittedVariant <> comparison (text mode) whose result is used directly as a condition; push Boolean.
(1,3C)NeVarCompareVariantemittedCompare two values with <>; push Boolean result.
(1,40)NeVarBoolCompareVariantemittedVariant <> comparison (binary mode) whose result is used directly as a condition; push Boolean.
(4,C3)LitVarCyLiteralVariant literalemittedCreate a Variant Currency literal (VT_CY) in a temporary.
(4,C5)LitVarDateLiteralVariant literalemittedCreate a Variant Date literal (VT_DATE) in a temporary.
(0,28)LitVarI2LiteralVariant literalemittedCreate a Variant Integer literal (VT_I2) in a temporary.
(4,C0)LitVarI2LiteralVariant literalnever dupCreate a Variant Integer literal (VT_I2) in a temporary.
(4,C1)LitVarI4LiteralVariant literalemittedCreate a Variant Long literal (VT_I4) in a temporary.
(4,C2)LitVarR4LiteralVariant literalemittedCreate a Variant Single literal (VT_R4) in a temporary.
(4,C4)LitVarR8LiteralVariant literalemittedCreate a Variant Double literal (VT_R8) in a temporary.
(0,3A)LitVarStrLiteralVariant literalemittedPush variant literal (LitVarStr).
(4,C6)LitVarStrLiteralVariant literalnever dupPush variant literal (LitVarStr).
(4,3D)LitVarUI1LiteralVariant literalnever
(2,67)LitVar_EmptyLiteralVariant literalemittedCreate a Variant Empty literal in a temporary.
(2,66)LitVar_FALSELiteralVariant literalemittedPush Variant False (0, subtype Boolean).
(0,27)LitVar_MissingLiteralVariant literalemittedCreate a Variant Missing value (an omitted Optional argument) in a temporary.
(2,68)LitVar_MissingLiteralVariant literalnever dupCreate a Variant Missing value (an omitted Optional argument) in a temporary.
(2,64)LitVar_NullLiteralVariant literalemittedCreate a Variant Null (VT_NULL) in a temporary.
(0,63)LitVar_TRUELiteralVariant literalemittedPush Variant True (-1, subtype Boolean).
(2,65)LitVar_TRUELiteralVariant literalnever dupPush Variant True (-1, subtype Boolean).
(2,ED)FLdVarLoadVariant, frameemittedFrame-relative load: FLdVar.
(3,DD)FMemLdVarLoadVariant, via frame pointernever
(3,1D)ILdDargLoadByRef Variant parameter, ByRef/indirectneverPop an address; push the value of suffix `` read from it.
(3,16)ILdRfDargLoadByRef Variant parameter, ByRef/indirectemittedPop an address; push the value of suffix `` read from it.
(3,4D)IWMemLdDargLoadByRef Variant parameter, W-base indirectneverLOAD through a value of suffix `` at [W-base+offset] -> [eax], one extra dereference (unknown-size, W+indirect).
(3,46)IWMemLdRfDargLoadByRef Variant parameter, W-base indirectneverLOAD through a value of suffix `` at [W-base+offset] -> [eax], one extra dereference (unknown-size, W+indirect).
(3,AD)ImpAdLdVarLoadVariant, globalnever
(3,7D)MemLdVarLoadVariant, member via prnever
(4,DD)WMemLdVarLoadVariant, W-baseneverLOAD a Variant at [W-base+offset] via the procedure's secondary-object pointer [ebp+10h] (W-base) (16-byte).
(1,27)AndVarLogicVariantemittedPop operand(s); push bitwise And.
(1,0F)EqvVarLogicVariantemittedVariant bitwise equivalence (Eqv); result Variant in a temporary.
(1,07)ImpVarLogicVariantemittedVariant bitwise implication (Imp); result Variant in a temporary.
(1,C4)NotVarLogicVariantemittedPop operand(s); push bitwise Not.
(1,1F)OrVarLogicVariantemittedPop operand(s); push bitwise Or.
(1,17)XorVarLogicVariantemittedVariant bitwise exclusive-or (Xor); result Variant in a temporary.
(1,D9)FnAbsVarMath functionVariantemittedVariant Abs(); result Variant in a temporary.
(1,E1)FnFixVarMath functionVariantemittedVariant Fix(); result Variant in a temporary.
(1,E9)FnIntVarMath functionVariantemittedVariant Int(); result Variant in a temporary.
(4,92)FDupVarOtheremittedDuplicate the top-of-stack (FDupVar).
(3,E6)FMemStVarStoreVariant, via frame pointeremittedStore Variant into a field reached through a pointer held in a frame slot.
(3,EB)FMemStVarAdStoreVariant <- object, via frame pointeremittedStore object into a Variant into a field reached through a pointer held in a frame slot.
(3,EC)FMemStVarAdFuncStoreVariant <- object, via frame pointeremittedStore object from a call into a Variant into a field reached through a pointer held in a frame slot.
(3,F0)FMemStVarCopyStoreVariant, via frame pointeremittedStore Variant (copied) into a field reached through a pointer held in a frame slot.
(3,ED)FMemStVarUnkStoreVariant <- IUnknown, via frame pointeremittedStore IUnknown into a Variant into a field reached through a pointer held in a frame slot.
(3,EE)FMemStVarUnkFuncStoreVariant <- IUnknown, via frame pointeremittedStore IUnknown from a call into a Variant into a field reached through a pointer held in a frame slot.
(2,F6)FStVarStoreVariant, frameemittedPop a VBA Variant; store into frame slot [ebp+%a].
(2,FB)FStVarAdStoreVariant <- object, frameemittedStore object into a Variant into a frame slot (local variable, temporary or ByVal argument).
(2,FC)FStVarAdFuncStoreVariant <- object, frameemittedPop a value of suffix `; store into frame slot [ebp+%a]`.
(3,00)FStVarCopyStoreVariant, frameemittedPop a value of suffix `; store into frame slot [ebp+%a]`.
(0,4E)FStVarCopyObjStoreVariant, frameemittedPop a value of suffix `; store into frame slot [ebp+%a]`.
(4,F8)FStVarCopyObjStoreVariant, framenever dupPop a value of suffix `; store into frame slot [ebp+%a]`.
(3,63)FStVarNoPopStoreVariant, framenever
(2,FD)FStVarUnkStoreVariant <- IUnknown, frameemittedStore IUnknown into a Variant into a frame slot (local variable, temporary or ByVal argument).
(2,FE)FStVarUnkFuncStoreVariant <- IUnknown, frameemittedStore IUnknown from a call into a Variant into a frame slot (local variable, temporary or ByVal argument).
(4,F7)FStVarZeroStoreVariant, frameemittedStore a Variant temporary into a frame slot and zero the source (move semantics).
(5,39)FStVarZeroStoreVariant, framenever dupStore a Variant temporary into a frame slot and zero the source (move semantics).
(0,62)IStDargStoreByRef Variant parameter, ByRef/indirectemitted(alias) Pop value and address; write the value of suffix `` through the address.
(3,26)IStDargStoreByRef Variant parameter, ByRef/indirectnever dup(alias) Pop value and address; write the value of suffix `` through the address.
(3,2B)IStDargAdStoreByRef Variant parameter, ByRef/indirectemittedSet a ByRef Variant parameter to an object reference (VT_DISPATCH).
(3,2C)IStDargAdFuncStoreByRef Variant parameter, ByRef/indirectemittedSet a ByRef Variant parameter to an object returned by a call.
(3,30)IStDargCopyStoreByRef Variant parameter, ByRef/indirectemittedStore a Variant into a ByRef Variant parameter (deep copy).
(3,2D)IStDargUnkStoreByRef Variant parameter, ByRef/indirectemittedSet a ByRef Variant parameter to an IUnknown reference (VT_UNKNOWN).
(3,2E)IStDargUnkFuncStoreByRef Variant parameter, ByRef/indirectemittedSet a ByRef Variant parameter to an IUnknown returned by a call.
(5,09)IStVarCopyObjStoreVariant, ByRef/indirectnever
(3,56)IWMemStDargStoreByRef Variant parameter, W-base indirectneverSTORE through a value of suffix `` at [W-base+offset] -> [eax], one extra dereference (unknown-size, W+indirect).
(3,5B)IWMemStDargAdStoreByRef Variant parameter, W-base indirectneverSTORE through a raw 32-bit address at [W-base+offset] -> [eax], one extra dereference (4-byte (address), W+indirect).
(3,5C)IWMemStDargAdFuncStoreByRef Variant parameter, W-base indirectneverSTORE through a value of suffix `` at [W-base+offset] -> [eax], one extra dereference (unknown-size, W+indirect).
(3,60)IWMemStDargCopyStoreByRef Variant parameter, W-base indirectneverSTORE through a value of suffix `` at [W-base+offset] -> [eax], one extra dereference (unknown-size, W+indirect).
(3,5D)IWMemStDargUnkStoreByRef Variant parameter, W-base indirectneverSTORE through a value of suffix `` at [W-base+offset] -> [eax], one extra dereference (unknown-size, W+indirect).
(3,5E)IWMemStDargUnkFuncStoreByRef Variant parameter, W-base indirectneverSTORE through a value of suffix `` at [W-base+offset] -> [eax], one extra dereference (unknown-size, W+indirect).
(3,B6)ImpAdStVarStoreVariant, globalemittedStore Variant into a module-level (global) variable.
(3,BB)ImpAdStVarAdStoreVariant <- object, globalemittedStore object into a Variant into a module-level (global) variable.
(3,BC)ImpAdStVarAdFuncStoreVariant <- object, globalemittedStore object from a call into a Variant into a module-level (global) variable.
(3,C0)ImpAdStVarCopyStoreVariant, globalemittedStore Variant (copied) into a module-level (global) variable.
(3,BD)ImpAdStVarUnkStoreVariant <- IUnknown, globalemittedStore IUnknown into a Variant into a module-level (global) variable.
(3,BE)ImpAdStVarUnkFuncStoreVariant <- IUnknown, globalemittedStore IUnknown from a call into a Variant into a module-level (global) variable.
(3,86)MemStVarStoreVariant, member via premittedStore Variant into a field at an offset from the cached object pointer pr.
(3,8B)MemStVarAdStoreVariant <- object, member via premittedStore object into a Variant into a field at an offset from the cached object pointer pr.
(3,8C)MemStVarAdFuncStoreVariant <- object, member via prnever
(3,90)MemStVarCopyStoreVariant, member via premittedStore Variant (copied) into a field at an offset from the cached object pointer pr.
(3,8D)MemStVarUnkStoreVariant <- IUnknown, member via premittedStore IUnknown into a Variant into a field at an offset from the cached object pointer pr.
(3,8E)MemStVarUnkFuncStoreVariant <- IUnknown, member via prnever
(4,4D)SetVarVarStoreSet Variant = VariantemittedFrame-slot manipulation (SetVarVar).
(4,4E)SetVarVarFuncStoreSet Variant = VariantemittedFrame-slot manipulation (SetVarVarFunc).
(4,E6)WMemStVarStoreVariant, W-baseneverSTORE a Variant at [W-base+offset] via the procedure's secondary-object pointer [ebp+10h] (W-base) (16-byte).
(4,EB)WMemStVarAdStoreVariant <- object, W-baseneverSTORE a raw 32-bit address at [W-base+offset] via the procedure's secondary-object pointer [ebp+10h] (W-base) (4-byte (address)).
(4,EC)WMemStVarAdFuncStoreVariant <- object, W-baseneverSTORE a value of suffix `` at [W-base+offset] via the procedure's secondary-object pointer [ebp+10h] (W-base) (unknown-size).
(4,F0)WMemStVarCopyStoreVariant, W-baseneverSTORE a value of suffix `` at [W-base+offset] via the procedure's secondary-object pointer [ebp+10h] (W-base) (unknown-size).
(4,ED)WMemStVarUnkStoreVariant <- IUnknown, W-baseneverSTORE a value of suffix `` at [W-base+offset] via the procedure's secondary-object pointer [ebp+10h] (W-base) (unknown-size).
(4,EE)WMemStVarUnkFuncStoreVariant <- IUnknown, W-baseneverSTORE a value of suffix `` at [W-base+offset] via the procedure's secondary-object pointer [ebp+10h] (W-base) (unknown-size).
Object / COM 131 slots, 95 distinct handlers, 72 emitted

Object references and COM calls: early-bound vtable calls, late-bound IDispatch (by name or DISPID), New/As New, Set, Is/TypeOf, events and For Each over collections.

SlotMnemonicOperationTypesStatusSummary
(4,74)ForEachCollAdBranch/loopFor Each over a collectionemittedStart a For Each over a collection with an Object-typed control variable.
(4,88)ForEachCollObjBranch/loopFor Each over a collectionemittedStart a For Each loop over a collection, with the control variable typed as a specific class (or Object).
(4,72)ForEachCollVarBranch/loopFor Each over a collectionemittedStart a For Each loop over a collection or object, with a Variant control variable.
(4,89)ForEachVarBranch/loopFor Each over a collectionemittedInitialize a For Each iteration (ForEachVar).
(4,8A)ForEachVarFreeBranch/loopFor Each over a collectionnever
(4,75)NextEachCollAdBranch/loopFor Each over a collectionemittedNext of a For Each over a collection with an Object-typed control variable.
(4,8B)NextEachCollObjBranch/loopFor Each over a collectionemittedNext of a For Each loop over a collection, with the control variable typed as a specific class (or Object).
(4,73)NextEachCollVarBranch/loopFor Each over a collectionemittedNext of a For Each loop over a collection or object, with a Variant control variable.
(4,8C)NextEachVarBranch/loopFor Each over a collectionemittedAdvance a For Each iteration (NextEachVar).
(4,A0)LateIdCallCalllate-bound IDispatchemittedLate-bound method call by compile-time DISPID (statement form, result discarded).
(4,A2)LateIdCallLdVarCalllate-bound IDispatchemittedLate-bound call by pre-resolved DispID (LateIdCallLdVar).
(4,A4)LateIdCallStCalllate-bound IDispatchemittedLate-bound property-put by DISPID with arguments (o(i) = v / o.P(i) = v).
(4,AA)LateIdNamedCallCalllate-bound IDispatchemittedLate-bound method call by DISPID with named arguments.
(4,AB)LateIdNamedCallLdVarCalllate-bound IDispatchemittedLate-bound function call by DISPID with named arguments; push the result Variant.
(4,AC)LateIdNamedCallStCalllate-bound IDispatchemittedLate-bound property-put by DISPID with named index arguments.
(4,98)LateMemCallCalllate-bound IDispatchemittedLate-bound method call by name (LateMemCall).
(4,9A)LateMemCallLdVarCalllate-bound IDispatchemittedLate-bound function call by name with arguments; result Variant in a temporary.
(4,9C)LateMemCallStCalllate-bound IDispatchemittedLate-bound property-put by name with arguments (o.Prop(i) = v).
(4,A6)LateMemNamedCallCalllate-bound IDispatchemittedLate-bound method call by name with named arguments.
(4,A7)LateMemNamedCallLdVarCalllate-bound IDispatchemittedLate-bound function call by name with named arguments; push the result Variant.
(4,A8)LateMemNamedCallStCalllate-bound IDispatchemittedLate-bound property-put by name with named index arguments.
(5,0C)RaiseEventCallemittedRaiseEvent: fire one of the class's events, by DISPID, on every connected WithEvents sink.
(0,12)ThisVCallAdCallearly-bound vtable callnever
(4,0D)ThisVCallCbFrameCallearly-bound vtable callnever
(4,05)ThisVCallCyCallearly-bound vtable callnever
(0,11)ThisVCallFPR8Callearly-bound vtable callnever
(4,09)ThisVCallHiddenCallearly-bound vtable callnever dup
(4,0A)ThisVCallHiddenCallearly-bound vtable callnever dup
(4,0C)ThisVCallHiddenCallearly-bound vtable callnever dup
(5,2C)ThisVCallHiddenCallearly-bound vtable callnever dup
(0,10)ThisVCallHresultCallearly-bound vtable callemittedvtable call of one of the current object's own methods, written without Me.; check the HRESULT.
(2,6A)ThisVCallHresultCallearly-bound vtable callnever dupvtable call of one of the current object's own methods, written without Me.; check the HRESULT.
(4,01)ThisVCallI2Callearly-bound vtable callnever dup
(4,02)ThisVCallI2Callearly-bound vtable callnever dup
(4,07)ThisVCallI2Callearly-bound vtable callnever dup
(4,08)ThisVCallI2Callearly-bound vtable callnever dup
(4,03)ThisVCallR4Callearly-bound vtable callnever
(4,04)ThisVCallR8Callearly-bound vtable callnever
(4,00)ThisVCallUI1Callearly-bound vtable callnever
(0,0F)VCallAdCallearly-bound vtable callemittedvtable call returning a 32-bit value in EAX (non-HRESULT method); push the result.
(4,1D)VCallCbFrameCallearly-bound vtable callnever
(4,15)VCallCyCallearly-bound vtable callnever
(0,0E)VCallFPR8Callearly-bound vtable callemittedvtable call whose return value comes back on the FPU (Single/Double), or whose result is discarded.
(4,19)VCallFPR8Callearly-bound vtable callnever dupvtable call whose return value comes back on the FPU (Single/Double), or whose result is discarded.
(4,1A)VCallFPR8Callearly-bound vtable callnever dupvtable call whose return value comes back on the FPU (Single/Double), or whose result is discarded.
(4,1C)VCallFPR8Callearly-bound vtable callnever dupvtable call whose return value comes back on the FPU (Single/Double), or whose result is discarded.
(5,2B)VCallFPR8Callearly-bound vtable callemitted dupvtable call whose return value comes back on the FPU (Single/Double), or whose result is discarded.
(0,0D)VCallHresultCallearly-bound vtable callemittedvtable call of an early-bound COM method or property; check the HRESULT.
(2,69)VCallHresultCallearly-bound vtable callnever dupvtable call of an early-bound COM method or property; check the HRESULT.
(4,13)VCallR4Callearly-bound vtable callnever
(4,14)VCallR8Callearly-bound vtable callnever
(4,11)VCallStrCallearly-bound vtable callnever dupvtable call returning a 32-bit value in EAX (non-HRESULT method); push the result.
(4,12)VCallStrCallearly-bound vtable callnever dupvtable call returning a 32-bit value in EAX (non-HRESULT method); push the result.
(4,17)VCallStrCallearly-bound vtable callnever dupvtable call returning a 32-bit value in EAX (non-HRESULT method); push the result.
(4,18)VCallStrCallearly-bound vtable callnever dupvtable call returning a 32-bit value in EAX (non-HRESULT method); push the result.
(4,10)VCallUI1Callearly-bound vtable callemittedvtable call returning a Byte in AL (non-HRESULT method); push the result.
(5,3E)VarLateMemCallLdRfVarCalllate-bound IDispatchemittedLate-bound method call with arguments on a Variant-held object; result passed on by reference.
(5,42)VarLateMemCallLdVarCalllate-bound IDispatchemittedLate-bound function call by name on an object held in a Variant; push the result.
(5,44)VarLateMemCallStCalllate-bound IDispatchemittedLate-bound indexed property-put by name on an object held in a Variant.
(2,63)LitNothingLiteralNothingemittedPush a literal: LitNothing.
(2,74)FLdLateIdUnkVarLoadnever
(0,08)FLdPrLoadobject pointer, frameemittedLoad an object reference from a frame slot into the cached object register pr.
(2,EB)FLdPrLoadobject pointer, framenever dupLoad an object reference from a frame slot into the cached object register pr.
(0,21)FLdPrThisLoadobject pointer, frameemittedLoad Me for a call on the host object's built-in interface (form, UserControl, UserDocument).
(3,9E)FLdPrThisLoadobject pointer, framenever dup(alias) Frame-relative load: FLdPrThis.
(0,3E)FLdZeroAdLoadobject, frameemittedFrame-relative load: FLdZeroAd.
(0,51)FLdZeroAdLoadobject, frameemitted dup(alias) Frame-relative load: FLdZeroAd.
(3,3F)FLdZeroAdLoadobject, framenever dupFrame-relative load: FLdZeroAd.
(3,62)FLdZeroAdLoadobject, framenever dupFrame-relative load: FLdZeroAd.
(5,38)FLdZeroAryLoadnever
(0,5F)FMemLdPrLoadobject pointer, via frame pointeremittedLoad object pointer to pr from a field reached through a pointer held in a frame slot.
(3,DB)FMemLdPrLoadobject pointer, via frame pointernever dupLoad object pointer to pr from a field reached through a pointer held in a frame slot.
(0,48)ILdPrLoadobject pointer, ByRef/indirectemittedPop an address; push the object pointer read from it.
(3,1B)ILdPrLoadobject pointer, ByRef/indirectnever dupPop an address; push the object pointer read from it.
(3,4B)IWMemLdPrLoadobject pointer, W-base indirectneverLOAD through a object pointer at [W-base+offset] -> [eax], one extra dereference (4-byte, W+indirect).
(4,DB)IWMemLdPrLoadobject pointer, W-base indirectnever dupLOAD through a object pointer at [W-base+offset] -> [eax], one extra dereference (4-byte, W+indirect).
(0,22)ImpAdLdPrLoadobject pointer, globalnever
(3,AB)ImpAdLdPrLoadobject pointer, globalnever dup
(0,61)LateIdLdVarLoadlate-bound IDispatchemittedLate-bound property-get by compile-time DISPID; push the result Variant.
(4,A1)LateIdLdVarLoadlate-bound IDispatchnever dupLate-bound property-get by compile-time DISPID; push the result Variant.
(0,57)LateMemLdVarLoadlate-bound IDispatchemittedLate-bound property get (LateMemLdVar).
(4,99)LateMemLdVarLoadlate-bound IDispatchnever dupLate-bound property get (LateMemLdVar).
(0,58)MemLdPrLoadobject pointer, member via premitted(alias) Load a object pointer from [pr + offset] where pr is on the stack.
(3,7B)MemLdPrLoadobject pointer, member via prnever dup(alias) Load a object pointer from [pr + offset] where pr is on the stack.
(5,3D)VarLateMemLdRfVarLoadlate-bound IDispatchemittedLate-bound property get by name on a Variant-held object, passed on by reference.
(5,41)VarLateMemLdVarLoadlate-bound IDispatchemittedLate-bound property get by name on an object held in a Variant; push the result Variant.
(4,97)AddRefOtherneverCOM reference-count operation: AddRef.
(5,08)CExtInstUnkOtherneverType conversion (CExtInstUnk).
(0,3D)CastAdOtheremittedType conversion (CastAd).
(3,F2)CastAdOthernever dupType conversion (CastAd).
(3,F3)CastAdVarOtheremittedType conversion (CastAdVar).
(4,8D)CheckTypeOtheremittedTypeOf obj Is Class: test an object reference against an interface.
(2,6F)CheckTypeVarOtheremittedTypeOf v Is Class where the operand is a Variant.
(1,D2)IsOtheremittedIs operator: compare two object references for identity; push Boolean.
(2,73)LdPrUnkVarOtherneverFrame-slot manipulation (LdPrUnkVar).
(3,9F)LdPrVarOtheremittedFrame-slot manipulation (LdPrVar).
(3,F4)NewOtheremittedCreate a new object instance (New Class).
(0,56)NewIfNullAdOtheremittedAs New auto-instancing: create the object if Nothing, then push the reference.
(3,F6)NewIfNullAdOthernever dupAs New auto-instancing: create the object if Nothing, then push the reference.
(0,24)NewIfNullPrOtheremittedAs New auto-instancing: create the object if the variable is Nothing, then load it into pr.
(3,F7)NewIfNullPrOthernever dupAs New auto-instancing: create the object if the variable is Nothing, then load it into pr.
(3,F5)NewIfNullRfOtheremittedAs New auto-instancing: create the object if Nothing, then push the variable's address (ByRef).
(4,FA)VerifyPVarObjOtherneverType check / verify (VerifyPVarObj).
(4,F9)VerifyVarObjOtheremittedType check / verify (VerifyVarObj).
(3,E8)FMemStAdStoreobject, via frame pointeremittedStore object reference into a field reached through a pointer held in a frame slot.
(3,EF)FMemStAdFuncStoreobject, via frame pointeremittedStore object reference from a call into a field reached through a pointer held in a frame slot.
(2,F8)FStAdStoreobject, frameemittedPop a raw 32-bit address (pointer); store into frame slot [ebp+%a].
(0,19)FStAdFuncStoreobject, frameemittedStore an object reference returned by New or a call into an object variable, without an extra AddRef.
(2,FF)FStAdFuncStoreobject, framenever dupStore an object reference returned by New or a call into an object variable, without an extra AddRef.
(0,5B)FStAdFuncNoPopStoreobject, frameemittedPop a value of suffix `; store into frame slot [ebp+%a]`.
(3,9D)FStAdFuncNoPopStoreobject, framenever dupPop a value of suffix `; store into frame slot [ebp+%a]`.
(3,9C)FStAdNoPopStoreobject, frameemittedPop a value of suffix `; store into frame slot [ebp+%a]`.
(3,28)IStAdStoreobject, ByRef/indirectemittedPop value and address; write the raw 32-bit address (pointer) through the address.
(3,2F)IStAdFuncStoreobject, ByRef/indirectemittedPop value and address; write the value of suffix `` through the address.
(3,58)IWMemStAdStoreobject, W-base indirectneverSTORE through a raw 32-bit address at [W-base+offset] -> [eax], one extra dereference (4-byte (address), W+indirect).
(3,5F)IWMemStAdFuncStoreobject, W-base indirectneverSTORE through a value of suffix `` at [W-base+offset] -> [eax], one extra dereference (unknown-size, W+indirect).
(3,B8)ImpAdStAdStoreobject, globalemittedStore object reference into a module-level (global) variable.
(3,BF)ImpAdStAdFuncStoreobject, globalemittedStore through an imported address (ImpAdStAdFunc).
(4,AD)LateIdNamedStAdStorelate-bound IDispatchemittedLate-bound property-putref (Set) by DISPID with named index arguments.
(0,2C)LateIdStStorelate-bound IDispatchemittedLate-bound property-put by compile-time DISPID.
(4,A3)LateIdStStorelate-bound IDispatchnever dupLate-bound property-put by compile-time DISPID.
(4,A5)LateIdStAdStorelate-bound IDispatchemittedLate-bound property-putref by DISPID (Set o(i) = obj).
(4,A9)LateMemNamedStAdStorelate-bound IDispatchemittedLate-bound property-putref by name with named index arguments.
(4,9B)LateMemStStorelate-bound IDispatchemittedLate-bound property put (LateMemSt).
(4,9D)LateMemStAdStorelate-bound IDispatchemittedLate-bound property-putref by name (Set o.Prop = obj).
(3,88)MemStAdStoreobject, member via premittedStore a raw 32-bit address (pointer) into [pr + offset] (pr on the stack).
(3,8F)MemStAdFuncStoreobject, member via prnever
(5,43)VarLateMemStStorelate-bound IDispatchemittedLate-bound property put by name on an object held in a Variant.
(5,45)VarLateMemStAdStorelate-bound IDispatchemittedLate-bound property-putref by name on an object held in a Variant.
(4,E8)WMemStAdStoreobject, W-baseneverSTORE a raw 32-bit address at [W-base+offset] via the procedure's secondary-object pointer [ebp+10h] (W-base) (4-byte (address)).
(4,EF)WMemStAdFuncStoreobject, W-baseneverSTORE a value of suffix `` at [W-base+offset] via the procedure's secondary-object pointer [ebp+10h] (W-base) (unknown-size).
UDT / record 35 slots, 32 distinct handlers, 25 emitted

User-defined types: record assignment and destruction, UDT function returns, UDTs in Variants (public records), UDTs passed to APIs, Get/Put of records, fixed arrays inside UDTs.

SlotMnemonicOperationTypesStatusSummary
(4,2D)ImpAdCallCbFrameCalluser-defined typeemittedCall a module Function that returns a user-defined type into a frame buffer.
(5,32)CDargRefUdtConvertuser-defined typeemittedPass a UDT by reference to a late-bound call as a VT_RECORD|VT_BYREF Variant.
(0,1F)CRec2AnsiConvertuser-defined typeemittedConvert top-of-stack 2Ansi to Rec.
(0,20)CRec2UniConvertuser-defined typeemittedConvert top-of-stack 2Uni to Rec.
(2,5D)CRecAnsi2UniConvertuser-defined typenever dupConvert top-of-stack 2Uni to Rec.
(2,5E)CRecUni2AnsiConvertuser-defined typenever dupConvert top-of-stack 2Ansi to Rec.
(5,3A)CVarAryUdtConvertuser-defined typeemittedConvert an array to a Variant (v = a), descriptor-driven.
(5,33)CVarRefUdtConvertuser-defined typeemittedPass a public-record UDT ByRef to a Variant parameter (VT_RECORD|VT_BYREF).
(5,34)CVarUdtConvertuser-defined typeemittedCopy a public-record UDT into a Variant (VT_RECORD).
(0,38)CopyBytesConvertuser-defined typeemittedCopy a fixed number of bytes from one address to another (plain-data UDT assignment).
(3,CA)CopyBytesConvertuser-defined typenever dupCopy a fixed number of bytes from one address to another (plain-data UDT assignment).
(5,37)CopyBytesZeroConvertuser-defined typenever
(3,FF)DestructOFrameFree/cleanupuser-defined typeemittedInitialise (zero) a UDT temporary in the frame before a call that fills it.
(5,2A)DestructRecordFree/cleanupuser-defined typeemittedRelease the reference-counted members of a UDT (destruct before overwrite).
(5,31)EraseDestrKeepDataFree/cleanupuser-defined typenever
(4,60)EraseDestructFree/cleanupuser-defined typeemittedErase a fixed-size array of UDTs: destruct every element's reference members.
(5,16)GetRecOwn3I/Ouser-defined typeemittedFile I/O primitive: GetRecOwn3.
(5,17)GetRecOwn4I/Ouser-defined typeemittedFile I/O primitive: GetRecOwn4.
(2,79)GetRecOwner3I/Ouser-defined typenever
(2,7A)GetRecOwner4I/Ouser-defined typenever
(5,18)PutRecOwn3I/Ouser-defined typeemittedFile I/O primitive: PutRecOwn3.
(5,19)PutRecOwn4I/Ouser-defined typeemittedFile I/O primitive: PutRecOwn4.
(2,7B)PutRecOwner3I/Ouser-defined typenever
(2,7C)PutRecOwner4I/Ouser-defined typenever
(5,06)AryInRecLdPrOtheruser-defined typeemittedSafeArray operation: AryInRecLdPr.
(5,07)AryInRecLdRfOtheruser-defined typeneverSafeArray operation: AryInRecLdRf.
(5,3C)RedimPreserveVarUdtOtheruser-defined typeemittedReDim Preserve a Variant-held array of a public record type.
(5,3B)RedimVarUdtOtheruser-defined typeemittedReDim a Variant as an array of a public record type.
(4,9E)ExitProcFrameCbReturnuser-defined typeemittedReturn a user-defined type from a module Function by copying it to the caller's buffer.
(5,30)ExitProcFrameCbHresultReturnuser-defined typeemittedReturn a user-defined type from a class/COM method (HRESULT-returning) by copying it to the [out] buffer.
(4,9F)ExitProcFrameCbStackReturnuser-defined typeemittedReturn a small (8-byte) user-defined type from a module Function.
(4,F5)AssignRecordStoreuser-defined typeemittedAssign one UDT to another (deep copy honouring String/Variant/Object members).
(5,04)StAryRecCopyStoreuser-defined typeemittedAssign one dynamic array of UDTs to another (deep copy).
(5,03)StAryRecMoveStoreuser-defined typeemittedMove a temporary array of UDTs (function result) into an array variable.
(5,35)StUdtVarStoreuser-defined typeemittedStore a Variant holding a record into a UDT variable (udt = v).
Array 87 slots, 60 distinct handlers, 50 emitted

SAFEARRAY operations: element loads/stores, ReDim/Erase, bounds, array assignment and For Each over arrays.

SlotMnemonicOperationTypesStatusSummary
(4,76)ForEachAryVarBranch/loopFor Each over an arrayemittedStart a For Each loop over an array, with a Variant control variable.
(4,77)NextEachAryVarBranch/loopFor Each over an arrayemittedNext of a For Each loop over an array, with a Variant control variable.
(0,9F)Ary1LdCyLoademittedSafeArray operation: Ary1LdCy.
(0,A0)Ary1LdFPR4LoademittedSafeArray operation: Ary1LdFPR4.
(2,99)Ary1LdFPR4Loadnever dup(alias) SafeArray operation: Ary1LdFPR4.
(0,A1)Ary1LdFPR8LoademittedSafeArray operation: Ary1LdFPR8.
(2,9A)Ary1LdFPR8Loadnever dup(alias) SafeArray operation: Ary1LdFPR8.
(0,9D)Ary1LdI2LoademittedSafeArray operation: Ary1LdI2.
(2,91)Ary1LdI2Loadnever dup(alias) SafeArray operation: Ary1LdI2.
(0,9E)Ary1LdI4LoademittedSafeArray operation: Ary1LdI4.
(2,92)Ary1LdI4Loadnever dup(alias) SafeArray operation: Ary1LdI4.
(2,93)Ary1LdI4Loadnever dup(alias) SafeArray operation: Ary1LdI4.
(2,97)Ary1LdI4Loadnever dup(alias) SafeArray operation: Ary1LdI4.
(2,98)Ary1LdI4Loadnever dup(alias) SafeArray operation: Ary1LdI4.
(0,41)Ary1LdPrLoademittedSafeArray operation: Ary1LdPr.
(2,9B)Ary1LdPrLoadnever dup(alias) SafeArray operation: Ary1LdPr.
(2,94)Ary1LdR8Loadnever dupSafeArray operation: Ary1LdR8.
(2,95)Ary1LdR8Loadnever dup(alias) SafeArray operation: Ary1LdR8.
(0,40)Ary1LdRfLoademittedSafeArray operation: Ary1LdRf.
(2,9C)Ary1LdRfLoadnever dup(alias) SafeArray operation: Ary1LdRf.
(2,96)Ary1LdRfVarLoademittedSafeArray operation: Ary1LdRfVar.
(2,B2)Ary1LdRfVargLoademittedSafeArray operation: Ary1LdRfVarg.
(2,B4)Ary1LdRfVargParamLoademittedSafeArray operation: Ary1LdRfVargParam.
(2,90)Ary1LdUI1LoademittedSafeArray operation: Ary1LdUI1.
(2,9D)Ary1LdVarLoadneverSafeArray operation: Ary1LdVar.
(2,B3)Ary1LdVargLoadneverSafeArray operation: Ary1LdVarg.
(0,A7)AryLdPrLoademittedCompute the address of a multi-dimensional array element and load it into pr.
(2,8D)AryLdPrLoadnever dupCompute the address of a multi-dimensional array element and load it into pr.
(0,A8)AryLdRfLoadnever
(2,8E)AryLdRfLoadnever dup
(4,AF)VarIndexLdRfVarLoademittedIndex into an array held in a Variant and push a reference to the element Variant.
(4,F2)VarIndexLdRfVarLockLoademittedSafeArray operation: VarIndexLdRfVarLock.
(4,AE)VarIndexLdVarLoademittedSafeArray operation: VarIndexLdVar.
(5,0A)ArrayRebase1VarOtheremittedSafeArray operation: ArrayRebase1Var.
(0,26)AryDescTempOtheremittedSafeArray operation: AryDescTemp.
(3,0F)AryDescTempOthernever dupSafeArray operation: AryDescTemp.
(0,2E)AryLockOtheremittedSafeArray operation: AryLock.
(3,0D)AryLockOthernever dupSafeArray operation: AryLock.
(0,2D)AryUnlockOtheremittedSafeArray operation: AryUnlock.
(3,0E)AryUnlockOthernever dupSafeArray operation: AryUnlock.
(0,5A)EraseOtheremittedErase an array: Erase.
(2,C3)EraseOthernever dup(alias) Erase an array: Erase.
(4,CF)EraseNoPopOtherneverFrame-slot manipulation (EraseNoPop).
(0,4C)FnLBoundOtheremittedSafeArray operation: FnLBound.
(2,CA)FnLBoundOthernever dup(alias) SafeArray operation: FnLBound.
(2,CB)FnUBoundOtheremittedSafeArray operation: FnUBound.
(4,8E)RedimOtheremittedResize a dynamic array (Redim).
(4,8F)RedimPreserveOtheremittedResize a dynamic array (RedimPreserve).
(4,91)RedimPreserveVarOtheremittedReDim Preserve an array held in a Variant.
(4,90)RedimVarOtheremittedReDim an array held in a Variant.
(2,A8)Ary1StAdStoreemittedSafeArray operation: Ary1StAd.
(2,AF)Ary1StAdFuncStoreneverSafeArray operation: Ary1StAdFunc.
(0,A4)Ary1StCyStoreemittedSafeArray operation: Ary1StCy.
(2,A4)Ary1StCyStorenever dup(alias) SafeArray operation: Ary1StCy.
(2,A5)Ary1StCyStorenever dup(alias) SafeArray operation: Ary1StCy.
(0,A5)Ary1StFPR4StoreemittedSafeArray operation: Ary1StFPR4.
(2,A9)Ary1StFPR4Storenever dup(alias) SafeArray operation: Ary1StFPR4.
(0,A6)Ary1StFPR8StoreemittedSafeArray operation: Ary1StFPR8.
(2,AA)Ary1StFPR8Storenever dup(alias) SafeArray operation: Ary1StFPR8.
(0,A2)Ary1StI2StoreemittedSafeArray operation: Ary1StI2.
(2,A1)Ary1StI2Storenever dup(alias) SafeArray operation: Ary1StI2.
(0,A3)Ary1StI4StoreemittedSafeArray operation: Ary1StI4.
(2,A2)Ary1StR4Storenever dupSafeArray operation: Ary1StR4.
(2,A3)Ary1StR4Storenever dup(alias) SafeArray operation: Ary1StR4.
(2,A7)Ary1StStrStoreneverSafeArray operation: Ary1StStr.
(0,3B)Ary1StStrCopyStoreemittedSafeArray operation: Ary1StStrCopy.
(2,B1)Ary1StStrCopyStorenever dup(alias) SafeArray operation: Ary1StStrCopy.
(2,A0)Ary1StUI1StoreemittedSafeArray operation: Ary1StUI1.
(0,52)Ary1StVarStoreemittedSafeArray operation: Ary1StVar.
(2,A6)Ary1StVarStorenever dup(alias) SafeArray operation: Ary1StVar.
(2,AB)Ary1StVarAdStoreemittedSafeArray operation: Ary1StVarAd.
(2,AC)Ary1StVarAdFuncStoreneverSafeArray operation: Ary1StVarAdFunc.
(2,B0)Ary1StVarCopyStoreemittedSafeArray operation: Ary1StVarCopy.
(2,AD)Ary1StVarUnkStoreemittedSafeArray operation: Ary1StVarUnk.
(2,AE)Ary1StVarUnkFuncStoreneverSafeArray operation: Ary1StVarUnkFunc.
(2,B5)Ary1StVargStoreemittedSafeArray operation: Ary1StVarg.
(2,B7)Ary1StVargAdStoreemittedSafeArray operation: Ary1StVargAd.
(2,B8)Ary1StVargAdFuncStoreneverSafeArray operation: Ary1StVargAdFunc.
(2,B6)Ary1StVargCopyStoreemittedSafeArray operation: Ary1StVargCopy.
(2,B9)Ary1StVargUnkStoreemittedSafeArray operation: Ary1StVargUnk.
(2,BA)Ary1StVargUnkFuncStoreneverSafeArray operation: Ary1StVargUnkFunc.
(2,8F)ParmAry1StStoreemittedSafeArray operation: ParmAry1St.
(5,02)StAryCopyStoreemittedSafeArray operation: StAryCopy.
(5,01)StAryMoveStoreemittedSafeArray operation: StAryMove.
(5,36)StAryVarStoreemittedSafeArray operation: StAryVar.
(4,B0)VarIndexStStoreemittedSafeArray operation: VarIndexSt.
(4,B1)VarIndexStAdStoreemittedSet an element of a Variant-held array to an object.
Conversion 140 slots, 91 distinct handlers, 96 emitted

Type conversions, implicit and explicit (CInt, CStr, ...). The detail column gives source -> target.

SlotMnemonicOperationTypesStatusSummary
(2,34)CAdVarConvertemittedConvert top-of-stack Variant to address.
(0,53)CBoolCyConvertCurrency -> BooleanemittedConvert top-of-stack Currency to Boolean.
(2,55)CBoolCyConvertCurrency -> Booleannever dup(alias) Convert top-of-stack Currency to Boolean.
(2,52)CBoolI4ConvertLong -> BooleanemittedConvert top-of-stack Long to Boolean.
(2,53)CBoolR4ConvertSingle -> BooleanemittedConvert top-of-stack Single to Boolean.
(2,54)CBoolR4ConvertSingle -> Booleanemitted dup(alias) Convert top-of-stack Single to Boolean.
(2,57)CBoolStrConvertString -> BooleanemittedConvert top-of-stack String to Boolean.
(2,50)CBoolUI1ConvertByte -> Booleanemitted dupConvert top-of-stack Byte to Boolean.
(2,51)CBoolUI1ConvertByte -> Booleanemitted(alias) Convert top-of-stack Byte to Boolean.
(2,56)CBoolVarConvertVariant -> BooleanemittedImplicitly coerce a Variant to Boolean (assignment, typed argument or typed expression context).
(5,1B)CBoolVarNullConvertVarNull -> BooleanemittedType conversion (CBoolVarNull).
(0,EF)CCyI2ConvertInteger/Boolean -> CurrencyemittedConvert top-of-stack Integer to Currency.
(2,04)CCyI2ConvertInteger/Boolean -> Currencynever dup(alias) Convert top-of-stack Integer to Currency.
(2,05)CCyI2ConvertInteger/Boolean -> Currencynever dup(alias) Convert top-of-stack Integer to Currency.
(0,F0)CCyI4ConvertLong -> CurrencyemittedConvert top-of-stack Long to Currency.
(2,06)CCyI4ConvertLong -> Currencynever dup(alias) Convert top-of-stack Long to Currency.
(0,F1)CCyR4ConvertSingle -> CurrencyemittedConvert top-of-stack Single to Currency.
(2,07)CCyR4ConvertSingle -> Currencynever dup(alias) Convert top-of-stack Single to Currency.
(2,08)CCyR4ConvertSingle -> Currencynever dup(alias) Convert top-of-stack Single to Currency.
(2,0B)CCyStrConvertString -> CurrencyemittedConvert top-of-stack String to Currency.
(2,0A)CCyVarConvertVariant -> CurrencyemittedImplicitly coerce a Variant to Currency (assignment, typed argument or typed expression context).
(3,93)CDargRefConvertemittedConvert top-of-stack Ref to Darg.
(0,F2)CDateR8ConvertDouble -> DateemittedType conversion (CDateR8).
(2,47)CDateR8ConvertDouble -> Datenever dup(alias) Type conversion (CDateR8).
(4,C9)CDateStrConvertString -> DateemittedType conversion (CDateStr).
(0,E6)CI2CyConvertCurrency -> Integer/BooleanemittedConvert top-of-stack Currency to Integer.
(2,19)CI2CyConvertCurrency -> Integer/Booleannever dup(alias) Convert top-of-stack Currency to Integer.
(0,E4)CI2I4ConvertLong -> Integer/BooleanemittedConvert top-of-stack Long to Integer.
(2,16)CI2I4ConvertLong -> Integer/Booleannever dup(alias) Convert top-of-stack Long to Integer.
(0,E5)CI2R8ConvertDouble -> Integer/BooleanemittedConvert top-of-stack Double to Integer.
(2,17)CI2R8ConvertDouble -> Integer/Booleannever dup(alias) Convert top-of-stack Double to Integer.
(2,18)CI2R8ConvertDouble -> Integer/Booleannever dup(alias) Convert top-of-stack Double to Integer.
(2,1B)CI2StrConvertString -> Integer/BooleanemittedConvert top-of-stack String to Integer.
(2,14)CI2UI1ConvertByte -> Integer/BooleanemittedConvert top-of-stack Byte to Integer.
(0,55)CI2VarConvertVariant -> Integer/BooleanemittedImplicitly coerce a Variant to Integer (assignment, typed argument or typed expression context).
(2,1A)CI2VarConvertVariant -> Integer/Booleannever dup(duplicate slot of (0,55) CI2Var) Implicitly coerce a Variant to Integer (assignment, typed argument or typed expression context).
(0,E9)CI4CyConvertCurrency -> LongemittedConvert top-of-stack Currency to Long.
(2,21)CI4CyConvertCurrency -> Longnever dup(alias) Convert top-of-stack Currency to Long.
(0,E8)CI4R8ConvertDouble -> LongemittedConvert top-of-stack Double to Long.
(2,1F)CI4R8ConvertDouble -> Longnever dup(alias) Convert top-of-stack Double to Long.
(2,20)CI4R8ConvertDouble -> Longnever dup(alias) Convert top-of-stack Double to Long.
(0,50)CI4StrConvertString -> LongemittedConvert top-of-stack String to Long.
(2,23)CI4StrConvertString -> Longnever dup(alias) Convert top-of-stack String to Long.
(0,E7)CI4UI1ConvertByte -> LongemittedConvert top-of-stack Byte to Long.
(2,1C)CI4UI1ConvertByte -> Longnever dup(alias) Convert top-of-stack Byte to Long.
(2,1D)CI4UI1ConvertByte -> Longnever dup(alias) Convert top-of-stack Byte to Long.
(2,22)CI4VarConvertVariant -> LongemittedImplicitly coerce a Variant to Long (assignment, typed argument or typed expression context).
(2,26)CR4I4ConvertLong -> Singlenever dup(duplicate slot of (0,EC) CR8I4) Convert top-of-stack Long to Double.
(2,2E)CR4I4ConvertLong -> Singlenever dup(duplicate slot of (0,EC) CR8I4) Convert top-of-stack Long to Double.
(0,EA)CR4R4ConvertSingle -> SingleemittedRound the floating-point value on the FPU stack to Single precision.
(2,27)CR4R8ConvertDouble -> Singlenever dup(duplicate slot of (0,EA) CR4R4) Round the floating-point value on the FPU stack to Single precision.
(2,28)CR4R8ConvertDouble -> Singlenever dup(duplicate slot of (0,EA) CR4R4) Round the floating-point value on the FPU stack to Single precision.
(2,2B)CR4StrConvertString -> SingleemittedConvert top-of-stack String to Single.
(0,42)CR4VarConvertVariant -> Singleemitted dupImplicitly coerce a Variant to Double (the slot is named CR4Var, but the compiler uses it for Double targets).
(0,EE)CR8CyConvertCurrency -> DoubleemittedConvert a Currency on the evaluation stack to floating point (FPU).
(2,29)CR8CyConvertCurrency -> Doublenever dup(duplicate slot of (0,EE) CR8Cy) Convert a Currency on the evaluation stack to floating point (FPU).
(2,31)CR8CyConvertCurrency -> Doublenever dup(duplicate slot of (0,EE) CR8Cy) Convert a Currency on the evaluation stack to floating point (FPU).
(0,EB)CR8I2ConvertInteger/Boolean -> DoubleemittedConvert top-of-stack Integer to Double.
(0,EC)CR8I4ConvertLong -> DoubleemittedConvert top-of-stack Long to Double.
(2,2F)CR8R4ConvertSingle -> Doublenever dup(duplicate slot of (0,ED) CR8R8) Retype the FPU value as Double (used for Date to Double).
(2,30)CR8R4ConvertSingle -> Doublenever dup(duplicate slot of (0,ED) CR8R8) Retype the FPU value as Double (used for Date to Double).
(0,ED)CR8R8ConvertDouble -> DoubleemittedRetype the FPU value as Double (used for Date to Double).
(2,33)CR8StrConvertString -> DoubleemittedConvert top-of-stack String to Double.
(2,2A)CR8VarConvertVariant -> DoubleemittedImplicitly coerce a Variant to Single (the slot is named CR8Var, but the compiler uses it for Single targets).
(2,32)CR8VarConvertVariant -> Doublenever dup(duplicate slot of (2,2A) CR8Var) Implicitly coerce a Variant to Single (the slot is named CR8Var, but the compiler uses it for Single targets).
(2,35)CRefVarAryConvertemittedType conversion (CRefVarAry).
(2,3F)CSngConvertDouble/Date -> Singlenever dupType conversion (CSng).
(2,40)CSngConvertDouble/Date -> Singleemitted(alias) Type conversion (CSng).
(0,34)CStr2AnsiConvert2Ansi -> StringemittedConvert a String argument from Unicode to ANSI for a Declare'd API call.
(2,5A)CStr2AnsiConvert2Ansi -> Stringnever dup(duplicate slot of (0,34) CStr2Ansi) Convert a String argument from Unicode to ANSI for a Declare'd API call.
(2,58)CStr2UniConvert2Uni -> StringemittedConvert a String from ANSI back to Unicode after a Declare'd API call.
(2,5F)CStr2VecConvert2Vec -> StringemittedConvert a String to a Byte array (b() = s).
(2,5B)CStrAry2AnsiConvertAry2Ansi -> StringemittedType conversion (CStrAry2Ansi).
(2,59)CStrAry2UniConvertAry2Uni -> StringemittedType conversion (CStrAry2Uni).
(4,C7)CStrBoolConvertBoolean -> StringemittedConvert top-of-stack Boolean to String.
(2,01)CStrCyConvertCurrency -> StringemittedConvert top-of-stack Currency to String.
(4,C8)CStrDateConvertDate -> StringemittedType conversion (CStrDate).
(1,FC)CStrI2ConvertInteger/Boolean -> Stringemitted dupConvert a Byte to a String. (The slot is named CStrI2, but the compiler uses it for Byte sources.)
(1,FE)CStrI4ConvertLong -> StringemittedConvert top-of-stack Long to String.
(1,FF)CStrR4ConvertSingle -> StringemittedConvert top-of-stack Single to String.
(2,00)CStrR8ConvertDouble -> StringemittedConvert top-of-stack Double to String.
(1,FD)CStrUI1ConvertByte -> StringemittedConvert an Integer (or Boolean) to a String. (The slot is named CStrUI1, but the compiler uses it for Integer sources.)
(2,02)CStrVarConvertVariant -> StringemittedImplicitly coerce a Variant to String (assignment, typed argument or typed expression context).
(0,60)CStrVarTmpConvertVarTmp -> StringemittedConvert a Variant temporary to a String and free the temporary.
(3,FD)CStrVarTmpConvertVarTmp -> Stringnever dup(duplicate slot of (0,60) CStrVarTmp) Convert a Variant temporary to a String and free the temporary.
(3,FE)CStrVarValConvertVarVal -> StringemittedConvert a Variant to a String in a temporary, without consuming the Variant (ByVal String argument).
(2,38)CUI1BoolConvertBoolean -> ByteemittedConvert top-of-stack Boolean to Byte.
(2,11)CUI1CyConvertCurrency -> ByteemittedConvert top-of-stack Currency to Byte.
(2,0D)CUI1I2ConvertInteger/Boolean -> ByteemittedConvert top-of-stack Integer to Byte.
(2,0E)CUI1I4ConvertLong -> ByteemittedConvert top-of-stack Long to Byte.
(2,0F)CUI1R4ConvertSingle -> ByteemittedConvert top-of-stack Single to Byte.
(2,10)CUI1R4ConvertSingle -> Byteemitted dup(alias) Convert top-of-stack Single to Byte.
(2,13)CUI1StrConvertString -> ByteemittedConvert top-of-stack String to Byte.
(2,12)CUI1VarConvertVariant -> ByteemittedImplicitly coerce a Variant to Byte (assignment, typed argument or typed expression context).
(2,71)CUnkVarConvertemittedType conversion (CUnkVar).
(2,60)CVar2VecConvert2Vec -> VariantemittedType conversion (CVar2Vec).
(3,6F)CVarAdConvertobject -> VariantemittedWrap an object reference in a Variant (VT_DISPATCH) temporary.
(3,FC)CVarAryVargConvertAryVarg -> Variantnever
(3,F8)CVarBoolI2ConvertBoolI2 -> VariantemittedConvert top-of-stack Integer to VarBool.
(0,3F)CVarCyConvertCurrency -> VariantemittedConvert a Currency to a Variant (VT_CY) in a temporary.
(3,6C)CVarCyConvertCurrency -> Variantnever dupConvert a Currency to a Variant (VT_CY) in a temporary.
(3,FB)CVarDateConvertDate -> VariantemittedConvert a Date to a Variant (VT_DATE) in a temporary.
(3,F9)CVarDateVarConvertDateVar -> Variantnever
(3,FA)CVarErrI4ConvertErrI4 -> VariantemittedBuild a VT_ERROR Variant from a Long (CVErr).
(0,44)CVarI2ConvertInteger/Boolean -> Variantemitted(alias) Convert top-of-stack Integer to Variant.
(3,68)CVarI2ConvertInteger/Boolean -> Variantnever dup(alias) Convert top-of-stack Integer to Variant.
(3,69)CVarI4ConvertLong -> VariantemittedConvert top-of-stack Long to Variant.
(3,6A)CVarR4ConvertSingle -> VariantemittedConvert top-of-stack Single to Variant.
(3,6B)CVarR8ConvertDouble -> VariantemittedConvert top-of-stack Double to Variant.
(0,4D)CVarRefConvertRef -> VariantemittedPass a typed variable ByRef to a Variant parameter (build a VT_BYREF Variant in a temporary).
(3,94)CVarRefConvertRef -> Variantnever dupPass a typed variable ByRef to a Variant parameter (build a VT_BYREF Variant in a temporary).
(0,46)CVarStrConvertString -> VariantemittedConvert top-of-stack String to Variant.
(3,6E)CVarStrConvertString -> Variantnever dupConvert top-of-stack String to Variant.
(3,67)CVarUI1ConvertByte -> VariantemittedConvert top-of-stack Byte to Variant.
(2,72)CVarUnkConvertIUnknown -> VariantemittedConvert an IUnknown reference to a Variant (VT_UNKNOWN).
(2,61)CVec2VarConvertnever
(2,4D)FnCBoolVarConvertVariant -> BooleanemittedType conversion (FnCBoolVar).
(2,44)FnCByteVarConvertVariant -> ByteemittedType conversion (FnCByteVar).
(2,49)FnCCurVarConvertVariant -> CurrencyemittedType conversion (FnCCurVar).
(2,4E)FnCDateVarConvertVariant -> DateemittedType conversion (FnCDateVar).
(2,4F)FnCDateVarConvertVariant -> Dateemitted dup(alias) Type conversion (FnCDateVar).
(2,39)FnCDblCyConvertCurrency -> DoubleemittedType conversion (FnCDblCy).
(2,3A)FnCDblR8ConvertDouble -> DoubleemittedType conversion (FnCDblR8).
(2,3B)FnCDblR8ConvertDouble -> Doubleemitted dup(alias) Type conversion (FnCDblR8).
(2,48)FnCDblVarConvertVariant -> DoubleemittedType conversion (FnCDblVar).
(2,45)FnCIntVarConvertVariant -> IntegeremittedType conversion (FnCIntVar).
(2,46)FnCLngVarConvertVariant -> LongemittedType conversion (FnCLngVar).
(2,41)FnCSngCyConvertCurrency -> SingleemittedType conversion (FnCSngCy).
(2,24)FnCSngI2ConvertInteger/Boolean -> Singlenever dupType conversion (FnCSngI2).
(2,25)FnCSngI2ConvertInteger/Boolean -> Singlenever dup(alias) Type conversion (FnCSngI2).
(2,2C)FnCSngI2ConvertInteger/Boolean -> Singlenever dup(alias) Type conversion (FnCSngI2).
(2,2D)FnCSngI2ConvertInteger/Boolean -> Singlenever dup(alias) Type conversion (FnCSngI2).
(2,3C)FnCSngI2ConvertInteger/Boolean -> Singlenever dup(alias) Type conversion (FnCSngI2).
(2,3D)FnCSngI2ConvertInteger/Boolean -> Singlenever dup(alias) Type conversion (FnCSngI2).
(2,3E)FnCSngI4ConvertLong -> SingleemittedType conversion (FnCSngI4).
(2,43)FnCSngStrConvertString -> Singleemitted dupType conversion (FnCSngStr).
(2,42)FnCSngVarConvertVariant -> SingleemittedType conversion (FnCSngVar).
(2,4B)FnCStrVarConvertVariant -> StringemittedType conversion (FnCStrVar).
(0,5D)HardTypeConvertemittedType conversion (HardType).
(3,02)HardTypeConvertnever dup(alias) Type conversion (HardType).
Control flow 27 slots, 18 distinct handlers, 15 emitted

Branches, statement boundaries (BoS), GoSub/On GoTo, End/Stop and For Each exits.

SlotMnemonicOperationTypesStatusSummary
(5,0B)AssertBranch/loopneverControl-flow primitive: Assert.
(0,00)BoSBranch/loopemittedControl-flow primitive: BoS.
(0,02)BoSBranch/loopnever dup(alias) Control-flow primitive: BoS.
(2,C4)BoSBranch/loopnever dupControl-flow primitive: BoS.
(5,1C)BoSBranch/loopnever dupControl-flow primitive: BoS.
(0,1E)BranchBranch/loopemittedControl flow branch (Branch).
(3,03)BranchBranch/loopnever dupControl flow branch (Branch).
(0,1C)BranchFBranch/loopemittedControl flow branch (BranchF).
(3,04)BranchFBranch/loopnever dupControl flow branch (BranchF).
(0,5C)BranchFVarBranch/loopnever
(3,05)BranchFVarBranch/loopnever dup
(3,06)BranchFVarFreeBranch/loopnever
(0,1D)BranchTBranch/loopemittedPop a Boolean and branch if it is True.
(3,07)BranchTBranch/loopnever dupPop a Boolean and branch if it is True.
(3,08)BranchTVarBranch/loopnever
(3,09)BranchTVarFreeBranch/loopnever
(2,C8)EndBranch/loopemittedControl-flow primitive: End.
(3,CE)ExitForAryVarBranch/loopFor Each exitemittedExit For out of a For Each loop over an array, with a Variant control variable.
(3,CB)ExitForCollObjBranch/loopFor Each exitemitted dupExit For out of a For Each over a collection whose control variable is a specific class.
(3,CC)ExitForCollObjBranch/loopFor Each exitemitted dupExit For out of a For Each over a collection whose control variable is a specific class.
(3,CD)ExitForCollObjBranch/loopFor Each exitemittedExit For out of a For Each over a collection whose control variable is a specific class.
(3,CF)ExitForVarBranch/loopFor Each exitemittedExit For out of a For Each over a Variant-held collection/array.
(3,0A)GosubBranch/loopemittedPush a return address and jump to a local GoSub label.
(4,95)OnGosubBranch/loopemittedComputed On n GoSub: pop an Integer selector and GoSub to the n-th label.
(4,96)OnGotoBranch/loopemittedComputed On n GoTo: pop an Integer selector and jump to the n-th label.
(2,C9)ReturnBranch/loopemittedControl-flow primitive: Return.
(2,C2)StopBranch/loopemittedControl-flow primitive: Stop.
Error handling 7 slots, 4 distinct handlers, 4 emitted

On Error, Resume, Error and the LastDllError capture after Declare calls.

SlotMnemonicOperationTypesStatusSummary
(0,45)ErrorOtheremittedError n statement: raise run-time error n.
(2,C1)ErrorOthernever dup(duplicate slot of (0,45) Error) Error n statement: raise run-time error n.
(0,4B)OnErrorGotoOtheremittedOn Error statement: set the procedure's error-handling mode.
(3,0B)OnErrorGotoOthernever dupOn Error statement: set the procedure's error-handling mode.
(3,0C)ResumeOtheremittedResume statement: leave an error handler and continue execution.
(0,3C)SetLastSystemErrorOtheremittedCapture GetLastError after a Declare'd API call (for Err.LastDllError).
(2,62)SetLastSystemErrorOthernever dup(duplicate slot of (0,3C) SetLastSystemError) Capture GetLastError after a Declare'd API call (for Err.LastDllError).
Procedure call/return 37 slots, 18 distinct handlers, 16 emitted

Calls to module procedures, Declare'd APIs and runtime functions, and procedure epilogues (ExitProc*).

SlotMnemonicOperationTypesStatusSummary
(0,0C)ImpAdCallCyCallmodule procedure / Declare / runtimeemittedCall a procedure/import that returns Currency (EDX:EAX); push the result.
(4,25)ImpAdCallCyCallmodule procedure / Declare / runtimenever dupCall a procedure/import that returns Currency (EDX:EAX); push the result.
(0,0A)ImpAdCallFPR4Callmodule procedure / Declare / runtimeemittedCall a procedure or import whose result is not returned in EAX: Subs, discarded results, and FPU/Variant returns.
(4,29)ImpAdCallFPR4Callmodule procedure / Declare / runtimenever dupCall a procedure or import whose result is not returned in EAX: Subs, discarded results, and FPU/Variant returns.
(4,2A)ImpAdCallFPR4Callmodule procedure / Declare / runtimenever dupCall a procedure or import whose result is not returned in EAX: Subs, discarded results, and FPU/Variant returns.
(4,2C)ImpAdCallFPR4Callmodule procedure / Declare / runtimenever dupCall a procedure or import whose result is not returned in EAX: Subs, discarded results, and FPU/Variant returns.
(0,09)ImpAdCallHresultCallmodule procedure / Declare / runtimeemittedCall an HRESULT-returning runtime helper; raise on failure.
(4,4F)ImpAdCallHresultCallmodule procedure / Declare / runtimenever dupCall an HRESULT-returning runtime helper; raise on failure.
(0,0B)ImpAdCallI2Callmodule procedure / Declare / runtimeemittedCall a procedure or import and push its 32-bit EAX result (Integer, Boolean, String or Object returns).
(0,5E)ImpAdCallI4Callmodule procedure / Declare / runtimeemitted dupCall a procedure or import and push its 32-bit Long result (EAX).
(4,21)ImpAdCallI4Callmodule procedure / Declare / runtimenever dupCall a procedure or import and push its 32-bit EAX result (Integer, Boolean, String or Object returns).
(4,22)ImpAdCallI4Callmodule procedure / Declare / runtimenever dupCall a procedure or import and push its 32-bit EAX result (Integer, Boolean, String or Object returns).
(4,27)ImpAdCallI4Callmodule procedure / Declare / runtimenever dupCall a procedure or import and push its 32-bit EAX result (Integer, Boolean, String or Object returns).
(4,28)ImpAdCallI4Callmodule procedure / Declare / runtimenever dupCall a procedure or import and push its 32-bit EAX result (Integer, Boolean, String or Object returns).
(5,1E)ImpAdCallNonVirtCallmodule procedure / Declare / runtimeemittedNon-virtual (direct) call to a Friend procedure of a class.
(4,23)ImpAdCallR4Callmodule procedure / Declare / runtimenever
(4,24)ImpAdCallR8Callmodule procedure / Declare / runtimenever
(4,20)ImpAdCallUI1Callmodule procedure / Declare / runtimeemittedCall a runtime/import function that returns a Byte (AL); push the result.
(3,95)ExitProcCbReturnVariant via bufferemittedReturn from a module Function returning a Variant (copy the result to the caller's buffer).
(5,2F)ExitProcCbHresultReturnCOM method valueemittedReturn from a class/form method that produces a value: copy it to the [out, retval] parameter and return S_OK.
(3,96)ExitProcCbStackReturnstack argsnever
(0,18)ExitProcCyReturnCurrencyemittedReturn from a Function whose return type is Currency.
(2,D1)ExitProcCyReturnCurrencynever dupReturn from a Function whose return type is Currency.
(0,13)ExitProcHresultReturnCOM method (HRESULT)emittedReturn S_OK from a class/form method that produces no value (Sub, Property Let/Set).
(2,6D)ExitProcHresultReturnCOM method (HRESULT)never dupReturn S_OK from a class/form method that produces no value (Sub, Property Let/Set).
(0,15)ExitProcI2ReturnInteger/BooleanemittedReturn from a module Function returning Integer or Boolean.
(2,CD)ExitProcI2ReturnInteger/Booleannever dupReturn from a module Function returning Integer or Boolean.
(0,14)ExitProcI4ReturnLong/String/SubemittedReturn from a module Sub, or from a Function returning Long or String.
(0,16)ExitProcR4ReturnSingleemittedReturn from a module Function returning Single (FPU).
(2,CF)ExitProcR4ReturnSinglenever dupReturn from a module Function returning Single (FPU).
(0,17)ExitProcR8ReturnDouble/DateemittedReturn from a Function whose return type is Double or Date (FPU return).
(2,D0)ExitProcR8ReturnDouble/Datenever dupReturn from a Function whose return type is Double or Date (FPU return).
(2,CE)ExitProcStrReturnStringnever dupReturn from a module Sub, or from a Function returning Long or String.
(2,D3)ExitProcStrReturnStringnever dup(duplicate slot of (0,14) ExitProcI4) Return from a module Sub, or from a Function returning Long or String.
(2,D4)ExitProcStrReturnStringnever dup(duplicate slot of (0,14) ExitProcI4) Return from a module Sub, or from a Function returning Long or String.
(2,D5)ExitProcStrReturnStringnever dup(duplicate slot of (0,14) ExitProcI4) Return from a module Sub, or from a Function returning Long or String.
(2,CC)ExitProcUI1ReturnByteemittedReturn from a Function whose return type is Byte.
File I/O & Print 43 slots, 43 distinct handlers, 20 emitted

Open/Close, Get/Put, Input/Write/Print #, Lock and Seek, plus the never-emitted legacy per-item Print opcodes.

SlotMnemonicOperationTypesStatusSummary
(3,3D)CloseI/OemittedFile I/O primitive: Close.
(3,3E)CloseAllI/OemittedFile I/O primitive: CloseAll.
(2,75)GetRec3I/OemittedFile I/O primitive: GetRec3.
(2,76)GetRec4I/OemittedFile I/O primitive: GetRec4.
(5,12)GetRecFxStr3I/OemittedFile I/O primitive: GetRecFxStr3.
(5,13)GetRecFxStr4I/OemittedFile I/O primitive: GetRecFxStr4.
(2,7D)InputI/OneverFile I/O primitive: Input.
(2,7E)InputDoneI/OneverFile I/O primitive: InputDone.
(5,10)InputFileI/OemittedInput # statement: read a list of items, one descriptor-driven call.
(2,87)InputItemBoolI/OneverFile I/O primitive: InputItemBool.
(2,84)InputItemCyI/OneverFile I/O primitive: InputItemCy.
(2,88)InputItemDateI/OneverFile I/O primitive: InputItemDate.
(2,80)InputItemI2I/OneverFile I/O primitive: InputItemI2.
(2,81)InputItemI4I/OneverFile I/O primitive: InputItemI4.
(2,82)InputItemR4I/OneverFile I/O primitive: InputItemR4.
(2,83)InputItemR8I/OneverFile I/O primitive: InputItemR8.
(2,86)InputItemStrI/OneverFile I/O primitive: InputItemStr.
(2,7F)InputItemUI1I/OneverFile I/O primitive: InputItemUI1.
(2,85)InputItemVarI/OneverFile I/O primitive: InputItemVar.
(2,C0)LineInputStrI/OemittedFile I/O primitive: LineInputStr.
(2,BF)LineInputVarI/OemittedFile I/O primitive: LineInputVar.
(4,5E)LockFileI/OemittedLock / Unlock statement.
(1,FB)NameFileI/OemittedFile I/O primitive: NameFile.
(4,5D)OpenFileI/OemittedOpen statement: pop file name, file number and record length; open the file.
(3,32)PrintChanI/OneverLegacy per-item Print opcode (selects the output channel (file number)); never emitted by VB6 SP6.
(3,34)PrintCommaI/OneverLegacy per-item Print opcode (advances to the next print zone (,)); never emitted by VB6 SP6.
(3,35)PrintEosI/OneverLegacy per-item Print opcode (ends the statement (flushes, no newline)); never emitted by VB6 SP6.
(5,0E)PrintFileI/OemittedWrite a value to a #-numbered file or to the immediate window.
(3,37)PrintItemCommaI/OneverLegacy per-item Print opcode (prints one item followed by ,); never emitted by VB6 SP6.
(3,39)PrintItemNLI/OneverLegacy per-item Print opcode (prints one item followed by a newline); never emitted by VB6 SP6.
(3,38)PrintItemSemiI/OneverLegacy per-item Print opcode (prints one item followed by ;); never emitted by VB6 SP6.
(3,36)PrintNLI/OneverLegacy per-item Print opcode (writes a newline); never emitted by VB6 SP6.
(3,3A)PrintObjI/Onever
(5,0D)PrintObjectI/OemittedPrint method on an object (form, picture box, Printer): one descriptor-driven call for the whole item list.
(3,3B)PrintSpcI/OneverLegacy per-item Print opcode (writes Spc(n) spaces); never emitted by VB6 SP6.
(3,3C)PrintTabI/OneverLegacy per-item Print opcode (moves to Tab(n) column); never emitted by VB6 SP6.
(2,77)PutRec3I/OemittedFile I/O primitive: PutRec3.
(2,78)PutRec4I/OemittedFile I/O primitive: PutRec4.
(5,14)PutRecFxStr3I/OemittedFile I/O primitive: PutRecFxStr3.
(5,15)PutRecFxStr4I/OemittedFile I/O primitive: PutRecFxStr4.
(1,FA)SeekFileI/OemittedFile I/O primitive: SeekFile.
(3,33)WriteChanI/OneverFile I/O primitive: WriteChan.
(5,0F)WriteFileI/OemittedWrite # statement: write a list of items, one descriptor-driven call.
Stack & frame 56 slots, 33 distinct handlers, 26 emitted

Frame-slot references, temporaries, pops and cleanup (FFree*) that are not tied to one value type.

SlotMnemonicOperationTypesStatusSummary
(0,1A)FFree1AdFree/cleanupString/Variant/object temporariesemittedFree heap-backed frame slot(s): FFree1Ad.
(3,9B)FFree1AdFree/cleanupString/Variant/object temporariesnever dupFree heap-backed frame slot(s): FFree1Ad.
(0,2F)FFree1StrFree/cleanupString/Variant/object temporariesemittedFree heap-backed frame slot(s): FFree1Str.
(3,9A)FFree1StrFree/cleanupString/Variant/object temporariesnever dupFree heap-backed frame slot(s): FFree1Str.
(0,35)FFree1VarFree/cleanupString/Variant/object temporariesemittedFree heap-backed frame slot(s): FFree1Var.
(3,99)FFree1VarFree/cleanupString/Variant/object temporariesnever dupFree heap-backed frame slot(s): FFree1Var.
(0,29)FFreeAdFree/cleanupString/Variant/object temporariesemittedFree heap-backed frame slot(s): FFreeAd.
(4,B4)FFreeAdFree/cleanupString/Variant/object temporariesnever dupFree heap-backed frame slot(s): FFreeAd.
(0,32)FFreeStrFree/cleanupString/Variant/object temporariesemittedFree heap-backed frame slot(s): FFreeStr.
(4,B3)FFreeStrFree/cleanupString/Variant/object temporariesnever dupFree heap-backed frame slot(s): FFreeStr.
(0,36)FFreeVarFree/cleanupString/Variant/object temporariesemittedFree heap-backed frame slot(s): FFreeVar.
(4,B2)FFreeVarFree/cleanupString/Variant/object temporariesnever dupFree heap-backed frame slot(s): FFreeVar.
(4,CE)FreeAdNoPopFree/cleanupString/Variant/object temporariesneverFree heap-backed frame slot(s): FreeAdNoPop.
(4,CC)FreeStrNoPopFree/cleanupString/Variant/object temporariesneverFree heap-backed frame slot(s): FreeStrNoPop.
(4,CD)FreeVarNoPopFree/cleanupString/Variant/object temporariesneverFree heap-backed frame slot(s): FreeVarNoPop.
(0,07)FMemLdRfLoadaddress (reference), via frame pointeremittedLoad a reference (ByRef slot) via [frame[%a] + offset] (FMemLdRf).
(3,D6)FMemLdRfLoadaddress (reference), via frame pointernever dupLoad a reference (ByRef slot) via [frame[%a] + offset] (FMemLdRf).
(3,DC)FMemLdRfLoadaddress (reference), via frame pointernever dupLoad a reference (ByRef slot) via [frame[%a] + offset] (FMemLdRf).
(0,6C)ILdRfLoadaddress (reference), ByRef/indirectemittedRe-load the pointer held in a ByRef frame slot [ebp+%a]; push it as a typed reference.
(3,4C)IWMemLdRfLoadaddress (reference), W-base indirectneverLOAD through a reference / ByRef slot at [W-base+offset] -> [eax], one extra dereference (4-byte (reference), W+indirect).
(0,05)ImpAdLdRfLoadaddress (reference), globalemittedLoad through an imported address (ImpAdLdRf).
(3,A6)ImpAdLdRfLoadaddress (reference), globalnever dupLoad through an imported address (ImpAdLdRf).
(3,AC)ImpAdLdRfLoadaddress (reference), globalnever dupLoad through an imported address (ImpAdLdRf).
(4,F6)DestructAnsiOFrameOtheremittedFrame-slot manipulation (DestructAnsiOFrame).
(0,04)FLdRfVarOtheremittedPush a reference (ByRef pointer) to a Variant local/argument at [ebp+%a].
(2,E6)FLdRfVarOthernever dupPush a reference (ByRef pointer) to a Variant local/argument at [ebp+%a].
(2,EC)FLdRfVarOthernever dupPush a reference (ByRef pointer) to a Variant local/argument at [ebp+%a].
(4,2F)LdFrameRfOthernever
(4,2E)LdStkRfOthernever
(0,06)MemLdRfVarOtheremittedLoad a ByRef Variant slot from [pr + offset] where pr is on the stack.
(3,76)MemLdRfVarOthernever dupLoad a ByRef Variant slot from [pr + offset] where pr is on the stack.
(3,7C)MemLdRfVarOthernever dupLoad a ByRef Variant slot from [pr + offset] where pr is on the stack.
(2,8B)PopAdOtheremittedDiscard the top raw 32-bit address (pointer) from the stack.
(0,49)PopAdLd4OtheremittedDiscard the top value from the stack.
(2,5C)PopAdLd4Othernever dup(alias) Discard the top value from the stack.
(0,25)PopAdLdVarOtheremittedDiscard the top VBA Variant from the stack.
(2,8C)PopAdLdVarOthernever dup(alias) Discard the top VBA Variant from the stack.
(0,37)PopFPR4OtheremittedDiscard the top Single on the x87 FPU stack from the stack.
(2,89)PopFPR4Othernever dup(alias) Discard the top Single on the x87 FPU stack from the stack.
(0,39)PopFPR8OtheremittedDiscard the top Double on the x87 FPU stack from the stack.
(2,8A)PopFPR8Othernever dup(alias) Discard the top Double on the x87 FPU stack from the stack.
(3,C2)PopTmpLdAd1OtheremittedPop temporary and reload value (PopTmpLdAd1).
(0,2B)PopTmpLdAd2OtheremittedPop temporary and reload value (PopTmpLdAd2).
(3,C3)PopTmpLdAd2Othernever dupPop temporary and reload value (PopTmpLdAd2).
(0,30)PopTmpLdAd8OtheremittedPop an 8-byte value into a temporary and push the temporary's address (ByRef temp for Currency).
(3,C5)PopTmpLdAd8Othernever dupPop an 8-byte value into a temporary and push the temporary's address (ByRef temp for Currency).
(3,C8)PopTmpLdAdFPR4OtheremittedPop a Single from the FPU into a temporary and push its address (ByRef temp).
(3,C9)PopTmpLdAdFPR8OtheremittedPop a Double from the FPU into a temporary and push its address (ByRef temp).
(0,59)PopTmpLdAdStrOtheremitted(alias) Pop temporary and reload value (PopTmpLdAdStr).
(3,C4)PopTmpLdAdStrOthernever dup(alias) Pop temporary and reload value (PopTmpLdAdStr).
(3,C7)PopTmpLdAdStrOtheremitted dup(alias) Pop temporary and reload value (PopTmpLdAdStr).
(3,C6)PopTmpLdAdVarOthernever
(4,D6)WMemLdRfVarOtherneverLOAD a Variant ByRef reference at [W-base+offset] via the procedure's secondary-object pointer [ebp+10h] (W-base) (4-byte (reference)).
(4,DC)WMemLdRfVarOthernever dupLOAD a Variant ByRef reference at [W-base+offset] via the procedure's secondary-object pointer [ebp+10h] (W-base) (4-byte (reference)).
(5,2D)ZeroRetValOtheremittedFrame-slot manipulation (ZeroRetVal).
(5,2E)ZeroRetValVarOtheremittedFrame-slot manipulation (ZeroRetValVar).
Structural 7 slots, 6 distinct handlers, 0 emitted

Dispatch-table trampolines (lead bytes) and invalid slots.

SlotMnemonicOperationTypesStatusSummary
(0,03)InvalidExcodeOtherdispatch trampoline / invalid slot- dup
(0,FB)Lead0Otherdispatch trampoline / invalid slot-
(0,FC)Lead1Otherdispatch trampoline / invalid slot-
(0,FD)Lead2Otherdispatch trampoline / invalid slot-
(0,FE)Lead3Otherdispatch trampoline / invalid slot-
(0,FF)Lead4Otherdispatch trampoline / invalid slot-
(0,01)vbDecNopOtherdispatch trampoline / invalid slot-

Array

Single/multi-dim array access

ArrayRebase1Var

(5,0x0A)emittedhandler #736Arrayconfirmed_msdocs
SafeArray operation: ArrayRebase1Var.

Operates on a VB6 SafeArray. See the printf template for the element-type and indexing form. AryLock/AryUnlock increment/decrement the array's lock count (required around direct element access). Ary1Ld*/Ary1St* load/store an element of a 1-D array; multi-dim variants exist in wider opcode tables. Erase releases an array's storage.

When the compiler emits it

Emitted at array element access, Erase, and at the begin/end of arc through a SafeArray.

VB6 source (verified: compiles to this slot)
Option Base 1

Public Sub Main()
  Dim v As Variant
  v = Array(1, 2)
End Sub
Encoding, evidence and notes
Encoding

Encoding: FF 0A (lead byte FF selects table 5), then 0 operand byte(s); total instruction length 2 byte(s).
Operands: none. All inputs come from the evaluation stack or the frame.
Observed: FF0A ArrayRebase1Var

Evidence and notes

Emitted by VB6 SP6 (P-code): yes. Minimal probe: probes\op\5_0A_ArrayRebase1Var.

Handler: 0x661091F7, unique to this slot (real opcode #736).

Description: draft, by claude-opus-4.7. Handler 0x661091F7, dispatch slot 0x6610813C, modOpcodes line 620.

Ary1LdCy

(0,0x9F)emittedprimary of 3handler #156Arrayconfirmed_msdocs
SafeArray operation: Ary1LdCy.

Operates on a VB6 SafeArray. See the printf template for the element-type and indexing form. AryLock/AryUnlock increment/decrement the array's lock count (required around direct element access). Ary1Ld*/Ary1St* load/store an element of a 1-D array; multi-dim variants exist in wider opcode tables. Erase releases an array's storage.

When the compiler emits it

Emitted at array element access, Erase, and at the begin/end of arc through a SafeArray.

VB6 source (verified: compiles to this slot)
Public Sub Main()
  Dim a(5) As Currency, b As Currency, i As Long
  b = a(i)
End Sub
Encoding, evidence and notes
Encoding

Encoding: 9F, then 0 operand byte(s); total instruction length 1 byte(s).
Operands: none. All inputs come from the evaluation stack or the frame.
Observed: 9F Ary1LdCy

Evidence and notes

Emitted by VB6 SP6 (P-code): yes. Minimal probe: probes\op\0_9F_Ary1LdCy.

Handler: 0x66108EC0, shared by 3 dispatch slots (real opcode #156). This is the primary slot. Other slots: (2,94) Ary1LdR8, (2,95) Ary1LdR8.

Slots sharing this handler

(2,0x94) Ary1LdR8, (2,0x95) Ary1LdR8

Description: draft, by claude-opus-4.7. Handler 0x66108EC0, dispatch slot 0x66106F90, modOpcodes line 664.

Ary1LdFPR4

(0,0xA0)emittedprimary of 2handler #157Arrayconfirmed_msdocs
SafeArray operation: Ary1LdFPR4.

Operates on a VB6 SafeArray. See the printf template for the element-type and indexing form. AryLock/AryUnlock increment/decrement the array's lock count (required around direct element access). Ary1Ld*/Ary1St* load/store an element of a 1-D array; multi-dim variants exist in wider opcode tables. Erase releases an array's storage.

When the compiler emits it

Emitted at array element access, Erase, and at the begin/end of arc through a SafeArray.

VB6 source (verified: compiles to this slot)
Public Sub Main()
  Dim a(5) As Single, b As Single, i As Long
  b = a(i)
End Sub
Encoding, evidence and notes
Encoding

Encoding: A0, then 0 operand byte(s); total instruction length 1 byte(s).
Operands: none. All inputs come from the evaluation stack or the frame.
Observed: A0 Ary1LdFPR4

Evidence and notes

Emitted by VB6 SP6 (P-code): yes. Minimal probe: probes\op\0_A0_Ary1LdFPR4.

Handler: 0x66108ED8, shared by 2 dispatch slots (real opcode #157). This is the primary slot. Other slots: (2,99) Ary1LdFPR4.

Slots sharing this handler

(2,0x99) Ary1LdFPR4

Description: draft, by claude-opus-4.7. Handler 0x66108ED8, dispatch slot 0x66106F94, modOpcodes line 666.

Ary1LdFPR4

(2,0x99)not emitteddup of (0,A0)handler #157Arrayconfirmed_handler
(alias) SafeArray operation: Ary1LdFPR4.

Alias dispatch slot (2, 0x99) for the canonical Ary1LdFPR4 at (0, 0xA0); semantics are identical.

Operates on a VB6 SafeArray. See the printf template for the element-type and indexing form. AryLock/AryUnlock increment/decrement the array's lock count (required around direct element access). Ary1Ld*/Ary1St* load/store an element of a 1-D array; multi-dim variants exist in wider opcode tables. Erase releases an array's storage.

When the compiler emits it

Emitted at array element access, Erase, and at the begin/end of arc through a SafeArray.

Encoding, evidence and notes
Encoding

Encoding: FC 99 (lead byte FC selects table 2), then 0 operand byte(s); total instruction length 2 byte(s).
Operands: none. All inputs come from the evaluation stack or the frame.

Evidence and notes

Emitted by VB6 SP6 (P-code): not observed in about 3,070 probe programs. The slot exists in the runtime's dispatch table, but no tested source construct makes the compiler emit it.

Handler: 0x66108ED8, shared by 2 dispatch slots (real opcode #157). This is a duplicate slot of (0,A0) Ary1LdFPR4. Other slots: (0,A0) Ary1LdFPR4.

Slots sharing this handler

(0,0xA0) Ary1LdFPR4

Description: draft, by claude-opus-4.7. Handler 0x66108ED8, dispatch slot 0x66107778, modOpcodes line 672.

Ary1LdFPR8

(0,0xA1)emittedprimary of 2handler #158Arrayconfirmed_msdocs
SafeArray operation: Ary1LdFPR8.

Operates on a VB6 SafeArray. See the printf template for the element-type and indexing form. AryLock/AryUnlock increment/decrement the array's lock count (required around direct element access). Ary1Ld*/Ary1St* load/store an element of a 1-D array; multi-dim variants exist in wider opcode tables. Erase releases an array's storage.

When the compiler emits it

Emitted at array element access, Erase, and at the begin/end of arc through a SafeArray.

VB6 source (verified: compiles to this slot)
Public Sub Main()
  Dim a(5) As Date, b As Date, i As Long
  b = a(i)
End Sub
Encoding, evidence and notes
Encoding

Encoding: A1, then 0 operand byte(s); total instruction length 1 byte(s).
Operands: none. All inputs come from the evaluation stack or the frame.
Observed: A1 Ary1LdFPR8

Evidence and notes

Emitted by VB6 SP6 (P-code): yes. Minimal probe: probes\op\0_A1_Ary1LdFPR8.

Handler: 0x66108EEC, shared by 2 dispatch slots (real opcode #158). This is the primary slot. Other slots: (2,9A) Ary1LdFPR8.

Slots sharing this handler

(2,0x9A) Ary1LdFPR8

Description: draft, by claude-opus-4.7. Handler 0x66108EEC, dispatch slot 0x66106F98, modOpcodes line 668.

Ary1LdFPR8

(2,0x9A)not emitteddup of (0,A1)handler #158Arrayconfirmed_handler
(alias) SafeArray operation: Ary1LdFPR8.

Alias dispatch slot (2, 0x9A) for the canonical Ary1LdFPR8 at (0, 0xA1); semantics are identical.

Operates on a VB6 SafeArray. See the printf template for the element-type and indexing form. AryLock/AryUnlock increment/decrement the array's lock count (required around direct element access). Ary1Ld*/Ary1St* load/store an element of a 1-D array; multi-dim variants exist in wider opcode tables. Erase releases an array's storage.

When the compiler emits it

Emitted at array element access, Erase, and at the begin/end of arc through a SafeArray.

Encoding, evidence and notes
Encoding

Encoding: FC 9A (lead byte FC selects table 2), then 0 operand byte(s); total instruction length 2 byte(s).
Operands: none. All inputs come from the evaluation stack or the frame.

Evidence and notes

Emitted by VB6 SP6 (P-code): not observed in about 3,070 probe programs. The slot exists in the runtime's dispatch table, but no tested source construct makes the compiler emit it.

Handler: 0x66108EEC, shared by 2 dispatch slots (real opcode #158). This is a duplicate slot of (0,A1) Ary1LdFPR8. Other slots: (0,A1) Ary1LdFPR8.

Slots sharing this handler

(0,0xA1) Ary1LdFPR8

Description: draft, by claude-opus-4.7. Handler 0x66108EEC, dispatch slot 0x6610777C, modOpcodes line 673.

Ary1LdI2

(0,0x9D)emittedprimary of 2handler #154Arrayconfirmed_msdocs
SafeArray operation: Ary1LdI2.

Operates on a VB6 SafeArray. See the printf template for the element-type and indexing form. AryLock/AryUnlock increment/decrement the array's lock count (required around direct element access). Ary1Ld*/Ary1St* load/store an element of a 1-D array; multi-dim variants exist in wider opcode tables. Erase releases an array's storage.

When the compiler emits it

Emitted at array element access, Erase, and at the begin/end of arc through a SafeArray.

VB6 source (verified: compiles to this slot)
Public Sub Main()
  Dim a(5) As Boolean, b As Boolean, i As Long
  b = a(i)
End Sub
Encoding, evidence and notes
Encoding

Encoding: 9D, then 0 operand byte(s); total instruction length 1 byte(s).
Operands: none. All inputs come from the evaluation stack or the frame.
Observed: 9D Ary1LdI2

Evidence and notes

Emitted by VB6 SP6 (P-code): yes. Minimal probe: probes\op\0_9D_Ary1LdI2.

Handler: 0x66108E96, shared by 2 dispatch slots (real opcode #154). This is the primary slot. Other slots: (2,91) Ary1LdI2.

Slots sharing this handler

(2,0x91) Ary1LdI2

Description: draft, by claude-opus-4.7. Handler 0x66108E96, dispatch slot 0x66106F88, modOpcodes line 651.

Ary1LdI2

(2,0x91)not emitteddup of (0,9D)handler #154Arrayconfirmed_handler
(alias) SafeArray operation: Ary1LdI2.

Alias dispatch slot (2, 0x91) for the canonical Ary1LdI2 at (0, 0x9D); semantics are identical.

Operates on a VB6 SafeArray. See the printf template for the element-type and indexing form. AryLock/AryUnlock increment/decrement the array's lock count (required around direct element access). Ary1Ld*/Ary1St* load/store an element of a 1-D array; multi-dim variants exist in wider opcode tables. Erase releases an array's storage.

When the compiler emits it

Emitted at array element access, Erase, and at the begin/end of arc through a SafeArray.

Encoding, evidence and notes
Encoding

Encoding: FC 91 (lead byte FC selects table 2), then 0 operand byte(s); total instruction length 2 byte(s).
Operands: none. All inputs come from the evaluation stack or the frame.

Evidence and notes

Emitted by VB6 SP6 (P-code): not observed in about 3,070 probe programs. The slot exists in the runtime's dispatch table, but no tested source construct makes the compiler emit it.

Handler: 0x66108E96, shared by 2 dispatch slots (real opcode #154). This is a duplicate slot of (0,9D) Ary1LdI2. Other slots: (0,9D) Ary1LdI2.

Slots sharing this handler

(0,0x9D) Ary1LdI2

Description: draft, by claude-opus-4.7. Handler 0x66108E96, dispatch slot 0x66107758, modOpcodes line 652.

Ary1LdI4

(0,0x9E)emittedprimary of 5handler #155Arrayconfirmed_msdocs55 corpus hits
SafeArray operation: Ary1LdI4.

Operates on a VB6 SafeArray. See the printf template for the element-type and indexing form. AryLock/AryUnlock increment/decrement the array's lock count (required around direct element access). Ary1Ld*/Ary1St* load/store an element of a 1-D array; multi-dim variants exist in wider opcode tables. Erase releases an array's storage.

When the compiler emits it

Emitted at array element access, Erase, and at the begin/end of arc through a SafeArray.

VB6 source (verified: compiles to this slot)
Option Base 1

Public Sub Main()
  Dim a(5) As Long, n As Long
  n = a(1)
End Sub
Encoding, evidence and notes
Encoding

Encoding: 9E, then 0 operand byte(s); total instruction length 1 byte(s).
Operands: none. All inputs come from the evaluation stack or the frame.
Observed: 9E Ary1LdI4

Examples
Form1.LoadPlugins @ 0x4644FC | 464723    9E                    Ary1LdI4
Form1.LoadPlugins @ 0x4644FC | 4647D4    9E                    Ary1LdI4
Form1.mnuPluginList_Event_0 @ 0x44C3D4 | 44C44E    9E                    Ary1LdI4

55 occurrence(s) in PDFStreamDumper.

Evidence and notes

Emitted by VB6 SP6 (P-code): yes. Minimal probe: probes\op\0_9E_Ary1LdI4.

Handler: 0x66108EAC, shared by 5 dispatch slots (real opcode #155). This is the primary slot. Other slots: (2,92) Ary1LdI4, (2,93) Ary1LdI4, (2,97) Ary1LdI4, (2,98) Ary1LdI4.

Corpus: 55 occurrence(s) in PDFStreamDumper_p.exe.

Slots sharing this handler

(2,0x92) Ary1LdI4, (2,0x93) Ary1LdI4, (2,0x97) Ary1LdI4, (2,0x98) Ary1LdI4

Description: draft, by claude-opus-4.7. Handler 0x66108EAC, dispatch slot 0x66106F8C, modOpcodes line 655.

Ary1LdI4

(2,0x92)not emitteddup of (0,9E)handler #155Arrayconfirmed_handler
(alias) SafeArray operation: Ary1LdI4.

Alias dispatch slot (2, 0x92) for the canonical Ary1LdI4 at (0, 0x9E); semantics are identical.

Operates on a VB6 SafeArray. See the printf template for the element-type and indexing form. AryLock/AryUnlock increment/decrement the array's lock count (required around direct element access). Ary1Ld*/Ary1St* load/store an element of a 1-D array; multi-dim variants exist in wider opcode tables. Erase releases an array's storage.

When the compiler emits it

Emitted at array element access, Erase, and at the begin/end of arc through a SafeArray.

Encoding, evidence and notes
Encoding

Encoding: FC 92 (lead byte FC selects table 2), then 0 operand byte(s); total instruction length 2 byte(s).
Operands: none. All inputs come from the evaluation stack or the frame.

Evidence and notes

Emitted by VB6 SP6 (P-code): not observed in about 3,070 probe programs. The slot exists in the runtime's dispatch table, but no tested source construct makes the compiler emit it.

Handler: 0x66108EAC, shared by 5 dispatch slots (real opcode #155). This is a duplicate slot of (0,9E) Ary1LdI4. Other slots: (0,9E) Ary1LdI4, (2,93) Ary1LdI4, (2,97) Ary1LdI4, (2,98) Ary1LdI4.

Slots sharing this handler

(0,0x9E) Ary1LdI4, (2,0x93) Ary1LdI4, (2,0x97) Ary1LdI4, (2,0x98) Ary1LdI4

Description: draft, by claude-opus-4.7. Handler 0x66108EAC, dispatch slot 0x6610775C, modOpcodes line 656.

Ary1LdI4

(2,0x93)not emitteddup of (0,9E)handler #155Arrayconfirmed_handler
(alias) SafeArray operation: Ary1LdI4.

Alias dispatch slot (2, 0x93) for the canonical Ary1LdI4 at (0, 0x9E); semantics are identical.

Operates on a VB6 SafeArray. See the printf template for the element-type and indexing form. AryLock/AryUnlock increment/decrement the array's lock count (required around direct element access). Ary1Ld*/Ary1St* load/store an element of a 1-D array; multi-dim variants exist in wider opcode tables. Erase releases an array's storage.

When the compiler emits it

Emitted at array element access, Erase, and at the begin/end of arc through a SafeArray.

Encoding, evidence and notes
Encoding

Encoding: FC 93 (lead byte FC selects table 2), then 0 operand byte(s); total instruction length 2 byte(s).
Operands: none. All inputs come from the evaluation stack or the frame.

Evidence and notes

Emitted by VB6 SP6 (P-code): not observed in about 3,070 probe programs. The slot exists in the runtime's dispatch table, but no tested source construct makes the compiler emit it.

Handler: 0x66108EAC, shared by 5 dispatch slots (real opcode #155). This is a duplicate slot of (0,9E) Ary1LdI4. Other slots: (0,9E) Ary1LdI4, (2,92) Ary1LdI4, (2,97) Ary1LdI4, (2,98) Ary1LdI4.

Slots sharing this handler

(0,0x9E) Ary1LdI4, (2,0x92) Ary1LdI4, (2,0x97) Ary1LdI4, (2,0x98) Ary1LdI4

Description: draft, by claude-opus-4.7. Handler 0x66108EAC, dispatch slot 0x66107760, modOpcodes line 657.

Ary1LdI4

(2,0x97)not emitteddup of (0,9E)handler #155Arrayconfirmed_handler
(alias) SafeArray operation: Ary1LdI4.

Alias dispatch slot (2, 0x97) for the canonical Ary1LdI4 at (0, 0x9E); semantics are identical.

Operates on a VB6 SafeArray. See the printf template for the element-type and indexing form. AryLock/AryUnlock increment/decrement the array's lock count (required around direct element access). Ary1Ld*/Ary1St* load/store an element of a 1-D array; multi-dim variants exist in wider opcode tables. Erase releases an array's storage.

When the compiler emits it

Emitted at array element access, Erase, and at the begin/end of arc through a SafeArray.

Encoding, evidence and notes
Encoding

Encoding: FC 97 (lead byte FC selects table 2), then 0 operand byte(s); total instruction length 2 byte(s).
Operands: none. All inputs come from the evaluation stack or the frame.

Evidence and notes

Emitted by VB6 SP6 (P-code): not observed in about 3,070 probe programs. The slot exists in the runtime's dispatch table, but no tested source construct makes the compiler emit it.

Handler: 0x66108EAC, shared by 5 dispatch slots (real opcode #155). This is a duplicate slot of (0,9E) Ary1LdI4. Other slots: (0,9E) Ary1LdI4, (2,92) Ary1LdI4, (2,93) Ary1LdI4, (2,98) Ary1LdI4.

Slots sharing this handler

(0,0x9E) Ary1LdI4, (2,0x92) Ary1LdI4, (2,0x93) Ary1LdI4, (2,0x98) Ary1LdI4

Description: draft, by claude-opus-4.7. Handler 0x66108EAC, dispatch slot 0x66107770, modOpcodes line 658.

Ary1LdI4

(2,0x98)not emitteddup of (0,9E)handler #155Arrayconfirmed_handler
(alias) SafeArray operation: Ary1LdI4.

Alias dispatch slot (2, 0x98) for the canonical Ary1LdI4 at (0, 0x9E); semantics are identical.

Operates on a VB6 SafeArray. See the printf template for the element-type and indexing form. AryLock/AryUnlock increment/decrement the array's lock count (required around direct element access). Ary1Ld*/Ary1St* load/store an element of a 1-D array; multi-dim variants exist in wider opcode tables. Erase releases an array's storage.

When the compiler emits it

Emitted at array element access, Erase, and at the begin/end of arc through a SafeArray.

Encoding, evidence and notes
Encoding

Encoding: FC 98 (lead byte FC selects table 2), then 0 operand byte(s); total instruction length 2 byte(s).
Operands: none. All inputs come from the evaluation stack or the frame.

Evidence and notes

Emitted by VB6 SP6 (P-code): not observed in about 3,070 probe programs. The slot exists in the runtime's dispatch table, but no tested source construct makes the compiler emit it.

Handler: 0x66108EAC, shared by 5 dispatch slots (real opcode #155). This is a duplicate slot of (0,9E) Ary1LdI4. Other slots: (0,9E) Ary1LdI4, (2,92) Ary1LdI4, (2,93) Ary1LdI4, (2,97) Ary1LdI4.

Slots sharing this handler

(0,0x9E) Ary1LdI4, (2,0x92) Ary1LdI4, (2,0x93) Ary1LdI4, (2,0x97) Ary1LdI4

Description: draft, by claude-opus-4.7. Handler 0x66108EAC, dispatch slot 0x66107774, modOpcodes line 659.

Ary1LdPr

(0,0x41)emittedprimary of 2handler #64Arrayconfirmed_msdocs2 corpus hits
SafeArray operation: Ary1LdPr.

Operates on a VB6 SafeArray. See the printf template for the element-type and indexing form. AryLock/AryUnlock increment/decrement the array's lock count (required around direct element access). Ary1Ld*/Ary1St* load/store an element of a 1-D array; multi-dim variants exist in wider opcode tables. Erase releases an array's storage.

When the compiler emits it

Emitted at array element access, Erase, and at the begin/end of arc through a SafeArray.

VB6 source (verified: compiles to this slot)
Private Type TRec
  a As Long
  s As String
  v As Variant
  o As Object
End Type
Private Type TPlain
  a As Long
  b As Integer
End Type

Public Sub Main()
  Dim r(3) As TRec
  r(1).s = "x"
End Sub
Encoding, evidence and notes
Encoding

Encoding: 41, then 0 operand byte(s); total instruction length 1 byte(s).
Operands: none. All inputs come from the evaluation stack or the frame.
Observed: 41 Ary1LdPr

Examples
Form1.LoadPlugins @ 0x4644FC | 464793    41                    Ary1LdPr
Form1.mnuPluginList_Event_0 @ 0x44C3D4 | 44C467    41                    Ary1LdPr

2 occurrence(s) in PDFStreamDumper.

Evidence and notes

Emitted by VB6 SP6 (P-code): yes. Minimal probe: probes\op\0_41_Ary1LdPr.

Handler: 0x66108F17, shared by 2 dispatch slots (real opcode #64). This is the primary slot. Other slots: (2,9B) Ary1LdPr.

Corpus: 2 occurrence(s) in PDFStreamDumper_p.exe.

Slots sharing this handler

(2,0x9B) Ary1LdPr

Description: draft, by claude-opus-4.7. Handler 0x66108F17, dispatch slot 0x66106E18, modOpcodes line 649.

Ary1LdPr

(2,0x9B)not emitteddup of (0,41)handler #64Arrayconfirmed_handler
(alias) SafeArray operation: Ary1LdPr.

Alias dispatch slot (2, 0x9B) for the canonical Ary1LdPr at (0, 0x41); semantics are identical.

Operates on a VB6 SafeArray. See the printf template for the element-type and indexing form. AryLock/AryUnlock increment/decrement the array's lock count (required around direct element access). Ary1Ld*/Ary1St* load/store an element of a 1-D array; multi-dim variants exist in wider opcode tables. Erase releases an array's storage.

When the compiler emits it

Emitted at array element access, Erase, and at the begin/end of arc through a SafeArray.

Encoding, evidence and notes
Encoding

Encoding: FC 9B (lead byte FC selects table 2), then 0 operand byte(s); total instruction length 2 byte(s).
Operands: none. All inputs come from the evaluation stack or the frame.

Evidence and notes

Emitted by VB6 SP6 (P-code): not observed in about 3,070 probe programs. The slot exists in the runtime's dispatch table, but no tested source construct makes the compiler emit it.

Handler: 0x66108F17, shared by 2 dispatch slots (real opcode #64). This is a duplicate slot of (0,41) Ary1LdPr. Other slots: (0,41) Ary1LdPr.

Slots sharing this handler

(0,0x41) Ary1LdPr

Description: draft, by claude-opus-4.7. Handler 0x66108F17, dispatch slot 0x66107780, modOpcodes line 674.

Ary1LdR8

(2,0x94)not emitteddup of (0,9F)handler #156Arrayconfirmed_msdocs
SafeArray operation: Ary1LdR8.

Operates on a VB6 SafeArray. See the printf template for the element-type and indexing form. AryLock/AryUnlock increment/decrement the array's lock count (required around direct element access). Ary1Ld*/Ary1St* load/store an element of a 1-D array; multi-dim variants exist in wider opcode tables. Erase releases an array's storage.

When the compiler emits it

Emitted at array element access, Erase, and at the begin/end of arc through a SafeArray.

Encoding, evidence and notes
Encoding

Encoding: FC 94 (lead byte FC selects table 2), then 0 operand byte(s); total instruction length 2 byte(s).
Operands: none. All inputs come from the evaluation stack or the frame.

Evidence and notes

Emitted by VB6 SP6 (P-code): not observed in about 3,070 probe programs. The slot exists in the runtime's dispatch table, but no tested source construct makes the compiler emit it.

Handler: 0x66108EC0, shared by 3 dispatch slots (real opcode #156). This is a duplicate slot of (0,9F) Ary1LdCy. Other slots: (0,9F) Ary1LdCy, (2,95) Ary1LdR8.

Slots sharing this handler

(0,0x9F) Ary1LdCy, (2,0x95) Ary1LdR8

Description: draft, by claude-opus-4.7. Handler 0x66108EC0, dispatch slot 0x66107764, modOpcodes line 662.

Ary1LdR8

(2,0x95)not emitteddup of (0,9F)handler #156Arrayconfirmed_handler
(alias) SafeArray operation: Ary1LdR8.

Alias dispatch slot (2, 0x95) for the canonical Ary1LdR8 at (2, 0x94); semantics are identical.

Operates on a VB6 SafeArray. See the printf template for the element-type and indexing form. AryLock/AryUnlock increment/decrement the array's lock count (required around direct element access). Ary1Ld*/Ary1St* load/store an element of a 1-D array; multi-dim variants exist in wider opcode tables. Erase releases an array's storage.

When the compiler emits it

Emitted at array element access, Erase, and at the begin/end of arc through a SafeArray.

Encoding, evidence and notes
Encoding

Encoding: FC 95 (lead byte FC selects table 2), then 0 operand byte(s); total instruction length 2 byte(s).
Operands: none. All inputs come from the evaluation stack or the frame.

Evidence and notes

Emitted by VB6 SP6 (P-code): not observed in about 3,070 probe programs. The slot exists in the runtime's dispatch table, but no tested source construct makes the compiler emit it.

Handler: 0x66108EC0, shared by 3 dispatch slots (real opcode #156). This is a duplicate slot of (0,9F) Ary1LdCy. Other slots: (0,9F) Ary1LdCy, (2,94) Ary1LdR8.

Slots sharing this handler

(0,0x9F) Ary1LdCy, (2,0x94) Ary1LdR8

Description: draft, by claude-opus-4.7. Handler 0x66108EC0, dispatch slot 0x66107768, modOpcodes line 663.

Ary1LdRf

(0,0x40)emittedprimary of 2handler #63Arrayconfirmed_msdocs43 corpus hits
SafeArray operation: Ary1LdRf.

Operates on a VB6 SafeArray. See the printf template for the element-type and indexing form. AryLock/AryUnlock increment/decrement the array's lock count (required around direct element access). Ary1Ld*/Ary1St* load/store an element of a 1-D array; multi-dim variants exist in wider opcode tables. Erase releases an array's storage.

When the compiler emits it

Emitted at array element access, Erase, and at the begin/end of arc through a SafeArray.

VB6 source (verified: compiles to this slot)
Dim gf(3) As Boolean

Public Sub Main()
  P gf(1)
End Sub

Sub P(x As Boolean)
End Sub
Encoding, evidence and notes
Encoding

Encoding: 40, then 0 operand byte(s); total instruction length 1 byte(s).
Operands: none. All inputs come from the evaluation stack or the frame.
Observed: 40 Ary1LdRf

Examples
Form1.LoadPlugins @ 0x4644FC | 464650    40                    Ary1LdRf
Form1.Form_Load @ 0x479DC0 | 47B2D0    40                    Ary1LdRf
Form1.Form_Load @ 0x479DC0 | 47B335    40                    Ary1LdRf

43 occurrence(s) in PDFStreamDumper.

Evidence and notes

Emitted by VB6 SP6 (P-code): yes. Minimal probe: probes\op\0_40_Ary1LdRf.

Handler: 0x66105004, shared by 2 dispatch slots (real opcode #63). This is the primary slot. Other slots: (2,9C) Ary1LdRf.

Corpus: 43 occurrence(s) in PDFStreamDumper_p.exe.

Slots sharing this handler

(2,0x9C) Ary1LdRf

Description: draft, by claude-opus-4.7. Handler 0x66105004, dispatch slot 0x66106E14, modOpcodes line 648.

Ary1LdRf

(2,0x9C)not emitteddup of (0,40)handler #63Arrayconfirmed_handler
(alias) SafeArray operation: Ary1LdRf.

Alias dispatch slot (2, 0x9C) for the canonical Ary1LdRf at (0, 0x40); semantics are identical.

Operates on a VB6 SafeArray. See the printf template for the element-type and indexing form. AryLock/AryUnlock increment/decrement the array's lock count (required around direct element access). Ary1Ld*/Ary1St* load/store an element of a 1-D array; multi-dim variants exist in wider opcode tables. Erase releases an array's storage.

When the compiler emits it

Emitted at array element access, Erase, and at the begin/end of arc through a SafeArray.

Encoding, evidence and notes
Encoding

Encoding: FC 9C (lead byte FC selects table 2), then 0 operand byte(s); total instruction length 2 byte(s).
Operands: none. All inputs come from the evaluation stack or the frame.

Evidence and notes

Emitted by VB6 SP6 (P-code): not observed in about 3,070 probe programs. The slot exists in the runtime's dispatch table, but no tested source construct makes the compiler emit it.

Handler: 0x66105004, shared by 2 dispatch slots (real opcode #63). This is a duplicate slot of (0,40) Ary1LdRf. Other slots: (0,40) Ary1LdRf.

Slots sharing this handler

(0,0x40) Ary1LdRf

Description: draft, by claude-opus-4.7. Handler 0x66105004, dispatch slot 0x66107784, modOpcodes line 675.

Ary1LdRfVar

(2,0x96)emittedhandler #432Arrayconfirmed_msdocs4 corpus hits
SafeArray operation: Ary1LdRfVar.

Operates on a VB6 SafeArray. See the printf template for the element-type and indexing form. AryLock/AryUnlock increment/decrement the array's lock count (required around direct element access). Ary1Ld*/Ary1St* load/store an element of a 1-D array; multi-dim variants exist in wider opcode tables. Erase releases an array's storage.

When the compiler emits it

Emitted at array element access, Erase, and at the begin/end of arc through a SafeArray.

VB6 source (verified: compiles to this slot)
Public Sub Main()
  Dim a(5) As Variant, b As Variant, i As Long
  b = a(i)
End Sub
Encoding, evidence and notes
Encoding

Encoding: FC 96 (lead byte FC selects table 2), then 0 operand byte(s); total instruction length 2 byte(s).
Operands: none. All inputs come from the evaluation stack or the frame.
Observed: FC96 Ary1LdRfVar

Examples
Form1.mnuExploitScan_Click @ 0x46CF80 | 46D007    FC96                  Ary1LdRfVar
Form1.mnuExploitScan_Click @ 0x46CF80 | 46D152    FC96                  Ary1LdRfVar
Form1.mnuExploitScan_Click @ 0x46CF80 | 46D23F    FC96                  Ary1LdRfVar

4 occurrence(s) in PDFStreamDumper.

Evidence and notes

Emitted by VB6 SP6 (P-code): yes. Minimal probe: probes\op\2_96_Ary1LdRfVar.

Handler: 0x66108F00, unique to this slot (real opcode #432).

Corpus: 4 occurrence(s) in PDFStreamDumper_p.exe.

Description: draft, by claude-opus-4.7. Handler 0x66108F00, dispatch slot 0x6610776C, modOpcodes line 671.

Ary1LdRfVarg

(2,0xB2)emittedhandler #443Arrayinferred_corpus5 corpus hits
SafeArray operation: Ary1LdRfVarg.

Operates on a VB6 SafeArray. See the printf template for the element-type and indexing form. AryLock/AryUnlock increment/decrement the array's lock count (required around direct element access). Ary1Ld*/Ary1St* load/store an element of a 1-D array; multi-dim variants exist in wider opcode tables. Erase releases an array's storage.

When the compiler emits it

Emitted at array element access, Erase, and at the begin/end of arc through a SafeArray.

VB6 source (verified: compiles to this slot)
Public Sub Main()
  
End Sub

Sub PA(ParamArray p() As Variant)
  Dim o As Object
  Set o = p(0)
  Set p(0) = o
End Sub
Encoding, evidence and notes
Encoding

Encoding: FC B2 (lead byte FC selects table 2), then 2 operand byte(s); total instruction length 4 byte(s).
vbdec template: %a
Operands:

  1. %a: local_var_ref, 2 byte(s). signed 16-bit offset from the procedure frame pointer (EBP). Negative = local/temporary (vbdec var_XX, XX = -offset), positive = argument (arg_XX).

Observed: FCB2 68FF Ary1LdRfVarg var_98

Examples
CApplyFilters.Proc_44AEEC @ 0x44AEEC | 44AF27    FCB2 38FF             Ary1LdRfVarg var_C8
CApplyFilters.Proc_44AEEC @ 0x44AEEC | 44AF4B    FCB2 48FF             Ary1LdRfVarg var_B8
CApplyFilters.Proc_44AEEC @ 0x44AEEC | 44AF5E    FCB2 38FF             Ary1LdRfVarg var_C8

5 occurrence(s) in PDFStreamDumper.

Evidence and notes

Emitted by VB6 SP6 (P-code): yes. Minimal probe: probes\op\2_B2_Ary1LdRfVarg.

Handler: 0x6610B1E4, unique to this slot (real opcode #443).

Corpus: 5 occurrence(s) in PDFStreamDumper_p.exe.

Description: draft, by claude-opus-4.7. Handler 0x6610B1E4, dispatch slot 0x661077DC, modOpcodes line 643.

Ary1LdRfVargParam

(2,0xB4)emittedhandler #445Arrayconfirmed_msdocs
SafeArray operation: Ary1LdRfVargParam.

Operates on a VB6 SafeArray. See the printf template for the element-type and indexing form. AryLock/AryUnlock increment/decrement the array's lock count (required around direct element access). Ary1Ld*/Ary1St* load/store an element of a 1-D array; multi-dim variants exist in wider opcode tables. Erase releases an array's storage.

When the compiler emits it

Emitted at array element access, Erase, and at the begin/end of arc through a SafeArray.

VB6 source (verified: compiles to this slot)
Public Sub Main()
  
End Sub

Sub PA(ParamArray p() As Variant)
  PB p(0)
  Set p(1) = Nothing
  p(1) = 1
End Sub
Sub PB(x As Variant)
End Sub
Encoding, evidence and notes
Encoding

Encoding: FC B4 (lead byte FC selects table 2), then 0 operand byte(s); total instruction length 2 byte(s).
Operands: none. All inputs come from the evaluation stack or the frame.
Observed: FCB4 Ary1LdRfVargParam

Evidence and notes

Emitted by VB6 SP6 (P-code): yes. Minimal probe: probes\op\2_B4_Ary1LdRfVargParam.

Handler: 0x6610B205, unique to this slot (real opcode #445).

Description: draft, by claude-opus-4.7. Handler 0x6610B205, dispatch slot 0x661077E4, modOpcodes line 705.

Ary1LdUI1

(2,0x90)emittedhandler #431Arrayconfirmed_msdocs94 corpus hits
SafeArray operation: Ary1LdUI1.

Operates on a VB6 SafeArray. See the printf template for the element-type and indexing form. AryLock/AryUnlock increment/decrement the array's lock count (required around direct element access). Ary1Ld*/Ary1St* load/store an element of a 1-D array; multi-dim variants exist in wider opcode tables. Erase releases an array's storage.

When the compiler emits it

Emitted at array element access, Erase, and at the begin/end of arc through a SafeArray.

VB6 source (verified: compiles to this slot)
Public Sub Main()
  Dim a(5) As Byte, b As Byte, i As Long
  b = a(i)
End Sub
Encoding, evidence and notes
Encoding

Encoding: FC 90 (lead byte FC selects table 2), then 0 operand byte(s); total instruction length 2 byte(s).
Operands: none. All inputs come from the evaluation stack or the frame.
Observed: FC90 Ary1LdUI1

Examples
Form1.mnuDecompressSWC_Click @ 0x45E9E4 | 45EA95    FC90                  Ary1LdUI1
Form1.mnuDecompressSWC_Click @ 0x45E9E4 | 45EAAA    FC90                  Ary1LdUI1
Form1.mnuDecompressSWC_Click @ 0x45E9E4 | 45EAC0    FC90                  Ary1LdUI1

94 occurrence(s) in PDFStreamDumper.

Evidence and notes

Emitted by VB6 SP6 (P-code): yes. Minimal probe: probes\op\2_90_Ary1LdUI1.

Handler: 0x66108E7F, unique to this slot (real opcode #431).

Corpus: 94 occurrence(s) in PDFStreamDumper_p.exe.

Description: draft, by claude-opus-4.7. Handler 0x66108E7F, dispatch slot 0x66107754, modOpcodes line 670.

Ary1LdVar

(2,0x9D)not emittedhandler #433Arrayconfirmed_msdocs
SafeArray operation: Ary1LdVar.

Operates on a VB6 SafeArray. See the printf template for the element-type and indexing form. AryLock/AryUnlock increment/decrement the array's lock count (required around direct element access). Ary1Ld*/Ary1St* load/store an element of a 1-D array; multi-dim variants exist in wider opcode tables. Erase releases an array's storage.

When the compiler emits it

Emitted at array element access, Erase, and at the begin/end of arc through a SafeArray.

Encoding, evidence and notes
Encoding

Encoding: FC 9D (lead byte FC selects table 2), then 0 operand byte(s); total instruction length 2 byte(s).
Operands: none. All inputs come from the evaluation stack or the frame.

Evidence and notes

Emitted by VB6 SP6 (P-code): not observed in about 3,070 probe programs. The slot exists in the runtime's dispatch table, but no tested source construct makes the compiler emit it.

Handler: 0x6610B17C, unique to this slot (real opcode #433).

Description: draft, by claude-opus-4.7. Handler 0x6610B17C, dispatch slot 0x66107788, modOpcodes line 676.

Ary1LdVarg

(2,0xB3)not emittedhandler #444Arrayconfirmed_msdocs
SafeArray operation: Ary1LdVarg.

Operates on a VB6 SafeArray. See the printf template for the element-type and indexing form. AryLock/AryUnlock increment/decrement the array's lock count (required around direct element access). Ary1Ld*/Ary1St* load/store an element of a 1-D array; multi-dim variants exist in wider opcode tables. Erase releases an array's storage.

When the compiler emits it

Emitted at array element access, Erase, and at the begin/end of arc through a SafeArray.

Encoding, evidence and notes
Encoding

Encoding: FC B3 (lead byte FC selects table 2), then 0 operand byte(s); total instruction length 2 byte(s).
Operands: none. All inputs come from the evaluation stack or the frame.

Evidence and notes

Emitted by VB6 SP6 (P-code): not observed in about 3,070 probe programs. The slot exists in the runtime's dispatch table, but no tested source construct makes the compiler emit it.

Handler: 0x6610B18B, unique to this slot (real opcode #444).

Description: draft, by claude-opus-4.7. Handler 0x6610B18B, dispatch slot 0x661077E0, modOpcodes line 703.

Ary1StAd

(2,0xA8)emittedhandler #436Arrayconfirmed_msdocs2 corpus hits
SafeArray operation: Ary1StAd.

Operates on a VB6 SafeArray. See the printf template for the element-type and indexing form. AryLock/AryUnlock increment/decrement the array's lock count (required around direct element access). Ary1Ld*/Ary1St* load/store an element of a 1-D array; multi-dim variants exist in wider opcode tables. Erase releases an array's storage.

When the compiler emits it

Emitted at array element access, Erase, and at the begin/end of arc through a SafeArray.

VB6 source (verified: compiles to this slot)
Public Sub Main()
  Dim a(5) As Object, b As Object, i As Long
  Set a(i) = New Collection
End Sub
Encoding, evidence and notes
Encoding

Encoding: FC A8 (lead byte FC selects table 2), then 0 operand byte(s); total instruction length 2 byte(s).
Operands: none. All inputs come from the evaluation stack or the frame.
Observed: FCA8 Ary1StAd

Examples
Form1.LoadPlugins @ 0x4644FC | 46468F    FCA8                  Ary1StAd
Form1.LoadPlugins @ 0x4644FC | 46477A    FCA8                  Ary1StAd

2 occurrence(s) in PDFStreamDumper.

Evidence and notes

Emitted by VB6 SP6 (P-code): yes. Minimal probe: probes\op\2_A8_Ary1StAd.

Handler: 0x6610B3F1, unique to this slot (real opcode #436).

Corpus: 2 occurrence(s) in PDFStreamDumper_p.exe.

Description: draft, by claude-opus-4.7. Handler 0x6610B3F1, dispatch slot 0x661077B4, modOpcodes line 684.

Ary1StAdFunc

(2,0xAF)not emittedhandler #441Arrayconfirmed_msdocs
SafeArray operation: Ary1StAdFunc.

Operates on a VB6 SafeArray. See the printf template for the element-type and indexing form. AryLock/AryUnlock increment/decrement the array's lock count (required around direct element access). Ary1Ld*/Ary1St* load/store an element of a 1-D array; multi-dim variants exist in wider opcode tables. Erase releases an array's storage.

When the compiler emits it

Emitted at array element access, Erase, and at the begin/end of arc through a SafeArray.

Encoding, evidence and notes
Encoding

Encoding: FC AF (lead byte FC selects table 2), then 0 operand byte(s); total instruction length 2 byte(s).
Operands: none. All inputs come from the evaluation stack or the frame.

Evidence and notes

Emitted by VB6 SP6 (P-code): not observed in about 3,070 probe programs. The slot exists in the runtime's dispatch table, but no tested source construct makes the compiler emit it.

Handler: 0x6610B3DB, unique to this slot (real opcode #441).

Description: draft, by claude-opus-4.7. Handler 0x6610B3DB, dispatch slot 0x661077D0, modOpcodes line 693.

Ary1StCy

(0,0xA4)emittedprimary of 3handler #161Arrayconfirmed_msdocs
SafeArray operation: Ary1StCy.

Operates on a VB6 SafeArray. See the printf template for the element-type and indexing form. AryLock/AryUnlock increment/decrement the array's lock count (required around direct element access). Ary1Ld*/Ary1St* load/store an element of a 1-D array; multi-dim variants exist in wider opcode tables. Erase releases an array's storage.

When the compiler emits it

Emitted at array element access, Erase, and at the begin/end of arc through a SafeArray.

VB6 source (verified: compiles to this slot)
Public Sub Main()
  Dim a(5) As Currency, b As Currency, i As Long
  a(i) = 1.5@
End Sub
Encoding, evidence and notes
Encoding

Encoding: A4, then 0 operand byte(s); total instruction length 1 byte(s).
Operands: none. All inputs come from the evaluation stack or the frame.
Observed: A4 Ary1StCy

Evidence and notes

Emitted by VB6 SP6 (P-code): yes. Minimal probe: probes\op\0_A4_Ary1StCy.

Handler: 0x66108F71, shared by 3 dispatch slots (real opcode #161). This is the primary slot. Other slots: (2,A4) Ary1StCy, (2,A5) Ary1StCy.

Slots sharing this handler

(2,0xA4) Ary1StCy, (2,0xA5) Ary1StCy

Description: draft, by claude-opus-4.7. Handler 0x66108F71, dispatch slot 0x66106FA4, modOpcodes line 665.

Ary1StCy

(2,0xA4)not emitteddup of (0,A4)handler #161Arrayconfirmed_handler
(alias) SafeArray operation: Ary1StCy.

Alias dispatch slot (2, 0xA4) for the canonical Ary1StCy at (0, 0xA4); semantics are identical.

Operates on a VB6 SafeArray. See the printf template for the element-type and indexing form. AryLock/AryUnlock increment/decrement the array's lock count (required around direct element access). Ary1Ld*/Ary1St* load/store an element of a 1-D array; multi-dim variants exist in wider opcode tables. Erase releases an array's storage.

When the compiler emits it

Emitted at array element access, Erase, and at the begin/end of arc through a SafeArray.

Encoding, evidence and notes
Encoding

Encoding: FC A4 (lead byte FC selects table 2), then 0 operand byte(s); total instruction length 2 byte(s).
Operands: none. All inputs come from the evaluation stack or the frame.

Evidence and notes

Emitted by VB6 SP6 (P-code): not observed in about 3,070 probe programs. The slot exists in the runtime's dispatch table, but no tested source construct makes the compiler emit it.

Handler: 0x66108F71, shared by 3 dispatch slots (real opcode #161). This is a duplicate slot of (0,A4) Ary1StCy. Other slots: (0,A4) Ary1StCy, (2,A5) Ary1StCy.

Slots sharing this handler

(0,0xA4) Ary1StCy, (2,0xA5) Ary1StCy

Description: draft, by claude-opus-4.7. Handler 0x66108F71, dispatch slot 0x661077A4, modOpcodes line 680.

Ary1StCy

(2,0xA5)not emitteddup of (0,A4)handler #161Arrayconfirmed_handler
(alias) SafeArray operation: Ary1StCy.

Alias dispatch slot (2, 0xA5) for the canonical Ary1StCy at (0, 0xA4); semantics are identical.

Operates on a VB6 SafeArray. See the printf template for the element-type and indexing form. AryLock/AryUnlock increment/decrement the array's lock count (required around direct element access). Ary1Ld*/Ary1St* load/store an element of a 1-D array; multi-dim variants exist in wider opcode tables. Erase releases an array's storage.

When the compiler emits it

Emitted at array element access, Erase, and at the begin/end of arc through a SafeArray.

Encoding, evidence and notes
Encoding

Encoding: FC A5 (lead byte FC selects table 2), then 0 operand byte(s); total instruction length 2 byte(s).
Operands: none. All inputs come from the evaluation stack or the frame.

Evidence and notes

Emitted by VB6 SP6 (P-code): not observed in about 3,070 probe programs. The slot exists in the runtime's dispatch table, but no tested source construct makes the compiler emit it.

Handler: 0x66108F71, shared by 3 dispatch slots (real opcode #161). This is a duplicate slot of (0,A4) Ary1StCy. Other slots: (0,A4) Ary1StCy, (2,A4) Ary1StCy.

Slots sharing this handler

(0,0xA4) Ary1StCy, (2,0xA4) Ary1StCy

Description: draft, by claude-opus-4.7. Handler 0x66108F71, dispatch slot 0x661077A8, modOpcodes line 681.

Ary1StFPR4

(0,0xA5)emittedprimary of 2handler #162Arrayconfirmed_msdocs
SafeArray operation: Ary1StFPR4.

Operates on a VB6 SafeArray. See the printf template for the element-type and indexing form. AryLock/AryUnlock increment/decrement the array's lock count (required around direct element access). Ary1Ld*/Ary1St* load/store an element of a 1-D array; multi-dim variants exist in wider opcode tables. Erase releases an array's storage.

When the compiler emits it

Emitted at array element access, Erase, and at the begin/end of arc through a SafeArray.

VB6 source (verified: compiles to this slot)
Public Sub Main()
  Dim a(5) As Single, b As Single, i As Long
  a(i) = 1.5!
End Sub
Encoding, evidence and notes
Encoding

Encoding: A5, then 0 operand byte(s); total instruction length 1 byte(s).
Operands: none. All inputs come from the evaluation stack or the frame.
Observed: A5 Ary1StFPR4

Evidence and notes

Emitted by VB6 SP6 (P-code): yes. Minimal probe: probes\op\0_A5_Ary1StFPR4.

Handler: 0x66108F89, shared by 2 dispatch slots (real opcode #162). This is the primary slot. Other slots: (2,A9) Ary1StFPR4.

Slots sharing this handler

(2,0xA9) Ary1StFPR4

Description: draft, by claude-opus-4.7. Handler 0x66108F89, dispatch slot 0x66106FA8, modOpcodes line 667.

Ary1StFPR4

(2,0xA9)not emitteddup of (0,A5)handler #162Arrayconfirmed_handler
(alias) SafeArray operation: Ary1StFPR4.

Alias dispatch slot (2, 0xA9) for the canonical Ary1StFPR4 at (0, 0xA5); semantics are identical.

Operates on a VB6 SafeArray. See the printf template for the element-type and indexing form. AryLock/AryUnlock increment/decrement the array's lock count (required around direct element access). Ary1Ld*/Ary1St* load/store an element of a 1-D array; multi-dim variants exist in wider opcode tables. Erase releases an array's storage.

When the compiler emits it

Emitted at array element access, Erase, and at the begin/end of arc through a SafeArray.

Encoding, evidence and notes
Encoding

Encoding: FC A9 (lead byte FC selects table 2), then 0 operand byte(s); total instruction length 2 byte(s).
Operands: none. All inputs come from the evaluation stack or the frame.

Evidence and notes

Emitted by VB6 SP6 (P-code): not observed in about 3,070 probe programs. The slot exists in the runtime's dispatch table, but no tested source construct makes the compiler emit it.

Handler: 0x66108F89, shared by 2 dispatch slots (real opcode #162). This is a duplicate slot of (0,A5) Ary1StFPR4. Other slots: (0,A5) Ary1StFPR4.

Slots sharing this handler

(0,0xA5) Ary1StFPR4

Description: draft, by claude-opus-4.7. Handler 0x66108F89, dispatch slot 0x661077B8, modOpcodes line 685.

Ary1StFPR8

(0,0xA6)emittedprimary of 2handler #163Arrayconfirmed_msdocs
SafeArray operation: Ary1StFPR8.

Operates on a VB6 SafeArray. See the printf template for the element-type and indexing form. AryLock/AryUnlock increment/decrement the array's lock count (required around direct element access). Ary1Ld*/Ary1St* load/store an element of a 1-D array; multi-dim variants exist in wider opcode tables. Erase releases an array's storage.

When the compiler emits it

Emitted at array element access, Erase, and at the begin/end of arc through a SafeArray.

VB6 source (verified: compiles to this slot)
Public Sub Main()
  Dim a(5) As Date, b As Date, i As Long
  a(i) = #1/1/2000#
End Sub
Encoding, evidence and notes
Encoding

Encoding: A6, then 0 operand byte(s); total instruction length 1 byte(s).
Operands: none. All inputs come from the evaluation stack or the frame.
Observed: A6 Ary1StFPR8

Evidence and notes

Emitted by VB6 SP6 (P-code): yes. Minimal probe: probes\op\0_A6_Ary1StFPR8.

Handler: 0x66108FA7, shared by 2 dispatch slots (real opcode #163). This is the primary slot. Other slots: (2,AA) Ary1StFPR8.

Slots sharing this handler

(2,0xAA) Ary1StFPR8

Description: draft, by claude-opus-4.7. Handler 0x66108FA7, dispatch slot 0x66106FAC, modOpcodes line 669.

Ary1StFPR8

(2,0xAA)not emitteddup of (0,A6)handler #163Arrayconfirmed_handler
(alias) SafeArray operation: Ary1StFPR8.

Alias dispatch slot (2, 0xAA) for the canonical Ary1StFPR8 at (0, 0xA6); semantics are identical.

Operates on a VB6 SafeArray. See the printf template for the element-type and indexing form. AryLock/AryUnlock increment/decrement the array's lock count (required around direct element access). Ary1Ld*/Ary1St* load/store an element of a 1-D array; multi-dim variants exist in wider opcode tables. Erase releases an array's storage.

When the compiler emits it

Emitted at array element access, Erase, and at the begin/end of arc through a SafeArray.

Encoding, evidence and notes
Encoding

Encoding: FC AA (lead byte FC selects table 2), then 0 operand byte(s); total instruction length 2 byte(s).
Operands: none. All inputs come from the evaluation stack or the frame.

Evidence and notes

Emitted by VB6 SP6 (P-code): not observed in about 3,070 probe programs. The slot exists in the runtime's dispatch table, but no tested source construct makes the compiler emit it.

Handler: 0x66108FA7, shared by 2 dispatch slots (real opcode #163). This is a duplicate slot of (0,A6) Ary1StFPR8. Other slots: (0,A6) Ary1StFPR8.

Slots sharing this handler

(0,0xA6) Ary1StFPR8

Description: draft, by claude-opus-4.7. Handler 0x66108FA7, dispatch slot 0x661077BC, modOpcodes line 686.

Ary1StI2

(0,0xA2)emittedprimary of 2handler #159Arrayconfirmed_msdocs
SafeArray operation: Ary1StI2.

Operates on a VB6 SafeArray. See the printf template for the element-type and indexing form. AryLock/AryUnlock increment/decrement the array's lock count (required around direct element access). Ary1Ld*/Ary1St* load/store an element of a 1-D array; multi-dim variants exist in wider opcode tables. Erase releases an array's storage.

When the compiler emits it

Emitted at array element access, Erase, and at the begin/end of arc through a SafeArray.

VB6 source (verified: compiles to this slot)
Public Sub Main()
  Dim a(5) As Boolean, b As Boolean, i As Long
  a(i) = True
End Sub
Encoding, evidence and notes
Encoding

Encoding: A2, then 0 operand byte(s); total instruction length 1 byte(s).
Operands: none. All inputs come from the evaluation stack or the frame.
Observed: A2 Ary1StI2

Evidence and notes

Emitted by VB6 SP6 (P-code): yes. Minimal probe: probes\op\0_A2_Ary1StI2.

Handler: 0x66108F47, shared by 2 dispatch slots (real opcode #159). This is the primary slot. Other slots: (2,A1) Ary1StI2.

Slots sharing this handler

(2,0xA1) Ary1StI2

Description: draft, by claude-opus-4.7. Handler 0x66108F47, dispatch slot 0x66106F9C, modOpcodes line 653.

Ary1StI2

(2,0xA1)not emitteddup of (0,A2)handler #159Arrayconfirmed_handler
(alias) SafeArray operation: Ary1StI2.

Alias dispatch slot (2, 0xA1) for the canonical Ary1StI2 at (0, 0xA2); semantics are identical.

Operates on a VB6 SafeArray. See the printf template for the element-type and indexing form. AryLock/AryUnlock increment/decrement the array's lock count (required around direct element access). Ary1Ld*/Ary1St* load/store an element of a 1-D array; multi-dim variants exist in wider opcode tables. Erase releases an array's storage.

When the compiler emits it

Emitted at array element access, Erase, and at the begin/end of arc through a SafeArray.

Encoding, evidence and notes
Encoding

Encoding: FC A1 (lead byte FC selects table 2), then 0 operand byte(s); total instruction length 2 byte(s).
Operands: none. All inputs come from the evaluation stack or the frame.

Evidence and notes

Emitted by VB6 SP6 (P-code): not observed in about 3,070 probe programs. The slot exists in the runtime's dispatch table, but no tested source construct makes the compiler emit it.

Handler: 0x66108F47, shared by 2 dispatch slots (real opcode #159). This is a duplicate slot of (0,A2) Ary1StI2. Other slots: (0,A2) Ary1StI2.

Slots sharing this handler

(0,0xA2) Ary1StI2

Description: draft, by claude-opus-4.7. Handler 0x66108F47, dispatch slot 0x66107798, modOpcodes line 654.

Ary1StI4

(0,0xA3)emittedprimary of 3handler #160Arrayconfirmed_msdocs9 corpus hits
SafeArray operation: Ary1StI4.

Operates on a VB6 SafeArray. See the printf template for the element-type and indexing form. AryLock/AryUnlock increment/decrement the array's lock count (required around direct element access). Ary1Ld*/Ary1St* load/store an element of a 1-D array; multi-dim variants exist in wider opcode tables. Erase releases an array's storage.

When the compiler emits it

Emitted at array element access, Erase, and at the begin/end of arc through a SafeArray.

VB6 source (verified: compiles to this slot)
Public Sub Main()
  Dim a(5) As Long, b As Long, i As Long
  a(i) = 70000
End Sub
Encoding, evidence and notes
Encoding

Encoding: A3, then 0 operand byte(s); total instruction length 1 byte(s).
Operands: none. All inputs come from the evaluation stack or the frame.
Observed: A3 Ary1StI4

Examples
modCrc.Proc_446CFC @ 0x446CFC | 446DA1    A3                    Ary1StI4
modActionScript.Proc_45A518 @ 0x45A518 | 45A560    A3                    Ary1StI4
modActionScript.Proc_45A518 @ 0x45A518 | 45A584    A3                    Ary1StI4

9 occurrence(s) in PDFStreamDumper.

Evidence and notes

Emitted by VB6 SP6 (P-code): yes. Minimal probe: probes\op\0_A3_Ary1StI4.

Handler: 0x66108F5D, shared by 3 dispatch slots (real opcode #160). This is the primary slot. Other slots: (2,A2) Ary1StR4, (2,A3) Ary1StR4.

Corpus: 9 occurrence(s) in PDFStreamDumper_p.exe.

Slots sharing this handler

(2,0xA2) Ary1StR4, (2,0xA3) Ary1StR4

Description: draft, by claude-opus-4.7. Handler 0x66108F5D, dispatch slot 0x66106FA0, modOpcodes line 660.

Ary1StR4

(2,0xA2)not emitteddup of (0,A3)handler #160Arrayconfirmed_msdocs
SafeArray operation: Ary1StR4.

Operates on a VB6 SafeArray. See the printf template for the element-type and indexing form. AryLock/AryUnlock increment/decrement the array's lock count (required around direct element access). Ary1Ld*/Ary1St* load/store an element of a 1-D array; multi-dim variants exist in wider opcode tables. Erase releases an array's storage.

When the compiler emits it

Emitted at array element access, Erase, and at the begin/end of arc through a SafeArray.

Encoding, evidence and notes
Encoding

Encoding: FC A2 (lead byte FC selects table 2), then 0 operand byte(s); total instruction length 2 byte(s).
Operands: none. All inputs come from the evaluation stack or the frame.

Evidence and notes

Emitted by VB6 SP6 (P-code): not observed in about 3,070 probe programs. The slot exists in the runtime's dispatch table, but no tested source construct makes the compiler emit it.

Handler: 0x66108F5D, shared by 3 dispatch slots (real opcode #160). This is a duplicate slot of (0,A3) Ary1StI4. Other slots: (0,A3) Ary1StI4, (2,A3) Ary1StR4.

Slots sharing this handler

(0,0xA3) Ary1StI4, (2,0xA3) Ary1StR4

Description: draft, by claude-opus-4.7. Handler 0x66108F5D, dispatch slot 0x6610779C, modOpcodes line 678.

Ary1StR4

(2,0xA3)not emitteddup of (0,A3)handler #160Arrayconfirmed_handler
(alias) SafeArray operation: Ary1StR4.

Alias dispatch slot (2, 0xA3) for the canonical Ary1StR4 at (2, 0xA2); semantics are identical.

Operates on a VB6 SafeArray. See the printf template for the element-type and indexing form. AryLock/AryUnlock increment/decrement the array's lock count (required around direct element access). Ary1Ld*/Ary1St* load/store an element of a 1-D array; multi-dim variants exist in wider opcode tables. Erase releases an array's storage.

When the compiler emits it

Emitted at array element access, Erase, and at the begin/end of arc through a SafeArray.

Encoding, evidence and notes
Encoding

Encoding: FC A3 (lead byte FC selects table 2), then 0 operand byte(s); total instruction length 2 byte(s).
Operands: none. All inputs come from the evaluation stack or the frame.

Evidence and notes

Emitted by VB6 SP6 (P-code): not observed in about 3,070 probe programs. The slot exists in the runtime's dispatch table, but no tested source construct makes the compiler emit it.

Handler: 0x66108F5D, shared by 3 dispatch slots (real opcode #160). This is a duplicate slot of (0,A3) Ary1StI4. Other slots: (0,A3) Ary1StI4, (2,A2) Ary1StR4.

Slots sharing this handler

(0,0xA3) Ary1StI4, (2,0xA2) Ary1StR4

Description: draft, by claude-opus-4.7. Handler 0x66108F5D, dispatch slot 0x661077A0, modOpcodes line 679.

Ary1StStr

(2,0xA7)not emittedhandler #435Arrayconfirmed_msdocs
SafeArray operation: Ary1StStr.

Operates on a VB6 SafeArray. See the printf template for the element-type and indexing form. AryLock/AryUnlock increment/decrement the array's lock count (required around direct element access). Ary1Ld*/Ary1St* load/store an element of a 1-D array; multi-dim variants exist in wider opcode tables. Erase releases an array's storage.

When the compiler emits it

Emitted at array element access, Erase, and at the begin/end of arc through a SafeArray.

Encoding, evidence and notes
Encoding

Encoding: FC A7 (lead byte FC selects table 2), then 0 operand byte(s); total instruction length 2 byte(s).
Operands: none. All inputs come from the evaluation stack or the frame.

Evidence and notes

Emitted by VB6 SP6 (P-code): not observed in about 3,070 probe programs. The slot exists in the runtime's dispatch table, but no tested source construct makes the compiler emit it.

Handler: 0x6610B305, unique to this slot (real opcode #435).

Description: draft, by claude-opus-4.7. Handler 0x6610B305, dispatch slot 0x661077B0, modOpcodes line 683.

Ary1StStrCopy

(0,0x3B)emittedprimary of 2handler #58Arrayconfirmed_msdocs19 corpus hits
SafeArray operation: Ary1StStrCopy.

Operates on a VB6 SafeArray. See the printf template for the element-type and indexing form. AryLock/AryUnlock increment/decrement the array's lock count (required around direct element access). Ary1Ld*/Ary1St* load/store an element of a 1-D array; multi-dim variants exist in wider opcode tables. Erase releases an array's storage.

When the compiler emits it

Emitted at array element access, Erase, and at the begin/end of arc through a SafeArray.

VB6 source (verified: compiles to this slot)
Public Sub Main()
  Dim a(5) As String, b As String, i As Long
  a(i) = "abc"
End Sub
Encoding, evidence and notes
Encoding

Encoding: 3B, then 0 operand byte(s); total instruction length 1 byte(s).
Operands: none. All inputs come from the evaluation stack or the frame.
Observed: 3B Ary1StStrCopy

Examples
clsCmnDlg.SetCustomFilter @ 0x451414 | 45147B    3B                    Ary1StStrCopy
clsCmnDlg.SetCustomFilter @ 0x451414 | 4514C9    3B                    Ary1StStrCopy
clsCmnDlg.SetCustomFilter @ 0x451414 | 451508    3B                    Ary1StStrCopy

19 occurrence(s) in PDFStreamDumper.

Evidence and notes

Emitted by VB6 SP6 (P-code): yes. Minimal probe: probes\op\0_3B_Ary1StStrCopy.

Handler: 0x6610B317, shared by 2 dispatch slots (real opcode #58). This is the primary slot. Other slots: (2,B1) Ary1StStrCopy.

Corpus: 19 occurrence(s) in PDFStreamDumper_p.exe.

Slots sharing this handler

(2,0xB1) Ary1StStrCopy

Description: draft, by claude-opus-4.7. Handler 0x6610B317, dispatch slot 0x66106E00, modOpcodes line 699.

Ary1StStrCopy

(2,0xB1)not emitteddup of (0,3B)handler #58Arrayconfirmed_handler
(alias) SafeArray operation: Ary1StStrCopy.

Alias dispatch slot (2, 0xB1) for the canonical Ary1StStrCopy at (0, 0x3B); semantics are identical.

Operates on a VB6 SafeArray. See the printf template for the element-type and indexing form. AryLock/AryUnlock increment/decrement the array's lock count (required around direct element access). Ary1Ld*/Ary1St* load/store an element of a 1-D array; multi-dim variants exist in wider opcode tables. Erase releases an array's storage.

When the compiler emits it

Emitted at array element access, Erase, and at the begin/end of arc through a SafeArray.

Encoding, evidence and notes
Encoding

Encoding: FC B1 (lead byte FC selects table 2), then 0 operand byte(s); total instruction length 2 byte(s).
Operands: none. All inputs come from the evaluation stack or the frame.

Evidence and notes

Emitted by VB6 SP6 (P-code): not observed in about 3,070 probe programs. The slot exists in the runtime's dispatch table, but no tested source construct makes the compiler emit it.

Handler: 0x6610B317, shared by 2 dispatch slots (real opcode #58). This is a duplicate slot of (0,3B) Ary1StStrCopy. Other slots: (0,3B) Ary1StStrCopy.

Slots sharing this handler

(0,0x3B) Ary1StStrCopy

Description: draft, by claude-opus-4.7. Handler 0x6610B317, dispatch slot 0x661077D8, modOpcodes line 701.

Ary1StUI1

(2,0xA0)emittedhandler #434Arrayconfirmed_msdocs55 corpus hits
SafeArray operation: Ary1StUI1.

Operates on a VB6 SafeArray. See the printf template for the element-type and indexing form. AryLock/AryUnlock increment/decrement the array's lock count (required around direct element access). Ary1Ld*/Ary1St* load/store an element of a 1-D array; multi-dim variants exist in wider opcode tables. Erase releases an array's storage.

When the compiler emits it

Emitted at array element access, Erase, and at the begin/end of arc through a SafeArray.

VB6 source (verified: compiles to this slot)
Public Sub Main()
  Dim a(5) As Byte, b As Byte, i As Long
  a(i) = 7
End Sub
Encoding, evidence and notes
Encoding

Encoding: FC A0 (lead byte FC selects table 2), then 0 operand byte(s); total instruction length 2 byte(s).
Operands: none. All inputs come from the evaluation stack or the frame.
Observed: FCA0 Ary1StUI1

Examples
Form1.mnuDecompressSWC_Click @ 0x45E9E4 | 45EBAC    FCA0                  Ary1StUI1
Form1.mnuUpdateCurrent_Click @ 0x46EC0C | 46F008    FCA0                  Ary1StUI1
Form2.Shellcode2Exe @ 0x470410 | 4705F5    FCA0                  Ary1StUI1

55 occurrence(s) in PDFStreamDumper.

Evidence and notes

Emitted by VB6 SP6 (P-code): yes. Minimal probe: probes\op\2_A0_Ary1StUI1.

Handler: 0x66108F32, unique to this slot (real opcode #434).

Corpus: 55 occurrence(s) in PDFStreamDumper_p.exe.

Description: draft, by claude-opus-4.7. Handler 0x66108F32, dispatch slot 0x66107794, modOpcodes line 677.

Ary1StVar

(0,0x52)emittedprimary of 2handler #80Arrayconfirmed_msdocs
SafeArray operation: Ary1StVar.

Operates on a VB6 SafeArray. See the printf template for the element-type and indexing form. AryLock/AryUnlock increment/decrement the array's lock count (required around direct element access). Ary1Ld*/Ary1St* load/store an element of a 1-D array; multi-dim variants exist in wider opcode tables. Erase releases an array's storage.

When the compiler emits it

Emitted at array element access, Erase, and at the begin/end of arc through a SafeArray.

VB6 source (verified: compiles to this slot)
Public Sub Main()
  Dim a(5) As Variant, b As Variant, i As Long
  a(i) = 5
End Sub
Encoding, evidence and notes
Encoding

Encoding: 52, then 0 operand byte(s); total instruction length 1 byte(s).
Operands: none. All inputs come from the evaluation stack or the frame.
Observed: 52 Ary1StVar

Evidence and notes

Emitted by VB6 SP6 (P-code): yes. Minimal probe: probes\op\0_52_Ary1StVar.

Handler: 0x66106563, shared by 2 dispatch slots (real opcode #80). This is the primary slot. Other slots: (2,A6) Ary1StVar.

Slots sharing this handler

(2,0xA6) Ary1StVar

Description: draft, by claude-opus-4.7. Handler 0x66106563, dispatch slot 0x66106E5C, modOpcodes line 650.

Ary1StVar

(2,0xA6)not emitteddup of (0,52)handler #80Arrayconfirmed_handler
(alias) SafeArray operation: Ary1StVar.

Alias dispatch slot (2, 0xA6) for the canonical Ary1StVar at (0, 0x52); semantics are identical.

Operates on a VB6 SafeArray. See the printf template for the element-type and indexing form. AryLock/AryUnlock increment/decrement the array's lock count (required around direct element access). Ary1Ld*/Ary1St* load/store an element of a 1-D array; multi-dim variants exist in wider opcode tables. Erase releases an array's storage.

When the compiler emits it

Emitted at array element access, Erase, and at the begin/end of arc through a SafeArray.

Encoding, evidence and notes
Encoding

Encoding: FC A6 (lead byte FC selects table 2), then 0 operand byte(s); total instruction length 2 byte(s).
Operands: none. All inputs come from the evaluation stack or the frame.

Evidence and notes

Emitted by VB6 SP6 (P-code): not observed in about 3,070 probe programs. The slot exists in the runtime's dispatch table, but no tested source construct makes the compiler emit it.

Handler: 0x66106563, shared by 2 dispatch slots (real opcode #80). This is a duplicate slot of (0,52) Ary1StVar. Other slots: (0,52) Ary1StVar.

Slots sharing this handler

(0,0x52) Ary1StVar

Description: draft, by claude-opus-4.7. Handler 0x66106563, dispatch slot 0x661077AC, modOpcodes line 682.

Ary1StVarAd

(2,0xAB)emittedhandler #437Arrayconfirmed_msdocs
SafeArray operation: Ary1StVarAd.

Operates on a VB6 SafeArray. See the printf template for the element-type and indexing form. AryLock/AryUnlock increment/decrement the array's lock count (required around direct element access). Ary1Ld*/Ary1St* load/store an element of a 1-D array; multi-dim variants exist in wider opcode tables. Erase releases an array's storage.

When the compiler emits it

Emitted at array element access, Erase, and at the begin/end of arc through a SafeArray.

VB6 source (verified: compiles to this slot)
Public Sub Main()
  Dim a(3) As Object, u(3) As IUnknown, v(3) As Variant, c(3) As Collection, o As Object, i As Long
  Set v(i) = F()
End Sub

Function F() As Object
End Function
Function G() As Collection
End Function
Encoding, evidence and notes
Encoding

Encoding: FC AB (lead byte FC selects table 2), then 0 operand byte(s); total instruction length 2 byte(s).
Operands: none. All inputs come from the evaluation stack or the frame.
Observed: FCAB Ary1StVarAd

Evidence and notes

Emitted by VB6 SP6 (P-code): yes. Minimal probe: probes\op\2_AB_Ary1StVarAd.

Handler: 0x66106457, unique to this slot (real opcode #437).

Description: draft, by claude-opus-4.7. Handler 0x66106457, dispatch slot 0x661077C0, modOpcodes line 688.

Ary1StVarAdFunc

(2,0xAC)not emittedhandler #438Arrayconfirmed_msdocs
SafeArray operation: Ary1StVarAdFunc.

Operates on a VB6 SafeArray. See the printf template for the element-type and indexing form. AryLock/AryUnlock increment/decrement the array's lock count (required around direct element access). Ary1Ld*/Ary1St* load/store an element of a 1-D array; multi-dim variants exist in wider opcode tables. Erase releases an array's storage.

When the compiler emits it

Emitted at array element access, Erase, and at the begin/end of arc through a SafeArray.

Encoding, evidence and notes
Encoding

Encoding: FC AC (lead byte FC selects table 2), then 0 operand byte(s); total instruction length 2 byte(s).
Operands: none. All inputs come from the evaluation stack or the frame.

Evidence and notes

Emitted by VB6 SP6 (P-code): not observed in about 3,070 probe programs. The slot exists in the runtime's dispatch table, but no tested source construct makes the compiler emit it.

Handler: 0x6610B4CF, unique to this slot (real opcode #438).

Description: draft, by claude-opus-4.7. Handler 0x6610B4CF, dispatch slot 0x661077C4, modOpcodes line 694.

Ary1StVarCopy

(2,0xB0)emittedhandler #442Arrayconfirmed_msdocs283 corpus hits
SafeArray operation: Ary1StVarCopy.

Operates on a VB6 SafeArray. See the printf template for the element-type and indexing form. AryLock/AryUnlock increment/decrement the array's lock count (required around direct element access). Ary1Ld*/Ary1St* load/store an element of a 1-D array; multi-dim variants exist in wider opcode tables. Erase releases an array's storage.

When the compiler emits it

Emitted at array element access, Erase, and at the begin/end of arc through a SafeArray.

VB6 source (verified: compiles to this slot)
Public Sub Main()
  ReDim a(5)
End Sub

Sub P(x() As Variant)
  Dim b As Variant
  x(1) = b
  b = x(2)
End Sub
Encoding, evidence and notes
Encoding

Encoding: FC B0 (lead byte FC selects table 2), then 0 operand byte(s); total instruction length 2 byte(s).
Operands: none. All inputs come from the evaluation stack or the frame.
Observed: FCB0 Ary1StVarCopy

Examples
Form1.Form_Load @ 0x479DC0 | 47A073    FCB0                  Ary1StVarCopy
Form1.Form_Load @ 0x479DC0 | 47A082    FCB0                  Ary1StVarCopy
Form1.Form_Load @ 0x479DC0 | 47A091    FCB0                  Ary1StVarCopy

283 occurrence(s) in PDFStreamDumper.

Evidence and notes

Emitted by VB6 SP6 (P-code): yes. Minimal probe: probes\op\2_B0_Ary1StVarCopy.

Handler: 0x6610B6C6, unique to this slot (real opcode #442).

Corpus: 283 occurrence(s) in PDFStreamDumper_p.exe.

Description: draft, by claude-opus-4.7. Handler 0x6610B6C6, dispatch slot 0x661077D4, modOpcodes line 700.

Ary1StVarUnk

(2,0xAD)emittedhandler #439Arrayconfirmed_msdocs
SafeArray operation: Ary1StVarUnk.

Operates on a VB6 SafeArray. See the printf template for the element-type and indexing form. AryLock/AryUnlock increment/decrement the array's lock count (required around direct element access). Ary1Ld*/Ary1St* load/store an element of a 1-D array; multi-dim variants exist in wider opcode tables. Erase releases an array's storage.

When the compiler emits it

Emitted at array element access, Erase, and at the begin/end of arc through a SafeArray.

VB6 source (verified: compiles to this slot)
Public Sub Main()
  Dim v(3) As Variant, i As Long, u As IUnknown, o(3) As Object
  Set v(i) = u
End Sub

Function FU() As IUnknown
End Function
Function FO() As Object
End Function
Function FC() As Collection
End Function
Encoding, evidence and notes
Encoding

Encoding: FC AD (lead byte FC selects table 2), then 0 operand byte(s); total instruction length 2 byte(s).
Operands: none. All inputs come from the evaluation stack or the frame.
Observed: FCAD Ary1StVarUnk

Evidence and notes

Emitted by VB6 SP6 (P-code): yes. Minimal probe: probes\op\2_AD_Ary1StVarUnk.

Handler: 0x6610B566, unique to this slot (real opcode #439).

Description: draft, by claude-opus-4.7. Handler 0x6610B566, dispatch slot 0x661077C8, modOpcodes line 691.

Ary1StVarUnkFunc

(2,0xAE)not emittedhandler #440Arrayconfirmed_msdocs
SafeArray operation: Ary1StVarUnkFunc.

Operates on a VB6 SafeArray. See the printf template for the element-type and indexing form. AryLock/AryUnlock increment/decrement the array's lock count (required around direct element access). Ary1Ld*/Ary1St* load/store an element of a 1-D array; multi-dim variants exist in wider opcode tables. Erase releases an array's storage.

When the compiler emits it

Emitted at array element access, Erase, and at the begin/end of arc through a SafeArray.

Encoding, evidence and notes
Encoding

Encoding: FC AE (lead byte FC selects table 2), then 0 operand byte(s); total instruction length 2 byte(s).
Operands: none. All inputs come from the evaluation stack or the frame.

Evidence and notes

Emitted by VB6 SP6 (P-code): not observed in about 3,070 probe programs. The slot exists in the runtime's dispatch table, but no tested source construct makes the compiler emit it.

Handler: 0x6610B54A, unique to this slot (real opcode #440).

Description: draft, by claude-opus-4.7. Handler 0x6610B54A, dispatch slot 0x661077CC, modOpcodes line 696.

Ary1StVarg

(2,0xB5)emittedhandler #446Arrayconfirmed_msdocs
SafeArray operation: Ary1StVarg.

Operates on a VB6 SafeArray. See the printf template for the element-type and indexing form. AryLock/AryUnlock increment/decrement the array's lock count (required around direct element access). Ary1Ld*/Ary1St* load/store an element of a 1-D array; multi-dim variants exist in wider opcode tables. Erase releases an array's storage.

When the compiler emits it

Emitted at array element access, Erase, and at the begin/end of arc through a SafeArray.

VB6 source (verified: compiles to this slot)
Public Sub Main()
  
End Sub

Sub PA(ParamArray p() As Variant)
  PB p(0)
  Set p(1) = Nothing
  p(1) = 1
End Sub
Sub PB(x As Variant)
End Sub
Encoding, evidence and notes
Encoding

Encoding: FC B5 (lead byte FC selects table 2), then 0 operand byte(s); total instruction length 2 byte(s).
Operands: none. All inputs come from the evaluation stack or the frame.
Observed: FCB5 Ary1StVarg

Evidence and notes

Emitted by VB6 SP6 (P-code): yes. Minimal probe: probes\op\2_B5_Ary1StVarg.

Handler: 0x6610B777, unique to this slot (real opcode #446).

Description: draft, by claude-opus-4.7. Handler 0x6610B777, dispatch slot 0x661077E8, modOpcodes line 704.

Ary1StVargAd

(2,0xB7)emittedhandler #448Arrayconfirmed_msdocs
SafeArray operation: Ary1StVargAd.

Operates on a VB6 SafeArray. See the printf template for the element-type and indexing form. AryLock/AryUnlock increment/decrement the array's lock count (required around direct element access). Ary1Ld*/Ary1St* load/store an element of a 1-D array; multi-dim variants exist in wider opcode tables. Erase releases an array's storage.

When the compiler emits it

Emitted at array element access, Erase, and at the begin/end of arc through a SafeArray.

VB6 source (verified: compiles to this slot)
Public Sub Main()
  
End Sub

Sub PA(ParamArray p() As Variant)
  Dim o As Object
  Set o = p(0)
  Set p(0) = o
End Sub
Encoding, evidence and notes
Encoding

Encoding: FC B7 (lead byte FC selects table 2), then 0 operand byte(s); total instruction length 2 byte(s).
Operands: none. All inputs come from the evaluation stack or the frame.
Observed: FCB7 Ary1StVargAd

Evidence and notes

Emitted by VB6 SP6 (P-code): yes. Minimal probe: probes\op\2_B7_Ary1StVargAd.

Handler: 0x6610B4F1, unique to this slot (real opcode #448).

Description: draft, by claude-opus-4.7. Handler 0x6610B4F1, dispatch slot 0x661077F0, modOpcodes line 689.

Ary1StVargAdFunc

(2,0xB8)not emittedhandler #449Arrayconfirmed_msdocs
SafeArray operation: Ary1StVargAdFunc.

Operates on a VB6 SafeArray. See the printf template for the element-type and indexing form. AryLock/AryUnlock increment/decrement the array's lock count (required around direct element access). Ary1Ld*/Ary1St* load/store an element of a 1-D array; multi-dim variants exist in wider opcode tables. Erase releases an array's storage.

When the compiler emits it

Emitted at array element access, Erase, and at the begin/end of arc through a SafeArray.

Encoding, evidence and notes
Encoding

Encoding: FC B8 (lead byte FC selects table 2), then 0 operand byte(s); total instruction length 2 byte(s).
Operands: none. All inputs come from the evaluation stack or the frame.

Evidence and notes

Emitted by VB6 SP6 (P-code): not observed in about 3,070 probe programs. The slot exists in the runtime's dispatch table, but no tested source construct makes the compiler emit it.

Handler: 0x6610B4D9, unique to this slot (real opcode #449).

Description: draft, by claude-opus-4.7. Handler 0x6610B4D9, dispatch slot 0x661077F4, modOpcodes line 695.

Ary1StVargCopy

(2,0xB6)emittedhandler #447Arrayconfirmed_msdocs
SafeArray operation: Ary1StVargCopy.

Operates on a VB6 SafeArray. See the printf template for the element-type and indexing form. AryLock/AryUnlock increment/decrement the array's lock count (required around direct element access). Ary1Ld*/Ary1St* load/store an element of a 1-D array; multi-dim variants exist in wider opcode tables. Erase releases an array's storage.

When the compiler emits it

Emitted at array element access, Erase, and at the begin/end of arc through a SafeArray.

VB6 source (verified: compiles to this slot)
Public Sub Main()
  Dim a As Boolean
End Sub

Sub PA(ParamArray p() As Variant)
  Dim i As Long, v As Variant
  i = 1
  v = p(i)
  p(i) = v
  For Each v In p
  Next
  i = UBound(p)
End Sub
Encoding, evidence and notes
Encoding

Encoding: FC B6 (lead byte FC selects table 2), then 0 operand byte(s); total instruction length 2 byte(s).
Operands: none. All inputs come from the evaluation stack or the frame.
Observed: FCB6 Ary1StVargCopy

Evidence and notes

Emitted by VB6 SP6 (P-code): yes. Minimal probe: probes\op\2_B6_Ary1StVargCopy.

Handler: 0x6610B755, unique to this slot (real opcode #447).

Description: draft, by claude-opus-4.7. Handler 0x6610B755, dispatch slot 0x661077EC, modOpcodes line 706.

Ary1StVargUnk

(2,0xB9)emittedhandler #450Arrayconfirmed_msdocs
SafeArray operation: Ary1StVargUnk.

Operates on a VB6 SafeArray. See the printf template for the element-type and indexing form. AryLock/AryUnlock increment/decrement the array's lock count (required around direct element access). Ary1Ld*/Ary1St* load/store an element of a 1-D array; multi-dim variants exist in wider opcode tables. Erase releases an array's storage.

When the compiler emits it

Emitted at array element access, Erase, and at the begin/end of arc through a SafeArray.

VB6 source (verified: compiles to this slot)
Public Sub Main()
  
End Sub

Function FU() As IUnknown
End Function
Function FO() As Object
End Function
Function FC() As Collection
End Function
Sub PA(ParamArray p() As Variant)
  Dim u As IUnknown, o As Object, i As Long
  i = 0
  Set p(i) = FU()
  Set p(i) = u
  Set p(i) = FO()
  Set p(i) = o
  p(i) = 5
  Dim w As Variant
  w = p(i)
  P2 p(i)
End Sub
Sub P2(ByVal x As Variant)
End Sub
Encoding, evidence and notes
Encoding

Encoding: FC B9 (lead byte FC selects table 2), then 0 operand byte(s); total instruction length 2 byte(s).
Operands: none. All inputs come from the evaluation stack or the frame.
Observed: FCB9 Ary1StVargUnk

Evidence and notes

Emitted by VB6 SP6 (P-code): yes. Minimal probe: probes\op\2_B9_Ary1StVargUnk.

Handler: 0x6610B5F5, unique to this slot (real opcode #450).

Description: draft, by claude-opus-4.7. Handler 0x6610B5F5, dispatch slot 0x661077F8, modOpcodes line 692.

Ary1StVargUnkFunc

(2,0xBA)not emittedhandler #451Arrayconfirmed_msdocs
SafeArray operation: Ary1StVargUnkFunc.

Operates on a VB6 SafeArray. See the printf template for the element-type and indexing form. AryLock/AryUnlock increment/decrement the array's lock count (required around direct element access). Ary1Ld*/Ary1St* load/store an element of a 1-D array; multi-dim variants exist in wider opcode tables. Erase releases an array's storage.

When the compiler emits it

Emitted at array element access, Erase, and at the begin/end of arc through a SafeArray.

Encoding, evidence and notes
Encoding

Encoding: FC BA (lead byte FC selects table 2), then 0 operand byte(s); total instruction length 2 byte(s).
Operands: none. All inputs come from the evaluation stack or the frame.

Evidence and notes

Emitted by VB6 SP6 (P-code): not observed in about 3,070 probe programs. The slot exists in the runtime's dispatch table, but no tested source construct makes the compiler emit it.

Handler: 0x6610B5E0, unique to this slot (real opcode #451).

Description: draft, by claude-opus-4.7. Handler 0x6610B5E0, dispatch slot 0x661077FC, modOpcodes line 697.

AryDescTemp

(0,0x26)emittedprimary of 2handler #37Arrayinferred_corpus1 corpus hits
SafeArray operation: AryDescTemp.

Operates on a VB6 SafeArray. See the printf template for the element-type and indexing form. AryLock/AryUnlock increment/decrement the array's lock count (required around direct element access). Ary1Ld*/Ary1St* load/store an element of a 1-D array; multi-dim variants exist in wider opcode tables. Erase releases an array's storage.

When the compiler emits it

Emitted at array element access, Erase, and at the begin/end of arc through a SafeArray.

VB6 source (verified: compiles to this slot)
Private Type TR
  a(3) As Boolean
End Type

Public Sub Main()
  Dim r As TR, n As Long
  P r.a
End Sub

Private Sub P(x() As Boolean)
End Sub
Encoding, evidence and notes
Encoding

Encoding: 26, then 2 operand byte(s); total instruction length 3 byte(s).
vbdec template: %a
Operands:

  1. %a: local_var_ref, 2 byte(s). signed 16-bit offset from the procedure frame pointer (EBP). Negative = local/temporary (vbdec var_XX, XX = -offset), positive = argument (arg_XX).

Observed: 26 58FF AryDescTemp var_A8

Examples
lzma.Proc_46E084 @ 0x46E084 | 46E220    26 B0FE               AryDescTemp var_150

1 occurrence(s) in PDFStreamDumper.

Evidence and notes

Emitted by VB6 SP6 (P-code): yes. Minimal probe: probes\op\0_26_AryDescTemp.

Handler: 0x6610903E, shared by 2 dispatch slots (real opcode #37). This is the primary slot. Other slots: (3,0F) AryDescTemp.

Corpus: 1 occurrence(s) in PDFStreamDumper_p.exe.

Slots sharing this handler

(3,0x0F) AryDescTemp

Description: draft, by claude-opus-4.7. Handler 0x6610903E, dispatch slot 0x66106DAC, modOpcodes line 645.

AryDescTemp

(3,0x0F)not emitteddup of (0,26)handler #37Arrayconfirmed_handler
Same handler as (0,0x26) AryDescTemp: SafeArray operation: AryDescTemp.
Encoding, evidence and notes
Encoding

Encoding: FD 0F (lead byte FD selects table 3), then 2 operand byte(s); total instruction length 4 byte(s).
vbdec template: %a
Operands:

  1. %a: local_var_ref, 2 byte(s). signed 16-bit offset from the procedure frame pointer (EBP). Negative = local/temporary (vbdec var_XX, XX = -offset), positive = argument (arg_XX).
Evidence and notes

Emitted by VB6 SP6 (P-code): not observed in about 3,070 probe programs. The slot exists in the runtime's dispatch table, but no tested source construct makes the compiler emit it.

Handler: 0x6610903E, shared by 2 dispatch slots (real opcode #37). This is a duplicate slot of (0,26) AryDescTemp. Other slots: (0,26) AryDescTemp.

Slots sharing this handler

(0,0x26) AryDescTemp

Description: none. Handler 0x6610903E, dispatch slot 0x66107950, modOpcodes line 646.

AryInRecLdPr

(5,0x06)emittedhandler #732UDT / recordinferred_corpus3 corpus hits
SafeArray operation: AryInRecLdPr.

Operates on a VB6 SafeArray. See the printf template for the element-type and indexing form. AryLock/AryUnlock increment/decrement the array's lock count (required around direct element access). Ary1Ld*/Ary1St* load/store an element of a 1-D array; multi-dim variants exist in wider opcode tables. Erase releases an array's storage.

When the compiler emits it

Emitted at array element access, Erase, and at the begin/end of arc through a SafeArray.

VB6 source (verified: compiles to this slot)
Private Type TRec
  pad As Long
  f(3) As Boolean
End Type

Public Sub Main()
  Dim r As TRec, b As Boolean, i As Long
  b = r.f(i)
End Sub
Encoding, evidence and notes
Encoding

Encoding: FF 06 (lead byte FF selects table 5), then 4 operand byte(s); total instruction length 6 byte(s).
vbdec template: udtPool:%2 dims:%2
Operands:

  1. %2 (udtPool): immediate_word, 2 byte(s). 16-bit immediate.
  2. %2 (dims): immediate_word, 2 byte(s). 16-bit immediate.

Observed: FF06 00000100 AryInRecLdPr udtPool:0x0 dims:0x1

Examples
lzma.Proc_46E084 @ 0x46E084 | 46E18A    FF06 13000100         AryInRecLdPr udtPool:0x13 dims:0x1
lzma.Proc_46E084 @ 0x46E084 | 46E23B    FF06 1B000100         AryInRecLdPr udtPool:0x1B dims:0x1
lzma.Proc_46E084 @ 0x46E084 | 46E24D    FF06 1B000100         AryInRecLdPr udtPool:0x1B dims:0x1

3 occurrence(s) in PDFStreamDumper.

Evidence and notes

Emitted by VB6 SP6 (P-code): yes. Minimal probe: probes\op\5_06_AryInRecLdPr.

Handler: 0x66109020, unique to this slot (real opcode #732).

Corpus: 3 occurrence(s) in PDFStreamDumper_p.exe.

Description: draft, by claude-opus-4.7. Handler 0x66109020, dispatch slot 0x6610812C, modOpcodes line 641.

AryInRecLdRf

(5,0x07)not emittedhandler #733UDT / recordinferred_corpus1 corpus hits
SafeArray operation: AryInRecLdRf.

Operates on a VB6 SafeArray. See the printf template for the element-type and indexing form. AryLock/AryUnlock increment/decrement the array's lock count (required around direct element access). Ary1Ld*/Ary1St* load/store an element of a 1-D array; multi-dim variants exist in wider opcode tables. Erase releases an array's storage.

When the compiler emits it

Emitted at array element access, Erase, and at the begin/end of arc through a SafeArray.

Encoding, evidence and notes
Encoding

Encoding: FF 07 (lead byte FF selects table 5), then 4 operand byte(s); total instruction length 6 byte(s).
vbdec template: udtPool:%2 dims:%2
Operands:

  1. %2 (udtPool): immediate_word, 2 byte(s). 16-bit immediate.
  2. %2 (dims): immediate_word, 2 byte(s). 16-bit immediate.

Observed: FF07 13000100 AryInRecLdRf udtPool:0x13 dims:0x1

Examples
lzma.Proc_46E084 @ 0x46E084 | 46E4E2    FF07 13000100         AryInRecLdRf udtPool:0x13 dims:0x1

1 occurrence(s) in PDFStreamDumper.

Evidence and notes

Emitted by VB6 SP6 (P-code): not observed in about 3,070 probe programs. The slot exists in the runtime's dispatch table, but no tested source construct makes the compiler emit it.

Handler: 0x66108FF1, unique to this slot (real opcode #733).

Corpus: 1 occurrence(s) in PDFStreamDumper_p.exe.

Description: draft, by claude-opus-4.7. Handler 0x66108FF1, dispatch slot 0x66108130, modOpcodes line 642.

AryLdPr

(0,0xA7)emittedprimary of 2handler #164Arrayinferred_corpus
Compute the address of a multi-dimensional array element and load it into pr.

Pops the array reference and dim index values, bounds-checks them and computes the element address. The address goes into the interpreter's cached object register pr, and the element is then read or written with a Mem* opcode at offset 0 (observed AryLdPr dim:0x3 followed by MemLdStr [pr+0x0] for a Long element).

Stack: [..., i1, i2, ..., iN, ary:Rf] -> [...] (pr = element address)

Operand %2: number of dimensions.

When the compiler emits it

Emitted for element access on arrays with 3 or more dimensions. 1-D arrays use Ary1* opcodes and 2-D/indexed loads use the AryLdRf/Ary* forms.

VB6 source (verified: compiles to this slot)
Public Sub Main()
  Dim a(3, 3, 3) As Long, n As Long, i As Long
  n = a(1, i, 2)
End Sub
Encoding, evidence and notes
Encoding

Encoding: A7, then 2 operand byte(s); total instruction length 3 byte(s).
vbdec template: dim:%2
Operands:

  1. %2 (dim): immediate_word, 2 byte(s). 16-bit immediate.

Observed: A7 0300 AryLdPr dim:0x3

Examples
A7 0300  AryLdPr dim:0x3

From the Phase 4 probe (VB6 SP6, P-code).

Evidence and notes

Emitted by VB6 SP6 (P-code): yes. Minimal probe: probes\op\0_A7_AryLdPr.

Handler: 0x66108FC5, shared by 2 dispatch slots (real opcode #164). This is the primary slot. Other slots: (2,8D) AryLdPr.

Check of vb6_source_eq example: verified: compiles and emits this slot.

Example from the description
Public Sub Main()
  Dim a(3, 3, 3) As Long, n As Long, i As Long
  n = a(1, i, 2)
End Sub
Slots sharing this handler

(2,0x8D) AryLdPr

Description: draft, by claude-opus-5-5. Handler 0x66108FC5, dispatch slot 0x66106FB0, modOpcodes line 637.

AryLdPr

(2,0x8D)not emitteddup of (0,A7)handler #164Arrayconfirmed_handler
Same handler as (0,0xA7) AryLdPr: Compute the address of a multi-dimensional array element and load it into pr.
Encoding, evidence and notes
Encoding

Encoding: FC 8D (lead byte FC selects table 2), then 2 operand byte(s); total instruction length 4 byte(s).
vbdec template: dim %2
Operands:

  1. %2 (dim): immediate_word, 2 byte(s). 16-bit immediate.
Evidence and notes

Emitted by VB6 SP6 (P-code): not observed in about 3,070 probe programs. The slot exists in the runtime's dispatch table, but no tested source construct makes the compiler emit it.

Handler: 0x66108FC5, shared by 2 dispatch slots (real opcode #164). This is a duplicate slot of (0,A7) AryLdPr. Other slots: (0,A7) AryLdPr.

Slots sharing this handler

(0,0xA7) AryLdPr

Description: none. Handler 0x66108FC5, dispatch slot 0x66107748, modOpcodes line 638.

AryLdRf

(0,0xA8)not emittedprimary of 2handler #165Arrayinferred_corpus
No description yet.
Encoding, evidence and notes
Encoding

Encoding: A8, then 2 operand byte(s); total instruction length 3 byte(s).
vbdec template: dim %2
Operands:

  1. %2 (dim): immediate_word, 2 byte(s). 16-bit immediate.
Evidence and notes

Emitted by VB6 SP6 (P-code): not observed in about 3,070 probe programs. The slot exists in the runtime's dispatch table, but no tested source construct makes the compiler emit it.

Handler: 0x66108FDC, shared by 2 dispatch slots (real opcode #165). This is the primary slot. Other slots: (2,8E) AryLdRf.

Slots sharing this handler

(2,0x8E) AryLdRf

Description: none. Handler 0x66108FDC, dispatch slot 0x66106FB4, modOpcodes line 639.

AryLdRf

(2,0x8E)not emitteddup of (0,A8)handler #165Arrayconfirmed_handler
No description yet.
Encoding, evidence and notes
Encoding

Encoding: FC 8E (lead byte FC selects table 2), then 2 operand byte(s); total instruction length 4 byte(s).
vbdec template: dim %2
Operands:

  1. %2 (dim): immediate_word, 2 byte(s). 16-bit immediate.
Evidence and notes

Emitted by VB6 SP6 (P-code): not observed in about 3,070 probe programs. The slot exists in the runtime's dispatch table, but no tested source construct makes the compiler emit it.

Handler: 0x66108FDC, shared by 2 dispatch slots (real opcode #165). This is a duplicate slot of (0,A8) AryLdRf. Other slots: (0,A8) AryLdRf.

Slots sharing this handler

(0,0xA8) AryLdRf

Description: none. Handler 0x66108FDC, dispatch slot 0x6610774C, modOpcodes line 640.

AryLock

(0,0x2E)emittedprimary of 2handler #45Arrayinferred_corpus43 corpus hits
SafeArray operation: AryLock.

Operates on a VB6 SafeArray. See the printf template for the element-type and indexing form. AryLock/AryUnlock increment/decrement the array's lock count (required around direct element access). Ary1Ld*/Ary1St* load/store an element of a 1-D array; multi-dim variants exist in wider opcode tables. Erase releases an array's storage.

When the compiler emits it

Emitted at array element access, Erase, and at the begin/end of arc through a SafeArray.

VB6 source (verified: compiles to this slot)
Public Sub Main()
  Dim a() As Boolean
  P a(2)
End Sub

Sub P(x As Boolean)
End Sub
Encoding, evidence and notes
Encoding

Encoding: 2E, then 2 operand byte(s); total instruction length 3 byte(s).
vbdec template: %a
Operands:

  1. %a: local_var_ref, 2 byte(s). signed 16-bit offset from the procedure frame pointer (EBP). Negative = local/temporary (vbdec var_XX, XX = -offset), positive = argument (arg_XX).

Observed: 2E 74FF AryLock var_8C

Examples
Form1.LoadPlugins @ 0x4644FC | 46464D    2E 98FE               AryLock var_168
Form1.Form_Load @ 0x479DC0 | 47B2CD    2E A4FD               AryLock var_25C
Form1.Form_Load @ 0x479DC0 | 47B332    2E A4FD               AryLock var_25C

43 occurrence(s) in PDFStreamDumper.

Evidence and notes

Emitted by VB6 SP6 (P-code): yes. Minimal probe: probes\op\0_2E_AryLock.

Handler: 0x66105092, shared by 2 dispatch slots (real opcode #45). This is the primary slot. Other slots: (3,0D) AryLock.

Corpus: 43 occurrence(s) in PDFStreamDumper_p.exe.

Slots sharing this handler

(3,0x0D) AryLock

Description: draft, by claude-opus-4.7. Handler 0x66105092, dispatch slot 0x66106DCC, modOpcodes line 625.

AryLock

(3,0x0D)not emitteddup of (0,2E)handler #45Arrayconfirmed_handler
Same handler as (0,0x2E) AryLock: SafeArray operation: AryLock.
Encoding, evidence and notes
Encoding

Encoding: FD 0D (lead byte FD selects table 3), then 2 operand byte(s); total instruction length 4 byte(s).
vbdec template: %a
Operands:

  1. %a: local_var_ref, 2 byte(s). signed 16-bit offset from the procedure frame pointer (EBP). Negative = local/temporary (vbdec var_XX, XX = -offset), positive = argument (arg_XX).
Evidence and notes

Emitted by VB6 SP6 (P-code): not observed in about 3,070 probe programs. The slot exists in the runtime's dispatch table, but no tested source construct makes the compiler emit it.

Handler: 0x66105092, shared by 2 dispatch slots (real opcode #45). This is a duplicate slot of (0,2E) AryLock. Other slots: (0,2E) AryLock.

Slots sharing this handler

(0,0x2E) AryLock

Description: none. Handler 0x66105092, dispatch slot 0x66107948, modOpcodes line 626.

AryUnlock

(0,0x2D)emittedprimary of 2handler #44Arrayinferred_corpus54 corpus hits
SafeArray operation: AryUnlock.

Operates on a VB6 SafeArray. See the printf template for the element-type and indexing form. AryLock/AryUnlock increment/decrement the array's lock count (required around direct element access). Ary1Ld*/Ary1St* load/store an element of a 1-D array; multi-dim variants exist in wider opcode tables. Erase releases an array's storage.

When the compiler emits it

Emitted at array element access, Erase, and at the begin/end of arc through a SafeArray.

VB6 source (verified: compiles to this slot)
Public Sub Main()
  Dim a() As Boolean
  P a(2)
End Sub

Sub P(x As Boolean)
End Sub
Encoding, evidence and notes
Encoding

Encoding: 2D, then 2 operand byte(s); total instruction length 3 byte(s).
vbdec template: %a
Operands:

  1. %a: local_var_ref, 2 byte(s). signed 16-bit offset from the procedure frame pointer (EBP). Negative = local/temporary (vbdec var_XX, XX = -offset), positive = argument (arg_XX).

Observed: 2D 74FF AryUnlock var_8C

Examples
Form1.LoadPlugins @ 0x4644FC | 46465E    2D 98FE               AryUnlock var_168
Form1.Form_Load @ 0x479DC0 | 47A4A8    2D A4FD               AryUnlock var_25C
Form1.Form_Load @ 0x479DC0 | 47B2DE    2D A4FD               AryUnlock var_25C

54 occurrence(s) in PDFStreamDumper.

Evidence and notes

Emitted by VB6 SP6 (P-code): yes. Minimal probe: probes\op\0_2D_AryUnlock.

Handler: 0x661050C0, shared by 2 dispatch slots (real opcode #44). This is the primary slot. Other slots: (3,0E) AryUnlock.

Corpus: 54 occurrence(s) in PDFStreamDumper_p.exe.

Slots sharing this handler

(3,0x0E) AryUnlock

Description: draft, by claude-opus-4.7. Handler 0x661050C0, dispatch slot 0x66106DC8, modOpcodes line 623.

AryUnlock

(3,0x0E)not emitteddup of (0,2D)handler #44Arrayconfirmed_handler
Same handler as (0,0x2D) AryUnlock: SafeArray operation: AryUnlock.
Encoding, evidence and notes
Encoding

Encoding: FD 0E (lead byte FD selects table 3), then 2 operand byte(s); total instruction length 4 byte(s).
vbdec template: %a
Operands:

  1. %a: local_var_ref, 2 byte(s). signed 16-bit offset from the procedure frame pointer (EBP). Negative = local/temporary (vbdec var_XX, XX = -offset), positive = argument (arg_XX).
Evidence and notes

Emitted by VB6 SP6 (P-code): not observed in about 3,070 probe programs. The slot exists in the runtime's dispatch table, but no tested source construct makes the compiler emit it.

Handler: 0x661050C0, shared by 2 dispatch slots (real opcode #44). This is a duplicate slot of (0,2D) AryUnlock. Other slots: (0,2D) AryUnlock.

Slots sharing this handler

(0,0x2D) AryUnlock

Description: none. Handler 0x661050C0, dispatch slot 0x6610794C, modOpcodes line 624.

EraseDestrKeepData

(5,0x31)not emittedhandler #758UDT / recordinferred_corpus
No description yet.
Encoding, evidence and notes
Encoding

Encoding: FF 31 (lead byte FF selects table 5), then 2 operand byte(s); total instruction length 4 byte(s).
No printf operands are declared, but the instruction still consumes operand bytes; see the size above and the observed bytes below. (Phase 3a: flag=0 does not mean 'no operands'.)

Evidence and notes

Emitted by VB6 SP6 (P-code): not observed in about 3,070 probe programs. The slot exists in the runtime's dispatch table, but no tested source construct makes the compiler emit it.

Handler: 0x6610912A, unique to this slot (real opcode #758).

Description: none. Handler 0x6610912A, dispatch slot 0x661081D8, modOpcodes line 436.

FnLBound

(0,0x4C)emittedprimary of 2handler #75Arrayconfirmed_msdocs2 corpus hits
SafeArray operation: FnLBound.

Operates on a VB6 SafeArray. See the printf template for the element-type and indexing form. AryLock/AryUnlock increment/decrement the array's lock count (required around direct element access). Ary1Ld*/Ary1St* load/store an element of a 1-D array; multi-dim variants exist in wider opcode tables. Erase releases an array's storage.

When the compiler emits it

Emitted at array element access, Erase, and at the begin/end of arc through a SafeArray.

VB6 source (verified: compiles to this slot)
Public Sub Main()
  Dim a() As Long, n As Long
  n = LBound(a, 1)
End Sub
Encoding, evidence and notes
Encoding

Encoding: 4C, then 0 operand byte(s); total instruction length 1 byte(s).
Operands: none. All inputs come from the evaluation stack or the frame.
Observed: 4C FnLBound

Examples
CDisassembler.DisasmBlock @ 0x44F108 | 44F112    4C                    FnLBound
b64.Proc_478E48 @ 0x478E48 | 479C33    4C                    FnLBound

2 occurrence(s) in PDFStreamDumper.

Evidence and notes

Emitted by VB6 SP6 (P-code): yes. Minimal probe: probes\op\0_4C_FnLBound.

Handler: 0x6610505A, shared by 2 dispatch slots (real opcode #75). This is the primary slot. Other slots: (2,CA) FnLBound.

Corpus: 2 occurrence(s) in PDFStreamDumper_p.exe.

Slots sharing this handler

(2,0xCA) FnLBound

Description: draft, by claude-opus-4.7. Handler 0x6610505A, dispatch slot 0x66106E44, modOpcodes line 633.

FnLBound

(2,0xCA)not emitteddup of (0,4C)handler #75Arrayconfirmed_handler
(alias) SafeArray operation: FnLBound.

Alias dispatch slot (2, 0xCA) for the canonical FnLBound at (0, 0x4C); semantics are identical.

Operates on a VB6 SafeArray. See the printf template for the element-type and indexing form. AryLock/AryUnlock increment/decrement the array's lock count (required around direct element access). Ary1Ld*/Ary1St* load/store an element of a 1-D array; multi-dim variants exist in wider opcode tables. Erase releases an array's storage.

When the compiler emits it

Emitted at array element access, Erase, and at the begin/end of arc through a SafeArray.

Encoding, evidence and notes
Encoding

Encoding: FC CA (lead byte FC selects table 2), then 0 operand byte(s); total instruction length 2 byte(s).
Operands: none. All inputs come from the evaluation stack or the frame.

Evidence and notes

Emitted by VB6 SP6 (P-code): not observed in about 3,070 probe programs. The slot exists in the runtime's dispatch table, but no tested source construct makes the compiler emit it.

Handler: 0x6610505A, shared by 2 dispatch slots (real opcode #75). This is a duplicate slot of (0,4C) FnLBound. Other slots: (0,4C) FnLBound.

Slots sharing this handler

(0,0x4C) FnLBound

Description: draft, by claude-opus-4.7. Handler 0x6610505A, dispatch slot 0x6610783C, modOpcodes line 634.

FnUBound

(2,0xCB)emittedhandler #460Arrayconfirmed_msdocs159 corpus hits
SafeArray operation: FnUBound.

Operates on a VB6 SafeArray. See the printf template for the element-type and indexing form. AryLock/AryUnlock increment/decrement the array's lock count (required around direct element access). Ary1Ld*/Ary1St* load/store an element of a 1-D array; multi-dim variants exist in wider opcode tables. Erase releases an array's storage.

When the compiler emits it

Emitted at array element access, Erase, and at the begin/end of arc through a SafeArray.

VB6 source (verified: compiles to this slot)
Private Type TR
  a(3) As Boolean
End Type

Public Sub Main()
  Dim r As TR, n As Long
  n = UBound(r.a)
End Sub

Private Sub P(x() As Boolean)
End Sub
Encoding, evidence and notes
Encoding

Encoding: FC CB (lead byte FC selects table 2), then 0 operand byte(s); total instruction length 2 byte(s).
Operands: none. All inputs come from the evaluation stack or the frame.
Observed: FCCB FnUBound

Examples
Form1.LoadPlugins @ 0x4644FC | 464620    FCCB                  FnUBound
Form1.RegisterPlugin @ 0x44CB20 | 44CBBF    FCCB                  FnUBound
Form1.mnuUpdateCurrent_Click @ 0x46EC0C | 46EEDB    FCCB                  FnUBound

159 occurrence(s) in PDFStreamDumper.

Evidence and notes

Emitted by VB6 SP6 (P-code): yes. Minimal probe: probes\op\2_CB_FnUBound.

Handler: 0x6610506C, unique to this slot (real opcode #460).

Corpus: 159 occurrence(s) in PDFStreamDumper_p.exe.

Description: draft, by claude-opus-4.7. Handler 0x6610506C, dispatch slot 0x66107840, modOpcodes line 635.

ParmAry1St

(2,0x8F)emittedhandler #430Arrayinferred_corpus12 corpus hits
SafeArray operation: ParmAry1St.

Operates on a VB6 SafeArray. See the printf template for the element-type and indexing form. AryLock/AryUnlock increment/decrement the array's lock count (required around direct element access). Ary1Ld*/Ary1St* load/store an element of a 1-D array; multi-dim variants exist in wider opcode tables. Erase releases an array's storage.

When the compiler emits it

Emitted at array element access, Erase, and at the begin/end of arc through a SafeArray.

VB6 source (verified: compiles to this slot)
Public Sub Main()
  PA New Collection
End Sub

Sub PA(ParamArray p() As Variant)
  Dim o As Object
  Set o = p(0)
  Set p(0) = o
End Sub
Encoding, evidence and notes
Encoding

Encoding: FC 8F (lead byte FC selects table 2), then 4 operand byte(s); total instruction length 6 byte(s).
vbdec template: %a index:%2
Operands:

  1. %a: local_var_ref, 2 byte(s). signed 16-bit offset from the procedure frame pointer (EBP). Negative = local/temporary (vbdec var_XX, XX = -offset), positive = argument (arg_XX).
  2. %2 (index): immediate_word, 2 byte(s). 16-bit immediate.

Observed: FC8F 78FF0000 ParmAry1St var_88 index:0x0

Examples
fso.Proc_461D10 @ 0x461D10 | 461F78    FC8F DCFE0000         ParmAry1St var_124 index:0x0
CFunc.ParseAsGlobal @ 0x468430 | 468573    FC8F 90FE0000         ParmAry1St var_170 index:0x0
CFunc.ParseAsGlobal @ 0x468430 | 468581    FC8F 90FE0100         ParmAry1St var_170 index:0x1

12 occurrence(s) in PDFStreamDumper.

Evidence and notes

Emitted by VB6 SP6 (P-code): yes. Minimal probe: probes\op\2_8F_ParmAry1St.

Handler: 0x66105126, unique to this slot (real opcode #430).

Corpus: 12 occurrence(s) in PDFStreamDumper_p.exe.

Description: draft, by claude-opus-4.7. Handler 0x66105126, dispatch slot 0x66107750, modOpcodes line 622.

StAryCopy

(5,0x02)emittedhandler #729Arrayconfirmed_msdocs35 corpus hits
SafeArray operation: StAryCopy.

Operates on a VB6 SafeArray. See the printf template for the element-type and indexing form. AryLock/AryUnlock increment/decrement the array's lock count (required around direct element access). Ary1Ld*/Ary1St* load/store an element of a 1-D array; multi-dim variants exist in wider opcode tables. Erase releases an array's storage.

When the compiler emits it

Emitted at array element access, Erase, and at the begin/end of arc through a SafeArray.

VB6 source (verified: compiles to this slot)
Public Sub Main()
  Dim a() As Boolean, b() As Boolean
  b = a
End Sub
Encoding, evidence and notes
Encoding

Encoding: FF 02 (lead byte FF selects table 5), then 0 operand byte(s); total instruction length 2 byte(s).
Operands: none. All inputs come from the evaluation stack or the frame.
Observed: FF02 StAryCopy

Examples
Form1.mnuPluginList_Event_0 @ 0x44C3D4 | 44C433    FF02                  StAryCopy
Form1.mnuUpdateCurrent_Click @ 0x46EC0C | 46EDAA    FF02                  StAryCopy
Form1.mnuExploitScan_Click @ 0x46CF80 | 46D022    FF02                  StAryCopy

35 occurrence(s) in PDFStreamDumper.

Evidence and notes

Emitted by VB6 SP6 (P-code): yes. Minimal probe: probes\op\5_02_StAryCopy.

Handler: 0x661090BC, unique to this slot (real opcode #729).

Corpus: 35 occurrence(s) in PDFStreamDumper_p.exe.

Description: draft, by claude-opus-4.7. Handler 0x661090BC, dispatch slot 0x6610811C, modOpcodes line 712.

StAryMove

(5,0x01)emittedhandler #728Arrayconfirmed_msdocs66 corpus hits
SafeArray operation: StAryMove.

Operates on a VB6 SafeArray. See the printf template for the element-type and indexing form. AryLock/AryUnlock increment/decrement the array's lock count (required around direct element access). Ary1Ld*/Ary1St* load/store an element of a 1-D array; multi-dim variants exist in wider opcode tables. Erase releases an array's storage.

When the compiler emits it

Emitted at array element access, Erase, and at the begin/end of arc through a SafeArray.

VB6 source (verified: compiles to this slot)
Public Sub Main()
  Dim a() As Boolean
End Sub

Function F() As Boolean()
  Dim x() As Boolean
  ReDim x(3)
  F = x
End Function
Encoding, evidence and notes
Encoding

Encoding: FF 01 (lead byte FF selects table 5), then 0 operand byte(s); total instruction length 2 byte(s).
Operands: none. All inputs come from the evaluation stack or the frame.
Observed: FF01 StAryMove

Examples
Form1.LoadPlugins @ 0x4644FC | 4645CE    FF01                  StAryMove
Form1.mnuDecompileFlash_Click @ 0x4613A8 | 461542    FF01                  StAryMove
Form1.mnuDecompileFlash_Click @ 0x4613A8 | 461582    FF01                  StAryMove

66 occurrence(s) in PDFStreamDumper.

Evidence and notes

Emitted by VB6 SP6 (P-code): yes. Minimal probe: probes\op\5_01_StAryMove.

Handler: 0x66105049, unique to this slot (real opcode #728).

Corpus: 66 occurrence(s) in PDFStreamDumper_p.exe.

Description: draft, by claude-opus-4.7. Handler 0x66105049, dispatch slot 0x66108118, modOpcodes line 711.

StAryRecCopy

(5,0x04)emittedhandler #731UDT / recordinferred_corpus
Assign one dynamic array of UDTs to another (deep copy).

Pops source and destination array references and replaces the destination with a copy of the source, copying reference-counted members with the UDT descriptor.

Operand: 16-bit UDT-descriptor index.

When the compiler emits it

Emitted for q = r with r(), q() both dynamic arrays of a UDT containing reference members.

VB6 source (verified: compiles to this slot)
Private Type TRec
  a As Long
  s As String
  v As Variant
  o As Object
End Type
Private Type TPlain
  a As Long
  b As Integer
End Type

Public Sub Main()
  Dim r() As TRec, q() As TRec
  q = r
End Sub
Encoding, evidence and notes
Encoding

Encoding: FF 04 (lead byte FF selects table 5), then 2 operand byte(s); total instruction length 4 byte(s).
No printf operands are declared, but the instruction still consumes operand bytes; see the size above and the observed bytes below. (Phase 3a: flag=0 does not mean 'no operands'.)
Observed: FF04 0000 StAryRecCopy

Examples
FF04 0000  StAryRecCopy

From the Phase 4 probe (VB6 SP6, P-code).

Evidence and notes

Emitted by VB6 SP6 (P-code): yes. Minimal probe: probes\op\5_04_StAryRecCopy.

Handler: 0x661090CD, unique to this slot (real opcode #731).

Check of vb6_source_eq example: verified: compiles and emits this slot.

Example from the description
Private Type TRec
  a As Long
  s As String
  v As Variant
  o As Object
End Type
Private Type TPlain
  a As Long
  b As Integer
End Type

Public Sub Main()
  Dim r() As TRec, q() As TRec
  q = r
End Sub

Description: draft, by claude-opus-5-5. Handler 0x661090CD, dispatch slot 0x66108124, modOpcodes line 708.

StAryRecMove

(5,0x03)emittedhandler #730UDT / recordinferred_corpus
Move a temporary array of UDTs (function result) into an array variable.

Like StAryRecCopy, but the source is a temporary (function return) whose descriptor is moved rather than copied.

Operand: 16-bit UDT-descriptor index (observed 1).

When the compiler emits it

Emitted for a = F() where F returns an array of a UDT.

VB6 source (verified: compiles to this slot)
Private Type TR
  s As String
End Type

Public Sub Main()
  Dim a() As TR, b() As TR
  a = F()
End Sub

Private Function F() As TR()
End Function
Encoding, evidence and notes
Encoding

Encoding: FF 03 (lead byte FF selects table 5), then 2 operand byte(s); total instruction length 4 byte(s).
No printf operands are declared, but the instruction still consumes operand bytes; see the size above and the observed bytes below. (Phase 3a: flag=0 does not mean 'no operands'.)
Observed: FF03 0100 StAryRecMove

Examples
FF03 0100  StAryRecMove

From the Phase 4 probe (VB6 SP6, P-code).

Evidence and notes

Emitted by VB6 SP6 (P-code): yes. Minimal probe: probes\op\5_03_StAryRecMove.

Handler: 0x661090EB, unique to this slot (real opcode #730).

Check of vb6_source_eq example: verified: compiles and emits this slot.

Example from the description
Private Type TR
  s As String
End Type

Public Sub Main()
  Dim a() As TR, b() As TR
  a = F()
End Sub

Private Function F() As TR()
End Function

Description: draft, by claude-opus-5-5. Handler 0x661090EB, dispatch slot 0x66108120, modOpcodes line 710.

StAryVar

(5,0x36)emittedhandler #763Arrayinferred_corpus23 corpus hits
SafeArray operation: StAryVar.

Operates on a VB6 SafeArray. See the printf template for the element-type and indexing form. AryLock/AryUnlock increment/decrement the array's lock count (required around direct element access). Ary1Ld*/Ary1St* load/store an element of a 1-D array; multi-dim variants exist in wider opcode tables. Erase releases an array's storage.

When the compiler emits it

Emitted at array element access, Erase, and at the begin/end of arc through a SafeArray.

VB6 source (verified: compiles to this slot)
Public Sub Main()
  Dim a() As String, s As String
  a = Split("a,b", ",")
End Sub
Encoding, evidence and notes
Encoding

Encoding: FF 36 (lead byte FF selects table 5), then 2 operand byte(s); total instruction length 4 byte(s).
vbdec template: %r
Operands:

  1. %r: vt_type_byte, 1 byte(s). 8-bit VARTYPE code (VT_*).

Observed: FF36 0820 StAryVar 0x2008 (Bstr | ARRAY)

Examples
Form1.mnuPluginList_Event_0 @ 0x44C3D4 | 44C429    FF36 0820             StAryVar  0x2008 (Bstr | ARRAY)
Form1.mnuExploitScan_Click @ 0x46CF80 | 46D018    FF36 0820             StAryVar  0x2008 (Bstr | ARRAY)
Form1.mnuExploitScan_Click @ 0x46CF80 | 46D163    FF36 0820             StAryVar  0x2008 (Bstr | ARRAY)

23 occurrence(s) in PDFStreamDumper.

Evidence and notes

Emitted by VB6 SP6 (P-code): yes. Minimal probe: probes\op\5_36_StAryVar.

Handler: 0x661098F4, unique to this slot (real opcode #763).

Corpus: 23 occurrence(s) in PDFStreamDumper_p.exe.

Description: draft, by claude-opus-4.7. Handler 0x661098F4, dispatch slot 0x661081EC, modOpcodes line 709.

VarIndexLdRfVar

(4,0xAF)emittedhandler #677Arrayinferred_corpus
Index into an array held in a Variant and push a reference to the element Variant.

Pops the index Variant(s) and the Variant containing the array, and pushes the address of the selected element (a Variant). Observed before a late call on the element: v(1).Add 5 gives VarIndexLdRfVar, LdPrVar, LateMemCall.

Operands: frame slot %a (temporary) and a 16-bit dimension count.

When the compiler emits it

Emitted when an element of a Variant-held array is used as an object or passed by reference.

VB6 source (verified: compiles to this slot)
Public Sub Main()
  Dim v As Variant, o As Object
  v(1).Add 5
End Sub
Encoding, evidence and notes
Encoding

Encoding: FE AF (lead byte FE selects table 4), then 4 operand byte(s); total instruction length 6 byte(s).
No printf operands are declared, but the instruction still consumes operand bytes; see the size above and the observed bytes below. (Phase 3a: flag=0 does not mean 'no operands'.)
Observed: FEAF 08FF0100 VarIndexLdRfVar

Examples
FEAF 08FF0100  VarIndexLdRfVar

From the Phase 4 probe (VB6 SP6, P-code).

Evidence and notes

Emitted by VB6 SP6 (P-code): yes. Minimal probe: probes\op\4_AF_VarIndexLdRfVar.

Handler: 0x6610907D, unique to this slot (real opcode #677).

Check of vb6_source_eq example: verified: compiles and emits this slot.

Example from the description
Public Sub Main()
  Dim v As Variant, o As Object
  v(1).Add 5
End Sub

Description: draft, by claude-opus-5-5. Handler 0x6610907D, dispatch slot 0x66107FD0, modOpcodes line 433.

VarIndexLdRfVarLock

(4,0xF2)emittedhandler #716Arrayinferred_corpus11 corpus hits
SafeArray operation: VarIndexLdRfVarLock.

Operates on a VB6 SafeArray. See the printf template for the element-type and indexing form. AryLock/AryUnlock increment/decrement the array's lock count (required around direct element access). Ary1Ld*/Ary1St* load/store an element of a 1-D array; multi-dim variants exist in wider opcode tables. Erase releases an array's storage.

When the compiler emits it

Emitted at array element access, Erase, and at the begin/end of arc through a SafeArray.

VB6 source (verified: compiles to this slot)
Public Sub Main()
  Dim v As Variant
  P v(1)
End Sub

Sub P(x As Variant)
End Sub
Encoding, evidence and notes
Encoding

Encoding: FE F2 (lead byte FE selects table 4), then 6 operand byte(s); total instruction length 8 byte(s).
vbdec template: %a %a %2
Operands:

  1. %a: local_var_ref, 2 byte(s). signed 16-bit offset from the procedure frame pointer (EBP). Negative = local/temporary (vbdec var_XX, XX = -offset), positive = argument (arg_XX).
  2. %a: local_var_ref, 2 byte(s). signed 16-bit offset from the procedure frame pointer (EBP). Negative = local/temporary (vbdec var_XX, XX = -offset), positive = argument (arg_XX).
  3. %2: immediate_word, 2 byte(s). 16-bit immediate.

Observed: FEF2 3CFF38FF0100 VarIndexLdRfVarLock var_C4 var_C8 0x1

Examples
Form1.Form_Load @ 0x479DC0 | 47A498    FEF2 40FFA4FD0100     VarIndexLdRfVarLock var_C0 var_25C 0x1
frmRefactor.Command4_Click @ 0x46AED8 | 46AFEE    FEF2 24FFE0FE0100     VarIndexLdRfVarLock var_DC var_120 0x1
frmRefactor.Command4_Click @ 0x46AED8 | 46B036    FEF2 50FFE0FE0100     VarIndexLdRfVarLock var_B0 var_120 0x1

11 occurrence(s) in PDFStreamDumper.

Evidence and notes

Emitted by VB6 SP6 (P-code): yes. Minimal probe: probes\op\4_F2_VarIndexLdRfVarLock.

Handler: 0x66109056, unique to this slot (real opcode #716).

Corpus: 11 occurrence(s) in PDFStreamDumper_p.exe.

Description: draft, by claude-opus-4.7. Handler 0x66109056, dispatch slot 0x661080DC, modOpcodes line 437.

VarIndexLdVar

(4,0xAE)emittedhandler #676Arrayinferred_corpus46 corpus hits
SafeArray operation: VarIndexLdVar.

Operates on a VB6 SafeArray. See the printf template for the element-type and indexing form. AryLock/AryUnlock increment/decrement the array's lock count (required around direct element access). Ary1Ld*/Ary1St* load/store an element of a 1-D array; multi-dim variants exist in wider opcode tables. Erase releases an array's storage.

When the compiler emits it

Emitted at array element access, Erase, and at the begin/end of arc through a SafeArray.

VB6 source (verified: compiles to this slot)
Public Sub Main()
  Dim v As Variant, w As Variant, n As Long, o As Object
  If v(1) Then n = 1
End Sub

Function F() As Variant
End Function
Encoding, evidence and notes
Encoding

Encoding: FE AE (lead byte FE selects table 4), then 4 operand byte(s); total instruction length 6 byte(s).
vbdec template: %a dim:%2
Operands:

  1. %a: local_var_ref, 2 byte(s). signed 16-bit offset from the procedure frame pointer (EBP). Negative = local/temporary (vbdec var_XX, XX = -offset), positive = argument (arg_XX).
  2. %2 (dim): immediate_word, 2 byte(s). 16-bit immediate.

Observed: FEAE 24FF0100 VarIndexLdVar var_DC dim:0x1

Examples
Form1.Form_Load @ 0x479DC0 | 47A458    FEAE 40FF0100         VarIndexLdVar var_C0 dim:0x1
fso.Proc_45ECB4 @ 0x45ECB4 | 45EE20    FEAE 28FF0100         VarIndexLdVar var_D8 dim:0x1
fso.Proc_45ECB4 @ 0x45ECB4 | 45EE49    FEAE 28FF0100         VarIndexLdVar var_D8 dim:0x1

46 occurrence(s) in PDFStreamDumper.

Evidence and notes

Emitted by VB6 SP6 (P-code): yes. Minimal probe: probes\op\4_AE_VarIndexLdVar.

Handler: 0x6610501D, unique to this slot (real opcode #676).

Corpus: 46 occurrence(s) in PDFStreamDumper_p.exe.

Description: draft, by claude-opus-4.7. Handler 0x6610501D, dispatch slot 0x66107FCC, modOpcodes line 432.

VarIndexSt

(4,0xB0)emittedhandler #678Arrayinferred_corpus27 corpus hits
SafeArray operation: VarIndexSt.

Operates on a VB6 SafeArray. See the printf template for the element-type and indexing form. AryLock/AryUnlock increment/decrement the array's lock count (required around direct element access). Ary1Ld*/Ary1St* load/store an element of a 1-D array; multi-dim variants exist in wider opcode tables. Erase releases an array's storage.

When the compiler emits it

Emitted at array element access, Erase, and at the begin/end of arc through a SafeArray.

VB6 source (verified: compiles to this slot)
Public Sub Main()
  ReDim a(3)
End Sub

Sub P(v As Variant)
  v(1) = 3
End Sub
Encoding, evidence and notes
Encoding

Encoding: FE B0 (lead byte FE selects table 4), then 2 operand byte(s); total instruction length 4 byte(s).
vbdec template: dim:%2
Operands:

  1. %2 (dim): immediate_word, 2 byte(s). 16-bit immediate.

Observed: FEB0 0100 VarIndexSt dim:0x1

Examples
fso.Proc_45ECB4 @ 0x45ECB4 | 45EEB5    FEB0 0100             VarIndexSt dim:0x1
fso.Proc_443C70 @ 0x443C70 | 443CBC    FEB0 0100             VarIndexSt dim:0x1
fso.Proc_443C70 @ 0x443C70 | 443CE4    FEB0 0100             VarIndexSt dim:0x1

27 occurrence(s) in PDFStreamDumper.

Evidence and notes

Emitted by VB6 SP6 (P-code): yes. Minimal probe: probes\op\4_B0_VarIndexSt.

Handler: 0x6610908A, unique to this slot (real opcode #678).

Corpus: 27 occurrence(s) in PDFStreamDumper_p.exe.

Description: draft, by claude-opus-4.7. Handler 0x6610908A, dispatch slot 0x66107FD4, modOpcodes line 434.

VarIndexStAd

(4,0xB1)emittedhandler #679Arrayinferred_corpus
Set an element of a Variant-held array to an object.

Pops the object (as a Variant), the index Variant(s) and the Variant array, and stores the object into the element.

Operand dim:%2: number of indices.

When the compiler emits it

Emitted for Set v(i) = obj where v is a Variant containing an array.

VB6 source (verified: compiles to this slot)
Public Sub Main()
  Dim v As Variant, b As Object
  ReDim a(5) As Object
  Set v(1) = New Collection
End Sub
Encoding, evidence and notes
Encoding

Encoding: FE B1 (lead byte FE selects table 4), then 2 operand byte(s); total instruction length 4 byte(s).
vbdec template: dim:%2
Operands:

  1. %2 (dim): immediate_word, 2 byte(s). 16-bit immediate.

Observed: FEB1 0100 VarIndexStAd dim:0x1

Examples
FEB1 0100  VarIndexStAd dim:0x1

From the Phase 4 probe (VB6 SP6, P-code).

Evidence and notes

Emitted by VB6 SP6 (P-code): yes. Minimal probe: probes\op\4_B1_VarIndexStAd.

Handler: 0x661090B5, unique to this slot (real opcode #679).

Check of vb6_source_eq example: verified: compiles and emits this slot.

Example from the description
Public Sub Main()
  Dim v As Variant, b As Object
  ReDim a(5) As Object
  Set v(1) = New Collection
End Sub

Description: draft, by claude-opus-5-5. Handler 0x661090B5, dispatch slot 0x66107FD8, modOpcodes line 435.

Array_Erase

Erase array

Erase

(0,0x5A)emittedprimary of 2handler #88Arrayconfirmed_msdocs22 corpus hits
Erase an array: Erase.

Implements VB6 Erase. For fixed-size arrays, all elements are reset to the default for their type. For dynamic arrays, the SafeArray descriptor is freed and the variable is set to an uninitialized array of zero dimensions.

When the compiler emits it

Emitted for every Erase statement.

VB6 source (verified: compiles to this slot)
Public Sub Main()
  Dim a(5) As Boolean
  Erase a
End Sub
Encoding, evidence and notes
Encoding

Encoding: 5A, then 0 operand byte(s); total instruction length 1 byte(s).
Operands: none. All inputs come from the evaluation stack or the frame.
Observed: 5A Erase

Examples
Form1.Form_Load @ 0x479DC0 | 47A182    5A                    Erase
Form1.Form_Load @ 0x479DC0 | 47A255    5A                    Erase
Form1.Form_Load @ 0x479DC0 | 47A3A0    5A                    Erase

22 occurrence(s) in PDFStreamDumper.

Evidence and notes

Emitted by VB6 SP6 (P-code): yes. Minimal probe: probes\op\0_5A_Erase.

Handler: 0x6610507E, shared by 2 dispatch slots (real opcode #88). This is the primary slot. Other slots: (2,C3) Erase.

Check of vb6_source_eq example: verified: compiles and emits this slot.

Corpus: 22 occurrence(s) in PDFStreamDumper_p.exe.

Example from the description
Dim arr() As Long
ReDim arr(10)
Erase arr
Slots sharing this handler

(2,0xC3) Erase

Description: draft, by claude-opus-4.7. Handler 0x6610507E, dispatch slot 0x66106E7C, modOpcodes line 631.

Erase

(2,0xC3)not emitteddup of (0,5A)handler #88Arrayconfirmed_handler
(alias) Erase an array: Erase.

Alias dispatch slot (2, 0xC3) for the canonical Erase at (0, 0x5A); semantics are identical.

Implements VB6 Erase. For fixed-size arrays, all elements are reset to the default for their type. For dynamic arrays, the SafeArray descriptor is freed and the variable is set to an uninitialized array of zero dimensions.

When the compiler emits it

Emitted for every Erase statement.

VB6 source (from description, not verified)
Dim arr() As Long
ReDim arr(10)
Erase arr
Encoding, evidence and notes
Encoding

Encoding: FC C3 (lead byte FC selects table 2), then 0 operand byte(s); total instruction length 2 byte(s).
Operands: none. All inputs come from the evaluation stack or the frame.

Evidence and notes

Emitted by VB6 SP6 (P-code): not observed in about 3,070 probe programs. The slot exists in the runtime's dispatch table, but no tested source construct makes the compiler emit it.

Handler: 0x6610507E, shared by 2 dispatch slots (real opcode #88). This is a duplicate slot of (0,5A) Erase. Other slots: (0,5A) Erase.

Check of vb6_source_eq example: compiles, but emits a different slot of the same handler. emits (0,5A) Erase (same handler, different slot)

Slots sharing this handler

(0,0x5A) Erase

Description: draft, by claude-opus-4.7. Handler 0x6610507E, dispatch slot 0x66107820, modOpcodes line 632.

Array_Redim

Redim / Redim Preserve

Redim

(4,0x8E)emittedhandler #648Arrayinferred_corpus47 corpus hits
Resize a dynamic array (Redim).

Implements VB6 ReDim / ReDim Preserve. Operand stream carries the dimension count, VT element type code, element size, and a SafeArray flag mask. New bounds are popped from the stack (one I4 lower + I4 upper per dimension).

RedimPreserve copies existing elements that fall within the new bounds; pure Redim default-initializes all elements.

When the compiler emits it

Emitted for every ReDim and ReDim Preserve.

VB6 source (verified: compiles to this slot)
Public Sub Main()
  Dim a() As Boolean, b() As Boolean
  ReDim a(5)
End Sub
Encoding, evidence and notes
Encoding

Encoding: FE 8E (lead byte FE selects table 4), then 8 operand byte(s); total instruction length 10 byte(s).
vbdec template: dim:%2 VT:%r elemSz:%2 SAFlag:%y
Operands:

  1. %2 (dim): immediate_word, 2 byte(s). 16-bit immediate.
  2. %r (VT): vt_type_byte, 1 byte(s). 8-bit VARTYPE code (VT_*).
  3. %2 (elemSz): immediate_word, 2 byte(s). 16-bit immediate.
  4. %y (SAFlag): safearray_flags, size varies. SAFEARRAY feature flags (FADF_*) as written to the array descriptor.

Observed: FE8E 01000B0002008000 Redim dim:0x1 VT: 0xB (Bool) elemSz:0x2 SAFlag: 0x80 (HaveVarTyp)

Examples
Form1.LoadPlugins @ 0x4644FC | 46460A    FE8E 01000C0004004004 Redim dim:0x1 VT: 0xC (Variant) elemSz:0x4 SAFlag: 0x440 (HaveIId | Disp)
Form1.mnuDecompressSWC_Click @ 0x45E9E4 | 45EA65    FE8E 0100110001008000 Redim dim:0x1 VT: 0x11 (UI1) elemSz:0x1 SAFlag: 0x80 (HaveVarTyp)
Form1.mnuDecompressSWC_Click @ 0x45E9E4 | 45EB23    FE8E 0100110001008000 Redim dim:0x1 VT: 0x11 (UI1) elemSz:0x1 SAFlag: 0x80 (HaveVarTyp)

47 occurrence(s) in PDFStreamDumper.

Evidence and notes

Emitted by VB6 SP6 (P-code): yes. Minimal probe: probes\op\4_8E_Redim.

Handler: 0x661050E6, unique to this slot (real opcode #648).

Check of vb6_source_eq example: verified: compiles and emits this slot.

Corpus: 47 occurrence(s) in PDFStreamDumper_p.exe.

Example from the description
Dim arr() As Long
ReDim arr(10)
ReDim Preserve arr(20)

Description: draft, by claude-opus-4.7. Handler 0x661050E6, dispatch slot 0x66107F4C, modOpcodes line 614.

RedimPreserve

(4,0x8F)emittedhandler #649Arrayinferred_corpus11 corpus hits
Resize a dynamic array (RedimPreserve).

Implements VB6 ReDim / ReDim Preserve. Operand stream carries the dimension count, VT element type code, element size, and a SafeArray flag mask. New bounds are popped from the stack (one I4 lower + I4 upper per dimension).

RedimPreserve copies existing elements that fall within the new bounds; pure Redim default-initializes all elements.

When the compiler emits it

Emitted for every ReDim and ReDim Preserve.

VB6 source (verified: compiles to this slot)
Option Base 1
Private Type TR
  s As String
End Type

Public Sub Main()
  ReDim a(1 To 3)
  ReDim Preserve a(1 To 4)
End Sub
Encoding, evidence and notes
Encoding

Encoding: FE 8F (lead byte FE selects table 4), then 8 operand byte(s); total instruction length 10 byte(s).
vbdec template: dim:%2 VT:%r elemSz:%2 SAFlag:%y
Operands:

  1. %2 (dim): immediate_word, 2 byte(s). 16-bit immediate.
  2. %r (VT): vt_type_byte, 1 byte(s). 8-bit VARTYPE code (VT_*).
  3. %2 (elemSz): immediate_word, 2 byte(s). 16-bit immediate.
  4. %y (SAFlag): safearray_flags, size varies. SAFEARRAY feature flags (FADF_*) as written to the array descriptor.

Observed: FE8F 01000C0010008008 RedimPreserve dim:0x1 VT: 0xC (Variant) elemSz:0x10 SAFlag: 0x880 (HaveVarTyp | Var)

Examples
Form1.LoadPlugins @ 0x4644FC | 46463A    FE8F 01000C0004004004 RedimPreserve dim:0x1 VT: 0xC (Variant) elemSz:0x4 SAFlag: 0x440 (HaveIId | Disp)
Form1.mnuUpdateCurrent_Click @ 0x46EC0C | 46EFDD    FE8F 0100110001008000 RedimPreserve dim:0x1 VT: 0x11 (UI1) elemSz:0x1 SAFlag: 0x80 (HaveVarTyp)
modZLIB.Proc_45E44C @ 0x45E44C | 45E630    FE8F 0100110001008000 RedimPreserve dim:0x1 VT: 0x11 (UI1) elemSz:0x1 SAFlag: 0x80 (HaveVarTyp)

11 occurrence(s) in PDFStreamDumper.

Evidence and notes

Emitted by VB6 SP6 (P-code): yes. Minimal probe: probes\op\4_8F_RedimPreserve.

Handler: 0x6610916D, unique to this slot (real opcode #649).

Check of vb6_source_eq example: verified: compiles and emits this slot.

Corpus: 11 occurrence(s) in PDFStreamDumper_p.exe.

Example from the description
Dim arr() As Long
ReDim arr(10)
ReDim Preserve arr(20)

Description: draft, by claude-opus-4.7. Handler 0x6610916D, dispatch slot 0x66107F50, modOpcodes line 615.

RedimPreserveVar

(4,0x91)emittedhandler #651Arrayinferred_corpus8 corpus hits
ReDim Preserve an array held in a Variant.

Pops the new bounds and the Variant's address and resizes the contained SAFEARRAY, keeping existing elements (only the last dimension may change).

Operands: dimension count, SAFEARRAY flags.

When the compiler emits it

Emitted for ReDim Preserve v(n) where v is a Variant (or a Variant UDT field). A typed dynamic array uses RedimPreserve (4,8F).

VB6 source (verified: compiles to this slot)
Private Type TR
  v As Variant
End Type

Public Sub Main()
  Dim r As TR
  ReDim Preserve r.v(4)
End Sub
Encoding, evidence and notes
Encoding

Encoding: FE 91 (lead byte FE selects table 4), then 4 operand byte(s); total instruction length 6 byte(s).
vbdec template: dim:%2 SAFlag:%y
Operands:

  1. %2 (dim): immediate_word, 2 byte(s). 16-bit immediate.
  2. %y (SAFlag): safearray_flags, size varies. SAFEARRAY feature flags (FADF_*) as written to the array descriptor.

Observed: FE91 01000C20 RedimPreserveVar dim:0x1 SAFlag: 0x200C (Embedded)

Examples
fso.Proc_443C70 @ 0x443C70 | 443C9D    FE91 01000C20         RedimPreserveVar dim:0x1 SAFlag: 0x200C (Embedded)
fso.Proc_442CEC @ 0x442CEC | 442D4D    FE91 01000C20         RedimPreserveVar dim:0x1 SAFlag: 0x200C (Embedded)
CFunc.Proc_443BC0 @ 0x443BC0 | 443BED    FE91 01000C20         RedimPreserveVar dim:0x1 SAFlag: 0x200C (Embedded)

8 occurrence(s) in PDFStreamDumper.

Evidence and notes

Emitted by VB6 SP6 (P-code): yes. Minimal probe: probes\op\4_91_RedimPreserveVar.

Handler: 0x66109196, unique to this slot (real opcode #651).

Check of vb6_source_eq example: verified: compiles and emits this slot.

Corpus: 8 occurrence(s) in PDFStreamDumper_p.exe.

Example from the description
Dim v As Variant
v = Array(1, 2)
ReDim Preserve v(4)

Description: draft, by claude-opus-5-5. Handler 0x66109196, dispatch slot 0x66107F58, modOpcodes line 617.

RedimPreserveVarUdt

(5,0x3C)emittedhandler #768UDT / recordinferred_corpus
ReDim Preserve a Variant-held array of a public record type.

As RedimVarUdt, preserving existing elements.

When the compiler emits it

Emitted for ReDim Preserve v(n) As TPubRec.

VB6 source (verified: compiles to this slot)
' references probes\_tlb\probetlb.tlb
Public Sub Main()
  Dim v As Variant
  ReDim Preserve v(4) As TPubRec
End Sub
Encoding, evidence and notes
Encoding

Encoding: FF 3C (lead byte FF selects table 5), then 6 operand byte(s); total instruction length 8 byte(s).
No printf operands are declared, but the instruction still consumes operand bytes; see the size above and the observed bytes below. (Phase 3a: flag=0 does not mean 'no operands'.)
Observed: FF3C 010024000000 RedimPreserveVarUdt

Examples
FF3C 010024000000  RedimPreserveVarUdt

From the Phase 4 probe (VB6 SP6, P-code).

Evidence and notes

Emitted by VB6 SP6 (P-code): yes. Minimal probe: probes\op\5_3C_RedimPreserveVarUdt.

Handler: 0x661091F0, unique to this slot (real opcode #768).

Check of vb6_source_eq example: verified: compiles and emits this slot.

Example from the description
' references probes\_tlb\probetlb.tlb
Public Sub Main()
  Dim v As Variant
  ReDim Preserve v(4) As TPubRec
End Sub

Description: draft, by claude-opus-5-5. Handler 0x661091F0, dispatch slot 0x66108204, modOpcodes line 619.

RedimVar

(4,0x90)emittedhandler #650Arrayinferred_corpus7 corpus hits
ReDim an array held in a Variant.

Pops the bounds and the Variant's address, allocates a new SAFEARRAY (element type from VT:%r, Variant elements when unspecified) and stores it into the Variant (VT_ARRAY | vt), freeing any previous contents.

Operands: dimension count, VARTYPE, SAFEARRAY flags.

When the compiler emits it

Emitted for ReDim v(n) [As T] where v is a Variant (or a Variant UDT field / class member). A typed dynamic array uses Redim (4,8E).

VB6 source (verified: compiles to this slot)
Public Sub Main()
  Dim v As Variant
  ReDim v(3) As Long
End Sub
Encoding, evidence and notes
Encoding

Encoding: FE 90 (lead byte FE selects table 4), then 4 operand byte(s); total instruction length 6 byte(s).
vbdec template: dim:%2 VT:%r SAFlag:%y
Operands:

  1. %2 (dim): immediate_word, 2 byte(s). 16-bit immediate.
  2. %r (VT): vt_type_byte, 1 byte(s). 8-bit VARTYPE code (VT_*).
  3. %y (SAFlag): safearray_flags, size varies. SAFEARRAY feature flags (FADF_*) as written to the array descriptor.

Observed: FE90 01000300 RedimVar dim:0x1 VT: 0x3 (I4) SAFlag: 0x6C14 (Embedded | FixedSz | Disp | Var)

Examples
fso.Proc_443C70 @ 0x443C70 | 443CCE    FE90 01000C20         RedimVar dim:0x1 VT: 0x200C (Variant | ARRAY) SAFlag: 0x5C28 (Record | Disp | Var)
CFunc.Proc_443BC0 @ 0x443BC0 | 443C1E    FE90 01000C20         RedimVar dim:0x1 VT: 0x200C (Variant | ARRAY) SAFlag: 0x5C28 (Record | Disp | Var)
modEscapes.Proc_4434E0 @ 0x4434E0 | 44353E    FE90 01000C20         RedimVar dim:0x1 VT: 0x200C (Variant | ARRAY) SAFlag: 0x5C28 (Record | Disp | Var)

7 occurrence(s) in PDFStreamDumper.

Evidence and notes

Emitted by VB6 SP6 (P-code): yes. Minimal probe: probes\op\4_90_RedimVar.

Handler: 0x661091C7, unique to this slot (real opcode #650).

Check of vb6_source_eq example: verified: compiles and emits this slot.

Corpus: 7 occurrence(s) in PDFStreamDumper_p.exe.

Example from the description
Dim v As Variant
ReDim v(3)

Description: draft, by claude-opus-5-5. Handler 0x661091C7, dispatch slot 0x66107F54, modOpcodes line 616.

RedimVarUdt

(5,0x3B)emittedhandler #767UDT / recordinferred_corpus
ReDim a Variant as an array of a public record type.

Pops bounds and the Variant, and allocates a SAFEARRAY of VT_RECORD with the given record type.

Operands (6 bytes): dimension count, record-type pool index, SAFEARRAY flags (observed 0100 2400 0000).

When the compiler emits it

Emitted for ReDim v(n) As TPubRec where TPubRec comes from a type library (or a public class in an ActiveX DLL).

VB6 source (verified: compiles to this slot)
' references probes\_tlb\probetlb.tlb
Public Sub Main()
  Dim v As Variant
  ReDim v(3) As TPubRec
End Sub
Encoding, evidence and notes
Encoding

Encoding: FF 3B (lead byte FF selects table 5), then 6 operand byte(s); total instruction length 8 byte(s).
No printf operands are declared, but the instruction still consumes operand bytes; see the size above and the observed bytes below. (Phase 3a: flag=0 does not mean 'no operands'.)
Observed: FF3B 010024000000 RedimVarUdt

Examples
FF3B 010024000000  RedimVarUdt

From the Phase 4 probe (VB6 SP6, P-code).

Evidence and notes

Emitted by VB6 SP6 (P-code): yes. Minimal probe: probes\op\5_3B_RedimVarUdt.

Handler: 0x661091CE, unique to this slot (real opcode #767).

Check of vb6_source_eq example: verified: compiles and emits this slot.

Example from the description
' references probes\_tlb\probetlb.tlb
Public Sub Main()
  Dim v As Variant
  ReDim v(3) As TPubRec
End Sub

Description: draft, by claude-opus-5-5. Handler 0x661091CE, dispatch slot 0x66108200, modOpcodes line 618.

Branch

Control-flow branch

Branch

(0,0x1E)emittedprimary of 2handler #29Control flowinferred_corpus384 corpus hits
Control flow branch (Branch).

Branch is an unconditional jump to the offset given by operand %l. BranchF pops the top-of-stack and jumps if it is false (zero / VARIANT_FALSE); BranchT jumps on true. Used to implement If/ElseIf/Else, Do While/Loop Until, and short-circuiting Boolean expressions.

When the compiler emits it

Emitted by every conditional construct and unconditional GoTo.

VB6 source (verified: compiles to this slot)
Public Sub Main()
  Dim n As Long
  GoTo done
sub1:
  Return
done:
End Sub
Encoding, evidence and notes
Encoding

Encoding: 1E, then 2 operand byte(s); total instruction length 3 byte(s).
vbdec template: %l
Operands:

  1. %l: branch_target_local, 2 byte(s). 16-bit branch target, offset from the start of the procedure's p-code (vbdec loc_ = proc start + offset).

Observed: 1E 0500 Branch loc_401451

Examples
Form1.mnuDecompileFlash_Click @ 0x4613A8 | 461474    1E E800               Branch loc_461490
Form1.mnuDecompileFlash_Click @ 0x4613A8 | 46154B    1E E301               Branch loc_46158B
Form1.mnuDecompileFlashTools_Click @ 0x45A770 | 45A7FD    1E A900               Branch loc_45A819

384 occurrence(s) in PDFStreamDumper.

Evidence and notes

Emitted by VB6 SP6 (P-code): yes. Minimal probe: probes\op\0_1E_Branch.

Handler: 0x6610519D, shared by 2 dispatch slots (real opcode #29). This is the primary slot. Other slots: (3,03) Branch.

Check of vb6_source_eq example: verified: compiles and emits this slot.

Corpus: 384 occurrence(s) in PDFStreamDumper_p.exe.

Example from the description
If cond Then
    ' true branch
Else
    ' false branch
End If
Slots sharing this handler

(3,0x03) Branch

Description: draft, by claude-opus-4.7. Handler 0x6610519D, dispatch slot 0x66106D8C, modOpcodes line 391.

Branch

(3,0x03)not emitteddup of (0,1E)handler #29Control flowconfirmed_handler
Same handler as (0,0x1E) Branch: Control flow branch (Branch).
Encoding, evidence and notes
Encoding

Encoding: FD 03 (lead byte FD selects table 3), then 2 operand byte(s); total instruction length 4 byte(s).
vbdec template: %l
Operands:

  1. %l: branch_target_local, 2 byte(s). 16-bit branch target, offset from the start of the procedure's p-code (vbdec loc_ = proc start + offset).
Evidence and notes

Emitted by VB6 SP6 (P-code): not observed in about 3,070 probe programs. The slot exists in the runtime's dispatch table, but no tested source construct makes the compiler emit it.

Handler: 0x6610519D, shared by 2 dispatch slots (real opcode #29). This is a duplicate slot of (0,1E) Branch. Other slots: (0,1E) Branch.

Slots sharing this handler

(0,0x1E) Branch

Description: none. Handler 0x6610519D, dispatch slot 0x66107920, modOpcodes line 392.

BranchF

(0,0x1C)emittedprimary of 2handler #27Control flowinferred_corpus1317 corpus hits
Control flow branch (BranchF).

Branch is an unconditional jump to the offset given by operand %l. BranchF pops the top-of-stack and jumps if it is false (zero / VARIANT_FALSE); BranchT jumps on true. Used to implement If/ElseIf/Else, Do While/Loop Until, and short-circuiting Boolean expressions.

When the compiler emits it

Emitted by every conditional construct and unconditional GoTo.

VB6 source (verified: compiles to this slot)
Public Sub Main()
  Dim a As Object, n As Long
  If TypeOf a Is Collection Then n = 1
End Sub
Encoding, evidence and notes
Encoding

Encoding: 1C, then 2 operand byte(s); total instruction length 3 byte(s).
vbdec template: %l
Operands:

  1. %l: branch_target_local, 2 byte(s). 16-bit branch target, offset from the start of the procedure's p-code (vbdec loc_ = proc start + offset).

Observed: 1C 1200 BranchF loc_401472

Examples
Form1.LoadPlugins @ 0x4644FC | 464537    1C 9500               BranchF loc_464591
Form1.LoadPlugins @ 0x4644FC | 4645F2    1C FC00               BranchF loc_4645F8
Form1.LoadPlugins @ 0x4644FC | 4646B5    1C 5B02               BranchF loc_464757

1317 occurrence(s) in PDFStreamDumper.

Evidence and notes

Emitted by VB6 SP6 (P-code): yes. Minimal probe: probes\op\0_1C_BranchF.

Handler: 0x661051C4, shared by 2 dispatch slots (real opcode #27). This is the primary slot. Other slots: (3,04) BranchF.

Check of vb6_source_eq example: verified: compiles and emits this slot.

Corpus: 1317 occurrence(s) in PDFStreamDumper_p.exe.

Example from the description
If cond Then
    ' true branch
Else
    ' false branch
End If
Slots sharing this handler

(3,0x04) BranchF

Description: draft, by claude-opus-4.7. Handler 0x661051C4, dispatch slot 0x66106D84, modOpcodes line 393.

BranchF

(3,0x04)not emitteddup of (0,1C)handler #27Control flowconfirmed_handler
Same handler as (0,0x1C) BranchF: Control flow branch (BranchF).
Encoding, evidence and notes
Encoding

Encoding: FD 04 (lead byte FD selects table 3), then 2 operand byte(s); total instruction length 4 byte(s).
vbdec template: %l
Operands:

  1. %l: branch_target_local, 2 byte(s). 16-bit branch target, offset from the start of the procedure's p-code (vbdec loc_ = proc start + offset).
Evidence and notes

Emitted by VB6 SP6 (P-code): not observed in about 3,070 probe programs. The slot exists in the runtime's dispatch table, but no tested source construct makes the compiler emit it.

Handler: 0x661051C4, shared by 2 dispatch slots (real opcode #27). This is a duplicate slot of (0,1C) BranchF. Other slots: (0,1C) BranchF.

Slots sharing this handler

(0,0x1C) BranchF

Description: none. Handler 0x661051C4, dispatch slot 0x66107924, modOpcodes line 394.

BranchFVar

(0,0x5C)not emittedprimary of 2handler #90Control flowinferred_corpus
No description yet.
Encoding, evidence and notes
Encoding

Encoding: 5C, then 2 operand byte(s); total instruction length 3 byte(s).
vbdec template: %l
Operands:

  1. %l: branch_target_local, 2 byte(s). 16-bit branch target, offset from the start of the procedure's p-code (vbdec loc_ = proc start + offset).
Evidence and notes

Emitted by VB6 SP6 (P-code): not observed in about 3,070 probe programs. The slot exists in the runtime's dispatch table, but no tested source construct makes the compiler emit it.

Handler: 0x66109261, shared by 2 dispatch slots (real opcode #90). This is the primary slot. Other slots: (3,05) BranchFVar.

Slots sharing this handler

(3,0x05) BranchFVar

Description: none. Handler 0x66109261, dispatch slot 0x66106E84, modOpcodes line 395.

BranchFVar

(3,0x05)not emitteddup of (0,5C)handler #90Control flowconfirmed_handler
No description yet.
Encoding, evidence and notes
Encoding

Encoding: FD 05 (lead byte FD selects table 3), then 2 operand byte(s); total instruction length 4 byte(s).
vbdec template: %l
Operands:

  1. %l: branch_target_local, 2 byte(s). 16-bit branch target, offset from the start of the procedure's p-code (vbdec loc_ = proc start + offset).
Evidence and notes

Emitted by VB6 SP6 (P-code): not observed in about 3,070 probe programs. The slot exists in the runtime's dispatch table, but no tested source construct makes the compiler emit it.

Handler: 0x66109261, shared by 2 dispatch slots (real opcode #90). This is a duplicate slot of (0,5C) BranchFVar. Other slots: (0,5C) BranchFVar.

Slots sharing this handler

(0,0x5C) BranchFVar

Description: none. Handler 0x66109261, dispatch slot 0x66107928, modOpcodes line 396.

BranchFVarFree

(3,0x06)not emittedhandler #472Control flowinferred_corpus
No description yet.
Encoding, evidence and notes
Encoding

Encoding: FD 06 (lead byte FD selects table 3), then 2 operand byte(s); total instruction length 4 byte(s).
vbdec template: %l
Operands:

  1. %l: branch_target_local, 2 byte(s). 16-bit branch target, offset from the start of the procedure's p-code (vbdec loc_ = proc start + offset).
Evidence and notes

Emitted by VB6 SP6 (P-code): not observed in about 3,070 probe programs. The slot exists in the runtime's dispatch table, but no tested source construct makes the compiler emit it.

Handler: 0x66109289, unique to this slot (real opcode #472).

Description: none. Handler 0x66109289, dispatch slot 0x6610792C, modOpcodes line 400.

BranchT

(0,0x1D)emittedprimary of 2handler #28Control flowinferred_corpus4 corpus hits
Pop a Boolean and branch if it is True.

Pops a 16-bit Boolean; if it is non-zero, jumps to the proc-relative target %l, otherwise falls through.

Stack: [..., c:Bool] -> [...]

When the compiler emits it

Emitted where the loop or test continues on a True condition, chiefly Loop While cond (jump back while True), and inside Select Case dispatch chains. If, Do While and Loop Until use BranchF. The operand is a proc-relative target.

VB6 source (verified: compiles to this slot)
Public Sub Main()
  Dim v As Variant, w As Variant, n As Long, o As Object
  Do
  Loop While v
End Sub

Function F() As Variant
End Function
Encoding, evidence and notes
Encoding

Encoding: 1D, then 2 operand byte(s); total instruction length 3 byte(s).
vbdec template: %l
Operands:

  1. %l: branch_target_local, 2 byte(s). 16-bit branch target, offset from the start of the procedure's p-code (vbdec loc_ = proc start + offset).

Observed: 1D 0000 BranchT loc_401494

Examples
modZLIB.Proc_4666C0 @ 0x4666C0 | 466A07    1D E401               BranchT loc_4668A4
fso.Proc_447C58 @ 0x447C58 | 447D02    1D 7300               BranchT loc_447CCB
Form2.ExtractFunction @ 0x45FB40 | 45FD81    1D 5D00               BranchT loc_45FB9D

4 occurrence(s) in PDFStreamDumper.

Evidence and notes

Emitted by VB6 SP6 (P-code): yes. Minimal probe: probes\op\0_1D_BranchT.

Handler: 0x661051AF, shared by 2 dispatch slots (real opcode #28). This is the primary slot. Other slots: (3,07) BranchT.

Check of vb6_source_eq example: verified: compiles and emits this slot.

Corpus: 4 occurrence(s) in PDFStreamDumper_p.exe.

Example from the description
Dim n As Long
Do
  n = n + 1
Loop While n < 5
Slots sharing this handler

(3,0x07) BranchT

Description: draft, by claude-opus-5-5. Handler 0x661051AF, dispatch slot 0x66106D88, modOpcodes line 397.

BranchT

(3,0x07)not emitteddup of (0,1D)handler #28Control flowconfirmed_handler
Same handler as (0,0x1D) BranchT: Pop a Boolean and branch if it is True.
Encoding, evidence and notes
Encoding

Encoding: FD 07 (lead byte FD selects table 3), then 2 operand byte(s); total instruction length 4 byte(s).
vbdec template: %l
Operands:

  1. %l: branch_target_local, 2 byte(s). 16-bit branch target, offset from the start of the procedure's p-code (vbdec loc_ = proc start + offset).
Evidence and notes

Emitted by VB6 SP6 (P-code): not observed in about 3,070 probe programs. The slot exists in the runtime's dispatch table, but no tested source construct makes the compiler emit it.

Handler: 0x661051AF, shared by 2 dispatch slots (real opcode #28). This is a duplicate slot of (0,1D) BranchT. Other slots: (0,1D) BranchT.

Slots sharing this handler

(0,0x1D) BranchT

Description: none. Handler 0x661051AF, dispatch slot 0x66107930, modOpcodes line 398.

BranchTVar

(3,0x08)not emittedhandler #473Control flowinferred_corpus
No description yet.
Encoding, evidence and notes
Encoding

Encoding: FD 08 (lead byte FD selects table 3), then 2 operand byte(s); total instruction length 4 byte(s).
vbdec template: %l
Operands:

  1. %l: branch_target_local, 2 byte(s). 16-bit branch target, offset from the start of the procedure's p-code (vbdec loc_ = proc start + offset).
Evidence and notes

Emitted by VB6 SP6 (P-code): not observed in about 3,070 probe programs. The slot exists in the runtime's dispatch table, but no tested source construct makes the compiler emit it.

Handler: 0x6610927C, unique to this slot (real opcode #473).

Description: none. Handler 0x6610927C, dispatch slot 0x66107934, modOpcodes line 399.

BranchTVarFree

(3,0x09)not emittedhandler #474Control flowinferred_corpus
No description yet.
Encoding, evidence and notes
Encoding

Encoding: FD 09 (lead byte FD selects table 3), then 2 operand byte(s); total instruction length 4 byte(s).
vbdec template: %l
Operands:

  1. %l: branch_target_local, 2 byte(s). 16-bit branch target, offset from the start of the procedure's p-code (vbdec loc_ = proc start + offset).
Evidence and notes

Emitted by VB6 SP6 (P-code): not observed in about 3,070 probe programs. The slot exists in the runtime's dispatch table, but no tested source construct makes the compiler emit it.

Handler: 0x661092AB, unique to this slot (real opcode #474).

Description: none. Handler 0x661092AB, dispatch slot 0x66107938, modOpcodes line 401.

COM

AddRef and related COM ref counting

AddRef

(4,0x97)not emittedhandler #656Object / COMconfirmed_msdocs
COM reference-count operation: AddRef.

Performs an IUnknown::AddRef or Release on an object pointer at a tracked slot. Inserted by the compiler at object-reference assignments and frame cleanup to maintain correct ref counts.

When the compiler emits it

Compiler-inserted at every object-reference lifetime boundary.

Encoding, evidence and notes
Encoding

Encoding: FE 97 (lead byte FE selects table 4), then 0 operand byte(s); total instruction length 2 byte(s).
Operands: none. All inputs come from the evaluation stack or the frame.

Evidence and notes

Emitted by VB6 SP6 (P-code): not observed in about 3,070 probe programs. The slot exists in the runtime's dispatch table, but no tested source construct makes the compiler emit it.

Handler: 0x6610B815, unique to this slot (real opcode #656).

Description: draft, by claude-opus-4.7. Handler 0x6610B815, dispatch slot 0x66107F70, modOpcodes line 450.

Cast

Type conversion Prefix: C<dest><src>

CAdVar

(2,0x34)emittedhandler #372Conversionconfirmed_msdocs9 corpus hits
Convert top-of-stack Variant to address.

Pops a value of type Variant, pushes the equivalent value as address.

Stack: [..., a:Var] -> [..., a':Ad]

Treats the value as an opaque 32-bit address; no boundary checks.

When the compiler emits it

Emitted at the boundary where a Variant value must be assigned to or passed as address.

VB6 source (verified: compiles to this slot)
Public Sub Main()
  Dim o As Object, p As Object
  Set p = o.Child
End Sub
Encoding, evidence and notes
Encoding

Encoding: FC 34 (lead byte FC selects table 2), then 0 operand byte(s); total instruction length 2 byte(s).
Operands: none. All inputs come from the evaluation stack or the frame.
Observed: FC34 CAdVar

Examples
Form1.LoadPlugins @ 0x4644FC | 464683    FC34                  CAdVar
Form1.LoadPlugins @ 0x4644FC | 46476E    FC34                  CAdVar
Form1.Shutdown @ 0x442740 | 44276D    FC34                  CAdVar

9 occurrence(s) in PDFStreamDumper.

Evidence and notes

Emitted by VB6 SP6 (P-code): yes. Minimal probe: probes\op\2_34_CAdVar.

Handler: 0x6610552F, unique to this slot (real opcode #372).

Corpus: 9 occurrence(s) in PDFStreamDumper_p.exe.

Description: draft, by claude-opus-4.7. Handler 0x6610552F, dispatch slot 0x661075E4, modOpcodes line 863.

CBoolCy

(0,0x53)emittedprimary of 2handler #81Conversionconfirmed_msdocs
Convert top-of-stack Currency to Boolean.

Pops a value of type Currency, pushes the equivalent value as Boolean.

Stack: [..., a:Cy] -> [..., a':Bool]

Zero source maps to False (0); any non-zero maps to True (-1).

When the compiler emits it

Emitted at the boundary where a Currency value must be assigned to or passed as Boolean.

VB6 source (verified: compiles to this slot)
Public Sub Main()
  Dim a As Currency, c As Boolean
  c = CBool(a)
End Sub
Encoding, evidence and notes
Encoding

Encoding: 53, then 0 operand byte(s); total instruction length 1 byte(s).
Operands: none. All inputs come from the evaluation stack or the frame.
Observed: 53 CBoolCy

Evidence and notes

Emitted by VB6 SP6 (P-code): yes. Minimal probe: probes\op\0_53_CBoolCy.

Handler: 0x661095FC, shared by 2 dispatch slots (real opcode #81). This is the primary slot. Other slots: (2,55) CBoolCy.

Check of vb6_source_eq example: verified: compiles and emits this slot.

Example from the description
Dim a As Currency, b As Boolean
b = CBool(a)
Slots sharing this handler

(2,0x55) CBoolCy

Description: draft, by claude-opus-4.7. Handler 0x661095FC, dispatch slot 0x66106E60, modOpcodes line 792.

CBoolCy

(2,0x55)not emitteddup of (0,53)handler #81Conversionconfirmed_handler
(alias) Convert top-of-stack Currency to Boolean.

Alias dispatch slot (2, 0x55) for the canonical CBoolCy at (0, 0x53); semantics are identical.

Pops a value of type Currency, pushes the equivalent value as Boolean.

Stack: [..., a:Cy] -> [..., a':Bool]

Zero source maps to False (0); any non-zero maps to True (-1).

When the compiler emits it

Emitted at the boundary where a Currency value must be assigned to or passed as Boolean.

VB6 source (from description, not verified)
Dim a As Currency, b As Boolean
b = CBool(a)
Encoding, evidence and notes
Encoding

Encoding: FC 55 (lead byte FC selects table 2), then 0 operand byte(s); total instruction length 2 byte(s).
Operands: none. All inputs come from the evaluation stack or the frame.

Evidence and notes

Emitted by VB6 SP6 (P-code): not observed in about 3,070 probe programs. The slot exists in the runtime's dispatch table, but no tested source construct makes the compiler emit it.

Handler: 0x661095FC, shared by 2 dispatch slots (real opcode #81). This is a duplicate slot of (0,53) CBoolCy. Other slots: (0,53) CBoolCy.

Check of vb6_source_eq example: compiles, but emits a different slot of the same handler. emits (0,53) CBoolCy (same handler, different slot)

Slots sharing this handler

(0,0x53) CBoolCy

Description: draft, by claude-opus-4.7. Handler 0x661095FC, dispatch slot 0x66107668, modOpcodes line 874.

CBoolI4

(2,0x52)emittedhandler #390Conversionconfirmed_msdocs14 corpus hits
Convert top-of-stack Long to Boolean.

Pops a value of type Long, pushes the equivalent value as Boolean.

Stack: [..., a:I4] -> [..., a':Bool]

Zero source maps to False (0); any non-zero maps to True (-1).

When the compiler emits it

Emitted at the boundary where a Long value must be assigned to or passed as Boolean.

VB6 source (verified: compiles to this slot)
Public Sub Main()
  Dim a As Long, c As Boolean
  c = CBool(a)
End Sub
Encoding, evidence and notes
Encoding

Encoding: FC 52 (lead byte FC selects table 2), then 0 operand byte(s); total instruction length 2 byte(s).
Operands: none. All inputs come from the evaluation stack or the frame.
Observed: FC52 CBoolI4

Examples
modZLIB.Proc_45E44C @ 0x45E44C | 45E4B5    FC52                  CBoolI4
modZLIB.Proc_45E44C @ 0x45E44C | 45E554    FC52                  CBoolI4
modZLIB.Proc_45E44C @ 0x45E44C | 45E5AB    FC52                  CBoolI4

14 occurrence(s) in PDFStreamDumper.

Evidence and notes

Emitted by VB6 SP6 (P-code): yes. Minimal probe: probes\op\2_52_CBoolI4.

Handler: 0x661052D7, unique to this slot (real opcode #390).

Check of vb6_source_eq example: verified: compiles and emits this slot.

Corpus: 14 occurrence(s) in PDFStreamDumper_p.exe.

Example from the description
Dim a As Long, b As Boolean
b = CBool(a)

Description: draft, by claude-opus-4.7. Handler 0x661052D7, dispatch slot 0x6610765C, modOpcodes line 871.

CBoolR4

(2,0x53)emittedprimary of 2handler #391Conversionconfirmed_msdocs
Convert top-of-stack Single to Boolean.

Pops a value of type Single, pushes the equivalent value as Boolean.

Stack: [..., a:R4] -> [..., a':Bool]

Zero source maps to False (0); any non-zero maps to True (-1).

When the compiler emits it

Emitted at the boundary where a Single value must be assigned to or passed as Boolean.

VB6 source (verified: compiles to this slot)
Public Sub Main()
  Dim a As Single, c As Boolean
  c = CBool(a)
End Sub
Encoding, evidence and notes
Encoding

Encoding: FC 53 (lead byte FC selects table 2), then 0 operand byte(s); total instruction length 2 byte(s).
Operands: none. All inputs come from the evaluation stack or the frame.
Observed: FC53 CBoolR4

Evidence and notes

Emitted by VB6 SP6 (P-code): yes. Minimal probe: probes\op\2_53_CBoolR4.

Handler: 0x66109605, shared by 2 dispatch slots (real opcode #391). This is the primary slot. Other slots: (2,54) CBoolR4.

Compile-time slot selection: the compiler picks different slots of this handler for different source types:

  • (2,53): Dim a As Single, c As Boolean : c = CBool(a)
  • (2,54): Dim a As Date, c As Boolean : c = CBool(a)

Finding: Compiler selects this slot for CBool(<Single>). (2,54) is used for Double/Date.

Check of vb6_source_eq example: verified: compiles and emits this slot.

Example from the description
Dim a As Single, b As Boolean
b = CBool(a)
Slots sharing this handler

(2,0x54) CBoolR4

Description: draft, by claude-opus-4.7. Handler 0x66109605, dispatch slot 0x66107660, modOpcodes line 872.

CBoolR4

(2,0x54)emitteddup of (2,53)handler #391Conversionconfirmed_handler
(alias) Convert top-of-stack Single to Boolean.

Alias dispatch slot (2, 0x54) for the canonical CBoolR4 at (2, 0x53); semantics are identical.

Pops a value of type Single, pushes the equivalent value as Boolean.

Stack: [..., a:R4] -> [..., a':Bool]

Zero source maps to False (0); any non-zero maps to True (-1).

When the compiler emits it

Emitted at the boundary where a Single value must be assigned to or passed as Boolean.

VB6 source (verified: compiles to this slot)
Public Sub Main()
  Dim a As Date, c As Boolean
  c = CBool(a)
End Sub
Encoding, evidence and notes
Encoding

Encoding: FC 54 (lead byte FC selects table 2), then 0 operand byte(s); total instruction length 2 byte(s).
Operands: none. All inputs come from the evaluation stack or the frame.
Observed: FC54 CBoolR4

Evidence and notes

Emitted by VB6 SP6 (P-code): yes. Minimal probe: probes\op\2_54_CBoolR4.

Handler: 0x66109605, shared by 2 dispatch slots (real opcode #391). This is a duplicate slot of (2,53) CBoolR4. Other slots: (2,53) CBoolR4.

Compile-time slot selection: the compiler picks different slots of this handler for different source types:

  • (2,53): Dim a As Single, c As Boolean : c = CBool(a)
  • (2,54): Dim a As Date, c As Boolean : c = CBool(a)

Finding: Compiler selects this slot for CBool(<Double>) and CBool(<Date>). Effective meaning: CBoolR8.

Check of vb6_source_eq example: compiles, but emits a different slot of the same handler. emits (2,53) CBoolR4 (same handler, different slot)

Example from the description
Dim a As Single, b As Boolean
b = CBool(a)
Slots sharing this handler

(2,0x53) CBoolR4

Description: draft, by claude-opus-4.7. Handler 0x66109605, dispatch slot 0x66107664, modOpcodes line 873.

CBoolStr

(2,0x57)emittedhandler #393Conversionconfirmed_msdocs
Convert top-of-stack String to Boolean.

Pops a value of type String, pushes the equivalent value as Boolean.

Stack: [..., a:Str] -> [..., a':Bool]

Zero source maps to False (0); any non-zero maps to True (-1).

When the compiler emits it

Emitted at the boundary where a String value must be assigned to or passed as Boolean.

VB6 source (verified: compiles to this slot)
Public Sub Main()
  Dim a As String, c As Boolean
  c = CBool(a)
End Sub
Encoding, evidence and notes
Encoding

Encoding: FC 57 (lead byte FC selects table 2), then 0 operand byte(s); total instruction length 2 byte(s).
Operands: none. All inputs come from the evaluation stack or the frame.
Observed: FC57 CBoolStr

Evidence and notes

Emitted by VB6 SP6 (P-code): yes. Minimal probe: probes\op\2_57_CBoolStr.

Handler: 0x661053BE, unique to this slot (real opcode #393).

Check of vb6_source_eq example: verified: compiles and emits this slot.

Example from the description
Dim a As String, b As Boolean
b = CBool(a)

Description: draft, by claude-opus-4.7. Handler 0x661053BE, dispatch slot 0x66107670, modOpcodes line 876.

CBoolUI1

(2,0x50)emitteddup of (2,51)handler #389Conversionconfirmed_msdocs
Convert top-of-stack Byte to Boolean.

Pops a value of type Byte, pushes the equivalent value as Boolean.

Stack: [..., a:UI1] -> [..., a':Bool]

Zero source maps to False (0); any non-zero maps to True (-1).

When the compiler emits it

Emitted at the boundary where a Byte value must be assigned to or passed as Boolean.

VB6 source (verified: compiles to this slot)
Public Sub Main()
  Dim a As Byte, c As Boolean
  c = CBool(a)
End Sub
Encoding, evidence and notes
Encoding

Encoding: FC 50 (lead byte FC selects table 2), then 0 operand byte(s); total instruction length 2 byte(s).
Operands: none. All inputs come from the evaluation stack or the frame.
Observed: FC50 CBoolUI1

Evidence and notes

Emitted by VB6 SP6 (P-code): yes. Minimal probe: probes\op\2_50_CBoolUI1.

Handler: 0x661052DD, shared by 2 dispatch slots (real opcode #389). This is a duplicate slot of (2,51) CBoolUI1. Other slots: (2,51) CBoolUI1.

Compile-time slot selection: the compiler picks different slots of this handler for different source types:

  • (2,50): Dim a As Byte, c As Boolean : c = CBool(a)
  • (2,51): Dim a As Integer, c As Boolean : c = CBool(a)

Finding: Compiler selects this slot for CBool(<Byte>). (2,51) is used for Integer.

Check of vb6_source_eq example: verified: compiles and emits this slot.

Example from the description
Dim a As Byte, b As Boolean
b = CBool(a)
Slots sharing this handler

(2,0x51) CBoolUI1

Description: draft, by claude-opus-4.7. Handler 0x661052DD, dispatch slot 0x66107654, modOpcodes line 869.

CBoolUI1

(2,0x51)emittedprimary of 2handler #389Conversionconfirmed_handler1 corpus hits
(alias) Convert top-of-stack Byte to Boolean.

Alias dispatch slot (2, 0x51) for the canonical CBoolUI1 at (2, 0x50); semantics are identical.

Pops a value of type Byte, pushes the equivalent value as Boolean.

Stack: [..., a:UI1] -> [..., a':Bool]

Zero source maps to False (0); any non-zero maps to True (-1).

When the compiler emits it

Emitted at the boundary where a Byte value must be assigned to or passed as Boolean.

VB6 source (verified: compiles to this slot)
Public Sub Main()
  Dim a As Integer, c As Boolean
  c = CBool(a)
End Sub
Encoding, evidence and notes
Encoding

Encoding: FC 51 (lead byte FC selects table 2), then 0 operand byte(s); total instruction length 2 byte(s).
Operands: none. All inputs come from the evaluation stack or the frame.
Observed: FC51 CBoolUI1

Examples
frmRefactor.cmdScroll_Event_0 @ 0x440C48 | 440C59    FC51                  CBoolUI1

1 occurrence(s) in PDFStreamDumper.

Evidence and notes

Emitted by VB6 SP6 (P-code): yes. Minimal probe: probes\op\2_51_CBoolUI1.

Handler: 0x661052DD, shared by 2 dispatch slots (real opcode #389). This is the primary slot. Other slots: (2,50) CBoolUI1.

Compile-time slot selection: the compiler picks different slots of this handler for different source types:

  • (2,50): Dim a As Byte, c As Boolean : c = CBool(a)
  • (2,51): Dim a As Integer, c As Boolean : c = CBool(a)

Finding: Compiler selects this slot for CBool(<Integer>), and for Integer arithmetic results assigned to Boolean. Effective meaning: CBoolI2.

Check of vb6_source_eq example: compiles, but emits a different slot of the same handler. emits (2,50) CBoolUI1 (same handler, different slot)

Corpus: 1 occurrence(s) in PDFStreamDumper_p.exe.

Example from the description
Dim a As Byte, b As Boolean
b = CBool(a)
Slots sharing this handler

(2,0x50) CBoolUI1

Description: draft, by claude-opus-4.7. Handler 0x661052DD, dispatch slot 0x66107658, modOpcodes line 870.

CBoolVar

(2,0x56)emittedhandler #392Conversionconfirmed_msdocs22 corpus hits
Implicitly coerce a Variant to Boolean (assignment, typed argument or typed expression context).

Pops a value of type Variant, pushes the equivalent value as Boolean.

Stack: [..., a:Var] -> [..., a':Bool]

Zero source maps to False (0); any non-zero maps to True (-1).

When the compiler emits it

Emitted when a Variant is used where a Boolean is required without an explicit conversion function: x = v with x As Boolean, a Variant passed to a ByVal Boolean parameter, or a late-bound property result stored into a Boolean. The explicit C...(v) function compiles to FnCBoolVar (2,4D) instead. Raises error 13 (Type mismatch) if the Variant cannot be converted.

VB6 source (verified: compiles to this slot)
Public Sub Main()
  Dim a As Variant, c As Boolean
  c = a
End Sub
Encoding, evidence and notes
Encoding

Encoding: FC 56 (lead byte FC selects table 2), then 0 operand byte(s); total instruction length 2 byte(s).
Operands: none. All inputs come from the evaluation stack or the frame.
Observed: FC56 CBoolVar

Examples
Form1.lv_MouseDown(ByVal Button As Integer, ByVal Shift As Integer, ByVal x As Long, ByVal y As Long) @ 0x447E40 | 447EA7    FC56                  CBoolVar
Form1.Form_Load @ 0x479DC0 | 47A560    FC56                  CBoolVar
Form1.Form_Load @ 0x479DC0 | 47A5C5    FC56                  CBoolVar

22 occurrence(s) in PDFStreamDumper.

Evidence and notes

Emitted by VB6 SP6 (P-code): yes. Minimal probe: probes\op\2_56_CBoolVar.

Handler: 0x661052FB, unique to this slot (real opcode #392).

Check of vb6_source_eq example: verified: compiles and emits this slot.

Corpus: 22 occurrence(s) in PDFStreamDumper_p.exe.

Example from the description
Dim v As Variant, x As Boolean
v = 5
x = v

Description: draft, by claude-opus-5-5. Handler 0x661052FB, dispatch slot 0x6610766C, modOpcodes line 875.

CBoolVarNull

(5,0x1B)emittedhandler #751Conversionconfirmed_msdocs35 corpus hits
Type conversion (CBoolVarNull).

Performs a VB6 type conversion. Mnemonic does not decompose cleanly into dest/src; see family description and printf template.

Stack: [..., src] -> [..., dest]

When the compiler emits it

Emitted at the boundary of a type-mismatched assignment, argument pass, or coercion.

VB6 source (verified: compiles to this slot)
Public Sub Main()
  Dim o As Object, n As Long
  If o.A Then n = 1
End Sub
Encoding, evidence and notes
Encoding

Encoding: FF 1B (lead byte FF selects table 5), then 0 operand byte(s); total instruction length 2 byte(s).
Operands: none. All inputs come from the evaluation stack or the frame.
Observed: FF1B CBoolVarNull

Examples
Form1.mnuSearchFilter_Event_0 @ 0x473E0C | 474097    FF1B                  CBoolVarNull
Form1.mnuSearchFilter_Event_0 @ 0x473E0C | 474402    FF1B                  CBoolVarNull
Form1.Form_Load @ 0x479DC0 | 47AF55    FF1B                  CBoolVarNull

35 occurrence(s) in PDFStreamDumper.

Evidence and notes

Emitted by VB6 SP6 (P-code): yes. Minimal probe: probes\op\5_1B_CBoolVarNull.

Handler: 0x6610530D, unique to this slot (real opcode #751).

Corpus: 35 occurrence(s) in PDFStreamDumper_p.exe.

Description: draft, by claude-opus-4.7. Handler 0x6610530D, dispatch slot 0x66108180, modOpcodes line 885.

CCyI2

(0,0xEF)emittedprimary of 3handler #236Conversionconfirmed_msdocs
Convert top-of-stack Integer to Currency.

Pops a value of type Integer, pushes the equivalent value as Currency.

Stack: [..., a:I2] -> [..., a':Cy]

Result holds 4 decimal places of precision; out-of-range raises overflow.

When the compiler emits it

Emitted at the boundary where a Integer value must be assigned to or passed as Currency.

VB6 source (verified: compiles to this slot)
Public Sub Main()
  Dim a As Boolean, c As Currency
  c = CCur(a)
End Sub
Encoding, evidence and notes
Encoding

Encoding: EF, then 0 operand byte(s); total instruction length 1 byte(s).
Operands: none. All inputs come from the evaluation stack or the frame.
Observed: EF CCyI2

Evidence and notes

Emitted by VB6 SP6 (P-code): yes. Minimal probe: probes\op\0_EF_CCyI2.

Handler: 0x66109596, shared by 3 dispatch slots (real opcode #236). This is the primary slot. Other slots: (2,04) CCyI2, (2,05) CCyI2.

Check of vb6_source_eq example: verified: compiles and emits this slot.

Example from the description
Dim a As Integer, b As Currency
b = CCur(a)
Slots sharing this handler

(2,0x04) CCyI2, (2,0x05) CCyI2

Description: draft, by claude-opus-4.7. Handler 0x66109596, dispatch slot 0x661070D0, modOpcodes line 806.

CCyI2

(2,0x04)not emitteddup of (0,EF)handler #236Conversionconfirmed_handler
(alias) Convert top-of-stack Integer to Currency.

Alias dispatch slot (2, 0x04) for the canonical CCyI2 at (0, 0xEF); semantics are identical.

Pops a value of type Integer, pushes the equivalent value as Currency.

Stack: [..., a:I2] -> [..., a':Cy]

Result holds 4 decimal places of precision; out-of-range raises overflow.

When the compiler emits it

Emitted at the boundary where a Integer value must be assigned to or passed as Currency.

VB6 source (from description, not verified)
Dim a As Integer, b As Currency
b = CCur(a)
Encoding, evidence and notes
Encoding

Encoding: FC 04 (lead byte FC selects table 2), then 0 operand byte(s); total instruction length 2 byte(s).
Operands: none. All inputs come from the evaluation stack or the frame.

Evidence and notes

Emitted by VB6 SP6 (P-code): not observed in about 3,070 probe programs. The slot exists in the runtime's dispatch table, but no tested source construct makes the compiler emit it.

Handler: 0x66109596, shared by 3 dispatch slots (real opcode #236). This is a duplicate slot of (0,EF) CCyI2. Other slots: (0,EF) CCyI2, (2,05) CCyI2.

Check of vb6_source_eq example: compiles, but emits a different slot of the same handler. emits (0,EF) CCyI2 (same handler, different slot)

Slots sharing this handler

(0,0xEF) CCyI2, (2,0x05) CCyI2

Description: draft, by claude-opus-4.7. Handler 0x66109596, dispatch slot 0x66107524, modOpcodes line 817.

CCyI2

(2,0x05)not emitteddup of (0,EF)handler #236Conversionconfirmed_handler
(alias) Convert top-of-stack Integer to Currency.

Alias dispatch slot (2, 0x05) for the canonical CCyI2 at (0, 0xEF); semantics are identical.

Pops a value of type Integer, pushes the equivalent value as Currency.

Stack: [..., a:I2] -> [..., a':Cy]

Result holds 4 decimal places of precision; out-of-range raises overflow.

When the compiler emits it

Emitted at the boundary where a Integer value must be assigned to or passed as Currency.

VB6 source (from description, not verified)
Dim a As Integer, b As Currency
b = CCur(a)
Encoding, evidence and notes
Encoding

Encoding: FC 05 (lead byte FC selects table 2), then 0 operand byte(s); total instruction length 2 byte(s).
Operands: none. All inputs come from the evaluation stack or the frame.

Evidence and notes

Emitted by VB6 SP6 (P-code): not observed in about 3,070 probe programs. The slot exists in the runtime's dispatch table, but no tested source construct makes the compiler emit it.

Handler: 0x66109596, shared by 3 dispatch slots (real opcode #236). This is a duplicate slot of (0,EF) CCyI2. Other slots: (0,EF) CCyI2, (2,04) CCyI2.

Check of vb6_source_eq example: compiles, but emits a different slot of the same handler. emits (0,EF) CCyI2 (same handler, different slot)

Slots sharing this handler

(0,0xEF) CCyI2, (2,0x04) CCyI2

Description: draft, by claude-opus-4.7. Handler 0x66109596, dispatch slot 0x66107528, modOpcodes line 818.

CCyI4

(0,0xF0)emittedprimary of 2handler #237Conversionconfirmed_msdocs
Convert top-of-stack Long to Currency.

Pops a value of type Long, pushes the equivalent value as Currency.

Stack: [..., a:I4] -> [..., a':Cy]

Result holds 4 decimal places of precision; out-of-range raises overflow.

When the compiler emits it

Emitted at the boundary where a Long value must be assigned to or passed as Currency.

VB6 source (verified: compiles to this slot)
Public Sub Main()
  Dim a As Long, c As Currency
  c = CCur(a)
End Sub
Encoding, evidence and notes
Encoding

Encoding: F0, then 0 operand byte(s); total instruction length 1 byte(s).
Operands: none. All inputs come from the evaluation stack or the frame.
Observed: F0 CCyI4

Evidence and notes

Emitted by VB6 SP6 (P-code): yes. Minimal probe: probes\op\0_F0_CCyI4.

Handler: 0x661095AC, shared by 2 dispatch slots (real opcode #237). This is the primary slot. Other slots: (2,06) CCyI4.

Check of vb6_source_eq example: verified: compiles and emits this slot.

Example from the description
Dim a As Long, b As Currency
b = CCur(a)
Slots sharing this handler

(2,0x06) CCyI4

Description: draft, by claude-opus-4.7. Handler 0x661095AC, dispatch slot 0x661070D4, modOpcodes line 807.

CCyI4

(2,0x06)not emitteddup of (0,F0)handler #237Conversionconfirmed_handler
(alias) Convert top-of-stack Long to Currency.

Alias dispatch slot (2, 0x06) for the canonical CCyI4 at (0, 0xF0); semantics are identical.

Pops a value of type Long, pushes the equivalent value as Currency.

Stack: [..., a:I4] -> [..., a':Cy]

Result holds 4 decimal places of precision; out-of-range raises overflow.

When the compiler emits it

Emitted at the boundary where a Long value must be assigned to or passed as Currency.

VB6 source (from description, not verified)
Dim a As Long, b As Currency
b = CCur(a)
Encoding, evidence and notes
Encoding

Encoding: FC 06 (lead byte FC selects table 2), then 0 operand byte(s); total instruction length 2 byte(s).
Operands: none. All inputs come from the evaluation stack or the frame.

Evidence and notes

Emitted by VB6 SP6 (P-code): not observed in about 3,070 probe programs. The slot exists in the runtime's dispatch table, but no tested source construct makes the compiler emit it.

Handler: 0x661095AC, shared by 2 dispatch slots (real opcode #237). This is a duplicate slot of (0,F0) CCyI4. Other slots: (0,F0) CCyI4.

Check of vb6_source_eq example: compiles, but emits a different slot of the same handler. emits (0,F0) CCyI4 (same handler, different slot)

Slots sharing this handler

(0,0xF0) CCyI4

Description: draft, by claude-opus-4.7. Handler 0x661095AC, dispatch slot 0x6610752C, modOpcodes line 819.

CCyR4

(0,0xF1)emittedprimary of 3handler #238Conversionconfirmed_msdocs
Convert top-of-stack Single to Currency.

Pops a value of type Single, pushes the equivalent value as Currency.

Stack: [..., a:R4] -> [..., a':Cy]

Result holds 4 decimal places of precision; out-of-range raises overflow.

When the compiler emits it

Emitted at the boundary where a Single value must be assigned to or passed as Currency.

VB6 source (verified: compiles to this slot)
Public Sub Main()
  Dim a As Date, c As Currency
  c = CCur(a)
End Sub
Encoding, evidence and notes
Encoding

Encoding: F1, then 0 operand byte(s); total instruction length 1 byte(s).
Operands: none. All inputs come from the evaluation stack or the frame.
Observed: F1 CCyR4

Evidence and notes

Emitted by VB6 SP6 (P-code): yes. Minimal probe: probes\op\0_F1_CCyR4.

Handler: 0x661095C1, shared by 3 dispatch slots (real opcode #238). This is the primary slot. Other slots: (2,07) CCyR4, (2,08) CCyR4.

Check of vb6_source_eq example: verified: compiles and emits this slot.

Example from the description
Dim a As Single, b As Currency
b = CCur(a)
Slots sharing this handler

(2,0x07) CCyR4, (2,0x08) CCyR4

Description: draft, by claude-opus-4.7. Handler 0x661095C1, dispatch slot 0x661070D8, modOpcodes line 808.

CCyR4

(2,0x07)not emitteddup of (0,F1)handler #238Conversionconfirmed_handler
(alias) Convert top-of-stack Single to Currency.

Alias dispatch slot (2, 0x07) for the canonical CCyR4 at (0, 0xF1); semantics are identical.

Pops a value of type Single, pushes the equivalent value as Currency.

Stack: [..., a:R4] -> [..., a':Cy]

Result holds 4 decimal places of precision; out-of-range raises overflow.

When the compiler emits it

Emitted at the boundary where a Single value must be assigned to or passed as Currency.

VB6 source (from description, not verified)
Dim a As Single, b As Currency
b = CCur(a)
Encoding, evidence and notes
Encoding

Encoding: FC 07 (lead byte FC selects table 2), then 0 operand byte(s); total instruction length 2 byte(s).
Operands: none. All inputs come from the evaluation stack or the frame.

Evidence and notes

Emitted by VB6 SP6 (P-code): not observed in about 3,070 probe programs. The slot exists in the runtime's dispatch table, but no tested source construct makes the compiler emit it.

Handler: 0x661095C1, shared by 3 dispatch slots (real opcode #238). This is a duplicate slot of (0,F1) CCyR4. Other slots: (0,F1) CCyR4, (2,08) CCyR4.

Check of vb6_source_eq example: compiles, but emits a different slot of the same handler. emits (0,F1) CCyR4 (same handler, different slot)

Slots sharing this handler

(0,0xF1) CCyR4, (2,0x08) CCyR4

Description: draft, by claude-opus-4.7. Handler 0x661095C1, dispatch slot 0x66107530, modOpcodes line 820.

CCyR4

(2,0x08)not emitteddup of (0,F1)handler #238Conversionconfirmed_handler
(alias) Convert top-of-stack Single to Currency.

Alias dispatch slot (2, 0x08) for the canonical CCyR4 at (0, 0xF1); semantics are identical.

Pops a value of type Single, pushes the equivalent value as Currency.

Stack: [..., a:R4] -> [..., a':Cy]

Result holds 4 decimal places of precision; out-of-range raises overflow.

When the compiler emits it

Emitted at the boundary where a Single value must be assigned to or passed as Currency.

VB6 source (from description, not verified)
Dim a As Single, b As Currency
b = CCur(a)
Encoding, evidence and notes
Encoding

Encoding: FC 08 (lead byte FC selects table 2), then 0 operand byte(s); total instruction length 2 byte(s).
Operands: none. All inputs come from the evaluation stack or the frame.

Evidence and notes

Emitted by VB6 SP6 (P-code): not observed in about 3,070 probe programs. The slot exists in the runtime's dispatch table, but no tested source construct makes the compiler emit it.

Handler: 0x661095C1, shared by 3 dispatch slots (real opcode #238). This is a duplicate slot of (0,F1) CCyR4. Other slots: (0,F1) CCyR4, (2,07) CCyR4.

Check of vb6_source_eq example: compiles, but emits a different slot of the same handler. emits (0,F1) CCyR4 (same handler, different slot)

Slots sharing this handler

(0,0xF1) CCyR4, (2,0x07) CCyR4

Description: draft, by claude-opus-4.7. Handler 0x661095C1, dispatch slot 0x66107534, modOpcodes line 821.

CCyStr

(2,0x0B)emittedhandler #360Conversionconfirmed_msdocs
Convert top-of-stack String to Currency.

Pops a value of type String, pushes the equivalent value as Currency.

Stack: [..., a:Str] -> [..., a':Cy]

Result holds 4 decimal places of precision; out-of-range raises overflow.

When the compiler emits it

Emitted at the boundary where a String value must be assigned to or passed as Currency.

VB6 source (verified: compiles to this slot)
Public Sub Main()
  Dim a As String, c As Currency
  c = CCur(a)
End Sub
Encoding, evidence and notes
Encoding

Encoding: FC 0B (lead byte FC selects table 2), then 0 operand byte(s); total instruction length 2 byte(s).
Operands: none. All inputs come from the evaluation stack or the frame.
Observed: FC0B CCyStr

Evidence and notes

Emitted by VB6 SP6 (P-code): yes. Minimal probe: probes\op\2_0B_CCyStr.

Handler: 0x661096F2, unique to this slot (real opcode #360).

Check of vb6_source_eq example: verified: compiles and emits this slot.

Example from the description
Dim a As String, b As Currency
b = CCur(a)

Description: draft, by claude-opus-4.7. Handler 0x661096F2, dispatch slot 0x66107540, modOpcodes line 823.

CCyVar

(2,0x0A)emittedhandler #359Conversionconfirmed_msdocs
Implicitly coerce a Variant to Currency (assignment, typed argument or typed expression context).

Pops a value of type Variant, pushes the equivalent value as Currency.

Stack: [..., a:Var] -> [..., a':Cy]

Result holds 4 decimal places of precision; out-of-range raises overflow.

When the compiler emits it

Emitted when a Variant is used where a Currency is required without an explicit conversion function: x = v with x As Currency, a Variant passed to a ByVal Currency parameter, or a late-bound property result stored into a Currency. The explicit C...(v) function compiles to FnCCurVar (2,49) instead. Raises error 13 (Type mismatch) if the Variant cannot be converted.

VB6 source (verified: compiles to this slot)
Public Sub Main()
  Dim a As Variant, c As Currency
  c = a
End Sub
Encoding, evidence and notes
Encoding

Encoding: FC 0A (lead byte FC selects table 2), then 0 operand byte(s); total instruction length 2 byte(s).
Operands: none. All inputs come from the evaluation stack or the frame.
Observed: FC0A CCyVar

Evidence and notes

Emitted by VB6 SP6 (P-code): yes. Minimal probe: probes\op\2_0A_CCyVar.

Handler: 0x661095E9, unique to this slot (real opcode #359).

Check of vb6_source_eq example: verified: compiles and emits this slot.

Example from the description
Dim v As Variant, x As Currency
v = 5
x = v

Description: draft, by claude-opus-5-5. Handler 0x661095E9, dispatch slot 0x6610753C, modOpcodes line 822.

CDargRef

(3,0x93)emittedhandler #548Conversioninferred_corpus99 corpus hits
Convert top-of-stack Ref to Darg.

Pops a value of type Ref, pushes the equivalent value as Darg.

Stack: [..., a:Ref] -> [..., a':Darg]

When the compiler emits it

Emitted at the boundary where a Ref value must be assigned to or passed as Darg.

VB6 source (verified: compiles to this slot)
Public Sub Main()
  Dim o As Object, n As Long
  o.DoIt n
End Sub
Encoding, evidence and notes
Encoding

Encoding: FD 93 (lead byte FD selects table 3), then 2 operand byte(s); total instruction length 4 byte(s).
vbdec template: %r
Operands:

  1. %r: vt_type_byte, 1 byte(s). 8-bit VARTYPE code (VT_*).

Observed: FD93 0340 CDargRef 0x4003 (I4 | ByRef)

Examples
Form1.mnuB64Clipboard_Click @ 0x44E37C | 44E449    FD93 0840             CDargRef  0x4008 (Bstr | ByRef)
Form1.mnuExtractURI_Click @ 0x45774C | 4578AC    FD93 0840             CDargRef  0x4008 (Bstr | ByRef)
Form1.mnuSecureDownload_Click @ 0x456570 | 4566DB    FD93 0840             CDargRef  0x4008 (Bstr | ByRef)

99 occurrence(s) in PDFStreamDumper.

Evidence and notes

Emitted by VB6 SP6 (P-code): yes. Minimal probe: probes\op\3_93_CDargRef.

Handler: 0x66105511, unique to this slot (real opcode #548).

Corpus: 99 occurrence(s) in PDFStreamDumper_p.exe.

Description: draft, by claude-opus-4.7. Handler 0x66105511, dispatch slot 0x66107B60, modOpcodes line 905.

CDargRefUdt

(5,0x32)emittedhandler #759UDT / recordinferred_corpus
Pass a UDT by reference to a late-bound call as a VT_RECORD|VT_BYREF Variant.

Wraps the address of a public-record UDT in a by-reference Variant argument for IDispatch::Invoke.

Operands (4 bytes): record-type pool index and flags (observed 2440 0000).

When the compiler emits it

Emitted for o.Take r with o As Object and r a typelib/public UDT.

VB6 source (verified: compiles to this slot)
' references probes\_tlb\probetlb.tlb
Public Sub Main()
  Dim o As Object, r As TPubRec
  o.Take r
End Sub
Encoding, evidence and notes
Encoding

Encoding: FF 32 (lead byte FF selects table 5), then 4 operand byte(s); total instruction length 6 byte(s).
No printf operands are declared, but the instruction still consumes operand bytes; see the size above and the observed bytes below. (Phase 3a: flag=0 does not mean 'no operands'.)
Observed: FF32 24400000 CDargRefUdt

Examples
FF32 24400000  CDargRefUdt

From the Phase 4 probe (VB6 SP6, P-code).

Evidence and notes

Emitted by VB6 SP6 (P-code): yes. Minimal probe: probes\op\5_32_CDargRefUdt.

Handler: 0x661098A7, unique to this slot (real opcode #759).

Check of vb6_source_eq example: verified: compiles and emits this slot.

Example from the description
' references probes\_tlb\probetlb.tlb
Public Sub Main()
  Dim o As Object, r As TPubRec
  o.Take r
End Sub

Description: draft, by claude-opus-5-5. Handler 0x661098A7, dispatch slot 0x661081DC, modOpcodes line 920.

CDateR8

(0,0xF2)emittedprimary of 2handler #239Conversionconfirmed_msdocs
Type conversion (CDateR8).

Performs a VB6 type conversion. Mnemonic does not decompose cleanly into dest/src; see family description and printf template.

Stack: [..., src] -> [..., dest]

When the compiler emits it

Emitted at the boundary of a type-mismatched assignment, argument pass, or coercion.

VB6 source (verified: compiles to this slot)
Public Sub Main()
  Dim a As Single, c As Date
  c = a
End Sub
Encoding, evidence and notes
Encoding

Encoding: F2, then 0 operand byte(s); total instruction length 1 byte(s).
Operands: none. All inputs come from the evaluation stack or the frame.
Observed: F2 CDateR8

Evidence and notes

Emitted by VB6 SP6 (P-code): yes. Minimal probe: probes\op\0_F2_CDateR8.

Handler: 0x66109705, shared by 2 dispatch slots (real opcode #239). This is the primary slot. Other slots: (2,47) CDateR8.

Slots sharing this handler

(2,0x47) CDateR8

Description: draft, by claude-opus-4.7. Handler 0x66109705, dispatch slot 0x661070DC, modOpcodes line 809.

CDateR8

(2,0x47)not emitteddup of (0,F2)handler #239Conversionconfirmed_handler
(alias) Type conversion (CDateR8).

Alias dispatch slot (2, 0x47) for the canonical CDateR8 at (0, 0xF2); semantics are identical.

Performs a VB6 type conversion. Mnemonic does not decompose cleanly into dest/src; see family description and printf template.

Stack: [..., src] -> [..., dest]

When the compiler emits it

Emitted at the boundary of a type-mismatched assignment, argument pass, or coercion.

Encoding, evidence and notes
Encoding

Encoding: FC 47 (lead byte FC selects table 2), then 0 operand byte(s); total instruction length 2 byte(s).
Operands: none. All inputs come from the evaluation stack or the frame.

Evidence and notes

Emitted by VB6 SP6 (P-code): not observed in about 3,070 probe programs. The slot exists in the runtime's dispatch table, but no tested source construct makes the compiler emit it.

Handler: 0x66109705, shared by 2 dispatch slots (real opcode #239). This is a duplicate slot of (0,F2) CDateR8. Other slots: (0,F2) CDateR8.

Slots sharing this handler

(0,0xF2) CDateR8

Description: draft, by claude-opus-4.7. Handler 0x66109705, dispatch slot 0x66107630, modOpcodes line 868.

CDateStr

(4,0xC9)emittedhandler #687Conversionconfirmed_msdocs
Type conversion (CDateStr).

Performs a VB6 type conversion. Mnemonic does not decompose cleanly into dest/src; see family description and printf template.

Stack: [..., src] -> [..., dest]

When the compiler emits it

Emitted at the boundary of a type-mismatched assignment, argument pass, or coercion.

VB6 source (verified: compiles to this slot)
Public Sub Main()
  Dim a As String, c As Date
  c = CDate(a)
End Sub
Encoding, evidence and notes
Encoding

Encoding: FE C9 (lead byte FE selects table 4), then 0 operand byte(s); total instruction length 2 byte(s).
Operands: none. All inputs come from the evaluation stack or the frame.
Observed: FEC9 CDateStr

Evidence and notes

Emitted by VB6 SP6 (P-code): yes. Minimal probe: probes\op\4_C9_CDateStr.

Handler: 0x661053EE, unique to this slot (real opcode #687).

Description: draft, by claude-opus-4.7. Handler 0x661053EE, dispatch slot 0x66108038, modOpcodes line 884.

CExtInstUnk

(5,0x08)not emittedhandler #734Object / COMconfirmed_msdocs
Type conversion (CExtInstUnk).

Performs a VB6 type conversion. Mnemonic does not decompose cleanly into dest/src; see family description and printf template.

Stack: [..., src] -> [..., dest]

When the compiler emits it

Emitted at the boundary of a type-mismatched assignment, argument pass, or coercion.

Encoding, evidence and notes
Encoding

Encoding: FF 08 (lead byte FF selects table 5), then 0 operand byte(s); total instruction length 2 byte(s).
Operands: none. All inputs come from the evaluation stack or the frame.

Evidence and notes

Emitted by VB6 SP6 (P-code): not observed in about 3,070 probe programs. The slot exists in the runtime's dispatch table, but no tested source construct makes the compiler emit it.

Handler: 0x6610B094, unique to this slot (real opcode #734).

Description: draft, by claude-opus-4.7. Handler 0x6610B094, dispatch slot 0x66108134, modOpcodes line 886.

CI2Cy

(0,0xE6)emittedprimary of 2handler #227Conversionconfirmed_msdocs
Convert top-of-stack Currency to Integer.

Pops a value of type Currency, pushes the equivalent value as Integer.

Stack: [..., a:Cy] -> [..., a':I2]

Numeric conversion uses VB6 banker's rounding (round-half-to-even) for fractional sources; out-of-range raises run-time error 6 (Overflow).

When the compiler emits it

Emitted at the boundary where a Currency value must be assigned to or passed as Integer.

VB6 source (verified: compiles to this slot)
Public Sub Main()
  Dim a As Currency, c As Integer
  c = CInt(a)
End Sub
Encoding, evidence and notes
Encoding

Encoding: E6, then 0 operand byte(s); total instruction length 1 byte(s).
Operands: none. All inputs come from the evaluation stack or the frame.
Observed: E6 CI2Cy

Evidence and notes

Emitted by VB6 SP6 (P-code): yes. Minimal probe: probes\op\0_E6_CI2Cy.

Handler: 0x66109502, shared by 2 dispatch slots (real opcode #227). This is the primary slot. Other slots: (2,19) CI2Cy.

Check of vb6_source_eq example: verified: compiles and emits this slot.

Example from the description
Dim a As Currency, b As Integer
b = CInt(a)
Slots sharing this handler

(2,0x19) CI2Cy

Description: draft, by claude-opus-4.7. Handler 0x66109502, dispatch slot 0x661070AC, modOpcodes line 797.

CI2Cy

(2,0x19)not emitteddup of (0,E6)handler #227Conversionconfirmed_handler
(alias) Convert top-of-stack Currency to Integer.

Alias dispatch slot (2, 0x19) for the canonical CI2Cy at (0, 0xE6); semantics are identical.

Pops a value of type Currency, pushes the equivalent value as Integer.

Stack: [..., a:Cy] -> [..., a':I2]

Numeric conversion uses VB6 banker's rounding (round-half-to-even) for fractional sources; out-of-range raises run-time error 6 (Overflow).

When the compiler emits it

Emitted at the boundary where a Currency value must be assigned to or passed as Integer.

VB6 source (from description, not verified)
Dim a As Currency, b As Integer
b = CInt(a)
Encoding, evidence and notes
Encoding

Encoding: FC 19 (lead byte FC selects table 2), then 0 operand byte(s); total instruction length 2 byte(s).
Operands: none. All inputs come from the evaluation stack or the frame.

Evidence and notes

Emitted by VB6 SP6 (P-code): not observed in about 3,070 probe programs. The slot exists in the runtime's dispatch table, but no tested source construct makes the compiler emit it.

Handler: 0x66109502, shared by 2 dispatch slots (real opcode #227). This is a duplicate slot of (0,E6) CI2Cy. Other slots: (0,E6) CI2Cy.

Check of vb6_source_eq example: compiles, but emits a different slot of the same handler. emits (0,E6) CI2Cy (same handler, different slot)

Slots sharing this handler

(0,0xE6) CI2Cy

Description: draft, by claude-opus-4.7. Handler 0x66109502, dispatch slot 0x66107578, modOpcodes line 835.

CI2I4

(0,0xE4)emittedprimary of 2handler #225Conversionconfirmed_msdocs143 corpus hits
Convert top-of-stack Long to Integer.

Pops a value of type Long, pushes the equivalent value as Integer.

Stack: [..., a:I4] -> [..., a':I2]

When the compiler emits it

Emitted at the boundary where a Long value must be assigned to or passed as Integer.

VB6 source (verified: compiles to this slot)
Public Sub Main()
  Dim a As Long, c As Integer
  c = CInt(a)
End Sub
Encoding, evidence and notes
Encoding

Encoding: E4, then 0 operand byte(s); total instruction length 1 byte(s).
Operands: none. All inputs come from the evaluation stack or the frame.
Observed: E4 CI2I4

Examples
Form1.LoadPlugins @ 0x4644FC | 464622    E4                    CI2I4
Form1.mnuDecompileFlash_Click @ 0x4613A8 | 4615F2    E4                    CI2I4
Form1.mnuDecompileFlash_Click @ 0x4613A8 | 4615FE    E4                    CI2I4

143 occurrence(s) in PDFStreamDumper.

Evidence and notes

Emitted by VB6 SP6 (P-code): yes. Minimal probe: probes\op\0_E4_CI2I4.

Handler: 0x661051D9, shared by 2 dispatch slots (real opcode #225). This is the primary slot. Other slots: (2,16) CI2I4.

Check of vb6_source_eq example: verified: compiles and emits this slot.

Corpus: 143 occurrence(s) in PDFStreamDumper_p.exe.

Example from the description
Dim a As Long, b As Integer
b = CInt(a)
Slots sharing this handler

(2,0x16) CI2I4

Description: draft, by claude-opus-4.7. Handler 0x661051D9, dispatch slot 0x661070A4, modOpcodes line 795.

CI2I4

(2,0x16)not emitteddup of (0,E4)handler #225Conversionconfirmed_handler
(alias) Convert top-of-stack Long to Integer.

Alias dispatch slot (2, 0x16) for the canonical CI2I4 at (0, 0xE4); semantics are identical.

Pops a value of type Long, pushes the equivalent value as Integer.

Stack: [..., a:I4] -> [..., a':I2]

When the compiler emits it

Emitted at the boundary where a Long value must be assigned to or passed as Integer.

VB6 source (from description, not verified)
Dim a As Long, b As Integer
b = CInt(a)
Encoding, evidence and notes
Encoding

Encoding: FC 16 (lead byte FC selects table 2), then 0 operand byte(s); total instruction length 2 byte(s).
Operands: none. All inputs come from the evaluation stack or the frame.

Evidence and notes

Emitted by VB6 SP6 (P-code): not observed in about 3,070 probe programs. The slot exists in the runtime's dispatch table, but no tested source construct makes the compiler emit it.

Handler: 0x661051D9, shared by 2 dispatch slots (real opcode #225). This is a duplicate slot of (0,E4) CI2I4. Other slots: (0,E4) CI2I4.

Check of vb6_source_eq example: compiles, but emits a different slot of the same handler. emits (0,E4) CI2I4 (same handler, different slot)

Slots sharing this handler

(0,0xE4) CI2I4

Description: draft, by claude-opus-4.7. Handler 0x661051D9, dispatch slot 0x6610756C, modOpcodes line 832.

CI2R8

(0,0xE5)emittedprimary of 3handler #226Conversionconfirmed_msdocs8 corpus hits
Convert top-of-stack Double to Integer.

Pops a value of type Double, pushes the equivalent value as Integer.

Stack: [..., a:R8] -> [..., a':I2]

Numeric conversion uses VB6 banker's rounding (round-half-to-even) for fractional sources; out-of-range raises run-time error 6 (Overflow).

When the compiler emits it

Emitted at the boundary where a Double value must be assigned to or passed as Integer.

VB6 source (verified: compiles to this slot)
Public Sub Main()
  Dim a As Date, c As Integer
  c = CInt(a)
End Sub
Encoding, evidence and notes
Encoding

Encoding: E5, then 0 operand byte(s); total instruction length 1 byte(s).
Operands: none. All inputs come from the evaluation stack or the frame.
Observed: E5 CI2R8

Examples
Form1.Form_Resize @ 0x474F3C | 474F61    E5                    CI2R8
Form1.Form_Resize @ 0x474F3C | 474F86    E5                    CI2R8
Form2.Proc_453E3C @ 0x453E3C | 453E61    E5                    CI2R8

8 occurrence(s) in PDFStreamDumper.

Evidence and notes

Emitted by VB6 SP6 (P-code): yes. Minimal probe: probes\op\0_E5_CI2R8.

Handler: 0x661051F5, shared by 3 dispatch slots (real opcode #226). This is the primary slot. Other slots: (2,17) CI2R8, (2,18) CI2R8.

Check of vb6_source_eq example: verified: compiles and emits this slot.

Corpus: 8 occurrence(s) in PDFStreamDumper_p.exe.

Example from the description
Dim a As Double, b As Integer
b = CInt(a)
Slots sharing this handler

(2,0x17) CI2R8, (2,0x18) CI2R8

Description: draft, by claude-opus-4.7. Handler 0x661051F5, dispatch slot 0x661070A8, modOpcodes line 796.

CI2R8

(2,0x17)not emitteddup of (0,E5)handler #226Conversionconfirmed_handler
(alias) Convert top-of-stack Double to Integer.

Alias dispatch slot (2, 0x17) for the canonical CI2R8 at (0, 0xE5); semantics are identical.

Pops a value of type Double, pushes the equivalent value as Integer.

Stack: [..., a:R8] -> [..., a':I2]

Numeric conversion uses VB6 banker's rounding (round-half-to-even) for fractional sources; out-of-range raises run-time error 6 (Overflow).

When the compiler emits it

Emitted at the boundary where a Double value must be assigned to or passed as Integer.

VB6 source (from description, not verified)
Dim a As Double, b As Integer
b = CInt(a)
Encoding, evidence and notes
Encoding

Encoding: FC 17 (lead byte FC selects table 2), then 0 operand byte(s); total instruction length 2 byte(s).
Operands: none. All inputs come from the evaluation stack or the frame.

Evidence and notes

Emitted by VB6 SP6 (P-code): not observed in about 3,070 probe programs. The slot exists in the runtime's dispatch table, but no tested source construct makes the compiler emit it.

Handler: 0x661051F5, shared by 3 dispatch slots (real opcode #226). This is a duplicate slot of (0,E5) CI2R8. Other slots: (0,E5) CI2R8, (2,18) CI2R8.

Check of vb6_source_eq example: compiles, but emits a different slot of the same handler. emits (0,E5) CI2R8 (same handler, different slot)

Slots sharing this handler

(0,0xE5) CI2R8, (2,0x18) CI2R8

Description: draft, by claude-opus-4.7. Handler 0x661051F5, dispatch slot 0x66107570, modOpcodes line 833.

CI2R8

(2,0x18)not emitteddup of (0,E5)handler #226Conversionconfirmed_handler
(alias) Convert top-of-stack Double to Integer.

Alias dispatch slot (2, 0x18) for the canonical CI2R8 at (0, 0xE5); semantics are identical.

Pops a value of type Double, pushes the equivalent value as Integer.

Stack: [..., a:R8] -> [..., a':I2]

Numeric conversion uses VB6 banker's rounding (round-half-to-even) for fractional sources; out-of-range raises run-time error 6 (Overflow).

When the compiler emits it

Emitted at the boundary where a Double value must be assigned to or passed as Integer.

VB6 source (from description, not verified)
Dim a As Double, b As Integer
b = CInt(a)
Encoding, evidence and notes
Encoding

Encoding: FC 18 (lead byte FC selects table 2), then 0 operand byte(s); total instruction length 2 byte(s).
Operands: none. All inputs come from the evaluation stack or the frame.

Evidence and notes

Emitted by VB6 SP6 (P-code): not observed in about 3,070 probe programs. The slot exists in the runtime's dispatch table, but no tested source construct makes the compiler emit it.

Handler: 0x661051F5, shared by 3 dispatch slots (real opcode #226). This is a duplicate slot of (0,E5) CI2R8. Other slots: (0,E5) CI2R8, (2,17) CI2R8.

Check of vb6_source_eq example: compiles, but emits a different slot of the same handler. emits (0,E5) CI2R8 (same handler, different slot)

Slots sharing this handler

(0,0xE5) CI2R8, (2,0x17) CI2R8

Description: draft, by claude-opus-4.7. Handler 0x661051F5, dispatch slot 0x66107574, modOpcodes line 834.

CI2Str

(2,0x1B)emittedhandler #368Conversionconfirmed_msdocs3 corpus hits
Convert top-of-stack String to Integer.

Pops a value of type String, pushes the equivalent value as Integer.

Stack: [..., a:Str] -> [..., a':I2]

Numeric conversion uses VB6 banker's rounding (round-half-to-even) for fractional sources; out-of-range raises run-time error 6 (Overflow).

When the compiler emits it

Emitted at the boundary where a String value must be assigned to or passed as Integer.

VB6 source (verified: compiles to this slot)
Public Sub Main()
  Dim a As String, c As Integer
  c = CInt(a)
End Sub
Encoding, evidence and notes
Encoding

Encoding: FC 1B (lead byte FC selects table 2), then 0 operand byte(s); total instruction length 2 byte(s).
Operands: none. All inputs come from the evaluation stack or the frame.
Observed: FC1B CI2Str

Examples
Form1.mnuDecompressSWC_Click @ 0x45E9E4 | 45EBF9    FC1B                  CI2Str
Form1.mnuPluginList_Event_0 @ 0x44C3D4 | 44C44F    FC1B                  CI2Str
Form1.mnuPluginList_Event_0 @ 0x44C3D4 | 44C45E    FC1B                  CI2Str

3 occurrence(s) in PDFStreamDumper.

Evidence and notes

Emitted by VB6 SP6 (P-code): yes. Minimal probe: probes\op\2_1B_CI2Str.

Handler: 0x661053C8, unique to this slot (real opcode #368).

Check of vb6_source_eq example: verified: compiles and emits this slot.

Corpus: 3 occurrence(s) in PDFStreamDumper_p.exe.

Example from the description
Dim a As String, b As Integer
b = CInt(a)

Description: draft, by claude-opus-4.7. Handler 0x661053C8, dispatch slot 0x66107580, modOpcodes line 837.

CI2UI1

(2,0x14)emittedhandler #367Conversionconfirmed_msdocs62 corpus hits
Convert top-of-stack Byte to Integer.

Pops a value of type Byte, pushes the equivalent value as Integer.

Stack: [..., a:UI1] -> [..., a':I2]

When the compiler emits it

Emitted at the boundary where a Byte value must be assigned to or passed as Integer.

VB6 source (verified: compiles to this slot)
Public Sub Main()
  Dim a As Byte, c As Integer
  c = CInt(a)
End Sub
Encoding, evidence and notes
Encoding

Encoding: FC 14 (lead byte FC selects table 2), then 0 operand byte(s); total instruction length 2 byte(s).
Operands: none. All inputs come from the evaluation stack or the frame.
Observed: FC14 CI2UI1

Examples
Form1.mnuDecompressSWC_Click @ 0x45E9E4 | 45EA97    FC14                  CI2UI1
Form1.mnuDecompressSWC_Click @ 0x45E9E4 | 45EAAC    FC14                  CI2UI1
Form1.mnuDecompressSWC_Click @ 0x45E9E4 | 45EAC2    FC14                  CI2UI1

62 occurrence(s) in PDFStreamDumper.

Evidence and notes

Emitted by VB6 SP6 (P-code): yes. Minimal probe: probes\op\2_14_CI2UI1.

Handler: 0x661051E9, unique to this slot (real opcode #367).

Check of vb6_source_eq example: verified: compiles and emits this slot.

Corpus: 62 occurrence(s) in PDFStreamDumper_p.exe.

Example from the description
Dim a As Byte, b As Integer
b = CInt(a)

Description: draft, by claude-opus-4.7. Handler 0x661051E9, dispatch slot 0x66107564, modOpcodes line 831.

CI2Var

(0,0x55)emittedprimary of 2handler #83Conversionconfirmed_msdocs37 corpus hits
Implicitly coerce a Variant to Integer (assignment, typed argument or typed expression context).

Pops a value of type Variant, pushes the equivalent value as Integer.

Stack: [..., a:Var] -> [..., a':I2]

Numeric conversion uses VB6 banker's rounding (round-half-to-even) for fractional sources; out-of-range raises run-time error 6 (Overflow).

When the compiler emits it

Emitted when a Variant is used where a Integer is required without an explicit conversion function: x = v with x As Integer, a Variant passed to a ByVal Integer parameter, or a late-bound property result stored into a Integer. The explicit C...(v) function compiles to FnCIntVar (2,45) instead. Raises error 13 (Type mismatch) if the Variant cannot be converted.

VB6 source (verified: compiles to this slot)
Public Sub Main()
  Dim a As Variant, c As Integer
  c = a
End Sub
Encoding, evidence and notes
Encoding

Encoding: 55, then 0 operand byte(s); total instruction length 1 byte(s).
Operands: none. All inputs come from the evaluation stack or the frame.
Observed: 55 CI2Var

Examples
Form1.DoEventsFor @ 0x44256C | 442582    55                    CI2Var
Form1.Form_Load @ 0x479DC0 | 47A425    55                    CI2Var
Form1.Form_Load @ 0x479DC0 | 47A468    55                    CI2Var

37 occurrence(s) in PDFStreamDumper.

Evidence and notes

Emitted by VB6 SP6 (P-code): yes. Minimal probe: probes\op\0_55_CI2Var.

Handler: 0x66105216, shared by 2 dispatch slots (real opcode #83). This is the primary slot. Other slots: (2,1A) CI2Var.

Check of vb6_source_eq example: verified: compiles and emits this slot.

Corpus: 37 occurrence(s) in PDFStreamDumper_p.exe.

Example from the description
Dim v As Variant, x As Integer
v = 5
x = v
Slots sharing this handler

(2,0x1A) CI2Var

Description: draft, by claude-opus-5-5. Handler 0x66105216, dispatch slot 0x66106E68, modOpcodes line 793.

CI2Var

(2,0x1A)not emitteddup of (0,55)handler #83Conversionconfirmed_handler
(duplicate slot of (0,55) CI2Var) Implicitly coerce a Variant to Integer (assignment, typed argument or typed expression context).

Dispatch slot (2, 0x1A) runs the same MSVBVM60 handler as (0,55) CI2Var; runtime behaviour is identical.

Pops a value of type Variant, pushes the equivalent value as Integer.

Stack: [..., a:Var] -> [..., a':I2]

Numeric conversion uses VB6 banker's rounding (round-half-to-even) for fractional sources; out-of-range raises run-time error 6 (Overflow).

When the compiler emits it

Not emitted by VB6 SP6 in Phase 4 probes. Source that performs this operation (implicit Variant to Integer) compiles to (0,55) CI2Var instead. The slot is reachable only by hand-crafted or non-VB6-compiled p-code.

Encoding, evidence and notes
Encoding

Encoding: FC 1A (lead byte FC selects table 2), then 0 operand byte(s); total instruction length 2 byte(s).
Operands: none. All inputs come from the evaluation stack or the frame.

Evidence and notes

Emitted by VB6 SP6 (P-code): not observed in about 3,070 probe programs. The slot exists in the runtime's dispatch table, but no tested source construct makes the compiler emit it.

Handler: 0x66105216, shared by 2 dispatch slots (real opcode #83). This is a duplicate slot of (0,55) CI2Var. Other slots: (0,55) CI2Var.

Slots sharing this handler

(0,0x55) CI2Var

Description: draft, by claude-opus-5-5. Handler 0x66105216, dispatch slot 0x6610757C, modOpcodes line 836.

CI4Cy

(0,0xE9)emittedprimary of 2handler #230Conversionconfirmed_msdocs
Convert top-of-stack Currency to Long.

Pops a value of type Currency, pushes the equivalent value as Long.

Stack: [..., a:Cy] -> [..., a':I4]

Numeric conversion uses VB6 banker's rounding (round-half-to-even) for fractional sources; out-of-range raises run-time error 6 (Overflow).

When the compiler emits it

Emitted at the boundary where a Currency value must be assigned to or passed as Long.

VB6 source (verified: compiles to this slot)
Public Sub Main()
  Dim a As Currency, c As Long
  c = CLng(a)
End Sub
Encoding, evidence and notes
Encoding

Encoding: E9, then 0 operand byte(s); total instruction length 1 byte(s).
Operands: none. All inputs come from the evaluation stack or the frame.
Observed: E9 CI4Cy

Evidence and notes

Emitted by VB6 SP6 (P-code): yes. Minimal probe: probes\op\0_E9_CI4Cy.

Handler: 0x66109513, shared by 2 dispatch slots (real opcode #230). This is the primary slot. Other slots: (2,21) CI4Cy.

Check of vb6_source_eq example: verified: compiles and emits this slot.

Example from the description
Dim a As Currency, b As Long
b = CLng(a)
Slots sharing this handler

(2,0x21) CI4Cy

Description: draft, by claude-opus-4.7. Handler 0x66109513, dispatch slot 0x661070B8, modOpcodes line 800.

CI4Cy

(2,0x21)not emitteddup of (0,E9)handler #230Conversionconfirmed_handler
(alias) Convert top-of-stack Currency to Long.

Alias dispatch slot (2, 0x21) for the canonical CI4Cy at (0, 0xE9); semantics are identical.

Pops a value of type Currency, pushes the equivalent value as Long.

Stack: [..., a:Cy] -> [..., a':I4]

Numeric conversion uses VB6 banker's rounding (round-half-to-even) for fractional sources; out-of-range raises run-time error 6 (Overflow).

When the compiler emits it

Emitted at the boundary where a Currency value must be assigned to or passed as Long.

VB6 source (from description, not verified)
Dim a As Currency, b As Long
b = CLng(a)
Encoding, evidence and notes
Encoding

Encoding: FC 21 (lead byte FC selects table 2), then 0 operand byte(s); total instruction length 2 byte(s).
Operands: none. All inputs come from the evaluation stack or the frame.

Evidence and notes

Emitted by VB6 SP6 (P-code): not observed in about 3,070 probe programs. The slot exists in the runtime's dispatch table, but no tested source construct makes the compiler emit it.

Handler: 0x66109513, shared by 2 dispatch slots (real opcode #230). This is a duplicate slot of (0,E9) CI4Cy. Other slots: (0,E9) CI4Cy.

Check of vb6_source_eq example: compiles, but emits a different slot of the same handler. emits (0,E9) CI4Cy (same handler, different slot)

Slots sharing this handler

(0,0xE9) CI4Cy

Description: draft, by claude-opus-4.7. Handler 0x66109513, dispatch slot 0x66107598, modOpcodes line 842.

CI4R8

(0,0xE8)emittedprimary of 3handler #229Conversionconfirmed_msdocs18 corpus hits
Convert top-of-stack Double to Long.

Pops a value of type Double, pushes the equivalent value as Long.

Stack: [..., a:R8] -> [..., a':I4]

Numeric conversion uses VB6 banker's rounding (round-half-to-even) for fractional sources; out-of-range raises run-time error 6 (Overflow).

When the compiler emits it

Emitted at the boundary where a Double value must be assigned to or passed as Long.

VB6 source (verified: compiles to this slot)
Public Sub Main()
  Dim a As Date, c As Long
  c = CLng(a)
End Sub
Encoding, evidence and notes
Encoding

Encoding: E8, then 0 operand byte(s); total instruction length 1 byte(s).
Operands: none. All inputs come from the evaluation stack or the frame.
Observed: E8 CI4R8

Examples
Form1.cmdDecode_Click @ 0x4775C0 | 477E89    E8                    CI4R8
Form1.cmdDecode_Click @ 0x4775C0 | 477EB0    E8                    CI4R8
fso.Proc_4468A8 @ 0x4468A8 | 446913    E8                    CI4R8

18 occurrence(s) in PDFStreamDumper.

Evidence and notes

Emitted by VB6 SP6 (P-code): yes. Minimal probe: probes\op\0_E8_CI4R8.

Handler: 0x66105237, shared by 3 dispatch slots (real opcode #229). This is the primary slot. Other slots: (2,1F) CI4R8, (2,20) CI4R8.

Check of vb6_source_eq example: verified: compiles and emits this slot.

Corpus: 18 occurrence(s) in PDFStreamDumper_p.exe.

Example from the description
Dim a As Double, b As Long
b = CLng(a)
Slots sharing this handler

(2,0x1F) CI4R8, (2,0x20) CI4R8

Description: draft, by claude-opus-4.7. Handler 0x66105237, dispatch slot 0x661070B4, modOpcodes line 799.

CI4R8

(2,0x1F)not emitteddup of (0,E8)handler #229Conversionconfirmed_handler
(alias) Convert top-of-stack Double to Long.

Alias dispatch slot (2, 0x1F) for the canonical CI4R8 at (0, 0xE8); semantics are identical.

Pops a value of type Double, pushes the equivalent value as Long.

Stack: [..., a:R8] -> [..., a':I4]

Numeric conversion uses VB6 banker's rounding (round-half-to-even) for fractional sources; out-of-range raises run-time error 6 (Overflow).

When the compiler emits it

Emitted at the boundary where a Double value must be assigned to or passed as Long.

VB6 source (from description, not verified)
Dim a As Double, b As Long
b = CLng(a)
Encoding, evidence and notes
Encoding

Encoding: FC 1F (lead byte FC selects table 2), then 0 operand byte(s); total instruction length 2 byte(s).
Operands: none. All inputs come from the evaluation stack or the frame.

Evidence and notes

Emitted by VB6 SP6 (P-code): not observed in about 3,070 probe programs. The slot exists in the runtime's dispatch table, but no tested source construct makes the compiler emit it.

Handler: 0x66105237, shared by 3 dispatch slots (real opcode #229). This is a duplicate slot of (0,E8) CI4R8. Other slots: (0,E8) CI4R8, (2,20) CI4R8.

Check of vb6_source_eq example: compiles, but emits a different slot of the same handler. emits (0,E8) CI4R8 (same handler, different slot)

Slots sharing this handler

(0,0xE8) CI4R8, (2,0x20) CI4R8

Description: draft, by claude-opus-4.7. Handler 0x66105237, dispatch slot 0x66107590, modOpcodes line 840.

CI4R8

(2,0x20)not emitteddup of (0,E8)handler #229Conversionconfirmed_handler
(alias) Convert top-of-stack Double to Long.

Alias dispatch slot (2, 0x20) for the canonical CI4R8 at (0, 0xE8); semantics are identical.

Pops a value of type Double, pushes the equivalent value as Long.

Stack: [..., a:R8] -> [..., a':I4]

Numeric conversion uses VB6 banker's rounding (round-half-to-even) for fractional sources; out-of-range raises run-time error 6 (Overflow).

When the compiler emits it

Emitted at the boundary where a Double value must be assigned to or passed as Long.

VB6 source (from description, not verified)
Dim a As Double, b As Long
b = CLng(a)
Encoding, evidence and notes
Encoding

Encoding: FC 20 (lead byte FC selects table 2), then 0 operand byte(s); total instruction length 2 byte(s).
Operands: none. All inputs come from the evaluation stack or the frame.

Evidence and notes

Emitted by VB6 SP6 (P-code): not observed in about 3,070 probe programs. The slot exists in the runtime's dispatch table, but no tested source construct makes the compiler emit it.

Handler: 0x66105237, shared by 3 dispatch slots (real opcode #229). This is a duplicate slot of (0,E8) CI4R8. Other slots: (0,E8) CI4R8, (2,1F) CI4R8.

Check of vb6_source_eq example: compiles, but emits a different slot of the same handler. emits (0,E8) CI4R8 (same handler, different slot)

Slots sharing this handler

(0,0xE8) CI4R8, (2,0x1F) CI4R8

Description: draft, by claude-opus-4.7. Handler 0x66105237, dispatch slot 0x66107594, modOpcodes line 841.

CI4Str

(0,0x50)emittedprimary of 2handler #79Conversionconfirmed_msdocs15 corpus hits
Convert top-of-stack String to Long.

Pops a value of type String, pushes the equivalent value as Long.

Stack: [..., a:Str] -> [..., a':I4]

Numeric conversion uses VB6 banker's rounding (round-half-to-even) for fractional sources; out-of-range raises run-time error 6 (Overflow).

When the compiler emits it

Emitted at the boundary where a String value must be assigned to or passed as Long.

VB6 source (verified: compiles to this slot)
Public Sub Main()
  Dim a As String, c As Long
  c = CLng(a)
End Sub
Encoding, evidence and notes
Encoding

Encoding: 50, then 0 operand byte(s); total instruction length 1 byte(s).
Operands: none. All inputs come from the evaluation stack or the frame.
Observed: 50 CI4Str

Examples
Form1.mnuDebugBreakAtStream_Click @ 0x44802C | 448065    50                    CI4Str
Form2.mnuSc2ExeMain_Click @ 0x45400C | 4540CB    50                    CI4Str
modEscapes.Proc_460438 @ 0x460438 | 4604F5    50                    CI4Str

15 occurrence(s) in PDFStreamDumper.

Evidence and notes

Emitted by VB6 SP6 (P-code): yes. Minimal probe: probes\op\0_50_CI4Str.

Handler: 0x661053D2, shared by 2 dispatch slots (real opcode #79). This is the primary slot. Other slots: (2,23) CI4Str.

Check of vb6_source_eq example: verified: compiles and emits this slot.

Corpus: 15 occurrence(s) in PDFStreamDumper_p.exe.

Example from the description
Dim a As String, b As Long
b = CLng(a)
Slots sharing this handler

(2,0x23) CI4Str

Description: draft, by claude-opus-4.7. Handler 0x661053D2, dispatch slot 0x66106E54, modOpcodes line 791.

CI4Str

(2,0x23)not emitteddup of (0,50)handler #79Conversionconfirmed_handler
(alias) Convert top-of-stack String to Long.

Alias dispatch slot (2, 0x23) for the canonical CI4Str at (0, 0x50); semantics are identical.

Pops a value of type String, pushes the equivalent value as Long.

Stack: [..., a:Str] -> [..., a':I4]

Numeric conversion uses VB6 banker's rounding (round-half-to-even) for fractional sources; out-of-range raises run-time error 6 (Overflow).

When the compiler emits it

Emitted at the boundary where a String value must be assigned to or passed as Long.

VB6 source (from description, not verified)
Dim a As String, b As Long
b = CLng(a)
Encoding, evidence and notes
Encoding

Encoding: FC 23 (lead byte FC selects table 2), then 0 operand byte(s); total instruction length 2 byte(s).
Operands: none. All inputs come from the evaluation stack or the frame.

Evidence and notes

Emitted by VB6 SP6 (P-code): not observed in about 3,070 probe programs. The slot exists in the runtime's dispatch table, but no tested source construct makes the compiler emit it.

Handler: 0x661053D2, shared by 2 dispatch slots (real opcode #79). This is a duplicate slot of (0,50) CI4Str. Other slots: (0,50) CI4Str.

Check of vb6_source_eq example: compiles, but emits a different slot of the same handler. emits (0,50) CI4Str (same handler, different slot)

Slots sharing this handler

(0,0x50) CI4Str

Description: draft, by claude-opus-4.7. Handler 0x661053D2, dispatch slot 0x661075A0, modOpcodes line 844.

CI4UI1

(0,0xE7)emittedprimary of 3handler #228Conversionconfirmed_msdocs83 corpus hits
Convert top-of-stack Byte to Long.

Pops a value of type Byte, pushes the equivalent value as Long.

Stack: [..., a:UI1] -> [..., a':I4]

When the compiler emits it

Emitted at the boundary where a Byte value must be assigned to or passed as Long.

VB6 source (verified: compiles to this slot)
Public Sub Main()
  Dim n As Long
  n = DoEvents
End Sub
Encoding, evidence and notes
Encoding

Encoding: E7, then 0 operand byte(s); total instruction length 1 byte(s).
Operands: none. All inputs come from the evaluation stack or the frame.
Observed: E7 CI4UI1

Examples
Form1.LoadPlugins @ 0x4644FC | 464633    E7                    CI4UI1
Form1.LoadPlugins @ 0x4644FC | 464649    E7                    CI4UI1
Form1.LoadPlugins @ 0x4644FC | 464688    E7                    CI4UI1

83 occurrence(s) in PDFStreamDumper.

Evidence and notes

Emitted by VB6 SP6 (P-code): yes. Minimal probe: probes\op\0_E7_CI4UI1.

Handler: 0x66105228, shared by 3 dispatch slots (real opcode #228). This is the primary slot. Other slots: (2,1C) CI4UI1, (2,1D) CI4UI1.

Finding: Probe: emitted for CLng(<Integer>) and CLng(<Boolean>) (I2 to I4 sign extension). A Byte source is first widened with (2,0D). The UI1 in the name does not describe the source the compiler uses it for.

Check of vb6_source_eq example: verified: compiles and emits this slot.

Corpus: 83 occurrence(s) in PDFStreamDumper_p.exe.

Example from the description
Dim a As Byte, b As Long
b = CLng(a)
Slots sharing this handler

(2,0x1C) CI4UI1, (2,0x1D) CI4UI1

Description: draft, by claude-opus-4.7. Handler 0x66105228, dispatch slot 0x661070B0, modOpcodes line 798.

CI4UI1

(2,0x1C)not emitteddup of (0,E7)handler #228Conversionconfirmed_handler
(alias) Convert top-of-stack Byte to Long.

Alias dispatch slot (2, 0x1C) for the canonical CI4UI1 at (0, 0xE7); semantics are identical.

Pops a value of type Byte, pushes the equivalent value as Long.

Stack: [..., a:UI1] -> [..., a':I4]

When the compiler emits it

Emitted at the boundary where a Byte value must be assigned to or passed as Long.

VB6 source (from description, not verified)
Dim a As Byte, b As Long
b = CLng(a)
Encoding, evidence and notes
Encoding

Encoding: FC 1C (lead byte FC selects table 2), then 0 operand byte(s); total instruction length 2 byte(s).
Operands: none. All inputs come from the evaluation stack or the frame.

Evidence and notes

Emitted by VB6 SP6 (P-code): not observed in about 3,070 probe programs. The slot exists in the runtime's dispatch table, but no tested source construct makes the compiler emit it.

Handler: 0x66105228, shared by 3 dispatch slots (real opcode #228). This is a duplicate slot of (0,E7) CI4UI1. Other slots: (0,E7) CI4UI1, (2,1D) CI4UI1.

Check of vb6_source_eq example: compiles, but emits a different slot of the same handler. emits (0,E7) CI4UI1 (same handler, different slot)

Slots sharing this handler

(0,0xE7) CI4UI1, (2,0x1D) CI4UI1

Description: draft, by claude-opus-4.7. Handler 0x66105228, dispatch slot 0x66107584, modOpcodes line 838.

CI4UI1

(2,0x1D)not emitteddup of (0,E7)handler #228Conversionconfirmed_handler
(alias) Convert top-of-stack Byte to Long.

Alias dispatch slot (2, 0x1D) for the canonical CI4UI1 at (0, 0xE7); semantics are identical.

Pops a value of type Byte, pushes the equivalent value as Long.

Stack: [..., a:UI1] -> [..., a':I4]

When the compiler emits it

Emitted at the boundary where a Byte value must be assigned to or passed as Long.

VB6 source (from description, not verified)
Dim a As Byte, b As Long
b = CLng(a)
Encoding, evidence and notes
Encoding

Encoding: FC 1D (lead byte FC selects table 2), then 0 operand byte(s); total instruction length 2 byte(s).
Operands: none. All inputs come from the evaluation stack or the frame.

Evidence and notes

Emitted by VB6 SP6 (P-code): not observed in about 3,070 probe programs. The slot exists in the runtime's dispatch table, but no tested source construct makes the compiler emit it.

Handler: 0x66105228, shared by 3 dispatch slots (real opcode #228). This is a duplicate slot of (0,E7) CI4UI1. Other slots: (0,E7) CI4UI1, (2,1C) CI4UI1.

Check of vb6_source_eq example: compiles, but emits a different slot of the same handler. emits (0,E7) CI4UI1 (same handler, different slot)

Slots sharing this handler

(0,0xE7) CI4UI1, (2,0x1C) CI4UI1

Description: draft, by claude-opus-4.7. Handler 0x66105228, dispatch slot 0x66107588, modOpcodes line 839.

CI4Var

(2,0x22)emittedhandler #369Conversionconfirmed_msdocs217 corpus hits
Implicitly coerce a Variant to Long (assignment, typed argument or typed expression context).

Pops a value of type Variant, pushes the equivalent value as Long.

Stack: [..., a:Var] -> [..., a':I4]

Numeric conversion uses VB6 banker's rounding (round-half-to-even) for fractional sources; out-of-range raises run-time error 6 (Overflow).

When the compiler emits it

Emitted when a Variant is used where a Long is required without an explicit conversion function: x = v with x As Long, a Variant passed to a ByVal Long parameter, or a late-bound property result stored into a Long. The explicit C...(v) function compiles to FnCLngVar (2,46) instead. Raises error 13 (Type mismatch) if the Variant cannot be converted.

VB6 source (verified: compiles to this slot)
Public Sub Main()
  Dim a As Variant, c As Long
  c = a
End Sub
Encoding, evidence and notes
Encoding

Encoding: FC 22 (lead byte FC selects table 2), then 0 operand byte(s); total instruction length 2 byte(s).
Operands: none. All inputs come from the evaluation stack or the frame.
Observed: FC22 CI4Var

Examples
Form1.mnuManualEscape_Event_0 @ 0x467B64 | 467C5F    FC22                  CI4Var
Form1.mnuJavascriptUI_Click @ 0x45B844 | 45B94F    FC22                  CI4Var
modZLIB.Proc_4666C0 @ 0x4666C0 | 466956    FC22                  CI4Var

217 occurrence(s) in PDFStreamDumper.

Evidence and notes

Emitted by VB6 SP6 (P-code): yes. Minimal probe: probes\op\2_22_CI4Var.

Handler: 0x66105258, unique to this slot (real opcode #369).

Check of vb6_source_eq example: verified: compiles and emits this slot.

Corpus: 217 occurrence(s) in PDFStreamDumper_p.exe.

Example from the description
Dim v As Variant, x As Long
v = 5
x = v

Description: draft, by claude-opus-5-5. Handler 0x66105258, dispatch slot 0x6610759C, modOpcodes line 843.

CR4I4

(2,0x26)not emitteddup of (0,EC)handler #233Conversionconfirmed_msdocs
(duplicate slot of (0,EC) CR8I4) Convert top-of-stack Long to Double.

Dispatch slot (2, 0x26) runs the same MSVBVM60 handler as (0,EC) CR8I4; runtime behaviour is identical.

Pops a value of type Long, pushes the equivalent value as Double.

Stack: [..., a:I4] -> [..., a':R8]

Widening conversion; narrowing R8->R4 may lose precision and can saturate to +/-Inf.

When the compiler emits it

Not emitted by VB6 SP6 in Phase 4 probes. Source that performs this operation (Long to floating point) compiles to (0,EC) CR8I4 instead. The slot is reachable only by hand-crafted or non-VB6-compiled p-code.

Encoding, evidence and notes
Encoding

Encoding: FC 26 (lead byte FC selects table 2), then 0 operand byte(s); total instruction length 2 byte(s).
Operands: none. All inputs come from the evaluation stack or the frame.

Evidence and notes

Emitted by VB6 SP6 (P-code): not observed in about 3,070 probe programs. The slot exists in the runtime's dispatch table, but no tested source construct makes the compiler emit it.

Handler: 0x6610527A, shared by 3 dispatch slots (real opcode #233). This is a duplicate slot of (0,EC) CR8I4. Other slots: (0,EC) CR8I4, (2,2E) CR4I4.

Slots sharing this handler

(0,0xEC) CR8I4, (2,0x2E) CR4I4

Description: draft, by claude-opus-5-5. Handler 0x6610527A, dispatch slot 0x661075AC, modOpcodes line 851.

CR4I4

(2,0x2E)not emitteddup of (0,EC)handler #233Conversionconfirmed_handler
(duplicate slot of (0,EC) CR8I4) Convert top-of-stack Long to Double.

Dispatch slot (2, 0x2E) runs the same MSVBVM60 handler as (0,EC) CR8I4; runtime behaviour is identical.

Pops a value of type Long, pushes the equivalent value as Double.

Stack: [..., a:I4] -> [..., a':R8]

Widening conversion; narrowing R8->R4 may lose precision and can saturate to +/-Inf.

When the compiler emits it

Not emitted by VB6 SP6 in Phase 4 probes. Source that performs this operation (Long to floating point) compiles to (0,EC) CR8I4 instead. The slot is reachable only by hand-crafted or non-VB6-compiled p-code.

Encoding, evidence and notes
Encoding

Encoding: FC 2E (lead byte FC selects table 2), then 0 operand byte(s); total instruction length 2 byte(s).
Operands: none. All inputs come from the evaluation stack or the frame.

Evidence and notes

Emitted by VB6 SP6 (P-code): not observed in about 3,070 probe programs. The slot exists in the runtime's dispatch table, but no tested source construct makes the compiler emit it.

Handler: 0x6610527A, shared by 3 dispatch slots (real opcode #233). This is a duplicate slot of (0,EC) CR8I4. Other slots: (0,EC) CR8I4, (2,26) CR4I4.

Slots sharing this handler

(0,0xEC) CR8I4, (2,0x26) CR4I4

Description: draft, by claude-opus-5-5. Handler 0x6610527A, dispatch slot 0x661075CC, modOpcodes line 857.

CR4R4

(0,0xEA)emittedprimary of 3handler #231Conversionconfirmed_msdocs2 corpus hits
Round the floating-point value on the FPU stack to Single precision.

Rounds ST0 to 32-bit single precision (store and reload as a 4-byte float) and leaves it on the FPU stack.

Stack: [..., x:R8 (ST0)] -> [..., x':R4 (ST0)]

When the compiler emits it

Emitted when a Double-typed value (a Double literal or a non-HRESULT method returning float) meets a Single operand: the compiler rounds the Double side to Single precision before comparing. Probe: If s > 2.5 Then, with s As Single. Explicit CSng(<Double>) uses CSng (2,40) instead.

VB6 source (verified: compiles to this slot)
Public Sub Main()
  Dim a As Single, n As Long
  If a > 2.5 Then n = 1
End Sub
Encoding, evidence and notes
Encoding

Encoding: EA, then 0 operand byte(s); total instruction length 1 byte(s).
Operands: none. All inputs come from the evaluation stack or the frame.
Observed: EA CR4R4

Examples
Form2.Form_Resize @ 0x46537C | 465606    EA                    CR4R4
Form2.Form_Resize @ 0x46537C | 46568D    EA                    CR4R4

2 occurrence(s) in PDFStreamDumper.

Evidence and notes

Emitted by VB6 SP6 (P-code): yes. Minimal probe: probes\op\0_EA_CR4R4.

Handler: 0x6610528A, shared by 3 dispatch slots (real opcode #231). This is the primary slot. Other slots: (2,27) CR4R8, (2,28) CR4R8.

Check of vb6_source_eq example: verified: compiles and emits this slot.

Corpus: 2 occurrence(s) in PDFStreamDumper_p.exe.

Example from the description
Dim s As Single, n As Long
s = 1
If s > 2.5 Then n = 1
Slots sharing this handler

(2,0x27) CR4R8, (2,0x28) CR4R8

Description: draft, by claude-opus-5-5. Handler 0x6610528A, dispatch slot 0x661070BC, modOpcodes line 801.

CR4R8

(2,0x27)not emitteddup of (0,EA)handler #231Conversionconfirmed_msdocs
(duplicate slot of (0,EA) CR4R4) Round the floating-point value on the FPU stack to Single precision.

Dispatch slot (2, 0x27) runs the same MSVBVM60 handler as (0,EA) CR4R4; runtime behaviour is identical.

Rounds ST0 to 32-bit single precision (store and reload as a 4-byte float) and leaves it on the FPU stack.

Stack: [..., x:R8 (ST0)] -> [..., x':R4 (ST0)]

When the compiler emits it

Not emitted by VB6 SP6 in Phase 4 probes. Source that performs this operation (rounding to Single (CSng(Double) uses (2,40))) compiles to (0,EA) CR4R4 instead. The slot is reachable only by hand-crafted or non-VB6-compiled p-code.

Encoding, evidence and notes
Encoding

Encoding: FC 27 (lead byte FC selects table 2), then 0 operand byte(s); total instruction length 2 byte(s).
Operands: none. All inputs come from the evaluation stack or the frame.

Evidence and notes

Emitted by VB6 SP6 (P-code): not observed in about 3,070 probe programs. The slot exists in the runtime's dispatch table, but no tested source construct makes the compiler emit it.

Handler: 0x6610528A, shared by 3 dispatch slots (real opcode #231). This is a duplicate slot of (0,EA) CR4R4. Other slots: (0,EA) CR4R4, (2,28) CR4R8.

Slots sharing this handler

(0,0xEA) CR4R4, (2,0x28) CR4R8

Description: draft, by claude-opus-5-5. Handler 0x6610528A, dispatch slot 0x661075B0, modOpcodes line 852.

CR4R8

(2,0x28)not emitteddup of (0,EA)handler #231Conversionconfirmed_handler
(duplicate slot of (0,EA) CR4R4) Round the floating-point value on the FPU stack to Single precision.

Dispatch slot (2, 0x28) runs the same MSVBVM60 handler as (0,EA) CR4R4; runtime behaviour is identical.

Rounds ST0 to 32-bit single precision (store and reload as a 4-byte float) and leaves it on the FPU stack.

Stack: [..., x:R8 (ST0)] -> [..., x':R4 (ST0)]

When the compiler emits it

Not emitted by VB6 SP6 in Phase 4 probes. Source that performs this operation (rounding to Single (CSng(Double) uses (2,40))) compiles to (0,EA) CR4R4 instead. The slot is reachable only by hand-crafted or non-VB6-compiled p-code.

Encoding, evidence and notes
Encoding

Encoding: FC 28 (lead byte FC selects table 2), then 0 operand byte(s); total instruction length 2 byte(s).
Operands: none. All inputs come from the evaluation stack or the frame.

Evidence and notes

Emitted by VB6 SP6 (P-code): not observed in about 3,070 probe programs. The slot exists in the runtime's dispatch table, but no tested source construct makes the compiler emit it.

Handler: 0x6610528A, shared by 3 dispatch slots (real opcode #231). This is a duplicate slot of (0,EA) CR4R4. Other slots: (0,EA) CR4R4, (2,27) CR4R8.

Slots sharing this handler

(0,0xEA) CR4R4, (2,0x27) CR4R8

Description: draft, by claude-opus-5-5. Handler 0x6610528A, dispatch slot 0x661075B4, modOpcodes line 853.

CR4Str

(2,0x2B)emittedprimary of 2handler #370Conversionconfirmed_msdocs
Convert top-of-stack String to Single.

Pops a value of type String, pushes the equivalent value as Single.

Stack: [..., a:Str] -> [..., a':R4]

Widening conversion; narrowing R8->R4 may lose precision and can saturate to +/-Inf.

When the compiler emits it

Emitted at the boundary where a String value must be assigned to or passed as Single.

VB6 source (verified: compiles to this slot)
Public Sub Main()
  Dim a As String, c As Single
  c = a
End Sub
Encoding, evidence and notes
Encoding

Encoding: FC 2B (lead byte FC selects table 2), then 0 operand byte(s); total instruction length 2 byte(s).
Operands: none. All inputs come from the evaluation stack or the frame.
Observed: FC2B CR4Str

Evidence and notes

Emitted by VB6 SP6 (P-code): yes. Minimal probe: probes\op\2_2B_CR4Str.

Handler: 0x661053E4, shared by 2 dispatch slots (real opcode #370). This is the primary slot. Other slots: (2,43) FnCSngStr.

Compile-time slot selection: the compiler picks different slots of this handler for different source types:

  • (2,2B): Dim a As String, c As Single : c = a
  • (2,43): Dim a As String, c As Single : c = CSng(a)

Check of vb6_source_eq example: compiles, but emits a different slot of the same handler. emits (2,43) FnCSngStr (same handler, different slot)

Example from the description
Dim a As String, b As Single
b = CSng(a)
Slots sharing this handler

(2,0x43) FnCSngStr

Description: draft, by claude-opus-4.7. Handler 0x661053E4, dispatch slot 0x661075C0, modOpcodes line 856.

CR4Var

(0,0x42)emitteddup of (2,2A)handler #65Conversionconfirmed_msdocs
Implicitly coerce a Variant to Double (the slot is named CR4Var, but the compiler uses it for Double targets).

Pops a Variant, converts it to a floating-point value and leaves it on the FPU stack (ST0). Raises error 13 if the Variant cannot be converted.

Stack: [..., v:Var] -> [..., r:R8 (ST0)]

When the compiler emits it

Probe evidence: d = v with d As Double emits this slot (0,42), while s = v with s As Single emits (2,2A), which is named CR8Var. The names appear swapped. Both slots share one handler, which converts the Variant onto the FPU stack; the target type only decides the following store (FStFPR8 vs FStFPR4). Explicit CDbl(v) compiles to FnCDblVar (2,48).

VB6 source (verified: compiles to this slot)
Public Sub Main()
  Dim a As Variant, c As Double
  c = a
End Sub
Encoding, evidence and notes
Encoding

Encoding: 42, then 0 operand byte(s); total instruction length 1 byte(s).
Operands: none. All inputs come from the evaluation stack or the frame.
Observed: 42 CR4Var

Evidence and notes

Emitted by VB6 SP6 (P-code): yes. Minimal probe: probes\op\0_42_CR4Var.

Handler: 0x661052C6, shared by 3 dispatch slots (real opcode #65). This is a duplicate slot of (2,2A) CR8Var. Other slots: (2,2A) CR8Var, (2,32) CR8Var.

Compile-time slot selection: the compiler picks different slots of this handler for different source types:

  • (0,42): Dim a As Variant, c As Double : c = a
  • (2,2A): Dim a As Variant, c As Single : c = a

Check of vb6_source_eq example: verified: compiles and emits this slot.

Example from the description
Dim v As Variant, d As Double
v = 5
d = v
Slots sharing this handler

(2,0x2A) CR8Var, (2,0x32) CR8Var

Description: draft, by claude-opus-5-5. Handler 0x661052C6, dispatch slot 0x66106E1C, modOpcodes line 887.

CR8Cy

(0,0xEE)emittedprimary of 3handler #235Conversionconfirmed_msdocs
Convert a Currency on the evaluation stack to floating point (FPU).

Pops the 8-byte scaled Currency, divides by 10,000 and pushes the result onto the FPU stack.

Stack: [..., c:Cy] -> [..., r:R8 (ST0)]

When the compiler emits it

Emitted wherever a Currency value enters a floating-point context: assigning Currency to Single/Double/Date, Currency / and ^, and Currency mixed with Single/Double in *. Explicit CDbl(<Currency>) compiles to FnCDblCy (2,39).

VB6 source (verified: compiles to this slot)
Public Sub Main()
  Dim a As Currency, c As Single
  c = a
End Sub
Encoding, evidence and notes
Encoding

Encoding: EE, then 0 operand byte(s); total instruction length 1 byte(s).
Operands: none. All inputs come from the evaluation stack or the frame.
Observed: EE CR8Cy

Evidence and notes

Emitted by VB6 SP6 (P-code): yes. Minimal probe: probes\op\0_EE_CR8Cy.

Handler: 0x66109524, shared by 3 dispatch slots (real opcode #235). This is the primary slot. Other slots: (2,29) CR8Cy, (2,31) CR8Cy.

Check of vb6_source_eq example: verified: compiles and emits this slot.

Example from the description
Dim c As Currency, d As Double
c = 1.5@
d = c
Slots sharing this handler

(2,0x29) CR8Cy, (2,0x31) CR8Cy

Description: draft, by claude-opus-5-5. Handler 0x66109524, dispatch slot 0x661070CC, modOpcodes line 805.

CR8Cy

(2,0x29)not emitteddup of (0,EE)handler #235Conversionconfirmed_handler
(duplicate slot of (0,EE) CR8Cy) Convert a Currency on the evaluation stack to floating point (FPU).

Dispatch slot (2, 0x29) runs the same MSVBVM60 handler as (0,EE) CR8Cy; runtime behaviour is identical.

Pops the 8-byte scaled Currency, divides by 10,000 and pushes the result onto the FPU stack.

Stack: [..., c:Cy] -> [..., r:R8 (ST0)]

When the compiler emits it

Not emitted by VB6 SP6 in Phase 4 probes. Source that performs this operation (Currency to floating point) compiles to (0,EE) CR8Cy instead. The slot is reachable only by hand-crafted or non-VB6-compiled p-code.

Encoding, evidence and notes
Encoding

Encoding: FC 29 (lead byte FC selects table 2), then 0 operand byte(s); total instruction length 2 byte(s).
Operands: none. All inputs come from the evaluation stack or the frame.

Evidence and notes

Emitted by VB6 SP6 (P-code): not observed in about 3,070 probe programs. The slot exists in the runtime's dispatch table, but no tested source construct makes the compiler emit it.

Handler: 0x66109524, shared by 3 dispatch slots (real opcode #235). This is a duplicate slot of (0,EE) CR8Cy. Other slots: (0,EE) CR8Cy, (2,31) CR8Cy.

Slots sharing this handler

(0,0xEE) CR8Cy, (2,0x31) CR8Cy

Description: draft, by claude-opus-5-5. Handler 0x66109524, dispatch slot 0x661075B8, modOpcodes line 854.

CR8Cy

(2,0x31)not emitteddup of (0,EE)handler #235Conversionconfirmed_handler
(duplicate slot of (0,EE) CR8Cy) Convert a Currency on the evaluation stack to floating point (FPU).

Dispatch slot (2, 0x31) runs the same MSVBVM60 handler as (0,EE) CR8Cy; runtime behaviour is identical.

Pops the 8-byte scaled Currency, divides by 10,000 and pushes the result onto the FPU stack.

Stack: [..., c:Cy] -> [..., r:R8 (ST0)]

When the compiler emits it

Not emitted by VB6 SP6 in Phase 4 probes. Source that performs this operation (Currency to floating point) compiles to (0,EE) CR8Cy instead. The slot is reachable only by hand-crafted or non-VB6-compiled p-code.

Encoding, evidence and notes
Encoding

Encoding: FC 31 (lead byte FC selects table 2), then 0 operand byte(s); total instruction length 2 byte(s).
Operands: none. All inputs come from the evaluation stack or the frame.

Evidence and notes

Emitted by VB6 SP6 (P-code): not observed in about 3,070 probe programs. The slot exists in the runtime's dispatch table, but no tested source construct makes the compiler emit it.

Handler: 0x66109524, shared by 3 dispatch slots (real opcode #235). This is a duplicate slot of (0,EE) CR8Cy. Other slots: (0,EE) CR8Cy, (2,29) CR8Cy.

Slots sharing this handler

(0,0xEE) CR8Cy, (2,0x29) CR8Cy

Description: draft, by claude-opus-5-5. Handler 0x66109524, dispatch slot 0x661075D8, modOpcodes line 860.

CR8I2

(0,0xEB)emittedprimary of 7handler #232Conversionconfirmed_msdocs117 corpus hits
Convert top-of-stack Integer to Double.

Pops a value of type Integer, pushes the equivalent value as Double.

Stack: [..., a:I2] -> [..., a':R8]

Widening conversion; narrowing R8->R4 may lose precision and can saturate to +/-Inf.

When the compiler emits it

Emitted at the boundary where a Integer value must be assigned to or passed as Double.

VB6 source (verified: compiles to this slot)
Public Sub Main()
  Dim a As Boolean, c As Double
  c = CDbl(a)
End Sub
Encoding, evidence and notes
Encoding

Encoding: EB, then 0 operand byte(s); total instruction length 1 byte(s).
Operands: none. All inputs come from the evaluation stack or the frame.
Observed: EB CR8I2

Examples
Form1.cmdAbortProcessing_Click @ 0x441954 | 441990    EB                    CR8I2
Form1.Form_Resize @ 0x474F3C | 474FA0    EB                    CR8I2
Form1.Form_Resize @ 0x474F3C | 474FAA    EB                    CR8I2

117 occurrence(s) in PDFStreamDumper.

Evidence and notes

Emitted by VB6 SP6 (P-code): yes. Minimal probe: probes\op\0_EB_CR8I2.

Handler: 0x6610526A, shared by 7 dispatch slots (real opcode #232). This is the primary slot. Other slots: (2,24) FnCSngI2, (2,25) FnCSngI2, (2,2C) FnCSngI2, (2,2D) FnCSngI2, (2,3C) FnCSngI2, (2,3D) FnCSngI2.

Check of vb6_source_eq example: verified: compiles and emits this slot.

Corpus: 117 occurrence(s) in PDFStreamDumper_p.exe.

Example from the description
Dim a As Integer, b As Double
b = CDbl(a)
Slots sharing this handler

(2,0x24) FnCSngI2, (2,0x25) FnCSngI2, (2,0x2C) FnCSngI2, (2,0x2D) FnCSngI2, (2,0x3C) FnCSngI2, (2,0x3D) FnCSngI2

Description: draft, by claude-opus-4.7. Handler 0x6610526A, dispatch slot 0x661070C0, modOpcodes line 802.

CR8I4

(0,0xEC)emittedprimary of 3handler #233Conversionconfirmed_msdocs21 corpus hits
Convert top-of-stack Long to Double.

Pops a value of type Long, pushes the equivalent value as Double.

Stack: [..., a:I4] -> [..., a':R8]

Widening conversion; narrowing R8->R4 may lose precision and can saturate to +/-Inf.

When the compiler emits it

Emitted at the boundary where a Long value must be assigned to or passed as Double.

VB6 source (verified: compiles to this slot)
Public Sub Main()
  Dim a As Long, c As Double
  c = CDbl(a)
End Sub
Encoding, evidence and notes
Encoding

Encoding: EC, then 0 operand byte(s); total instruction length 1 byte(s).
Operands: none. All inputs come from the evaluation stack or the frame.
Observed: EC CR8I4

Examples
Form1.cmdDecode_Click @ 0x4775C0 | 477E83    EC                    CR8I4
Form1.cmdDecode_Click @ 0x4775C0 | 477EAA    EC                    CR8I4
Form1.cmdDecode_Click @ 0x4775C0 | 477EE3    EC                    CR8I4

21 occurrence(s) in PDFStreamDumper.

Evidence and notes

Emitted by VB6 SP6 (P-code): yes. Minimal probe: probes\op\0_EC_CR8I4.

Handler: 0x6610527A, shared by 3 dispatch slots (real opcode #233). This is the primary slot. Other slots: (2,26) CR4I4, (2,2E) CR4I4.

Check of vb6_source_eq example: verified: compiles and emits this slot.

Corpus: 21 occurrence(s) in PDFStreamDumper_p.exe.

Example from the description
Dim a As Long, b As Double
b = CDbl(a)
Slots sharing this handler

(2,0x26) CR4I4, (2,0x2E) CR4I4

Description: draft, by claude-opus-4.7. Handler 0x6610527A, dispatch slot 0x661070C4, modOpcodes line 803.

CR8R4

(2,0x2F)not emitteddup of (0,ED)handler #234Conversionconfirmed_msdocs
(duplicate slot of (0,ED) CR8R8) Retype the FPU value as Double (used for Date to Double).

Dispatch slot (2, 0x2F) runs the same MSVBVM60 handler as (0,ED) CR8R8; runtime behaviour is identical.

Leaves the floating-point value in ST0 as a 64-bit double (no numeric change for Date/Double sources).

Stack: [..., x (ST0)] -> [..., x:R8 (ST0)]

When the compiler emits it

Not emitted by VB6 SP6 in Phase 4 probes. Source that performs this operation (FPU retype to Double) compiles to (0,ED) CR8R8 instead. The slot is reachable only by hand-crafted or non-VB6-compiled p-code.

Encoding, evidence and notes
Encoding

Encoding: FC 2F (lead byte FC selects table 2), then 0 operand byte(s); total instruction length 2 byte(s).
Operands: none. All inputs come from the evaluation stack or the frame.

Evidence and notes

Emitted by VB6 SP6 (P-code): not observed in about 3,070 probe programs. The slot exists in the runtime's dispatch table, but no tested source construct makes the compiler emit it.

Handler: 0x661052A8, shared by 3 dispatch slots (real opcode #234). This is a duplicate slot of (0,ED) CR8R8. Other slots: (0,ED) CR8R8, (2,30) CR8R4.

Slots sharing this handler

(0,0xED) CR8R8, (2,0x30) CR8R4

Description: draft, by claude-opus-5-5. Handler 0x661052A8, dispatch slot 0x661075D0, modOpcodes line 858.

CR8R4

(2,0x30)not emitteddup of (0,ED)handler #234Conversionconfirmed_handler
(duplicate slot of (0,ED) CR8R8) Retype the FPU value as Double (used for Date to Double).

Dispatch slot (2, 0x30) runs the same MSVBVM60 handler as (0,ED) CR8R8; runtime behaviour is identical.

Leaves the floating-point value in ST0 as a 64-bit double (no numeric change for Date/Double sources).

Stack: [..., x (ST0)] -> [..., x:R8 (ST0)]

When the compiler emits it

Not emitted by VB6 SP6 in Phase 4 probes. Source that performs this operation (FPU retype to Double) compiles to (0,ED) CR8R8 instead. The slot is reachable only by hand-crafted or non-VB6-compiled p-code.

Encoding, evidence and notes
Encoding

Encoding: FC 30 (lead byte FC selects table 2), then 0 operand byte(s); total instruction length 2 byte(s).
Operands: none. All inputs come from the evaluation stack or the frame.

Evidence and notes

Emitted by VB6 SP6 (P-code): not observed in about 3,070 probe programs. The slot exists in the runtime's dispatch table, but no tested source construct makes the compiler emit it.

Handler: 0x661052A8, shared by 3 dispatch slots (real opcode #234). This is a duplicate slot of (0,ED) CR8R8. Other slots: (0,ED) CR8R8, (2,2F) CR8R4.

Slots sharing this handler

(0,0xED) CR8R8, (2,0x2F) CR8R4

Description: draft, by claude-opus-5-5. Handler 0x661052A8, dispatch slot 0x661075D4, modOpcodes line 859.

CR8R8

(0,0xED)emittedprimary of 3handler #234Conversionconfirmed_msdocs2 corpus hits
Retype the FPU value as Double (used for Date to Double).

Leaves the floating-point value in ST0 as a 64-bit double (no numeric change for Date/Double sources).

Stack: [..., x (ST0)] -> [..., x:R8 (ST0)]

When the compiler emits it

Emitted for CDbl(<Date>), where the bits are already a double and only the static type changes, and when a Single is compared with a Long literal that was converted to floating point. Explicit CDbl(<Double>) emits nothing.

VB6 source (verified: compiles to this slot)
Public Sub Main()
  Dim a As Date, c As Double
  c = CDbl(a)
End Sub
Encoding, evidence and notes
Encoding

Encoding: ED, then 0 operand byte(s); total instruction length 1 byte(s).
Operands: none. All inputs come from the evaluation stack or the frame.
Observed: ED CR8R8

Examples
Form2.Proc_4429BC @ 0x4429BC | 4429FB    ED                    CR8R8
Form2.Proc_4429BC @ 0x4429BC | 442A0C    ED                    CR8R8

2 occurrence(s) in PDFStreamDumper.

Evidence and notes

Emitted by VB6 SP6 (P-code): yes. Minimal probe: probes\op\0_ED_CR8R8.

Handler: 0x661052A8, shared by 3 dispatch slots (real opcode #234). This is the primary slot. Other slots: (2,2F) CR8R4, (2,30) CR8R4.

Check of vb6_source_eq example: verified: compiles and emits this slot.

Corpus: 2 occurrence(s) in PDFStreamDumper_p.exe.

Example from the description
Dim dt As Date, d As Double
dt = Now
d = CDbl(dt)
Slots sharing this handler

(2,0x2F) CR8R4, (2,0x30) CR8R4

Description: draft, by claude-opus-5-5. Handler 0x661052A8, dispatch slot 0x661070C8, modOpcodes line 804.

CR8Str

(2,0x33)emittedhandler #371Conversionconfirmed_msdocs1 corpus hits
Convert top-of-stack String to Double.

Pops a value of type String, pushes the equivalent value as Double.

Stack: [..., a:Str] -> [..., a':R8]

Widening conversion; narrowing R8->R4 may lose precision and can saturate to +/-Inf.

When the compiler emits it

Emitted at the boundary where a String value must be assigned to or passed as Double.

VB6 source (verified: compiles to this slot)
Public Sub Main()
  Dim a As String, c As Double
  c = CDbl(a)
End Sub
Encoding, evidence and notes
Encoding

Encoding: FC 33 (lead byte FC selects table 2), then 0 operand byte(s); total instruction length 2 byte(s).
Operands: none. All inputs come from the evaluation stack or the frame.
Observed: FC33 CR8Str

Examples
Form2.mnuMain_Event_0 @ 0x45F55C | 45F76C    FC33                  CR8Str

1 occurrence(s) in PDFStreamDumper.

Evidence and notes

Emitted by VB6 SP6 (P-code): yes. Minimal probe: probes\op\2_33_CR8Str.

Handler: 0x661096E1, unique to this slot (real opcode #371).

Check of vb6_source_eq example: verified: compiles and emits this slot.

Corpus: 1 occurrence(s) in PDFStreamDumper_p.exe.

Example from the description
Dim a As String, b As Double
b = CDbl(a)

Description: draft, by claude-opus-4.7. Handler 0x661096E1, dispatch slot 0x661075E0, modOpcodes line 862.

CR8Var

(2,0x2A)emittedprimary of 3handler #65Conversionconfirmed_msdocs70 corpus hits
Implicitly coerce a Variant to Single (the slot is named CR8Var, but the compiler uses it for Single targets).

Pops a Variant, converts it to a floating-point value on the FPU stack (ST0). Raises error 13 if the Variant cannot be converted.

Stack: [..., v:Var] -> [..., r:R8 (ST0)]

When the compiler emits it

Probe evidence: s = v with s As Single emits this slot (2,2A); d = v with d As Double emits (0,42), named CR4Var. Same handler; the result goes to the FPU and the following FStFPR4 rounds it to Single. Explicit CSng(v) compiles to FnCSngVar (2,42).

VB6 source (verified: compiles to this slot)
Public Sub Main()
  Dim a As Variant, c As Single
  c = a
End Sub
Encoding, evidence and notes
Encoding

Encoding: FC 2A (lead byte FC selects table 2), then 0 operand byte(s); total instruction length 2 byte(s).
Operands: none. All inputs come from the evaluation stack or the frame.
Observed: FC2A CR8Var

Examples
Form1.Form_Resize @ 0x474F3C | 475017    FC2A                  CR8Var
Form1.Form_Resize @ 0x474F3C | 4750B1    FC2A                  CR8Var
Form1.Form_Resize @ 0x474F3C | 475101    FC2A                  CR8Var

70 occurrence(s) in PDFStreamDumper.

Evidence and notes

Emitted by VB6 SP6 (P-code): yes. Minimal probe: probes\op\2_2A_CR8Var.

Handler: 0x661052C6, shared by 3 dispatch slots (real opcode #65). This is the primary slot. Other slots: (0,42) CR4Var, (2,32) CR8Var.

Compile-time slot selection: the compiler picks different slots of this handler for different source types:

  • (0,42): Dim a As Variant, c As Double : c = a
  • (2,2A): Dim a As Variant, c As Single : c = a

Check of vb6_source_eq example: verified: compiles and emits this slot.

Corpus: 70 occurrence(s) in PDFStreamDumper_p.exe.

Example from the description
Dim v As Variant, s As Single
v = 5
s = v
Slots sharing this handler

(0,0x42) CR4Var, (2,0x32) CR8Var

Description: draft, by claude-opus-5-5. Handler 0x661052C6, dispatch slot 0x661075BC, modOpcodes line 855.

CR8Var

(2,0x32)not emitteddup of (2,2A)handler #65Conversionconfirmed_handler
(duplicate slot of (2,2A) CR8Var) Implicitly coerce a Variant to Single (the slot is named CR8Var, but the compiler uses it for Single targets).

Dispatch slot (2, 0x32) runs the same MSVBVM60 handler as (2,2A) CR8Var; runtime behaviour is identical.

Pops a Variant, converts it to a floating-point value on the FPU stack (ST0). Raises error 13 if the Variant cannot be converted.

Stack: [..., v:Var] -> [..., r:R8 (ST0)]

When the compiler emits it

Not emitted by VB6 SP6 in Phase 4 probes. Source that performs this operation (implicit Variant to Single) compiles to (2,2A) CR8Var instead. The slot is reachable only by hand-crafted or non-VB6-compiled p-code.

Encoding, evidence and notes
Encoding

Encoding: FC 32 (lead byte FC selects table 2), then 0 operand byte(s); total instruction length 2 byte(s).
Operands: none. All inputs come from the evaluation stack or the frame.

Evidence and notes

Emitted by VB6 SP6 (P-code): not observed in about 3,070 probe programs. The slot exists in the runtime's dispatch table, but no tested source construct makes the compiler emit it.

Handler: 0x661052C6, shared by 3 dispatch slots (real opcode #65). This is a duplicate slot of (2,2A) CR8Var. Other slots: (0,42) CR4Var, (2,2A) CR8Var.

Compile-time slot selection: the compiler picks different slots of this handler for different source types:

  • (0,42): Dim a As Variant, c As Double : c = a
  • (2,2A): Dim a As Variant, c As Single : c = a
Slots sharing this handler

(0,0x42) CR4Var, (2,0x2A) CR8Var

Description: draft, by claude-opus-5-5. Handler 0x661052C6, dispatch slot 0x661075DC, modOpcodes line 861.

CRec2Ansi

(0,0x1F)emittedprimary of 2handler #30UDT / recordinferred_corpus6 corpus hits
Convert top-of-stack 2Ansi to Rec.

Pops a value of type 2Ansi, pushes the equivalent value as Rec.

Stack: [..., a:2Ansi] -> [..., a':Rec]

When the compiler emits it

Emitted at the boundary where a 2Ansi value must be assigned to or passed as Rec.

VB6 source (verified: compiles to this slot)
Private Type TR
  s As String
End Type
Private Declare Sub P Lib "x.dll" (r As Any)

Public Sub Main()
  Dim r As TR
  P r
End Sub
Encoding, evidence and notes
Encoding

Encoding: 1F, then 2 operand byte(s); total instruction length 3 byte(s).
vbdec template: pool:%2
Operands:

  1. %2 (pool): immediate_word, 2 byte(s). 16-bit immediate.

Observed: 1F 0000 CRec2Ansi pool:0x0

Examples
clsCmnDlg.OpenDialog @ 0x457B6C | 457C13    1F 1700               CRec2Ansi pool:0x17
clsCmnDlg.SaveDialog @ 0x45F270 | 45F35F    1F 1700               CRec2Ansi pool:0x17
clsCmnDlg.ColorDialog @ 0x453728 | 453799    1F 2D00               CRec2Ansi pool:0x2D

6 occurrence(s) in PDFStreamDumper.

Evidence and notes

Emitted by VB6 SP6 (P-code): yes. Minimal probe: probes\op\0_1F_CRec2Ansi.

Handler: 0x661099AD, shared by 2 dispatch slots (real opcode #30). This is the primary slot. Other slots: (2,5E) CRecUni2Ansi.

Corpus: 6 occurrence(s) in PDFStreamDumper_p.exe.

Slots sharing this handler

(2,0x5E) CRecUni2Ansi

Description: draft, by claude-opus-4.7. Handler 0x661099AD, dispatch slot 0x66106D90, modOpcodes line 913.

CRec2Uni

(0,0x20)emittedprimary of 2handler #31UDT / recordinferred_corpus6 corpus hits
Convert top-of-stack 2Uni to Rec.

Pops a value of type 2Uni, pushes the equivalent value as Rec.

Stack: [..., a:2Uni] -> [..., a':Rec]

When the compiler emits it

Emitted at the boundary where a 2Uni value must be assigned to or passed as Rec.

VB6 source (verified: compiles to this slot)
Private Type TR
  s As String
End Type
Private Declare Sub P Lib "x.dll" (r As Any)

Public Sub Main()
  Dim r As TR
  P r
End Sub
Encoding, evidence and notes
Encoding

Encoding: 20, then 2 operand byte(s); total instruction length 3 byte(s).
vbdec template: pool:%2
Operands:

  1. %2 (pool): immediate_word, 2 byte(s). 16-bit immediate.

Observed: 20 0000 CRec2Uni pool:0x0

Examples
clsCmnDlg.OpenDialog @ 0x457B6C | 457C2B    20 1700               CRec2Uni pool:0x17
clsCmnDlg.SaveDialog @ 0x45F270 | 45F377    20 1700               CRec2Uni pool:0x17
clsCmnDlg.ColorDialog @ 0x453728 | 4537AE    20 2D00               CRec2Uni pool:0x2D

6 occurrence(s) in PDFStreamDumper.

Evidence and notes

Emitted by VB6 SP6 (P-code): yes. Minimal probe: probes\op\0_20_CRec2Uni.

Handler: 0x661099CA, shared by 2 dispatch slots (real opcode #31). This is the primary slot. Other slots: (2,5D) CRecAnsi2Uni.

Corpus: 6 occurrence(s) in PDFStreamDumper_p.exe.

Slots sharing this handler

(2,0x5D) CRecAnsi2Uni

Description: draft, by claude-opus-4.7. Handler 0x661099CA, dispatch slot 0x66106D94, modOpcodes line 914.

CRecAnsi2Uni

(2,0x5D)not emitteddup of (0,20)handler #31UDT / recordinferred_corpus
Same handler as (0,0x20) CRec2Uni: Convert top-of-stack 2Uni to Rec.
Encoding, evidence and notes
Encoding

Encoding: FC 5D (lead byte FC selects table 2), then 2 operand byte(s); total instruction length 4 byte(s).
No printf operands are declared, but the instruction still consumes operand bytes; see the size above and the observed bytes below. (Phase 3a: flag=0 does not mean 'no operands'.)

Evidence and notes

Emitted by VB6 SP6 (P-code): not observed in about 3,070 probe programs. The slot exists in the runtime's dispatch table, but no tested source construct makes the compiler emit it.

Handler: 0x661099CA, shared by 2 dispatch slots (real opcode #31). This is a duplicate slot of (0,20) CRec2Uni. Other slots: (0,20) CRec2Uni.

Slots sharing this handler

(0,0x20) CRec2Uni

Description: none. Handler 0x661099CA, dispatch slot 0x66107688, modOpcodes line 892.

CRecUni2Ansi

(2,0x5E)not emitteddup of (0,1F)handler #30UDT / recordinferred_corpus
Same handler as (0,0x1F) CRec2Ansi: Convert top-of-stack 2Ansi to Rec.
Encoding, evidence and notes
Encoding

Encoding: FC 5E (lead byte FC selects table 2), then 2 operand byte(s); total instruction length 4 byte(s).
No printf operands are declared, but the instruction still consumes operand bytes; see the size above and the observed bytes below. (Phase 3a: flag=0 does not mean 'no operands'.)

Evidence and notes

Emitted by VB6 SP6 (P-code): not observed in about 3,070 probe programs. The slot exists in the runtime's dispatch table, but no tested source construct makes the compiler emit it.

Handler: 0x661099AD, shared by 2 dispatch slots (real opcode #30). This is a duplicate slot of (0,1F) CRec2Ansi. Other slots: (0,1F) CRec2Ansi.

Slots sharing this handler

(0,0x1F) CRec2Ansi

Description: none. Handler 0x661099AD, dispatch slot 0x6610768C, modOpcodes line 893.

CRefVarAry

(2,0x35)emittedhandler #373Conversionconfirmed_msdocs58 corpus hits
Type conversion (CRefVarAry).

Performs a VB6 type conversion. Mnemonic does not decompose cleanly into dest/src; see family description and printf template.

Stack: [..., src] -> [..., dest]

When the compiler emits it

Emitted at the boundary of a type-mismatched assignment, argument pass, or coercion.

VB6 source (verified: compiles to this slot)
Public Sub Main()
  Dim v As Variant
  Erase v
End Sub
Encoding, evidence and notes
Encoding

Encoding: FC 35 (lead byte FC selects table 2), then 0 operand byte(s); total instruction length 2 byte(s).
Operands: none. All inputs come from the evaluation stack or the frame.
Observed: FC35 CRefVarAry

Examples
Form1.AryIsEmpty @ 0x43F208 | 43F20E    FC35                  CRefVarAry
fso.Proc_45ECB4 @ 0x45ECB4 | 45EE03    FC35                  CRefVarAry
fso.Proc_448314 @ 0x448314 | 44834B    FC35                  CRefVarAry

58 occurrence(s) in PDFStreamDumper.

Evidence and notes

Emitted by VB6 SP6 (P-code): yes. Minimal probe: probes\op\2_35_CRefVarAry.

Handler: 0x66105569, unique to this slot (real opcode #373).

Corpus: 58 occurrence(s) in PDFStreamDumper_p.exe.

Description: draft, by claude-opus-4.7. Handler 0x66105569, dispatch slot 0x661075E8, modOpcodes line 864.

CSng

(2,0x3F)not emitteddup of (2,40)handler #378Conversionconfirmed_msdocs
Type conversion (CSng).

Performs a VB6 type conversion. Mnemonic does not decompose cleanly into dest/src; see family description and printf template.

Stack: [..., src] -> [..., dest]

When the compiler emits it

Emitted at the boundary of a type-mismatched assignment, argument pass, or coercion.

Encoding, evidence and notes
Encoding

Encoding: FC 3F (lead byte FC selects table 2), then 0 operand byte(s); total instruction length 2 byte(s).
Operands: none. All inputs come from the evaluation stack or the frame.

Evidence and notes

Emitted by VB6 SP6 (P-code): not observed in about 3,070 probe programs. The slot exists in the runtime's dispatch table, but no tested source construct makes the compiler emit it.

Handler: 0x66109540, shared by 2 dispatch slots (real opcode #378). This is a duplicate slot of (2,40) CSng. Other slots: (2,40) CSng.

Slots sharing this handler

(2,0x40) CSng

Description: draft, by claude-opus-4.7. Handler 0x66109540, dispatch slot 0x66107610, modOpcodes line 866.

CSng

(2,0x40)emittedprimary of 2handler #378Conversionconfirmed_handler
(alias) Type conversion (CSng).

Alias dispatch slot (2, 0x40) for the canonical CSng at (2, 0x3F); semantics are identical.

Performs a VB6 type conversion. Mnemonic does not decompose cleanly into dest/src; see family description and printf template.

Stack: [..., src] -> [..., dest]

When the compiler emits it

Emitted at the boundary of a type-mismatched assignment, argument pass, or coercion.

VB6 source (verified: compiles to this slot)
Public Sub Main()
  Dim a As Date, c As Single
  c = CSng(a)
End Sub
Encoding, evidence and notes
Encoding

Encoding: FC 40 (lead byte FC selects table 2), then 0 operand byte(s); total instruction length 2 byte(s).
Operands: none. All inputs come from the evaluation stack or the frame.
Observed: FC40 CSng

Evidence and notes

Emitted by VB6 SP6 (P-code): yes. Minimal probe: probes\op\2_40_CSng.

Handler: 0x66109540, shared by 2 dispatch slots (real opcode #378). This is the primary slot. Other slots: (2,3F) CSng.

Slots sharing this handler

(2,0x3F) CSng

Description: draft, by claude-opus-4.7. Handler 0x66109540, dispatch slot 0x66107614, modOpcodes line 867.

CStr2Ansi

(0,0x34)emittedprimary of 2handler #51Conversionconfirmed_handler20 corpus hits
Convert a String argument from Unicode to ANSI for a Declare'd API call.

Converts the Unicode BSTR referenced on the stack into an ANSI string (WideCharToMultiByte via the runtime) held in a temporary, so the API sees a byte string.

Stack: [..., s:Str] -> [..., a:Str(ANSI)]

When the compiler emits it

Emitted when a String (or fixed-length String, String array element, UDT String field) is passed to a Declared DLL function. VB converts the BSTR to an ANSI temporary before the call and back with CStr2Uni (2,58) afterwards for ByRef parameters. Not emitted for StrPtr or for typelib-declared functions taking BSTR.

VB6 source (verified: compiles to this slot)
Private Declare Sub P Lib "x.dll" (s As String)

Public Sub Main()
  Dim s As String
  P s
End Sub
Encoding, evidence and notes
Encoding

Encoding: 34, then 0 operand byte(s); total instruction length 1 byte(s).
Operands: none. All inputs come from the evaluation stack or the frame.
Observed: 34 CStr2Ansi

Examples
Form1.Command1_Click @ 0x444218 | 444249    34                    CStr2Ansi
Form1.Command1_Click @ 0x444218 | 444253    34                    CStr2Ansi
Form1.Command1_Click @ 0x444218 | 44425D    34                    CStr2Ansi

20 occurrence(s) in PDFStreamDumper.

Evidence and notes

Emitted by VB6 SP6 (P-code): yes. Minimal probe: probes\op\0_34_CStr2Ansi.

Handler: 0x661055C4, shared by 2 dispatch slots (real opcode #51). This is the primary slot. Other slots: (2,5A) CStr2Ansi.

Check of vb6_source_eq example: verified: compiles and emits this slot.

Corpus: 20 occurrence(s) in PDFStreamDumper_p.exe.

Example from the description
Private Declare Function lstrlen Lib "kernel32" Alias "lstrlenA" (ByVal s As String) As Long
Sub Main()
  Dim s As String, n As Long
  s = "abc"
  n = lstrlen(s)
End Sub
Slots sharing this handler

(2,0x5A) CStr2Ansi

Description: draft, by claude-opus-5-5. Handler 0x661055C4, dispatch slot 0x66106DE4, modOpcodes line 888.

CStr2Ansi

(2,0x5A)not emitteddup of (0,34)handler #51Conversionconfirmed_msdocs
(duplicate slot of (0,34) CStr2Ansi) Convert a String argument from Unicode to ANSI for a Declare'd API call.

Dispatch slot (2, 0x5A) runs the same MSVBVM60 handler as (0,34) CStr2Ansi; runtime behaviour is identical.

Converts the Unicode BSTR referenced on the stack into an ANSI string (WideCharToMultiByte via the runtime) held in a temporary, so the API sees a byte string.

Stack: [..., s:Str] -> [..., a:Str(ANSI)]

When the compiler emits it

Not emitted by VB6 SP6 in Phase 4 probes. Source that performs this operation (String to ANSI for Declare calls) compiles to (0,34) CStr2Ansi instead. The slot is reachable only by hand-crafted or non-VB6-compiled p-code.

Encoding, evidence and notes
Encoding

Encoding: FC 5A (lead byte FC selects table 2), then 0 operand byte(s); total instruction length 2 byte(s).
Operands: none. All inputs come from the evaluation stack or the frame.

Evidence and notes

Emitted by VB6 SP6 (P-code): not observed in about 3,070 probe programs. The slot exists in the runtime's dispatch table, but no tested source construct makes the compiler emit it.

Handler: 0x661055C4, shared by 2 dispatch slots (real opcode #51). This is a duplicate slot of (0,34) CStr2Ansi. Other slots: (0,34) CStr2Ansi.

Slots sharing this handler

(0,0x34) CStr2Ansi

Description: draft, by claude-opus-5-5. Handler 0x661055C4, dispatch slot 0x6610767C, modOpcodes line 879.

CStr2Uni

(2,0x58)emittedhandler #394Conversionconfirmed_msdocs14 corpus hits
Convert a String from ANSI back to Unicode after a Declare'd API call.

Converts an ANSI string (API result or the ANSI temporary of a ByRef argument) into a Unicode BSTR.

Stack: [..., a:Str(ANSI)] -> [..., s:Str]

When the compiler emits it

Emitted after calls to Declared DLL functions that take a String parameter (converting the possibly modified ANSI buffer back into the VB String) or return a String. Paired with CStr2Ansi (0,34).

VB6 source (verified: compiles to this slot)
Private Declare Function P Lib "x.dll" () As String

Public Sub Main()
  Dim s As String
  s = P()
End Sub
Encoding, evidence and notes
Encoding

Encoding: FC 58 (lead byte FC selects table 2), then 0 operand byte(s); total instruction length 2 byte(s).
Operands: none. All inputs come from the evaluation stack or the frame.
Observed: FC58 CStr2Uni

Examples
Form1.Form_Load @ 0x479DC0 | 479E8C    FC58                  CStr2Uni
Form1.Form_Load @ 0x479DC0 | 479F79    FC58                  CStr2Uni
fso.Proc_448BF0 @ 0x448BF0 | 448C43    FC58                  CStr2Uni

14 occurrence(s) in PDFStreamDumper.

Evidence and notes

Emitted by VB6 SP6 (P-code): yes. Minimal probe: probes\op\2_58_CStr2Uni.

Handler: 0x6610997A, unique to this slot (real opcode #394).

Check of vb6_source_eq example: verified: compiles and emits this slot.

Corpus: 14 occurrence(s) in PDFStreamDumper_p.exe.

Example from the description
Private Declare Function P Lib "x.dll" () As String
Sub Main()
  Dim s As String
  s = P()
End Sub

Description: draft, by claude-opus-5-5. Handler 0x6610997A, dispatch slot 0x66107674, modOpcodes line 877.

CStr2Vec

(2,0x5F)emittedhandler #397Conversioninferred_corpus
Convert a String to a Byte array (b() = s).

Pops a String and stores its raw UTF-16 bytes as a new Byte SAFEARRAY into the temporary %a, which is then assigned to the array variable.

When the compiler emits it

Emitted for b = "abc" / b = s where b is a dynamic Byte array.

VB6 source (verified: compiles to this slot)
Public Sub Main()
  Dim b() As Byte, v As Variant, s As String
  b = "abc"
End Sub
Encoding, evidence and notes
Encoding

Encoding: FC 5F (lead byte FC selects table 2), then 2 operand byte(s); total instruction length 4 byte(s).
vbdec template: %a
Operands:

  1. %a: local_var_ref, 2 byte(s). signed 16-bit offset from the procedure frame pointer (EBP). Negative = local/temporary (vbdec var_XX, XX = -offset), positive = argument (arg_XX).

Observed: FC5F 60FF CStr2Vec var_A0

Examples
FC5F 60FF  CStr2Vec var_A0

From the Phase 4 probe (VB6 SP6, P-code).

Evidence and notes

Emitted by VB6 SP6 (P-code): yes. Minimal probe: probes\op\2_5F_CStr2Vec.

Handler: 0x66105590, unique to this slot (real opcode #397).

Check of vb6_source_eq example: verified: compiles and emits this slot.

Example from the description
Public Sub Main()
  Dim b() As Byte, v As Variant, s As String
  b = "abc"
End Sub

Description: draft, by claude-opus-5-5. Handler 0x66105590, dispatch slot 0x66107690, modOpcodes line 894.

CStrAry2Ansi

(2,0x5B)emittedhandler #396Conversionconfirmed_msdocs
Type conversion (CStrAry2Ansi).

Performs a VB6 type conversion. Mnemonic does not decompose cleanly into dest/src; see family description and printf template.

Stack: [..., src] -> [..., dest]

When the compiler emits it

Emitted at the boundary of a type-mismatched assignment, argument pass, or coercion.

VB6 source (verified: compiles to this slot)
Private Declare Sub P Lib "x.dll" (a() As String)

Public Sub Main()
  Dim a() As String
  P a
End Sub
Encoding, evidence and notes
Encoding

Encoding: FC 5B (lead byte FC selects table 2), then 0 operand byte(s); total instruction length 2 byte(s).
Operands: none. All inputs come from the evaluation stack or the frame.
Observed: FC5B CStrAry2Ansi

Evidence and notes

Emitted by VB6 SP6 (P-code): yes. Minimal probe: probes\op\2_5B_CStrAry2Ansi.

Handler: 0x6610999C, unique to this slot (real opcode #396).

Description: draft, by claude-opus-4.7. Handler 0x6610999C, dispatch slot 0x66107680, modOpcodes line 880.

CStrAry2Uni

(2,0x59)emittedhandler #395Conversionconfirmed_msdocs
Type conversion (CStrAry2Uni).

Performs a VB6 type conversion. Mnemonic does not decompose cleanly into dest/src; see family description and printf template.

Stack: [..., src] -> [..., dest]

When the compiler emits it

Emitted at the boundary of a type-mismatched assignment, argument pass, or coercion.

VB6 source (verified: compiles to this slot)
Private Declare Sub P Lib "x.dll" (a() As String)

Public Sub Main()
  Dim a() As String
  P a
End Sub
Encoding, evidence and notes
Encoding

Encoding: FC 59 (lead byte FC selects table 2), then 0 operand byte(s); total instruction length 2 byte(s).
Operands: none. All inputs come from the evaluation stack or the frame.
Observed: FC59 CStrAry2Uni

Evidence and notes

Emitted by VB6 SP6 (P-code): yes. Minimal probe: probes\op\2_59_CStrAry2Uni.

Handler: 0x6610998B, unique to this slot (real opcode #395).

Description: draft, by claude-opus-4.7. Handler 0x6610998B, dispatch slot 0x66107678, modOpcodes line 878.

CStrBool

(4,0xC7)emittedhandler #685Conversionconfirmed_msdocs
Convert top-of-stack Boolean to String.

Pops a value of type Boolean, pushes the equivalent value as String.

Stack: [..., a:Bool] -> [..., a':Str]

Number-to-string formatting uses the locale-default decimal separator (matches VBA CStr).

When the compiler emits it

Emitted at the boundary where a Boolean value must be assigned to or passed as String.

VB6 source (verified: compiles to this slot)
Public Sub Main()
  Dim a As Boolean, c As String
  c = CStr(a)
End Sub
Encoding, evidence and notes
Encoding

Encoding: FE C7 (lead byte FE selects table 4), then 0 operand byte(s); total instruction length 2 byte(s).
Operands: none. All inputs come from the evaluation stack or the frame.
Observed: FEC7 CStrBool

Evidence and notes

Emitted by VB6 SP6 (P-code): yes. Minimal probe: probes\op\4_C7_CStrBool.

Handler: 0x66109639, unique to this slot (real opcode #685).

Check of vb6_source_eq example: verified: compiles and emits this slot.

Example from the description
Dim a As Boolean, b As String
b = CStr(a)

Description: draft, by claude-opus-4.7. Handler 0x66109639, dispatch slot 0x66108030, modOpcodes line 881.

CStrCy

(2,0x01)emittedhandler #357Conversionconfirmed_msdocs
Convert top-of-stack Currency to String.

Pops a value of type Currency, pushes the equivalent value as String.

Stack: [..., a:Cy] -> [..., a':Str]

Number-to-string formatting uses the locale-default decimal separator (matches VBA CStr).

When the compiler emits it

Emitted at the boundary where a Currency value must be assigned to or passed as String.

VB6 source (verified: compiles to this slot)
Public Sub Main()
  Dim a As Currency, c As String
  c = CStr(a)
End Sub
Encoding, evidence and notes
Encoding

Encoding: FC 01 (lead byte FC selects table 2), then 0 operand byte(s); total instruction length 2 byte(s).
Operands: none. All inputs come from the evaluation stack or the frame.
Observed: FC01 CStrCy

Evidence and notes

Emitted by VB6 SP6 (P-code): yes. Minimal probe: probes\op\2_01_CStrCy.

Handler: 0x6610968F, unique to this slot (real opcode #357).

Check of vb6_source_eq example: verified: compiles and emits this slot.

Example from the description
Dim a As Currency, b As String
b = CStr(a)

Description: draft, by claude-opus-4.7. Handler 0x6610968F, dispatch slot 0x66107518, modOpcodes line 815.

CStrDate

(4,0xC8)emittedhandler #686Conversionconfirmed_msdocs
Type conversion (CStrDate).

Performs a VB6 type conversion. Mnemonic does not decompose cleanly into dest/src; see family description and printf template.

Stack: [..., src] -> [..., dest]

When the compiler emits it

Emitted at the boundary of a type-mismatched assignment, argument pass, or coercion.

VB6 source (verified: compiles to this slot)
Public Sub Main()
  Dim a As Date, c As String
  c = CStr(a)
End Sub
Encoding, evidence and notes
Encoding

Encoding: FE C8 (lead byte FE selects table 4), then 0 operand byte(s); total instruction length 2 byte(s).
Operands: none. All inputs come from the evaluation stack or the frame.
Observed: FEC8 CStrDate

Evidence and notes

Emitted by VB6 SP6 (P-code): yes. Minimal probe: probes\op\4_C8_CStrDate.

Handler: 0x6610966D, unique to this slot (real opcode #686).

Description: draft, by claude-opus-4.7. Handler 0x6610966D, dispatch slot 0x66108034, modOpcodes line 883.

CStrI2

(1,0xFC)emitteddup of (1,FD)handler #353Conversionconfirmed_msdocs
Convert a Byte to a String. (The slot is named CStrI2, but the compiler uses it for Byte sources.)

Pops a Byte (widened on the stack) and pushes its decimal string representation as a new BSTR.

Stack: [..., a:UI1] -> [..., s:Str]

When the compiler emits it

Probe evidence: CStr(<Byte>), Byte & String and implicit Byte-to-String assignment emit this slot; CStr(<Integer>) emits (1,FD). The names of (1,FC) and (1,FD) appear swapped. Both slots run the same handler.

VB6 source (verified: compiles to this slot)
Public Sub Main()
  Dim a As Byte, c As String
  c = CStr(a)
End Sub
Encoding, evidence and notes
Encoding

Encoding: FB FC (lead byte FB selects table 1), then 0 operand byte(s); total instruction length 2 byte(s).
Operands: none. All inputs come from the evaluation stack or the frame.
Observed: FBFC CStrI2

Evidence and notes

Emitted by VB6 SP6 (P-code): yes. Minimal probe: probes\op\1_FC_CStrI2.

Handler: 0x66105378, shared by 2 dispatch slots (real opcode #353). This is a duplicate slot of (1,FD) CStrUI1. Other slots: (1,FD) CStrUI1.

Compile-time slot selection: the compiler picks different slots of this handler for different source types:

  • (1,FC): Dim a As Byte, c As String : c = CStr(a)
  • (1,FD): Dim a As Integer, c As String : c = CStr(a)

Finding: Probe: CStr(<Byte>) emits this slot, not CStr(<Integer>). The modOpcodes name CStrI2 appears swapped with (1,FD). Both slots share one handler, so the difference is compile-time only.

Check of vb6_source_eq example: verified: compiles and emits this slot.

Example from the description
Dim b As Byte, s As String
b = 7
s = CStr(b)
Slots sharing this handler

(1,0xFD) CStrUI1

Description: draft, by claude-opus-5-5. Handler 0x66105378, dispatch slot 0x66107504, modOpcodes line 810.

CStrI4

(1,0xFE)emittedhandler #354Conversionconfirmed_msdocs84 corpus hits
Convert top-of-stack Long to String.

Pops a value of type Long, pushes the equivalent value as String.

Stack: [..., a:I4] -> [..., a':Str]

Number-to-string formatting uses the locale-default decimal separator (matches VBA CStr).

When the compiler emits it

Emitted at the boundary where a Long value must be assigned to or passed as String.

VB6 source (verified: compiles to this slot)
Public Sub Main()
  Dim a As Long, c As String
  c = CStr(a)
End Sub
Encoding, evidence and notes
Encoding

Encoding: FB FE (lead byte FB selects table 1), then 0 operand byte(s); total instruction length 2 byte(s).
Operands: none. All inputs come from the evaluation stack or the frame.
Observed: FBFE CStrI4

Examples
Form1.RegisterPlugin @ 0x44CB20 | 44CBC1    FBFE                  CStrI4
Form1.mnuErrorSaveRawAll_Click @ 0x45D950 | 45DB4E    FBFE                  CStrI4
Form1.mnuHideDups_Click @ 0x4629E4 | 462C19    FBFE                  CStrI4

84 occurrence(s) in PDFStreamDumper.

Evidence and notes

Emitted by VB6 SP6 (P-code): yes. Minimal probe: probes\op\1_FE_CStrI4.

Handler: 0x6610538A, unique to this slot (real opcode #354).

Check of vb6_source_eq example: verified: compiles and emits this slot.

Corpus: 84 occurrence(s) in PDFStreamDumper_p.exe.

Example from the description
Dim a As Long, b As String
b = CStr(a)

Description: draft, by claude-opus-4.7. Handler 0x6610538A, dispatch slot 0x6610750C, modOpcodes line 812.

CStrR4

(1,0xFF)emittedhandler #355Conversionconfirmed_msdocs
Convert top-of-stack Single to String.

Pops a value of type Single, pushes the equivalent value as String.

Stack: [..., a:R4] -> [..., a':Str]

Number-to-string formatting uses the locale-default decimal separator (matches VBA CStr).

When the compiler emits it

Emitted at the boundary where a Single value must be assigned to or passed as String.

VB6 source (verified: compiles to this slot)
Public Sub Main()
  Dim a As Single, c As String
  c = CStr(a)
End Sub
Encoding, evidence and notes
Encoding

Encoding: FB FF (lead byte FB selects table 1), then 0 operand byte(s); total instruction length 2 byte(s).
Operands: none. All inputs come from the evaluation stack or the frame.
Observed: FBFF CStrR4

Evidence and notes

Emitted by VB6 SP6 (P-code): yes. Minimal probe: probes\op\1_FF_CStrR4.

Handler: 0x6610539C, unique to this slot (real opcode #355).

Check of vb6_source_eq example: verified: compiles and emits this slot.

Example from the description
Dim a As Single, b As String
b = CStr(a)

Description: draft, by claude-opus-4.7. Handler 0x6610539C, dispatch slot 0x66107510, modOpcodes line 813.

CStrR8

(2,0x00)emittedhandler #356Conversionconfirmed_msdocs4 corpus hits
Convert top-of-stack Double to String.

Pops a value of type Double, pushes the equivalent value as String.

Stack: [..., a:R8] -> [..., a':Str]

Number-to-string formatting uses the locale-default decimal separator (matches VBA CStr).

When the compiler emits it

Emitted at the boundary where a Double value must be assigned to or passed as String.

VB6 source (verified: compiles to this slot)
Public Sub Main()
  Dim a As Double, c As String
  c = CStr(a)
End Sub
Encoding, evidence and notes
Encoding

Encoding: FC 00 (lead byte FC selects table 2), then 0 operand byte(s); total instruction length 2 byte(s).
Operands: none. All inputs come from the evaluation stack or the frame.
Observed: FC00 CStrR8

Examples
Form1.cmdDecode_Click @ 0x4775C0 | 477EE9    FC00                  CStrR8
CPdfParser.ParseFile @ 0x471F38 | 472540    FC00                  CStrR8
CPdfParser.Orginal_ParseFile @ 0x468D2C | 46908D    FC00                  CStrR8

4 occurrence(s) in PDFStreamDumper.

Evidence and notes

Emitted by VB6 SP6 (P-code): yes. Minimal probe: probes\op\2_00_CStrR8.

Handler: 0x6610964B, unique to this slot (real opcode #356).

Check of vb6_source_eq example: verified: compiles and emits this slot.

Corpus: 4 occurrence(s) in PDFStreamDumper_p.exe.

Example from the description
Dim a As Double, b As String
b = CStr(a)

Description: draft, by claude-opus-4.7. Handler 0x6610964B, dispatch slot 0x66107514, modOpcodes line 814.

CStrUI1

(1,0xFD)emittedprimary of 2handler #353Conversionconfirmed_msdocs8 corpus hits
Convert an Integer (or Boolean) to a String. (The slot is named CStrUI1, but the compiler uses it for Integer sources.)

Pops a 16-bit Integer and pushes its decimal string representation as a new BSTR.

Stack: [..., a:I2] -> [..., s:Str]

When the compiler emits it

Probe evidence: CStr(<Integer>), Integer & String and implicit Integer-to-String assignment emit this slot; CStr(<Byte>) emits (1,FC). The names appear swapped. Same handler as (1,FC).

VB6 source (verified: compiles to this slot)
Public Sub Main()
  Dim a As Integer, c As String
  c = CStr(a)
End Sub
Encoding, evidence and notes
Encoding

Encoding: FB FD (lead byte FB selects table 1), then 0 operand byte(s); total instruction length 2 byte(s).
Operands: none. All inputs come from the evaluation stack or the frame.
Observed: FBFD CStrUI1

Examples
Form1.RegisterPlugin @ 0x44CB20 | 44CBD0    FBFD                  CStrUI1
CApplyFilters.ParsePredictor @ 0x45CED4 | 45D03E    FBFD                  CStrUI1
CApplyFilters.ParsePredictor @ 0x45CED4 | 45D054    FBFD                  CStrUI1

8 occurrence(s) in PDFStreamDumper.

Evidence and notes

Emitted by VB6 SP6 (P-code): yes. Minimal probe: probes\op\1_FD_CStrUI1.

Handler: 0x66105378, shared by 2 dispatch slots (real opcode #353). This is the primary slot. Other slots: (1,FC) CStrI2.

Compile-time slot selection: the compiler picks different slots of this handler for different source types:

  • (1,FC): Dim a As Byte, c As String : c = CStr(a)
  • (1,FD): Dim a As Integer, c As String : c = CStr(a)

Finding: Probe: CStr(<Integer>) (and Boolean-to-String paths) emit this slot, not CStr(<Byte>). The name CStrUI1 appears swapped with (1,FC). Same handler as (1,FC).

Check of vb6_source_eq example: verified: compiles and emits this slot.

Corpus: 8 occurrence(s) in PDFStreamDumper_p.exe.

Example from the description
Dim i As Integer, s As String
i = 300
s = CStr(i)
Slots sharing this handler

(1,0xFC) CStrI2

Description: draft, by claude-opus-5-5. Handler 0x66105378, dispatch slot 0x66107508, modOpcodes line 811.

CStrVar

(2,0x02)emittedhandler #358Conversionconfirmed_msdocs33 corpus hits
Implicitly coerce a Variant to String (assignment, typed argument or typed expression context).

Pops a value of type Variant, pushes the equivalent value as String.

Stack: [..., a:Var] -> [..., a':Str]

Number-to-string formatting uses the locale-default decimal separator (matches VBA CStr).

When the compiler emits it

Emitted when a Variant is used where a String is required without an explicit conversion function: x = v with x As String, a Variant passed to a ByVal String parameter, or a late-bound property result stored into a String. The explicit C...(v) function compiles to FnCStrVar (2,4B) instead. Raises error 13 (Type mismatch) if the Variant cannot be converted.

VB6 source (verified: compiles to this slot)
Public Sub Main()
  Dim a As Variant, c As String
  c = a
End Sub
Encoding, evidence and notes
Encoding

Encoding: FC 02 (lead byte FC selects table 2), then 0 operand byte(s); total instruction length 2 byte(s).
Operands: none. All inputs come from the evaluation stack or the frame.
Observed: FC02 CStrVar

Examples
Form1.safe @ 0x44D7B8 | 44D8B5    FC02                  CStrVar
fso.Proc_44160C @ 0x44160C | 441621    FC02                  CStrVar
fso.Proc_449624 @ 0x449624 | 4496E2    FC02                  CStrVar

33 occurrence(s) in PDFStreamDumper.

Evidence and notes

Emitted by VB6 SP6 (P-code): yes. Minimal probe: probes\op\2_02_CStrVar.

Handler: 0x6610531F, unique to this slot (real opcode #358).

Check of vb6_source_eq example: verified: compiles and emits this slot.

Corpus: 33 occurrence(s) in PDFStreamDumper_p.exe.

Example from the description
Dim v As Variant, x As String
v = 5
x = v

Description: draft, by claude-opus-5-5. Handler 0x6610531F, dispatch slot 0x6610751C, modOpcodes line 816.

CStrVarTmp

(0,0x60)emittedprimary of 2handler #93Conversionconfirmed_msdocs291 corpus hits
Convert a Variant temporary to a String and free the temporary.

Pops the address of a temporary Variant, converts it to a BSTR (error 13 if impossible), clears the temporary and pushes the String.

Stack: [..., t:Var(tmp)] -> [..., s:Str]

When the compiler emits it

Emitted when a Variant-valued expression result (a Variant-returning function such as Mid()/Left()/Input(), or a late-bound property) is stored into a String. The temporary Variant is consumed and freed. A Variant variable assigned to a String uses CStrVar (2,02).

VB6 source (verified: compiles to this slot)
Public Sub Main()
  Dim s As Variant, r As String
  r = Len(s)
End Sub
Encoding, evidence and notes
Encoding

Encoding: 60, then 0 operand byte(s); total instruction length 1 byte(s).
Operands: none. All inputs come from the evaluation stack or the frame.
Observed: 60 CStrVarTmp

Examples
Form1.isAS3Sorcerer_Installed @ 0x44D52C | 44D590    60                    CStrVarTmp
Form1.mnuErrorSaveRawAll_Click @ 0x45D950 | 45DAA1    60                    CStrVarTmp
Form1.mnuExtractURI_Click @ 0x45774C | 457876    60                    CStrVarTmp

291 occurrence(s) in PDFStreamDumper.

Evidence and notes

Emitted by VB6 SP6 (P-code): yes. Minimal probe: probes\op\0_60_CStrVarTmp.

Handler: 0x66105331, shared by 2 dispatch slots (real opcode #93). This is the primary slot. Other slots: (3,FD) CStrVarTmp.

Check of vb6_source_eq example: verified: compiles and emits this slot.

Corpus: 291 occurrence(s) in PDFStreamDumper_p.exe.

Example from the description
Dim v As Variant, s As String
v = "abc"
s = Mid(v, 2)
Slots sharing this handler

(3,0xFD) CStrVarTmp

Description: draft, by claude-opus-5-5. Handler 0x66105331, dispatch slot 0x66106E94, modOpcodes line 794.

CStrVarTmp

(3,0xFD)not emitteddup of (0,60)handler #93Conversionconfirmed_handler
(duplicate slot of (0,60) CStrVarTmp) Convert a Variant temporary to a String and free the temporary.

Dispatch slot (3, 0xFD) runs the same MSVBVM60 handler as (0,60) CStrVarTmp; runtime behaviour is identical.

Pops the address of a temporary Variant, converts it to a BSTR (error 13 if impossible), clears the temporary and pushes the String.

Stack: [..., t:Var(tmp)] -> [..., s:Str]

When the compiler emits it

Not emitted by VB6 SP6 in Phase 4 probes. Source that performs this operation (Variant temporary to String) compiles to (0,60) CStrVarTmp instead. The slot is reachable only by hand-crafted or non-VB6-compiled p-code.

Encoding, evidence and notes
Encoding

Encoding: FD FD (lead byte FD selects table 3), then 0 operand byte(s); total instruction length 2 byte(s).
Operands: none. All inputs come from the evaluation stack or the frame.

Evidence and notes

Emitted by VB6 SP6 (P-code): not observed in about 3,070 probe programs. The slot exists in the runtime's dispatch table, but no tested source construct makes the compiler emit it.

Handler: 0x66105331, shared by 2 dispatch slots (real opcode #93). This is a duplicate slot of (0,60) CStrVarTmp. Other slots: (0,60) CStrVarTmp.

Slots sharing this handler

(0,0x60) CStrVarTmp

Description: draft, by claude-opus-5-5. Handler 0x66105331, dispatch slot 0x66107D08, modOpcodes line 882.

CStrVarVal

(3,0xFE)emittedhandler #593Conversioninferred_corpus376 corpus hits
Convert a Variant to a String in a temporary, without consuming the Variant (ByVal String argument).

Reads the Variant referenced on the stack, converts a copy to a BSTR in the temporary %a, and pushes the String. The source Variant is unchanged.

Stack: [..., v:Rf] -> [..., s:Str]

When the compiler emits it

Emitted when a Variant variable is passed where the callee takes a String by value: VB string functions with a String parameter (Asc(v), Trim$(v), Val(v), Left$(v, n), ...) and Declare'd APIs with ByVal s As String. The %a operand is the temporary String slot, freed after the call.

VB6 source (verified: compiles to this slot)
Public Sub Main()
  Dim a As Variant, c As Variant
  c = Asc(a)
End Sub
Encoding, evidence and notes
Encoding

Encoding: FD FE (lead byte FD selects table 3), then 2 operand byte(s); total instruction length 4 byte(s).
vbdec template: %a
Operands:

  1. %a: local_var_ref, 2 byte(s). signed 16-bit offset from the procedure frame pointer (EBP). Negative = local/temporary (vbdec var_XX, XX = -offset), positive = argument (arg_XX).

Observed: FDFE 58FF CStrVarVal var_A8

Examples
Form1.mnuManualEscape_Event_0 @ 0x467B64 | 467DF3    FDFE D4FE             CStrVarVal var_12C
Form1.mnuManualEscape_Event_0 @ 0x467B64 | 467E1D    FDFE D4FE             CStrVarVal var_12C
Form1.mnuManualEscape_Event_0 @ 0x467B64 | 467E47    FDFE D4FE             CStrVarVal var_12C

376 occurrence(s) in PDFStreamDumper.

Evidence and notes

Emitted by VB6 SP6 (P-code): yes. Minimal probe: probes\op\3_FE_CStrVarVal.

Handler: 0x66105357, unique to this slot (real opcode #593).

Check of vb6_source_eq example: verified: compiles and emits this slot.

Corpus: 376 occurrence(s) in PDFStreamDumper_p.exe.

Example from the description
Dim v As Variant, n As Integer
v = "abc"
n = Asc(v)

Description: draft, by claude-opus-5-5. Handler 0x66105357, dispatch slot 0x66107D0C, modOpcodes line 915.

CUI1Bool

(2,0x38)emittedhandler #374Conversionconfirmed_msdocs
Convert top-of-stack Boolean to Byte.

Pops a value of type Boolean, pushes the equivalent value as Byte.

Stack: [..., a:Bool] -> [..., a':UI1]

When the compiler emits it

Emitted at the boundary where a Boolean value must be assigned to or passed as Byte.

VB6 source (verified: compiles to this slot)
Public Sub Main()
  Dim a As Boolean, c As Byte
  c = CByte(a)
End Sub
Encoding, evidence and notes
Encoding

Encoding: FC 38 (lead byte FC selects table 2), then 0 operand byte(s); total instruction length 2 byte(s).
Operands: none. All inputs come from the evaluation stack or the frame.
Observed: FC38 CUI1Bool

Evidence and notes

Emitted by VB6 SP6 (P-code): yes. Minimal probe: probes\op\2_38_CUI1Bool.

Handler: 0x661094DF, unique to this slot (real opcode #374).

Check of vb6_source_eq example: verified: compiles and emits this slot.

Example from the description
Dim a As Boolean, b As Byte
b = CByte(a)

Description: draft, by claude-opus-4.7. Handler 0x661094DF, dispatch slot 0x661075F4, modOpcodes line 865.

CUI1Cy

(2,0x11)emittedhandler #364Conversionconfirmed_msdocs
Convert top-of-stack Currency to Byte.

Pops a value of type Currency, pushes the equivalent value as Byte.

Stack: [..., a:Cy] -> [..., a':UI1]

Numeric conversion uses VB6 banker's rounding (round-half-to-even) for fractional sources; out-of-range raises run-time error 6 (Overflow).

When the compiler emits it

Emitted at the boundary where a Currency value must be assigned to or passed as Byte.

VB6 source (verified: compiles to this slot)
Public Sub Main()
  Dim a As Currency, c As Byte
  c = CByte(a)
End Sub
Encoding, evidence and notes
Encoding

Encoding: FC 11 (lead byte FC selects table 2), then 0 operand byte(s); total instruction length 2 byte(s).
Operands: none. All inputs come from the evaluation stack or the frame.
Observed: FC11 CUI1Cy

Evidence and notes

Emitted by VB6 SP6 (P-code): yes. Minimal probe: probes\op\2_11_CUI1Cy.

Handler: 0x661094A5, unique to this slot (real opcode #364).

Check of vb6_source_eq example: verified: compiles and emits this slot.

Example from the description
Dim a As Currency, b As Byte
b = CByte(a)

Description: draft, by claude-opus-4.7. Handler 0x661094A5, dispatch slot 0x66107558, modOpcodes line 828.

CUI1I2

(2,0x0D)emittedhandler #361Conversionconfirmed_msdocs35 corpus hits
Convert top-of-stack Integer to Byte.

Pops a value of type Integer, pushes the equivalent value as Byte.

Stack: [..., a:I2] -> [..., a':UI1]

When the compiler emits it

Emitted at the boundary where a Integer value must be assigned to or passed as Byte.

VB6 source (verified: compiles to this slot)
Public Sub Main()
  Dim c As Variant
  c = CByte(5)
End Sub
Encoding, evidence and notes
Encoding

Encoding: FC 0D (lead byte FC selects table 2), then 0 operand byte(s); total instruction length 2 byte(s).
Operands: none. All inputs come from the evaluation stack or the frame.
Observed: FC0D CUI1I2

Examples
Form1.mnuDecompressSWC_Click @ 0x45E9E4 | 45EBA2    FC0D                  CUI1I2
Form1.mnuUpdateCurrent_Click @ 0x46EC0C | 46F000    FC0D                  CUI1I2
Form2.mnuReplaceHexAscii_Click @ 0x46572C | 465767    FC0D                  CUI1I2

35 occurrence(s) in PDFStreamDumper.

Evidence and notes

Emitted by VB6 SP6 (P-code): yes. Minimal probe: probes\op\2_0D_CUI1I2.

Handler: 0x66109475, unique to this slot (real opcode #361).

Finding: Probe: emitted when an Integer-valued expression or literal is stored to a Byte (e.g. b = 7), as well as CByte(<Integer>).

Check of vb6_source_eq example: verified: compiles and emits this slot.

Corpus: 35 occurrence(s) in PDFStreamDumper_p.exe.

Example from the description
Dim a As Integer, b As Byte
b = CByte(a)

Description: draft, by claude-opus-4.7. Handler 0x66109475, dispatch slot 0x66107548, modOpcodes line 824.

CUI1I4

(2,0x0E)emittedhandler #362Conversionconfirmed_msdocs3 corpus hits
Convert top-of-stack Long to Byte.

Pops a value of type Long, pushes the equivalent value as Byte.

Stack: [..., a:I4] -> [..., a':UI1]

When the compiler emits it

Emitted at the boundary where a Long value must be assigned to or passed as Byte.

VB6 source (verified: compiles to this slot)
Public Sub Main()
  Dim a As Long, c As Byte
  c = CByte(a)
End Sub
Encoding, evidence and notes
Encoding

Encoding: FC 0E (lead byte FC selects table 2), then 0 operand byte(s); total instruction length 2 byte(s).
Operands: none. All inputs come from the evaluation stack or the frame.
Observed: FC0E CUI1I4

Examples
modEscapes.Proc_460438 @ 0x460438 | 46050F    FC0E                  CUI1I4
modEscapes.Proc_460438 @ 0x460438 | 460608    FC0E                  CUI1I4
modEscapes.Proc_448CF0 @ 0x448CF0 | 448D60    FC0E                  CUI1I4

3 occurrence(s) in PDFStreamDumper.

Evidence and notes

Emitted by VB6 SP6 (P-code): yes. Minimal probe: probes\op\2_0E_CUI1I4.

Handler: 0x6610948C, unique to this slot (real opcode #362).

Check of vb6_source_eq example: verified: compiles and emits this slot.

Corpus: 3 occurrence(s) in PDFStreamDumper_p.exe.

Example from the description
Dim a As Long, b As Byte
b = CByte(a)

Description: draft, by claude-opus-4.7. Handler 0x6610948C, dispatch slot 0x6610754C, modOpcodes line 825.

CUI1R4

(2,0x0F)emittedprimary of 2handler #363Conversionconfirmed_msdocs
Convert top-of-stack Single to Byte.

Pops a value of type Single, pushes the equivalent value as Byte.

Stack: [..., a:R4] -> [..., a':UI1]

Numeric conversion uses VB6 banker's rounding (round-half-to-even) for fractional sources; out-of-range raises run-time error 6 (Overflow).

When the compiler emits it

Emitted at the boundary where a Single value must be assigned to or passed as Byte.

VB6 source (verified: compiles to this slot)
Public Sub Main()
  Dim a As Single, c As Byte
  c = CByte(a)
End Sub
Encoding, evidence and notes
Encoding

Encoding: FC 0F (lead byte FC selects table 2), then 0 operand byte(s); total instruction length 2 byte(s).
Operands: none. All inputs come from the evaluation stack or the frame.
Observed: FC0F CUI1R4

Evidence and notes

Emitted by VB6 SP6 (P-code): yes. Minimal probe: probes\op\2_0F_CUI1R4.

Handler: 0x661094B1, shared by 2 dispatch slots (real opcode #363). This is the primary slot. Other slots: (2,10) CUI1R4.

Compile-time slot selection: the compiler picks different slots of this handler for different source types:

  • (2,0F): Dim a As Single, c As Byte : c = CByte(a)
  • (2,10): Dim a As Double, c As Byte : c = CByte(a)

Finding: Compiler selects this slot for CByte(<Single>). (2,10) is used for Double.

Check of vb6_source_eq example: verified: compiles and emits this slot.

Example from the description
Dim a As Single, b As Byte
b = CByte(a)
Slots sharing this handler

(2,0x10) CUI1R4

Description: draft, by claude-opus-4.7. Handler 0x661094B1, dispatch slot 0x66107550, modOpcodes line 826.

CUI1R4

(2,0x10)emitteddup of (2,0F)handler #363Conversionconfirmed_handler
(alias) Convert top-of-stack Single to Byte.

Alias dispatch slot (2, 0x10) for the canonical CUI1R4 at (2, 0x0F); semantics are identical.

Pops a value of type Single, pushes the equivalent value as Byte.

Stack: [..., a:R4] -> [..., a':UI1]

Numeric conversion uses VB6 banker's rounding (round-half-to-even) for fractional sources; out-of-range raises run-time error 6 (Overflow).

When the compiler emits it

Emitted at the boundary where a Single value must be assigned to or passed as Byte.

VB6 source (verified: compiles to this slot)
Public Sub Main()
  Dim a As Double, c As Byte
  c = CByte(a)
End Sub
Encoding, evidence and notes
Encoding

Encoding: FC 10 (lead byte FC selects table 2), then 0 operand byte(s); total instruction length 2 byte(s).
Operands: none. All inputs come from the evaluation stack or the frame.
Observed: FC10 CUI1R4

Evidence and notes

Emitted by VB6 SP6 (P-code): yes. Minimal probe: probes\op\2_10_CUI1R4.

Handler: 0x661094B1, shared by 2 dispatch slots (real opcode #363). This is a duplicate slot of (2,0F) CUI1R4. Other slots: (2,0F) CUI1R4.

Compile-time slot selection: the compiler picks different slots of this handler for different source types:

  • (2,0F): Dim a As Single, c As Byte : c = CByte(a)
  • (2,10): Dim a As Double, c As Byte : c = CByte(a)

Finding: Compiler selects this slot for CByte(<Double>), and for Double-valued expressions assigned to Byte. Effective meaning: CUI1R8.

Check of vb6_source_eq example: compiles, but emits a different slot of the same handler. emits (2,0F) CUI1R4 (same handler, different slot)

Example from the description
Dim a As Single, b As Byte
b = CByte(a)
Slots sharing this handler

(2,0x0F) CUI1R4

Description: draft, by claude-opus-4.7. Handler 0x661094B1, dispatch slot 0x66107554, modOpcodes line 827.

CUI1Str

(2,0x13)emittedhandler #366Conversionconfirmed_msdocs
Convert top-of-stack String to Byte.

Pops a value of type String, pushes the equivalent value as Byte.

Stack: [..., a:Str] -> [..., a':UI1]

Numeric conversion uses VB6 banker's rounding (round-half-to-even) for fractional sources; out-of-range raises run-time error 6 (Overflow).

When the compiler emits it

Emitted at the boundary where a String value must be assigned to or passed as Byte.

VB6 source (verified: compiles to this slot)
Public Sub Main()
  Dim a As String, c As Byte
  c = CByte(a)
End Sub
Encoding, evidence and notes
Encoding

Encoding: FC 13 (lead byte FC selects table 2), then 0 operand byte(s); total instruction length 2 byte(s).
Operands: none. All inputs come from the evaluation stack or the frame.
Observed: FC13 CUI1Str

Evidence and notes

Emitted by VB6 SP6 (P-code): yes. Minimal probe: probes\op\2_13_CUI1Str.

Handler: 0x661096AE, unique to this slot (real opcode #366).

Check of vb6_source_eq example: verified: compiles and emits this slot.

Example from the description
Dim a As String, b As Byte
b = CByte(a)

Description: draft, by claude-opus-4.7. Handler 0x661096AE, dispatch slot 0x66107560, modOpcodes line 830.

CUI1Var

(2,0x12)emittedhandler #365Conversionconfirmed_msdocs4 corpus hits
Implicitly coerce a Variant to Byte (assignment, typed argument or typed expression context).

Pops a value of type Variant, pushes the equivalent value as Byte.

Stack: [..., a:Var] -> [..., a':UI1]

Numeric conversion uses VB6 banker's rounding (round-half-to-even) for fractional sources; out-of-range raises run-time error 6 (Overflow).

When the compiler emits it

Emitted when a Variant is used where a Byte is required without an explicit conversion function: x = v with x As Byte, a Variant passed to a ByVal Byte parameter, or a late-bound property result stored into a Byte. The explicit C...(v) function compiles to FnCByteVar (2,44) instead. Raises error 13 (Type mismatch) if the Variant cannot be converted.

VB6 source (verified: compiles to this slot)
Public Sub Main()
  Dim a As Variant, c As Byte
  c = a
End Sub
Encoding, evidence and notes
Encoding

Encoding: FC 12 (lead byte FC selects table 2), then 0 operand byte(s); total instruction length 2 byte(s).
Operands: none. All inputs come from the evaluation stack or the frame.
Observed: FC12 CUI1Var

Examples
b64.Proc_478E48 @ 0x478E48 | 479C5F    FC12                  CUI1Var
b64.Proc_478E48 @ 0x478E48 | 479C8F    FC12                  CUI1Var
b64.Proc_478E48 @ 0x478E48 | 479CC5    FC12                  CUI1Var

4 occurrence(s) in PDFStreamDumper.

Evidence and notes

Emitted by VB6 SP6 (P-code): yes. Minimal probe: probes\op\2_12_CUI1Var.

Handler: 0x661094F0, unique to this slot (real opcode #365).

Check of vb6_source_eq example: verified: compiles and emits this slot.

Corpus: 4 occurrence(s) in PDFStreamDumper_p.exe.

Example from the description
Dim v As Variant, x As Byte
v = 5
x = v

Description: draft, by claude-opus-5-5. Handler 0x661094F0, dispatch slot 0x6610755C, modOpcodes line 829.

CUnkVar

(2,0x71)emittedhandler #405Conversionconfirmed_msdocs2 corpus hits
Type conversion (CUnkVar).

Performs a VB6 type conversion. Mnemonic does not decompose cleanly into dest/src; see family description and printf template.

Stack: [..., src] -> [..., dest]

When the compiler emits it

Emitted at the boundary of a type-mismatched assignment, argument pass, or coercion.

VB6 source (verified: compiles to this slot)
Public Sub Main()
  Dim v As Variant, w As Variant, n As Long, o As Object
  If v Is Nothing Then n = 1
End Sub

Function F() As Variant
End Function
Encoding, evidence and notes
Encoding

Encoding: FC 71 (lead byte FC selects table 2), then 0 operand byte(s); total instruction length 2 byte(s).
Operands: none. All inputs come from the evaluation stack or the frame.
Observed: FC71 CUnkVar

Examples
CScriptFunctions.ObjectPointer @ 0x440CC4 | 440CD5    FC71                  CUnkVar
frmBruteZLib.mnuSaveToFile_Click @ 0x4520F0 | 45210A    FC71                  CUnkVar

2 occurrence(s) in PDFStreamDumper.

Evidence and notes

Emitted by VB6 SP6 (P-code): yes. Minimal probe: probes\op\2_71_CUnkVar.

Handler: 0x66105549, unique to this slot (real opcode #405).

Corpus: 2 occurrence(s) in PDFStreamDumper_p.exe.

Description: draft, by claude-opus-4.7. Handler 0x66105549, dispatch slot 0x661076D8, modOpcodes line 889.

CVar2Vec

(2,0x60)emittedhandler #398Conversioninferred_corpus48 corpus hits
Type conversion (CVar2Vec).

Performs a VB6 type conversion. Mnemonic does not decompose cleanly into dest/src; see family description and printf template.

Stack: [..., src] -> [..., dest]

When the compiler emits it

Emitted at the boundary of a type-mismatched assignment, argument pass, or coercion.

VB6 source (verified: compiles to this slot)
Public Sub Main()
  Dim b() As Byte, s As String
  b = StrConv(s, vbFromUnicode)
End Sub
Encoding, evidence and notes
Encoding

Encoding: FC 60 (lead byte FC selects table 2), then 2 operand byte(s); total instruction length 4 byte(s).
vbdec template: %a
Operands:

  1. %a: local_var_ref, 2 byte(s). signed 16-bit offset from the procedure frame pointer (EBP). Negative = local/temporary (vbdec var_XX, XX = -offset), positive = argument (arg_XX).

Observed: FC60 50FF CVar2Vec var_B0

Examples
Form1.mnuDecompileFlash_Click @ 0x4613A8 | 461538    FC60 D0FE             CVar2Vec var_130
Form1.mnuDecompileFlash_Click @ 0x4613A8 | 461578    FC60 D0FE             CVar2Vec var_130
Form1.mnuErrorSaveRawAll_Click @ 0x45D950 | 45DA53    FC60 C0FE             CVar2Vec var_140

48 occurrence(s) in PDFStreamDumper.

Evidence and notes

Emitted by VB6 SP6 (P-code): yes. Minimal probe: probes\op\2_60_CVar2Vec.

Handler: 0x661055AA, unique to this slot (real opcode #398).

Corpus: 48 occurrence(s) in PDFStreamDumper_p.exe.

Description: draft, by claude-opus-4.7. Handler 0x661055AA, dispatch slot 0x66107694, modOpcodes line 895.

CVarAd

(3,0x6F)emittedhandler #534Conversioninferred_corpus81 corpus hits
Wrap an object reference in a Variant (VT_DISPATCH) temporary.

Pops an object pointer, AddRefs it and writes a VT_DISPATCH Variant into the temporary %a, then pushes the temporary's address.

Stack: [..., o:Ad] -> [..., v:Var]

When the compiler emits it

Emitted when an object must be passed as a Variant: Set o.Prop = x on a late-bound object, an object passed to a ByVal/expression Variant argument, and Set v(i) = x on Variant-held arrays.

VB6 source (verified: compiles to this slot)
Public Sub Main()
  Dim o As Object
  Set o.Prop = Nothing
End Sub
Encoding, evidence and notes
Encoding

Encoding: FD 6F (lead byte FD selects table 3), then 2 operand byte(s); total instruction length 4 byte(s).
vbdec template: %a
Operands:

  1. %a: local_var_ref, 2 byte(s). signed 16-bit offset from the procedure frame pointer (EBP). Negative = local/temporary (vbdec var_XX, XX = -offset), positive = argument (arg_XX).

Observed: FD6F 68FF CVarAd var_98

Examples
Form1.LoadPlugins @ 0x4644FC | 464784    FD6F 44FF             CVarAd var_BC
Form1.mnuErrorSaveRaw_Click @ 0x45C9BC | 45CA16    FD6F 68FF             CVarAd var_98
Form1.mnuUnescape_Click @ 0x45DEC4 | 45E0F8    FD6F 1CFF             CVarAd var_E4

81 occurrence(s) in PDFStreamDumper.

Evidence and notes

Emitted by VB6 SP6 (P-code): yes. Minimal probe: probes\op\3_6F_CVarAd.

Handler: 0x66105452, unique to this slot (real opcode #534).

Check of vb6_source_eq example: verified: compiles and emits this slot.

Corpus: 81 occurrence(s) in PDFStreamDumper_p.exe.

Example from the description
Dim o As Object, c As Collection
Set c = New Collection
Set o.Prop = c

Description: draft, by claude-opus-5-5. Handler 0x66105452, dispatch slot 0x66107AD0, modOpcodes line 904.

CVarAryUdt

(5,0x3A)emittedhandler #766UDT / recordinferred_corpus
Convert an array to a Variant (v = a), descriptor-driven.

Pops an array reference and produces a Variant holding a copy of the array (VT_ARRAY|vt). The 6 operand bytes carry the temporary slot and the element VARTYPE/flags (observed 58FF 0920 0000: var_A8, VT_DISPATCH|VT_ARRAY for an Object array).

When the compiler emits it

Emitted for v = a where a is an array of objects or records.

VB6 source (verified: compiles to this slot)
Public Sub Main()
  Dim a() As Object, v As Variant
  v = a
End Sub
Encoding, evidence and notes
Encoding

Encoding: FF 3A (lead byte FF selects table 5), then 6 operand byte(s); total instruction length 8 byte(s).
No printf operands are declared, but the instruction still consumes operand bytes; see the size above and the observed bytes below. (Phase 3a: flag=0 does not mean 'no operands'.)
Observed: FF3A 58FF09200000 CVarAryUdt

Examples
FF3A 58FF09200000  CVarAryUdt

From the Phase 4 probe (VB6 SP6, P-code).

Evidence and notes

Emitted by VB6 SP6 (P-code): yes. Minimal probe: probes\op\5_3A_CVarAryUdt.

Handler: 0x66109839, unique to this slot (real opcode #766).

Check of vb6_source_eq example: verified: compiles and emits this slot.

Example from the description
Public Sub Main()
  Dim a() As Object, v As Variant
  v = a
End Sub

Description: draft, by claude-opus-5-5. Handler 0x66109839, dispatch slot 0x661081FC, modOpcodes line 924.

CVarAryVarg

(3,0xFC)not emittedhandler #592Conversioninferred_corpus
No description yet.
Encoding, evidence and notes
Encoding

Encoding: FD FC (lead byte FD selects table 3), then 2 operand byte(s); total instruction length 4 byte(s).
vbdec template: %a
Operands:

  1. %a: local_var_ref, 2 byte(s). signed 16-bit offset from the procedure frame pointer (EBP). Negative = local/temporary (vbdec var_XX, XX = -offset), positive = argument (arg_XX).
Evidence and notes

Emitted by VB6 SP6 (P-code): not observed in about 3,070 probe programs. The slot exists in the runtime's dispatch table, but no tested source construct makes the compiler emit it.

Handler: 0x6610991E, unique to this slot (real opcode #592).

Description: none. Handler 0x6610991E, dispatch slot 0x66107D04, modOpcodes line 910.

CVarBoolI2

(3,0xF8)emittedhandler #588Conversioninferred_corpus62 corpus hits
Convert top-of-stack Integer to VarBool.

Pops a value of type Integer, pushes the equivalent value as VarBool.

Stack: [..., a:I2] -> [..., a':VarBool]

When the compiler emits it

Emitted at the boundary where a Integer value must be assigned to or passed as VarBool.

VB6 source (verified: compiles to this slot)
Public Sub Main()
  Dim a As Boolean, c As Variant
  c = CBool(a)
End Sub
Encoding, evidence and notes
Encoding

Encoding: FD F8 (lead byte FD selects table 3), then 2 operand byte(s); total instruction length 4 byte(s).
vbdec template: %a
Operands:

  1. %a: local_var_ref, 2 byte(s). signed 16-bit offset from the procedure frame pointer (EBP). Negative = local/temporary (vbdec var_XX, XX = -offset), positive = argument (arg_XX).

Observed: FDF8 58FF CVarBoolI2 var_A8

Examples
Form1.mnuSearchFilter_Event_0 @ 0x473E0C | 474217    FDF8 14FF             CVarBoolI2 var_EC
Form1.mnuSearchFilter_Event_0 @ 0x473E0C | 4744EA    FDF8 14FF             CVarBoolI2 var_EC
Form1.Form_Unload (Cancel As Integer) @ 0x46B420 | 46B4C3    FDF8 44FF             CVarBoolI2 var_BC

62 occurrence(s) in PDFStreamDumper.

Evidence and notes

Emitted by VB6 SP6 (P-code): yes. Minimal probe: probes\op\3_F8_CVarBoolI2.

Handler: 0x66105423, unique to this slot (real opcode #588).

Corpus: 62 occurrence(s) in PDFStreamDumper_p.exe.

Description: draft, by claude-opus-4.7. Handler 0x66105423, dispatch slot 0x66107CF4, modOpcodes line 906.

CVarCy

(0,0x3F)emittedprimary of 2handler #62Conversionconfirmed_handler
Convert a Currency to a Variant (VT_CY) in a temporary.

Pops a Currency and writes a VT_CY Variant into the temporary %a, then pushes the temporary's address.

Stack: [..., c:Cy] -> [..., v:Var]

When the compiler emits it

Emitted for v = c with c As Currency. (3,6C) is the other slot of this name; the compiler emits this one, (0,3F).

VB6 source (verified: compiles to this slot)
Public Sub Main()
  Dim c As Currency, v As Variant
  v = c
End Sub
Encoding, evidence and notes
Encoding

Encoding: 3F, then 2 operand byte(s); total instruction length 3 byte(s).
vbdec template: %a
Operands:

  1. %a: local_var_ref, 2 byte(s). signed 16-bit offset from the procedure frame pointer (EBP). Negative = local/temporary (vbdec var_XX, XX = -offset), positive = argument (arg_XX).

Observed: 3F 54FF CVarCy var_AC

Examples
3F 54FF  CVarCy var_AC

From the Phase 4 probe (VB6 SP6, P-code).

Evidence and notes

Emitted by VB6 SP6 (P-code): yes. Minimal probe: probes\op\0_3F_CVarCy.

Handler: 0x661097EB, shared by 2 dispatch slots (real opcode #62). This is the primary slot. Other slots: (3,6C) CVarCy.

Check of vb6_source_eq example: verified: compiles and emits this slot.

Example from the description
Public Sub Main()
  Dim c As Currency, v As Variant
  v = c
End Sub
Slots sharing this handler

(3,0x6C) CVarCy

Description: draft, by claude-opus-5-5. Handler 0x661097EB, dispatch slot 0x66106E10, modOpcodes line 911.

CVarCy

(3,0x6C)not emitteddup of (0,3F)handler #62Conversioninferred_corpus
Same handler as (0,0x3F) CVarCy: Convert a Currency to a Variant (VT_CY) in a temporary.
Encoding, evidence and notes
Encoding

Encoding: FD 6C (lead byte FD selects table 3), then 2 operand byte(s); total instruction length 4 byte(s).
vbdec template: %a
Operands:

  1. %a: local_var_ref, 2 byte(s). signed 16-bit offset from the procedure frame pointer (EBP). Negative = local/temporary (vbdec var_XX, XX = -offset), positive = argument (arg_XX).
Evidence and notes

Emitted by VB6 SP6 (P-code): not observed in about 3,070 probe programs. The slot exists in the runtime's dispatch table, but no tested source construct makes the compiler emit it.

Handler: 0x661097EB, shared by 2 dispatch slots (real opcode #62). This is a duplicate slot of (0,3F) CVarCy. Other slots: (0,3F) CVarCy.

Slots sharing this handler

(0,0x3F) CVarCy

Description: none. Handler 0x661097EB, dispatch slot 0x66107AC4, modOpcodes line 902.

CVarDate

(3,0xFB)emittedhandler #591Conversioninferred_corpus
Convert a Date to a Variant (VT_DATE) in a temporary.

Pops an 8-byte Date and writes a VT_DATE Variant into the temporary %a.

Stack: [..., d:Date] -> [..., v:Var]

When the compiler emits it

Emitted for v = d with d As Date.

VB6 source (verified: compiles to this slot)
Public Sub Main()
  Dim d As Date, v As Variant
  v = d
End Sub
Encoding, evidence and notes
Encoding

Encoding: FD FB (lead byte FD selects table 3), then 2 operand byte(s); total instruction length 4 byte(s).
vbdec template: %a
Operands:

  1. %a: local_var_ref, 2 byte(s). signed 16-bit offset from the procedure frame pointer (EBP). Negative = local/temporary (vbdec var_XX, XX = -offset), positive = argument (arg_XX).

Observed: FDFB 54FF CVarDate var_AC

Examples
FDFB 54FF  CVarDate var_AC

From the Phase 4 probe (VB6 SP6, P-code).

Evidence and notes

Emitted by VB6 SP6 (P-code): yes. Minimal probe: probes\op\3_FB_CVarDate.

Handler: 0x661097C6, unique to this slot (real opcode #591).

Check of vb6_source_eq example: verified: compiles and emits this slot.

Example from the description
Public Sub Main()
  Dim d As Date, v As Variant
  v = d
End Sub

Description: draft, by claude-opus-5-5. Handler 0x661097C6, dispatch slot 0x66107D00, modOpcodes line 909.

CVarDateVar

(3,0xF9)not emittedhandler #589Conversioninferred_corpus
No description yet.
Encoding, evidence and notes
Encoding

Encoding: FD F9 (lead byte FD selects table 3), then 2 operand byte(s); total instruction length 4 byte(s).
vbdec template: %a
Operands:

  1. %a: local_var_ref, 2 byte(s). signed 16-bit offset from the procedure frame pointer (EBP). Negative = local/temporary (vbdec var_XX, XX = -offset), positive = argument (arg_XX).
Evidence and notes

Emitted by VB6 SP6 (P-code): not observed in about 3,070 probe programs. The slot exists in the runtime's dispatch table, but no tested source construct makes the compiler emit it.

Handler: 0x661097D0, unique to this slot (real opcode #589).

Description: none. Handler 0x661097D0, dispatch slot 0x66107CF8, modOpcodes line 907.

CVarErrI4

(3,0xFA)emittedhandler #590Conversioninferred_corpus
Build a VT_ERROR Variant from a Long (CVErr).

Pops a Long error code and writes a VT_ERROR Variant into the temporary %a.

Stack: [..., n:I4] -> [..., v:Var]

When the compiler emits it

Emitted for CVErr(n).

VB6 source (verified: compiles to this slot)
Public Sub Main()
  Dim v As Variant
  v = CVErr(5)
End Sub
Encoding, evidence and notes
Encoding

Encoding: FD FA (lead byte FD selects table 3), then 2 operand byte(s); total instruction length 4 byte(s).
vbdec template: %a
Operands:

  1. %a: local_var_ref, 2 byte(s). signed 16-bit offset from the procedure frame pointer (EBP). Negative = local/temporary (vbdec var_XX, XX = -offset), positive = argument (arg_XX).

Observed: FDFA 5CFF CVarErrI4 var_A4

Examples
FDFA 5CFF  CVarErrI4 var_A4

From the Phase 4 probe (VB6 SP6, P-code).

Evidence and notes

Emitted by VB6 SP6 (P-code): yes. Minimal probe: probes\op\3_FA_CVarErrI4.

Handler: 0x66109794, unique to this slot (real opcode #590).

Check of vb6_source_eq example: verified: compiles and emits this slot.

Example from the description
Public Sub Main()
  Dim v As Variant
  v = CVErr(5)
End Sub

Description: draft, by claude-opus-5-5. Handler 0x66109794, dispatch slot 0x66107CFC, modOpcodes line 908.

CVarI2

(0,0x44)emittedprimary of 2handler #67Conversionconfirmed_handler16 corpus hits
(alias) Convert top-of-stack Integer to Variant.

Alias dispatch slot (0, 0x44) for the canonical CVarI2 at (3, 0x68); semantics are identical.

Pops a value of type Integer, pushes the equivalent value as Variant.

Stack: [..., a:I2] -> [..., a':Var]

Source value is boxed into a Variant of the matching subtype.

When the compiler emits it

Emitted at the boundary where a Integer value must be assigned to or passed as Variant.

VB6 source (verified: compiles to this slot)
Public Sub Main()
  Dim a As Boolean, c As Variant
  c = CInt(a)
End Sub
Encoding, evidence and notes
Encoding

Encoding: 44, then 2 operand byte(s); total instruction length 3 byte(s).
vbdec template: %a
Operands:

  1. %a: local_var_ref, 2 byte(s). signed 16-bit offset from the procedure frame pointer (EBP). Negative = local/temporary (vbdec var_XX, XX = -offset), positive = argument (arg_XX).

Observed: 44 58FF CVarI2 var_A8

Examples
Form1.mnuPluginList_Event_0 @ 0x44C3D4 | 44C451    44 5CFF               CVarI2 var_A4
Form1.Form_Load @ 0x479DC0 | 47A413    44 54FF               CVarI2 var_AC
fso.Proc_44A0B4 @ 0x44A0B4 | 44A104    44 54FF               CVarI2 var_AC

16 occurrence(s) in PDFStreamDumper.

Evidence and notes

Emitted by VB6 SP6 (P-code): yes. Minimal probe: probes\op\0_44_CVarI2.

Handler: 0x66105431, shared by 2 dispatch slots (real opcode #67). This is the primary slot. Other slots: (3,68) CVarI2.

Check of vb6_source_eq example: verified: compiles and emits this slot.

Corpus: 16 occurrence(s) in PDFStreamDumper_p.exe.

Example from the description
Dim a As Integer, b As Variant
b = CVar(a)
Slots sharing this handler

(3,0x68) CVarI2

Description: draft, by claude-opus-4.7. Handler 0x66105431, dispatch slot 0x66106E24, modOpcodes line 912.

CVarI2

(3,0x68)not emitteddup of (0,44)handler #67Conversioninferred_corpus
Same handler as (0,0x44) CVarI2: (alias) Convert top-of-stack Integer to Variant.
Encoding, evidence and notes
Encoding

Encoding: FD 68 (lead byte FD selects table 3), then 2 operand byte(s); total instruction length 4 byte(s).
vbdec template: %a
Operands:

  1. %a: local_var_ref, 2 byte(s). signed 16-bit offset from the procedure frame pointer (EBP). Negative = local/temporary (vbdec var_XX, XX = -offset), positive = argument (arg_XX).
Evidence and notes

Emitted by VB6 SP6 (P-code): not observed in about 3,070 probe programs. The slot exists in the runtime's dispatch table, but no tested source construct makes the compiler emit it.

Handler: 0x66105431, shared by 2 dispatch slots (real opcode #67). This is a duplicate slot of (0,44) CVarI2. Other slots: (0,44) CVarI2.

Slots sharing this handler

(0,0x44) CVarI2

Description: none. Handler 0x66105431, dispatch slot 0x66107AB4, modOpcodes line 898.

CVarI4

(3,0x69)emittedhandler #531Conversioninferred_corpus269 corpus hits
Convert top-of-stack Long to Variant.

Pops a value of type Long, pushes the equivalent value as Variant.

Stack: [..., a:I4] -> [..., a':Var]

Source value is boxed into a Variant of the matching subtype.

When the compiler emits it

Emitted at the boundary where a Long value must be assigned to or passed as Variant.

VB6 source (verified: compiles to this slot)
Public Sub Main()
  Dim a As Long, c As Variant
  c = CLng(a)
End Sub
Encoding, evidence and notes
Encoding

Encoding: FD 69 (lead byte FD selects table 3), then 2 operand byte(s); total instruction length 4 byte(s).
vbdec template: %a
Operands:

  1. %a: local_var_ref, 2 byte(s). signed 16-bit offset from the procedure frame pointer (EBP). Negative = local/temporary (vbdec var_XX, XX = -offset), positive = argument (arg_XX).

Observed: FD69 58FF CVarI4 var_A8

Examples
Form1.mnub64decode_Click @ 0x451280 | 45134F    FD69 2CFF             CVarI4 var_D4
Form1.mnub64Encode_Click @ 0x4510EC | 4511BB    FD69 2CFF             CVarI4 var_D4
Form1.mnuErrorSaveRawAll_Click @ 0x45D950 | 45DA85    FD69 68FF             CVarI4 var_98

269 occurrence(s) in PDFStreamDumper.

Evidence and notes

Emitted by VB6 SP6 (P-code): yes. Minimal probe: probes\op\3_69_CVarI4.

Handler: 0x66105478, unique to this slot (real opcode #531).

Check of vb6_source_eq example: verified: compiles and emits this slot.

Corpus: 269 occurrence(s) in PDFStreamDumper_p.exe.

Example from the description
Dim a As Long, b As Variant
b = CVar(a)

Description: draft, by claude-opus-4.7. Handler 0x66105478, dispatch slot 0x66107AB8, modOpcodes line 899.

CVarR4

(3,0x6A)emittedhandler #532Conversioninferred_corpus83 corpus hits
Convert top-of-stack Single to Variant.

Pops a value of type Single, pushes the equivalent value as Variant.

Stack: [..., a:R4] -> [..., a':Var]

Source value is boxed into a Variant of the matching subtype.

When the compiler emits it

Emitted at the boundary where a Single value must be assigned to or passed as Variant.

VB6 source (verified: compiles to this slot)
Public Sub Main()
  Dim a As Single, c As Variant
  c = CSng(a)
End Sub
Encoding, evidence and notes
Encoding

Encoding: FD 6A (lead byte FD selects table 3), then 2 operand byte(s); total instruction length 4 byte(s).
vbdec template: %a
Operands:

  1. %a: local_var_ref, 2 byte(s). signed 16-bit offset from the procedure frame pointer (EBP). Negative = local/temporary (vbdec var_XX, XX = -offset), positive = argument (arg_XX).

Observed: FD6A 58FF CVarR4 var_A8

Examples
Form1.cmdAbortProcessing_Click @ 0x441954 | 441991    FD6A 68FF             CVarR4 var_98
Form1.Form_Resize @ 0x474F3C | 4750B4    FD6A 44FF             CVarR4 var_BC
Form1.Form_Resize @ 0x474F3C | 47510C    FD6A 44FF             CVarR4 var_BC

83 occurrence(s) in PDFStreamDumper.

Evidence and notes

Emitted by VB6 SP6 (P-code): yes. Minimal probe: probes\op\3_6A_CVarR4.

Handler: 0x6610547E, unique to this slot (real opcode #532).

Check of vb6_source_eq example: verified: compiles and emits this slot.

Corpus: 83 occurrence(s) in PDFStreamDumper_p.exe.

Example from the description
Dim a As Single, b As Variant
b = CVar(a)

Description: draft, by claude-opus-4.7. Handler 0x6610547E, dispatch slot 0x66107ABC, modOpcodes line 900.

CVarR8

(3,0x6B)emittedhandler #533Conversioninferred_corpus3 corpus hits
Convert top-of-stack Double to Variant.

Pops a value of type Double, pushes the equivalent value as Variant.

Stack: [..., a:R8] -> [..., a':Var]

Source value is boxed into a Variant of the matching subtype.

When the compiler emits it

Emitted at the boundary where a Double value must be assigned to or passed as Variant.

VB6 source (verified: compiles to this slot)
Public Sub Main()
  Dim a As Double, c As Variant
  c = CVar(a)
End Sub
Encoding, evidence and notes
Encoding

Encoding: FD 6B (lead byte FD selects table 3), then 2 operand byte(s); total instruction length 4 byte(s).
vbdec template: %a
Operands:

  1. %a: local_var_ref, 2 byte(s). signed 16-bit offset from the procedure frame pointer (EBP). Negative = local/temporary (vbdec var_XX, XX = -offset), positive = argument (arg_XX).

Observed: FD6B 54FF CVarR8 var_AC

Examples
modZLIB.Proc_4666C0 @ 0x4666C0 | 466947    FD6B E4FE             CVarR8 var_11C
CPDFStream.GetDetailsReport @ 0x47468C | 474C21    FD6B 00FF             CVarR8 var_100
frmScTest.Command1_Click @ 0x46F7C0 | 46FD6B    FD6B 40FF             CVarR8 var_C0

3 occurrence(s) in PDFStreamDumper.

Evidence and notes

Emitted by VB6 SP6 (P-code): yes. Minimal probe: probes\op\3_6B_CVarR8.

Handler: 0x661054A5, unique to this slot (real opcode #533).

Check of vb6_source_eq example: verified: compiles and emits this slot.

Corpus: 3 occurrence(s) in PDFStreamDumper_p.exe.

Example from the description
Dim a As Double, b As Variant
b = CVar(a)

Description: draft, by claude-opus-4.7. Handler 0x661054A5, dispatch slot 0x66107AC0, modOpcodes line 901.

CVarRef

(0,0x4D)emittedprimary of 2handler #76Conversioninferred_corpus544 corpus hits
Pass a typed variable ByRef to a Variant parameter (build a VT_BYREF Variant in a temporary).

Pops the variable's address and writes a Variant of type %r | VT_BYREF pointing at it into temporary %a, then pushes the temporary's address. Writes through the parameter therefore reach the original typed variable.

Stack: [..., &x:Rf] -> [..., &v:Var]

When the compiler emits it

Emitted when a non-Variant variable is passed to a ByRef Variant parameter: user procedures Sub P(x As Variant), ParamArray arguments, and runtime functions taking Variant (IsNumeric(n), Format$(n), TypeName(o), ...). %a is the temporary Variant, and %r is the VARTYPE OR'ed with VT_BYREF (0x4000).

VB6 source (verified: compiles to this slot)
Public Sub Main()
  Dim o As Object
  P o
End Sub

Sub P(x As Variant)
End Sub
Encoding, evidence and notes
Encoding

Encoding: 4D, then 4 operand byte(s); total instruction length 5 byte(s).
vbdec template: %a %r
Operands:

  1. %a: local_var_ref, 2 byte(s). signed 16-bit offset from the procedure frame pointer (EBP). Negative = local/temporary (vbdec var_XX, XX = -offset), positive = argument (arg_XX).
  2. %r: vt_type_byte, 1 byte(s). 8-bit VARTYPE code (VT_*).

Observed: 4D 68FF0940 CVarRef var_98 0x4009 (IDisp | ByRef)

Examples
Form1.LoadPlugins @ 0x4644FC | 4645E5    4D 44FF0860           CVarRef var_BC  0x6008 (Bstr | Ary | ByRef)
Form1.LoadPlugins @ 0x4644FC | 464651    4D 44FF0840           CVarRef var_BC  0x4008 (Bstr | ByRef)
Form1.mnuB64Clipboard_Click @ 0x44E37C | 44E3EF    4D 54FF0840           CVarRef var_AC  0x4008 (Bstr | ByRef)

544 occurrence(s) in PDFStreamDumper.

Evidence and notes

Emitted by VB6 SP6 (P-code): yes. Minimal probe: probes\op\0_4D_CVarRef.

Handler: 0x661054E3, shared by 2 dispatch slots (real opcode #76). This is the primary slot. Other slots: (3,94) CVarRef.

Check of vb6_source_eq example: verified: compiles and emits this slot.

Corpus: 544 occurrence(s) in PDFStreamDumper_p.exe.

Example from the description
Sub P(x As Variant)
End Sub
Sub Main()
  Dim n As Long
  P n
End Sub
Slots sharing this handler

(3,0x94) CVarRef

Description: draft, by claude-opus-5-5. Handler 0x661054E3, dispatch slot 0x66106E48, modOpcodes line 918.

CVarRef

(3,0x94)not emitteddup of (0,4D)handler #76Conversionconfirmed_handler
Same handler as (0,0x4D) CVarRef: Pass a typed variable ByRef to a Variant parameter (build a VT_BYREF Variant in a temporary).
Encoding, evidence and notes
Encoding

Encoding: FD 94 (lead byte FD selects table 3), then 4 operand byte(s); total instruction length 6 byte(s).
vbdec template: %a %r
Operands:

  1. %a: local_var_ref, 2 byte(s). signed 16-bit offset from the procedure frame pointer (EBP). Negative = local/temporary (vbdec var_XX, XX = -offset), positive = argument (arg_XX).
  2. %r: vt_type_byte, 1 byte(s). 8-bit VARTYPE code (VT_*).
Evidence and notes

Emitted by VB6 SP6 (P-code): not observed in about 3,070 probe programs. The slot exists in the runtime's dispatch table, but no tested source construct makes the compiler emit it.

Handler: 0x661054E3, shared by 2 dispatch slots (real opcode #76). This is a duplicate slot of (0,4D) CVarRef. Other slots: (0,4D) CVarRef.

Slots sharing this handler

(0,0x4D) CVarRef

Description: none. Handler 0x661054E3, dispatch slot 0x66107B64, modOpcodes line 919.

CVarRefUdt

(5,0x33)emittedhandler #760UDT / recordinferred_corpus
Pass a public-record UDT ByRef to a Variant parameter (VT_RECORD|VT_BYREF).

Wraps the UDT's address in a by-reference VT_RECORD Variant in the temporary given by the first operand.

Operands (4 bytes): temporary slot, record-type index.

When the compiler emits it

Emitted for P r where Sub P(x As Variant) and r is a typelib/public UDT.

VB6 source (verified: compiles to this slot)
' references probes\_tlb\probetlb.tlb
Public Sub Main()
  Dim v As Variant, r As TPubRec
  P r
End Sub

Sub P(x As Variant)
End Sub
Sub Q(x As Variant)
End Sub
Encoding, evidence and notes
Encoding

Encoding: FF 33 (lead byte FF selects table 5), then 4 operand byte(s); total instruction length 6 byte(s).
No printf operands are declared, but the instruction still consumes operand bytes; see the size above and the observed bytes below. (Phase 3a: flag=0 does not mean 'no operands'.)
Observed: FF33 48FF0000 CVarRefUdt

Examples
FF33 48FF0000  CVarRefUdt

From the Phase 4 probe (VB6 SP6, P-code).

Evidence and notes

Emitted by VB6 SP6 (P-code): yes. Minimal probe: probes\op\5_33_CVarRefUdt.

Handler: 0x66109879, unique to this slot (real opcode #760).

Check of vb6_source_eq example: verified: compiles and emits this slot.

Example from the description
' references probes\_tlb\probetlb.tlb
Public Sub Main()
  Dim v As Variant, r As TPubRec
  P r
End Sub

Sub P(x As Variant)
End Sub
Sub Q(x As Variant)
End Sub

Description: draft, by claude-opus-5-5. Handler 0x66109879, dispatch slot 0x661081E0, modOpcodes line 921.

CVarStr

(0,0x46)emittedprimary of 2handler #69Conversioninferred_corpus649 corpus hits
Convert top-of-stack String to Variant.

Pops a value of type String, pushes the equivalent value as Variant.

Stack: [..., a:Str] -> [..., a':Var]

Source value is boxed into a Variant of the matching subtype.

When the compiler emits it

Emitted at the boundary where a String value must be assigned to or passed as Variant.

VB6 source (verified: compiles to this slot)
Public Sub Main()
  Dim c As Variant
  c = vbNullString
End Sub
Encoding, evidence and notes
Encoding

Encoding: 46, then 2 operand byte(s); total instruction length 3 byte(s).
vbdec template: %a
Operands:

  1. %a: local_var_ref, 2 byte(s). signed 16-bit offset from the procedure frame pointer (EBP). Negative = local/temporary (vbdec var_XX, XX = -offset), positive = argument (arg_XX).

Observed: 46 5CFF CVarStr var_A4

Examples
Form1.LoadPlugins @ 0x4644FC | 464525    46 54FF               CVarStr var_AC
Form1.LoadPlugins @ 0x4644FC | 4645C0    46 54FF               CVarStr var_AC
Form1.LoadPlugins @ 0x4644FC | 4646CF    46 54FF               CVarStr var_AC

649 occurrence(s) in PDFStreamDumper.

Evidence and notes

Emitted by VB6 SP6 (P-code): yes. Minimal probe: probes\op\0_46_CVarStr.

Handler: 0x66105472, shared by 2 dispatch slots (real opcode #69). This is the primary slot. Other slots: (3,6E) CVarStr.

Check of vb6_source_eq example: verified: compiles and emits this slot.

Corpus: 649 occurrence(s) in PDFStreamDumper_p.exe.

Example from the description
Dim a As String, b As Variant
b = CVar(a)
Slots sharing this handler

(3,0x6E) CVarStr

Description: draft, by claude-opus-4.7. Handler 0x66105472, dispatch slot 0x66106E2C, modOpcodes line 891.

CVarStr

(3,0x6E)not emitteddup of (0,46)handler #69Conversionconfirmed_handler
Same handler as (0,0x46) CVarStr: Convert top-of-stack String to Variant.
Encoding, evidence and notes
Encoding

Encoding: FD 6E (lead byte FD selects table 3), then 2 operand byte(s); total instruction length 4 byte(s).
vbdec template: %a
Operands:

  1. %a: local_var_ref, 2 byte(s). signed 16-bit offset from the procedure frame pointer (EBP). Negative = local/temporary (vbdec var_XX, XX = -offset), positive = argument (arg_XX).
Evidence and notes

Emitted by VB6 SP6 (P-code): not observed in about 3,070 probe programs. The slot exists in the runtime's dispatch table, but no tested source construct makes the compiler emit it.

Handler: 0x66105472, shared by 2 dispatch slots (real opcode #69). This is a duplicate slot of (0,46) CVarStr. Other slots: (0,46) CVarStr.

Slots sharing this handler

(0,0x46) CVarStr

Description: none. Handler 0x66105472, dispatch slot 0x66107ACC, modOpcodes line 903.

CVarUI1

(3,0x67)emittedhandler #530Conversioninferred_corpus1 corpus hits
Convert top-of-stack Byte to Variant.

Pops a value of type Byte, pushes the equivalent value as Variant.

Stack: [..., a:UI1] -> [..., a':Var]

Source value is boxed into a Variant of the matching subtype.

When the compiler emits it

Emitted at the boundary where a Byte value must be assigned to or passed as Variant.

VB6 source (verified: compiles to this slot)
Public Sub Main()
  Dim c As Variant
  c = CByte(5)
End Sub
Encoding, evidence and notes
Encoding

Encoding: FD 67 (lead byte FD selects table 3), then 2 operand byte(s); total instruction length 4 byte(s).
vbdec template: %a
Operands:

  1. %a: local_var_ref, 2 byte(s). signed 16-bit offset from the procedure frame pointer (EBP). Negative = local/temporary (vbdec var_XX, XX = -offset), positive = argument (arg_XX).

Observed: FD67 5CFF CVarUI1 var_A4

Examples
fso.Proc_467FC4 @ 0x467FC4 | 4680B3    FD67 44FF             CVarUI1 var_BC

1 occurrence(s) in PDFStreamDumper.

Evidence and notes

Emitted by VB6 SP6 (P-code): yes. Minimal probe: probes\op\3_67_CVarUI1.

Handler: 0x6610978B, unique to this slot (real opcode #530).

Check of vb6_source_eq example: verified: compiles and emits this slot.

Corpus: 1 occurrence(s) in PDFStreamDumper_p.exe.

Example from the description
Dim a As Byte, b As Variant
b = CVar(a)

Description: draft, by claude-opus-4.7. Handler 0x6610978B, dispatch slot 0x66107AB0, modOpcodes line 897.

CVarUdt

(5,0x34)emittedhandler #761UDT / recordinferred_corpus
Copy a public-record UDT into a Variant (VT_RECORD).

Pops a UDT address and produces a Variant that owns a copy of the record.

Operands (4 bytes): temporary slot, record-type index.

When the compiler emits it

Emitted for v = r where r is a typelib/public UDT.

VB6 source (verified: compiles to this slot)
' references probes\_tlb\probetlb.tlb
Dim gr As TPubRec

Public Sub Main()
  Dim v As Variant
  v = gr
End Sub
Encoding, evidence and notes
Encoding

Encoding: FF 34 (lead byte FF selects table 5), then 4 operand byte(s); total instruction length 6 byte(s).
No printf operands are declared, but the instruction still consumes operand bytes; see the size above and the observed bytes below. (Phase 3a: flag=0 does not mean 'no operands'.)
Observed: FF34 5CFF0000 CVarUdt

Examples
FF34 5CFF0000  CVarUdt

From the Phase 4 probe (VB6 SP6, P-code).

Evidence and notes

Emitted by VB6 SP6 (P-code): yes. Minimal probe: probes\op\5_34_CVarUdt.

Handler: 0x6610980B, unique to this slot (real opcode #761).

Check of vb6_source_eq example: verified: compiles and emits this slot.

Example from the description
' references probes\_tlb\probetlb.tlb
Dim gr As TPubRec

Public Sub Main()
  Dim v As Variant
  v = gr
End Sub

Description: draft, by claude-opus-5-5. Handler 0x6610980B, dispatch slot 0x661081E4, modOpcodes line 922.

CVarUnk

(2,0x72)emittedhandler #406Conversioninferred_corpus
Convert an IUnknown reference to a Variant (VT_UNKNOWN).

Pops an IUnknown pointer, AddRefs it and writes a VT_UNKNOWN Variant into the temporary %a.

Stack: [..., u:Ad] -> [..., v:Var]

When the compiler emits it

Emitted for v = u (without Set) where u As IUnknown.

VB6 source (verified: compiles to this slot)
Public Sub Main()
  Dim u As IUnknown, v As Variant
  v = u
End Sub
Encoding, evidence and notes
Encoding

Encoding: FC 72 (lead byte FC selects table 2), then 2 operand byte(s); total instruction length 4 byte(s).
vbdec template: %a
Operands:

  1. %a: local_var_ref, 2 byte(s). signed 16-bit offset from the procedure frame pointer (EBP). Negative = local/temporary (vbdec var_XX, XX = -offset), positive = argument (arg_XX).

Observed: FC72 58FF CVarUnk var_A8

Examples
FC72 58FF  CVarUnk var_A8

From the Phase 4 probe (VB6 SP6, P-code).

Evidence and notes

Emitted by VB6 SP6 (P-code): yes. Minimal probe: probes\op\2_72_CVarUnk.

Handler: 0x661097BD, unique to this slot (real opcode #406).

Check of vb6_source_eq example: verified: compiles and emits this slot.

Example from the description
Public Sub Main()
  Dim u As IUnknown, v As Variant
  v = u
End Sub

Description: draft, by claude-opus-5-5. Handler 0x661097BD, dispatch slot 0x661076DC, modOpcodes line 896.

CVec2Var

(2,0x61)not emittedhandler #399Conversioninferred_corpus
No description yet.
Encoding, evidence and notes
Encoding

Encoding: FC 61 (lead byte FC selects table 2), then 4 operand byte(s); total instruction length 6 byte(s).
No printf operands are declared, but the instruction still consumes operand bytes; see the size above and the observed bytes below. (Phase 3a: flag=0 does not mean 'no operands'.)

Evidence and notes

Emitted by VB6 SP6 (P-code): not observed in about 3,070 probe programs. The slot exists in the runtime's dispatch table, but no tested source construct makes the compiler emit it.

Handler: 0x66109942, unique to this slot (real opcode #399).

Description: none. Handler 0x66109942, dispatch slot 0x66107698, modOpcodes line 917.

CastAd

(0,0x3D)emittedprimary of 2handler #60Object / COMinferred_corpus79 corpus hits
Type conversion (CastAd).

Performs a VB6 type conversion. Mnemonic does not decompose cleanly into dest/src; see family description and printf template.

Stack: [..., src] -> [..., dest]

When the compiler emits it

Emitted at the boundary of a type-mismatched assignment, argument pass, or coercion.

VB6 source (verified: compiles to this slot)
Public Sub Main()
  Dim c As Collection
  Set c = Nothing
End Sub
Encoding, evidence and notes
Encoding

Encoding: 3D, then 2 operand byte(s); total instruction length 3 byte(s).
vbdec template: %G
Operands:

  1. %G: guid_extract, 2 byte(s). 16-bit constant-pool index of a GUID (interface to cast to).

Observed: 3D 0000 CastAd Collection

Examples
Form1.mnuFindReplace_Click @ 0x446984 | 4469FF    3D CD00               CastAd {AD0104D9-9193-4F6A-B76F-8BDBC1D4319F}
Form1.mnuJavascriptUI_Click @ 0x45B844 | 45B8FA    3D 3F00               CastAd CPDFStream
Form1.mnuSearchFilter_Event_0 @ 0x473E0C | 474191    3D 3700               CastAd IListItem ;{BDD1F04E-858B-11D1-B16A-00C0F0283628}

79 occurrence(s) in PDFStreamDumper.

Evidence and notes

Emitted by VB6 SP6 (P-code): yes. Minimal probe: probes\op\0_3D_CastAd.

Handler: 0x6610614D, shared by 2 dispatch slots (real opcode #60). This is the primary slot. Other slots: (3,F2) CastAd.

Corpus: 79 occurrence(s) in PDFStreamDumper_p.exe.

Slots sharing this handler

(3,0xF2) CastAd

Description: draft, by claude-opus-4.7. Handler 0x6610614D, dispatch slot 0x66106E08, modOpcodes line 446.

CastAd

(3,0xF2)not emitteddup of (0,3D)handler #60Object / COMconfirmed_handler
Same handler as (0,0x3D) CastAd: Type conversion (CastAd).
Encoding, evidence and notes
Encoding

Encoding: FD F2 (lead byte FD selects table 3), then 2 operand byte(s); total instruction length 4 byte(s).
vbdec template: %G
Operands:

  1. %G: guid_extract, 2 byte(s). 16-bit constant-pool index of a GUID (interface to cast to).
Evidence and notes

Emitted by VB6 SP6 (P-code): not observed in about 3,070 probe programs. The slot exists in the runtime's dispatch table, but no tested source construct makes the compiler emit it.

Handler: 0x6610614D, shared by 2 dispatch slots (real opcode #60). This is a duplicate slot of (0,3D) CastAd. Other slots: (0,3D) CastAd.

Slots sharing this handler

(0,0x3D) CastAd

Description: none. Handler 0x6610614D, dispatch slot 0x66107CDC, modOpcodes line 447.

CastAdVar

(3,0xF3)emittedhandler #585Object / COMinferred_corpus331 corpus hits
Type conversion (CastAdVar).

Performs a VB6 type conversion. Mnemonic does not decompose cleanly into dest/src; see family description and printf template.

Stack: [..., src] -> [..., dest]

When the compiler emits it

Emitted at the boundary of a type-mismatched assignment, argument pass, or coercion.

VB6 source (verified: compiles to this slot)
Public Sub Main()
  Dim v As Variant, c As Collection
  Set c = v
End Sub
Encoding, evidence and notes
Encoding

Encoding: FD F3 (lead byte FD selects table 3), then 2 operand byte(s); total instruction length 4 byte(s).
vbdec template: %G
Operands:

  1. %G: guid_extract, 2 byte(s). 16-bit constant-pool index of a GUID (interface to cast to).

Observed: FDF3 0000 CastAdVar Collection

Examples
Form1.LoadPlugins @ 0x4644FC | 464567    FDF3 0800             CastAdVar IListItems ;{BDD1F04C-858B-11D1-B16A-00C0F0283628}
Form1.mnuCopySearch_Click @ 0x449FA4 | 449FB5    FDF3 0800             CastAdVar IListItems ;{BDD1F04C-858B-11D1-B16A-00C0F0283628}
Form1.mnuDecompileFlash_Click @ 0x4613A8 | 4614AA    FDF3 3F00             CastAdVar CPDFStream

331 occurrence(s) in PDFStreamDumper.

Evidence and notes

Emitted by VB6 SP6 (P-code): yes. Minimal probe: probes\op\3_F3_CastAdVar.

Handler: 0x66106139, unique to this slot (real opcode #585).

Corpus: 331 occurrence(s) in PDFStreamDumper_p.exe.

Description: draft, by claude-opus-4.7. Handler 0x66106139, dispatch slot 0x66107CE0, modOpcodes line 448.

FnCBoolVar

(2,0x4D)emittedhandler #387Conversionconfirmed_msdocs
Type conversion (FnCBoolVar).

Performs a VB6 type conversion. Mnemonic does not decompose cleanly into dest/src; see family description and printf template.

Stack: [..., src] -> [..., dest]

When the compiler emits it

Emitted at the boundary of a type-mismatched assignment, argument pass, or coercion.

VB6 source (verified: compiles to this slot)
Public Sub Main()
  Dim a As Variant, c As Boolean
  c = CBool(a)
End Sub
Encoding, evidence and notes
Encoding

Encoding: FC 4D (lead byte FC selects table 2), then 0 operand byte(s); total instruction length 2 byte(s).
Operands: none. All inputs come from the evaluation stack or the frame.
Observed: FC4D FnCBoolVar

Evidence and notes

Emitted by VB6 SP6 (P-code): yes. Minimal probe: probes\op\2_4D_FnCBoolVar.

Handler: 0x66109779, unique to this slot (real opcode #387).

Description: draft, by claude-opus-4.7. Handler 0x66109779, dispatch slot 0x66107648, modOpcodes line 948.

FnCByteVar

(2,0x44)emittedhandler #381Conversionconfirmed_msdocs
Type conversion (FnCByteVar).

Performs a VB6 type conversion. Mnemonic does not decompose cleanly into dest/src; see family description and printf template.

Stack: [..., src] -> [..., dest]

When the compiler emits it

Emitted at the boundary of a type-mismatched assignment, argument pass, or coercion.

VB6 source (verified: compiles to this slot)
Public Sub Main()
  Dim a As Variant, c As Byte
  c = CByte(a)
End Sub
Encoding, evidence and notes
Encoding

Encoding: FC 44 (lead byte FC selects table 2), then 0 operand byte(s); total instruction length 2 byte(s).
Operands: none. All inputs come from the evaluation stack or the frame.
Observed: FC44 FnCByteVar

Evidence and notes

Emitted by VB6 SP6 (P-code): yes. Minimal probe: probes\op\2_44_FnCByteVar.

Handler: 0x66109742, unique to this slot (real opcode #381).

Description: draft, by claude-opus-4.7. Handler 0x66109742, dispatch slot 0x66107624, modOpcodes line 942.

FnCCurVar

(2,0x49)emittedhandler #385Conversionconfirmed_msdocs
Type conversion (FnCCurVar).

Performs a VB6 type conversion. Mnemonic does not decompose cleanly into dest/src; see family description and printf template.

Stack: [..., src] -> [..., dest]

When the compiler emits it

Emitted at the boundary of a type-mismatched assignment, argument pass, or coercion.

VB6 source (verified: compiles to this slot)
Public Sub Main()
  Dim a As Variant, c As Currency
  c = CCur(a)
End Sub
Encoding, evidence and notes
Encoding

Encoding: FC 49 (lead byte FC selects table 2), then 0 operand byte(s); total instruction length 2 byte(s).
Operands: none. All inputs come from the evaluation stack or the frame.
Observed: FC49 FnCCurVar

Evidence and notes

Emitted by VB6 SP6 (P-code): yes. Minimal probe: probes\op\2_49_FnCCurVar.

Handler: 0x66109754, unique to this slot (real opcode #385).

Description: draft, by claude-opus-4.7. Handler 0x66109754, dispatch slot 0x66107638, modOpcodes line 946.

FnCDateVar

(2,0x4E)emittedprimary of 2handler #388Conversionconfirmed_msdocs
Type conversion (FnCDateVar).

Performs a VB6 type conversion. Mnemonic does not decompose cleanly into dest/src; see family description and printf template.

Stack: [..., src] -> [..., dest]

When the compiler emits it

Emitted at the boundary of a type-mismatched assignment, argument pass, or coercion.

VB6 source (verified: compiles to this slot)
Public Sub Main()
  Dim v As Variant, w As Variant
  v = CDate(w)
End Sub
Encoding, evidence and notes
Encoding

Encoding: FC 4E (lead byte FC selects table 2), then 0 operand byte(s); total instruction length 2 byte(s).
Operands: none. All inputs come from the evaluation stack or the frame.
Observed: FC4E FnCDateVar

Evidence and notes

Emitted by VB6 SP6 (P-code): yes. Minimal probe: probes\op\2_4E_FnCDateVar.

Handler: 0x66109731, shared by 2 dispatch slots (real opcode #388). This is the primary slot. Other slots: (2,4F) FnCDateVar.

Compile-time slot selection: the compiler picks different slots of this handler for different source types:

  • (2,4E): Dim v As Variant, w As Variant : v = CDate(w)
  • (2,4F): Dim a As Variant, c As Date : c = a

Finding: Compiler selects this slot for an explicit CDate(<Variant>). (2,4F) is used for implicit Variant to Date coercion (assignment to a Date variable).

Slots sharing this handler

(2,0x4F) FnCDateVar

Description: draft, by claude-opus-4.7. Handler 0x66109731, dispatch slot 0x6610764C, modOpcodes line 949.

FnCDateVar

(2,0x4F)emitteddup of (2,4E)handler #388Conversionconfirmed_handler
(alias) Type conversion (FnCDateVar).

Alias dispatch slot (2, 0x4F) for the canonical FnCDateVar at (2, 0x4E); semantics are identical.

Performs a VB6 type conversion. Mnemonic does not decompose cleanly into dest/src; see family description and printf template.

Stack: [..., src] -> [..., dest]

When the compiler emits it

Emitted at the boundary of a type-mismatched assignment, argument pass, or coercion.

VB6 source (verified: compiles to this slot)
Public Sub Main()
  Dim a As Variant, c As Date
  c = a
End Sub
Encoding, evidence and notes
Encoding

Encoding: FC 4F (lead byte FC selects table 2), then 0 operand byte(s); total instruction length 2 byte(s).
Operands: none. All inputs come from the evaluation stack or the frame.
Observed: FC4F FnCDateVar

Evidence and notes

Emitted by VB6 SP6 (P-code): yes. Minimal probe: probes\op\2_4F_FnCDateVar.

Handler: 0x66109731, shared by 2 dispatch slots (real opcode #388). This is a duplicate slot of (2,4E) FnCDateVar. Other slots: (2,4E) FnCDateVar.

Compile-time slot selection: the compiler picks different slots of this handler for different source types:

  • (2,4E): Dim v As Variant, w As Variant : v = CDate(w)
  • (2,4F): Dim a As Variant, c As Date : c = a

Finding: Compiler selects this slot for implicit Variant to Date coercion. (2,4E) is used for an explicit CDate(v).

Slots sharing this handler

(2,0x4E) FnCDateVar

Description: draft, by claude-opus-4.7. Handler 0x66109731, dispatch slot 0x66107650, modOpcodes line 950.

FnCDblCy

(2,0x39)emittedhandler #375Conversionconfirmed_msdocs
Type conversion (FnCDblCy).

Performs a VB6 type conversion. Mnemonic does not decompose cleanly into dest/src; see family description and printf template.

Stack: [..., src] -> [..., dest]

When the compiler emits it

Emitted at the boundary of a type-mismatched assignment, argument pass, or coercion.

VB6 source (verified: compiles to this slot)
Public Sub Main()
  Dim a As Currency, c As Double
  c = CDbl(a)
End Sub
Encoding, evidence and notes
Encoding

Encoding: FC 39 (lead byte FC selects table 2), then 0 operand byte(s); total instruction length 2 byte(s).
Operands: none. All inputs come from the evaluation stack or the frame.
Observed: FC39 FnCDblCy

Evidence and notes

Emitted by VB6 SP6 (P-code): yes. Minimal probe: probes\op\2_39_FnCDblCy.

Handler: 0x66109578, unique to this slot (real opcode #375).

Description: draft, by claude-opus-4.7. Handler 0x66109578, dispatch slot 0x661075F8, modOpcodes line 935.

FnCDblR8

(2,0x3A)emittedprimary of 2handler #376Conversionconfirmed_msdocs
Type conversion (FnCDblR8).

Performs a VB6 type conversion. Mnemonic does not decompose cleanly into dest/src; see family description and printf template.

Stack: [..., src] -> [..., dest]

When the compiler emits it

Emitted at the boundary of a type-mismatched assignment, argument pass, or coercion.

VB6 source (verified: compiles to this slot)
Public Sub Main()
  Dim a As Single, c As Double
  c = CDbl(a)
End Sub
Encoding, evidence and notes
Encoding

Encoding: FC 3A (lead byte FC selects table 2), then 0 operand byte(s); total instruction length 2 byte(s).
Operands: none. All inputs come from the evaluation stack or the frame.
Observed: FC3A FnCDblR8

Evidence and notes

Emitted by VB6 SP6 (P-code): yes. Minimal probe: probes\op\2_3A_FnCDblR8.

Handler: 0x66109584, shared by 2 dispatch slots (real opcode #376). This is the primary slot. Other slots: (2,3B) FnCDblR8.

Compile-time slot selection: the compiler picks different slots of this handler for different source types:

  • (2,3A): Dim a As Single, c As Double : c = CDbl(a)
  • (2,3B): Dim a As Double, c As Double : c = CDbl(a)

Finding: Compiler selects this slot for CDbl(<Single>) / CDate(<Single>). (2,3B) is used for Double sources.

Slots sharing this handler

(2,0x3B) FnCDblR8

Description: draft, by claude-opus-4.7. Handler 0x66109584, dispatch slot 0x661075FC, modOpcodes line 936.

FnCDblR8

(2,0x3B)emitteddup of (2,3A)handler #376Conversionconfirmed_handler
(alias) Type conversion (FnCDblR8).

Alias dispatch slot (2, 0x3B) for the canonical FnCDblR8 at (2, 0x3A); semantics are identical.

Performs a VB6 type conversion. Mnemonic does not decompose cleanly into dest/src; see family description and printf template.

Stack: [..., src] -> [..., dest]

When the compiler emits it

Emitted at the boundary of a type-mismatched assignment, argument pass, or coercion.

VB6 source (verified: compiles to this slot)
Public Sub Main()
  Dim a As Double, c As Double
  c = CDbl(a)
End Sub
Encoding, evidence and notes
Encoding

Encoding: FC 3B (lead byte FC selects table 2), then 0 operand byte(s); total instruction length 2 byte(s).
Operands: none. All inputs come from the evaluation stack or the frame.
Observed: FC3B FnCDblR8

Evidence and notes

Emitted by VB6 SP6 (P-code): yes. Minimal probe: probes\op\2_3B_FnCDblR8.

Handler: 0x66109584, shared by 2 dispatch slots (real opcode #376). This is a duplicate slot of (2,3A) FnCDblR8. Other slots: (2,3A) FnCDblR8.

Compile-time slot selection: the compiler picks different slots of this handler for different source types:

  • (2,3A): Dim a As Single, c As Double : c = CDbl(a)
  • (2,3B): Dim a As Double, c As Double : c = CDbl(a)

Finding: Compiler selects this slot for CDbl(<Double>) / CDate(<Double>).

Slots sharing this handler

(2,0x3A) FnCDblR8

Description: draft, by claude-opus-4.7. Handler 0x66109584, dispatch slot 0x66107600, modOpcodes line 937.

FnCDblVar

(2,0x48)emittedhandler #384Conversionconfirmed_msdocs
Type conversion (FnCDblVar).

Performs a VB6 type conversion. Mnemonic does not decompose cleanly into dest/src; see family description and printf template.

Stack: [..., src] -> [..., dest]

When the compiler emits it

Emitted at the boundary of a type-mismatched assignment, argument pass, or coercion.

VB6 source (verified: compiles to this slot)
Public Sub Main()
  Dim a As Variant, c As Double
  c = CDbl(a)
End Sub
Encoding, evidence and notes
Encoding

Encoding: FC 48 (lead byte FC selects table 2), then 0 operand byte(s); total instruction length 2 byte(s).
Operands: none. All inputs come from the evaluation stack or the frame.
Observed: FC48 FnCDblVar

Evidence and notes

Emitted by VB6 SP6 (P-code): yes. Minimal probe: probes\op\2_48_FnCDblVar.

Handler: 0x66109567, unique to this slot (real opcode #384).

Description: draft, by claude-opus-4.7. Handler 0x66109567, dispatch slot 0x66107634, modOpcodes line 945.

FnCIntVar

(2,0x45)emittedhandler #382Conversionconfirmed_msdocs5 corpus hits
Type conversion (FnCIntVar).

Performs a VB6 type conversion. Mnemonic does not decompose cleanly into dest/src; see family description and printf template.

Stack: [..., src] -> [..., dest]

When the compiler emits it

Emitted at the boundary of a type-mismatched assignment, argument pass, or coercion.

VB6 source (verified: compiles to this slot)
Public Sub Main()
  Dim a As Variant, c As Integer
  c = CInt(a)
End Sub
Encoding, evidence and notes
Encoding

Encoding: FC 45 (lead byte FC selects table 2), then 0 operand byte(s); total instruction length 2 byte(s).
Operands: none. All inputs come from the evaluation stack or the frame.
Observed: FC45 FnCIntVar

Examples
CSharpFilters.SetPredictorParams @ 0x441250 | 441272    FC45                  FnCIntVar
CSharpFilters.SetPredictorParams @ 0x441250 | 44127E    FC45                  FnCIntVar
CSharpFilters.SetPredictorParams @ 0x441250 | 44128A    FC45                  FnCIntVar

5 occurrence(s) in PDFStreamDumper.

Evidence and notes

Emitted by VB6 SP6 (P-code): yes. Minimal probe: probes\op\2_45_FnCIntVar.

Handler: 0x661053FF, unique to this slot (real opcode #382).

Corpus: 5 occurrence(s) in PDFStreamDumper_p.exe.

Description: draft, by claude-opus-4.7. Handler 0x661053FF, dispatch slot 0x66107628, modOpcodes line 943.

FnCLngVar

(2,0x46)emittedhandler #383Conversionconfirmed_msdocs19 corpus hits
Type conversion (FnCLngVar).

Performs a VB6 type conversion. Mnemonic does not decompose cleanly into dest/src; see family description and printf template.

Stack: [..., src] -> [..., dest]

When the compiler emits it

Emitted at the boundary of a type-mismatched assignment, argument pass, or coercion.

VB6 source (verified: compiles to this slot)
Public Sub Main()
  Dim a As Variant, c As Long
  c = CLng(a)
End Sub
Encoding, evidence and notes
Encoding

Encoding: FC 46 (lead byte FC selects table 2), then 0 operand byte(s); total instruction length 2 byte(s).
Operands: none. All inputs come from the evaluation stack or the frame.
Observed: FC46 FnCLngVar

Examples
Form1.SleepFor @ 0x43E7AC | 43E7BD    FC46                  FnCLngVar
Form2.lvFunc_DblClick() @ 0x44DF8C | 44DFE7    FC46                  FnCLngVar
Form2.lvFunc_DblClick() @ 0x44DF8C | 44E037    FC46                  FnCLngVar

19 occurrence(s) in PDFStreamDumper.

Evidence and notes

Emitted by VB6 SP6 (P-code): yes. Minimal probe: probes\op\2_46_FnCLngVar.

Handler: 0x66105411, unique to this slot (real opcode #383).

Corpus: 19 occurrence(s) in PDFStreamDumper_p.exe.

Description: draft, by claude-opus-4.7. Handler 0x66105411, dispatch slot 0x6610762C, modOpcodes line 944.

FnCSngCy

(2,0x41)emittedhandler #379Conversionconfirmed_msdocs
Type conversion (FnCSngCy).

Performs a VB6 type conversion. Mnemonic does not decompose cleanly into dest/src; see family description and printf template.

Stack: [..., src] -> [..., dest]

When the compiler emits it

Emitted at the boundary of a type-mismatched assignment, argument pass, or coercion.

VB6 source (verified: compiles to this slot)
Public Sub Main()
  Dim a As Currency, c As Single
  c = CSng(a)
End Sub
Encoding, evidence and notes
Encoding

Encoding: FC 41 (lead byte FC selects table 2), then 0 operand byte(s); total instruction length 2 byte(s).
Operands: none. All inputs come from the evaluation stack or the frame.
Observed: FC41 FnCSngCy

Evidence and notes

Emitted by VB6 SP6 (P-code): yes. Minimal probe: probes\op\2_41_FnCSngCy.

Handler: 0x66109559, unique to this slot (real opcode #379).

Description: draft, by claude-opus-4.7. Handler 0x66109559, dispatch slot 0x66107618, modOpcodes line 939.

FnCSngI2

(2,0x24)not emitteddup of (0,EB)handler #232Conversionconfirmed_msdocs
Type conversion (FnCSngI2).

Performs a VB6 type conversion. Mnemonic does not decompose cleanly into dest/src; see family description and printf template.

Stack: [..., src] -> [..., dest]

When the compiler emits it

Emitted at the boundary of a type-mismatched assignment, argument pass, or coercion.

Encoding, evidence and notes
Encoding

Encoding: FC 24 (lead byte FC selects table 2), then 0 operand byte(s); total instruction length 2 byte(s).
Operands: none. All inputs come from the evaluation stack or the frame.

Evidence and notes

Emitted by VB6 SP6 (P-code): not observed in about 3,070 probe programs. The slot exists in the runtime's dispatch table, but no tested source construct makes the compiler emit it.

Handler: 0x6610526A, shared by 7 dispatch slots (real opcode #232). This is a duplicate slot of (0,EB) CR8I2. Other slots: (0,EB) CR8I2, (2,25) FnCSngI2, (2,2C) FnCSngI2, (2,2D) FnCSngI2, (2,3C) FnCSngI2, (2,3D) FnCSngI2.

Slots sharing this handler

(0,0xEB) CR8I2, (2,0x25) FnCSngI2, (2,0x2C) FnCSngI2, (2,0x2D) FnCSngI2, (2,0x3C) FnCSngI2, (2,0x3D) FnCSngI2

Description: draft, by claude-opus-4.7. Handler 0x6610526A, dispatch slot 0x661075A4, modOpcodes line 845.

FnCSngI2

(2,0x25)not emitteddup of (0,EB)handler #232Conversionconfirmed_handler
(alias) Type conversion (FnCSngI2).

Alias dispatch slot (2, 0x25) for the canonical FnCSngI2 at (2, 0x24); semantics are identical.

Performs a VB6 type conversion. Mnemonic does not decompose cleanly into dest/src; see family description and printf template.

Stack: [..., src] -> [..., dest]

When the compiler emits it

Emitted at the boundary of a type-mismatched assignment, argument pass, or coercion.

Encoding, evidence and notes
Encoding

Encoding: FC 25 (lead byte FC selects table 2), then 0 operand byte(s); total instruction length 2 byte(s).
Operands: none. All inputs come from the evaluation stack or the frame.

Evidence and notes

Emitted by VB6 SP6 (P-code): not observed in about 3,070 probe programs. The slot exists in the runtime's dispatch table, but no tested source construct makes the compiler emit it.

Handler: 0x6610526A, shared by 7 dispatch slots (real opcode #232). This is a duplicate slot of (0,EB) CR8I2. Other slots: (0,EB) CR8I2, (2,24) FnCSngI2, (2,2C) FnCSngI2, (2,2D) FnCSngI2, (2,3C) FnCSngI2, (2,3D) FnCSngI2.

Slots sharing this handler

(0,0xEB) CR8I2, (2,0x24) FnCSngI2, (2,0x2C) FnCSngI2, (2,0x2D) FnCSngI2, (2,0x3C) FnCSngI2, (2,0x3D) FnCSngI2

Description: draft, by claude-opus-4.7. Handler 0x6610526A, dispatch slot 0x661075A8, modOpcodes line 846.

FnCSngI2

(2,0x2C)not emitteddup of (0,EB)handler #232Conversionconfirmed_handler
(alias) Type conversion (FnCSngI2).

Alias dispatch slot (2, 0x2C) for the canonical FnCSngI2 at (2, 0x24); semantics are identical.

Performs a VB6 type conversion. Mnemonic does not decompose cleanly into dest/src; see family description and printf template.

Stack: [..., src] -> [..., dest]

When the compiler emits it

Emitted at the boundary of a type-mismatched assignment, argument pass, or coercion.

Encoding, evidence and notes
Encoding

Encoding: FC 2C (lead byte FC selects table 2), then 0 operand byte(s); total instruction length 2 byte(s).
Operands: none. All inputs come from the evaluation stack or the frame.

Evidence and notes

Emitted by VB6 SP6 (P-code): not observed in about 3,070 probe programs. The slot exists in the runtime's dispatch table, but no tested source construct makes the compiler emit it.

Handler: 0x6610526A, shared by 7 dispatch slots (real opcode #232). This is a duplicate slot of (0,EB) CR8I2. Other slots: (0,EB) CR8I2, (2,24) FnCSngI2, (2,25) FnCSngI2, (2,2D) FnCSngI2, (2,3C) FnCSngI2, (2,3D) FnCSngI2.

Slots sharing this handler

(0,0xEB) CR8I2, (2,0x24) FnCSngI2, (2,0x25) FnCSngI2, (2,0x2D) FnCSngI2, (2,0x3C) FnCSngI2, (2,0x3D) FnCSngI2

Description: draft, by claude-opus-4.7. Handler 0x6610526A, dispatch slot 0x661075C4, modOpcodes line 847.

FnCSngI2

(2,0x2D)not emitteddup of (0,EB)handler #232Conversionconfirmed_handler
(alias) Type conversion (FnCSngI2).

Alias dispatch slot (2, 0x2D) for the canonical FnCSngI2 at (2, 0x24); semantics are identical.

Performs a VB6 type conversion. Mnemonic does not decompose cleanly into dest/src; see family description and printf template.

Stack: [..., src] -> [..., dest]

When the compiler emits it

Emitted at the boundary of a type-mismatched assignment, argument pass, or coercion.

Encoding, evidence and notes
Encoding

Encoding: FC 2D (lead byte FC selects table 2), then 0 operand byte(s); total instruction length 2 byte(s).
Operands: none. All inputs come from the evaluation stack or the frame.

Evidence and notes

Emitted by VB6 SP6 (P-code): not observed in about 3,070 probe programs. The slot exists in the runtime's dispatch table, but no tested source construct makes the compiler emit it.

Handler: 0x6610526A, shared by 7 dispatch slots (real opcode #232). This is a duplicate slot of (0,EB) CR8I2. Other slots: (0,EB) CR8I2, (2,24) FnCSngI2, (2,25) FnCSngI2, (2,2C) FnCSngI2, (2,3C) FnCSngI2, (2,3D) FnCSngI2.

Slots sharing this handler

(0,0xEB) CR8I2, (2,0x24) FnCSngI2, (2,0x25) FnCSngI2, (2,0x2C) FnCSngI2, (2,0x3C) FnCSngI2, (2,0x3D) FnCSngI2

Description: draft, by claude-opus-4.7. Handler 0x6610526A, dispatch slot 0x661075C8, modOpcodes line 848.

FnCSngI2

(2,0x3C)not emitteddup of (0,EB)handler #232Conversionconfirmed_handler
(alias) Type conversion (FnCSngI2).

Alias dispatch slot (2, 0x3C) for the canonical FnCSngI2 at (2, 0x24); semantics are identical.

Performs a VB6 type conversion. Mnemonic does not decompose cleanly into dest/src; see family description and printf template.

Stack: [..., src] -> [..., dest]

When the compiler emits it

Emitted at the boundary of a type-mismatched assignment, argument pass, or coercion.

Encoding, evidence and notes
Encoding

Encoding: FC 3C (lead byte FC selects table 2), then 0 operand byte(s); total instruction length 2 byte(s).
Operands: none. All inputs come from the evaluation stack or the frame.

Evidence and notes

Emitted by VB6 SP6 (P-code): not observed in about 3,070 probe programs. The slot exists in the runtime's dispatch table, but no tested source construct makes the compiler emit it.

Handler: 0x6610526A, shared by 7 dispatch slots (real opcode #232). This is a duplicate slot of (0,EB) CR8I2. Other slots: (0,EB) CR8I2, (2,24) FnCSngI2, (2,25) FnCSngI2, (2,2C) FnCSngI2, (2,2D) FnCSngI2, (2,3D) FnCSngI2.

Slots sharing this handler

(0,0xEB) CR8I2, (2,0x24) FnCSngI2, (2,0x25) FnCSngI2, (2,0x2C) FnCSngI2, (2,0x2D) FnCSngI2, (2,0x3D) FnCSngI2

Description: draft, by claude-opus-4.7. Handler 0x6610526A, dispatch slot 0x66107604, modOpcodes line 849.

FnCSngI2

(2,0x3D)not emitteddup of (0,EB)handler #232Conversionconfirmed_handler
(alias) Type conversion (FnCSngI2).

Alias dispatch slot (2, 0x3D) for the canonical FnCSngI2 at (2, 0x24); semantics are identical.

Performs a VB6 type conversion. Mnemonic does not decompose cleanly into dest/src; see family description and printf template.

Stack: [..., src] -> [..., dest]

When the compiler emits it

Emitted at the boundary of a type-mismatched assignment, argument pass, or coercion.

Encoding, evidence and notes
Encoding

Encoding: FC 3D (lead byte FC selects table 2), then 0 operand byte(s); total instruction length 2 byte(s).
Operands: none. All inputs come from the evaluation stack or the frame.

Evidence and notes

Emitted by VB6 SP6 (P-code): not observed in about 3,070 probe programs. The slot exists in the runtime's dispatch table, but no tested source construct makes the compiler emit it.

Handler: 0x6610526A, shared by 7 dispatch slots (real opcode #232). This is a duplicate slot of (0,EB) CR8I2. Other slots: (0,EB) CR8I2, (2,24) FnCSngI2, (2,25) FnCSngI2, (2,2C) FnCSngI2, (2,2D) FnCSngI2, (2,3C) FnCSngI2.

Slots sharing this handler

(0,0xEB) CR8I2, (2,0x24) FnCSngI2, (2,0x25) FnCSngI2, (2,0x2C) FnCSngI2, (2,0x2D) FnCSngI2, (2,0x3C) FnCSngI2

Description: draft, by claude-opus-4.7. Handler 0x6610526A, dispatch slot 0x66107608, modOpcodes line 850.

FnCSngI4

(2,0x3E)emittedhandler #377Conversionconfirmed_msdocs
Type conversion (FnCSngI4).

Performs a VB6 type conversion. Mnemonic does not decompose cleanly into dest/src; see family description and printf template.

Stack: [..., src] -> [..., dest]

When the compiler emits it

Emitted at the boundary of a type-mismatched assignment, argument pass, or coercion.

VB6 source (verified: compiles to this slot)
Public Sub Main()
  Dim a As Long, c As Single
  c = CSng(a)
End Sub
Encoding, evidence and notes
Encoding

Encoding: FC 3E (lead byte FC selects table 2), then 0 operand byte(s); total instruction length 2 byte(s).
Operands: none. All inputs come from the evaluation stack or the frame.
Observed: FC3E FnCSngI4

Evidence and notes

Emitted by VB6 SP6 (P-code): yes. Minimal probe: probes\op\2_3E_FnCSngI4.

Handler: 0x6610953C, unique to this slot (real opcode #377).

Description: draft, by claude-opus-4.7. Handler 0x6610953C, dispatch slot 0x6610760C, modOpcodes line 938.

FnCSngStr

(2,0x43)emitteddup of (2,2B)handler #370Conversionconfirmed_msdocs
Type conversion (FnCSngStr).

Performs a VB6 type conversion. Mnemonic does not decompose cleanly into dest/src; see family description and printf template.

Stack: [..., src] -> [..., dest]

When the compiler emits it

Emitted at the boundary of a type-mismatched assignment, argument pass, or coercion.

VB6 source (verified: compiles to this slot)
Public Sub Main()
  Dim a As String, c As Single
  c = CSng(a)
End Sub
Encoding, evidence and notes
Encoding

Encoding: FC 43 (lead byte FC selects table 2), then 0 operand byte(s); total instruction length 2 byte(s).
Operands: none. All inputs come from the evaluation stack or the frame.
Observed: FC43 FnCSngStr

Evidence and notes

Emitted by VB6 SP6 (P-code): yes. Minimal probe: probes\op\2_43_FnCSngStr.

Handler: 0x661053E4, shared by 2 dispatch slots (real opcode #370). This is a duplicate slot of (2,2B) CR4Str. Other slots: (2,2B) CR4Str.

Compile-time slot selection: the compiler picks different slots of this handler for different source types:

  • (2,2B): Dim a As String, c As Single : c = a
  • (2,43): Dim a As String, c As Single : c = CSng(a)
Slots sharing this handler

(2,0x2B) CR4Str

Description: draft, by claude-opus-4.7. Handler 0x661053E4, dispatch slot 0x66107620, modOpcodes line 941.

FnCSngVar

(2,0x42)emittedhandler #380Conversionconfirmed_msdocs
Type conversion (FnCSngVar).

Performs a VB6 type conversion. Mnemonic does not decompose cleanly into dest/src; see family description and printf template.

Stack: [..., src] -> [..., dest]

When the compiler emits it

Emitted at the boundary of a type-mismatched assignment, argument pass, or coercion.

VB6 source (verified: compiles to this slot)
Public Sub Main()
  Dim a As Variant, c As Single
  c = CSng(a)
End Sub
Encoding, evidence and notes
Encoding

Encoding: FC 42 (lead byte FC selects table 2), then 0 operand byte(s); total instruction length 2 byte(s).
Operands: none. All inputs come from the evaluation stack or the frame.
Observed: FC42 FnCSngVar

Evidence and notes

Emitted by VB6 SP6 (P-code): yes. Minimal probe: probes\op\2_42_FnCSngVar.

Handler: 0x66109552, unique to this slot (real opcode #380).

Description: draft, by claude-opus-4.7. Handler 0x66109552, dispatch slot 0x6610761C, modOpcodes line 940.

FnCStrVar

(2,0x4B)emittedhandler #386Conversionconfirmed_msdocs14 corpus hits
Type conversion (FnCStrVar).

Performs a VB6 type conversion. Mnemonic does not decompose cleanly into dest/src; see family description and printf template.

Stack: [..., src] -> [..., dest]

When the compiler emits it

Emitted at the boundary of a type-mismatched assignment, argument pass, or coercion.

VB6 source (verified: compiles to this slot)
Public Sub Main()
  Dim a As Variant, c As String
  c = CStr(a)
End Sub
Encoding, evidence and notes
Encoding

Encoding: FC 4B (lead byte FC selects table 2), then 0 operand byte(s); total instruction length 2 byte(s).
Operands: none. All inputs come from the evaluation stack or the frame.
Observed: FC4B FnCStrVar

Examples
fso.Proc_444A2C @ 0x444A2C | 444A9F    FC4B                  FnCStrVar
fso.Proc_4454EC @ 0x4454EC | 44555F    FC4B                  FnCStrVar
fso.Proc_449A54 @ 0x449A54 | 449B03    FC4B                  FnCStrVar

14 occurrence(s) in PDFStreamDumper.

Evidence and notes

Emitted by VB6 SP6 (P-code): yes. Minimal probe: probes\op\2_4B_FnCStrVar.

Handler: 0x66109767, unique to this slot (real opcode #386).

Corpus: 14 occurrence(s) in PDFStreamDumper_p.exe.

Description: draft, by claude-opus-4.7. Handler 0x66109767, dispatch slot 0x66107640, modOpcodes line 947.

HardType

(0,0x5D)emittedprimary of 2handler #91Conversionconfirmed_msdocs302 corpus hits
Type conversion (HardType).

Performs a VB6 type conversion. Mnemonic does not decompose cleanly into dest/src; see family description and printf template.

Stack: [..., src] -> [..., dest]

When the compiler emits it

Emitted at the boundary of a type-mismatched assignment, argument pass, or coercion.

VB6 source (verified: compiles to this slot)
Public Sub Main()
  Dim a As Variant, n As Long
  Select Case a
    Case "a" To "f": n = 1
  End Select
End Sub
Encoding, evidence and notes
Encoding

Encoding: 5D, then 0 operand byte(s); total instruction length 1 byte(s).
Operands: none. All inputs come from the evaluation stack or the frame.
Observed: 5D HardType

Examples
Form1.mnuHelp_Event_0 @ 0x45A2C0 | 45A308    5D                    HardType
Form1.mnuHelp_Event_0 @ 0x45A2C0 | 45A31B    5D                    HardType
Form1.mnuHelp_Event_0 @ 0x45A2C0 | 45A376    5D                    HardType

302 occurrence(s) in PDFStreamDumper.

Evidence and notes

Emitted by VB6 SP6 (P-code): yes. Minimal probe: probes\op\0_5D_HardType.

Handler: 0x661054CF, shared by 2 dispatch slots (real opcode #91). This is the primary slot. Other slots: (3,02) HardType.

Corpus: 302 occurrence(s) in PDFStreamDumper_p.exe.

Slots sharing this handler

(3,0x02) HardType

Description: draft, by claude-opus-4.7. Handler 0x661054CF, dispatch slot 0x66106E88, modOpcodes line 463.

HardType

(3,0x02)not emitteddup of (0,5D)handler #91Conversionconfirmed_handler
(alias) Type conversion (HardType).

Alias dispatch slot (3, 0x02) for the canonical HardType at (0, 0x5D); semantics are identical.

Performs a VB6 type conversion. Mnemonic does not decompose cleanly into dest/src; see family description and printf template.

Stack: [..., src] -> [..., dest]

When the compiler emits it

Emitted at the boundary of a type-mismatched assignment, argument pass, or coercion.

Encoding, evidence and notes
Encoding

Encoding: FD 02 (lead byte FD selects table 3), then 0 operand byte(s); total instruction length 2 byte(s).
Operands: none. All inputs come from the evaluation stack or the frame.

Evidence and notes

Emitted by VB6 SP6 (P-code): not observed in about 3,070 probe programs. The slot exists in the runtime's dispatch table, but no tested source construct makes the compiler emit it.

Handler: 0x661054CF, shared by 2 dispatch slots (real opcode #91). This is a duplicate slot of (0,5D) HardType. Other slots: (0,5D) HardType.

Slots sharing this handler

(0,0x5D) HardType

Description: draft, by claude-opus-4.7. Handler 0x661054CF, dispatch slot 0x6610791C, modOpcodes line 464.

Compare_Between

Between range comparison

BetweenCy

(1,0x89)emittedhandler #313Currencyconfirmed_msdocs
Case lo To hi range test on a Currency selector; push Boolean.

Inclusive range test for a Case lo To hi clause. Pops the upper and lower bounds and the selector value, and pushes True if lo <= value <= hi.

Stack: [..., v:Cy, lo:Cy, hi:Cy] -> [..., (lo<=v<=hi):Bool]

When the compiler emits it

Emitted for each Case lo To hi clause of a Select Case whose selector is Currency selector.

VB6 source (verified: compiles to this slot)
Public Sub Main()
  Dim a As Currency, n As Long
  Select Case a + 1
    Case 3 To 5: n = 2
  End Select
End Sub
Encoding, evidence and notes
Encoding

Encoding: FB 89 (lead byte FB selects table 1), then 0 operand byte(s); total instruction length 2 byte(s).
Operands: none. All inputs come from the evaluation stack or the frame.
Observed: FB89 BetweenCy

Evidence and notes

Emitted by VB6 SP6 (P-code): yes. Minimal probe: probes\op\1_89_BetweenCy.

Handler: 0x661093E2, unique to this slot (real opcode #313).

Check of vb6_source_eq example: verified: compiles and emits this slot.

Example from the description
Dim c As Currency, r As Long
  c = 4
  Select Case c
    Case 3 To 5: r = 1
  End Select

Description: draft, by claude-opus-5-5. Handler 0x661093E2, dispatch slot 0x66107338, modOpcodes line 1562.

BetweenI2

(1,0x85)emittedhandler #310Integerconfirmed_msdocs
Case lo To hi range test on a Integer selector; push Boolean.

Inclusive range test for a Case lo To hi clause. Pops the upper and lower bounds and the selector value, and pushes True if lo <= value <= hi.

Stack: [..., v:I2, lo:I2, hi:I2] -> [..., (lo<=v<=hi):Bool]

When the compiler emits it

Emitted for each Case lo To hi clause of a Select Case whose selector is Integer or Boolean selector (also Byte arithmetic, which VB types as Integer).

VB6 source (verified: compiles to this slot)
Public Sub Main()
  Dim a As Boolean, n As Long
  Select Case a + 1
    Case 3 To 5: n = 2
  End Select
End Sub
Encoding, evidence and notes
Encoding

Encoding: FB 85 (lead byte FB selects table 1), then 0 operand byte(s); total instruction length 2 byte(s).
Operands: none. All inputs come from the evaluation stack or the frame.
Observed: FB85 BetweenI2

Evidence and notes

Emitted by VB6 SP6 (P-code): yes. Minimal probe: probes\op\1_85_BetweenI2.

Handler: 0x66109387, unique to this slot (real opcode #310).

Check of vb6_source_eq example: verified: compiles and emits this slot.

Example from the description
Dim n As Integer, r As Long
  n = 4
  Select Case n
    Case 3 To 5: r = 1
  End Select

Description: draft, by claude-opus-5-5. Handler 0x66109387, dispatch slot 0x66107328, modOpcodes line 1558.

BetweenI4

(1,0x86)emittedhandler #311Integerconfirmed_msdocs
Case lo To hi range test on a Long selector; push Boolean.

Inclusive range test for a Case lo To hi clause. Pops the upper and lower bounds and the selector value, and pushes True if lo <= value <= hi.

Stack: [..., v:I4, lo:I4, hi:I4] -> [..., (lo<=v<=hi):Bool]

When the compiler emits it

Emitted for each Case lo To hi clause of a Select Case whose selector is Long selector.

VB6 source (verified: compiles to this slot)
Public Sub Main()
  Dim a As Long, n As Long
  Select Case a + 1
    Case 3 To 5: n = 2
  End Select
End Sub
Encoding, evidence and notes
Encoding

Encoding: FB 86 (lead byte FB selects table 1), then 0 operand byte(s); total instruction length 2 byte(s).
Operands: none. All inputs come from the evaluation stack or the frame.
Observed: FB86 BetweenI4

Evidence and notes

Emitted by VB6 SP6 (P-code): yes. Minimal probe: probes\op\1_86_BetweenI4.

Handler: 0x661093A9, unique to this slot (real opcode #311).

Check of vb6_source_eq example: verified: compiles and emits this slot.

Example from the description
Dim n As Long, r As Long
  n = 4
  Select Case n
    Case 3 To 5: r = 1
  End Select

Description: draft, by claude-opus-5-5. Handler 0x661093A9, dispatch slot 0x6610732C, modOpcodes line 1559.

BetweenR4

(1,0x87)emittedprimary of 2handler #312Floating pointconfirmed_msdocs
Case lo To hi range test on a Single selector; push Boolean.

Inclusive range test for a Case lo To hi clause. Pops the upper and lower bounds and the selector value, and pushes True if lo <= value <= hi.

Stack: [..., v:R4, lo:R4, hi:R4] -> [..., (lo<=v<=hi):Bool]

When the compiler emits it

Emitted for each Case lo To hi clause of a Select Case whose selector is Single selector. Double and Date selectors use (1,88), which shares the handler.

VB6 source (verified: compiles to this slot)
Public Sub Main()
  Dim a As Single, n As Long
  Select Case a + 1
    Case 3 To 5: n = 2
  End Select
End Sub
Encoding, evidence and notes
Encoding

Encoding: FB 87 (lead byte FB selects table 1), then 0 operand byte(s); total instruction length 2 byte(s).
Operands: none. All inputs come from the evaluation stack or the frame.
Observed: FB87 BetweenR4

Evidence and notes

Emitted by VB6 SP6 (P-code): yes. Minimal probe: probes\op\1_87_BetweenR4.

Handler: 0x661093B4, shared by 2 dispatch slots (real opcode #312). This is the primary slot. Other slots: (1,88) BetweenR4.

Compile-time slot selection: the compiler picks different slots of this handler for different source types:

  • (1,87): Dim a As Single, n As Long : Select Case a + 1 : Case 3 To 5: n = 2 : End Select
  • (1,88): Dim a As Double, n As Long : Select Case a + 1 : Case 3 To 5: n = 2 : End Select

Finding: Compiler selects this slot for Case a To b on a Single selector. (1,88) is used for Double/Date.

Check of vb6_source_eq example: verified: compiles and emits this slot.

Example from the description
Dim x As Single, r As Long
  x = 4
  Select Case x
    Case 3 To 5: r = 1
  End Select
Slots sharing this handler

(1,0x88) BetweenR4

Description: draft, by claude-opus-5-5. Handler 0x661093B4, dispatch slot 0x66107330, modOpcodes line 1560.

BetweenR4

(1,0x88)emitteddup of (1,87)handler #312Floating pointconfirmed_handler
Case lo To hi range test on a Double selector; push Boolean.

Inclusive range test for a Case lo To hi clause. Pops the upper and lower bounds and the selector value, and pushes True if lo <= value <= hi.

Stack: [..., v:R8, lo:R8, hi:R8] -> [..., (lo<=v<=hi):Bool]

When the compiler emits it

Emitted for each Case lo To hi clause of a Select Case whose selector is Double or Date selector. The slot is named BetweenR4 (alias of (1,87)), but the compiler uses it for Double.

VB6 source (verified: compiles to this slot)
Public Sub Main()
  Dim a As Double, n As Long
  Select Case a + 1
    Case 3 To 5: n = 2
  End Select
End Sub
Encoding, evidence and notes
Encoding

Encoding: FB 88 (lead byte FB selects table 1), then 0 operand byte(s); total instruction length 2 byte(s).
Operands: none. All inputs come from the evaluation stack or the frame.
Observed: FB88 BetweenR4

Evidence and notes

Emitted by VB6 SP6 (P-code): yes. Minimal probe: probes\op\1_88_BetweenR4.

Handler: 0x661093B4, shared by 2 dispatch slots (real opcode #312). This is a duplicate slot of (1,87) BetweenR4. Other slots: (1,87) BetweenR4.

Compile-time slot selection: the compiler picks different slots of this handler for different source types:

  • (1,87): Dim a As Single, n As Long : Select Case a + 1 : Case 3 To 5: n = 2 : End Select
  • (1,88): Dim a As Double, n As Long : Select Case a + 1 : Case 3 To 5: n = 2 : End Select

Finding: Compiler selects this slot for Case a To b on a Double or Date selector. Effective meaning: BetweenR8.

Check of vb6_source_eq example: verified: compiles and emits this slot.

Example from the description
Dim x As Double, r As Long
  x = 4
  Select Case x
    Case 3 To 5: r = 1
  End Select
Slots sharing this handler

(1,0x87) BetweenR4

Description: draft, by claude-opus-5-5. Handler 0x661093B4, dispatch slot 0x66107334, modOpcodes line 1561.

BetweenStr

(1,0x8B)emittedhandler #315Stringconfirmed_msdocs
Case lo To hi range test on a String selector; push Boolean.

Inclusive range test for a Case lo To hi clause. Pops the upper and lower bounds and the selector value, and pushes True if lo <= value <= hi.

Stack: [..., v:Str, lo:Str, hi:Str] -> [..., (lo<=v<=hi):Bool]

When the compiler emits it

Emitted for each Case lo To hi clause of a Select Case whose selector is String selector, binary comparison.

VB6 source (verified: compiles to this slot)
Public Sub Main()
  Dim a As String, n As Long
  Select Case a
    Case "a" To "f": n = 1
  End Select
End Sub
Encoding, evidence and notes
Encoding

Encoding: FB 8B (lead byte FB selects table 1), then 0 operand byte(s); total instruction length 2 byte(s).
Operands: none. All inputs come from the evaluation stack or the frame.
Observed: FB8B BetweenStr

Evidence and notes

Emitted by VB6 SP6 (P-code): yes. Minimal probe: probes\op\1_8B_BetweenStr.

Handler: 0x6610942D, unique to this slot (real opcode #315).

Check of vb6_source_eq example: verified: compiles and emits this slot.

Example from the description
Dim s As String, r As Long
  s = "c"
  Select Case s
    Case "a" To "f": r = 1
  End Select

Description: draft, by claude-opus-5-5. Handler 0x6610942D, dispatch slot 0x66107340, modOpcodes line 1564.

BetweenTextStr

(1,0x8D)emittedhandler #317Stringconfirmed_msdocs
Case lo To hi range test on a String selector; push Boolean.

Inclusive range test for a Case lo To hi clause. Pops the upper and lower bounds and the selector value, and pushes True if lo <= value <= hi.

Stack: [..., v:Str, lo:Str, hi:Str] -> [..., (lo<=v<=hi):Bool]

When the compiler emits it

Emitted for each Case lo To hi clause of a Select Case whose selector is String selector under Option Compare Text (case-insensitive).

VB6 source (verified: compiles to this slot)
Option Compare Text

Public Sub Main()
  Dim a As String, n As Long
  Select Case a
    Case "a" To "f": n = 1
  End Select
End Sub
Encoding, evidence and notes
Encoding

Encoding: FB 8D (lead byte FB selects table 1), then 0 operand byte(s); total instruction length 2 byte(s).
Operands: none. All inputs come from the evaluation stack or the frame.
Observed: FB8D BetweenTextStr

Evidence and notes

Emitted by VB6 SP6 (P-code): yes. Minimal probe: probes\op\1_8D_BetweenTextStr.

Handler: 0x66109403, unique to this slot (real opcode #317).

Check of vb6_source_eq example: verified: compiles and emits this slot.

Example from the description
Option Compare Text
Sub Main()
  Dim s As String, r As Long
  s = "c"
  Select Case s
    Case "a" To "f": r = 1
  End Select
End Sub

Description: draft, by claude-opus-5-5. Handler 0x66109403, dispatch slot 0x66107348, modOpcodes line 1566.

BetweenTextVar

(1,0x8C)emittedhandler #316Variantconfirmed_msdocs
Case lo To hi range test on a Variant selector; push Boolean.

Inclusive range test for a Case lo To hi clause. Pops the upper and lower bounds and the selector value, and pushes True if lo <= value <= hi.

Stack: [..., v:Var, lo:Var, hi:Var] -> [..., (lo<=v<=hi):Bool]

When the compiler emits it

Emitted for each Case lo To hi clause of a Select Case whose selector is Variant selector under Option Compare Text. Without it BetweenVar (1,8A) is used.

VB6 source (verified: compiles to this slot)
Option Compare Text

Public Sub Main()
  Dim a As Variant, n As Long
  Select Case a
    Case "a" To "f": n = 1
  End Select
End Sub
Encoding, evidence and notes
Encoding

Encoding: FB 8C (lead byte FB selects table 1), then 0 operand byte(s); total instruction length 2 byte(s).
Operands: none. All inputs come from the evaluation stack or the frame.
Observed: FB8C BetweenTextVar

Evidence and notes

Emitted by VB6 SP6 (P-code): yes. Minimal probe: probes\op\1_8C_BetweenTextVar.

Handler: 0x66109434, unique to this slot (real opcode #316).

Check of vb6_source_eq example: verified: compiles and emits this slot.

Example from the description
Option Compare Text
Sub Main()
  Dim v As Variant, r As Long
  v = "c"
  Select Case v
    Case "a" To "f": r = 1
  End Select
End Sub

Description: draft, by claude-opus-5-5. Handler 0x66109434, dispatch slot 0x66107344, modOpcodes line 1565.

BetweenUI1

(1,0x84)emittedhandler #309Integerconfirmed_msdocs
Case lo To hi range test on a Byte selector; push Boolean.

Inclusive range test for a Case lo To hi clause. Pops the upper and lower bounds and the selector value, and pushes True if lo <= value <= hi.

Stack: [..., v:UI1, lo:UI1, hi:UI1] -> [..., (lo<=v<=hi):Bool]

When the compiler emits it

Emitted for each Case lo To hi clause of a Select Case whose selector is Byte selector. A Byte expression such as b + 1 is Integer-typed and uses BetweenI2.

VB6 source (verified: compiles to this slot)
Public Sub Main()
  Dim a As Byte, n As Long
  Select Case a
    Case 3 To 5: n = 2
  End Select
End Sub
Encoding, evidence and notes
Encoding

Encoding: FB 84 (lead byte FB selects table 1), then 0 operand byte(s); total instruction length 2 byte(s).
Operands: none. All inputs come from the evaluation stack or the frame.
Observed: FB84 BetweenUI1

Evidence and notes

Emitted by VB6 SP6 (P-code): yes. Minimal probe: probes\op\1_84_BetweenUI1.

Handler: 0x66109369, unique to this slot (real opcode #309).

Check of vb6_source_eq example: verified: compiles and emits this slot.

Example from the description
Dim b As Byte, r As Long
  b = 4
  Select Case b
    Case 3 To 5: r = 1
  End Select

Description: draft, by claude-opus-5-5. Handler 0x66109369, dispatch slot 0x66107324, modOpcodes line 1557.

BetweenVar

(1,0x8A)emittedhandler #314Variantconfirmed_msdocs
Pop three values (val, lo, hi); push True if lo <= val <= hi, else False.

Implements the inclusive range test used by Select Case lo To hi clauses.

Stack: [..., val:T, lo:T, hi:T] -> [..., (lo<=val<=hi):Bool]

When the compiler emits it

Emitted exclusively for Select Case ... To ... clauses. Suffix matches the case expression's type.

VB6 source (verified: compiles to this slot)
Public Sub Main()
  Dim a As Variant, n As Long
  Select Case a
    Case "a" To "f": n = 1
  End Select
End Sub
Encoding, evidence and notes
Encoding

Encoding: FB 8A (lead byte FB selects table 1), then 0 operand byte(s); total instruction length 2 byte(s).
Operands: none. All inputs come from the evaluation stack or the frame.
Observed: FB8A BetweenVar

Evidence and notes

Emitted by VB6 SP6 (P-code): yes. Minimal probe: probes\op\1_8A_BetweenVar.

Handler: 0x6610946E, unique to this slot (real opcode #314).

Check of vb6_source_eq example: verified: compiles and emits this slot.

Example from the description
Select Case x
    Case lo To hi
        ' ...
End Select

Description: draft, by claude-opus-4.7. Handler 0x6610946E, dispatch slot 0x6610733C, modOpcodes line 1563.

Compare_Eq

Equal-to comparison

EqCy

(0,0xC9)emittedprimary of 2handler #198Currencyconfirmed_msdocs
Compare two values with =; push Boolean result.

Pops two 64-bit scaled-integer Currency (×10^4) operands b and a (top is b), pushes (a = b) as a I2 result.

Stack: [..., a:Cy, b:Cy] -> [..., (a = b):I2]

When the compiler emits it

Emitted for = when both operands are statically typed Cy. Other type pairings select the matching suffix variant (EqI2/EqI4/EqR8/EqStr/EqVar).

VB6 source (verified: compiles to this slot)
Public Sub Main()
  Dim a As Currency, b As Currency, c As Boolean
  c = (a = b)
End Sub
Encoding, evidence and notes
Encoding

Encoding: C9, then 0 operand byte(s); total instruction length 1 byte(s).
Operands: none. All inputs come from the evaluation stack or the frame.
Observed: C9 EqCy

Evidence and notes

Emitted by VB6 SP6 (P-code): yes. Minimal probe: probes\op\0_C9_EqCy.

Handler: 0x6610C0E2, shared by 2 dispatch slots (real opcode #198). This is the primary slot. Other slots: (1,2E) EqCy.

Check of vb6_source_eq example: verified: compiles and emits this slot.

Example from the description
Dim a As Currency, b As Currency, c As Boolean
c = (a = b)
Slots sharing this handler

(1,0x2E) EqCy

Description: draft, by claude-opus-4.7. Handler 0x6610C0E2, dispatch slot 0x66107038, modOpcodes line 1477.

EqCy

(1,0x2E)not emitteddup of (0,C9)handler #198Currencyconfirmed_handler
(alias) Compare two values with =; push Boolean result.

Alias dispatch slot (1, 0x2E) for the canonical EqCy at (0, 0xC9); semantics are identical.

Pops two 64-bit scaled-integer Currency (×10^4) operands b and a (top is b), pushes (a = b) as a I2 result.

Stack: [..., a:Cy, b:Cy] -> [..., (a = b):I2]

When the compiler emits it

Emitted for = when both operands are statically typed Cy. Other type pairings select the matching suffix variant (EqI2/EqI4/EqR8/EqStr/EqVar).

VB6 source (from description, not verified)
Dim a As Currency, b As Currency, c As Boolean
c = (a = b)
Encoding, evidence and notes
Encoding

Encoding: FB 2E (lead byte FB selects table 1), then 0 operand byte(s); total instruction length 2 byte(s).
Operands: none. All inputs come from the evaluation stack or the frame.

Evidence and notes

Emitted by VB6 SP6 (P-code): not observed in about 3,070 probe programs. The slot exists in the runtime's dispatch table, but no tested source construct makes the compiler emit it.

Handler: 0x6610C0E2, shared by 2 dispatch slots (real opcode #198). This is a duplicate slot of (0,C9) EqCy. Other slots: (0,C9) EqCy.

Check of vb6_source_eq example: compiles, but emits a different slot of the same handler. emits (0,C9) EqCy (same handler, different slot)

Slots sharing this handler

(0,0xC9) EqCy

Description: draft, by claude-opus-4.7. Handler 0x6610C0E2, dispatch slot 0x661071CC, modOpcodes line 1484.

EqCyR8

(0,0xCA)emittedprimary of 2handler #199Currencyconfirmed_msdocs
Compare a Currency with a non-Currency number using =; push Boolean.

Pops the Currency operand and compares it with the floating-point operand (ST0), pushing the Boolean result (-1/0).

Stack: [..., c:Cy, x:R8 (ST0)] -> [..., (c = x):Bool]

When the compiler emits it

Emitted when one operand of = is Currency and the other is Integer, Long, Single, Double or a numeric literal (Currency = Currency uses EqCy). If the Currency is on the right, the compiler swaps the operands and mirrors the operator: n <= c compiles to GeCyR8.

VB6 source (verified: compiles to this slot)
Public Sub Main()
  Dim a As Currency, b As Single, c As Variant
  c = a = b
End Sub
Encoding, evidence and notes
Encoding

Encoding: CA, then 0 operand byte(s); total instruction length 1 byte(s).
Operands: none. All inputs come from the evaluation stack or the frame.
Observed: CA EqCyR8

Evidence and notes

Emitted by VB6 SP6 (P-code): yes. Minimal probe: probes\op\0_CA_EqCyR8.

Handler: 0x6610C0EC, shared by 2 dispatch slots (real opcode #199). This is the primary slot. Other slots: (1,35) EqCyR8.

Check of vb6_source_eq example: verified: compiles and emits this slot.

Example from the description
Dim c As Currency, d As Double, b As Boolean
b = (c = d)
Slots sharing this handler

(1,0x35) EqCyR8

Description: draft, by claude-opus-5-5. Handler 0x6610C0EC, dispatch slot 0x6610703C, modOpcodes line 1478.

EqCyR8

(1,0x35)not emitteddup of (0,CA)handler #199Currencyconfirmed_handler
(duplicate slot of (0,CA) EqCyR8) Compare a Currency with a non-Currency number using =; push Boolean.

Dispatch slot (1, 0x35) runs the same MSVBVM60 handler as (0,CA) EqCyR8; runtime behaviour is identical.

Pops the Currency operand and compares it with the floating-point operand (ST0), pushing the Boolean result (-1/0).

Stack: [..., c:Cy, x:R8 (ST0)] -> [..., (c = x):Bool]

When the compiler emits it

Not emitted by VB6 SP6 in Phase 4 probes. Source that performs this operation (Currency = non-Currency) compiles to (0,CA) EqCyR8 instead. The slot is reachable only by hand-crafted or non-VB6-compiled p-code.

Encoding, evidence and notes
Encoding

Encoding: FB 35 (lead byte FB selects table 1), then 0 operand byte(s); total instruction length 2 byte(s).
Operands: none. All inputs come from the evaluation stack or the frame.

Evidence and notes

Emitted by VB6 SP6 (P-code): not observed in about 3,070 probe programs. The slot exists in the runtime's dispatch table, but no tested source construct makes the compiler emit it.

Handler: 0x6610C0EC, shared by 2 dispatch slots (real opcode #199). This is a duplicate slot of (0,CA) EqCyR8. Other slots: (0,CA) EqCyR8.

Slots sharing this handler

(0,0xCA) EqCyR8

Description: draft, by claude-opus-5-5. Handler 0x6610C0EC, dispatch slot 0x661071E8, modOpcodes line 1489.

EqI2

(0,0xC6)emittedprimary of 3handler #195Integerconfirmed_msdocs209 corpus hits
Compare two values with =; push Boolean result.

Pops two 16-bit signed integer (VB6 Integer) operands b and a (top is b), pushes (a = b) as a I2 result.

Stack: [..., a:I2, b:I2] -> [..., (a = b):I2]

When the compiler emits it

Emitted for = when both operands are statically typed I2. Other type pairings select the matching suffix variant (EqI2/EqI4/EqR8/EqStr/EqVar).

VB6 source (verified: compiles to this slot)
Public Sub Main()
  Dim a As Boolean, b As Boolean, c As Boolean
  c = (a = b)
End Sub
Encoding, evidence and notes
Encoding

Encoding: C6, then 0 operand byte(s); total instruction length 1 byte(s).
Operands: none. All inputs come from the evaluation stack or the frame.
Observed: C6 EqI2

Examples
Form1.lvSearch_MouseUp(ByVal Button As Integer, ByVal Shift As Integer, ByVal x As Long, ByVal y As Long) @ 0x43F1A8 | 43F1AD    C6                    EqI2
Form1.mnuPluginList_Event_0 @ 0x44C3D4 | 44C3D9    C6                    EqI2
Form1.lv_KeyDown(ByRef KeyCode As Integer, ByVal Shift As Integer) @ 0x456764 | 456769    C6                    EqI2

209 occurrence(s) in PDFStreamDumper.

Evidence and notes

Emitted by VB6 SP6 (P-code): yes. Minimal probe: probes\op\0_C6_EqI2.

Handler: 0x6610697C, shared by 3 dispatch slots (real opcode #195). This is the primary slot. Other slots: (1,29) EqI2, (1,2A) EqI2.

Check of vb6_source_eq example: verified: compiles and emits this slot.

Corpus: 209 occurrence(s) in PDFStreamDumper_p.exe.

Example from the description
Dim a As Integer, b As Integer, c As Boolean
c = (a = b)
Slots sharing this handler

(1,0x29) EqI2, (1,0x2A) EqI2

Description: draft, by claude-opus-4.7. Handler 0x6610697C, dispatch slot 0x6610702C, modOpcodes line 1474.

EqI2

(1,0x29)not emitteddup of (0,C6)handler #195Integerconfirmed_handler
(alias) Compare two values with =; push Boolean result.

Alias dispatch slot (1, 0x29) for the canonical EqI2 at (0, 0xC6); semantics are identical.

Pops two 16-bit signed integer (VB6 Integer) operands b and a (top is b), pushes (a = b) as a I2 result.

Stack: [..., a:I2, b:I2] -> [..., (a = b):I2]

When the compiler emits it

Emitted for = when both operands are statically typed I2. Other type pairings select the matching suffix variant (EqI2/EqI4/EqR8/EqStr/EqVar).

VB6 source (from description, not verified)
Dim a As Integer, b As Integer, c As Boolean
c = (a = b)
Encoding, evidence and notes
Encoding

Encoding: FB 29 (lead byte FB selects table 1), then 0 operand byte(s); total instruction length 2 byte(s).
Operands: none. All inputs come from the evaluation stack or the frame.

Evidence and notes

Emitted by VB6 SP6 (P-code): not observed in about 3,070 probe programs. The slot exists in the runtime's dispatch table, but no tested source construct makes the compiler emit it.

Handler: 0x6610697C, shared by 3 dispatch slots (real opcode #195). This is a duplicate slot of (0,C6) EqI2. Other slots: (0,C6) EqI2, (1,2A) EqI2.

Check of vb6_source_eq example: compiles, but emits a different slot of the same handler. emits (0,C6) EqI2 (same handler, different slot)

Slots sharing this handler

(0,0xC6) EqI2, (1,0x2A) EqI2

Description: draft, by claude-opus-4.7. Handler 0x6610697C, dispatch slot 0x661071B8, modOpcodes line 1479.

EqI2

(1,0x2A)not emitteddup of (0,C6)handler #195Integerconfirmed_handler
(alias) Compare two values with =; push Boolean result.

Alias dispatch slot (1, 0x2A) for the canonical EqI2 at (0, 0xC6); semantics are identical.

Pops two 16-bit signed integer (VB6 Integer) operands b and a (top is b), pushes (a = b) as a I2 result.

Stack: [..., a:I2, b:I2] -> [..., (a = b):I2]

When the compiler emits it

Emitted for = when both operands are statically typed I2. Other type pairings select the matching suffix variant (EqI2/EqI4/EqR8/EqStr/EqVar).

VB6 source (from description, not verified)
Dim a As Integer, b As Integer, c As Boolean
c = (a = b)
Encoding, evidence and notes
Encoding

Encoding: FB 2A (lead byte FB selects table 1), then 0 operand byte(s); total instruction length 2 byte(s).
Operands: none. All inputs come from the evaluation stack or the frame.

Evidence and notes

Emitted by VB6 SP6 (P-code): not observed in about 3,070 probe programs. The slot exists in the runtime's dispatch table, but no tested source construct makes the compiler emit it.

Handler: 0x6610697C, shared by 3 dispatch slots (real opcode #195). This is a duplicate slot of (0,C6) EqI2. Other slots: (0,C6) EqI2, (1,29) EqI2.

Check of vb6_source_eq example: compiles, but emits a different slot of the same handler. emits (0,C6) EqI2 (same handler, different slot)

Slots sharing this handler

(0,0xC6) EqI2, (1,0x29) EqI2

Description: draft, by claude-opus-4.7. Handler 0x6610697C, dispatch slot 0x661071BC, modOpcodes line 1480.

EqI4

(0,0xC7)emittedprimary of 2handler #196Integerconfirmed_msdocs234 corpus hits
Compare two values with =; push Boolean result.

Pops two 32-bit signed integer (VB6 Long) operands b and a (top is b), pushes (a = b) as a I2 result.

Stack: [..., a:I4, b:I4] -> [..., (a = b):I2]

When the compiler emits it

Emitted for = when both operands are statically typed I4. Other type pairings select the matching suffix variant (EqI2/EqI4/EqR8/EqStr/EqVar).

VB6 source (verified: compiles to this slot)
Public Sub Main()
  Dim a As Long, b As Long, c As Boolean
  c = (a = b)
End Sub
Encoding, evidence and notes
Encoding

Encoding: C7, then 0 operand byte(s); total instruction length 1 byte(s).
Operands: none. All inputs come from the evaluation stack or the frame.
Observed: C7 EqI4

Examples
Form1.LoadPlugins @ 0x4644FC | 4646B1    C7                    EqI4
Form1.LoadPlugins @ 0x4644FC | 4646DC    C7                    EqI4
Form1.mnuB64Clipboard_Click @ 0x44E37C | 44E3B6    C7                    EqI4

234 occurrence(s) in PDFStreamDumper.

Evidence and notes

Emitted by VB6 SP6 (P-code): yes. Minimal probe: probes\op\0_C7_EqI4.

Handler: 0x66106994, shared by 2 dispatch slots (real opcode #196). This is the primary slot. Other slots: (1,2B) EqI4.

Check of vb6_source_eq example: verified: compiles and emits this slot.

Corpus: 234 occurrence(s) in PDFStreamDumper_p.exe.

Example from the description
Dim a As Long, b As Long, c As Boolean
c = (a = b)
Slots sharing this handler

(1,0x2B) EqI4

Description: draft, by claude-opus-4.7. Handler 0x66106994, dispatch slot 0x66107030, modOpcodes line 1475.

EqI4

(1,0x2B)not emitteddup of (0,C7)handler #196Integerconfirmed_handler
(alias) Compare two values with =; push Boolean result.

Alias dispatch slot (1, 0x2B) for the canonical EqI4 at (0, 0xC7); semantics are identical.

Pops two 32-bit signed integer (VB6 Long) operands b and a (top is b), pushes (a = b) as a I2 result.

Stack: [..., a:I4, b:I4] -> [..., (a = b):I2]

When the compiler emits it

Emitted for = when both operands are statically typed I4. Other type pairings select the matching suffix variant (EqI2/EqI4/EqR8/EqStr/EqVar).

VB6 source (from description, not verified)
Dim a As Long, b As Long, c As Boolean
c = (a = b)
Encoding, evidence and notes
Encoding

Encoding: FB 2B (lead byte FB selects table 1), then 0 operand byte(s); total instruction length 2 byte(s).
Operands: none. All inputs come from the evaluation stack or the frame.

Evidence and notes

Emitted by VB6 SP6 (P-code): not observed in about 3,070 probe programs. The slot exists in the runtime's dispatch table, but no tested source construct makes the compiler emit it.

Handler: 0x66106994, shared by 2 dispatch slots (real opcode #196). This is a duplicate slot of (0,C7) EqI4. Other slots: (0,C7) EqI4.

Check of vb6_source_eq example: compiles, but emits a different slot of the same handler. emits (0,C7) EqI4 (same handler, different slot)

Slots sharing this handler

(0,0xC7) EqI4

Description: draft, by claude-opus-4.7. Handler 0x66106994, dispatch slot 0x661071C0, modOpcodes line 1481.

EqR8

(0,0xC8)emittedprimary of 3handler #197Floating pointconfirmed_msdocs
Compare two values with =; push Boolean result.

Pops two 64-bit IEEE 754 float (VB6 Double) operands b and a (top is b), pushes (a = b) as a I2 result.

Stack: [..., a:R8, b:R8] -> [..., (a = b):I2]

When the compiler emits it

Emitted for = when both operands are statically typed R8. Other type pairings select the matching suffix variant (EqI2/EqI4/EqR8/EqStr/EqVar).

VB6 source (verified: compiles to this slot)
Public Sub Main()
  Dim a As Date, b As Date, c As Boolean
  c = (a = b)
End Sub
Encoding, evidence and notes
Encoding

Encoding: C8, then 0 operand byte(s); total instruction length 1 byte(s).
Operands: none. All inputs come from the evaluation stack or the frame.
Observed: C8 EqR8

Evidence and notes

Emitted by VB6 SP6 (P-code): yes. Minimal probe: probes\op\0_C8_EqR8.

Handler: 0x661069AA, shared by 3 dispatch slots (real opcode #197). This is the primary slot. Other slots: (1,2C) EqR8, (1,2D) EqR8.

Check of vb6_source_eq example: verified: compiles and emits this slot.

Example from the description
Dim a As Double, b As Double, c As Boolean
c = (a = b)
Slots sharing this handler

(1,0x2C) EqR8, (1,0x2D) EqR8

Description: draft, by claude-opus-4.7. Handler 0x661069AA, dispatch slot 0x66107034, modOpcodes line 1476.

EqR8

(1,0x2C)not emitteddup of (0,C8)handler #197Floating pointconfirmed_handler
(alias) Compare two values with =; push Boolean result.

Alias dispatch slot (1, 0x2C) for the canonical EqR8 at (0, 0xC8); semantics are identical.

Pops two 64-bit IEEE 754 float (VB6 Double) operands b and a (top is b), pushes (a = b) as a I2 result.

Stack: [..., a:R8, b:R8] -> [..., (a = b):I2]

When the compiler emits it

Emitted for = when both operands are statically typed R8. Other type pairings select the matching suffix variant (EqI2/EqI4/EqR8/EqStr/EqVar).

VB6 source (from description, not verified)
Dim a As Double, b As Double, c As Boolean
c = (a = b)
Encoding, evidence and notes
Encoding

Encoding: FB 2C (lead byte FB selects table 1), then 0 operand byte(s); total instruction length 2 byte(s).
Operands: none. All inputs come from the evaluation stack or the frame.

Evidence and notes

Emitted by VB6 SP6 (P-code): not observed in about 3,070 probe programs. The slot exists in the runtime's dispatch table, but no tested source construct makes the compiler emit it.

Handler: 0x661069AA, shared by 3 dispatch slots (real opcode #197). This is a duplicate slot of (0,C8) EqR8. Other slots: (0,C8) EqR8, (1,2D) EqR8.

Check of vb6_source_eq example: compiles, but emits a different slot of the same handler. emits (0,C8) EqR8 (same handler, different slot)

Slots sharing this handler

(0,0xC8) EqR8, (1,0x2D) EqR8

Description: draft, by claude-opus-4.7. Handler 0x661069AA, dispatch slot 0x661071C4, modOpcodes line 1482.

EqR8

(1,0x2D)not emitteddup of (0,C8)handler #197Floating pointconfirmed_handler
(alias) Compare two values with =; push Boolean result.

Alias dispatch slot (1, 0x2D) for the canonical EqR8 at (0, 0xC8); semantics are identical.

Pops two 64-bit IEEE 754 float (VB6 Double) operands b and a (top is b), pushes (a = b) as a I2 result.

Stack: [..., a:R8, b:R8] -> [..., (a = b):I2]

When the compiler emits it

Emitted for = when both operands are statically typed R8. Other type pairings select the matching suffix variant (EqI2/EqI4/EqR8/EqStr/EqVar).

VB6 source (from description, not verified)
Dim a As Double, b As Double, c As Boolean
c = (a = b)
Encoding, evidence and notes
Encoding

Encoding: FB 2D (lead byte FB selects table 1), then 0 operand byte(s); total instruction length 2 byte(s).
Operands: none. All inputs come from the evaluation stack or the frame.

Evidence and notes

Emitted by VB6 SP6 (P-code): not observed in about 3,070 probe programs. The slot exists in the runtime's dispatch table, but no tested source construct makes the compiler emit it.

Handler: 0x661069AA, shared by 3 dispatch slots (real opcode #197). This is a duplicate slot of (0,C8) EqR8. Other slots: (0,C8) EqR8, (1,2C) EqR8.

Check of vb6_source_eq example: compiles, but emits a different slot of the same handler. emits (0,C8) EqR8 (same handler, different slot)

Slots sharing this handler

(0,0xC8) EqR8, (1,0x2C) EqR8

Description: draft, by claude-opus-4.7. Handler 0x661069AA, dispatch slot 0x661071C8, modOpcodes line 1483.

EqStr

(1,0x30)emittedhandler #264Stringconfirmed_msdocs17 corpus hits
Compare two values with =; push Boolean result.

Pops two BSTR (VB6 String) operands b and a (top is b), pushes (a = b) as a I2 result.

Stack: [..., a:Str, b:Str] -> [..., (a = b):I2]

When the compiler emits it

Emitted for = when both operands are statically typed Str. Other type pairings select the matching suffix variant (EqI2/EqI4/EqR8/EqStr/EqVar).

VB6 source (verified: compiles to this slot)
Public Sub Main()
  Dim a As String, b As String, c As Boolean
  c = (a = b)
End Sub
Encoding, evidence and notes
Encoding

Encoding: FB 30 (lead byte FB selects table 1), then 0 operand byte(s); total instruction length 2 byte(s).
Operands: none. All inputs come from the evaluation stack or the frame.
Observed: FB30 EqStr

Examples
Form1.mnuHexEditor_Click @ 0x462D24 | 462D6A    FB30                  EqStr
Form2.txtJS_AutoCompleteEvent(ByRef className As String) @ 0x44291C | 44293D    FB30                  EqStr
Form2.txtJS_AutoCompleteEvent(ByRef className As String) @ 0x44291C | 442945    FB30                  EqStr

17 occurrence(s) in PDFStreamDumper.

Evidence and notes

Emitted by VB6 SP6 (P-code): yes. Minimal probe: probes\op\1_30_EqStr.

Handler: 0x661069B1, unique to this slot (real opcode #264).

Check of vb6_source_eq example: verified: compiles and emits this slot.

Corpus: 17 occurrence(s) in PDFStreamDumper_p.exe.

Example from the description
Dim a As String, b As String, c As Boolean
c = (a = b)

Description: draft, by claude-opus-4.7. Handler 0x661069B1, dispatch slot 0x661071D4, modOpcodes line 1485.

EqTextStr

(1,0x32)emittedhandler #266Stringconfirmed_msdocs
Compare two values with =; push Boolean result.

Pops two String comparison in Text mode (case-insensitive, locale-aware) operands b and a (top is b), pushes (a = b) as a I2 result.

Stack: [..., a:TextStr, b:TextStr] -> [..., (a = b):I2]

Text-mode comparison uses the LCID-aware string collation (case-insensitive, locale-respecting) selected by Option Compare Text.

When the compiler emits it

Emitted for = when at least one operand is Variant or Option Compare Text is in effect; specific suffix encodes the result form.

VB6 source (verified: compiles to this slot)
Option Compare Text

Public Sub Main()
  Dim a As String, b As String, c As Boolean
  c = (a = b)
End Sub
Encoding, evidence and notes
Encoding

Encoding: FB 32 (lead byte FB selects table 1), then 0 operand byte(s); total instruction length 2 byte(s).
Operands: none. All inputs come from the evaluation stack or the frame.
Observed: FB32 EqTextStr

Evidence and notes

Emitted by VB6 SP6 (P-code): yes. Minimal probe: probes\op\1_32_EqTextStr.

Handler: 0x6610C0F6, unique to this slot (real opcode #266).

Check of vb6_source_eq example: verified: compiles and emits this slot.

Example from the description
Option Compare Text
Dim a As String, b As String, c As Boolean
c = (a = b)

Description: draft, by claude-opus-4.7. Handler 0x6610C0F6, dispatch slot 0x661071DC, modOpcodes line 1486.

EqTextVar

(1,0x31)emittedhandler #265Variantinferred_corpus
Variant = comparison (case-insensitive (Option Compare Text)); result Variant in a temporary.

Pops two Variants, compares them with = using case-insensitive (Option Compare Text) string comparison when both are strings, and writes the result (Boolean, or Null if either operand is Null) as a Variant into the temporary %a, whose address is pushed.

Stack: [..., a:Var, b:Var] -> [..., r:Var]

When the compiler emits it

Emitted when a Variant comparison result is kept as a value (c = (a = b)). Inside If/While conditions the compiler uses the ...VarBool form, which pushes a plain Boolean. Requires Option Compare Text in the module.

VB6 source (verified: compiles to this slot)
Option Compare Text

Public Sub Main()
  Dim a As Variant, b As Variant, c As Boolean
  c = (a = b)
End Sub
Encoding, evidence and notes
Encoding

Encoding: FB 31 (lead byte FB selects table 1), then 2 operand byte(s); total instruction length 4 byte(s).
vbdec template: %a
Operands:

  1. %a: local_var_ref, 2 byte(s). signed 16-bit offset from the procedure frame pointer (EBP). Negative = local/temporary (vbdec var_XX, XX = -offset), positive = argument (arg_XX).

Observed: FB31 48FF EqTextVar var_B8

Examples
FB31 48FF  EqTextVar var_B8

From the Phase 4 probe (VB6 SP6, P-code).

Evidence and notes

Emitted by VB6 SP6 (P-code): yes. Minimal probe: probes\op\1_31_EqTextVar.

Handler: 0x6610C248, unique to this slot (real opcode #265).

Check of vb6_source_eq example: verified: compiles and emits this slot.

Example from the description
Option Compare Text

Public Sub Main()
  Dim a As Variant, b As Variant, c As Boolean
  c = (a = b)
End Sub

Description: draft, by claude-opus-5-5. Handler 0x6610C248, dispatch slot 0x661071D8, modOpcodes line 1491.

EqTextVarBool

(1,0x34)emittedhandler #268Variantconfirmed_msdocs
Variant = comparison (text mode) whose result is used directly as a condition; push Boolean.

Pops two Variants and compares them with = (text (case-insensitive, Option Compare Text) string comparison when both are strings). A Null operand makes the condition False. Pushes a Boolean (-1/0) for the following branch.

Stack: [..., a:Var, b:Var] -> [..., r:Bool]

When the compiler emits it

Emitted when a Variant comparison is the condition of If, ElseIf, Do While/Until, Loop While/Until or a Select Case test, so a plain Boolean is enough. When the result is kept as a value (b = (v = w)), the compiler uses EqTextVar instead, which produces a Variant (possibly Null). Requires Option Compare Text.

VB6 source (verified: compiles to this slot)
Option Compare Text

Public Sub Main()
  Dim a As Variant, b As Variant, n As Long
  If a = b Then n = 1
End Sub
Encoding, evidence and notes
Encoding

Encoding: FB 34 (lead byte FB selects table 1), then 0 operand byte(s); total instruction length 2 byte(s).
Operands: none. All inputs come from the evaluation stack or the frame.
Observed: FB34 EqTextVarBool

Evidence and notes

Emitted by VB6 SP6 (P-code): yes. Minimal probe: probes\op\1_34_EqTextVarBool.

Handler: 0x6610C28D, unique to this slot (real opcode #268).

Check of vb6_source_eq example: verified: compiles and emits this slot.

Example from the description
Option Compare Text
Sub Main()
  Dim a As Variant, b As Variant, n As Long
  a = 1: b = 2
  If a = b Then n = 1
End Sub

Description: draft, by claude-opus-5-5. Handler 0x6610C28D, dispatch slot 0x661071E4, modOpcodes line 1488.

EqVar

(1,0x2F)emittedhandler #263Variantinferred_corpus43 corpus hits
Compare two values with =; push Boolean result.

Pops two VBA Variant operands b and a (top is b), pushes (a = b) as a I2 result.

Stack: [..., a:Var, b:Var] -> [..., (a = b):I2]

Variant operands undergo VB6 type-promotion before comparison; type-mismatch raises run-time error 13.

When the compiler emits it

Emitted for = when at least one operand is Variant or Option Compare Text is in effect; specific suffix encodes the result form.

VB6 source (verified: compiles to this slot)
Public Sub Main()
  Dim a As Variant, b As Variant, c As Boolean
  c = (a = b)
End Sub
Encoding, evidence and notes
Encoding

Encoding: FB 2F (lead byte FB selects table 1), then 2 operand byte(s); total instruction length 4 byte(s).
vbdec template: %a
Operands:

  1. %a: local_var_ref, 2 byte(s). signed 16-bit offset from the procedure frame pointer (EBP). Negative = local/temporary (vbdec var_XX, XX = -offset), positive = argument (arg_XX).

Observed: FB2F 48FF EqVar var_B8

Examples
Form1.Form_Load @ 0x479DC0 | 47A54A    FB2F F0FE             EqVar var_110
Form1.Form_Load @ 0x479DC0 | 47A5AF    FB2F F0FE             EqVar var_110
Form1.Form_Load @ 0x479DC0 | 47A614    FB2F F0FE             EqVar var_110

43 occurrence(s) in PDFStreamDumper.

Evidence and notes

Emitted by VB6 SP6 (P-code): yes. Minimal probe: probes\op\1_2F_EqVar.

Handler: 0x66106B4B, unique to this slot (real opcode #263).

Check of vb6_source_eq example: verified: compiles and emits this slot.

Corpus: 43 occurrence(s) in PDFStreamDumper_p.exe.

Example from the description
Dim a As Variant, b As Variant, c As Boolean
c = (a = b)

Description: draft, by claude-opus-4.7. Handler 0x66106B4B, dispatch slot 0x661071D0, modOpcodes line 1490.

EqVarBool

(1,0x33)emittedhandler #267Variantconfirmed_msdocs120 corpus hits
Variant = comparison (binary mode) whose result is used directly as a condition; push Boolean.

Pops two Variants and compares them with = (binary string comparison when both are strings). A Null operand makes the condition False. Pushes a Boolean (-1/0) for the following branch.

Stack: [..., a:Var, b:Var] -> [..., r:Bool]

When the compiler emits it

Emitted when a Variant comparison is the condition of If, ElseIf, Do While/Until, Loop While/Until or a Select Case test, so a plain Boolean is enough. When the result is kept as a value (b = (v = w)), the compiler uses EqVar instead, which produces a Variant (possibly Null).

VB6 source (verified: compiles to this slot)
Public Sub Main()
  Dim a(5) As Boolean, x As Variant
  For Each x In a
    If x = x Then Exit For
  Next
End Sub
Encoding, evidence and notes
Encoding

Encoding: FB 33 (lead byte FB selects table 1), then 0 operand byte(s); total instruction length 2 byte(s).
Operands: none. All inputs come from the evaluation stack or the frame.
Observed: FB33 EqVarBool

Examples
Form1.mnuHelp_Event_0 @ 0x45A2C0 | 45A309    FB33                  EqVarBool
Form1.mnuHelp_Event_0 @ 0x45A2C0 | 45A31C    FB33                  EqVarBool
Form1.mnuHelp_Event_0 @ 0x45A2C0 | 45A377    FB33                  EqVarBool

120 occurrence(s) in PDFStreamDumper.

Evidence and notes

Emitted by VB6 SP6 (P-code): yes. Minimal probe: probes\op\1_33_EqVarBool.

Handler: 0x66106B78, unique to this slot (real opcode #267).

Check of vb6_source_eq example: verified: compiles and emits this slot.

Corpus: 120 occurrence(s) in PDFStreamDumper_p.exe.

Example from the description
Sub Main()
  Dim a As Variant, b As Variant, n As Long
  a = 1: b = 2
  If a = b Then n = 1
End Sub

Description: draft, by claude-opus-5-5. Handler 0x66106B78, dispatch slot 0x661071E0, modOpcodes line 1487.

Compare_Ge

Greater-or-equal comparison

GeCy

(0,0xE2)emittedprimary of 2handler #223Currencyconfirmed_msdocs
Compare two values with >=; push Boolean result.

Pops two 64-bit scaled-integer Currency (×10^4) operands b and a (top is b), pushes (a >= b) as a I2 result.

Stack: [..., a:Cy, b:Cy] -> [..., (a >= b):I2]

When the compiler emits it

Emitted for >= when both operands are statically typed Cy. Other type pairings select the matching suffix variant (GeI2/GeI4/GeR8/GeStr/GeVar).

VB6 source (verified: compiles to this slot)
Public Sub Main()
  Dim a As Currency, b As Currency, c As Boolean
  c = (a >= b)
End Sub
Encoding, evidence and notes
Encoding

Encoding: E2, then 0 operand byte(s); total instruction length 1 byte(s).
Operands: none. All inputs come from the evaluation stack or the frame.
Observed: E2 GeCy

Evidence and notes

Emitted by VB6 SP6 (P-code): yes. Minimal probe: probes\op\0_E2_GeCy.

Handler: 0x6610C1ED, shared by 2 dispatch slots (real opcode #223). This is the primary slot. Other slots: (1,55) GeCy.

Check of vb6_source_eq example: verified: compiles and emits this slot.

Example from the description
Dim a As Currency, b As Currency, c As Boolean
c = (a >= b)
Slots sharing this handler

(1,0x55) GeCy

Description: draft, by claude-opus-4.7. Handler 0x6610C1ED, dispatch slot 0x6610709C, modOpcodes line 1453.

GeCy

(1,0x55)not emitteddup of (0,E2)handler #223Currencyconfirmed_handler
(alias) Compare two values with >=; push Boolean result.

Alias dispatch slot (1, 0x55) for the canonical GeCy at (0, 0xE2); semantics are identical.

Pops two 64-bit scaled-integer Currency (×10^4) operands b and a (top is b), pushes (a >= b) as a I2 result.

Stack: [..., a:Cy, b:Cy] -> [..., (a >= b):I2]

When the compiler emits it

Emitted for >= when both operands are statically typed Cy. Other type pairings select the matching suffix variant (GeI2/GeI4/GeR8/GeStr/GeVar).

VB6 source (from description, not verified)
Dim a As Currency, b As Currency, c As Boolean
c = (a >= b)
Encoding, evidence and notes
Encoding

Encoding: FB 55 (lead byte FB selects table 1), then 0 operand byte(s); total instruction length 2 byte(s).
Operands: none. All inputs come from the evaluation stack or the frame.

Evidence and notes

Emitted by VB6 SP6 (P-code): not observed in about 3,070 probe programs. The slot exists in the runtime's dispatch table, but no tested source construct makes the compiler emit it.

Handler: 0x6610C1ED, shared by 2 dispatch slots (real opcode #223). This is a duplicate slot of (0,E2) GeCy. Other slots: (0,E2) GeCy.

Check of vb6_source_eq example: compiles, but emits a different slot of the same handler. emits (0,E2) GeCy (same handler, different slot)

Slots sharing this handler

(0,0xE2) GeCy

Description: draft, by claude-opus-4.7. Handler 0x6610C1ED, dispatch slot 0x66107268, modOpcodes line 1460.

GeCyR8

(0,0xE3)emittedprimary of 2handler #224Currencyconfirmed_msdocs
Compare a Currency with a non-Currency number using >=; push Boolean.

Pops the Currency operand and compares it with the floating-point operand (ST0), pushing the Boolean result (-1/0).

Stack: [..., c:Cy, x:R8 (ST0)] -> [..., (c >= x):Bool]

When the compiler emits it

Emitted when one operand of >= is Currency and the other is Integer, Long, Single, Double or a numeric literal (Currency >= Currency uses GeCy). If the Currency is on the right, the compiler swaps the operands and mirrors the operator: n <= c compiles to GeCyR8.

VB6 source (verified: compiles to this slot)
Public Sub Main()
  Dim a As Currency, b As Single, c As Variant
  c = a >= b
End Sub
Encoding, evidence and notes
Encoding

Encoding: E3, then 0 operand byte(s); total instruction length 1 byte(s).
Operands: none. All inputs come from the evaluation stack or the frame.
Observed: E3 GeCyR8

Evidence and notes

Emitted by VB6 SP6 (P-code): yes. Minimal probe: probes\op\0_E3_GeCyR8.

Handler: 0x6610C1F7, shared by 2 dispatch slots (real opcode #224). This is the primary slot. Other slots: (1,5C) GeCyR8.

Check of vb6_source_eq example: verified: compiles and emits this slot.

Example from the description
Dim c As Currency, d As Double, b As Boolean
b = (c >= d)
Slots sharing this handler

(1,0x5C) GeCyR8

Description: draft, by claude-opus-5-5. Handler 0x6610C1F7, dispatch slot 0x661070A0, modOpcodes line 1454.

GeCyR8

(1,0x5C)not emitteddup of (0,E3)handler #224Currencyconfirmed_handler
(duplicate slot of (0,E3) GeCyR8) Compare a Currency with a non-Currency number using >=; push Boolean.

Dispatch slot (1, 0x5C) runs the same MSVBVM60 handler as (0,E3) GeCyR8; runtime behaviour is identical.

Pops the Currency operand and compares it with the floating-point operand (ST0), pushing the Boolean result (-1/0).

Stack: [..., c:Cy, x:R8 (ST0)] -> [..., (c >= x):Bool]

When the compiler emits it

Not emitted by VB6 SP6 in Phase 4 probes. Source that performs this operation (Currency >= non-Currency) compiles to (0,E3) GeCyR8 instead. The slot is reachable only by hand-crafted or non-VB6-compiled p-code.

Encoding, evidence and notes
Encoding

Encoding: FB 5C (lead byte FB selects table 1), then 0 operand byte(s); total instruction length 2 byte(s).
Operands: none. All inputs come from the evaluation stack or the frame.

Evidence and notes

Emitted by VB6 SP6 (P-code): not observed in about 3,070 probe programs. The slot exists in the runtime's dispatch table, but no tested source construct makes the compiler emit it.

Handler: 0x6610C1F7, shared by 2 dispatch slots (real opcode #224). This is a duplicate slot of (0,E3) GeCyR8. Other slots: (0,E3) GeCyR8.

Slots sharing this handler

(0,0xE3) GeCyR8

Description: draft, by claude-opus-5-5. Handler 0x6610C1F7, dispatch slot 0x66107284, modOpcodes line 1465.

GeI2

(0,0xDF)emittedprimary of 2handler #220Integerconfirmed_msdocs8 corpus hits
Compare two values with >=; push Boolean result.

Pops two 16-bit signed integer (VB6 Integer) operands b and a (top is b), pushes (a >= b) as a I2 result.

Stack: [..., a:I2, b:I2] -> [..., (a >= b):I2]

When the compiler emits it

Emitted for >= when both operands are statically typed I2. Other type pairings select the matching suffix variant (GeI2/GeI4/GeR8/GeStr/GeVar).

VB6 source (verified: compiles to this slot)
Public Sub Main()
  Dim a As Boolean, b As Boolean, c As Boolean
  c = (a >= b)
End Sub
Encoding, evidence and notes
Encoding

Encoding: DF, then 0 operand byte(s); total instruction length 1 byte(s).
Operands: none. All inputs come from the evaluation stack or the frame.
Observed: DF GeI2

Examples
CFunc.isTextRange @ 0x44183C | 441847    DF                    GeI2
CFunc.isTextRange @ 0x44183C | 44185C    DF                    GeI2
CFunc.isTextRange @ 0x44183C | 441871    DF                    GeI2

8 occurrence(s) in PDFStreamDumper.

Evidence and notes

Emitted by VB6 SP6 (P-code): yes. Minimal probe: probes\op\0_DF_GeI2.

Handler: 0x66106AD2, shared by 2 dispatch slots (real opcode #220). This is the primary slot. Other slots: (1,51) GeI2.

Check of vb6_source_eq example: verified: compiles and emits this slot.

Corpus: 8 occurrence(s) in PDFStreamDumper_p.exe.

Example from the description
Dim a As Integer, b As Integer, c As Boolean
c = (a >= b)
Slots sharing this handler

(1,0x51) GeI2

Description: draft, by claude-opus-4.7. Handler 0x66106AD2, dispatch slot 0x66107090, modOpcodes line 1450.

GeI2

(1,0x51)not emitteddup of (0,DF)handler #220Integerconfirmed_handler
(alias) Compare two values with >=; push Boolean result.

Alias dispatch slot (1, 0x51) for the canonical GeI2 at (0, 0xDF); semantics are identical.

Pops two 16-bit signed integer (VB6 Integer) operands b and a (top is b), pushes (a >= b) as a I2 result.

Stack: [..., a:I2, b:I2] -> [..., (a >= b):I2]

When the compiler emits it

Emitted for >= when both operands are statically typed I2. Other type pairings select the matching suffix variant (GeI2/GeI4/GeR8/GeStr/GeVar).

VB6 source (from description, not verified)
Dim a As Integer, b As Integer, c As Boolean
c = (a >= b)
Encoding, evidence and notes
Encoding

Encoding: FB 51 (lead byte FB selects table 1), then 0 operand byte(s); total instruction length 2 byte(s).
Operands: none. All inputs come from the evaluation stack or the frame.

Evidence and notes

Emitted by VB6 SP6 (P-code): not observed in about 3,070 probe programs. The slot exists in the runtime's dispatch table, but no tested source construct makes the compiler emit it.

Handler: 0x66106AD2, shared by 2 dispatch slots (real opcode #220). This is a duplicate slot of (0,DF) GeI2. Other slots: (0,DF) GeI2.

Check of vb6_source_eq example: compiles, but emits a different slot of the same handler. emits (0,DF) GeI2 (same handler, different slot)

Slots sharing this handler

(0,0xDF) GeI2

Description: draft, by claude-opus-4.7. Handler 0x66106AD2, dispatch slot 0x66107258, modOpcodes line 1456.

GeI4

(0,0xE0)emittedprimary of 2handler #221Integerconfirmed_msdocs1 corpus hits
Compare two values with >=; push Boolean result.

Pops two 32-bit signed integer (VB6 Long) operands b and a (top is b), pushes (a >= b) as a I2 result.

Stack: [..., a:I4, b:I4] -> [..., (a >= b):I2]

When the compiler emits it

Emitted for >= when both operands are statically typed I4. Other type pairings select the matching suffix variant (GeI2/GeI4/GeR8/GeStr/GeVar).

VB6 source (verified: compiles to this slot)
Public Sub Main()
  Dim a As Long, b As Long, c As Boolean
  c = (a >= b)
End Sub
Encoding, evidence and notes
Encoding

Encoding: E0, then 0 operand byte(s); total instruction length 1 byte(s).
Operands: none. All inputs come from the evaluation stack or the frame.
Observed: E0 GeI4

Examples
frmReplace.cmdFindNext_Click @ 0x459BD4 | 459C63    E0                    GeI4

1 occurrence(s) in PDFStreamDumper.

Evidence and notes

Emitted by VB6 SP6 (P-code): yes. Minimal probe: probes\op\0_E0_GeI4.

Handler: 0x6610C1E4, shared by 2 dispatch slots (real opcode #221). This is the primary slot. Other slots: (1,52) GeI4.

Check of vb6_source_eq example: verified: compiles and emits this slot.

Corpus: 1 occurrence(s) in PDFStreamDumper_p.exe.

Example from the description
Dim a As Long, b As Long, c As Boolean
c = (a >= b)
Slots sharing this handler

(1,0x52) GeI4

Description: draft, by claude-opus-4.7. Handler 0x6610C1E4, dispatch slot 0x66107094, modOpcodes line 1451.

GeI4

(1,0x52)not emitteddup of (0,E0)handler #221Integerconfirmed_handler
(alias) Compare two values with >=; push Boolean result.

Alias dispatch slot (1, 0x52) for the canonical GeI4 at (0, 0xE0); semantics are identical.

Pops two 32-bit signed integer (VB6 Long) operands b and a (top is b), pushes (a >= b) as a I2 result.

Stack: [..., a:I4, b:I4] -> [..., (a >= b):I2]

When the compiler emits it

Emitted for >= when both operands are statically typed I4. Other type pairings select the matching suffix variant (GeI2/GeI4/GeR8/GeStr/GeVar).

VB6 source (from description, not verified)
Dim a As Long, b As Long, c As Boolean
c = (a >= b)
Encoding, evidence and notes
Encoding

Encoding: FB 52 (lead byte FB selects table 1), then 0 operand byte(s); total instruction length 2 byte(s).
Operands: none. All inputs come from the evaluation stack or the frame.

Evidence and notes

Emitted by VB6 SP6 (P-code): not observed in about 3,070 probe programs. The slot exists in the runtime's dispatch table, but no tested source construct makes the compiler emit it.

Handler: 0x6610C1E4, shared by 2 dispatch slots (real opcode #221). This is a duplicate slot of (0,E0) GeI4. Other slots: (0,E0) GeI4.

Check of vb6_source_eq example: compiles, but emits a different slot of the same handler. emits (0,E0) GeI4 (same handler, different slot)

Slots sharing this handler

(0,0xE0) GeI4

Description: draft, by claude-opus-4.7. Handler 0x6610C1E4, dispatch slot 0x6610725C, modOpcodes line 1457.

GeR4

(1,0x53)not emitteddup of (0,E1)handler #222Floating pointconfirmed_msdocs
Compare two values with >=; push Boolean result.

Pops two 32-bit IEEE 754 float (VB6 Single) operands b and a (top is b), pushes (a >= b) as a I2 result.

Stack: [..., a:R4, b:R4] -> [..., (a >= b):I2]

When the compiler emits it

Emitted for >= when both operands are statically typed R4. Other type pairings select the matching suffix variant (GeI2/GeI4/GeR8/GeStr/GeVar).

VB6 source (from description, not verified)
Dim a As Single, b As Single, c As Boolean
c = (a >= b)
Encoding, evidence and notes
Encoding

Encoding: FB 53 (lead byte FB selects table 1), then 0 operand byte(s); total instruction length 2 byte(s).
Operands: none. All inputs come from the evaluation stack or the frame.

Evidence and notes

Emitted by VB6 SP6 (P-code): not observed in about 3,070 probe programs. The slot exists in the runtime's dispatch table, but no tested source construct makes the compiler emit it.

Handler: 0x66106AEE, shared by 3 dispatch slots (real opcode #222). This is a duplicate slot of (0,E1) GeR8. Other slots: (0,E1) GeR8, (1,54) GeR4.

Finding: Phase 4: Single arithmetic and comparisons compile to the R8 FPU opcodes (AddR8, LtR8, and so on). Operands are loaded with FLdFPR4 and stored with FStFPR4. This *R4 slot was never emitted.

Check of vb6_source_eq example: compiles, but emits a different slot of the same handler. emits (0,E1) GeR8 (same handler, different slot)

Slots sharing this handler

(0,0xE1) GeR8, (1,0x54) GeR4

Description: draft, by claude-opus-4.7. Handler 0x66106AEE, dispatch slot 0x66107260, modOpcodes line 1458.

GeR4

(1,0x54)not emitteddup of (0,E1)handler #222Floating pointconfirmed_handler
(alias) Compare two values with >=; push Boolean result.

Alias dispatch slot (1, 0x54) for the canonical GeR4 at (1, 0x53); semantics are identical.

Pops two 32-bit IEEE 754 float (VB6 Single) operands b and a (top is b), pushes (a >= b) as a I2 result.

Stack: [..., a:R4, b:R4] -> [..., (a >= b):I2]

When the compiler emits it

Emitted for >= when both operands are statically typed R4. Other type pairings select the matching suffix variant (GeI2/GeI4/GeR8/GeStr/GeVar).

VB6 source (from description, not verified)
Dim a As Single, b As Single, c As Boolean
c = (a >= b)
Encoding, evidence and notes
Encoding

Encoding: FB 54 (lead byte FB selects table 1), then 0 operand byte(s); total instruction length 2 byte(s).
Operands: none. All inputs come from the evaluation stack or the frame.

Evidence and notes

Emitted by VB6 SP6 (P-code): not observed in about 3,070 probe programs. The slot exists in the runtime's dispatch table, but no tested source construct makes the compiler emit it.

Handler: 0x66106AEE, shared by 3 dispatch slots (real opcode #222). This is a duplicate slot of (0,E1) GeR8. Other slots: (0,E1) GeR8, (1,53) GeR4.

Finding: Phase 4: Single arithmetic and comparisons compile to the R8 FPU opcodes (AddR8, LtR8, and so on). Operands are loaded with FLdFPR4 and stored with FStFPR4. This *R4 slot was never emitted.

Check of vb6_source_eq example: compiles, but emits a different slot of the same handler. emits (0,E1) GeR8 (same handler, different slot)

Slots sharing this handler

(0,0xE1) GeR8, (1,0x53) GeR4

Description: draft, by claude-opus-4.7. Handler 0x66106AEE, dispatch slot 0x66107264, modOpcodes line 1459.

GeR8

(0,0xE1)emittedprimary of 3handler #222Floating pointconfirmed_msdocs
Compare two values with >=; push Boolean result.

Pops two 64-bit IEEE 754 float (VB6 Double) operands b and a (top is b), pushes (a >= b) as a I2 result.

Stack: [..., a:R8, b:R8] -> [..., (a >= b):I2]

When the compiler emits it

Emitted for >= when both operands are statically typed R8. Other type pairings select the matching suffix variant (GeI2/GeI4/GeR8/GeStr/GeVar).

VB6 source (verified: compiles to this slot)
Public Sub Main()
  Dim a As Date, b As Date, c As Boolean
  c = (a >= b)
End Sub
Encoding, evidence and notes
Encoding

Encoding: E1, then 0 operand byte(s); total instruction length 1 byte(s).
Operands: none. All inputs come from the evaluation stack or the frame.
Observed: E1 GeR8

Evidence and notes

Emitted by VB6 SP6 (P-code): yes. Minimal probe: probes\op\0_E1_GeR8.

Handler: 0x66106AEE, shared by 3 dispatch slots (real opcode #222). This is the primary slot. Other slots: (1,53) GeR4, (1,54) GeR4.

Check of vb6_source_eq example: verified: compiles and emits this slot.

Example from the description
Dim a As Double, b As Double, c As Boolean
c = (a >= b)
Slots sharing this handler

(1,0x53) GeR4, (1,0x54) GeR4

Description: draft, by claude-opus-4.7. Handler 0x66106AEE, dispatch slot 0x66107098, modOpcodes line 1452.

GeStr

(1,0x57)emittedhandler #284Stringconfirmed_msdocs
Compare two values with >=; push Boolean result.

Pops two BSTR (VB6 String) operands b and a (top is b), pushes (a >= b) as a I2 result.

Stack: [..., a:Str, b:Str] -> [..., (a >= b):I2]

When the compiler emits it

Emitted for >= when both operands are statically typed Str. Other type pairings select the matching suffix variant (GeI2/GeI4/GeR8/GeStr/GeVar).

VB6 source (verified: compiles to this slot)
Public Sub Main()
  Dim a As String, b As String, c As Boolean
  c = (a >= b)
End Sub
Encoding, evidence and notes
Encoding

Encoding: FB 57 (lead byte FB selects table 1), then 0 operand byte(s); total instruction length 2 byte(s).
Operands: none. All inputs come from the evaluation stack or the frame.
Observed: FB57 GeStr

Evidence and notes

Emitted by VB6 SP6 (P-code): yes. Minimal probe: probes\op\1_57_GeStr.

Handler: 0x6610C20F, unique to this slot (real opcode #284).

Check of vb6_source_eq example: verified: compiles and emits this slot.

Example from the description
Dim a As String, b As String, c As Boolean
c = (a >= b)

Description: draft, by claude-opus-4.7. Handler 0x6610C20F, dispatch slot 0x66107270, modOpcodes line 1461.

GeTextStr

(1,0x59)emittedhandler #286Stringconfirmed_msdocs
Compare two values with >=; push Boolean result.

Pops two String comparison in Text mode (case-insensitive, locale-aware) operands b and a (top is b), pushes (a >= b) as a I2 result.

Stack: [..., a:TextStr, b:TextStr] -> [..., (a >= b):I2]

Text-mode comparison uses the LCID-aware string collation (case-insensitive, locale-respecting) selected by Option Compare Text.

When the compiler emits it

Emitted for >= when at least one operand is Variant or Option Compare Text is in effect; specific suffix encodes the result form.

VB6 source (verified: compiles to this slot)
Option Compare Text

Public Sub Main()
  Dim a As String, b As String, c As Boolean
  c = (a >= b)
End Sub
Encoding, evidence and notes
Encoding

Encoding: FB 59 (lead byte FB selects table 1), then 0 operand byte(s); total instruction length 2 byte(s).
Operands: none. All inputs come from the evaluation stack or the frame.
Observed: FB59 GeTextStr

Evidence and notes

Emitted by VB6 SP6 (P-code): yes. Minimal probe: probes\op\1_59_GeTextStr.

Handler: 0x6610C201, unique to this slot (real opcode #286).

Check of vb6_source_eq example: verified: compiles and emits this slot.

Example from the description
Option Compare Text
Dim a As String, b As String, c As Boolean
c = (a >= b)

Description: draft, by claude-opus-4.7. Handler 0x6610C201, dispatch slot 0x66107278, modOpcodes line 1462.

GeTextVar

(1,0x58)emittedhandler #285Variantinferred_corpus
Variant >= comparison (case-insensitive (Option Compare Text)); result Variant in a temporary.

Pops two Variants, compares them with >= using case-insensitive (Option Compare Text) string comparison when both are strings, and writes the result (Boolean, or Null if either operand is Null) as a Variant into the temporary %a, whose address is pushed.

Stack: [..., a:Var, b:Var] -> [..., r:Var]

When the compiler emits it

Emitted when a Variant comparison result is kept as a value (c = (a >= b)). Inside If/While conditions the compiler uses the ...VarBool form, which pushes a plain Boolean. Requires Option Compare Text in the module.

VB6 source (verified: compiles to this slot)
Option Compare Text

Public Sub Main()
  Dim a As Variant, b As Variant, c As Boolean
  c = (a >= b)
End Sub
Encoding, evidence and notes
Encoding

Encoding: FB 58 (lead byte FB selects table 1), then 2 operand byte(s); total instruction length 4 byte(s).
vbdec template: %a
Operands:

  1. %a: local_var_ref, 2 byte(s). signed 16-bit offset from the procedure frame pointer (EBP). Negative = local/temporary (vbdec var_XX, XX = -offset), positive = argument (arg_XX).

Observed: FB58 48FF GeTextVar var_B8

Examples
FB58 48FF  GeTextVar var_B8

From the Phase 4 probe (VB6 SP6, P-code).

Evidence and notes

Emitted by VB6 SP6 (P-code): yes. Minimal probe: probes\op\1_58_GeTextVar.

Handler: 0x6610C22A, unique to this slot (real opcode #285).

Check of vb6_source_eq example: verified: compiles and emits this slot.

Example from the description
Option Compare Text

Public Sub Main()
  Dim a As Variant, b As Variant, c As Boolean
  c = (a >= b)
End Sub

Description: draft, by claude-opus-5-5. Handler 0x6610C22A, dispatch slot 0x66107274, modOpcodes line 1467.

GeTextVarBool

(1,0x5B)emittedhandler #288Variantconfirmed_msdocs
Variant >= comparison (text mode) whose result is used directly as a condition; push Boolean.

Pops two Variants and compares them with >= (text (case-insensitive, Option Compare Text) string comparison when both are strings). A Null operand makes the condition False. Pushes a Boolean (-1/0) for the following branch.

Stack: [..., a:Var, b:Var] -> [..., r:Bool]

When the compiler emits it

Emitted when a Variant comparison is the condition of If, ElseIf, Do While/Until, Loop While/Until or a Select Case test, so a plain Boolean is enough. When the result is kept as a value (b = (v >= w)), the compiler uses GeTextVar instead, which produces a Variant (possibly Null). Requires Option Compare Text.

VB6 source (verified: compiles to this slot)
Option Compare Text

Public Sub Main()
  Dim a As Variant, b As Variant, n As Long
  If a >= b Then n = 1
End Sub
Encoding, evidence and notes
Encoding

Encoding: FB 5B (lead byte FB selects table 1), then 0 operand byte(s); total instruction length 2 byte(s).
Operands: none. All inputs come from the evaluation stack or the frame.
Observed: FB5B GeTextVarBool

Evidence and notes

Emitted by VB6 SP6 (P-code): yes. Minimal probe: probes\op\1_5B_GeTextVarBool.

Handler: 0x6610C266, unique to this slot (real opcode #288).

Check of vb6_source_eq example: verified: compiles and emits this slot.

Example from the description
Option Compare Text
Sub Main()
  Dim a As Variant, b As Variant, n As Long
  a = 1: b = 2
  If a >= b Then n = 1
End Sub

Description: draft, by claude-opus-5-5. Handler 0x6610C266, dispatch slot 0x66107280, modOpcodes line 1464.

GeUI1

(1,0x50)emittedhandler #282Integerconfirmed_msdocs2 corpus hits
Compare two values with >=; push Boolean result.

Pops two 8-bit unsigned integer (VB6 Byte) operands b and a (top is b), pushes (a >= b) as a I2 result.

Stack: [..., a:UI1, b:UI1] -> [..., (a >= b):I2]

When the compiler emits it

Emitted for >= when both operands are statically typed UI1. Other type pairings select the matching suffix variant (GeI2/GeI4/GeR8/GeStr/GeVar).

VB6 source (verified: compiles to this slot)
Public Sub Main()
  Dim a As Byte, b As Byte, c As Boolean
  c = (a >= b)
End Sub
Encoding, evidence and notes
Encoding

Encoding: FB 50 (lead byte FB selects table 1), then 0 operand byte(s); total instruction length 2 byte(s).
Operands: none. All inputs come from the evaluation stack or the frame.
Observed: FB50 GeUI1

Examples
Form2.mnuReplaceHexAscii_Click @ 0x46572C | 4658DA    FB50                  GeUI1
Form2.mnuReplaceHexAscii_Click @ 0x46572C | 465903    FB50                  GeUI1

2 occurrence(s) in PDFStreamDumper.

Evidence and notes

Emitted by VB6 SP6 (P-code): yes. Minimal probe: probes\op\1_50_GeUI1.

Handler: 0x6610C1CF, unique to this slot (real opcode #282).

Check of vb6_source_eq example: verified: compiles and emits this slot.

Corpus: 2 occurrence(s) in PDFStreamDumper_p.exe.

Example from the description
Dim a As Byte, b As Byte, c As Boolean
c = (a >= b)

Description: draft, by claude-opus-4.7. Handler 0x6610C1CF, dispatch slot 0x66107254, modOpcodes line 1455.

GeVar

(1,0x56)emittedhandler #283Variantinferred_corpus1 corpus hits
Compare two values with >=; push Boolean result.

Pops two VBA Variant operands b and a (top is b), pushes (a >= b) as a I2 result.

Stack: [..., a:Var, b:Var] -> [..., (a >= b):I2]

Variant operands undergo VB6 type-promotion before comparison; type-mismatch raises run-time error 13.

When the compiler emits it

Emitted for >= when at least one operand is Variant or Option Compare Text is in effect; specific suffix encodes the result form.

VB6 source (verified: compiles to this slot)
Public Sub Main()
  Dim a As Variant, b As Variant, c As Boolean
  c = (a >= b)
End Sub
Encoding, evidence and notes
Encoding

Encoding: FB 56 (lead byte FB selects table 1), then 2 operand byte(s); total instruction length 4 byte(s).
vbdec template: %a
Operands:

  1. %a: local_var_ref, 2 byte(s). signed 16-bit offset from the procedure frame pointer (EBP). Negative = local/temporary (vbdec var_XX, XX = -offset), positive = argument (arg_XX).

Observed: FB56 48FF GeVar var_B8

Examples
CApplyFilters.Proc_44AEEC @ 0x44AEEC | 44AF80    FB56 E8FE             GeVar var_118

1 occurrence(s) in PDFStreamDumper.

Evidence and notes

Emitted by VB6 SP6 (P-code): yes. Minimal probe: probes\op\1_56_GeVar.

Handler: 0x6610C236, unique to this slot (real opcode #283).

Check of vb6_source_eq example: verified: compiles and emits this slot.

Corpus: 1 occurrence(s) in PDFStreamDumper_p.exe.

Example from the description
Dim a As Variant, b As Variant, c As Boolean
c = (a >= b)

Description: draft, by claude-opus-4.7. Handler 0x6610C236, dispatch slot 0x6610726C, modOpcodes line 1466.

GeVarBool

(1,0x5A)emittedhandler #287Variantconfirmed_msdocs3 corpus hits
Variant >= comparison (binary mode) whose result is used directly as a condition; push Boolean.

Pops two Variants and compares them with >= (binary string comparison when both are strings). A Null operand makes the condition False. Pushes a Boolean (-1/0) for the following branch.

Stack: [..., a:Var, b:Var] -> [..., r:Bool]

When the compiler emits it

Emitted when a Variant comparison is the condition of If, ElseIf, Do While/Until, Loop While/Until or a Select Case test, so a plain Boolean is enough. When the result is kept as a value (b = (v >= w)), the compiler uses GeVar instead, which produces a Variant (possibly Null).

VB6 source (verified: compiles to this slot)
Public Sub Main()
  Dim a As Variant, b As Variant, n As Long
  If a >= b Then n = 1
End Sub
Encoding, evidence and notes
Encoding

Encoding: FB 5A (lead byte FB selects table 1), then 0 operand byte(s); total instruction length 2 byte(s).
Operands: none. All inputs come from the evaluation stack or the frame.
Observed: FB5A GeVarBool

Examples
modEscapes.Proc_459E1C @ 0x459E1C | 459EA6    FB5A                  GeVarBool
modEscapes.Proc_455278 @ 0x455278 | 455302    FB5A                  GeVarBool
frmBruteZLib.setPB @ 0x4444FC | 444532    FB5A                  GeVarBool

3 occurrence(s) in PDFStreamDumper.

Evidence and notes

Emitted by VB6 SP6 (P-code): yes. Minimal probe: probes\op\1_5A_GeVarBool.

Handler: 0x6610C272, unique to this slot (real opcode #287).

Check of vb6_source_eq example: verified: compiles and emits this slot.

Corpus: 3 occurrence(s) in PDFStreamDumper_p.exe.

Example from the description
Sub Main()
  Dim a As Variant, b As Variant, n As Long
  a = 1: b = 2
  If a >= b Then n = 1
End Sub

Description: draft, by claude-opus-5-5. Handler 0x6610C272, dispatch slot 0x6610727C, modOpcodes line 1463.

Compare_Gt

Greater-than comparison

GtCy

(0,0xDD)emittedprimary of 2handler #218Currencyconfirmed_msdocs
Compare two values with >; push Boolean result.

Pops two 64-bit scaled-integer Currency (×10^4) operands b and a (top is b), pushes (a > b) as a I2 result.

Stack: [..., a:Cy, b:Cy] -> [..., (a > b):I2]

When the compiler emits it

Emitted for > when both operands are statically typed Cy. Other type pairings select the matching suffix variant (GtI2/GtI4/GtR8/GtStr/GtVar).

VB6 source (verified: compiles to this slot)
Public Sub Main()
  Dim a As Currency, b As Currency, c As Boolean
  c = (a > b)
End Sub
Encoding, evidence and notes
Encoding

Encoding: DD, then 0 operand byte(s); total instruction length 1 byte(s).
Operands: none. All inputs come from the evaluation stack or the frame.
Observed: DD GtCy

Evidence and notes

Emitted by VB6 SP6 (P-code): yes. Minimal probe: probes\op\0_DD_GtCy.

Handler: 0x6610C1A9, shared by 2 dispatch slots (real opcode #218). This is the primary slot. Other slots: (1,6F) GtCy.

Check of vb6_source_eq example: verified: compiles and emits this slot.

Example from the description
Dim a As Currency, b As Currency, c As Boolean
c = (a > b)
Slots sharing this handler

(1,0x6F) GtCy

Description: draft, by claude-opus-4.7. Handler 0x6610C1A9, dispatch slot 0x66107088, modOpcodes line 1443.

GtCy

(1,0x6F)not emitteddup of (0,DD)handler #218Currencyconfirmed_handler
(alias) Compare two values with >; push Boolean result.

Alias dispatch slot (1, 0x6F) for the canonical GtCy at (0, 0xDD); semantics are identical.

Pops two 64-bit scaled-integer Currency (×10^4) operands b and a (top is b), pushes (a > b) as a I2 result.

Stack: [..., a:Cy, b:Cy] -> [..., (a > b):I2]

When the compiler emits it

Emitted for > when both operands are statically typed Cy. Other type pairings select the matching suffix variant (GtI2/GtI4/GtR8/GtStr/GtVar).

VB6 source (from description, not verified)
Dim a As Currency, b As Currency, c As Boolean
c = (a > b)
Encoding, evidence and notes
Encoding

Encoding: FB 6F (lead byte FB selects table 1), then 0 operand byte(s); total instruction length 2 byte(s).
Operands: none. All inputs come from the evaluation stack or the frame.

Evidence and notes

Emitted by VB6 SP6 (P-code): not observed in about 3,070 probe programs. The slot exists in the runtime's dispatch table, but no tested source construct makes the compiler emit it.

Handler: 0x6610C1A9, shared by 2 dispatch slots (real opcode #218). This is a duplicate slot of (0,DD) GtCy. Other slots: (0,DD) GtCy.

Check of vb6_source_eq example: compiles, but emits a different slot of the same handler. emits (0,DD) GtCy (same handler, different slot)

Slots sharing this handler

(0,0xDD) GtCy

Description: draft, by claude-opus-4.7. Handler 0x6610C1A9, dispatch slot 0x661072D0, modOpcodes line 1444.

GtCyR8

(0,0xDE)emittedprimary of 2handler #219Currencyconfirmed_msdocs
Compare a Currency with a non-Currency number using >; push Boolean.

Pops the Currency operand and compares it with the floating-point operand (ST0), pushing the Boolean result (-1/0).

Stack: [..., c:Cy, x:R8 (ST0)] -> [..., (c > x):Bool]

When the compiler emits it

Emitted when one operand of > is Currency and the other is Integer, Long, Single, Double or a numeric literal (Currency > Currency uses GtCy). If the Currency is on the right, the compiler swaps the operands and mirrors the operator: n <= c compiles to GeCyR8.

VB6 source (verified: compiles to this slot)
Public Sub Main()
  Dim a As Currency, n As Long
  If a > 2.5 Then n = 1
End Sub
Encoding, evidence and notes
Encoding

Encoding: DE, then 0 operand byte(s); total instruction length 1 byte(s).
Operands: none. All inputs come from the evaluation stack or the frame.
Observed: DE GtCyR8

Evidence and notes

Emitted by VB6 SP6 (P-code): yes. Minimal probe: probes\op\0_DE_GtCyR8.

Handler: 0x6610C1B3, shared by 2 dispatch slots (real opcode #219). This is the primary slot. Other slots: (1,76) GtCyR8.

Check of vb6_source_eq example: verified: compiles and emits this slot.

Example from the description
Dim c As Currency, d As Double, b As Boolean
b = (c > d)
Slots sharing this handler

(1,0x76) GtCyR8

Description: draft, by claude-opus-5-5. Handler 0x6610C1B3, dispatch slot 0x6610708C, modOpcodes line 1445.

GtCyR8

(1,0x76)not emitteddup of (0,DE)handler #219Currencyconfirmed_handler
(duplicate slot of (0,DE) GtCyR8) Compare a Currency with a non-Currency number using >; push Boolean.

Dispatch slot (1, 0x76) runs the same MSVBVM60 handler as (0,DE) GtCyR8; runtime behaviour is identical.

Pops the Currency operand and compares it with the floating-point operand (ST0), pushing the Boolean result (-1/0).

Stack: [..., c:Cy, x:R8 (ST0)] -> [..., (c > x):Bool]

When the compiler emits it

Not emitted by VB6 SP6 in Phase 4 probes. Source that performs this operation (Currency > non-Currency) compiles to (0,DE) GtCyR8 instead. The slot is reachable only by hand-crafted or non-VB6-compiled p-code.

Encoding, evidence and notes
Encoding

Encoding: FB 76 (lead byte FB selects table 1), then 0 operand byte(s); total instruction length 2 byte(s).
Operands: none. All inputs come from the evaluation stack or the frame.

Evidence and notes

Emitted by VB6 SP6 (P-code): not observed in about 3,070 probe programs. The slot exists in the runtime's dispatch table, but no tested source construct makes the compiler emit it.

Handler: 0x6610C1B3, shared by 2 dispatch slots (real opcode #219). This is a duplicate slot of (0,DE) GtCyR8. Other slots: (0,DE) GtCyR8.

Slots sharing this handler

(0,0xDE) GtCyR8

Description: draft, by claude-opus-5-5. Handler 0x6610C1B3, dispatch slot 0x661072EC, modOpcodes line 1446.

GtI2

(0,0xDA)emittedprimary of 2handler #215Integerconfirmed_msdocs
Compare two values with >; push Boolean result.

Pops two 16-bit signed integer (VB6 Integer) operands b and a (top is b), pushes (a > b) as a I2 result.

Stack: [..., a:I2, b:I2] -> [..., (a > b):I2]

When the compiler emits it

Emitted for > when both operands are statically typed I2. Other type pairings select the matching suffix variant (GtI2/GtI4/GtR8/GtStr/GtVar).

VB6 source (verified: compiles to this slot)
Public Sub Main()
  Dim a As Integer, n As Long
  If a > 2 Then n = 1
End Sub
Encoding, evidence and notes
Encoding

Encoding: DA, then 0 operand byte(s); total instruction length 1 byte(s).
Operands: none. All inputs come from the evaluation stack or the frame.
Observed: DA GtI2

Evidence and notes

Emitted by VB6 SP6 (P-code): yes. Minimal probe: probes\op\0_DA_GtI2.

Handler: 0x66106A94, shared by 2 dispatch slots (real opcode #215). This is the primary slot. Other slots: (1,6B) GtI2.

Check of vb6_source_eq example: verified: compiles and emits this slot.

Example from the description
Dim a As Integer, b As Integer, c As Boolean
c = (a > b)
Slots sharing this handler

(1,0x6B) GtI2

Description: draft, by claude-opus-4.7. Handler 0x66106A94, dispatch slot 0x6610707C, modOpcodes line 1431.

GtI2

(1,0x6B)not emitteddup of (0,DA)handler #215Integerconfirmed_handler
(alias) Compare two values with >; push Boolean result.

Alias dispatch slot (1, 0x6B) for the canonical GtI2 at (0, 0xDA); semantics are identical.

Pops two 16-bit signed integer (VB6 Integer) operands b and a (top is b), pushes (a > b) as a I2 result.

Stack: [..., a:I2, b:I2] -> [..., (a > b):I2]

When the compiler emits it

Emitted for > when both operands are statically typed I2. Other type pairings select the matching suffix variant (GtI2/GtI4/GtR8/GtStr/GtVar).

VB6 source (from description, not verified)
Dim a As Integer, b As Integer, c As Boolean
c = (a > b)
Encoding, evidence and notes
Encoding

Encoding: FB 6B (lead byte FB selects table 1), then 0 operand byte(s); total instruction length 2 byte(s).
Operands: none. All inputs come from the evaluation stack or the frame.

Evidence and notes

Emitted by VB6 SP6 (P-code): not observed in about 3,070 probe programs. The slot exists in the runtime's dispatch table, but no tested source construct makes the compiler emit it.

Handler: 0x66106A94, shared by 2 dispatch slots (real opcode #215). This is a duplicate slot of (0,DA) GtI2. Other slots: (0,DA) GtI2.

Check of vb6_source_eq example: compiles, but emits a different slot of the same handler. emits (0,DA) GtI2 (same handler, different slot)

Slots sharing this handler

(0,0xDA) GtI2

Description: draft, by claude-opus-4.7. Handler 0x66106A94, dispatch slot 0x661072C0, modOpcodes line 1432.

GtI4

(0,0xDB)emittedprimary of 2handler #216Integerconfirmed_msdocs130 corpus hits
Compare two values with >; push Boolean result.

Pops two 32-bit signed integer (VB6 Long) operands b and a (top is b), pushes (a > b) as a I2 result.

Stack: [..., a:I4, b:I4] -> [..., (a > b):I2]

When the compiler emits it

Emitted for > when both operands are statically typed I4. Other type pairings select the matching suffix variant (GtI2/GtI4/GtR8/GtStr/GtVar).

VB6 source (verified: compiles to this slot)
Public Sub Main()
  Dim a As Long, n As Long
  If a > 2 Then n = 1
End Sub
Encoding, evidence and notes
Encoding

Encoding: DB, then 0 operand byte(s); total instruction length 1 byte(s).
Operands: none. All inputs come from the evaluation stack or the frame.
Observed: DB GtI4

Examples
Form1.mnuExtractURI_Click @ 0x45774C | 4577C7    DB                    GtI4
Form1.mnuExtractURI_Click @ 0x45774C | 457821    DB                    GtI4
Form1.mnuExtractURI_Click @ 0x45774C | 45782A    DB                    GtI4

130 occurrence(s) in PDFStreamDumper.

Evidence and notes

Emitted by VB6 SP6 (P-code): yes. Minimal probe: probes\op\0_DB_GtI4.

Handler: 0x66106AB0, shared by 2 dispatch slots (real opcode #216). This is the primary slot. Other slots: (1,6C) GtI4.

Check of vb6_source_eq example: verified: compiles and emits this slot.

Corpus: 130 occurrence(s) in PDFStreamDumper_p.exe.

Example from the description
Dim a As Long, b As Long, c As Boolean
c = (a > b)
Slots sharing this handler

(1,0x6C) GtI4

Description: draft, by claude-opus-4.7. Handler 0x66106AB0, dispatch slot 0x66107080, modOpcodes line 1433.

GtI4

(1,0x6C)not emitteddup of (0,DB)handler #216Integerconfirmed_handler
(alias) Compare two values with >; push Boolean result.

Alias dispatch slot (1, 0x6C) for the canonical GtI4 at (0, 0xDB); semantics are identical.

Pops two 32-bit signed integer (VB6 Long) operands b and a (top is b), pushes (a > b) as a I2 result.

Stack: [..., a:I4, b:I4] -> [..., (a > b):I2]

When the compiler emits it

Emitted for > when both operands are statically typed I4. Other type pairings select the matching suffix variant (GtI2/GtI4/GtR8/GtStr/GtVar).

VB6 source (from description, not verified)
Dim a As Long, b As Long, c As Boolean
c = (a > b)
Encoding, evidence and notes
Encoding

Encoding: FB 6C (lead byte FB selects table 1), then 0 operand byte(s); total instruction length 2 byte(s).
Operands: none. All inputs come from the evaluation stack or the frame.

Evidence and notes

Emitted by VB6 SP6 (P-code): not observed in about 3,070 probe programs. The slot exists in the runtime's dispatch table, but no tested source construct makes the compiler emit it.

Handler: 0x66106AB0, shared by 2 dispatch slots (real opcode #216). This is a duplicate slot of (0,DB) GtI4. Other slots: (0,DB) GtI4.

Check of vb6_source_eq example: compiles, but emits a different slot of the same handler. emits (0,DB) GtI4 (same handler, different slot)

Slots sharing this handler

(0,0xDB) GtI4

Description: draft, by claude-opus-4.7. Handler 0x66106AB0, dispatch slot 0x661072C4, modOpcodes line 1434.

GtR8

(0,0xDC)emittedprimary of 3handler #217Floating pointconfirmed_msdocs3 corpus hits
Compare two values with >; push Boolean result.

Pops two 64-bit IEEE 754 float (VB6 Double) operands b and a (top is b), pushes (a > b) as a I2 result.

Stack: [..., a:R8, b:R8] -> [..., (a > b):I2]

When the compiler emits it

Emitted for > when both operands are statically typed R8. Other type pairings select the matching suffix variant (GtI2/GtI4/GtR8/GtStr/GtVar).

VB6 source (verified: compiles to this slot)
Public Sub Main()
  Dim a As Double, n As Long
  If a > 2.5 Then n = 1
End Sub
Encoding, evidence and notes
Encoding

Encoding: DC, then 0 operand byte(s); total instruction length 1 byte(s).
Operands: none. All inputs come from the evaluation stack or the frame.
Observed: DC GtR8

Examples
Form2.LongHex @ 0x441B00 | 441B42    DC                    GtR8
Form2.Proc_4429BC @ 0x4429BC | 4429FC    DC                    GtR8
Form2.Form_Resize @ 0x46537C | 46568E    DC                    GtR8

3 occurrence(s) in PDFStreamDumper.

Evidence and notes

Emitted by VB6 SP6 (P-code): yes. Minimal probe: probes\op\0_DC_GtR8.

Handler: 0x66106AB6, shared by 3 dispatch slots (real opcode #217). This is the primary slot. Other slots: (1,6D) GtR8, (1,6E) GtR8.

Check of vb6_source_eq example: verified: compiles and emits this slot.

Corpus: 3 occurrence(s) in PDFStreamDumper_p.exe.

Example from the description
Dim a As Double, b As Double, c As Boolean
c = (a > b)
Slots sharing this handler

(1,0x6D) GtR8, (1,0x6E) GtR8

Description: draft, by claude-opus-4.7. Handler 0x66106AB6, dispatch slot 0x66107084, modOpcodes line 1435.

GtR8

(1,0x6D)not emitteddup of (0,DC)handler #217Floating pointconfirmed_handler
(alias) Compare two values with >; push Boolean result.

Alias dispatch slot (1, 0x6D) for the canonical GtR8 at (0, 0xDC); semantics are identical.

Pops two 64-bit IEEE 754 float (VB6 Double) operands b and a (top is b), pushes (a > b) as a I2 result.

Stack: [..., a:R8, b:R8] -> [..., (a > b):I2]

When the compiler emits it

Emitted for > when both operands are statically typed R8. Other type pairings select the matching suffix variant (GtI2/GtI4/GtR8/GtStr/GtVar).

VB6 source (from description, not verified)
Dim a As Double, b As Double, c As Boolean
c = (a > b)
Encoding, evidence and notes
Encoding

Encoding: FB 6D (lead byte FB selects table 1), then 0 operand byte(s); total instruction length 2 byte(s).
Operands: none. All inputs come from the evaluation stack or the frame.

Evidence and notes

Emitted by VB6 SP6 (P-code): not observed in about 3,070 probe programs. The slot exists in the runtime's dispatch table, but no tested source construct makes the compiler emit it.

Handler: 0x66106AB6, shared by 3 dispatch slots (real opcode #217). This is a duplicate slot of (0,DC) GtR8. Other slots: (0,DC) GtR8, (1,6E) GtR8.

Check of vb6_source_eq example: compiles, but emits a different slot of the same handler. emits (0,DC) GtR8 (same handler, different slot)

Slots sharing this handler

(0,0xDC) GtR8, (1,0x6E) GtR8

Description: draft, by claude-opus-4.7. Handler 0x66106AB6, dispatch slot 0x661072C8, modOpcodes line 1436.

GtR8

(1,0x6E)not emitteddup of (0,DC)handler #217Floating pointconfirmed_handler
(alias) Compare two values with >; push Boolean result.

Alias dispatch slot (1, 0x6E) for the canonical GtR8 at (0, 0xDC); semantics are identical.

Pops two 64-bit IEEE 754 float (VB6 Double) operands b and a (top is b), pushes (a > b) as a I2 result.

Stack: [..., a:R8, b:R8] -> [..., (a > b):I2]

When the compiler emits it

Emitted for > when both operands are statically typed R8. Other type pairings select the matching suffix variant (GtI2/GtI4/GtR8/GtStr/GtVar).

VB6 source (from description, not verified)
Dim a As Double, b As Double, c As Boolean
c = (a > b)
Encoding, evidence and notes
Encoding

Encoding: FB 6E (lead byte FB selects table 1), then 0 operand byte(s); total instruction length 2 byte(s).
Operands: none. All inputs come from the evaluation stack or the frame.

Evidence and notes

Emitted by VB6 SP6 (P-code): not observed in about 3,070 probe programs. The slot exists in the runtime's dispatch table, but no tested source construct makes the compiler emit it.

Handler: 0x66106AB6, shared by 3 dispatch slots (real opcode #217). This is a duplicate slot of (0,DC) GtR8. Other slots: (0,DC) GtR8, (1,6D) GtR8.

Check of vb6_source_eq example: compiles, but emits a different slot of the same handler. emits (0,DC) GtR8 (same handler, different slot)

Slots sharing this handler

(0,0xDC) GtR8, (1,0x6D) GtR8

Description: draft, by claude-opus-4.7. Handler 0x66106AB6, dispatch slot 0x661072CC, modOpcodes line 1437.

GtStr

(1,0x71)emittedhandler #298Stringconfirmed_msdocs
Compare two values with >; push Boolean result.

Pops two BSTR (VB6 String) operands b and a (top is b), pushes (a > b) as a I2 result.

Stack: [..., a:Str, b:Str] -> [..., (a > b):I2]

When the compiler emits it

Emitted for > when both operands are statically typed Str. Other type pairings select the matching suffix variant (GtI2/GtI4/GtR8/GtStr/GtVar).

VB6 source (verified: compiles to this slot)
Public Sub Main()
  Dim a As String, b As String, c As Boolean
  c = (a > b)
End Sub
Encoding, evidence and notes
Encoding

Encoding: FB 71 (lead byte FB selects table 1), then 0 operand byte(s); total instruction length 2 byte(s).
Operands: none. All inputs come from the evaluation stack or the frame.
Observed: FB71 GtStr

Evidence and notes

Emitted by VB6 SP6 (P-code): yes. Minimal probe: probes\op\1_71_GtStr.

Handler: 0x6610C1CB, unique to this slot (real opcode #298).

Check of vb6_source_eq example: verified: compiles and emits this slot.

Example from the description
Dim a As String, b As String, c As Boolean
c = (a > b)

Description: draft, by claude-opus-4.7. Handler 0x6610C1CB, dispatch slot 0x661072D8, modOpcodes line 1439.

GtTextStr

(1,0x73)emittedhandler #300Stringconfirmed_msdocs
Compare two values with >; push Boolean result.

Pops two String comparison in Text mode (case-insensitive, locale-aware) operands b and a (top is b), pushes (a > b) as a I2 result.

Stack: [..., a:TextStr, b:TextStr] -> [..., (a > b):I2]

Text-mode comparison uses the LCID-aware string collation (case-insensitive, locale-respecting) selected by Option Compare Text.

When the compiler emits it

Emitted for > when at least one operand is Variant or Option Compare Text is in effect; specific suffix encodes the result form.

VB6 source (verified: compiles to this slot)
Option Compare Text

Public Sub Main()
  Dim a As String, b As String, c As Boolean
  c = (a > b)
End Sub
Encoding, evidence and notes
Encoding

Encoding: FB 73 (lead byte FB selects table 1), then 0 operand byte(s); total instruction length 2 byte(s).
Operands: none. All inputs come from the evaluation stack or the frame.
Observed: FB73 GtTextStr

Evidence and notes

Emitted by VB6 SP6 (P-code): yes. Minimal probe: probes\op\1_73_GtTextStr.

Handler: 0x6610C1BD, unique to this slot (real opcode #300).

Check of vb6_source_eq example: verified: compiles and emits this slot.

Example from the description
Option Compare Text
Dim a As String, b As String, c As Boolean
c = (a > b)

Description: draft, by claude-opus-4.7. Handler 0x6610C1BD, dispatch slot 0x661072E0, modOpcodes line 1440.

GtTextVar

(1,0x72)emittedhandler #299Variantinferred_corpus
Variant > comparison (case-insensitive (Option Compare Text)); result Variant in a temporary.

Pops two Variants, compares them with > using case-insensitive (Option Compare Text) string comparison when both are strings, and writes the result (Boolean, or Null if either operand is Null) as a Variant into the temporary %a, whose address is pushed.

Stack: [..., a:Var, b:Var] -> [..., r:Var]

When the compiler emits it

Emitted when a Variant comparison result is kept as a value (c = (a > b)). Inside If/While conditions the compiler uses the ...VarBool form, which pushes a plain Boolean. Requires Option Compare Text in the module.

VB6 source (verified: compiles to this slot)
Option Compare Text

Public Sub Main()
  Dim a As Variant, b As Variant, c As Boolean
  c = (a > b)
End Sub
Encoding, evidence and notes
Encoding

Encoding: FB 72 (lead byte FB selects table 1), then 2 operand byte(s); total instruction length 4 byte(s).
vbdec template: %a
Operands:

  1. %a: local_var_ref, 2 byte(s). signed 16-bit offset from the procedure frame pointer (EBP). Negative = local/temporary (vbdec var_XX, XX = -offset), positive = argument (arg_XX).

Observed: FB72 48FF GtTextVar var_B8

Examples
FB72 48FF  GtTextVar var_B8

From the Phase 4 probe (VB6 SP6, P-code).

Evidence and notes

Emitted by VB6 SP6 (P-code): yes. Minimal probe: probes\op\1_72_GtTextVar.

Handler: 0x6610C23A, unique to this slot (real opcode #299).

Check of vb6_source_eq example: verified: compiles and emits this slot.

Example from the description
Option Compare Text

Public Sub Main()
  Dim a As Variant, b As Variant, c As Boolean
  c = (a > b)
End Sub

Description: draft, by claude-opus-5-5. Handler 0x6610C23A, dispatch slot 0x661072DC, modOpcodes line 1448.

GtTextVarBool

(1,0x75)emittedhandler #302Variantconfirmed_msdocs
Variant > comparison (text mode) whose result is used directly as a condition; push Boolean.

Pops two Variants and compares them with > (text (case-insensitive, Option Compare Text) string comparison when both are strings). A Null operand makes the condition False. Pushes a Boolean (-1/0) for the following branch.

Stack: [..., a:Var, b:Var] -> [..., r:Bool]

When the compiler emits it

Emitted when a Variant comparison is the condition of If, ElseIf, Do While/Until, Loop While/Until or a Select Case test, so a plain Boolean is enough. When the result is kept as a value (b = (v > w)), the compiler uses GtTextVar instead, which produces a Variant (possibly Null). Requires Option Compare Text.

VB6 source (verified: compiles to this slot)
Option Compare Text

Public Sub Main()
  Dim a As Variant, b As Variant, n As Long
  If a > b Then n = 1
End Sub
Encoding, evidence and notes
Encoding

Encoding: FB 75 (lead byte FB selects table 1), then 0 operand byte(s); total instruction length 2 byte(s).
Operands: none. All inputs come from the evaluation stack or the frame.
Observed: FB75 GtTextVarBool

Evidence and notes

Emitted by VB6 SP6 (P-code): yes. Minimal probe: probes\op\1_75_GtTextVarBool.

Handler: 0x6610C276, unique to this slot (real opcode #302).

Check of vb6_source_eq example: verified: compiles and emits this slot.

Example from the description
Option Compare Text
Sub Main()
  Dim a As Variant, b As Variant, n As Long
  a = 1: b = 2
  If a > b Then n = 1
End Sub

Description: draft, by claude-opus-5-5. Handler 0x6610C276, dispatch slot 0x661072E8, modOpcodes line 1442.

GtUI1

(1,0x6A)emittedhandler #296Integerconfirmed_msdocs
Compare two values with >; push Boolean result.

Pops two 8-bit unsigned integer (VB6 Byte) operands b and a (top is b), pushes (a > b) as a I2 result.

Stack: [..., a:UI1, b:UI1] -> [..., (a > b):I2]

When the compiler emits it

Emitted for > when both operands are statically typed UI1. Other type pairings select the matching suffix variant (GtI2/GtI4/GtR8/GtStr/GtVar).

VB6 source (verified: compiles to this slot)
Public Sub Main()
  Dim a As Byte, b As Byte, c As Boolean
  c = (a > b)
End Sub
Encoding, evidence and notes
Encoding

Encoding: FB 6A (lead byte FB selects table 1), then 0 operand byte(s); total instruction length 2 byte(s).
Operands: none. All inputs come from the evaluation stack or the frame.
Observed: FB6A GtUI1

Evidence and notes

Emitted by VB6 SP6 (P-code): yes. Minimal probe: probes\op\1_6A_GtUI1.

Handler: 0x6610C196, unique to this slot (real opcode #296).

Check of vb6_source_eq example: verified: compiles and emits this slot.

Example from the description
Dim a As Byte, b As Byte, c As Boolean
c = (a > b)

Description: draft, by claude-opus-4.7. Handler 0x6610C196, dispatch slot 0x661072BC, modOpcodes line 1438.

GtVar

(1,0x70)emittedhandler #297Variantinferred_corpus9 corpus hits
Compare two values with >; push Boolean result.

Pops two VBA Variant operands b and a (top is b), pushes (a > b) as a I2 result.

Stack: [..., a:Var, b:Var] -> [..., (a > b):I2]

Variant operands undergo VB6 type-promotion before comparison; type-mismatch raises run-time error 13.

When the compiler emits it

Emitted for > when at least one operand is Variant or Option Compare Text is in effect; specific suffix encodes the result form.

VB6 source (verified: compiles to this slot)
Public Sub Main()
  Dim a As Variant, b As Variant, c As Boolean
  c = (a > b)
End Sub
Encoding, evidence and notes
Encoding

Encoding: FB 70 (lead byte FB selects table 1), then 2 operand byte(s); total instruction length 4 byte(s).
vbdec template: %a
Operands:

  1. %a: local_var_ref, 2 byte(s). signed 16-bit offset from the procedure frame pointer (EBP). Negative = local/temporary (vbdec var_XX, XX = -offset), positive = argument (arg_XX).

Observed: FB70 48FF GtVar var_B8

Examples
Form1.Form_Load @ 0x479DC0 | 47AF25    FB70 10FF             GtVar var_F0
Form1.Form_Load @ 0x479DC0 | 47AF4D    FB70 B0FE             GtVar var_150
fso.Proc_467FC4 @ 0x467FC4 | 4680E7    FB70 34FF             GtVar var_CC

9 occurrence(s) in PDFStreamDumper.

Evidence and notes

Emitted by VB6 SP6 (P-code): yes. Minimal probe: probes\op\1_70_GtVar.

Handler: 0x66106B0D, unique to this slot (real opcode #297).

Check of vb6_source_eq example: verified: compiles and emits this slot.

Corpus: 9 occurrence(s) in PDFStreamDumper_p.exe.

Example from the description
Dim a As Variant, b As Variant, c As Boolean
c = (a > b)

Description: draft, by claude-opus-4.7. Handler 0x66106B0D, dispatch slot 0x661072D4, modOpcodes line 1447.

GtVarBool

(1,0x74)emittedhandler #301Variantconfirmed_msdocs119 corpus hits
Variant > comparison (binary mode) whose result is used directly as a condition; push Boolean.

Pops two Variants and compares them with > (binary string comparison when both are strings). A Null operand makes the condition False. Pushes a Boolean (-1/0) for the following branch.

Stack: [..., a:Var, b:Var] -> [..., r:Bool]

When the compiler emits it

Emitted when a Variant comparison is the condition of If, ElseIf, Do While/Until, Loop While/Until or a Select Case test, so a plain Boolean is enough. When the result is kept as a value (b = (v > w)), the compiler uses GtVar instead, which produces a Variant (possibly Null).

VB6 source (verified: compiles to this slot)
Public Sub Main()
  Dim a As Variant, b As Variant, n As Long
  If a > b Then n = 1
End Sub
Encoding, evidence and notes
Encoding

Encoding: FB 74 (lead byte FB selects table 1), then 0 operand byte(s); total instruction length 2 byte(s).
Operands: none. All inputs come from the evaluation stack or the frame.
Observed: FB74 GtVarBool

Examples
Form1.looksEscaped @ 0x449B64 | 449BB2    FB74                  GtVarBool
Form1.looksEscaped @ 0x449B64 | 449BE3    FB74                  GtVarBool
Form1.looksEscaped @ 0x449B64 | 449C15    FB74                  GtVarBool

119 occurrence(s) in PDFStreamDumper.

Evidence and notes

Emitted by VB6 SP6 (P-code): yes. Minimal probe: probes\op\1_74_GtVarBool.

Handler: 0x6610C282, unique to this slot (real opcode #301).

Check of vb6_source_eq example: verified: compiles and emits this slot.

Corpus: 119 occurrence(s) in PDFStreamDumper_p.exe.

Example from the description
Sub Main()
  Dim a As Variant, b As Variant, n As Long
  a = 1: b = 2
  If a > b Then n = 1
End Sub

Description: draft, by claude-opus-5-5. Handler 0x6610C282, dispatch slot 0x661072E4, modOpcodes line 1441.

Compare_Is

Object identity (Is operator)

Is

(1,0xD2)emittedhandler #335Object / COMconfirmed_msdocs68 corpus hits
Is operator: compare two object references for identity; push Boolean.

Object identity test (Is operator). Pops two object pointers, pushes Boolean indicating pointer equality (not equality of object contents).

Stack: [..., a:Pr, b:Pr] -> [..., (a Is b):Bool]

Nothing Is Nothing evaluates True; mixed Object/Nothing comparison is permitted.

When the compiler emits it

Emitted for a Is b and a Is Nothing. Not a Is Nothing adds NotI4.

VB6 source (verified: compiles to this slot)
Public Sub Main()
  Dim a As Object, n As Long
  Select Case a Is Nothing
  End Select
End Sub
Encoding, evidence and notes
Encoding

Encoding: FB D2 (lead byte FB selects table 1), then 0 operand byte(s); total instruction length 2 byte(s).
Operands: none. All inputs come from the evaluation stack or the frame.
Observed: FBD2 Is

Examples
Form1.mnuDecompileFlash_Click @ 0x4613A8 | 4613B9    FBD2                  Is
Form1.mnuDecompileFlashTools_Click @ 0x45A770 | 45A82A    FBD2                  Is
Form1.mnuErrorSaveRaw_Click @ 0x45C9BC | 45C9D6    FBD2                  Is

68 occurrence(s) in PDFStreamDumper.

Evidence and notes

Emitted by VB6 SP6 (P-code): yes. Minimal probe: probes\op\1_D2_Is.

Handler: 0x6610616D, unique to this slot (real opcode #335).

Check of vb6_source_eq example: verified: compiles and emits this slot.

Corpus: 68 occurrence(s) in PDFStreamDumper_p.exe.

Example from the description
Dim a As Object, n As Long
If a Is Nothing Then n = 1

Description: draft, by claude-opus-5-5. Handler 0x6610616D, dispatch slot 0x6610745C, modOpcodes line 455.

Compare_Le

Less-or-equal comparison

LeCy

(0,0xD8)emittedprimary of 2handler #213Currencyconfirmed_msdocs
Compare two values with <=; push Boolean result.

Pops two 64-bit scaled-integer Currency (×10^4) operands b and a (top is b), pushes (a <= b) as a I2 result.

Stack: [..., a:Cy, b:Cy] -> [..., (a <= b):I2]

When the compiler emits it

Emitted for <= when both operands are statically typed Cy. Other type pairings select the matching suffix variant (LeI2/LeI4/LeR8/LeStr/LeVar).

VB6 source (verified: compiles to this slot)
Public Sub Main()
  Dim a As Currency, b As Currency, c As Boolean
  c = (a <= b)
End Sub
Encoding, evidence and notes
Encoding

Encoding: D8, then 0 operand byte(s); total instruction length 1 byte(s).
Operands: none. All inputs come from the evaluation stack or the frame.
Observed: D8 LeCy

Evidence and notes

Emitted by VB6 SP6 (P-code): yes. Minimal probe: probes\op\0_D8_LeCy.

Handler: 0x6610C170, shared by 2 dispatch slots (real opcode #213). This is the primary slot. Other slots: (1,48) LeCy.

Check of vb6_source_eq example: verified: compiles and emits this slot.

Example from the description
Dim a As Currency, b As Currency, c As Boolean
c = (a <= b)
Slots sharing this handler

(1,0x48) LeCy

Description: draft, by claude-opus-4.7. Handler 0x6610C170, dispatch slot 0x66107074, modOpcodes line 1520.

LeCy

(1,0x48)not emitteddup of (0,D8)handler #213Currencyconfirmed_handler
(alias) Compare two values with <=; push Boolean result.

Alias dispatch slot (1, 0x48) for the canonical LeCy at (0, 0xD8); semantics are identical.

Pops two 64-bit scaled-integer Currency (×10^4) operands b and a (top is b), pushes (a <= b) as a I2 result.

Stack: [..., a:Cy, b:Cy] -> [..., (a <= b):I2]

When the compiler emits it

Emitted for <= when both operands are statically typed Cy. Other type pairings select the matching suffix variant (LeI2/LeI4/LeR8/LeStr/LeVar).

VB6 source (from description, not verified)
Dim a As Currency, b As Currency, c As Boolean
c = (a <= b)
Encoding, evidence and notes
Encoding

Encoding: FB 48 (lead byte FB selects table 1), then 0 operand byte(s); total instruction length 2 byte(s).
Operands: none. All inputs come from the evaluation stack or the frame.

Evidence and notes

Emitted by VB6 SP6 (P-code): not observed in about 3,070 probe programs. The slot exists in the runtime's dispatch table, but no tested source construct makes the compiler emit it.

Handler: 0x6610C170, shared by 2 dispatch slots (real opcode #213). This is a duplicate slot of (0,D8) LeCy. Other slots: (0,D8) LeCy.

Check of vb6_source_eq example: compiles, but emits a different slot of the same handler. emits (0,D8) LeCy (same handler, different slot)

Slots sharing this handler

(0,0xD8) LeCy

Description: draft, by claude-opus-4.7. Handler 0x6610C170, dispatch slot 0x66107234, modOpcodes line 1521.

LeCyR8

(0,0xD9)emittedprimary of 2handler #214Currencyconfirmed_msdocs
Compare a Currency with a non-Currency number using <=; push Boolean.

Pops the Currency operand and compares it with the floating-point operand (ST0), pushing the Boolean result (-1/0).

Stack: [..., c:Cy, x:R8 (ST0)] -> [..., (c <= x):Bool]

When the compiler emits it

Emitted when one operand of <= is Currency and the other is Integer, Long, Single, Double or a numeric literal (Currency <= Currency uses LeCy). If the Currency is on the right, the compiler swaps the operands and mirrors the operator: n <= c compiles to GeCyR8.

VB6 source (verified: compiles to this slot)
Public Sub Main()
  Dim a As Currency, b As Single, c As Variant
  c = a <= b
End Sub
Encoding, evidence and notes
Encoding

Encoding: D9, then 0 operand byte(s); total instruction length 1 byte(s).
Operands: none. All inputs come from the evaluation stack or the frame.
Observed: D9 LeCyR8

Evidence and notes

Emitted by VB6 SP6 (P-code): yes. Minimal probe: probes\op\0_D9_LeCyR8.

Handler: 0x6610C17A, shared by 2 dispatch slots (real opcode #214). This is the primary slot. Other slots: (1,4F) LeCyR8.

Check of vb6_source_eq example: verified: compiles and emits this slot.

Example from the description
Dim c As Currency, d As Double, b As Boolean
b = (c <= d)
Slots sharing this handler

(1,0x4F) LeCyR8

Description: draft, by claude-opus-5-5. Handler 0x6610C17A, dispatch slot 0x66107078, modOpcodes line 1522.

LeCyR8

(1,0x4F)not emitteddup of (0,D9)handler #214Currencyconfirmed_handler
(duplicate slot of (0,D9) LeCyR8) Compare a Currency with a non-Currency number using <=; push Boolean.

Dispatch slot (1, 0x4F) runs the same MSVBVM60 handler as (0,D9) LeCyR8; runtime behaviour is identical.

Pops the Currency operand and compares it with the floating-point operand (ST0), pushing the Boolean result (-1/0).

Stack: [..., c:Cy, x:R8 (ST0)] -> [..., (c <= x):Bool]

When the compiler emits it

Not emitted by VB6 SP6 in Phase 4 probes. Source that performs this operation (Currency <= non-Currency) compiles to (0,D9) LeCyR8 instead. The slot is reachable only by hand-crafted or non-VB6-compiled p-code.

Encoding, evidence and notes
Encoding

Encoding: FB 4F (lead byte FB selects table 1), then 0 operand byte(s); total instruction length 2 byte(s).
Operands: none. All inputs come from the evaluation stack or the frame.

Evidence and notes

Emitted by VB6 SP6 (P-code): not observed in about 3,070 probe programs. The slot exists in the runtime's dispatch table, but no tested source construct makes the compiler emit it.

Handler: 0x6610C17A, shared by 2 dispatch slots (real opcode #214). This is a duplicate slot of (0,D9) LeCyR8. Other slots: (0,D9) LeCyR8.

Slots sharing this handler

(0,0xD9) LeCyR8

Description: draft, by claude-opus-5-5. Handler 0x6610C17A, dispatch slot 0x66107250, modOpcodes line 1523.

LeI2

(0,0xD5)emittedprimary of 2handler #210Integerconfirmed_msdocs8 corpus hits
Compare two values with <=; push Boolean result.

Pops two 16-bit signed integer (VB6 Integer) operands b and a (top is b), pushes (a <= b) as a I2 result.

Stack: [..., a:I2, b:I2] -> [..., (a <= b):I2]

When the compiler emits it

Emitted for <= when both operands are statically typed I2. Other type pairings select the matching suffix variant (LeI2/LeI4/LeR8/LeStr/LeVar).

VB6 source (verified: compiles to this slot)
Public Sub Main()
  Dim a As Boolean, b As Boolean, c As Boolean
  c = (a <= b)
End Sub
Encoding, evidence and notes
Encoding

Encoding: D5, then 0 operand byte(s); total instruction length 1 byte(s).
Operands: none. All inputs come from the evaluation stack or the frame.
Observed: D5 LeI2

Examples
CFunc.isTextRange @ 0x44183C | 44184D    D5                    LeI2
CFunc.isTextRange @ 0x44183C | 441862    D5                    LeI2
CFunc.isTextRange @ 0x44183C | 441877    D5                    LeI2

8 occurrence(s) in PDFStreamDumper.

Evidence and notes

Emitted by VB6 SP6 (P-code): yes. Minimal probe: probes\op\0_D5_LeI2.

Handler: 0x66106A5C, shared by 2 dispatch slots (real opcode #210). This is the primary slot. Other slots: (1,44) LeI2.

Check of vb6_source_eq example: verified: compiles and emits this slot.

Corpus: 8 occurrence(s) in PDFStreamDumper_p.exe.

Example from the description
Dim a As Integer, b As Integer, c As Boolean
c = (a <= b)
Slots sharing this handler

(1,0x44) LeI2

Description: draft, by claude-opus-4.7. Handler 0x66106A5C, dispatch slot 0x66107068, modOpcodes line 1513.

LeI2

(1,0x44)not emitteddup of (0,D5)handler #210Integerconfirmed_handler
(alias) Compare two values with <=; push Boolean result.

Alias dispatch slot (1, 0x44) for the canonical LeI2 at (0, 0xD5); semantics are identical.

Pops two 16-bit signed integer (VB6 Integer) operands b and a (top is b), pushes (a <= b) as a I2 result.

Stack: [..., a:I2, b:I2] -> [..., (a <= b):I2]

When the compiler emits it

Emitted for <= when both operands are statically typed I2. Other type pairings select the matching suffix variant (LeI2/LeI4/LeR8/LeStr/LeVar).

VB6 source (from description, not verified)
Dim a As Integer, b As Integer, c As Boolean
c = (a <= b)
Encoding, evidence and notes
Encoding

Encoding: FB 44 (lead byte FB selects table 1), then 0 operand byte(s); total instruction length 2 byte(s).
Operands: none. All inputs come from the evaluation stack or the frame.

Evidence and notes

Emitted by VB6 SP6 (P-code): not observed in about 3,070 probe programs. The slot exists in the runtime's dispatch table, but no tested source construct makes the compiler emit it.

Handler: 0x66106A5C, shared by 2 dispatch slots (real opcode #210). This is a duplicate slot of (0,D5) LeI2. Other slots: (0,D5) LeI2.

Check of vb6_source_eq example: compiles, but emits a different slot of the same handler. emits (0,D5) LeI2 (same handler, different slot)

Slots sharing this handler

(0,0xD5) LeI2

Description: draft, by claude-opus-4.7. Handler 0x66106A5C, dispatch slot 0x66107224, modOpcodes line 1514.

LeI4

(0,0xD6)emittedprimary of 2handler #211Integerconfirmed_msdocs3 corpus hits
Compare two values with <=; push Boolean result.

Pops two 32-bit signed integer (VB6 Long) operands b and a (top is b), pushes (a <= b) as a I2 result.

Stack: [..., a:I4, b:I4] -> [..., (a <= b):I2]

When the compiler emits it

Emitted for <= when both operands are statically typed I4. Other type pairings select the matching suffix variant (LeI2/LeI4/LeR8/LeStr/LeVar).

VB6 source (verified: compiles to this slot)
Public Sub Main()
  Dim a As Long, b As Long, c As Boolean
  c = (a <= b)
End Sub
Encoding, evidence and notes
Encoding

Encoding: D6, then 0 operand byte(s); total instruction length 1 byte(s).
Operands: none. All inputs come from the evaluation stack or the frame.
Observed: D6 LeI4

Examples
CPdfParser.ParseFile @ 0x471F38 | 472129    D6                    LeI4
CPdfParser.ParseFile @ 0x471F38 | 4721F0    D6                    LeI4
CPdfParser.ParseFile @ 0x471F38 | 4723E0    D6                    LeI4

3 occurrence(s) in PDFStreamDumper.

Evidence and notes

Emitted by VB6 SP6 (P-code): yes. Minimal probe: probes\op\0_D6_LeI4.

Handler: 0x6610C167, shared by 2 dispatch slots (real opcode #211). This is the primary slot. Other slots: (1,45) LeI4.

Check of vb6_source_eq example: verified: compiles and emits this slot.

Corpus: 3 occurrence(s) in PDFStreamDumper_p.exe.

Example from the description
Dim a As Long, b As Long, c As Boolean
c = (a <= b)
Slots sharing this handler

(1,0x45) LeI4

Description: draft, by claude-opus-4.7. Handler 0x6610C167, dispatch slot 0x6610706C, modOpcodes line 1515.

LeI4

(1,0x45)not emitteddup of (0,D6)handler #211Integerconfirmed_handler
(alias) Compare two values with <=; push Boolean result.

Alias dispatch slot (1, 0x45) for the canonical LeI4 at (0, 0xD6); semantics are identical.

Pops two 32-bit signed integer (VB6 Long) operands b and a (top is b), pushes (a <= b) as a I2 result.

Stack: [..., a:I4, b:I4] -> [..., (a <= b):I2]

When the compiler emits it

Emitted for <= when both operands are statically typed I4. Other type pairings select the matching suffix variant (LeI2/LeI4/LeR8/LeStr/LeVar).

VB6 source (from description, not verified)
Dim a As Long, b As Long, c As Boolean
c = (a <= b)
Encoding, evidence and notes
Encoding

Encoding: FB 45 (lead byte FB selects table 1), then 0 operand byte(s); total instruction length 2 byte(s).
Operands: none. All inputs come from the evaluation stack or the frame.

Evidence and notes

Emitted by VB6 SP6 (P-code): not observed in about 3,070 probe programs. The slot exists in the runtime's dispatch table, but no tested source construct makes the compiler emit it.

Handler: 0x6610C167, shared by 2 dispatch slots (real opcode #211). This is a duplicate slot of (0,D6) LeI4. Other slots: (0,D6) LeI4.

Check of vb6_source_eq example: compiles, but emits a different slot of the same handler. emits (0,D6) LeI4 (same handler, different slot)

Slots sharing this handler

(0,0xD6) LeI4

Description: draft, by claude-opus-4.7. Handler 0x6610C167, dispatch slot 0x66107228, modOpcodes line 1516.

LeR4

(1,0x46)not emitteddup of (0,D7)handler #212Floating pointconfirmed_msdocs
Compare two values with <=; push Boolean result.

Pops two 32-bit IEEE 754 float (VB6 Single) operands b and a (top is b), pushes (a <= b) as a I2 result.

Stack: [..., a:R4, b:R4] -> [..., (a <= b):I2]

When the compiler emits it

Emitted for <= when both operands are statically typed R4. Other type pairings select the matching suffix variant (LeI2/LeI4/LeR8/LeStr/LeVar).

VB6 source (from description, not verified)
Dim a As Single, b As Single, c As Boolean
c = (a <= b)
Encoding, evidence and notes
Encoding

Encoding: FB 46 (lead byte FB selects table 1), then 0 operand byte(s); total instruction length 2 byte(s).
Operands: none. All inputs come from the evaluation stack or the frame.

Evidence and notes

Emitted by VB6 SP6 (P-code): not observed in about 3,070 probe programs. The slot exists in the runtime's dispatch table, but no tested source construct makes the compiler emit it.

Handler: 0x66106A78, shared by 3 dispatch slots (real opcode #212). This is a duplicate slot of (0,D7) LeR8. Other slots: (0,D7) LeR8, (1,47) LeR4.

Finding: Phase 4: Single arithmetic and comparisons compile to the R8 FPU opcodes (AddR8, LtR8, and so on). Operands are loaded with FLdFPR4 and stored with FStFPR4. This *R4 slot was never emitted.

Check of vb6_source_eq example: compiles, but emits a different slot of the same handler. emits (0,D7) LeR8 (same handler, different slot)

Slots sharing this handler

(0,0xD7) LeR8, (1,0x47) LeR4

Description: draft, by claude-opus-4.7. Handler 0x66106A78, dispatch slot 0x6610722C, modOpcodes line 1517.

LeR4

(1,0x47)not emitteddup of (0,D7)handler #212Floating pointconfirmed_handler
(alias) Compare two values with <=; push Boolean result.

Alias dispatch slot (1, 0x47) for the canonical LeR4 at (1, 0x46); semantics are identical.

Pops two 32-bit IEEE 754 float (VB6 Single) operands b and a (top is b), pushes (a <= b) as a I2 result.

Stack: [..., a:R4, b:R4] -> [..., (a <= b):I2]

When the compiler emits it

Emitted for <= when both operands are statically typed R4. Other type pairings select the matching suffix variant (LeI2/LeI4/LeR8/LeStr/LeVar).

VB6 source (from description, not verified)
Dim a As Single, b As Single, c As Boolean
c = (a <= b)
Encoding, evidence and notes
Encoding

Encoding: FB 47 (lead byte FB selects table 1), then 0 operand byte(s); total instruction length 2 byte(s).
Operands: none. All inputs come from the evaluation stack or the frame.

Evidence and notes

Emitted by VB6 SP6 (P-code): not observed in about 3,070 probe programs. The slot exists in the runtime's dispatch table, but no tested source construct makes the compiler emit it.

Handler: 0x66106A78, shared by 3 dispatch slots (real opcode #212). This is a duplicate slot of (0,D7) LeR8. Other slots: (0,D7) LeR8, (1,46) LeR4.

Finding: Phase 4: Single arithmetic and comparisons compile to the R8 FPU opcodes (AddR8, LtR8, and so on). Operands are loaded with FLdFPR4 and stored with FStFPR4. This *R4 slot was never emitted.

Check of vb6_source_eq example: compiles, but emits a different slot of the same handler. emits (0,D7) LeR8 (same handler, different slot)

Slots sharing this handler

(0,0xD7) LeR8, (1,0x46) LeR4

Description: draft, by claude-opus-4.7. Handler 0x66106A78, dispatch slot 0x66107230, modOpcodes line 1518.

LeR8

(0,0xD7)emittedprimary of 3handler #212Floating pointconfirmed_msdocs
Compare two values with <=; push Boolean result.

Pops two 64-bit IEEE 754 float (VB6 Double) operands b and a (top is b), pushes (a <= b) as a I2 result.

Stack: [..., a:R8, b:R8] -> [..., (a <= b):I2]

When the compiler emits it

Emitted for <= when both operands are statically typed R8. Other type pairings select the matching suffix variant (LeI2/LeI4/LeR8/LeStr/LeVar).

VB6 source (verified: compiles to this slot)
Public Sub Main()
  Dim a As Date, b As Date, c As Boolean
  c = (a <= b)
End Sub
Encoding, evidence and notes
Encoding

Encoding: D7, then 0 operand byte(s); total instruction length 1 byte(s).
Operands: none. All inputs come from the evaluation stack or the frame.
Observed: D7 LeR8

Evidence and notes

Emitted by VB6 SP6 (P-code): yes. Minimal probe: probes\op\0_D7_LeR8.

Handler: 0x66106A78, shared by 3 dispatch slots (real opcode #212). This is the primary slot. Other slots: (1,46) LeR4, (1,47) LeR4.

Check of vb6_source_eq example: verified: compiles and emits this slot.

Example from the description
Dim a As Double, b As Double, c As Boolean
c = (a <= b)
Slots sharing this handler

(1,0x46) LeR4, (1,0x47) LeR4

Description: draft, by claude-opus-4.7. Handler 0x66106A78, dispatch slot 0x66107070, modOpcodes line 1519.

LeStr

(1,0x4A)emittedhandler #277Stringconfirmed_msdocs
Compare two values with <=; push Boolean result.

Pops two BSTR (VB6 String) operands b and a (top is b), pushes (a <= b) as a I2 result.

Stack: [..., a:Str, b:Str] -> [..., (a <= b):I2]

When the compiler emits it

Emitted for <= when both operands are statically typed Str. Other type pairings select the matching suffix variant (LeI2/LeI4/LeR8/LeStr/LeVar).

VB6 source (verified: compiles to this slot)
Public Sub Main()
  Dim a As String, b As String, c As Boolean
  c = (a <= b)
End Sub
Encoding, evidence and notes
Encoding

Encoding: FB 4A (lead byte FB selects table 1), then 0 operand byte(s); total instruction length 2 byte(s).
Operands: none. All inputs come from the evaluation stack or the frame.
Observed: FB4A LeStr

Evidence and notes

Emitted by VB6 SP6 (P-code): yes. Minimal probe: probes\op\1_4A_LeStr.

Handler: 0x6610C192, unique to this slot (real opcode #277).

Check of vb6_source_eq example: verified: compiles and emits this slot.

Example from the description
Dim a As String, b As String, c As Boolean
c = (a <= b)

Description: draft, by claude-opus-4.7. Handler 0x6610C192, dispatch slot 0x6610723C, modOpcodes line 1524.

LeTextStr

(1,0x4C)emittedhandler #279Stringconfirmed_msdocs
Compare two values with <=; push Boolean result.

Pops two String comparison in Text mode (case-insensitive, locale-aware) operands b and a (top is b), pushes (a <= b) as a I2 result.

Stack: [..., a:TextStr, b:TextStr] -> [..., (a <= b):I2]

Text-mode comparison uses the LCID-aware string collation (case-insensitive, locale-respecting) selected by Option Compare Text.

When the compiler emits it

Emitted for <= when at least one operand is Variant or Option Compare Text is in effect; specific suffix encodes the result form.

VB6 source (verified: compiles to this slot)
Option Compare Text

Public Sub Main()
  Dim a As String, b As String, c As Boolean
  c = (a <= b)
End Sub
Encoding, evidence and notes
Encoding

Encoding: FB 4C (lead byte FB selects table 1), then 0 operand byte(s); total instruction length 2 byte(s).
Operands: none. All inputs come from the evaluation stack or the frame.
Observed: FB4C LeTextStr

Evidence and notes

Emitted by VB6 SP6 (P-code): yes. Minimal probe: probes\op\1_4C_LeTextStr.

Handler: 0x6610C184, unique to this slot (real opcode #279).

Check of vb6_source_eq example: verified: compiles and emits this slot.

Example from the description
Option Compare Text
Dim a As String, b As String, c As Boolean
c = (a <= b)

Description: draft, by claude-opus-4.7. Handler 0x6610C184, dispatch slot 0x66107244, modOpcodes line 1525.

LeTextVar

(1,0x4B)emittedhandler #278Variantinferred_corpus
Variant <= comparison (case-insensitive (Option Compare Text)); result Variant in a temporary.

Pops two Variants, compares them with <= using case-insensitive (Option Compare Text) string comparison when both are strings, and writes the result (Boolean, or Null if either operand is Null) as a Variant into the temporary %a, whose address is pushed.

Stack: [..., a:Var, b:Var] -> [..., r:Var]

When the compiler emits it

Emitted when a Variant comparison result is kept as a value (c = (a <= b)). Inside If/While conditions the compiler uses the ...VarBool form, which pushes a plain Boolean. Requires Option Compare Text in the module.

VB6 source (verified: compiles to this slot)
Option Compare Text

Public Sub Main()
  Dim a As Variant, b As Variant, c As Boolean
  c = (a <= b)
End Sub
Encoding, evidence and notes
Encoding

Encoding: FB 4B (lead byte FB selects table 1), then 2 operand byte(s); total instruction length 4 byte(s).
vbdec template: %a
Operands:

  1. %a: local_var_ref, 2 byte(s). signed 16-bit offset from the procedure frame pointer (EBP). Negative = local/temporary (vbdec var_XX, XX = -offset), positive = argument (arg_XX).

Observed: FB4B 48FF LeTextVar var_B8

Examples
FB4B 48FF  LeTextVar var_B8

From the Phase 4 probe (VB6 SP6, P-code).

Evidence and notes

Emitted by VB6 SP6 (P-code): yes. Minimal probe: probes\op\1_4B_LeTextVar.

Handler: 0x6610C213, unique to this slot (real opcode #278).

Check of vb6_source_eq example: verified: compiles and emits this slot.

Example from the description
Option Compare Text

Public Sub Main()
  Dim a As Variant, b As Variant, c As Boolean
  c = (a <= b)
End Sub

Description: draft, by claude-opus-5-5. Handler 0x6610C213, dispatch slot 0x66107240, modOpcodes line 1528.

LeTextVarBool

(1,0x4E)emittedhandler #281Variantconfirmed_msdocs
Variant <= comparison (text mode) whose result is used directly as a condition; push Boolean.

Pops two Variants and compares them with <= (text (case-insensitive, Option Compare Text) string comparison when both are strings). A Null operand makes the condition False. Pushes a Boolean (-1/0) for the following branch.

Stack: [..., a:Var, b:Var] -> [..., r:Bool]

When the compiler emits it

Emitted when a Variant comparison is the condition of If, ElseIf, Do While/Until, Loop While/Until or a Select Case test, so a plain Boolean is enough. When the result is kept as a value (b = (v <= w)), the compiler uses LeTextVar instead, which produces a Variant (possibly Null). Requires Option Compare Text.

VB6 source (verified: compiles to this slot)
Option Compare Text

Public Sub Main()
  Dim a As Variant, b As Variant, n As Long
  If a <= b Then n = 1
End Sub
Encoding, evidence and notes
Encoding

Encoding: FB 4E (lead byte FB selects table 1), then 0 operand byte(s); total instruction length 2 byte(s).
Operands: none. All inputs come from the evaluation stack or the frame.
Observed: FB4E LeTextVarBool

Evidence and notes

Emitted by VB6 SP6 (P-code): yes. Minimal probe: probes\op\1_4E_LeTextVarBool.

Handler: 0x6610C24F, unique to this slot (real opcode #281).

Check of vb6_source_eq example: verified: compiles and emits this slot.

Example from the description
Option Compare Text
Sub Main()
  Dim a As Variant, b As Variant, n As Long
  a = 1: b = 2
  If a <= b Then n = 1
End Sub

Description: draft, by claude-opus-5-5. Handler 0x6610C24F, dispatch slot 0x6610724C, modOpcodes line 1527.

LeUI1

(1,0x43)emittedhandler #275Integerconfirmed_msdocs2 corpus hits
Compare two values with <=; push Boolean result.

Pops two 8-bit unsigned integer (VB6 Byte) operands b and a (top is b), pushes (a <= b) as a I2 result.

Stack: [..., a:UI1, b:UI1] -> [..., (a <= b):I2]

When the compiler emits it

Emitted for <= when both operands are statically typed UI1. Other type pairings select the matching suffix variant (LeI2/LeI4/LeR8/LeStr/LeVar).

VB6 source (verified: compiles to this slot)
Public Sub Main()
  Dim a As Byte, b As Byte, c As Boolean
  c = (a <= b)
End Sub
Encoding, evidence and notes
Encoding

Encoding: FB 43 (lead byte FB selects table 1), then 0 operand byte(s); total instruction length 2 byte(s).
Operands: none. All inputs come from the evaluation stack or the frame.
Observed: FB43 LeUI1

Examples
Form2.mnuReplaceHexAscii_Click @ 0x46572C | 4658E8    FB43                  LeUI1
Form2.mnuReplaceHexAscii_Click @ 0x46572C | 465911    FB43                  LeUI1

2 occurrence(s) in PDFStreamDumper.

Evidence and notes

Emitted by VB6 SP6 (P-code): yes. Minimal probe: probes\op\1_43_LeUI1.

Handler: 0x6610C151, unique to this slot (real opcode #275).

Check of vb6_source_eq example: verified: compiles and emits this slot.

Corpus: 2 occurrence(s) in PDFStreamDumper_p.exe.

Example from the description
Dim a As Byte, b As Byte, c As Boolean
c = (a <= b)

Description: draft, by claude-opus-4.7. Handler 0x6610C151, dispatch slot 0x66107220, modOpcodes line 1512.

LeVar

(1,0x49)emittedhandler #276Variantinferred_corpus
Variant <= comparison (binary); result Variant in a temporary.

Pops two Variants, compares them with <= using binary string comparison when both are strings, and writes the result (Boolean, or Null if either operand is Null) as a Variant into the temporary %a, whose address is pushed.

Stack: [..., a:Var, b:Var] -> [..., r:Var]

When the compiler emits it

Emitted when a Variant comparison result is kept as a value (c = (a <= b)). Inside If/While conditions the compiler uses the ...VarBool form, which pushes a plain Boolean.

VB6 source (verified: compiles to this slot)
Public Sub Main()
  Dim a As Variant, b As Variant, c As Boolean
  c = (a <= b)
End Sub
Encoding, evidence and notes
Encoding

Encoding: FB 49 (lead byte FB selects table 1), then 2 operand byte(s); total instruction length 4 byte(s).
vbdec template: %a
Operands:

  1. %a: local_var_ref, 2 byte(s). signed 16-bit offset from the procedure frame pointer (EBP). Negative = local/temporary (vbdec var_XX, XX = -offset), positive = argument (arg_XX).

Observed: FB49 48FF LeVar var_B8

Examples
FB49 48FF  LeVar var_B8

From the Phase 4 probe (VB6 SP6, P-code).

Evidence and notes

Emitted by VB6 SP6 (P-code): yes. Minimal probe: probes\op\1_49_LeVar.

Handler: 0x6610C21F, unique to this slot (real opcode #276).

Check of vb6_source_eq example: verified: compiles and emits this slot.

Example from the description
Public Sub Main()
  Dim a As Variant, b As Variant, c As Boolean
  c = (a <= b)
End Sub

Description: draft, by claude-opus-5-5. Handler 0x6610C21F, dispatch slot 0x66107238, modOpcodes line 1529.

LeVarBool

(1,0x4D)emittedhandler #280Variantconfirmed_msdocs3 corpus hits
Variant <= comparison (binary mode) whose result is used directly as a condition; push Boolean.

Pops two Variants and compares them with <= (binary string comparison when both are strings). A Null operand makes the condition False. Pushes a Boolean (-1/0) for the following branch.

Stack: [..., a:Var, b:Var] -> [..., r:Bool]

When the compiler emits it

Emitted when a Variant comparison is the condition of If, ElseIf, Do While/Until, Loop While/Until or a Select Case test, so a plain Boolean is enough. When the result is kept as a value (b = (v <= w)), the compiler uses LeVar instead, which produces a Variant (possibly Null).

VB6 source (verified: compiles to this slot)
Public Sub Main()
  Dim a As Variant, b As Variant, n As Long
  If a <= b Then n = 1
End Sub
Encoding, evidence and notes
Encoding

Encoding: FB 4D (lead byte FB selects table 1), then 0 operand byte(s); total instruction length 2 byte(s).
Operands: none. All inputs come from the evaluation stack or the frame.
Observed: FB4D LeVarBool

Examples
fso.Proc_467FC4 @ 0x467FC4 | 4682BE    FB4D                  LeVarBool
CFunc.Proc_47817C @ 0x47817C | 47822F    FB4D                  LeVarBool
b64.Proc_450DCC @ 0x450DCC | 450E04    FB4D                  LeVarBool

3 occurrence(s) in PDFStreamDumper.

Evidence and notes

Emitted by VB6 SP6 (P-code): yes. Minimal probe: probes\op\1_4D_LeVarBool.

Handler: 0x66106B54, unique to this slot (real opcode #280).

Check of vb6_source_eq example: verified: compiles and emits this slot.

Corpus: 3 occurrence(s) in PDFStreamDumper_p.exe.

Example from the description
Sub Main()
  Dim a As Variant, b As Variant, n As Long
  a = 1: b = 2
  If a <= b Then n = 1
End Sub

Description: draft, by claude-opus-5-5. Handler 0x66106B54, dispatch slot 0x66107248, modOpcodes line 1526.

Compare_Like

Like-pattern comparison

LikeStr

(1,0x7E)emittedhandler #304Stringconfirmed_msdocs
Pop two strings; push True if the first matches the pattern in the second.

Pattern match (Like operator). Pops pattern:Str and text:Str, pushes Boolean indicating whether text matches pattern under VB6 wildcard rules (?, *, #, [abc], [!abc]).

Stack: [..., text:Str, pattern:Str] -> [..., result:Bool]

Option Compare Binary vs Option Compare Text selects case sensitivity.

When the compiler emits it

Emitted for the Like operator; Variant operand variant selected by argument type.

VB6 source (verified: compiles to this slot)
Public Sub Main()
  Dim a As String, b As String, c As Boolean
  c = (a Like b)
End Sub
Encoding, evidence and notes
Encoding

Encoding: FB 7E (lead byte FB selects table 1), then 0 operand byte(s); total instruction length 2 byte(s).
Operands: none. All inputs come from the evaluation stack or the frame.
Observed: FB7E LikeStr

Evidence and notes

Emitted by VB6 SP6 (P-code): yes. Minimal probe: probes\op\1_7E_LikeStr.

Handler: 0x6610C365, unique to this slot (real opcode #304).

Check of vb6_source_eq example: verified: compiles and emits this slot.

Example from the description
Dim s As String, ok As Boolean
ok = (s Like "abc*")

Description: draft, by claude-opus-4.7. Handler 0x6610C365, dispatch slot 0x6610730C, modOpcodes line 1550.

LikeTextStr

(1,0x80)emittedhandler #306Stringconfirmed_msdocs
Like between two Strings under Option Compare Text; push Boolean.

Pattern match (Like operator). Pops pattern:Str and text:Str, pushes Boolean indicating whether text matches pattern under VB6 wildcard rules (?, *, #, [abc], [!abc]).

Stack: [..., text:Str, pattern:Str] -> [..., result:Bool]

Option Compare Binary vs Option Compare Text selects case sensitivity.

When the compiler emits it

Emitted for s Like pattern with String operands in a module that has Option Compare Text (case-insensitive matching). Without it, LikeStr (1,7E) is used.

VB6 source (verified: compiles to this slot)
Option Compare Text

Public Sub Main()
  Dim a As String, b As String, c As Boolean
  c = (a Like b)
End Sub
Encoding, evidence and notes
Encoding

Encoding: FB 80 (lead byte FB selects table 1), then 0 operand byte(s); total instruction length 2 byte(s).
Operands: none. All inputs come from the evaluation stack or the frame.
Observed: FB80 LikeTextStr

Evidence and notes

Emitted by VB6 SP6 (P-code): yes. Minimal probe: probes\op\1_80_LikeTextStr.

Handler: 0x6610C351, unique to this slot (real opcode #306).

Check of vb6_source_eq example: verified: compiles and emits this slot.

Example from the description
Option Compare Text
Sub Main()
  Dim s As String, b As Boolean
  s = "ABC"
  b = (s Like "a*")
End Sub

Description: draft, by claude-opus-5-5. Handler 0x6610C351, dispatch slot 0x66107314, modOpcodes line 1551.

LikeTextVar

(1,0x7F)emittedhandler #305Variantinferred_corpus
Variant Like comparison (case-insensitive (Option Compare Text)); result Variant in a temporary.

Pops two Variants, compares them with Like using case-insensitive (Option Compare Text) string comparison when both are strings, and writes the result (Boolean, or Null if either operand is Null) as a Variant into the temporary %a, whose address is pushed.

Stack: [..., a:Var, b:Var] -> [..., r:Var]

When the compiler emits it

Emitted when a Variant comparison result is kept as a value (c = (a Like b)). Inside If/While conditions the compiler uses the ...VarBool form, which pushes a plain Boolean. Requires Option Compare Text in the module.

VB6 source (verified: compiles to this slot)
Option Compare Text

Public Sub Main()
  Dim a As Variant, b As Variant, c As Boolean
  c = (a Like b)
End Sub
Encoding, evidence and notes
Encoding

Encoding: FB 7F (lead byte FB selects table 1), then 2 operand byte(s); total instruction length 4 byte(s).
vbdec template: %a
Operands:

  1. %a: local_var_ref, 2 byte(s). signed 16-bit offset from the procedure frame pointer (EBP). Negative = local/temporary (vbdec var_XX, XX = -offset), positive = argument (arg_XX).

Observed: FB7F 48FF LikeTextVar var_B8

Examples
FB7F 48FF  LikeTextVar var_B8

From the Phase 4 probe (VB6 SP6, P-code).

Evidence and notes

Emitted by VB6 SP6 (P-code): yes. Minimal probe: probes\op\1_7F_LikeTextVar.

Handler: 0x6610C369, unique to this slot (real opcode #305).

Check of vb6_source_eq example: verified: compiles and emits this slot.

Example from the description
Option Compare Text

Public Sub Main()
  Dim a As Variant, b As Variant, c As Boolean
  c = (a Like b)
End Sub

Description: draft, by claude-opus-5-5. Handler 0x6610C369, dispatch slot 0x66107310, modOpcodes line 1555.

LikeTextVarBool

(1,0x82)not emittedhandler #308Variantconfirmed_msdocs
Like (text mode) with Variant operands, Boolean form; never emitted.

Pattern match (Like operator). Pops pattern:Str and text:Str, pushes Boolean indicating whether text matches pattern under VB6 wildcard rules (?, *, #, [abc], [!abc]).

Stack: [..., text:Str, pattern:Str] -> [..., result:Bool]

Option Compare Binary vs Option Compare Text selects case sensitivity.

When the compiler emits it

Not emitted by VB6 SP6: If v Like p Then with Variants (with or without Option Compare Text) compiles to LikeVar / LikeTextVar followed by a Boolean conversion; no ...VarBool form of Like was observed.

Encoding, evidence and notes
Encoding

Encoding: FB 82 (lead byte FB selects table 1), then 0 operand byte(s); total instruction length 2 byte(s).
Operands: none. All inputs come from the evaluation stack or the frame.

Evidence and notes

Emitted by VB6 SP6 (P-code): not observed in about 3,070 probe programs. The slot exists in the runtime's dispatch table, but no tested source construct makes the compiler emit it.

Handler: 0x6610C38A, unique to this slot (real opcode #308).

Description: draft, by claude-opus-5-5. Handler 0x6610C38A, dispatch slot 0x6610731C, modOpcodes line 1553.

LikeVar

(1,0x7D)emittedhandler #303Variantinferred_corpus2 corpus hits
Like with a Variant operand; result Variant in a temporary.

Pops two Variants, matches the first against the pattern in the second (Null if either is Null) and writes the result Variant to temporary %a.

Stack: [..., s:Var, p:Var] -> [..., r:Var]

When the compiler emits it

Emitted for Like when either operand is a Variant, both as a value and as an If condition (no ...Bool form was observed). String operands use LikeStr (1,7E).

VB6 source (verified: compiles to this slot)
Public Sub Main()
  Dim a As Variant, b As Variant, c As Boolean
  c = (a Like b)
End Sub
Encoding, evidence and notes
Encoding

Encoding: FB 7D (lead byte FB selects table 1), then 2 operand byte(s); total instruction length 4 byte(s).
vbdec template: %a
Operands:

  1. %a: local_var_ref, 2 byte(s). signed 16-bit offset from the procedure frame pointer (EBP). Negative = local/temporary (vbdec var_XX, XX = -offset), positive = argument (arg_XX).

Observed: FB7D 48FF LikeVar var_B8

Examples
fso.Proc_45D698 @ 0x45D698 | 45D6D6    FB7D 44FF             LikeVar var_BC
modEscapes.Proc_472E38 @ 0x472E38 | 47319B    FB7D 18FF             LikeVar var_E8

2 occurrence(s) in PDFStreamDumper.

Evidence and notes

Emitted by VB6 SP6 (P-code): yes. Minimal probe: probes\op\1_7D_LikeVar.

Handler: 0x6610C386, unique to this slot (real opcode #303).

Check of vb6_source_eq example: verified: compiles and emits this slot.

Corpus: 2 occurrence(s) in PDFStreamDumper_p.exe.

Example from the description
Dim v As Variant, b As Boolean
v = "abc"
b = (v Like "a*")

Description: draft, by claude-opus-5-5. Handler 0x6610C386, dispatch slot 0x66107308, modOpcodes line 1554.

LikeVarBool

(1,0x81)not emittedhandler #307Variantconfirmed_msdocs
Like with Variant operands, Boolean form; never emitted.

Pattern match (Like operator). Pops pattern:Str and text:Str, pushes Boolean indicating whether text matches pattern under VB6 wildcard rules (?, *, #, [abc], [!abc]).

Stack: [..., text:Str, pattern:Str] -> [..., result:Bool]

Option Compare Binary vs Option Compare Text selects case sensitivity.

When the compiler emits it

Not emitted by VB6 SP6: If v Like p Then compiles to LikeVar (1,7D) plus a Boolean conversion.

Encoding, evidence and notes
Encoding

Encoding: FB 81 (lead byte FB selects table 1), then 0 operand byte(s); total instruction length 2 byte(s).
Operands: none. All inputs come from the evaluation stack or the frame.

Evidence and notes

Emitted by VB6 SP6 (P-code): not observed in about 3,070 probe programs. The slot exists in the runtime's dispatch table, but no tested source construct makes the compiler emit it.

Handler: 0x6610C39C, unique to this slot (real opcode #307).

Description: draft, by claude-opus-5-5. Handler 0x6610C39C, dispatch slot 0x66107318, modOpcodes line 1552.

Compare_Lt

Less-than comparison

LtCy

(0,0xD3)emittedprimary of 2handler #208Currencyconfirmed_msdocs
Compare two values with <; push Boolean result.

Pops two 64-bit scaled-integer Currency (×10^4) operands b and a (top is b), pushes (a < b) as a I2 result.

Stack: [..., a:Cy, b:Cy] -> [..., (a < b):I2]

When the compiler emits it

Emitted for < when both operands are statically typed Cy. Other type pairings select the matching suffix variant (LtI2/LtI4/LtR8/LtStr/LtVar).

VB6 source (verified: compiles to this slot)
Public Sub Main()
  Dim a As Currency, b As Currency, c As Boolean
  c = (a < b)
End Sub
Encoding, evidence and notes
Encoding

Encoding: D3, then 0 operand byte(s); total instruction length 1 byte(s).
Operands: none. All inputs come from the evaluation stack or the frame.
Observed: D3 LtCy

Evidence and notes

Emitted by VB6 SP6 (P-code): yes. Minimal probe: probes\op\0_D3_LtCy.

Handler: 0x6610C12B, shared by 2 dispatch slots (real opcode #208). This is the primary slot. Other slots: (1,62) LtCy.

Check of vb6_source_eq example: verified: compiles and emits this slot.

Example from the description
Dim a As Currency, b As Currency, c As Boolean
c = (a < b)
Slots sharing this handler

(1,0x62) LtCy

Description: draft, by claude-opus-4.7. Handler 0x6610C12B, dispatch slot 0x66107060, modOpcodes line 1539.

LtCy

(1,0x62)not emitteddup of (0,D3)handler #208Currencyconfirmed_handler
(alias) Compare two values with <; push Boolean result.

Alias dispatch slot (1, 0x62) for the canonical LtCy at (0, 0xD3); semantics are identical.

Pops two 64-bit scaled-integer Currency (×10^4) operands b and a (top is b), pushes (a < b) as a I2 result.

Stack: [..., a:Cy, b:Cy] -> [..., (a < b):I2]

When the compiler emits it

Emitted for < when both operands are statically typed Cy. Other type pairings select the matching suffix variant (LtI2/LtI4/LtR8/LtStr/LtVar).

VB6 source (from description, not verified)
Dim a As Currency, b As Currency, c As Boolean
c = (a < b)
Encoding, evidence and notes
Encoding

Encoding: FB 62 (lead byte FB selects table 1), then 0 operand byte(s); total instruction length 2 byte(s).
Operands: none. All inputs come from the evaluation stack or the frame.

Evidence and notes

Emitted by VB6 SP6 (P-code): not observed in about 3,070 probe programs. The slot exists in the runtime's dispatch table, but no tested source construct makes the compiler emit it.

Handler: 0x6610C12B, shared by 2 dispatch slots (real opcode #208). This is a duplicate slot of (0,D3) LtCy. Other slots: (0,D3) LtCy.

Check of vb6_source_eq example: compiles, but emits a different slot of the same handler. emits (0,D3) LtCy (same handler, different slot)

Slots sharing this handler

(0,0xD3) LtCy

Description: draft, by claude-opus-4.7. Handler 0x6610C12B, dispatch slot 0x6610729C, modOpcodes line 1540.

LtCyR8

(0,0xD4)emittedprimary of 2handler #209Currencyconfirmed_msdocs
Compare a Currency with a non-Currency number using <; push Boolean.

Pops the Currency operand and compares it with the floating-point operand (ST0), pushing the Boolean result (-1/0).

Stack: [..., c:Cy, x:R8 (ST0)] -> [..., (c < x):Bool]

When the compiler emits it

Emitted when one operand of < is Currency and the other is Integer, Long, Single, Double or a numeric literal (Currency < Currency uses LtCy). If the Currency is on the right, the compiler swaps the operands and mirrors the operator: n <= c compiles to GeCyR8.

VB6 source (verified: compiles to this slot)
Public Sub Main()
  Dim a As Currency, b As Single, c As Variant
  c = a < b
End Sub
Encoding, evidence and notes
Encoding

Encoding: D4, then 0 operand byte(s); total instruction length 1 byte(s).
Operands: none. All inputs come from the evaluation stack or the frame.
Observed: D4 LtCyR8

Evidence and notes

Emitted by VB6 SP6 (P-code): yes. Minimal probe: probes\op\0_D4_LtCyR8.

Handler: 0x6610C135, shared by 2 dispatch slots (real opcode #209). This is the primary slot. Other slots: (1,69) LtCyR8.

Check of vb6_source_eq example: verified: compiles and emits this slot.

Example from the description
Dim c As Currency, d As Double, b As Boolean
b = (c < d)
Slots sharing this handler

(1,0x69) LtCyR8

Description: draft, by claude-opus-5-5. Handler 0x6610C135, dispatch slot 0x66107064, modOpcodes line 1541.

LtCyR8

(1,0x69)not emitteddup of (0,D4)handler #209Currencyconfirmed_handler
(duplicate slot of (0,D4) LtCyR8) Compare a Currency with a non-Currency number using <; push Boolean.

Dispatch slot (1, 0x69) runs the same MSVBVM60 handler as (0,D4) LtCyR8; runtime behaviour is identical.

Pops the Currency operand and compares it with the floating-point operand (ST0), pushing the Boolean result (-1/0).

Stack: [..., c:Cy, x:R8 (ST0)] -> [..., (c < x):Bool]

When the compiler emits it

Not emitted by VB6 SP6 in Phase 4 probes. Source that performs this operation (Currency < non-Currency) compiles to (0,D4) LtCyR8 instead. The slot is reachable only by hand-crafted or non-VB6-compiled p-code.

Encoding, evidence and notes
Encoding

Encoding: FB 69 (lead byte FB selects table 1), then 0 operand byte(s); total instruction length 2 byte(s).
Operands: none. All inputs come from the evaluation stack or the frame.

Evidence and notes

Emitted by VB6 SP6 (P-code): not observed in about 3,070 probe programs. The slot exists in the runtime's dispatch table, but no tested source construct makes the compiler emit it.

Handler: 0x6610C135, shared by 2 dispatch slots (real opcode #209). This is a duplicate slot of (0,D4) LtCyR8. Other slots: (0,D4) LtCyR8.

Slots sharing this handler

(0,0xD4) LtCyR8

Description: draft, by claude-opus-5-5. Handler 0x6610C135, dispatch slot 0x661072B8, modOpcodes line 1542.

LtI2

(0,0xD0)emittedprimary of 2handler #205Integerconfirmed_msdocs
Compare two values with <; push Boolean result.

Pops two 16-bit signed integer (VB6 Integer) operands b and a (top is b), pushes (a < b) as a I2 result.

Stack: [..., a:I2, b:I2] -> [..., (a < b):I2]

When the compiler emits it

Emitted for < when both operands are statically typed I2. Other type pairings select the matching suffix variant (LtI2/LtI4/LtR8/LtStr/LtVar).

VB6 source (verified: compiles to this slot)
Public Sub Main()
  Dim a As Boolean, b As Boolean, c As Boolean
  c = (a < b)
End Sub
Encoding, evidence and notes
Encoding

Encoding: D0, then 0 operand byte(s); total instruction length 1 byte(s).
Operands: none. All inputs come from the evaluation stack or the frame.
Observed: D0 LtI2

Evidence and notes

Emitted by VB6 SP6 (P-code): yes. Minimal probe: probes\op\0_D0_LtI2.

Handler: 0x66106A26, shared by 2 dispatch slots (real opcode #205). This is the primary slot. Other slots: (1,5E) LtI2.

Check of vb6_source_eq example: verified: compiles and emits this slot.

Example from the description
Dim a As Integer, b As Integer, c As Boolean
c = (a < b)
Slots sharing this handler

(1,0x5E) LtI2

Description: draft, by claude-opus-4.7. Handler 0x66106A26, dispatch slot 0x66107054, modOpcodes line 1532.

LtI2

(1,0x5E)not emitteddup of (0,D0)handler #205Integerconfirmed_handler
(alias) Compare two values with <; push Boolean result.

Alias dispatch slot (1, 0x5E) for the canonical LtI2 at (0, 0xD0); semantics are identical.

Pops two 16-bit signed integer (VB6 Integer) operands b and a (top is b), pushes (a < b) as a I2 result.

Stack: [..., a:I2, b:I2] -> [..., (a < b):I2]

When the compiler emits it

Emitted for < when both operands are statically typed I2. Other type pairings select the matching suffix variant (LtI2/LtI4/LtR8/LtStr/LtVar).

VB6 source (from description, not verified)
Dim a As Integer, b As Integer, c As Boolean
c = (a < b)
Encoding, evidence and notes
Encoding

Encoding: FB 5E (lead byte FB selects table 1), then 0 operand byte(s); total instruction length 2 byte(s).
Operands: none. All inputs come from the evaluation stack or the frame.

Evidence and notes

Emitted by VB6 SP6 (P-code): not observed in about 3,070 probe programs. The slot exists in the runtime's dispatch table, but no tested source construct makes the compiler emit it.

Handler: 0x66106A26, shared by 2 dispatch slots (real opcode #205). This is a duplicate slot of (0,D0) LtI2. Other slots: (0,D0) LtI2.

Check of vb6_source_eq example: compiles, but emits a different slot of the same handler. emits (0,D0) LtI2 (same handler, different slot)

Slots sharing this handler

(0,0xD0) LtI2

Description: draft, by claude-opus-4.7. Handler 0x66106A26, dispatch slot 0x6610728C, modOpcodes line 1533.

LtI4

(0,0xD1)emittedprimary of 2handler #206Integerconfirmed_msdocs34 corpus hits
Compare two values with <; push Boolean result.

Pops two 32-bit signed integer (VB6 Long) operands b and a (top is b), pushes (a < b) as a I2 result.

Stack: [..., a:I4, b:I4] -> [..., (a < b):I2]

When the compiler emits it

Emitted for < when both operands are statically typed I4. Other type pairings select the matching suffix variant (LtI2/LtI4/LtR8/LtStr/LtVar).

VB6 source (verified: compiles to this slot)
Public Sub Main()
  Dim a As Long, b As Long, c As Boolean
  c = (a < b)
End Sub
Encoding, evidence and notes
Encoding

Encoding: D1, then 0 operand byte(s); total instruction length 1 byte(s).
Operands: none. All inputs come from the evaluation stack or the frame.
Observed: D1 LtI4

Examples
Form1.mnuUpdateCurrent_Click @ 0x46EC0C | 46EEDD    D1                    LtI4
Form1.parser_NewStream @ 0x472690 | 4726FA    D1                    LtI4
Form1.GetActiveData @ 0x464174 | 46428A    D1                    LtI4

34 occurrence(s) in PDFStreamDumper.

Evidence and notes

Emitted by VB6 SP6 (P-code): yes. Minimal probe: probes\op\0_D1_LtI4.

Handler: 0x66106A2D, shared by 2 dispatch slots (real opcode #206). This is the primary slot. Other slots: (1,5F) LtI4.

Check of vb6_source_eq example: verified: compiles and emits this slot.

Corpus: 34 occurrence(s) in PDFStreamDumper_p.exe.

Example from the description
Dim a As Long, b As Long, c As Boolean
c = (a < b)
Slots sharing this handler

(1,0x5F) LtI4

Description: draft, by claude-opus-4.7. Handler 0x66106A2D, dispatch slot 0x66107058, modOpcodes line 1534.

LtI4

(1,0x5F)not emitteddup of (0,D1)handler #206Integerconfirmed_handler
(alias) Compare two values with <; push Boolean result.

Alias dispatch slot (1, 0x5F) for the canonical LtI4 at (0, 0xD1); semantics are identical.

Pops two 32-bit signed integer (VB6 Long) operands b and a (top is b), pushes (a < b) as a I2 result.

Stack: [..., a:I4, b:I4] -> [..., (a < b):I2]

When the compiler emits it

Emitted for < when both operands are statically typed I4. Other type pairings select the matching suffix variant (LtI2/LtI4/LtR8/LtStr/LtVar).

VB6 source (from description, not verified)
Dim a As Long, b As Long, c As Boolean
c = (a < b)
Encoding, evidence and notes
Encoding

Encoding: FB 5F (lead byte FB selects table 1), then 0 operand byte(s); total instruction length 2 byte(s).
Operands: none. All inputs come from the evaluation stack or the frame.

Evidence and notes

Emitted by VB6 SP6 (P-code): not observed in about 3,070 probe programs. The slot exists in the runtime's dispatch table, but no tested source construct makes the compiler emit it.

Handler: 0x66106A2D, shared by 2 dispatch slots (real opcode #206). This is a duplicate slot of (0,D1) LtI4. Other slots: (0,D1) LtI4.

Check of vb6_source_eq example: compiles, but emits a different slot of the same handler. emits (0,D1) LtI4 (same handler, different slot)

Slots sharing this handler

(0,0xD1) LtI4

Description: draft, by claude-opus-4.7. Handler 0x66106A2D, dispatch slot 0x66107290, modOpcodes line 1535.

LtR4

(1,0x60)not emitteddup of (0,D2)handler #207Floating pointconfirmed_msdocs
Compare two values with <; push Boolean result.

Pops two 32-bit IEEE 754 float (VB6 Single) operands b and a (top is b), pushes (a < b) as a I2 result.

Stack: [..., a:R4, b:R4] -> [..., (a < b):I2]

When the compiler emits it

Emitted for < when both operands are statically typed R4. Other type pairings select the matching suffix variant (LtI2/LtI4/LtR8/LtStr/LtVar).

VB6 source (from description, not verified)
Dim a As Single, b As Single, c As Boolean
c = (a < b)
Encoding, evidence and notes
Encoding

Encoding: FB 60 (lead byte FB selects table 1), then 0 operand byte(s); total instruction length 2 byte(s).
Operands: none. All inputs come from the evaluation stack or the frame.

Evidence and notes

Emitted by VB6 SP6 (P-code): not observed in about 3,070 probe programs. The slot exists in the runtime's dispatch table, but no tested source construct makes the compiler emit it.

Handler: 0x66106A48, shared by 3 dispatch slots (real opcode #207). This is a duplicate slot of (0,D2) LtR8. Other slots: (0,D2) LtR8, (1,61) LtR4.

Finding: Phase 4: Single arithmetic and comparisons compile to the R8 FPU opcodes (AddR8, LtR8, and so on). Operands are loaded with FLdFPR4 and stored with FStFPR4. This *R4 slot was never emitted.

Check of vb6_source_eq example: compiles, but emits a different slot of the same handler. emits (0,D2) LtR8 (same handler, different slot)

Slots sharing this handler

(0,0xD2) LtR8, (1,0x61) LtR4

Description: draft, by claude-opus-4.7. Handler 0x66106A48, dispatch slot 0x66107294, modOpcodes line 1536.

LtR4

(1,0x61)not emitteddup of (0,D2)handler #207Floating pointconfirmed_handler
(alias) Compare two values with <; push Boolean result.

Alias dispatch slot (1, 0x61) for the canonical LtR4 at (1, 0x60); semantics are identical.

Pops two 32-bit IEEE 754 float (VB6 Single) operands b and a (top is b), pushes (a < b) as a I2 result.

Stack: [..., a:R4, b:R4] -> [..., (a < b):I2]

When the compiler emits it

Emitted for < when both operands are statically typed R4. Other type pairings select the matching suffix variant (LtI2/LtI4/LtR8/LtStr/LtVar).

VB6 source (from description, not verified)
Dim a As Single, b As Single, c As Boolean
c = (a < b)
Encoding, evidence and notes
Encoding

Encoding: FB 61 (lead byte FB selects table 1), then 0 operand byte(s); total instruction length 2 byte(s).
Operands: none. All inputs come from the evaluation stack or the frame.

Evidence and notes

Emitted by VB6 SP6 (P-code): not observed in about 3,070 probe programs. The slot exists in the runtime's dispatch table, but no tested source construct makes the compiler emit it.

Handler: 0x66106A48, shared by 3 dispatch slots (real opcode #207). This is a duplicate slot of (0,D2) LtR8. Other slots: (0,D2) LtR8, (1,60) LtR4.

Finding: Phase 4: Single arithmetic and comparisons compile to the R8 FPU opcodes (AddR8, LtR8, and so on). Operands are loaded with FLdFPR4 and stored with FStFPR4. This *R4 slot was never emitted.

Check of vb6_source_eq example: compiles, but emits a different slot of the same handler. emits (0,D2) LtR8 (same handler, different slot)

Slots sharing this handler

(0,0xD2) LtR8, (1,0x60) LtR4

Description: draft, by claude-opus-4.7. Handler 0x66106A48, dispatch slot 0x66107298, modOpcodes line 1537.

LtR8

(0,0xD2)emittedprimary of 3handler #207Floating pointconfirmed_msdocs6 corpus hits
Compare two values with <; push Boolean result.

Pops two 64-bit IEEE 754 float (VB6 Double) operands b and a (top is b), pushes (a < b) as a I2 result.

Stack: [..., a:R8, b:R8] -> [..., (a < b):I2]

When the compiler emits it

Emitted for < when both operands are statically typed R8. Other type pairings select the matching suffix variant (LtI2/LtI4/LtR8/LtStr/LtVar).

VB6 source (verified: compiles to this slot)
Public Sub Main()
  Dim a As Date, b As Date, c As Boolean
  c = (a < b)
End Sub
Encoding, evidence and notes
Encoding

Encoding: D2, then 0 operand byte(s); total instruction length 1 byte(s).
Operands: none. All inputs come from the evaluation stack or the frame.
Observed: D2 LtR8

Examples
Form1.Form_Resize @ 0x474F3C | 474FA1    D2                    LtR8
Form1.Form_Resize @ 0x474F3C | 474FC8    D2                    LtR8
Form2.Proc_4429BC @ 0x4429BC | 442A0D    D2                    LtR8

6 occurrence(s) in PDFStreamDumper.

Evidence and notes

Emitted by VB6 SP6 (P-code): yes. Minimal probe: probes\op\0_D2_LtR8.

Handler: 0x66106A48, shared by 3 dispatch slots (real opcode #207). This is the primary slot. Other slots: (1,60) LtR4, (1,61) LtR4.

Check of vb6_source_eq example: verified: compiles and emits this slot.

Corpus: 6 occurrence(s) in PDFStreamDumper_p.exe.

Example from the description
Dim a As Double, b As Double, c As Boolean
c = (a < b)
Slots sharing this handler

(1,0x60) LtR4, (1,0x61) LtR4

Description: draft, by claude-opus-4.7. Handler 0x66106A48, dispatch slot 0x6610705C, modOpcodes line 1538.

LtStr

(1,0x64)emittedhandler #291Stringconfirmed_msdocs
Compare two values with <; push Boolean result.

Pops two BSTR (VB6 String) operands b and a (top is b), pushes (a < b) as a I2 result.

Stack: [..., a:Str, b:Str] -> [..., (a < b):I2]

When the compiler emits it

Emitted for < when both operands are statically typed Str. Other type pairings select the matching suffix variant (LtI2/LtI4/LtR8/LtStr/LtVar).

VB6 source (verified: compiles to this slot)
Public Sub Main()
  Dim a As String, b As String, c As Boolean
  c = (a < b)
End Sub
Encoding, evidence and notes
Encoding

Encoding: FB 64 (lead byte FB selects table 1), then 0 operand byte(s); total instruction length 2 byte(s).
Operands: none. All inputs come from the evaluation stack or the frame.
Observed: FB64 LtStr

Evidence and notes

Emitted by VB6 SP6 (P-code): yes. Minimal probe: probes\op\1_64_LtStr.

Handler: 0x6610C14D, unique to this slot (real opcode #291).

Check of vb6_source_eq example: verified: compiles and emits this slot.

Example from the description
Dim a As String, b As String, c As Boolean
c = (a < b)

Description: draft, by claude-opus-4.7. Handler 0x6610C14D, dispatch slot 0x661072A4, modOpcodes line 1543.

LtTextStr

(1,0x66)emittedhandler #293Stringconfirmed_msdocs
Compare two values with <; push Boolean result.

Pops two String comparison in Text mode (case-insensitive, locale-aware) operands b and a (top is b), pushes (a < b) as a I2 result.

Stack: [..., a:TextStr, b:TextStr] -> [..., (a < b):I2]

Text-mode comparison uses the LCID-aware string collation (case-insensitive, locale-respecting) selected by Option Compare Text.

When the compiler emits it

Emitted for < when at least one operand is Variant or Option Compare Text is in effect; specific suffix encodes the result form.

VB6 source (verified: compiles to this slot)
Option Compare Text

Public Sub Main()
  Dim a As String, b As String, c As Boolean
  c = (a < b)
End Sub
Encoding, evidence and notes
Encoding

Encoding: FB 66 (lead byte FB selects table 1), then 0 operand byte(s); total instruction length 2 byte(s).
Operands: none. All inputs come from the evaluation stack or the frame.
Observed: FB66 LtTextStr

Evidence and notes

Emitted by VB6 SP6 (P-code): yes. Minimal probe: probes\op\1_66_LtTextStr.

Handler: 0x6610C13F, unique to this slot (real opcode #293).

Check of vb6_source_eq example: verified: compiles and emits this slot.

Example from the description
Option Compare Text
Dim a As String, b As String, c As Boolean
c = (a < b)

Description: draft, by claude-opus-4.7. Handler 0x6610C13F, dispatch slot 0x661072AC, modOpcodes line 1544.

LtTextVar

(1,0x65)emittedhandler #292Variantinferred_corpus
Variant < comparison (case-insensitive (Option Compare Text)); result Variant in a temporary.

Pops two Variants, compares them with < using case-insensitive (Option Compare Text) string comparison when both are strings, and writes the result (Boolean, or Null if either operand is Null) as a Variant into the temporary %a, whose address is pushed.

Stack: [..., a:Var, b:Var] -> [..., r:Var]

When the compiler emits it

Emitted when a Variant comparison result is kept as a value (c = (a < b)). Inside If/While conditions the compiler uses the ...VarBool form, which pushes a plain Boolean. Requires Option Compare Text in the module.

VB6 source (verified: compiles to this slot)
Option Compare Text

Public Sub Main()
  Dim a As Variant, b As Variant, c As Boolean
  c = (a < b)
End Sub
Encoding, evidence and notes
Encoding

Encoding: FB 65 (lead byte FB selects table 1), then 2 operand byte(s); total instruction length 4 byte(s).
vbdec template: %a
Operands:

  1. %a: local_var_ref, 2 byte(s). signed 16-bit offset from the procedure frame pointer (EBP). Negative = local/temporary (vbdec var_XX, XX = -offset), positive = argument (arg_XX).

Observed: FB65 48FF LtTextVar var_B8

Examples
FB65 48FF  LtTextVar var_B8

From the Phase 4 probe (VB6 SP6, P-code).

Evidence and notes

Emitted by VB6 SP6 (P-code): yes. Minimal probe: probes\op\1_65_LtTextVar.

Handler: 0x6610C223, unique to this slot (real opcode #292).

Check of vb6_source_eq example: verified: compiles and emits this slot.

Example from the description
Option Compare Text

Public Sub Main()
  Dim a As Variant, b As Variant, c As Boolean
  c = (a < b)
End Sub

Description: draft, by claude-opus-5-5. Handler 0x6610C223, dispatch slot 0x661072A8, modOpcodes line 1547.

LtTextVarBool

(1,0x68)emittedhandler #295Variantconfirmed_msdocs
Variant < comparison (text mode) whose result is used directly as a condition; push Boolean.

Pops two Variants and compares them with < (text (case-insensitive, Option Compare Text) string comparison when both are strings). A Null operand makes the condition False. Pushes a Boolean (-1/0) for the following branch.

Stack: [..., a:Var, b:Var] -> [..., r:Bool]

When the compiler emits it

Emitted when a Variant comparison is the condition of If, ElseIf, Do While/Until, Loop While/Until or a Select Case test, so a plain Boolean is enough. When the result is kept as a value (b = (v < w)), the compiler uses LtTextVar instead, which produces a Variant (possibly Null). Requires Option Compare Text.

VB6 source (verified: compiles to this slot)
Option Compare Text

Public Sub Main()
  Dim a As Variant, b As Variant, n As Long
  If a < b Then n = 1
End Sub
Encoding, evidence and notes
Encoding

Encoding: FB 68 (lead byte FB selects table 1), then 0 operand byte(s); total instruction length 2 byte(s).
Operands: none. All inputs come from the evaluation stack or the frame.
Observed: FB68 LtTextVarBool

Evidence and notes

Emitted by VB6 SP6 (P-code): yes. Minimal probe: probes\op\1_68_LtTextVarBool.

Handler: 0x6610C256, unique to this slot (real opcode #295).

Check of vb6_source_eq example: verified: compiles and emits this slot.

Example from the description
Option Compare Text
Sub Main()
  Dim a As Variant, b As Variant, n As Long
  a = 1: b = 2
  If a < b Then n = 1
End Sub

Description: draft, by claude-opus-5-5. Handler 0x6610C256, dispatch slot 0x661072B4, modOpcodes line 1546.

LtUI1

(1,0x5D)emittedhandler #289Integerconfirmed_msdocs
Compare two values with <; push Boolean result.

Pops two 8-bit unsigned integer (VB6 Byte) operands b and a (top is b), pushes (a < b) as a I2 result.

Stack: [..., a:UI1, b:UI1] -> [..., (a < b):I2]

When the compiler emits it

Emitted for < when both operands are statically typed UI1. Other type pairings select the matching suffix variant (LtI2/LtI4/LtR8/LtStr/LtVar).

VB6 source (verified: compiles to this slot)
Public Sub Main()
  Dim a As Byte, b As Byte, c As Boolean
  c = (a < b)
End Sub
Encoding, evidence and notes
Encoding

Encoding: FB 5D (lead byte FB selects table 1), then 0 operand byte(s); total instruction length 2 byte(s).
Operands: none. All inputs come from the evaluation stack or the frame.
Observed: FB5D LtUI1

Evidence and notes

Emitted by VB6 SP6 (P-code): yes. Minimal probe: probes\op\1_5D_LtUI1.

Handler: 0x6610C118, unique to this slot (real opcode #289).

Check of vb6_source_eq example: verified: compiles and emits this slot.

Example from the description
Dim a As Byte, b As Byte, c As Boolean
c = (a < b)

Description: draft, by claude-opus-4.7. Handler 0x6610C118, dispatch slot 0x66107288, modOpcodes line 1531.

LtVar

(1,0x63)emittedhandler #290Variantinferred_corpus4 corpus hits
Compare two values with <; push Boolean result.

Pops two VBA Variant operands b and a (top is b), pushes (a < b) as a I2 result.

Stack: [..., a:Var, b:Var] -> [..., (a < b):I2]

Variant operands undergo VB6 type-promotion before comparison; type-mismatch raises run-time error 13.

When the compiler emits it

Emitted for < when at least one operand is Variant or Option Compare Text is in effect; specific suffix encodes the result form.

VB6 source (verified: compiles to this slot)
Public Sub Main()
  Dim a As Variant, b As Variant, c As Boolean
  c = (a < b)
End Sub
Encoding, evidence and notes
Encoding

Encoding: FB 63 (lead byte FB selects table 1), then 2 operand byte(s); total instruction length 4 byte(s).
vbdec template: %a
Operands:

  1. %a: local_var_ref, 2 byte(s). signed 16-bit offset from the procedure frame pointer (EBP). Negative = local/temporary (vbdec var_XX, XX = -offset), positive = argument (arg_XX).

Observed: FB63 48FF LtVar var_B8

Examples
fso.Proc_467FC4 @ 0x467FC4 | 4680F4    FB63 BCFE             LtVar var_144
frmReplace.cmdFindNext_Click @ 0x459BD4 | 459D30    FB63 00FF             LtVar var_100
CApplyFilters.Proc_44AEEC @ 0x44AEEC | 44AF6A    FB63 F8FE             LtVar var_108

4 occurrence(s) in PDFStreamDumper.

Evidence and notes

Emitted by VB6 SP6 (P-code): yes. Minimal probe: probes\op\1_63_LtVar.

Handler: 0x66106B04, unique to this slot (real opcode #290).

Check of vb6_source_eq example: verified: compiles and emits this slot.

Corpus: 4 occurrence(s) in PDFStreamDumper_p.exe.

Example from the description
Dim a As Variant, b As Variant, c As Boolean
c = (a < b)

Description: draft, by claude-opus-4.7. Handler 0x66106B04, dispatch slot 0x661072A0, modOpcodes line 1548.

LtVarBool

(1,0x67)emittedhandler #294Variantconfirmed_msdocs21 corpus hits
Variant < comparison (binary mode) whose result is used directly as a condition; push Boolean.

Pops two Variants and compares them with < (binary string comparison when both are strings). A Null operand makes the condition False. Pushes a Boolean (-1/0) for the following branch.

Stack: [..., a:Var, b:Var] -> [..., r:Bool]

When the compiler emits it

Emitted when a Variant comparison is the condition of If, ElseIf, Do While/Until, Loop While/Until or a Select Case test, so a plain Boolean is enough. When the result is kept as a value (b = (v < w)), the compiler uses LtVar instead, which produces a Variant (possibly Null).

VB6 source (verified: compiles to this slot)
Public Sub Main()
  Dim a As Variant, b As Variant, n As Long
  If a < b Then n = 1
End Sub
Encoding, evidence and notes
Encoding

Encoding: FB 67 (lead byte FB selects table 1), then 0 operand byte(s); total instruction length 2 byte(s).
Operands: none. All inputs come from the evaluation stack or the frame.
Observed: FB67 LtVarBool

Examples
fso.Proc_467FC4 @ 0x467FC4 | 468179    FB67                  LtVarBool
fso.Proc_467FC4 @ 0x467FC4 | 468276    FB67                  LtVarBool
fso.Proc_44F3C8 @ 0x44F3C8 | 44F493    FB67                  LtVarBool

21 occurrence(s) in PDFStreamDumper.

Evidence and notes

Emitted by VB6 SP6 (P-code): yes. Minimal probe: probes\op\1_67_LtVarBool.

Handler: 0x6610C262, unique to this slot (real opcode #294).

Check of vb6_source_eq example: verified: compiles and emits this slot.

Corpus: 21 occurrence(s) in PDFStreamDumper_p.exe.

Example from the description
Sub Main()
  Dim a As Variant, b As Variant, n As Long
  a = 1: b = 2
  If a < b Then n = 1
End Sub

Description: draft, by claude-opus-5-5. Handler 0x6610C262, dispatch slot 0x661072B0, modOpcodes line 1545.

Compare_Ne

Not-equal comparison

NeCy

(0,0xCE)emittedprimary of 2handler #203Currencyconfirmed_msdocs
Compare two values with <>; push Boolean result.

Pops two 64-bit scaled-integer Currency (×10^4) operands b and a (top is b), pushes (a <> b) as a I2 result.

Stack: [..., a:Cy, b:Cy] -> [..., (a <> b):I2]

When the compiler emits it

Emitted for <> when both operands are statically typed Cy. Other type pairings select the matching suffix variant (NeI2/NeI4/NeR8/NeStr/NeVar).

VB6 source (verified: compiles to this slot)
Public Sub Main()
  Dim a As Currency, b As Currency, c As Boolean
  c = (a <> b)
End Sub
Encoding, evidence and notes
Encoding

Encoding: CE, then 0 operand byte(s); total instruction length 1 byte(s).
Operands: none. All inputs come from the evaluation stack or the frame.
Observed: CE NeCy

Evidence and notes

Emitted by VB6 SP6 (P-code): yes. Minimal probe: probes\op\0_CE_NeCy.

Handler: 0x6610C0FD, shared by 2 dispatch slots (real opcode #203). This is the primary slot. Other slots: (1,3B) NeCy.

Check of vb6_source_eq example: verified: compiles and emits this slot.

Example from the description
Dim a As Currency, b As Currency, c As Boolean
c = (a <> b)
Slots sharing this handler

(1,0x3B) NeCy

Description: draft, by claude-opus-4.7. Handler 0x6610C0FD, dispatch slot 0x6610704C, modOpcodes line 1501.

NeCy

(1,0x3B)not emitteddup of (0,CE)handler #203Currencyconfirmed_handler
(alias) Compare two values with <>; push Boolean result.

Alias dispatch slot (1, 0x3B) for the canonical NeCy at (0, 0xCE); semantics are identical.

Pops two 64-bit scaled-integer Currency (×10^4) operands b and a (top is b), pushes (a <> b) as a I2 result.

Stack: [..., a:Cy, b:Cy] -> [..., (a <> b):I2]

When the compiler emits it

Emitted for <> when both operands are statically typed Cy. Other type pairings select the matching suffix variant (NeI2/NeI4/NeR8/NeStr/NeVar).

VB6 source (from description, not verified)
Dim a As Currency, b As Currency, c As Boolean
c = (a <> b)
Encoding, evidence and notes
Encoding

Encoding: FB 3B (lead byte FB selects table 1), then 0 operand byte(s); total instruction length 2 byte(s).
Operands: none. All inputs come from the evaluation stack or the frame.

Evidence and notes

Emitted by VB6 SP6 (P-code): not observed in about 3,070 probe programs. The slot exists in the runtime's dispatch table, but no tested source construct makes the compiler emit it.

Handler: 0x6610C0FD, shared by 2 dispatch slots (real opcode #203). This is a duplicate slot of (0,CE) NeCy. Other slots: (0,CE) NeCy.

Check of vb6_source_eq example: compiles, but emits a different slot of the same handler. emits (0,CE) NeCy (same handler, different slot)

Slots sharing this handler

(0,0xCE) NeCy

Description: draft, by claude-opus-4.7. Handler 0x6610C0FD, dispatch slot 0x66107200, modOpcodes line 1502.

NeCyR8

(0,0xCF)emittedprimary of 2handler #204Currencyconfirmed_msdocs
Compare a Currency with a non-Currency number using <>; push Boolean.

Pops the Currency operand and compares it with the floating-point operand (ST0), pushing the Boolean result (-1/0).

Stack: [..., c:Cy, x:R8 (ST0)] -> [..., (c <> x):Bool]

When the compiler emits it

Emitted when one operand of <> is Currency and the other is Integer, Long, Single, Double or a numeric literal (Currency <> Currency uses NeCy). If the Currency is on the right, the compiler swaps the operands and mirrors the operator: n <= c compiles to GeCyR8.

VB6 source (verified: compiles to this slot)
Public Sub Main()
  Dim a As Currency, b As Single, c As Variant
  c = a <> b
End Sub
Encoding, evidence and notes
Encoding

Encoding: CF, then 0 operand byte(s); total instruction length 1 byte(s).
Operands: none. All inputs come from the evaluation stack or the frame.
Observed: CF NeCyR8

Evidence and notes

Emitted by VB6 SP6 (P-code): yes. Minimal probe: probes\op\0_CF_NeCyR8.

Handler: 0x6610C107, shared by 2 dispatch slots (real opcode #204). This is the primary slot. Other slots: (1,42) NeCyR8.

Check of vb6_source_eq example: verified: compiles and emits this slot.

Example from the description
Dim c As Currency, d As Double, b As Boolean
b = (c <> d)
Slots sharing this handler

(1,0x42) NeCyR8

Description: draft, by claude-opus-5-5. Handler 0x6610C107, dispatch slot 0x66107050, modOpcodes line 1503.

NeCyR8

(1,0x42)not emitteddup of (0,CF)handler #204Currencyconfirmed_handler
(duplicate slot of (0,CF) NeCyR8) Compare a Currency with a non-Currency number using <>; push Boolean.

Dispatch slot (1, 0x42) runs the same MSVBVM60 handler as (0,CF) NeCyR8; runtime behaviour is identical.

Pops the Currency operand and compares it with the floating-point operand (ST0), pushing the Boolean result (-1/0).

Stack: [..., c:Cy, x:R8 (ST0)] -> [..., (c <> x):Bool]

When the compiler emits it

Not emitted by VB6 SP6 in Phase 4 probes. Source that performs this operation (Currency <> non-Currency) compiles to (0,CF) NeCyR8 instead. The slot is reachable only by hand-crafted or non-VB6-compiled p-code.

Encoding, evidence and notes
Encoding

Encoding: FB 42 (lead byte FB selects table 1), then 0 operand byte(s); total instruction length 2 byte(s).
Operands: none. All inputs come from the evaluation stack or the frame.

Evidence and notes

Emitted by VB6 SP6 (P-code): not observed in about 3,070 probe programs. The slot exists in the runtime's dispatch table, but no tested source construct makes the compiler emit it.

Handler: 0x6610C107, shared by 2 dispatch slots (real opcode #204). This is a duplicate slot of (0,CF) NeCyR8. Other slots: (0,CF) NeCyR8.

Slots sharing this handler

(0,0xCF) NeCyR8

Description: draft, by claude-opus-5-5. Handler 0x6610C107, dispatch slot 0x6610721C, modOpcodes line 1504.

NeI2

(0,0xCB)emittedprimary of 3handler #200Integerconfirmed_msdocs6 corpus hits
Compare two values with <>; push Boolean result.

Pops two 16-bit signed integer (VB6 Integer) operands b and a (top is b), pushes (a <> b) as a I2 result.

Stack: [..., a:I2, b:I2] -> [..., (a <> b):I2]

When the compiler emits it

Emitted for <> when both operands are statically typed I2. Other type pairings select the matching suffix variant (NeI2/NeI4/NeR8/NeStr/NeVar).

VB6 source (verified: compiles to this slot)
Public Sub Main()
  Dim a As Boolean, b As Boolean, c As Boolean
  c = (a <> b)
End Sub
Encoding, evidence and notes
Encoding

Encoding: CB, then 0 operand byte(s); total instruction length 1 byte(s).
Operands: none. All inputs come from the evaluation stack or the frame.
Observed: CB NeI2

Examples
Form1.mnuDecompressSWC_Click @ 0x45E9E4 | 45EAA1    CB                    NeI2
Form1.mnuDecompressSWC_Click @ 0x45E9E4 | 45EAB6    CB                    NeI2
Form1.mnuDecompressSWC_Click @ 0x45E9E4 | 45EACC    CB                    NeI2

6 occurrence(s) in PDFStreamDumper.

Evidence and notes

Emitted by VB6 SP6 (P-code): yes. Minimal probe: probes\op\0_CB_NeI2.

Handler: 0x661069D1, shared by 3 dispatch slots (real opcode #200). This is the primary slot. Other slots: (1,36) NeUI1, (1,37) NeUI1.

Check of vb6_source_eq example: verified: compiles and emits this slot.

Corpus: 6 occurrence(s) in PDFStreamDumper_p.exe.

Example from the description
Dim a As Integer, b As Integer, c As Boolean
c = (a <> b)
Slots sharing this handler

(1,0x36) NeUI1, (1,0x37) NeUI1

Description: draft, by claude-opus-4.7. Handler 0x661069D1, dispatch slot 0x66107040, modOpcodes line 1495.

NeI4

(0,0xCC)emittedprimary of 2handler #201Integerconfirmed_msdocs55 corpus hits
Compare two values with <>; push Boolean result.

Pops two 32-bit signed integer (VB6 Long) operands b and a (top is b), pushes (a <> b) as a I2 result.

Stack: [..., a:I4, b:I4] -> [..., (a <> b):I2]

When the compiler emits it

Emitted for <> when both operands are statically typed I4. Other type pairings select the matching suffix variant (NeI2/NeI4/NeR8/NeStr/NeVar).

VB6 source (verified: compiles to this slot)
Public Sub Main()
  Dim a As Long, b As Long, c As Boolean
  c = (a <> b)
End Sub
Encoding, evidence and notes
Encoding

Encoding: CC, then 0 operand byte(s); total instruction length 1 byte(s).
Operands: none. All inputs come from the evaluation stack or the frame.
Observed: CC NeI4

Examples
Form1.mnuDebugBreakAtStream_Click @ 0x44802C | 4480AB    CC                    NeI4
Form1.mnuDecompileFlash_Click @ 0x4613A8 | 4614C9    CC                    NeI4
Form1.mnuLoadAsImage_Click @ 0x45B0F4 | 45B29D    CC                    NeI4

55 occurrence(s) in PDFStreamDumper.

Evidence and notes

Emitted by VB6 SP6 (P-code): yes. Minimal probe: probes\op\0_CC_NeI4.

Handler: 0x661069E9, shared by 2 dispatch slots (real opcode #201). This is the primary slot. Other slots: (1,38) NeI4.

Check of vb6_source_eq example: verified: compiles and emits this slot.

Corpus: 55 occurrence(s) in PDFStreamDumper_p.exe.

Example from the description
Dim a As Long, b As Long, c As Boolean
c = (a <> b)
Slots sharing this handler

(1,0x38) NeI4

Description: draft, by claude-opus-4.7. Handler 0x661069E9, dispatch slot 0x66107044, modOpcodes line 1496.

NeI4

(1,0x38)not emitteddup of (0,CC)handler #201Integerconfirmed_handler
(alias) Compare two values with <>; push Boolean result.

Alias dispatch slot (1, 0x38) for the canonical NeI4 at (0, 0xCC); semantics are identical.

Pops two 32-bit signed integer (VB6 Long) operands b and a (top is b), pushes (a <> b) as a I2 result.

Stack: [..., a:I4, b:I4] -> [..., (a <> b):I2]

When the compiler emits it

Emitted for <> when both operands are statically typed I4. Other type pairings select the matching suffix variant (NeI2/NeI4/NeR8/NeStr/NeVar).

VB6 source (from description, not verified)
Dim a As Long, b As Long, c As Boolean
c = (a <> b)
Encoding, evidence and notes
Encoding

Encoding: FB 38 (lead byte FB selects table 1), then 0 operand byte(s); total instruction length 2 byte(s).
Operands: none. All inputs come from the evaluation stack or the frame.

Evidence and notes

Emitted by VB6 SP6 (P-code): not observed in about 3,070 probe programs. The slot exists in the runtime's dispatch table, but no tested source construct makes the compiler emit it.

Handler: 0x661069E9, shared by 2 dispatch slots (real opcode #201). This is a duplicate slot of (0,CC) NeI4. Other slots: (0,CC) NeI4.

Check of vb6_source_eq example: compiles, but emits a different slot of the same handler. emits (0,CC) NeI4 (same handler, different slot)

Slots sharing this handler

(0,0xCC) NeI4

Description: draft, by claude-opus-4.7. Handler 0x661069E9, dispatch slot 0x661071F4, modOpcodes line 1497.

NeR4

(1,0x39)not emitteddup of (0,CD)handler #202Floating pointconfirmed_msdocs
Compare two values with <>; push Boolean result.

Pops two 32-bit IEEE 754 float (VB6 Single) operands b and a (top is b), pushes (a <> b) as a I2 result.

Stack: [..., a:R4, b:R4] -> [..., (a <> b):I2]

When the compiler emits it

Emitted for <> when both operands are statically typed R4. Other type pairings select the matching suffix variant (NeI2/NeI4/NeR8/NeStr/NeVar).

VB6 source (from description, not verified)
Dim a As Single, b As Single, c As Boolean
c = (a <> b)
Encoding, evidence and notes
Encoding

Encoding: FB 39 (lead byte FB selects table 1), then 0 operand byte(s); total instruction length 2 byte(s).
Operands: none. All inputs come from the evaluation stack or the frame.

Evidence and notes

Emitted by VB6 SP6 (P-code): not observed in about 3,070 probe programs. The slot exists in the runtime's dispatch table, but no tested source construct makes the compiler emit it.

Handler: 0x661069FF, shared by 3 dispatch slots (real opcode #202). This is a duplicate slot of (0,CD) NeR8. Other slots: (0,CD) NeR8, (1,3A) NeR4.

Finding: Phase 4: Single arithmetic and comparisons compile to the R8 FPU opcodes (AddR8, LtR8, and so on). Operands are loaded with FLdFPR4 and stored with FStFPR4. This *R4 slot was never emitted.

Check of vb6_source_eq example: compiles, but emits a different slot of the same handler. emits (0,CD) NeR8 (same handler, different slot)

Slots sharing this handler

(0,0xCD) NeR8, (1,0x3A) NeR4

Description: draft, by claude-opus-4.7. Handler 0x661069FF, dispatch slot 0x661071F8, modOpcodes line 1498.

NeR4

(1,0x3A)not emitteddup of (0,CD)handler #202Floating pointconfirmed_handler
(alias) Compare two values with <>; push Boolean result.

Alias dispatch slot (1, 0x3A) for the canonical NeR4 at (1, 0x39); semantics are identical.

Pops two 32-bit IEEE 754 float (VB6 Single) operands b and a (top is b), pushes (a <> b) as a I2 result.

Stack: [..., a:R4, b:R4] -> [..., (a <> b):I2]

When the compiler emits it

Emitted for <> when both operands are statically typed R4. Other type pairings select the matching suffix variant (NeI2/NeI4/NeR8/NeStr/NeVar).

VB6 source (from description, not verified)
Dim a As Single, b As Single, c As Boolean
c = (a <> b)
Encoding, evidence and notes
Encoding

Encoding: FB 3A (lead byte FB selects table 1), then 0 operand byte(s); total instruction length 2 byte(s).
Operands: none. All inputs come from the evaluation stack or the frame.

Evidence and notes

Emitted by VB6 SP6 (P-code): not observed in about 3,070 probe programs. The slot exists in the runtime's dispatch table, but no tested source construct makes the compiler emit it.

Handler: 0x661069FF, shared by 3 dispatch slots (real opcode #202). This is a duplicate slot of (0,CD) NeR8. Other slots: (0,CD) NeR8, (1,39) NeR4.

Finding: Phase 4: Single arithmetic and comparisons compile to the R8 FPU opcodes (AddR8, LtR8, and so on). Operands are loaded with FLdFPR4 and stored with FStFPR4. This *R4 slot was never emitted.

Check of vb6_source_eq example: compiles, but emits a different slot of the same handler. emits (0,CD) NeR8 (same handler, different slot)

Slots sharing this handler

(0,0xCD) NeR8, (1,0x39) NeR4

Description: draft, by claude-opus-4.7. Handler 0x661069FF, dispatch slot 0x661071FC, modOpcodes line 1499.

NeR8

(0,0xCD)emittedprimary of 3handler #202Floating pointconfirmed_msdocs
Compare two values with <>; push Boolean result.

Pops two 64-bit IEEE 754 float (VB6 Double) operands b and a (top is b), pushes (a <> b) as a I2 result.

Stack: [..., a:R8, b:R8] -> [..., (a <> b):I2]

When the compiler emits it

Emitted for <> when both operands are statically typed R8. Other type pairings select the matching suffix variant (NeI2/NeI4/NeR8/NeStr/NeVar).

VB6 source (verified: compiles to this slot)
Public Sub Main()
  Dim a As Date, b As Date, c As Boolean
  c = (a <> b)
End Sub
Encoding, evidence and notes
Encoding

Encoding: CD, then 0 operand byte(s); total instruction length 1 byte(s).
Operands: none. All inputs come from the evaluation stack or the frame.
Observed: CD NeR8

Evidence and notes

Emitted by VB6 SP6 (P-code): yes. Minimal probe: probes\op\0_CD_NeR8.

Handler: 0x661069FF, shared by 3 dispatch slots (real opcode #202). This is the primary slot. Other slots: (1,39) NeR4, (1,3A) NeR4.

Check of vb6_source_eq example: verified: compiles and emits this slot.

Example from the description
Dim a As Double, b As Double, c As Boolean
c = (a <> b)
Slots sharing this handler

(1,0x39) NeR4, (1,0x3A) NeR4

Description: draft, by claude-opus-4.7. Handler 0x661069FF, dispatch slot 0x66107048, modOpcodes line 1500.

NeStr

(1,0x3D)emittedhandler #270Stringconfirmed_msdocs16 corpus hits
Compare two values with <>; push Boolean result.

Pops two BSTR (VB6 String) operands b and a (top is b), pushes (a <> b) as a I2 result.

Stack: [..., a:Str, b:Str] -> [..., (a <> b):I2]

When the compiler emits it

Emitted for <> when both operands are statically typed Str. Other type pairings select the matching suffix variant (NeI2/NeI4/NeR8/NeStr/NeVar).

VB6 source (verified: compiles to this slot)
Public Sub Main()
  Dim a As String, b As String, c As Boolean
  c = (a <> b)
End Sub
Encoding, evidence and notes
Encoding

Encoding: FB 3D (lead byte FB selects table 1), then 0 operand byte(s); total instruction length 2 byte(s).
Operands: none. All inputs come from the evaluation stack or the frame.
Observed: FB3D NeStr

Examples
Form1.mnuErrorSaveRawAll_Click @ 0x45D950 | 45DADC    FB3D                  NeStr
Form1.mnuErrorSaveRaw_Click @ 0x45C9BC | 45CB5F    FB3D                  NeStr
Form1.mnuSaveAllRaw_Click @ 0x462368 | 46245A    FB3D                  NeStr

16 occurrence(s) in PDFStreamDumper.

Evidence and notes

Emitted by VB6 SP6 (P-code): yes. Minimal probe: probes\op\1_3D_NeStr.

Handler: 0x66106A06, unique to this slot (real opcode #270).

Check of vb6_source_eq example: verified: compiles and emits this slot.

Corpus: 16 occurrence(s) in PDFStreamDumper_p.exe.

Example from the description
Dim a As String, b As String, c As Boolean
c = (a <> b)

Description: draft, by claude-opus-4.7. Handler 0x66106A06, dispatch slot 0x66107208, modOpcodes line 1505.

NeTextStr

(1,0x3F)emittedhandler #272Stringconfirmed_msdocs
Compare two values with <>; push Boolean result.

Pops two String comparison in Text mode (case-insensitive, locale-aware) operands b and a (top is b), pushes (a <> b) as a I2 result.

Stack: [..., a:TextStr, b:TextStr] -> [..., (a <> b):I2]

Text-mode comparison uses the LCID-aware string collation (case-insensitive, locale-respecting) selected by Option Compare Text.

When the compiler emits it

Emitted for <> when at least one operand is Variant or Option Compare Text is in effect; specific suffix encodes the result form.

VB6 source (verified: compiles to this slot)
Option Compare Text

Public Sub Main()
  Dim a As String, b As String, c As Boolean
  c = (a <> b)
End Sub
Encoding, evidence and notes
Encoding

Encoding: FB 3F (lead byte FB selects table 1), then 0 operand byte(s); total instruction length 2 byte(s).
Operands: none. All inputs come from the evaluation stack or the frame.
Observed: FB3F NeTextStr

Evidence and notes

Emitted by VB6 SP6 (P-code): yes. Minimal probe: probes\op\1_3F_NeTextStr.

Handler: 0x6610C111, unique to this slot (real opcode #272).

Check of vb6_source_eq example: verified: compiles and emits this slot.

Example from the description
Option Compare Text
Dim a As String, b As String, c As Boolean
c = (a <> b)

Description: draft, by claude-opus-4.7. Handler 0x6610C111, dispatch slot 0x66107210, modOpcodes line 1506.

NeTextVar

(1,0x3E)emittedhandler #271Variantinferred_corpus
Variant <> comparison (case-insensitive (Option Compare Text)); result Variant in a temporary.

Pops two Variants, compares them with <> using case-insensitive (Option Compare Text) string comparison when both are strings, and writes the result (Boolean, or Null if either operand is Null) as a Variant into the temporary %a, whose address is pushed.

Stack: [..., a:Var, b:Var] -> [..., r:Var]

When the compiler emits it

Emitted when a Variant comparison result is kept as a value (c = (a <> b)). Inside If/While conditions the compiler uses the ...VarBool form, which pushes a plain Boolean. Requires Option Compare Text in the module.

VB6 source (verified: compiles to this slot)
Option Compare Text

Public Sub Main()
  Dim a As Variant, b As Variant, c As Boolean
  c = (a <> b)
End Sub
Encoding, evidence and notes
Encoding

Encoding: FB 3E (lead byte FB selects table 1), then 2 operand byte(s); total instruction length 4 byte(s).
vbdec template: %a
Operands:

  1. %a: local_var_ref, 2 byte(s). signed 16-bit offset from the procedure frame pointer (EBP). Negative = local/temporary (vbdec var_XX, XX = -offset), positive = argument (arg_XX).

Observed: FB3E 48FF NeTextVar var_B8

Examples
FB3E 48FF  NeTextVar var_B8

From the Phase 4 probe (VB6 SP6, P-code).

Evidence and notes

Emitted by VB6 SP6 (P-code): yes. Minimal probe: probes\op\1_3E_NeTextVar.

Handler: 0x6610C241, unique to this slot (real opcode #271).

Check of vb6_source_eq example: verified: compiles and emits this slot.

Example from the description
Option Compare Text

Public Sub Main()
  Dim a As Variant, b As Variant, c As Boolean
  c = (a <> b)
End Sub

Description: draft, by claude-opus-5-5. Handler 0x6610C241, dispatch slot 0x6610720C, modOpcodes line 1510.

NeTextVarBool

(1,0x41)emittedhandler #274Variantconfirmed_msdocs
Variant <> comparison (text mode) whose result is used directly as a condition; push Boolean.

Pops two Variants and compares them with <> (text (case-insensitive, Option Compare Text) string comparison when both are strings). A Null operand makes the condition False. Pushes a Boolean (-1/0) for the following branch.

Stack: [..., a:Var, b:Var] -> [..., r:Bool]

When the compiler emits it

Emitted when a Variant comparison is the condition of If, ElseIf, Do While/Until, Loop While/Until or a Select Case test, so a plain Boolean is enough. When the result is kept as a value (b = (v <> w)), the compiler uses NeTextVar instead, which produces a Variant (possibly Null). Requires Option Compare Text.

VB6 source (verified: compiles to this slot)
Option Compare Text

Public Sub Main()
  Dim a As Variant, b As Variant, n As Long
  If a <> b Then n = 1
End Sub
Encoding, evidence and notes
Encoding

Encoding: FB 41 (lead byte FB selects table 1), then 0 operand byte(s); total instruction length 2 byte(s).
Operands: none. All inputs come from the evaluation stack or the frame.
Observed: FB41 NeTextVarBool

Evidence and notes

Emitted by VB6 SP6 (P-code): yes. Minimal probe: probes\op\1_41_NeTextVarBool.

Handler: 0x6610C286, unique to this slot (real opcode #274).

Check of vb6_source_eq example: verified: compiles and emits this slot.

Example from the description
Option Compare Text
Sub Main()
  Dim a As Variant, b As Variant, n As Long
  a = 1: b = 2
  If a <> b Then n = 1
End Sub

Description: draft, by claude-opus-5-5. Handler 0x6610C286, dispatch slot 0x66107218, modOpcodes line 1508.

NeUI1

(1,0x36)not emitteddup of (0,CB)handler #200Integerconfirmed_msdocs
Compare two values with <>; push Boolean result.

Pops two 8-bit unsigned integer (VB6 Byte) operands b and a (top is b), pushes (a <> b) as a I2 result.

Stack: [..., a:UI1, b:UI1] -> [..., (a <> b):I2]

When the compiler emits it

Emitted for <> when both operands are statically typed UI1. Other type pairings select the matching suffix variant (NeI2/NeI4/NeR8/NeStr/NeVar).

VB6 source (from description, not verified)
Dim a As Byte, b As Byte, c As Boolean
c = (a <> b)
Encoding, evidence and notes
Encoding

Encoding: FB 36 (lead byte FB selects table 1), then 0 operand byte(s); total instruction length 2 byte(s).
Operands: none. All inputs come from the evaluation stack or the frame.

Evidence and notes

Emitted by VB6 SP6 (P-code): not observed in about 3,070 probe programs. The slot exists in the runtime's dispatch table, but no tested source construct makes the compiler emit it.

Handler: 0x661069D1, shared by 3 dispatch slots (real opcode #200). This is a duplicate slot of (0,CB) NeI2. Other slots: (0,CB) NeI2, (1,37) NeUI1.

Check of vb6_source_eq example: compiles, but emits a different slot of the same handler. emits (0,CB) NeI2 (same handler, different slot)

Slots sharing this handler

(0,0xCB) NeI2, (1,0x37) NeUI1

Description: draft, by claude-opus-4.7. Handler 0x661069D1, dispatch slot 0x661071EC, modOpcodes line 1493.

NeUI1

(1,0x37)not emitteddup of (0,CB)handler #200Integerconfirmed_handler
(alias) Compare two values with <>; push Boolean result.

Alias dispatch slot (1, 0x37) for the canonical NeUI1 at (1, 0x36); semantics are identical.

Pops two 8-bit unsigned integer (VB6 Byte) operands b and a (top is b), pushes (a <> b) as a I2 result.

Stack: [..., a:UI1, b:UI1] -> [..., (a <> b):I2]

When the compiler emits it

Emitted for <> when both operands are statically typed UI1. Other type pairings select the matching suffix variant (NeI2/NeI4/NeR8/NeStr/NeVar).

VB6 source (from description, not verified)
Dim a As Byte, b As Byte, c As Boolean
c = (a <> b)
Encoding, evidence and notes
Encoding

Encoding: FB 37 (lead byte FB selects table 1), then 0 operand byte(s); total instruction length 2 byte(s).
Operands: none. All inputs come from the evaluation stack or the frame.

Evidence and notes

Emitted by VB6 SP6 (P-code): not observed in about 3,070 probe programs. The slot exists in the runtime's dispatch table, but no tested source construct makes the compiler emit it.

Handler: 0x661069D1, shared by 3 dispatch slots (real opcode #200). This is a duplicate slot of (0,CB) NeI2. Other slots: (0,CB) NeI2, (1,36) NeUI1.

Check of vb6_source_eq example: compiles, but emits a different slot of the same handler. emits (0,CB) NeI2 (same handler, different slot)

Slots sharing this handler

(0,0xCB) NeI2, (1,0x36) NeUI1

Description: draft, by claude-opus-4.7. Handler 0x661069D1, dispatch slot 0x661071F0, modOpcodes line 1494.

NeVar

(1,0x3C)emittedhandler #269Variantinferred_corpus3 corpus hits
Compare two values with <>; push Boolean result.

Pops two VBA Variant operands b and a (top is b), pushes (a <> b) as a I2 result.

Stack: [..., a:Var, b:Var] -> [..., (a <> b):I2]

Variant operands undergo VB6 type-promotion before comparison; type-mismatch raises run-time error 13.

When the compiler emits it

Emitted for <> when at least one operand is Variant or Option Compare Text is in effect; specific suffix encodes the result form.

VB6 source (verified: compiles to this slot)
Public Sub Main()
  Dim a As Variant, b As Variant, c As Boolean
  c = (a <> b)
End Sub
Encoding, evidence and notes
Encoding

Encoding: FB 3C (lead byte FB selects table 1), then 2 operand byte(s); total instruction length 4 byte(s).
vbdec template: %a
Operands:

  1. %a: local_var_ref, 2 byte(s). signed 16-bit offset from the procedure frame pointer (EBP). Negative = local/temporary (vbdec var_XX, XX = -offset), positive = argument (arg_XX).

Observed: FB3C 48FF NeVar var_B8

Examples
Form2.mnuFindFuncDependancies_Click @ 0x460130 | 460296    FB3C 30FF             NeVar var_D0
frmInlineDecoderCalls.cmdHandleNumericExpansions_Click @ 0x470A88 | 470D31    FB3C 0CFF             NeVar var_F4
frmInlineDecoderCalls.cmdHandleNumericExpansions_Click @ 0x470A88 | 470DC6    FB3C 0CFF             NeVar var_F4

3 occurrence(s) in PDFStreamDumper.

Evidence and notes

Emitted by VB6 SP6 (P-code): yes. Minimal probe: probes\op\1_3C_NeVar.

Handler: 0x66106B16, unique to this slot (real opcode #269).

Check of vb6_source_eq example: verified: compiles and emits this slot.

Corpus: 3 occurrence(s) in PDFStreamDumper_p.exe.

Example from the description
Dim a As Variant, b As Variant, c As Boolean
c = (a <> b)

Description: draft, by claude-opus-4.7. Handler 0x66106B16, dispatch slot 0x66107204, modOpcodes line 1509.

NeVarBool

(1,0x40)emittedhandler #273Variantconfirmed_msdocs17 corpus hits
Variant <> comparison (binary mode) whose result is used directly as a condition; push Boolean.

Pops two Variants and compares them with <> (binary string comparison when both are strings). A Null operand makes the condition False. Pushes a Boolean (-1/0) for the following branch.

Stack: [..., a:Var, b:Var] -> [..., r:Bool]

When the compiler emits it

Emitted when a Variant comparison is the condition of If, ElseIf, Do While/Until, Loop While/Until or a Select Case test, so a plain Boolean is enough. When the result is kept as a value (b = (v <> w)), the compiler uses NeVar instead, which produces a Variant (possibly Null).

VB6 source (verified: compiles to this slot)
Public Sub Main()
  Dim a As Variant, b As Variant, n As Long
  If a <> b Then n = 1
End Sub
Encoding, evidence and notes
Encoding

Encoding: FB 40 (lead byte FB selects table 1), then 0 operand byte(s); total instruction length 2 byte(s).
Operands: none. All inputs come from the evaluation stack or the frame.
Observed: FB40 NeVarBool

Examples
fso.Proc_467FC4 @ 0x467FC4 | 468236    FB40                  NeVarBool
fso.Proc_467FC4 @ 0x467FC4 | 468345    FB40                  NeVarBool
fso.Proc_453AA8 @ 0x453AA8 | 453B6F    FB40                  NeVarBool

17 occurrence(s) in PDFStreamDumper.

Evidence and notes

Emitted by VB6 SP6 (P-code): yes. Minimal probe: probes\op\1_40_NeVarBool.

Handler: 0x66106B5D, unique to this slot (real opcode #273).

Check of vb6_source_eq example: verified: compiles and emits this slot.

Corpus: 17 occurrence(s) in PDFStreamDumper_p.exe.

Example from the description
Sub Main()
  Dim a As Variant, b As Variant, n As Long
  a = 1: b = 2
  If a <> b Then n = 1
End Sub

Description: draft, by claude-opus-5-5. Handler 0x66106B5D, dispatch slot 0x66107214, modOpcodes line 1507.

Control

BoS, Stop, End, Gosub, Return, Assert

Assert

(5,0x0B)not emittedhandler #737Control flowconfirmed_msdocs
Control-flow primitive: Assert.

BoS (Beginning-of-Statement) is a no-op marker carrying a 1- or 2-byte length used by the step debugger for line attribution. Stop raises a debug break; End terminates the application; Gosub/Return implement classic GW-BASIC subroutine semantics within a procedure.

When the compiler emits it

BoS is emitted ahead of every statement boundary; others are emitted for the matching keywords.

Encoding, evidence and notes
Encoding

Encoding: FF 0B (lead byte FF selects table 5), then 0 operand byte(s); total instruction length 2 byte(s).
Operands: none. All inputs come from the evaluation stack or the frame.

Evidence and notes

Emitted by VB6 SP6 (P-code): not observed in about 3,070 probe programs. The slot exists in the runtime's dispatch table, but no tested source construct makes the compiler emit it.

Handler: 0x66108E26, unique to this slot (real opcode #737).

Finding: Debug.Assert is removed from compiled executables, so this opcode cannot be produced by compiling. It is presumably only executed by the IDE's p-code engine.

Description: draft, by claude-opus-4.7. Handler 0x66108E26, dispatch slot 0x66108140, modOpcodes line 454.

BoS

(0,0x00)emittedprimary of 4handler #1Control flowinferred_corpus3951 corpus hits
Control-flow primitive: BoS.

BoS (Beginning-of-Statement) is a no-op marker carrying a 1- or 2-byte length used by the step debugger for line attribution. Stop raises a debug break; End terminates the application; Gosub/Return implement classic GW-BASIC subroutine semantics within a procedure.

When the compiler emits it

BoS is emitted ahead of every statement boundary; others are emitted for the matching keywords.

VB6 source (verified: compiles to this slot)
Public Sub Main()
  On Error Resume Next
End Sub
Encoding, evidence and notes
Encoding

Encoding: 00, then 1 operand byte(s); total instruction length 2 byte(s).
vbdec template: %2
Operands:

  1. %2: immediate_word, 2 byte(s). 16-bit immediate.

Observed: 00 02 BoS loc_40144E

Examples
Form1.LoadPlugins @ 0x4644FC | 4644FC    00 02                 BoS loc_4644FE
Form1.LoadPlugins @ 0x4644FC | 4644FE    00 05                 BoS loc_464503
Form1.LoadPlugins @ 0x4644FC | 464503    00 37                 BoS loc_46453A

3951 occurrence(s) in PDFStreamDumper.

Evidence and notes

Emitted by VB6 SP6 (P-code): yes. Minimal probe: probes\op\0_00_BoS.

Handler: 0x66104FBE, shared by 4 dispatch slots (real opcode #1). This is the primary slot. Other slots: (0,02) BoS, (2,C4) BoS, (5,1C) BoS.

Corpus: 3951 occurrence(s) in PDFStreamDumper_p.exe.

Slots sharing this handler

(0,0x02) BoS, (2,0xC4) BoS, (5,0x1C) BoS

Description: draft, by claude-opus-4.7. Handler 0x66104FBE, dispatch slot 0x66106D14, modOpcodes line 417.

BoS

(0,0x02)not emitteddup of (0,00)handler #1Control flowconfirmed_handler8 corpus hits
(alias) Control-flow primitive: BoS.

Alias dispatch slot (0, 0x02) for the canonical BoS at (0, 0x00); semantics are identical.

BoS (Beginning-of-Statement) is a no-op marker carrying a 1- or 2-byte length used by the step debugger for line attribution. Stop raises a debug break; End terminates the application; Gosub/Return implement classic GW-BASIC subroutine semantics within a procedure.

When the compiler emits it

BoS is emitted ahead of every statement boundary; others are emitted for the matching keywords.

Encoding, evidence and notes
Encoding

Encoding: 02, then 1 operand byte(s); total instruction length 2 byte(s).
vbdec template: %2
Operands:

  1. %2: immediate_word, 2 byte(s). 16-bit immediate.

Observed: 02 00 BoS loc_467C67

Examples
Form1.mnuManualEscape_Event_0 @ 0x467B64 | 467C67    02 00                 BoS loc_467C67
Form1.mnuSearchFilter_Event_0 @ 0x473E0C | 473F4A    02 00                 BoS loc_473F4A
Form1.mnuSearchFilter_Event_0 @ 0x473E0C | 4742B5    02 01                 BoS loc_4742B6

8 occurrence(s) in PDFStreamDumper.

Evidence and notes

Emitted by VB6 SP6 (P-code): not observed in about 3,070 probe programs. The slot exists in the runtime's dispatch table, but no tested source construct makes the compiler emit it.

Handler: 0x66104FBE, shared by 4 dispatch slots (real opcode #1). This is a duplicate slot of (0,00) BoS. Other slots: (0,00) BoS, (2,C4) BoS, (5,1C) BoS.

Corpus: 8 occurrence(s) in PDFStreamDumper_p.exe.

Slots sharing this handler

(0,0x00) BoS, (2,0xC4) BoS, (5,0x1C) BoS

Description: draft, by claude-opus-4.7. Handler 0x66104FBE, dispatch slot 0x66106D1C, modOpcodes line 418.

BoS

(2,0xC4)not emitteddup of (0,00)handler #1Control flowconfirmed_handler
Same handler as (0,0x00) BoS: Control-flow primitive: BoS.
Encoding, evidence and notes
Encoding

Encoding: FC C4 (lead byte FC selects table 2), then 1 operand byte(s); total instruction length 3 byte(s).
vbdec template: %2
Operands:

  1. %2: immediate_word, 2 byte(s). 16-bit immediate.
Evidence and notes

Emitted by VB6 SP6 (P-code): not observed in about 3,070 probe programs. The slot exists in the runtime's dispatch table, but no tested source construct makes the compiler emit it.

Handler: 0x66104FBE, shared by 4 dispatch slots (real opcode #1). This is a duplicate slot of (0,00) BoS. Other slots: (0,00) BoS, (0,02) BoS, (5,1C) BoS.

Slots sharing this handler

(0,0x00) BoS, (0,0x02) BoS, (5,0x1C) BoS

Description: none. Handler 0x66104FBE, dispatch slot 0x66107824, modOpcodes line 419.

BoS

(5,0x1C)not emitteddup of (0,00)handler #1Control flowconfirmed_handler
Same handler as (0,0x00) BoS: Control-flow primitive: BoS.
Encoding, evidence and notes
Encoding

Encoding: FF 1C (lead byte FF selects table 5), then 1 operand byte(s); total instruction length 3 byte(s).
vbdec template: %2
Operands:

  1. %2: immediate_word, 2 byte(s). 16-bit immediate.
Evidence and notes

Emitted by VB6 SP6 (P-code): not observed in about 3,070 probe programs. The slot exists in the runtime's dispatch table, but no tested source construct makes the compiler emit it.

Handler: 0x66104FBE, shared by 4 dispatch slots (real opcode #1). This is a duplicate slot of (0,00) BoS. Other slots: (0,00) BoS, (0,02) BoS, (2,C4) BoS.

Slots sharing this handler

(0,0x00) BoS, (0,0x02) BoS, (2,0xC4) BoS

Description: none. Handler 0x66104FBE, dispatch slot 0x66108184, modOpcodes line 420.

End

(2,0xC8)emittedhandler #458Control flowconfirmed_msdocs4 corpus hits
Control-flow primitive: End.

BoS (Beginning-of-Statement) is a no-op marker carrying a 1- or 2-byte length used by the step debugger for line attribution. Stop raises a debug break; End terminates the application; Gosub/Return implement classic GW-BASIC subroutine semantics within a procedure.

When the compiler emits it

BoS is emitted ahead of every statement boundary; others are emitted for the matching keywords.

VB6 source (verified: compiles to this slot)
Public Sub Main()
  Dim n As Long
  If n = 2 Then End
End Sub
Encoding, evidence and notes
Encoding

Encoding: FC C8 (lead byte FC selects table 2), then 0 operand byte(s); total instruction length 2 byte(s).
Operands: none. All inputs come from the evaluation stack or the frame.
Observed: FCC8 End

Examples
Form1.Shutdown @ 0x442740 | 44278E    FCC8                  End
Form1.Form_Unload (Cancel As Integer) @ 0x46B420 | 46B915    FCC8                  End
Form1.ExtractTo @ 0x45FE38 | 4600B2    FCC8                  End

4 occurrence(s) in PDFStreamDumper.

Evidence and notes

Emitted by VB6 SP6 (P-code): yes. Minimal probe: probes\op\2_C8_End.

Handler: 0x66104FB3, unique to this slot (real opcode #458).

Corpus: 4 occurrence(s) in PDFStreamDumper_p.exe.

Description: draft, by claude-opus-4.7. Handler 0x66104FB3, dispatch slot 0x66107834, modOpcodes line 452.

Gosub

(3,0x0A)emittedhandler #475Control flowinferred_corpus
Push a return address and jump to a local GoSub label.

Saves the address of the next instruction on the procedure's GoSub return stack, then transfers control to the branch target. A later Return (2,C9) pops the address and resumes there.

Stack: [...] -> [...] (the return address goes to the runtime's GoSub stack, not the evaluation stack)

Operand %l: proc-relative 16-bit target.

When the compiler emits it

Emitted for GoSub label.

VB6 source (verified: compiles to this slot)
Public Sub Main()
  Dim n As Long
  GoSub sub1
  GoTo done
sub1:
  Return
done:
End Sub
Encoding, evidence and notes
Encoding

Encoding: FD 0A (lead byte FD selects table 3), then 2 operand byte(s); total instruction length 4 byte(s).
vbdec template: %l
Operands:

  1. %l: branch_target_local, 2 byte(s). 16-bit branch target, offset from the start of the procedure's p-code (vbdec loc_ = proc start + offset).

Observed: FD0A 0700 Gosub loc_401453

Examples
FD0A 0700  Gosub loc_401453

From the Phase 4 probe (VB6 SP6, P-code).

Evidence and notes

Emitted by VB6 SP6 (P-code): yes. Minimal probe: probes\op\3_0A_Gosub.

Handler: 0x66105156, unique to this slot (real opcode #475).

Check of vb6_source_eq example: verified: compiles and emits this slot.

Example from the description
Public Sub Main()
  Dim n As Long
  GoSub sub1
  GoTo done
sub1:
  Return
done:
End Sub

Description: draft, by claude-opus-5-5. Handler 0x66105156, dispatch slot 0x6610793C, modOpcodes line 406.

OnGosub

(4,0x95)emittedhandler #654Control flowinferred_corpus
Computed On n GoSub: pop an Integer selector and GoSub to the n-th label.

Pops a 16-bit selector (the compiler converts the expression with CI2I4 first). If 1 <= n <= count, it pushes a return address and jumps to the n-th target; otherwise execution falls through to the next statement.

Stack: [..., n:I2] -> [...]

Operands: a variable-length block. The first word is the byte length of the target list (observed 0400 for two targets), followed by one 16-bit proc-relative target per label.

When the compiler emits it

Emitted for On expr GoSub l1, l2, ....

VB6 source (verified: compiles to this slot)
Public Sub Main()
  Dim n As Long
  On n GoSub a1, a2
  Exit Sub
a1:
  Return
a2:
End Sub
Encoding, evidence and notes
Encoding

Encoding: FE 95 (lead byte FE selects table 4), then a variable-length operand block (the first operand gives its byte count).
Operands: none. All inputs come from the evaluation stack or the frame.
Observed: FE95 0400 [5 bytes] OnGosub loc_401459 loc_40145B

Examples
FE95 0400 [5 bytes]  OnGosub loc_401459 loc_40145B

From the Phase 4 probe (VB6 SP6, P-code).

Evidence and notes

Emitted by VB6 SP6 (P-code): yes. Minimal probe: probes\op\4_95_OnGosub.

Handler: 0x66109209, unique to this slot (real opcode #654).

Check of vb6_source_eq example: verified: compiles and emits this slot.

Example from the description
Public Sub Main()
  Dim n As Long
  On n GoSub a1, a2
  Exit Sub
a1:
  Return
a2:
End Sub

Description: draft, by claude-opus-5-5. Handler 0x66109209, dispatch slot 0x66107F68, modOpcodes line 404.

OnGoto

(4,0x96)emittedhandler #655Control flowinferred_corpus
Computed On n GoTo: pop an Integer selector and jump to the n-th label.

Pops a 16-bit selector (converted with CI2I4 first). If 1 <= n <= count, it jumps to the n-th target; otherwise it falls through.

Stack: [..., n:I2] -> [...]

Operands: a variable-length block. The first word is the byte length of the target list, followed by 16-bit proc-relative targets.

When the compiler emits it

Emitted for On expr GoTo l1, l2, ....

VB6 source (verified: compiles to this slot)
Public Sub Main()
  Dim n As Long
  On n GoTo a1, a2
a1:
  n = 1
a2:
End Sub
Encoding, evidence and notes
Encoding

Encoding: FE 96 (lead byte FE selects table 4), then a variable-length operand block (the first operand gives its byte count).
Operands: none. All inputs come from the evaluation stack or the frame.
Observed: FE96 0400 [5 bytes] OnGoto loc_401458 loc_401460

Examples
FE96 0400 [5 bytes]  OnGoto loc_401458 loc_401460

From the Phase 4 probe (VB6 SP6, P-code).

Evidence and notes

Emitted by VB6 SP6 (P-code): yes. Minimal probe: probes\op\4_96_OnGoto.

Handler: 0x6610923C, unique to this slot (real opcode #655).

Check of vb6_source_eq example: verified: compiles and emits this slot.

Example from the description
Public Sub Main()
  Dim n As Long
  On n GoTo a1, a2
a1:
  n = 1
a2:
End Sub

Description: draft, by claude-opus-5-5. Handler 0x6610923C, dispatch slot 0x66107F6C, modOpcodes line 405.

Return

(2,0xC9)emittedhandler #459Control flowconfirmed_msdocs
Control-flow primitive: Return.

BoS (Beginning-of-Statement) is a no-op marker carrying a 1- or 2-byte length used by the step debugger for line attribution. Stop raises a debug break; End terminates the application; Gosub/Return implement classic GW-BASIC subroutine semantics within a procedure.

When the compiler emits it

BoS is emitted ahead of every statement boundary; others are emitted for the matching keywords.

VB6 source (verified: compiles to this slot)
Public Sub Main()
  Dim n As Long
  Return
done:
End Sub
Encoding, evidence and notes
Encoding

Encoding: FC C9 (lead byte FC selects table 2), then 0 operand byte(s); total instruction length 2 byte(s).
Operands: none. All inputs come from the evaluation stack or the frame.
Observed: FCC9 Return

Evidence and notes

Emitted by VB6 SP6 (P-code): yes. Minimal probe: probes\op\2_C9_Return.

Handler: 0x66105180, unique to this slot (real opcode #459).

Description: draft, by claude-opus-4.7. Handler 0x66105180, dispatch slot 0x66107838, modOpcodes line 453.

Stop

(2,0xC2)emittedhandler #457Control flowconfirmed_msdocs2 corpus hits
Control-flow primitive: Stop.

BoS (Beginning-of-Statement) is a no-op marker carrying a 1- or 2-byte length used by the step debugger for line attribution. Stop raises a debug break; End terminates the application; Gosub/Return implement classic GW-BASIC subroutine semantics within a procedure.

When the compiler emits it

BoS is emitted ahead of every statement boundary; others are emitted for the matching keywords.

VB6 source (verified: compiles to this slot)
Public Sub Main()
  Dim n As Long
  If n = 1 Then Stop
End Sub
Encoding, evidence and notes
Encoding

Encoding: FC C2 (lead byte FC selects table 2), then 0 operand byte(s); total instruction length 2 byte(s).
Operands: none. All inputs come from the evaluation stack or the frame.
Observed: FCC2 Stop

Examples
CPdfParser.ParseFile @ 0x471F38 | 472326    FCC2                  Stop
frmBruteZLib.Command4_Click @ 0x46C9E8 | 46CCAE    FCC2                  Stop

2 occurrence(s) in PDFStreamDumper.

Evidence and notes

Emitted by VB6 SP6 (P-code): yes. Minimal probe: probes\op\2_C2_Stop.

Handler: 0x66108E32, unique to this slot (real opcode #457).

Corpus: 2 occurrence(s) in PDFStreamDumper_p.exe.

Description: draft, by claude-opus-4.7. Handler 0x66108E32, dispatch slot 0x6610781C, modOpcodes line 451.

Duplicate

Duplicate variant/string on stack

FDupStr

(4,0x93)not emittedhandler #653Stringinferred_corpus
No description yet.
Encoding, evidence and notes
Encoding

Encoding: FE 93 (lead byte FE selects table 4), then 4 operand byte(s); total instruction length 6 byte(s).
No printf operands are declared, but the instruction still consumes operand bytes; see the size above and the observed bytes below. (Phase 3a: flag=0 does not mean 'no operands'.)

Evidence and notes

Emitted by VB6 SP6 (P-code): not observed in about 3,070 probe programs. The slot exists in the runtime's dispatch table, but no tested source construct makes the compiler emit it.

Handler: 0x6610B27C, unique to this slot (real opcode #653).

Description: none. Handler 0x6610B27C, dispatch slot 0x66107F60, modOpcodes line 387.

FDupVar

(4,0x92)emittedhandler #652Variantinferred_corpus15 corpus hits
Duplicate the top-of-stack (FDupVar).

Copies the top value (per its type's copy semantics: BSTR SysAllocString, Variant VariantCopy, etc.). Used when an expression needs the same value in two places without re-evaluation.

Stack: [..., a:Var] -> [..., a, a':Var]

When the compiler emits it

Inserted by the compiler in expressions that consume a value twice (e.g. x = f(): use1 x: use2 x patterns).

VB6 source (verified: compiles to this slot)
Public Sub Main()
  
End Sub

Sub TakeVarV(ByVal v As Variant)
End Sub
Encoding, evidence and notes
Encoding

Encoding: FE 92 (lead byte FE selects table 4), then 4 operand byte(s); total instruction length 6 byte(s).
vbdec template: %r %a
Operands:

  1. %r: vt_type_byte, 1 byte(s). 8-bit VARTYPE code (VT_*).
  2. %a: local_var_ref, 2 byte(s). signed 16-bit offset from the procedure frame pointer (EBP). Negative = local/temporary (vbdec var_XX, XX = -offset), positive = argument (arg_XX).

Observed: FE92 0C006CFF FDupVar 0xC (Variant) var_94

Examples
Form1.safe @ 0x44D7B8 | 44D7B8    FE92 0C0068FF         FDupVar  0xC (Variant) var_98
fso.Proc_45ECB4 @ 0x45ECB4 | 45ECB6    FE92 0C0068FF         FDupVar  0xC (Variant) var_98
fso.Proc_45D698 @ 0x45D698 | 45D69A    FE92 100068FF         FDupVar  0x10 (I1) var_98

15 occurrence(s) in PDFStreamDumper.

Evidence and notes

Emitted by VB6 SP6 (P-code): yes. Minimal probe: probes\op\4_92_FDupVar.

Handler: 0x66106469, unique to this slot (real opcode #652).

Corpus: 15 occurrence(s) in PDFStreamDumper_p.exe.

Description: draft, by claude-opus-4.7. Handler 0x66106469, dispatch slot 0x66107F5C, modOpcodes line 386.

Error

OnError / Resume / Error

Error

(0,0x45)emittedprimary of 2handler #68Error handlingconfirmed_msdocs
Error n statement: raise run-time error n.

Pops the error number and raises that run-time error through the procedure's current error handler.

Stack: [..., n:I4] -> [...] (does not return normally unless the error is handled with Resume Next)

When the compiler emits it

Emitted for the legacy Error n statement. Err.Raise n compiles to a late call on the Err object instead.

VB6 source (verified: compiles to this slot)
Public Sub Main()
  Error 5
End Sub
Encoding, evidence and notes
Encoding

Encoding: 45, then 0 operand byte(s); total instruction length 1 byte(s).
Operands: none. All inputs come from the evaluation stack or the frame.
Observed: 45 Error

Evidence and notes

Emitted by VB6 SP6 (P-code): yes. Minimal probe: probes\op\0_45_Error.

Handler: 0x6610B127, shared by 2 dispatch slots (real opcode #68). This is the primary slot. Other slots: (2,C1) Error.

Check of vb6_source_eq example: verified: compiles and emits this slot.

Example from the description
On Error Resume Next
Error 5
Slots sharing this handler

(2,0xC1) Error

Description: draft, by claude-opus-5-5. Handler 0x6610B127, dispatch slot 0x66106E28, modOpcodes line 413.

Error

(2,0xC1)not emitteddup of (0,45)handler #68Error handlingconfirmed_handler
(duplicate slot of (0,45) Error) Error n statement: raise run-time error n.

Dispatch slot (2, 0xC1) runs the same MSVBVM60 handler as (0,45) Error; runtime behaviour is identical.

Pops the error number and raises that run-time error through the procedure's current error handler.

Stack: [..., n:I4] -> [...] (does not return normally unless the error is handled with Resume Next)

When the compiler emits it

Not emitted by VB6 SP6 in Phase 4 probes. The same source compiles to (0,45) Error instead.

Encoding, evidence and notes
Encoding

Encoding: FC C1 (lead byte FC selects table 2), then 0 operand byte(s); total instruction length 2 byte(s).
Operands: none. All inputs come from the evaluation stack or the frame.

Evidence and notes

Emitted by VB6 SP6 (P-code): not observed in about 3,070 probe programs. The slot exists in the runtime's dispatch table, but no tested source construct makes the compiler emit it.

Handler: 0x6610B127, shared by 2 dispatch slots (real opcode #68). This is a duplicate slot of (0,45) Error. Other slots: (0,45) Error.

Slots sharing this handler

(0,0x45) Error

Description: draft, by claude-opus-5-5. Handler 0x6610B127, dispatch slot 0x66107818, modOpcodes line 414.

OnErrorGoto

(0,0x4B)emittedprimary of 2handler #74Error handlinginferred_corpus276 corpus hits
On Error statement: set the procedure's error-handling mode.

Records the error-handling mode in the procedure's frame. No stack effect.

Operand (16-bit): FFFF Resume Next, FFFE disable (GoTo 0), 0000 clear the current error state (GoTo -1), otherwise the handler offset.

When the compiler emits it

Emitted for every On Error statement. The operand encodes the form: FFFF = On Error Resume Next (vbdec shows OnErrorResumeNext), FFFE = On Error GoTo 0, 0000 = On Error GoTo -1 (vbdec mislabels this as a jump to the procedure start), and any other value = On Error GoTo label (proc-relative handler offset).

VB6 source (verified: compiles to this slot)
Public Sub Main()
  On Error Resume Next
End Sub
Encoding, evidence and notes
Encoding

Encoding: 4B, then 2 operand byte(s); total instruction length 3 byte(s).
vbdec template: %l
Operands:

  1. %l: branch_target_local, 2 byte(s). 16-bit branch target, offset from the start of the procedure's p-code (vbdec loc_ = proc start + offset).

Observed: 4B FFFF OnErrorResumeNext

Examples
Form1.LoadPlugins @ 0x4644FC | 464500    4B FFFF               OnErrorResumeNext
Form1.cmdAbortProcessing_Click @ 0x441954 | 441958    4B FFFF               OnErrorResumeNext
Form1.mn_b64EncClip_Click @ 0x447B64 | 447B68    4B FFFF               OnErrorResumeNext

276 occurrence(s) in PDFStreamDumper.

Evidence and notes

Emitted by VB6 SP6 (P-code): yes. Minimal probe: probes\op\0_4B_OnErrorGoto.

Handler: 0x66106206, shared by 2 dispatch slots (real opcode #74). This is the primary slot. Other slots: (3,0B) OnErrorGoto.

Check of vb6_source_eq example: verified: compiles and emits this slot.

Corpus: 276 occurrence(s) in PDFStreamDumper_p.exe.

Example from the description
Dim n As Long
On Error GoTo eh
n = 1
Exit Sub
eh:
n = 0
Slots sharing this handler

(3,0x0B) OnErrorGoto

Description: draft, by claude-opus-5-5. Handler 0x66106206, dispatch slot 0x66106E40, modOpcodes line 408.

OnErrorGoto

(3,0x0B)not emitteddup of (0,4B)handler #74Error handlingconfirmed_handler
Same handler as (0,0x4B) OnErrorGoto: On Error statement: set the procedure's error-handling mode.
Encoding, evidence and notes
Encoding

Encoding: FD 0B (lead byte FD selects table 3), then 2 operand byte(s); total instruction length 4 byte(s).
vbdec template: %l
Operands:

  1. %l: branch_target_local, 2 byte(s). 16-bit branch target, offset from the start of the procedure's p-code (vbdec loc_ = proc start + offset).
Evidence and notes

Emitted by VB6 SP6 (P-code): not observed in about 3,070 probe programs. The slot exists in the runtime's dispatch table, but no tested source construct makes the compiler emit it.

Handler: 0x66106206, shared by 2 dispatch slots (real opcode #74). This is a duplicate slot of (0,4B) OnErrorGoto. Other slots: (0,4B) OnErrorGoto.

Slots sharing this handler

(0,0x4B) OnErrorGoto

Description: none. Handler 0x66106206, dispatch slot 0x66107940, modOpcodes line 409.

Resume

(3,0x0C)emittedhandler #476Error handlinginferred_corpus1 corpus hits
Resume statement: leave an error handler and continue execution.

Clears the current error, re-arms the handler and transfers control to the resume target. No stack effect.

When the compiler emits it

Emitted for Resume label, Resume Next and Resume (retry) inside an error handler. The operand selects the form: a proc-relative label offset, or special values for Next and retry (vbdec shows ResumeNext for FFFF).

VB6 source (verified: compiles to this slot)
Public Sub Main()
  Dim n As Long
  n = 1 / n
rl:
  Resume rl
End Sub
Encoding, evidence and notes
Encoding

Encoding: FD 0C (lead byte FD selects table 3), then 2 operand byte(s); total instruction length 4 byte(s).
vbdec template: %l
Operands:

  1. %l: branch_target_local, 2 byte(s). 16-bit branch target, offset from the start of the procedure's p-code (vbdec loc_ = proc start + offset).

Observed: FD0C 0C00 Resume loc_401458

Examples
Form1.LoadPlugins @ 0x4644FC | 4647FF    FD0C FFFF             ResumeNext

1 occurrence(s) in PDFStreamDumper.

Evidence and notes

Emitted by VB6 SP6 (P-code): yes. Minimal probe: probes\op\3_0C_Resume.

Handler: 0x6610B0BA, unique to this slot (real opcode #476).

Check of vb6_source_eq example: verified: compiles and emits this slot.

Corpus: 1 occurrence(s) in PDFStreamDumper_p.exe.

Example from the description
Dim n As Long
On Error GoTo eh
n = 1 / n
done:
Exit Sub
eh:
Resume done

Description: draft, by claude-opus-5-5. Handler 0x6610B0BA, dispatch slot 0x66107944, modOpcodes line 407.

SetLastSystemError

(0,0x3C)emittedprimary of 2handler #59Error handlingconfirmed_msdocs87 corpus hits
Capture GetLastError after a Declare'd API call (for Err.LastDllError).

Calls GetLastError and stores the value in the per-thread error object, where Err.LastDllError reads it. No stack effect.

When the compiler emits it

Emitted immediately after every call to a Declared DLL procedure. It is what makes Err.LastDllError meaningful. It is not emitted after calls to VB procedures or typelib-declared functions.

VB6 source (verified: compiles to this slot)
Private Declare Sub Ext Lib "x.dll" Alias "#5" ()

Public Sub Main()
  Ext
End Sub
Encoding, evidence and notes
Encoding

Encoding: 3C, then 0 operand byte(s); total instruction length 1 byte(s).
Operands: none. All inputs come from the evaluation stack or the frame.
Observed: 3C SetLastSystemError

Examples
Form1.LoadPlugins @ 0x4644FC | 464754    3C                    SetLastSystemError
Form1.SleepFor @ 0x43E7AC | 43E7C4    3C                    SetLastSystemError
Form1.Command1_Click @ 0x444218 | 444273    3C                    SetLastSystemError

87 occurrence(s) in PDFStreamDumper.

Evidence and notes

Emitted by VB6 SP6 (P-code): yes. Minimal probe: probes\op\0_3C_SetLastSystemError.

Handler: 0x66106936, shared by 2 dispatch slots (real opcode #59). This is the primary slot. Other slots: (2,62) SetLastSystemError.

Check of vb6_source_eq example: verified: compiles and emits this slot.

Corpus: 87 occurrence(s) in PDFStreamDumper_p.exe.

Example from the description
Private Declare Function GetTickCount Lib "kernel32" () As Long
Sub Main()
  Dim n As Long
  n = GetTickCount()
End Sub
Slots sharing this handler

(2,0x62) SetLastSystemError

Description: draft, by claude-opus-5-5. Handler 0x66106936, dispatch slot 0x66106E04, modOpcodes line 411.

SetLastSystemError

(2,0x62)not emitteddup of (0,3C)handler #59Error handlingconfirmed_handler
(duplicate slot of (0,3C) SetLastSystemError) Capture GetLastError after a Declare'd API call (for Err.LastDllError).

Dispatch slot (2, 0x62) runs the same MSVBVM60 handler as (0,3C) SetLastSystemError; runtime behaviour is identical.

Calls GetLastError and stores the value in the per-thread error object, where Err.LastDllError reads it. No stack effect.

When the compiler emits it

Not emitted by VB6 SP6 in Phase 4 probes. The same source compiles to (0,3C) SetLastSystemError instead.

Encoding, evidence and notes
Encoding

Encoding: FC 62 (lead byte FC selects table 2), then 0 operand byte(s); total instruction length 2 byte(s).
Operands: none. All inputs come from the evaluation stack or the frame.

Evidence and notes

Emitted by VB6 SP6 (P-code): not observed in about 3,070 probe programs. The slot exists in the runtime's dispatch table, but no tested source construct makes the compiler emit it.

Handler: 0x66106936, shared by 2 dispatch slots (real opcode #59). This is a duplicate slot of (0,3C) SetLastSystemError. Other slots: (0,3C) SetLastSystemError.

Slots sharing this handler

(0,0x3C) SetLastSystemError

Description: draft, by claude-opus-5-5. Handler 0x66106936, dispatch slot 0x6610769C, modOpcodes line 412.

Event

RaiseEvent

RaiseEvent

(5,0x0C)emittedhandler #738Object / COMinferred_corpus18 corpus hits
RaiseEvent: fire one of the class's events, by DISPID, on every connected WithEvents sink.

Fires an event declared with Event in the current class, form or UserControl. Operands: u32 dispid, then u16 cArgs. The argument values are already on the stack. The runtime walks the object's list of connected sinks (one per WithEvents variable or connection point) and calls IDispatch::Invoke(dispid, IID_NULL, 1033, DISPATCH_METHOD) on each one, so the event is selected by DISPID and the event's name is never used.

The DISPID is the event's MemberId, numbered 1..n in declaration order (the order of the Event statements, whatever members are declared between them). It matches the MemberId field (+0x0C) of the event descriptor at index dispid - 1 in the private object's event array (PrivateObject+0x24, count = u16 at +0x12). That descriptor gives the argument types and names (argSize is always 4 x the argument count, even for ByVal Double or Currency, so it agrees with cArgs), but it has no pointer to the event's name.

Event names are written by the compiler but nothing references them: they follow the class's GUIDs (CLSID, interface IIDs, and the event source IID at OptionalObjectInfo +0x14, count at +0x18) and its method-name strings, 4-byte aligned and in declaration order. A name that already exists elsewhere in the project (the whole string, or the tail of a longer string) is not written again, and other strings the compiler needs at that point (such as the library name VB) can land inside the run. A safe recovery rule: skip strings that something references (other than a method-name array), and accept the run only when it holds exactly one string per event; otherwise show the event by DISPID. vbdec prints recovered names and falls back to event_<dispid>. Over 80 randomized projects (1,116 events) the rule named 675 events and never produced a wrong name.

When the compiler emits it

Emitted for each RaiseEvent statement in a class, form, UserControl or other object module that declares Event. One instruction per statement; the DISPID is the event's position in declaration order (from 1).

Handler analysis

_lblEX_RaiseEvent (0x6610A84B): mov eax,[esi] (DISPID), movzx ebx, word [esi+4] (cArgs), add esi,6, then RaiseEventOnBasicClass(this, dispid, esp, cArgs) (0x660E6058) and lblLateExitRetval. RaiseEventOnBasicClass builds a DISPPARAMS from the stack arguments and, for each live sink in the list at this+0x34, calls Invoke (vtable +0x18) with flags 1 (DISPATCH_METHOD); an exception raised by a sink is reported through HresultCheck when error trapping asks for it. The compiled-code helper __vbaRaiseEvent (0x6610E9F8) calls the same routine.

VB6 source (verified: compiles to this slot)
Public Sub Main()
  Dim k As New CSink
End Sub
' ---- CSrc.cls
Public Event Fired(ByVal n As Long, s As String)
Public Event Simple()
Public Sub Go()
  Dim s As String
  RaiseEvent Fired(1, s)
  RaiseEvent Simple
End Sub
' ---- CSink.cls
Private WithEvents src As CSrc
Public Sub Hook()
  Set src = New CSrc
  src.Go
End Sub
Private Sub src_Fired(ByVal n As Long, s As String)
  s = CStr(n)
End Sub
Private Sub src_Simple()
End Sub
Encoding, evidence and notes
Encoding

Encoding: FF 0C (lead byte FF selects table 5), then 6 operand bytes; total instruction length 8 bytes.
vbdec template: dispid:%4 args:%2 (was eventIndex:%2 unk:%2 args%2, which split the DISPID into two words)
Operands:

  1. %4 (dispid): u32, the event's MemberId (1..n in declaration order).
  2. %2 (args): u16, number of arguments already pushed.

Observed (decoded): 010000000200 RaiseEvent Fired(ByVal n As Long, s As String) dispid:0x1 args:0x2

Examples
401B1F    FF0C 010000000200     RaiseEvent Fired(ByVal n As Long, s As String) dispid:0x1 args:0x2
401B2A    FF0C 020000000000     RaiseEvent Simple() dispid:0x2 args:0x0

Phase 4 probe, decoded by vbdec's RaiseEvent post-processor (2026-10-14). More cases from event_lab.py:

RaiseEvent doit(x)                ->  RaiseEvent doit(x As Variant) dispid:0x1 args:0x1
RaiseEvent Beta(2, "x")           ->  RaiseEvent Beta(ByVal a As Long, b As String) dispid:0x2 args:0x2
RaiseEvent Delta  (4th Event)     ->  RaiseEvent Delta() dispid:0x4 args:0x0
RaiseEvent Zulu(1)  (events declared between private fields)  ->  RaiseEvent Zulu(a As Long) dispid:0x1 args:0x1
RaiseEvent FireAll  (both names also used in another class)   ->  RaiseEvent event_2() dispid:0x2 args:0x0
Evidence and notes

Emitted by VB6 SP6 (P-code): yes. Minimal probe: probes\op\5_0C_RaiseEvent.

Handler: 0x6610A84B, unique to this slot (real opcode #738).

Check of vb6_source_eq example: verified: compiles and emits this slot.

Corpus: 18 occurrence(s) in PDFStreamDumper_p.exe.

Runtime check: confirmed 2026-10-14 against the handler and event_lab.py (five classes: events declared before, between and after other members; a class with no public methods; event names shared with another class). Every DISPID matched the event's declaration position, and every argument list matched the source. Name recovery was checked on the lab, opcodes_p.exe and PDFStreamDumper (where Complete is merged into a longer string and the run is correctly rejected), then stress-tested with event_lab2.py: 80 randomized projects with classes and forms (412 objects, 1,116 events), 0 wrong names and 0 DISPID mismatches in vbdec's output.

Example from the description
Dim o As CSrc
Set o = New CSrc
o.Go
' ---- CSrc.cls
Public Event Fired(ByVal n As Long)
Public Sub Go()
  RaiseEvent Fired(1)
End Sub

Description: draft, by claude-opus-5-5. Handler 0x6610A84B, dispatch slot 0x66108144, modOpcodes line 426.

ExitProc

Function/sub return

ExitProcCb

(3,0x95)emittedhandler #549Procedure call/returninferred_corpus20 corpus hits
Return from a module Function returning a Variant (copy the result to the caller's buffer).

Restores the caller's frame and returns. The return value is not on the evaluation stack: it is read from the procedure's return slot, copied (operand: byte count) into the caller-supplied result buffer.

When the compiler emits it

Epilogue of module Functions declared As Variant (or with no type). The operand is the byte count of the result copied to the caller's hidden result buffer (observed 0x10, one Variant).

VB6 source (verified: compiles to this slot)
Public Sub Main()
  
End Sub

Function F() As Variant
  F = 5
End Function
Encoding, evidence and notes
Encoding

Encoding: FD 95 (lead byte FD selects table 3), then 2 operand byte(s); total instruction length 4 byte(s).
vbdec template: %}
Operands:

  1. %}: eop_marker, 0 byte(s). display-only end-of-procedure marker; consumes no bytes.

Observed: FD95 1000 ExitProcCb

Examples
fso.Proc_4468A8 @ 0x4468A8 | 44693A    FD95 1000             ExitProcCb
fso.Proc_441A70 @ 0x441A70 | 441AB6    FD95 1000             ExitProcCb
fso.Proc_4454EC @ 0x4454EC | 44556B    FD95 1000             ExitProcCb

20 occurrence(s) in PDFStreamDumper.

Evidence and notes

Emitted by VB6 SP6 (P-code): yes. Minimal probe: probes\op\3_95_ExitProcCb.

Handler: 0x6610BF2F, unique to this slot (real opcode #549).

Check of vb6_source_eq example: verified: compiles and emits this slot.

Corpus: 20 occurrence(s) in PDFStreamDumper_p.exe.

Example from the description
Function F() As Variant
  F = 5
End Function
Sub Main()
  Dim v As Variant
  v = F()
End Sub

Description: draft, by claude-opus-5-5. Handler 0x6610BF2F, dispatch slot 0x66107B68, modOpcodes line 488.

ExitProcCbHresult

(5,0x2F)emittedhandler #756Procedure call/returninferred_corpus210 corpus hits
Return from a class/form method that produces a value: copy it to the [out, retval] parameter and return S_OK.

Copies sz bytes from the local return slot copy:%a to the [out, retval] argument to:%a, restores the caller's frame and returns the HRESULT.

When the compiler emits it

Epilogue of class/form Functions and Property Gets. The value is copied to the caller's [out, retval] pointer and the HRESULT returned. Operands: source slot, destination argument, byte count.

VB6 source (verified: compiles to this slot)
Public Sub Main()
  Dim o As New CR, s As String
End Sub
' ---- CR.cls
Public Function F(ByVal n As Long) As String
  If n Then F = "x": Exit Function
  F = "y"
End Function
Encoding, evidence and notes
Encoding

Encoding: FF 2F (lead byte FF selects table 5), then 4 operand byte(s); total instruction length 6 byte(s).
vbdec template: copyTo:%a sz:%2 %}
Operands:

  1. %a (copyTo): local_var_ref, 2 byte(s). signed 16-bit offset from the procedure frame pointer (EBP). Negative = local/temporary (vbdec var_XX, XX = -offset), positive = argument (arg_XX).
  2. %2 (sz): immediate_word, 2 byte(s). 16-bit immediate.
  3. %}: eop_marker, 0 byte(s). display-only end-of-procedure marker; consumes no bytes.

Observed: FF2F 10000400 ExitProcCbHresult copyTo:arg_10 sz:0x4

Examples
Form1.RegisterPlugin @ 0x44CB20 | 44CC08    FF2F 18001000         ExitProcCbHresult copyTo:arg_18 sz:0x10
Form1.isAS3Sorcerer_Installed @ 0x44D52C | 44D570    FF2F 10000200         ExitProcCbHresult copyTo:arg_10 sz:0x2
Form1.isAS3Sorcerer_Installed @ 0x44D52C | 44D5F4    FF2F 10000200         ExitProcCbHresult copyTo:arg_10 sz:0x2

210 occurrence(s) in PDFStreamDumper.

Evidence and notes

Emitted by VB6 SP6 (P-code): yes. Minimal probe: probes\op\5_2F_ExitProcCbHresult.

Handler: 0x661067B0, unique to this slot (real opcode #756).

Check of vb6_source_eq example: verified: compiles and emits this slot.

Corpus: 210 occurrence(s) in PDFStreamDumper_p.exe.

Example from the description
Dim o As CR, s As String
Set o = New CR
s = o.F()
' ---- CR.cls
Public Function F() As String
  F = "x"
End Function

Description: draft, by claude-opus-5-5. Handler 0x661067B0, dispatch slot 0x661081D0, modOpcodes line 492.

ExitProcCbStack

(3,0x96)not emittedhandler #550Procedure call/returninferred_corpus
No description yet.
Encoding, evidence and notes
Encoding

Encoding: FD 96 (lead byte FD selects table 3), then 2 operand byte(s); total instruction length 4 byte(s).
vbdec template: %}
Operands:

  1. %}: eop_marker, 0 byte(s). display-only end-of-procedure marker; consumes no bytes.
Evidence and notes

Emitted by VB6 SP6 (P-code): not observed in about 3,070 probe programs. The slot exists in the runtime's dispatch table, but no tested source construct makes the compiler emit it.

Handler: 0x6610BEB0, unique to this slot (real opcode #550).

Description: none. Handler 0x6610BEB0, dispatch slot 0x66107B6C, modOpcodes line 489.

ExitProcCy

(0,0x18)emittedprimary of 2handler #23Procedure call/returninferred_corpus
Return from a Function whose return type is Currency.

Loads the 8-byte Currency return value from the procedure's return slot into EDX:EAX, tears down the frame and returns to the caller.

Stack: [...] -> (frame discarded)

When the compiler emits it

Emitted as the epilogue of a module Function declared As Currency.

VB6 source (verified: compiles to this slot)
Public Sub Main()
  
End Sub

Function F() As Currency
  F = 1.5@
End Function
Encoding, evidence and notes
Encoding

Encoding: 18, then 0 operand byte(s); total instruction length 1 byte(s).
vbdec template: %}
Operands:

  1. %}: eop_marker, 0 byte(s). display-only end-of-procedure marker; consumes no bytes.

Observed: 18 ExitProcCy

Examples
18  ExitProcCy

From the Phase 4 probe (VB6 SP6, P-code).

Evidence and notes

Emitted by VB6 SP6 (P-code): yes. Minimal probe: probes\op\0_18_ExitProcCy.

Handler: 0x6610BEC9, shared by 2 dispatch slots (real opcode #23). This is the primary slot. Other slots: (2,D1) ExitProcCy.

Check of vb6_source_eq example: verified: compiles and emits this slot.

Example from the description
Public Sub Main()
  
End Sub

Function F() As Currency
  F = 1.5@
End Function
Slots sharing this handler

(2,0xD1) ExitProcCy

Description: draft, by claude-opus-5-5. Handler 0x6610BEC9, dispatch slot 0x66106D74, modOpcodes line 476.

ExitProcCy

(2,0xD1)not emitteddup of (0,18)handler #23Procedure call/returnconfirmed_handler
Same handler as (0,0x18) ExitProcCy: Return from a Function whose return type is Currency.
Encoding, evidence and notes
Encoding

Encoding: FC D1 (lead byte FC selects table 2), then 0 operand byte(s); total instruction length 2 byte(s).
vbdec template: %}
Operands:

  1. %}: eop_marker, 0 byte(s). display-only end-of-procedure marker; consumes no bytes.
Evidence and notes

Emitted by VB6 SP6 (P-code): not observed in about 3,070 probe programs. The slot exists in the runtime's dispatch table, but no tested source construct makes the compiler emit it.

Handler: 0x6610BEC9, shared by 2 dispatch slots (real opcode #23). This is a duplicate slot of (0,18) ExitProcCy. Other slots: (0,18) ExitProcCy.

Slots sharing this handler

(0,0x18) ExitProcCy

Description: none. Handler 0x6610BEC9, dispatch slot 0x66107858, modOpcodes line 482.

ExitProcFrameCb

(4,0x9E)emittedhandler #662UDT / recordinferred_corpus
Return a user-defined type from a module Function by copying it to the caller's buffer.

Copies sz bytes of the UDT return value from the local slot %a to the hidden result buffer supplied by the caller, then returns. Observed: FE9E 66FF 1600 = local var_9A, 0x16 bytes, for a 22-byte UDT.

Operands: %a source frame slot (2 bytes), %2 byte count (2 bytes).

When the compiler emits it

Emitted as the epilogue of a module Function that returns a UDT larger than 8 bytes (probe: Function F() As TB, 22-byte type). See ExitProcFrameCbStack for small UDTs and ExitProcFrameCbHresult for class methods.

VB6 source (verified: compiles to this slot)
Private Type TB
  x(15) As Byte
  s As String * 3
End Type

Public Sub Main()
  Dim a As TB
End Sub

Private Function F() As TB
End Function
Encoding, evidence and notes
Encoding

Encoding: FE 9E (lead byte FE selects table 4), then 4 operand byte(s); total instruction length 6 byte(s).
vbdec template: %}
Operands:

  1. %}: eop_marker, 0 byte(s). display-only end-of-procedure marker; consumes no bytes.

Observed: FE9E 66FF1600 ExitProcFrameCb

Examples
FE9E 66FF1600  ExitProcFrameCb

From the Phase 4 probe (VB6 SP6, P-code).

Evidence and notes

Emitted by VB6 SP6 (P-code): yes. Minimal probe: probes\op\4_9E_ExitProcFrameCb.

Handler: 0x6610BEE8, unique to this slot (real opcode #662).

Check of vb6_source_eq example: verified: compiles and emits this slot.

Example from the description
Private Type TB
  x(15) As Byte
  s As String * 3
End Type

Public Sub Main()
  Dim a As TB
End Sub

Private Function F() As TB
End Function

Description: draft, by claude-opus-5-5. Handler 0x6610BEE8, dispatch slot 0x66107F8C, modOpcodes line 490.

ExitProcFrameCbHresult

(5,0x30)emittedhandler #757UDT / recordinferred_corpus
Return a user-defined type from a class/COM method (HRESULT-returning) by copying it to the [out] buffer.

Copies sz bytes from local copy:%a to the caller-supplied out-parameter to:%a, then returns S_OK. Observed: copy:var_88 to:arg_C sz:0x4.

Operands: source slot %a, destination argument %a, byte count %2.

When the compiler emits it

Emitted as the epilogue of a class-module Function returning a UDT, and of public methods returning a public UDT in an ActiveX DLL.

VB6 source (verified: compiles to this slot)
Public Sub Main()
  Dim o As New CR2
End Sub
' ---- CR2.cls
Private Type TR
  a As Long
End Type
Private Function F() As TR
End Function
Public Sub Work()
  Dim r As TR
  r = F()
End Sub
Encoding, evidence and notes
Encoding

Encoding: FF 30 (lead byte FF selects table 5), then 6 operand byte(s); total instruction length 8 byte(s).
vbdec template: copy:%a to:%a sz:%2
Operands:

  1. %a (copy): local_var_ref, 2 byte(s). signed 16-bit offset from the procedure frame pointer (EBP). Negative = local/temporary (vbdec var_XX, XX = -offset), positive = argument (arg_XX).
  2. %a (to): local_var_ref, 2 byte(s). signed 16-bit offset from the procedure frame pointer (EBP). Negative = local/temporary (vbdec var_XX, XX = -offset), positive = argument (arg_XX).
  3. %2 (sz): immediate_word, 2 byte(s). 16-bit immediate.

Observed: FF30 78FF0C000400 ExitProcFrameCbHresult copy:var_88 to:arg_C sz:0x4

Examples
FF30 78FF0C000400  ExitProcFrameCbHresult copy:var_88 to:arg_C sz:0x4

From the Phase 4 probe (VB6 SP6, P-code).

Evidence and notes

Emitted by VB6 SP6 (P-code): yes. Minimal probe: probes\op\5_30_ExitProcFrameCbHresult.

Handler: 0x6610BF09, unique to this slot (real opcode #757).

Check of vb6_source_eq example: verified: compiles and emits this slot.

Example from the description
Public Sub Main()
  Dim o As New CR2
End Sub
' ---- CR2.cls
Private Type TR
  a As Long
End Type
Private Function F() As TR
End Function
Public Sub Work()
  Dim r As TR
  r = F()
End Sub

Description: draft, by claude-opus-5-5. Handler 0x6610BF09, dispatch slot 0x661081D4, modOpcodes line 493.

ExitProcFrameCbStack

(4,0x9F)emittedhandler #663UDT / recordinferred_corpus
Return a small (8-byte) user-defined type from a module Function.

Returns a UDT whose size fits the small-struct convention. Operands as ExitProcFrameCb: %a source slot, %2 byte count (observed 8 for Type TPlain: a As Long: b As Integer). The handler differs from ExitProcFrameCb in how the result reaches the caller (stack/registers vs. buffer); exact mechanics not yet verified at the handler level.

When the compiler emits it

Emitted as the epilogue of a module Function returning an 8-byte UDT.

VB6 source (verified: compiles to this slot)
Private Type TRec
  a As Long
  s As String
  v As Variant
  o As Object
End Type
Private Type TPlain
  a As Long
  b As Integer
End Type

Public Sub Main()
  Dim r As TPlain
End Sub

Private Function F() As TPlain
  F.a = 1
End Function
Encoding, evidence and notes
Encoding

Encoding: FE 9F (lead byte FE selects table 4), then 4 operand byte(s); total instruction length 6 byte(s).
vbdec template: %}
Operands:

  1. %}: eop_marker, 0 byte(s). display-only end-of-procedure marker; consumes no bytes.

Observed: FE9F 74FF0800 ExitProcFrameCbStack

Examples
FE9F 74FF0800  ExitProcFrameCbStack

From the Phase 4 probe (VB6 SP6, P-code).

Evidence and notes

Emitted by VB6 SP6 (P-code): yes. Minimal probe: probes\op\4_9F_ExitProcFrameCbStack.

Handler: 0x6610BE63, unique to this slot (real opcode #663).

Check of vb6_source_eq example: verified: compiles and emits this slot.

Example from the description
Private Type TRec
  a As Long
  s As String
  v As Variant
  o As Object
End Type
Private Type TPlain
  a As Long
  b As Integer
End Type

Public Sub Main()
  Dim r As TPlain
End Sub

Private Function F() As TPlain
  F.a = 1
End Function

Description: draft, by claude-opus-5-5. Handler 0x6610BE63, dispatch slot 0x66107F90, modOpcodes line 491.

ExitProcHresult

(0,0x13)emittedprimary of 2handler #18Procedure call/returninferred_corpus581 corpus hits
Return S_OK from a class/form method that produces no value (Sub, Property Let/Set).

Restores the caller's frame and returns the HRESULT (S_OK unless an unhandled error occurred) in EAX.

When the compiler emits it

Epilogue of COM-visible procedures in class, form and control modules that return nothing: Sub, Property Let, Property Set, and event handlers. These are HRESULT methods, so the epilogue returns S_OK (or the error HRESULT).

VB6 source (verified: compiles to this slot)
Public Sub Main()
  Dim o As New CEx
End Sub
' ---- CEx.cls
Public Property Let v(x As Long)
  If x Then Exit Property
End Property
Encoding, evidence and notes
Encoding

Encoding: 13, then 0 operand byte(s); total instruction length 1 byte(s).
vbdec template: %}
Operands:

  1. %}: eop_marker, 0 byte(s). display-only end-of-procedure marker; consumes no bytes.

Observed: 13 ExitProcHresult

Examples
Form1.LoadPlugins @ 0x4644FC | 464590    13                    ExitProcHresult
Form1.LoadPlugins @ 0x4644FC | 4645F7    13                    ExitProcHresult
Form1.LoadPlugins @ 0x4644FC | 4647A9    13                    ExitProcHresult

581 occurrence(s) in PDFStreamDumper.

Evidence and notes

Emitted by VB6 SP6 (P-code): yes. Minimal probe: probes\op\0_13_ExitProcHresult.

Handler: 0x6610681F, shared by 2 dispatch slots (real opcode #18). This is the primary slot. Other slots: (2,6D) ExitProcHresult.

Check of vb6_source_eq example: verified: compiles and emits this slot.

Corpus: 581 occurrence(s) in PDFStreamDumper_p.exe.

Example from the description
Dim o As CEx
Set o = New CEx
o.Work
' ---- CEx.cls
Public Sub Work()
  Dim n As Long
  n = 1
End Sub
Slots sharing this handler

(2,0x6D) ExitProcHresult

Description: draft, by claude-opus-5-5. Handler 0x6610681F, dispatch slot 0x66106D60, modOpcodes line 486.

ExitProcHresult

(2,0x6D)not emitteddup of (0,13)handler #18Procedure call/returnconfirmed_handler
Same handler as (0,0x13) ExitProcHresult: Return S_OK from a class/form method that produces no value (Sub, Property Let/Set).
Encoding, evidence and notes
Encoding

Encoding: FC 6D (lead byte FC selects table 2), then 0 operand byte(s); total instruction length 2 byte(s).
vbdec template: %}
Operands:

  1. %}: eop_marker, 0 byte(s). display-only end-of-procedure marker; consumes no bytes.
Evidence and notes

Emitted by VB6 SP6 (P-code): not observed in about 3,070 probe programs. The slot exists in the runtime's dispatch table, but no tested source construct makes the compiler emit it.

Handler: 0x6610681F, shared by 2 dispatch slots (real opcode #18). This is a duplicate slot of (0,13) ExitProcHresult. Other slots: (0,13) ExitProcHresult.

Slots sharing this handler

(0,0x13) ExitProcHresult

Description: none. Handler 0x6610681F, dispatch slot 0x661076C8, modOpcodes line 487.

ExitProcI2

(0,0x15)emittedprimary of 2handler #20Procedure call/returninferred_corpus37 corpus hits
Return from a module Function returning Integer or Boolean.

Restores the caller's frame and returns. The return value is not on the evaluation stack: it is read from the procedure's return slot and placed in AX.

When the compiler emits it

Epilogue of module Functions declared As Integer or As Boolean (result in AX).

VB6 source (verified: compiles to this slot)
Public Sub Main()
  
End Sub

Function F() As Boolean
  F = True
End Function
Encoding, evidence and notes
Encoding

Encoding: 15, then 0 operand byte(s); total instruction length 1 byte(s).
vbdec template: %}
Operands:

  1. %}: eop_marker, 0 byte(s). display-only end-of-procedure marker; consumes no bytes.

Observed: 15 ExitProcI2

Examples
modZLIB.Proc_45E44C @ 0x45E44C | 45E6C1    15                    ExitProcI2
modZLIB.Proc_4666C0 @ 0x4666C0 | 466A51    15                    ExitProcI2
fso.Proc_43D564 @ 0x43D564 | 43D56C    15                    ExitProcI2

37 occurrence(s) in PDFStreamDumper.

Evidence and notes

Emitted by VB6 SP6 (P-code): yes. Minimal probe: probes\op\0_15_ExitProcI2.

Handler: 0x66106828, shared by 2 dispatch slots (real opcode #20). This is the primary slot. Other slots: (2,CD) ExitProcI2.

Check of vb6_source_eq example: verified: compiles and emits this slot.

Corpus: 37 occurrence(s) in PDFStreamDumper_p.exe.

Example from the description
Function F() As Boolean
  F = True
End Function
Sub Main()
  Dim b As Boolean
  b = F()
End Sub
Slots sharing this handler

(2,0xCD) ExitProcI2

Description: draft, by claude-opus-5-5. Handler 0x66106828, dispatch slot 0x66106D68, modOpcodes line 473.

ExitProcI2

(2,0xCD)not emitteddup of (0,15)handler #20Procedure call/returnconfirmed_handler
Same handler as (0,0x15) ExitProcI2: Return from a module Function returning Integer or Boolean.
Encoding, evidence and notes
Encoding

Encoding: FC CD (lead byte FC selects table 2), then 0 operand byte(s); total instruction length 2 byte(s).
vbdec template: %}
Operands:

  1. %}: eop_marker, 0 byte(s). display-only end-of-procedure marker; consumes no bytes.
Evidence and notes

Emitted by VB6 SP6 (P-code): not observed in about 3,070 probe programs. The slot exists in the runtime's dispatch table, but no tested source construct makes the compiler emit it.

Handler: 0x66106828, shared by 2 dispatch slots (real opcode #20). This is a duplicate slot of (0,15) ExitProcI2. Other slots: (0,15) ExitProcI2.

Slots sharing this handler

(0,0x15) ExitProcI2

Description: none. Handler 0x66106828, dispatch slot 0x66107848, modOpcodes line 478.

ExitProcI4

(0,0x14)emittedprimary of 5handler #19Procedure call/returninferred_corpus95 corpus hits
Return from a module Sub, or from a Function returning Long or String.

Restores the caller's frame and returns. The return value is not on the evaluation stack: it is read from the procedure's return slot and placed in EAX.

When the compiler emits it

The compiler uses this epilogue for every Standard-module Sub and for module Functions whose result fits in EAX as a 32-bit value: As Long and As String (the BSTR pointer). The ExitProcStr slots share this handler and are never emitted.

VB6 source (verified: compiles to this slot)
Public Sub Main()
  Dim n As Long
End Sub
Encoding, evidence and notes
Encoding

Encoding: 14, then 0 operand byte(s); total instruction length 1 byte(s).
vbdec template: %}
Operands:

  1. %}: eop_marker, 0 byte(s). display-only end-of-procedure marker; consumes no bytes.

Observed: 14 ExitProcI4

Examples
modZLIB.Proc_43E6AC @ 0x43E6AC | 43E6CC    14                    ExitProcI4
modZLIB.Proc_43D378 @ 0x43D378 | 43D380    14                    ExitProcI4
modZLIB.Proc_43E804 @ 0x43E804 | 43E824    14                    ExitProcI4

95 occurrence(s) in PDFStreamDumper.

Evidence and notes

Emitted by VB6 SP6 (P-code): yes. Minimal probe: probes\op\0_14_ExitProcI4.

Handler: 0x661067E8, shared by 5 dispatch slots (real opcode #19). This is the primary slot. Other slots: (2,CE) ExitProcStr, (2,D3) ExitProcStr, (2,D4) ExitProcStr, (2,D5) ExitProcStr.

Check of vb6_source_eq example: verified: compiles and emits this slot.

Corpus: 95 occurrence(s) in PDFStreamDumper_p.exe.

Example from the description
Function F() As Long
  F = 70000
End Function
Sub Main()
  Dim n As Long
  n = F()
End Sub
Slots sharing this handler

(2,0xCE) ExitProcStr, (2,0xD3) ExitProcStr, (2,0xD4) ExitProcStr, (2,0xD5) ExitProcStr

Description: draft, by claude-opus-5-5. Handler 0x661067E8, dispatch slot 0x66106D64, modOpcodes line 472.

ExitProcR4

(0,0x16)emittedprimary of 2handler #21Procedure call/returninferred_corpus1 corpus hits
Return from a module Function returning Single (FPU).

Restores the caller's frame and returns. The return value is not on the evaluation stack: it is read from the procedure's return slot and loaded onto the FPU (ST0).

When the compiler emits it

Epilogue of module Functions declared As Single (result in ST0).

VB6 source (verified: compiles to this slot)
Public Sub Main()
  
End Sub

Function F() As Single
  F = 1.5!
End Function
Encoding, evidence and notes
Encoding

Encoding: 16, then 0 operand byte(s); total instruction length 1 byte(s).
vbdec template: %}
Operands:

  1. %}: eop_marker, 0 byte(s). display-only end-of-procedure marker; consumes no bytes.

Observed: 16 ExitProcR4

Examples
modActionScript.Proc_43EB1C @ 0x43EB1C | 43EB3D    16                    ExitProcR4

1 occurrence(s) in PDFStreamDumper.

Evidence and notes

Emitted by VB6 SP6 (P-code): yes. Minimal probe: probes\op\0_16_ExitProcR4.

Handler: 0x6610BF42, shared by 2 dispatch slots (real opcode #21). This is the primary slot. Other slots: (2,CF) ExitProcR4.

Check of vb6_source_eq example: verified: compiles and emits this slot.

Corpus: 1 occurrence(s) in PDFStreamDumper_p.exe.

Example from the description
Function F() As Single
  F = 1.5!
End Function
Sub Main()
  Dim s As Single
  s = F()
End Sub
Slots sharing this handler

(2,0xCF) ExitProcR4

Description: draft, by claude-opus-5-5. Handler 0x6610BF42, dispatch slot 0x66106D6C, modOpcodes line 474.

ExitProcR4

(2,0xCF)not emitteddup of (0,16)handler #21Procedure call/returnconfirmed_handler
Same handler as (0,0x16) ExitProcR4: Return from a module Function returning Single (FPU).
Encoding, evidence and notes
Encoding

Encoding: FC CF (lead byte FC selects table 2), then 0 operand byte(s); total instruction length 2 byte(s).
vbdec template: %}
Operands:

  1. %}: eop_marker, 0 byte(s). display-only end-of-procedure marker; consumes no bytes.
Evidence and notes

Emitted by VB6 SP6 (P-code): not observed in about 3,070 probe programs. The slot exists in the runtime's dispatch table, but no tested source construct makes the compiler emit it.

Handler: 0x6610BF42, shared by 2 dispatch slots (real opcode #21). This is a duplicate slot of (0,16) ExitProcR4. Other slots: (0,16) ExitProcR4.

Slots sharing this handler

(0,0x16) ExitProcR4

Description: none. Handler 0x6610BF42, dispatch slot 0x66107850, modOpcodes line 480.

ExitProcR8

(0,0x17)emittedprimary of 2handler #22Procedure call/returninferred_corpus
Return from a Function whose return type is Double or Date (FPU return).

Loads the 8-byte floating-point return value onto the FPU stack (ST0), tears down the frame and returns.

Stack: [...] -> (frame discarded)

When the compiler emits it

Emitted as the epilogue of a module Function declared As Double or As Date (probe: Function F() As Date).

VB6 source (verified: compiles to this slot)
Public Sub Main()
  
End Sub

Function F() As Date
  F = #1/1/2000#
End Function
Encoding, evidence and notes
Encoding

Encoding: 17, then 0 operand byte(s); total instruction length 1 byte(s).
vbdec template: %}
Operands:

  1. %}: eop_marker, 0 byte(s). display-only end-of-procedure marker; consumes no bytes.

Observed: 17 ExitProcR8

Examples
17  ExitProcR8

From the Phase 4 probe (VB6 SP6, P-code).

Evidence and notes

Emitted by VB6 SP6 (P-code): yes. Minimal probe: probes\op\0_17_ExitProcR8.

Handler: 0x6610BF4F, shared by 2 dispatch slots (real opcode #22). This is the primary slot. Other slots: (2,D0) ExitProcR8.

Check of vb6_source_eq example: verified: compiles and emits this slot.

Example from the description
Public Sub Main()
  
End Sub

Function F() As Date
  F = #1/1/2000#
End Function
Slots sharing this handler

(2,0xD0) ExitProcR8

Description: draft, by claude-opus-5-5. Handler 0x6610BF4F, dispatch slot 0x66106D70, modOpcodes line 475.

ExitProcR8

(2,0xD0)not emitteddup of (0,17)handler #22Procedure call/returnconfirmed_handler
Same handler as (0,0x17) ExitProcR8: Return from a Function whose return type is Double or Date (FPU return).
Encoding, evidence and notes
Encoding

Encoding: FC D0 (lead byte FC selects table 2), then 0 operand byte(s); total instruction length 2 byte(s).
vbdec template: %}
Operands:

  1. %}: eop_marker, 0 byte(s). display-only end-of-procedure marker; consumes no bytes.
Evidence and notes

Emitted by VB6 SP6 (P-code): not observed in about 3,070 probe programs. The slot exists in the runtime's dispatch table, but no tested source construct makes the compiler emit it.

Handler: 0x6610BF4F, shared by 2 dispatch slots (real opcode #22). This is a duplicate slot of (0,17) ExitProcR8. Other slots: (0,17) ExitProcR8.

Slots sharing this handler

(0,0x17) ExitProcR8

Description: none. Handler 0x6610BF4F, dispatch slot 0x66107854, modOpcodes line 481.

ExitProcStr

(2,0xCE)not emitteddup of (0,14)handler #19Procedure call/returninferred_corpus
Same handler as (0,0x14) ExitProcI4: Return from a module Sub, or from a Function returning Long or String.
Encoding, evidence and notes
Encoding

Encoding: FC CE (lead byte FC selects table 2), then 0 operand byte(s); total instruction length 2 byte(s).
vbdec template: %}
Operands:

  1. %}: eop_marker, 0 byte(s). display-only end-of-procedure marker; consumes no bytes.
Evidence and notes

Emitted by VB6 SP6 (P-code): not observed in about 3,070 probe programs. The slot exists in the runtime's dispatch table, but no tested source construct makes the compiler emit it.

Handler: 0x661067E8, shared by 5 dispatch slots (real opcode #19). This is a duplicate slot of (0,14) ExitProcI4. Other slots: (0,14) ExitProcI4, (2,D3) ExitProcStr, (2,D4) ExitProcStr, (2,D5) ExitProcStr.

Slots sharing this handler

(0,0x14) ExitProcI4, (2,0xD3) ExitProcStr, (2,0xD4) ExitProcStr, (2,0xD5) ExitProcStr

Description: none. Handler 0x661067E8, dispatch slot 0x6610784C, modOpcodes line 479.

ExitProcStr

(2,0xD3)not emitteddup of (0,14)handler #19Procedure call/returnconfirmed_handler
(duplicate slot of (0,14) ExitProcI4) Return from a module Sub, or from a Function returning Long or String.

Dispatch slot (2, 0xD3) runs the same MSVBVM60 handler as (0,14) ExitProcI4; runtime behaviour is identical.

Restores the caller's frame and returns. The return value is not on the evaluation stack: it is read from the procedure's return slot and placed in EAX.

When the compiler emits it

Not emitted by VB6 SP6 in Phase 4 probes. The same source compiles to (0,14) ExitProcI4 instead.

Encoding, evidence and notes
Encoding

Encoding: FC D3 (lead byte FC selects table 2), then 0 operand byte(s); total instruction length 2 byte(s).
Operands: none. All inputs come from the evaluation stack or the frame.

Evidence and notes

Emitted by VB6 SP6 (P-code): not observed in about 3,070 probe programs. The slot exists in the runtime's dispatch table, but no tested source construct makes the compiler emit it.

Handler: 0x661067E8, shared by 5 dispatch slots (real opcode #19). This is a duplicate slot of (0,14) ExitProcI4. Other slots: (0,14) ExitProcI4, (2,CE) ExitProcStr, (2,D4) ExitProcStr, (2,D5) ExitProcStr.

Slots sharing this handler

(0,0x14) ExitProcI4, (2,0xCE) ExitProcStr, (2,0xD4) ExitProcStr, (2,0xD5) ExitProcStr

Description: draft, by claude-opus-5-5. Handler 0x661067E8, dispatch slot 0x66107860, modOpcodes line 483.

ExitProcStr

(2,0xD4)not emitteddup of (0,14)handler #19Procedure call/returnconfirmed_handler
(duplicate slot of (0,14) ExitProcI4) Return from a module Sub, or from a Function returning Long or String.

Dispatch slot (2, 0xD4) runs the same MSVBVM60 handler as (0,14) ExitProcI4; runtime behaviour is identical.

Restores the caller's frame and returns. The return value is not on the evaluation stack: it is read from the procedure's return slot and placed in EAX.

When the compiler emits it

Not emitted by VB6 SP6 in Phase 4 probes. The same source compiles to (0,14) ExitProcI4 instead.

Encoding, evidence and notes
Encoding

Encoding: FC D4 (lead byte FC selects table 2), then 0 operand byte(s); total instruction length 2 byte(s).
Operands: none. All inputs come from the evaluation stack or the frame.

Evidence and notes

Emitted by VB6 SP6 (P-code): not observed in about 3,070 probe programs. The slot exists in the runtime's dispatch table, but no tested source construct makes the compiler emit it.

Handler: 0x661067E8, shared by 5 dispatch slots (real opcode #19). This is a duplicate slot of (0,14) ExitProcI4. Other slots: (0,14) ExitProcI4, (2,CE) ExitProcStr, (2,D3) ExitProcStr, (2,D5) ExitProcStr.

Slots sharing this handler

(0,0x14) ExitProcI4, (2,0xCE) ExitProcStr, (2,0xD3) ExitProcStr, (2,0xD5) ExitProcStr

Description: draft, by claude-opus-5-5. Handler 0x661067E8, dispatch slot 0x66107864, modOpcodes line 484.

ExitProcStr

(2,0xD5)not emitteddup of (0,14)handler #19Procedure call/returnconfirmed_handler
(duplicate slot of (0,14) ExitProcI4) Return from a module Sub, or from a Function returning Long or String.

Dispatch slot (2, 0xD5) runs the same MSVBVM60 handler as (0,14) ExitProcI4; runtime behaviour is identical.

Restores the caller's frame and returns. The return value is not on the evaluation stack: it is read from the procedure's return slot and placed in EAX.

When the compiler emits it

Not emitted by VB6 SP6 in Phase 4 probes. The same source compiles to (0,14) ExitProcI4 instead.

Encoding, evidence and notes
Encoding

Encoding: FC D5 (lead byte FC selects table 2), then 0 operand byte(s); total instruction length 2 byte(s).
Operands: none. All inputs come from the evaluation stack or the frame.

Evidence and notes

Emitted by VB6 SP6 (P-code): not observed in about 3,070 probe programs. The slot exists in the runtime's dispatch table, but no tested source construct makes the compiler emit it.

Handler: 0x661067E8, shared by 5 dispatch slots (real opcode #19). This is a duplicate slot of (0,14) ExitProcI4. Other slots: (0,14) ExitProcI4, (2,CE) ExitProcStr, (2,D3) ExitProcStr, (2,D4) ExitProcStr.

Slots sharing this handler

(0,0x14) ExitProcI4, (2,0xCE) ExitProcStr, (2,0xD3) ExitProcStr, (2,0xD4) ExitProcStr

Description: draft, by claude-opus-5-5. Handler 0x661067E8, dispatch slot 0x66107868, modOpcodes line 485.

ExitProcUI1

(2,0xCC)emittedhandler #461Procedure call/returninferred_corpus
Return from a Function whose return type is Byte.

Loads the Byte return value into AL, tears down the frame and returns.

Stack: [...] -> (frame discarded)

When the compiler emits it

Emitted as the epilogue of a module Function declared As Byte.

VB6 source (verified: compiles to this slot)
Public Sub Main()
  
End Sub

Function F() As Byte
  F = 7
End Function
Encoding, evidence and notes
Encoding

Encoding: FC CC (lead byte FC selects table 2), then 0 operand byte(s); total instruction length 2 byte(s).
vbdec template: %}
Operands:

  1. %}: eop_marker, 0 byte(s). display-only end-of-procedure marker; consumes no bytes.

Observed: FCCC ExitProcUI1

Examples
FCCC  ExitProcUI1

From the Phase 4 probe (VB6 SP6, P-code).

Evidence and notes

Emitted by VB6 SP6 (P-code): yes. Minimal probe: probes\op\2_CC_ExitProcUI1.

Handler: 0x6610BF5C, unique to this slot (real opcode #461).

Check of vb6_source_eq example: verified: compiles and emits this slot.

Example from the description
Public Sub Main()
  
End Sub

Function F() As Byte
  F = 7
End Function

Description: draft, by claude-opus-5-5. Handler 0x6610BF5C, dispatch slot 0x66107844, modOpcodes line 477.

FFree

Free heap memory of frame slot(s) Prefix: F = frame slot being freed

FFree1Ad

(0,0x1A)emittedprimary of 2handler #25Stack & frameinferred_corpus915 corpus hits
Free heap-backed frame slot(s): FFree1Ad.

Releases reference-counted resources (BSTRs, Variants, object refs) held in one or more frame slots. Variable-length variants (FFreeVar, FFreeStr, FFreeAd) consume a count byte followed by that many 2-byte slot offsets.

Inserted by the compiler at procedure exits and after temporary expressions to balance lifetime of allocated values.

When the compiler emits it

Emitted at every procedure cleanup point and after any expression that produced a heap value into a tracked slot.

VB6 source (verified: compiles to this slot)
Public Sub Main()
  F
End Sub

Function F() As Object
  Set F = New Collection
End Function
Encoding, evidence and notes
Encoding

Encoding: 1A, then 2 operand byte(s); total instruction length 3 byte(s).
vbdec template: %a
Operands:

  1. %a: local_var_ref, 2 byte(s). signed 16-bit offset from the procedure frame pointer (EBP). Negative = local/temporary (vbdec var_XX, XX = -offset), positive = argument (arg_XX).

Observed: 1A 78FF FFree1Ad var_88

Examples
Form1.LoadPlugins @ 0x4644FC | 464531    1A 68FF               FFree1Ad var_98
Form1.LoadPlugins @ 0x4644FC | 4645D3    1A 68FF               FFree1Ad var_98
Form1.LoadPlugins @ 0x4644FC | 4646B2    1A 68FF               FFree1Ad var_98

915 occurrence(s) in PDFStreamDumper.

Evidence and notes

Emitted by VB6 SP6 (P-code): yes. Minimal probe: probes\op\0_1A_FFree1Ad.

Handler: 0x661065CE, shared by 2 dispatch slots (real opcode #25). This is the primary slot. Other slots: (3,9B) FFree1Ad.

Corpus: 915 occurrence(s) in PDFStreamDumper_p.exe.

Slots sharing this handler

(3,0x9B) FFree1Ad

Description: draft, by claude-opus-4.7. Handler 0x661065CE, dispatch slot 0x66106D7C, modOpcodes line 729.

FFree1Ad

(3,0x9B)not emitteddup of (0,1A)handler #25Stack & frameconfirmed_handler
Same handler as (0,0x1A) FFree1Ad: Free heap-backed frame slot(s): FFree1Ad.
Encoding, evidence and notes
Encoding

Encoding: FD 9B (lead byte FD selects table 3), then 2 operand byte(s); total instruction length 4 byte(s).
vbdec template: %a
Operands:

  1. %a: local_var_ref, 2 byte(s). signed 16-bit offset from the procedure frame pointer (EBP). Negative = local/temporary (vbdec var_XX, XX = -offset), positive = argument (arg_XX).
Evidence and notes

Emitted by VB6 SP6 (P-code): not observed in about 3,070 probe programs. The slot exists in the runtime's dispatch table, but no tested source construct makes the compiler emit it.

Handler: 0x661065CE, shared by 2 dispatch slots (real opcode #25). This is a duplicate slot of (0,1A) FFree1Ad. Other slots: (0,1A) FFree1Ad.

Slots sharing this handler

(0,0x1A) FFree1Ad

Description: none. Handler 0x661065CE, dispatch slot 0x66107B80, modOpcodes line 730.

FFree1Str

(0,0x2F)emittedprimary of 2handler #46Stack & frameinferred_corpus541 corpus hits
Free heap-backed frame slot(s): FFree1Str.

Releases reference-counted resources (BSTRs, Variants, object refs) held in one or more frame slots. Variable-length variants (FFreeVar, FFreeStr, FFreeAd) consume a count byte followed by that many 2-byte slot offsets.

Inserted by the compiler at procedure exits and after temporary expressions to balance lifetime of allocated values.

When the compiler emits it

Emitted at every procedure cleanup point and after any expression that produced a heap value into a tracked slot.

VB6 source (verified: compiles to this slot)
Public Sub Main()
  F
End Sub

Function F() As String
  F = "abc"
End Function
Encoding, evidence and notes
Encoding

Encoding: 2F, then 2 operand byte(s); total instruction length 3 byte(s).
vbdec template: %a
Operands:

  1. %a: local_var_ref, 2 byte(s). signed 16-bit offset from the procedure frame pointer (EBP). Negative = local/temporary (vbdec var_XX, XX = -offset), positive = argument (arg_XX).

Observed: 2F 78FF FFree1Str var_88

Examples
Form1.LoadPlugins @ 0x4644FC | 46452E    2F 64FF               FFree1Str var_9C
Form1.LoadPlugins @ 0x4644FC | 4645D0    2F 64FF               FFree1Str var_9C
Form1.LoadPlugins @ 0x4644FC | 46466B    2F 64FF               FFree1Str var_9C

541 occurrence(s) in PDFStreamDumper.

Evidence and notes

Emitted by VB6 SP6 (P-code): yes. Minimal probe: probes\op\0_2F_FFree1Str.

Handler: 0x6610656F, shared by 2 dispatch slots (real opcode #46). This is the primary slot. Other slots: (3,9A) FFree1Str.

Corpus: 541 occurrence(s) in PDFStreamDumper_p.exe.

Slots sharing this handler

(3,0x9A) FFree1Str

Description: draft, by claude-opus-4.7. Handler 0x6610656F, dispatch slot 0x66106DD0, modOpcodes line 716.

FFree1Str

(3,0x9A)not emitteddup of (0,2F)handler #46Stack & frameconfirmed_handler
Same handler as (0,0x2F) FFree1Str: Free heap-backed frame slot(s): FFree1Str.
Encoding, evidence and notes
Encoding

Encoding: FD 9A (lead byte FD selects table 3), then 2 operand byte(s); total instruction length 4 byte(s).
vbdec template: %a
Operands:

  1. %a: local_var_ref, 2 byte(s). signed 16-bit offset from the procedure frame pointer (EBP). Negative = local/temporary (vbdec var_XX, XX = -offset), positive = argument (arg_XX).
Evidence and notes

Emitted by VB6 SP6 (P-code): not observed in about 3,070 probe programs. The slot exists in the runtime's dispatch table, but no tested source construct makes the compiler emit it.

Handler: 0x6610656F, shared by 2 dispatch slots (real opcode #46). This is a duplicate slot of (0,2F) FFree1Str. Other slots: (0,2F) FFree1Str.

Slots sharing this handler

(0,0x2F) FFree1Str

Description: none. Handler 0x6610656F, dispatch slot 0x66107B7C, modOpcodes line 717.

FFree1Var

(0,0x35)emittedprimary of 2handler #52Stack & frameinferred_corpus1024 corpus hits
Free heap-backed frame slot(s): FFree1Var.

Releases reference-counted resources (BSTRs, Variants, object refs) held in one or more frame slots. Variable-length variants (FFreeVar, FFreeStr, FFreeAd) consume a count byte followed by that many 2-byte slot offsets.

Inserted by the compiler at procedure exits and after temporary expressions to balance lifetime of allocated values.

When the compiler emits it

Emitted at every procedure cleanup point and after any expression that produced a heap value into a tracked slot.

VB6 source (verified: compiles to this slot)
Public Sub Main()
  TakeVar True
End Sub

Sub TakeVar(v As Variant)
End Sub
Encoding, evidence and notes
Encoding

Encoding: 35, then 2 operand byte(s); total instruction length 3 byte(s).
vbdec template: %a
Operands:

  1. %a: local_var_ref, 2 byte(s). signed 16-bit offset from the procedure frame pointer (EBP). Negative = local/temporary (vbdec var_XX, XX = -offset), positive = argument (arg_XX).

Observed: 35 5CFF FFree1Var var_A4

Examples
Form1.LoadPlugins @ 0x4644FC | 464534    35 54FF               FFree1Var var_AC
Form1.LoadPlugins @ 0x4644FC | 464691    35 54FF               FFree1Var var_AC
Form1.LoadPlugins @ 0x4644FC | 464745    35 54FF               FFree1Var var_AC

1024 occurrence(s) in PDFStreamDumper.

Evidence and notes

Emitted by VB6 SP6 (P-code): yes. Minimal probe: probes\op\0_35_FFree1Var.

Handler: 0x661065A2, shared by 2 dispatch slots (real opcode #52). This is the primary slot. Other slots: (3,99) FFree1Var.

Corpus: 1024 occurrence(s) in PDFStreamDumper_p.exe.

Slots sharing this handler

(3,0x99) FFree1Var

Description: draft, by claude-opus-4.7. Handler 0x661065A2, dispatch slot 0x66106DE8, modOpcodes line 719.

FFree1Var

(3,0x99)not emitteddup of (0,35)handler #52Stack & frameconfirmed_handler
Same handler as (0,0x35) FFree1Var: Free heap-backed frame slot(s): FFree1Var.
Encoding, evidence and notes
Encoding

Encoding: FD 99 (lead byte FD selects table 3), then 2 operand byte(s); total instruction length 4 byte(s).
vbdec template: %a
Operands:

  1. %a: local_var_ref, 2 byte(s). signed 16-bit offset from the procedure frame pointer (EBP). Negative = local/temporary (vbdec var_XX, XX = -offset), positive = argument (arg_XX).
Evidence and notes

Emitted by VB6 SP6 (P-code): not observed in about 3,070 probe programs. The slot exists in the runtime's dispatch table, but no tested source construct makes the compiler emit it.

Handler: 0x661065A2, shared by 2 dispatch slots (real opcode #52). This is a duplicate slot of (0,35) FFree1Var. Other slots: (0,35) FFree1Var.

Slots sharing this handler

(0,0x35) FFree1Var

Description: none. Handler 0x661065A2, dispatch slot 0x66107B78, modOpcodes line 720.

FFreeAd

(0,0x29)emittedprimary of 2handler #40Stack & frameinferred_corpus408 corpus hits
Free heap-backed frame slot(s): FFreeAd.

Releases reference-counted resources (BSTRs, Variants, object refs) held in one or more frame slots. Variable-length variants (FFreeVar, FFreeStr, FFreeAd) consume a count byte followed by that many 2-byte slot offsets.

Inserted by the compiler at procedure exits and after temporary expressions to balance lifetime of allocated values.

When the compiler emits it

Emitted at every procedure cleanup point and after any expression that produced a heap value into a tracked slot.

VB6 source (verified: compiles to this slot)
Private Type TR
  o As Object
  u As IUnknown
  v As Variant
End Type
Dim gr As TR

Public Sub Main()
  Dim o As Object
  Set gr.u = F()
End Sub

Function F() As Object
End Function
Encoding, evidence and notes
Encoding

Encoding: 29, then a variable-length operand block (the first operand gives its byte count).
Operands: none. All inputs come from the evaluation stack or the frame.
Observed: 29 0400 [4 bytes] FFreeAd var_8C var_90

Examples
Form1.LoadPlugins @ 0x4644FC | 464576    29 0600 [6 bytes]     FFreeAd var_98 var_150 var_154
Form1.RegisterPlugin @ 0x44CB20 | 44CB63    29 0400 [4 bytes]     FFreeAd var_9C var_A8
Form1.RegisterPlugin @ 0x44CB20 | 44CB8A    29 0400 [4 bytes]     FFreeAd var_9C var_A4

408 occurrence(s) in PDFStreamDumper.

Evidence and notes

Emitted by VB6 SP6 (P-code): yes. Minimal probe: probes\op\0_29_FFreeAd.

Handler: 0x661065FC, shared by 2 dispatch slots (real opcode #40). This is the primary slot. Other slots: (4,B4) FFreeAd.

Corpus: 408 occurrence(s) in PDFStreamDumper_p.exe.

Slots sharing this handler

(4,0xB4) FFreeAd

Description: draft, by claude-opus-4.7. Handler 0x661065FC, dispatch slot 0x66106DB8, modOpcodes line 727.

FFreeAd

(4,0xB4)not emitteddup of (0,29)handler #40Stack & frameconfirmed_handler
Same handler as (0,0x29) FFreeAd: Free heap-backed frame slot(s): FFreeAd.
Encoding, evidence and notes
Encoding

Encoding: FE B4 (lead byte FE selects table 4), then a variable-length operand block (the first operand gives its byte count).
Operands: none. All inputs come from the evaluation stack or the frame.

Evidence and notes

Emitted by VB6 SP6 (P-code): not observed in about 3,070 probe programs. The slot exists in the runtime's dispatch table, but no tested source construct makes the compiler emit it.

Handler: 0x661065FC, shared by 2 dispatch slots (real opcode #40). This is a duplicate slot of (0,29) FFreeAd. Other slots: (0,29) FFreeAd.

Slots sharing this handler

(0,0x29) FFreeAd

Description: none. Handler 0x661065FC, dispatch slot 0x66107FE4, modOpcodes line 728.

FFreeStr

(0,0x32)emittedprimary of 2handler #49Stack & frameinferred_corpus365 corpus hits
Free heap-backed frame slot(s): FFreeStr.

Releases reference-counted resources (BSTRs, Variants, object refs) held in one or more frame slots. Variable-length variants (FFreeVar, FFreeStr, FFreeAd) consume a count byte followed by that many 2-byte slot offsets.

Inserted by the compiler at procedure exits and after temporary expressions to balance lifetime of allocated values.

When the compiler emits it

Emitted at every procedure cleanup point and after any expression that produced a heap value into a tracked slot.

VB6 source (verified: compiles to this slot)
Private Declare Function P Lib "x.dll" () As String

Public Sub Main()
  Dim s As String
  s = P()
End Sub
Encoding, evidence and notes
Encoding

Encoding: 32, then a variable-length operand block (the first operand gives its byte count).
Operands: none. All inputs come from the evaluation stack or the frame.
Observed: 32 0400 [4 bytes] FFreeStr var_8C var_90

Examples
Form1.LoadPlugins @ 0x4644FC | 464737    32 0800 [8 bytes]     FFreeStr var_9C var_16C var_170 var_174
Form1.LoadPlugins @ 0x4644FC | 4647E8    32 0400 [4 bytes]     FFreeStr var_16C var_9C
Form1.RegisterPlugin @ 0x44CB20 | 44CBF6    32 0800 [8 bytes]     FFreeStr var_AC var_B0 var_B4 var_B8

365 occurrence(s) in PDFStreamDumper.

Evidence and notes

Emitted by VB6 SP6 (P-code): yes. Minimal probe: probes\op\0_32_FFreeStr.

Handler: 0x66106598, shared by 2 dispatch slots (real opcode #49). This is the primary slot. Other slots: (4,B3) FFreeStr.

Corpus: 365 occurrence(s) in PDFStreamDumper_p.exe.

Slots sharing this handler

(4,0xB3) FFreeStr

Description: draft, by claude-opus-4.7. Handler 0x66106598, dispatch slot 0x66106DDC, modOpcodes line 724.

FFreeStr

(4,0xB3)not emitteddup of (0,32)handler #49Stack & frameconfirmed_handler
Same handler as (0,0x32) FFreeStr: Free heap-backed frame slot(s): FFreeStr.
Encoding, evidence and notes
Encoding

Encoding: FE B3 (lead byte FE selects table 4), then a variable-length operand block (the first operand gives its byte count).
Operands: none. All inputs come from the evaluation stack or the frame.

Evidence and notes

Emitted by VB6 SP6 (P-code): not observed in about 3,070 probe programs. The slot exists in the runtime's dispatch table, but no tested source construct makes the compiler emit it.

Handler: 0x66106598, shared by 2 dispatch slots (real opcode #49). This is a duplicate slot of (0,32) FFreeStr. Other slots: (0,32) FFreeStr.

Slots sharing this handler

(0,0x32) FFreeStr

Description: none. Handler 0x66106598, dispatch slot 0x66107FE0, modOpcodes line 725.

FFreeVar

(0,0x36)emittedprimary of 2handler #53Stack & frameinferred_corpus856 corpus hits
Free heap-backed frame slot(s): FFreeVar.

Releases reference-counted resources (BSTRs, Variants, object refs) held in one or more frame slots. Variable-length variants (FFreeVar, FFreeStr, FFreeAd) consume a count byte followed by that many 2-byte slot offsets.

Inserted by the compiler at procedure exits and after temporary expressions to balance lifetime of allocated values.

When the compiler emits it

Emitted at every procedure cleanup point and after any expression that produced a heap value into a tracked slot.

VB6 source (verified: compiles to this slot)
Public Sub Main()
  Dim o As Object, v As Variant
  v = o.A.B.C
End Sub
Encoding, evidence and notes
Encoding

Encoding: 36, then a variable-length operand block (the first operand gives its byte count).
Operands: none. All inputs come from the evaluation stack or the frame.
Observed: 36 0400 [4 bytes] FFreeVar var_A8 var_B8

Examples
Form1.LoadPlugins @ 0x4644FC | 46457F    36 0C00 [12 bytes]    FFreeVar var_AC var_CC var_EC var_10C var_12C var_14C
Form1.LoadPlugins @ 0x4644FC | 4645D6    36 0400 [4 bytes]     FFreeVar var_AC var_CC
Form1.LoadPlugins @ 0x4644FC | 4646DD    36 0800 [8 bytes]     FFreeVar var_AC var_CC var_EC var_10C

856 occurrence(s) in PDFStreamDumper.

Evidence and notes

Emitted by VB6 SP6 (P-code): yes. Minimal probe: probes\op\0_36_FFreeVar.

Handler: 0x661065C4, shared by 2 dispatch slots (real opcode #53). This is the primary slot. Other slots: (4,B2) FFreeVar.

Corpus: 856 occurrence(s) in PDFStreamDumper_p.exe.

Slots sharing this handler

(4,0xB2) FFreeVar

Description: draft, by claude-opus-4.7. Handler 0x661065C4, dispatch slot 0x66106DEC, modOpcodes line 722.

FFreeVar

(4,0xB2)not emitteddup of (0,36)handler #53Stack & frameconfirmed_handler
Same handler as (0,0x36) FFreeVar: Free heap-backed frame slot(s): FFreeVar.
Encoding, evidence and notes
Encoding

Encoding: FE B2 (lead byte FE selects table 4), then a variable-length operand block (the first operand gives its byte count).
Operands: none. All inputs come from the evaluation stack or the frame.

Evidence and notes

Emitted by VB6 SP6 (P-code): not observed in about 3,070 probe programs. The slot exists in the runtime's dispatch table, but no tested source construct makes the compiler emit it.

Handler: 0x661065C4, shared by 2 dispatch slots (real opcode #53). This is a duplicate slot of (0,36) FFreeVar. Other slots: (0,36) FFreeVar.

Slots sharing this handler

(0,0x36) FFreeVar

Description: none. Handler 0x661065C4, dispatch slot 0x66107FDC, modOpcodes line 723.

FreeAdNoPop

(4,0xCE)not emittedhandler #690Stack & frameconfirmed_msdocs
Free heap-backed frame slot(s): FreeAdNoPop.

Releases reference-counted resources (BSTRs, Variants, object refs) held in one or more frame slots. Variable-length variants (FFreeVar, FFreeStr, FFreeAd) consume a count byte followed by that many 2-byte slot offsets.

Inserted by the compiler at procedure exits and after temporary expressions to balance lifetime of allocated values.

When the compiler emits it

Emitted at every procedure cleanup point and after any expression that produced a heap value into a tracked slot.

Encoding, evidence and notes
Encoding

Encoding: FE CE (lead byte FE selects table 4), then 0 operand byte(s); total instruction length 2 byte(s).
Operands: none. All inputs come from the evaluation stack or the frame.

Evidence and notes

Emitted by VB6 SP6 (P-code): not observed in about 3,070 probe programs. The slot exists in the runtime's dispatch table, but no tested source construct makes the compiler emit it.

Handler: 0x6610B7E0, unique to this slot (real opcode #690).

Description: draft, by claude-opus-4.7. Handler 0x6610B7E0, dispatch slot 0x6610804C, modOpcodes line 734.

FreeStrNoPop

(4,0xCC)not emittedhandler #688Stack & frameconfirmed_msdocs
Free heap-backed frame slot(s): FreeStrNoPop.

Releases reference-counted resources (BSTRs, Variants, object refs) held in one or more frame slots. Variable-length variants (FFreeVar, FFreeStr, FFreeAd) consume a count byte followed by that many 2-byte slot offsets.

Inserted by the compiler at procedure exits and after temporary expressions to balance lifetime of allocated values.

When the compiler emits it

Emitted at every procedure cleanup point and after any expression that produced a heap value into a tracked slot.

Encoding, evidence and notes
Encoding

Encoding: FE CC (lead byte FE selects table 4), then 0 operand byte(s); total instruction length 2 byte(s).
Operands: none. All inputs come from the evaluation stack or the frame.

Evidence and notes

Emitted by VB6 SP6 (P-code): not observed in about 3,070 probe programs. The slot exists in the runtime's dispatch table, but no tested source construct makes the compiler emit it.

Handler: 0x6610B7BF, unique to this slot (real opcode #688).

Description: draft, by claude-opus-4.7. Handler 0x6610B7BF, dispatch slot 0x66108044, modOpcodes line 732.

FreeVarNoPop

(4,0xCD)not emittedhandler #689Stack & frameconfirmed_msdocs
Free heap-backed frame slot(s): FreeVarNoPop.

Releases reference-counted resources (BSTRs, Variants, object refs) held in one or more frame slots. Variable-length variants (FFreeVar, FFreeStr, FFreeAd) consume a count byte followed by that many 2-byte slot offsets.

Inserted by the compiler at procedure exits and after temporary expressions to balance lifetime of allocated values.

When the compiler emits it

Emitted at every procedure cleanup point and after any expression that produced a heap value into a tracked slot.

Encoding, evidence and notes
Encoding

Encoding: FE CD (lead byte FE selects table 4), then 0 operand byte(s); total instruction length 2 byte(s).
Operands: none. All inputs come from the evaluation stack or the frame.

Evidence and notes

Emitted by VB6 SP6 (P-code): not observed in about 3,070 probe programs. The slot exists in the runtime's dispatch table, but no tested source construct makes the compiler emit it.

Handler: 0x6610B801, unique to this slot (real opcode #689).

Description: draft, by claude-opus-4.7. Handler 0x6610B801, dispatch slot 0x66108048, modOpcodes line 733.

FMem_Load

Frame+offset member load Prefix: F + Mem

FMemLdCy

(0,0x95)emittedprimary of 3handler #146Currencyinferred_corpus
Load Currency from a field reached through a pointer held in a frame slot.

Reads a Currency (scaled 64-bit integer), and pushes it from a field reached through a pointer held in a frame slot.

Stack: [...] -> [..., v:Cy]

Operands: %a: frame slot holding the base pointer; %2: byte offset added to it.

Two observed uses: (1) ActiveX DLL/EXE module variables, where the frame slot holds the per-thread data block and vbdec shows [this+off]; (2) fields of a UDT passed ByRef, where the frame slot is the argument ([arg_C+off]).

When the compiler emits it

Emitted for reads of a field reached through a pointer held in a frame slot when the value is a Currency. The storage class selects the prefix (FMem); the value class selects the suffix (Cy).

VB6 source (verified: compiles to this slot)
Dim g As Currency

Public Sub Main()
  Dim b As Currency
  b = g
End Sub
Encoding, evidence and notes
Encoding

Encoding: 95, then 4 operand byte(s); total instruction length 5 byte(s).
vbdec template: [%a+%2]
Operands:

  1. %a: local_var_ref, 2 byte(s). signed 16-bit offset from the procedure frame pointer (EBP). Negative = local/temporary (vbdec var_XX, XX = -offset), positive = argument (arg_XX).
  2. %2 (+): immediate_word, 2 byte(s). 16-bit immediate.

Observed: 95 08000000 FMemLdCy [this+0x0]

Examples
95 08000000  FMemLdCy [this+0x0]

From the Phase 4 probe (VB6 SP6, P-code).

Evidence and notes

Emitted by VB6 SP6 (P-code): yes. Minimal probe: probes\op\0_95_FMemLdCy.

Handler: 0x6610AF41, shared by 3 dispatch slots (real opcode #146). This is the primary slot. Other slots: (3,D4) FMemLdR8, (3,D5) FMemLdR8.

Family note: Phase 4: in ActiveX DLL/EXE projects, .bas module variables are per-thread. Every access goes through the per-thread data block whose pointer sits in a frame slot, and vbdec shows it as [this+off]. This family (and FMem_Store) is how such globals are read and written. Standard-EXE globals use ImpAd* instead.

Check of vb6_source_eq example: verified: compiles and emits this slot.

Example from the description
Dim g As Currency

Public Sub Main()
  Dim b As Currency
  b = g
End Sub
Slots sharing this handler

(3,0xD4) FMemLdR8, (3,0xD5) FMemLdR8

Description: draft, by claude-opus-5-5. Handler 0x6610AF41, dispatch slot 0x66106F68, modOpcodes line 1048.

FMemLdFPR4

(0,0x96)emittedprimary of 2handler #147Floating pointinferred_corpus
Load Single from a field reached through a pointer held in a frame slot.

Reads a Single, moved through the FPU (fld/fstp dword), and pushes it from a field reached through a pointer held in a frame slot.

Stack: [...] -> [..., v:FPR4]

Operands: %a: frame slot holding the base pointer; %2: byte offset added to it.

Two observed uses: (1) ActiveX DLL/EXE module variables, where the frame slot holds the per-thread data block and vbdec shows [this+off]; (2) fields of a UDT passed ByRef, where the frame slot is the argument ([arg_C+off]).

When the compiler emits it

Emitted for reads of a field reached through a pointer held in a frame slot when the value is a Single. The storage class selects the prefix (FMem); the value class selects the suffix (FPR4).

VB6 source (verified: compiles to this slot)
Dim g As Single

Public Sub Main()
  Dim b As Single
  b = g
End Sub
Encoding, evidence and notes
Encoding

Encoding: 96, then 4 operand byte(s); total instruction length 5 byte(s).
vbdec template: [%a+%2]
Operands:

  1. %a: local_var_ref, 2 byte(s). signed 16-bit offset from the procedure frame pointer (EBP). Negative = local/temporary (vbdec var_XX, XX = -offset), positive = argument (arg_XX).
  2. %2 (+): immediate_word, 2 byte(s). 16-bit immediate.

Observed: 96 08000000 FMemLdFPR4 [this+0x0]

Examples
96 08000000  FMemLdFPR4 [this+0x0]

From the Phase 4 probe (VB6 SP6, P-code).

Evidence and notes

Emitted by VB6 SP6 (P-code): yes. Minimal probe: probes\op\0_96_FMemLdFPR4.

Handler: 0x6610AF65, shared by 2 dispatch slots (real opcode #147). This is the primary slot. Other slots: (3,D9) FMemLdFPR4.

Family note: Phase 4: in ActiveX DLL/EXE projects, .bas module variables are per-thread. Every access goes through the per-thread data block whose pointer sits in a frame slot, and vbdec shows it as [this+off]. This family (and FMem_Store) is how such globals are read and written. Standard-EXE globals use ImpAd* instead.

Check of vb6_source_eq example: verified: compiles and emits this slot.

Example from the description
Dim g As Single

Public Sub Main()
  Dim b As Single
  b = g
End Sub
Slots sharing this handler

(3,0xD9) FMemLdFPR4

Description: draft, by claude-opus-5-5. Handler 0x6610AF65, dispatch slot 0x66106F6C, modOpcodes line 1049.

FMemLdFPR4

(3,0xD9)not emitteddup of (0,96)handler #147Floating pointconfirmed_handler
Same handler as (0,0x96) FMemLdFPR4: Load Single from a field reached through a pointer held in a frame slot.
Encoding, evidence and notes
Encoding

Encoding: FD D9 (lead byte FD selects table 3), then 4 operand byte(s); total instruction length 6 byte(s).
vbdec template: [%a+%2]
Operands:

  1. %a: local_var_ref, 2 byte(s). signed 16-bit offset from the procedure frame pointer (EBP). Negative = local/temporary (vbdec var_XX, XX = -offset), positive = argument (arg_XX).
  2. %2 (+): immediate_word, 2 byte(s). 16-bit immediate.
Evidence and notes

Emitted by VB6 SP6 (P-code): not observed in about 3,070 probe programs. The slot exists in the runtime's dispatch table, but no tested source construct makes the compiler emit it.

Handler: 0x6610AF65, shared by 2 dispatch slots (real opcode #147). This is a duplicate slot of (0,96) FMemLdFPR4. Other slots: (0,96) FMemLdFPR4.

Family note: Phase 4: in ActiveX DLL/EXE projects, .bas module variables are per-thread. Every access goes through the per-thread data block whose pointer sits in a frame slot, and vbdec shows it as [this+off]. This family (and FMem_Store) is how such globals are read and written. Standard-EXE globals use ImpAd* instead.

Slots sharing this handler

(0,0x96) FMemLdFPR4

Description: none. Handler 0x6610AF65, dispatch slot 0x66107C78, modOpcodes line 1065.

FMemLdFPR8

(0,0x97)emittedprimary of 2handler #148Floating pointinferred_corpus
Load Double/Date from a field reached through a pointer held in a frame slot.

Reads a Double or Date, moved through the FPU (fld/fstp qword), and pushes it from a field reached through a pointer held in a frame slot.

Stack: [...] -> [..., v:FPR8]

Operands: %a: frame slot holding the base pointer; %2: byte offset added to it.

Two observed uses: (1) ActiveX DLL/EXE module variables, where the frame slot holds the per-thread data block and vbdec shows [this+off]; (2) fields of a UDT passed ByRef, where the frame slot is the argument ([arg_C+off]).

When the compiler emits it

Emitted for reads of a field reached through a pointer held in a frame slot when the value is a Double/Date. The storage class selects the prefix (FMem); the value class selects the suffix (FPR8).

VB6 source (verified: compiles to this slot)
Dim g As Date

Public Sub Main()
  Dim b As Date
  b = g
End Sub
Encoding, evidence and notes
Encoding

Encoding: 97, then 4 operand byte(s); total instruction length 5 byte(s).
vbdec template: [%a+%2]
Operands:

  1. %a: local_var_ref, 2 byte(s). signed 16-bit offset from the procedure frame pointer (EBP). Negative = local/temporary (vbdec var_XX, XX = -offset), positive = argument (arg_XX).
  2. %2 (+): immediate_word, 2 byte(s). 16-bit immediate.

Observed: 97 08000000 FMemLdFPR8 [this+0x0]

Examples
97 08000000  FMemLdFPR8 [this+0x0]

From the Phase 4 probe (VB6 SP6, P-code).

Evidence and notes

Emitted by VB6 SP6 (P-code): yes. Minimal probe: probes\op\0_97_FMemLdFPR8.

Handler: 0x6610AF86, shared by 2 dispatch slots (real opcode #148). This is the primary slot. Other slots: (3,DA) FMemLdFPR8.

Family note: Phase 4: in ActiveX DLL/EXE projects, .bas module variables are per-thread. Every access goes through the per-thread data block whose pointer sits in a frame slot, and vbdec shows it as [this+off]. This family (and FMem_Store) is how such globals are read and written. Standard-EXE globals use ImpAd* instead.

Check of vb6_source_eq example: verified: compiles and emits this slot.

Example from the description
Dim g As Date

Public Sub Main()
  Dim b As Date
  b = g
End Sub
Slots sharing this handler

(3,0xDA) FMemLdFPR8

Description: draft, by claude-opus-5-5. Handler 0x6610AF86, dispatch slot 0x66106F70, modOpcodes line 1050.

FMemLdFPR8

(3,0xDA)not emitteddup of (0,97)handler #148Floating pointconfirmed_handler
Same handler as (0,0x97) FMemLdFPR8: Load Double/Date from a field reached through a pointer held in a frame slot.
Encoding, evidence and notes
Encoding

Encoding: FD DA (lead byte FD selects table 3), then 4 operand byte(s); total instruction length 6 byte(s).
vbdec template: [%a+%2]
Operands:

  1. %a: local_var_ref, 2 byte(s). signed 16-bit offset from the procedure frame pointer (EBP). Negative = local/temporary (vbdec var_XX, XX = -offset), positive = argument (arg_XX).
  2. %2 (+): immediate_word, 2 byte(s). 16-bit immediate.
Evidence and notes

Emitted by VB6 SP6 (P-code): not observed in about 3,070 probe programs. The slot exists in the runtime's dispatch table, but no tested source construct makes the compiler emit it.

Handler: 0x6610AF86, shared by 2 dispatch slots (real opcode #148). This is a duplicate slot of (0,97) FMemLdFPR8. Other slots: (0,97) FMemLdFPR8.

Family note: Phase 4: in ActiveX DLL/EXE projects, .bas module variables are per-thread. Every access goes through the per-thread data block whose pointer sits in a frame slot, and vbdec shows it as [this+off]. This family (and FMem_Store) is how such globals are read and written. Standard-EXE globals use ImpAd* instead.

Slots sharing this handler

(0,0x97) FMemLdFPR8

Description: none. Handler 0x6610AF86, dispatch slot 0x66107C7C, modOpcodes line 1066.

FMemLdI2

(0,0x93)emittedprimary of 2handler #144Integerinferred_corpus2 corpus hits
Load a 16-bit signed integer (VB6 Integer) via [frame[%a] + offset] (FMemLdI2).

First dereferences a frame slot (typically holding an object pointer) and then reads a member at compile-time-known offset. Combined frame-load + member-load step.

When the compiler emits it

Emitted when reading a field of an object referenced by a local variable.

VB6 source (verified: compiles to this slot)
Dim g As Boolean

Public Sub Main()
  Dim b As Boolean
  b = g
End Sub
Encoding, evidence and notes
Encoding

Encoding: 93, then 4 operand byte(s); total instruction length 5 byte(s).
vbdec template: [%a+%2]
Operands:

  1. %a: local_var_ref, 2 byte(s). signed 16-bit offset from the procedure frame pointer (EBP). Negative = local/temporary (vbdec var_XX, XX = -offset), positive = argument (arg_XX).
  2. %2 (+): immediate_word, 2 byte(s). 16-bit immediate.

Observed: 93 08000000 FMemLdI2 [this+0x0]

Examples
b64.Proc_464C2C @ 0x464C2C | 464C2C    93 08003800           FMemLdI2 [this+0x38]
b64.Proc_469B0C @ 0x469B0C | 469B0C    93 08003800           FMemLdI2 [this+0x38]

2 occurrence(s) in PDFStreamDumper.

Evidence and notes

Emitted by VB6 SP6 (P-code): yes. Minimal probe: probes\op\0_93_FMemLdI2.

Handler: 0x66106017, shared by 2 dispatch slots (real opcode #144). This is the primary slot. Other slots: (3,D1) FMemLdI2.

Family note: Phase 4: in ActiveX DLL/EXE projects, .bas module variables are per-thread. Every access goes through the per-thread data block whose pointer sits in a frame slot, and vbdec shows it as [this+off]. This family (and FMem_Store) is how such globals are read and written. Standard-EXE globals use ImpAd* instead.

Corpus: 2 occurrence(s) in PDFStreamDumper_p.exe.

Slots sharing this handler

(3,0xD1) FMemLdI2

Description: draft, by claude-opus-4.7. Handler 0x66106017, dispatch slot 0x66106F60, modOpcodes line 1046.

FMemLdI2

(3,0xD1)not emitteddup of (0,93)handler #144Integerconfirmed_handler
Same handler as (0,0x93) FMemLdI2: Load a 16-bit signed integer (VB6 Integer) via [frame[%a] + offset] (FMemLdI2).
Encoding, evidence and notes
Encoding

Encoding: FD D1 (lead byte FD selects table 3), then 4 operand byte(s); total instruction length 6 byte(s).
vbdec template: [%a+%2]
Operands:

  1. %a: local_var_ref, 2 byte(s). signed 16-bit offset from the procedure frame pointer (EBP). Negative = local/temporary (vbdec var_XX, XX = -offset), positive = argument (arg_XX).
  2. %2 (+): immediate_word, 2 byte(s). 16-bit immediate.
Evidence and notes

Emitted by VB6 SP6 (P-code): not observed in about 3,070 probe programs. The slot exists in the runtime's dispatch table, but no tested source construct makes the compiler emit it.

Handler: 0x66106017, shared by 2 dispatch slots (real opcode #144). This is a duplicate slot of (0,93) FMemLdI2. Other slots: (0,93) FMemLdI2.

Family note: Phase 4: in ActiveX DLL/EXE projects, .bas module variables are per-thread. Every access goes through the per-thread data block whose pointer sits in a frame slot, and vbdec shows it as [this+off]. This family (and FMem_Store) is how such globals are read and written. Standard-EXE globals use ImpAd* instead.

Slots sharing this handler

(0,0x93) FMemLdI2

Description: none. Handler 0x66106017, dispatch slot 0x66107C58, modOpcodes line 1058.

FMemLdPr

(0,0x5F)emittedprimary of 2handler #92Object / COMinferred_corpus
Load object pointer to pr from a field reached through a pointer held in a frame slot.

Reads an object/structure pointer, which is loaded into the interpreter's cached object register (pr, [ebp-4Ch]) for following Mem* opcodes, and pushes it from a field reached through a pointer held in a frame slot.

Stack: [...] -> [..., v:Pr]

Operands: %a: frame slot holding the base pointer; %2: byte offset added to it.

Two observed uses: (1) ActiveX DLL/EXE module variables, where the frame slot holds the per-thread data block and vbdec shows [this+off]; (2) fields of a UDT passed ByRef, where the frame slot is the argument ([arg_C+off]).

When the compiler emits it

Emitted for reads of a field reached through a pointer held in a frame slot when the value is a object pointer to pr. The storage class selects the prefix (FMem); the value class selects the suffix (Pr).

VB6 source (verified: compiles to this slot)
Private Type TR
  c As Collection
End Type
Dim gr As TR

Public Sub Main()
  Dim n As Long
  n = gr.c.Count
End Sub
Encoding, evidence and notes
Encoding

Encoding: 5F, then 4 operand byte(s); total instruction length 5 byte(s).
vbdec template: [%a+%2]
Operands:

  1. %a: local_var_ref, 2 byte(s). signed 16-bit offset from the procedure frame pointer (EBP). Negative = local/temporary (vbdec var_XX, XX = -offset), positive = argument (arg_XX).
  2. %2 (+): immediate_word, 2 byte(s). 16-bit immediate.

Observed: 5F 08000000 FMemLdPr [this+0x0]

Examples
5F 08000000  FMemLdPr [this+0x0]

From the Phase 4 probe (VB6 SP6, P-code).

Evidence and notes

Emitted by VB6 SP6 (P-code): yes. Minimal probe: probes\op\0_5F_FMemLdPr.

Handler: 0x661062D8, shared by 2 dispatch slots (real opcode #92). This is the primary slot. Other slots: (3,DB) FMemLdPr.

Family note: Phase 4: in ActiveX DLL/EXE projects, .bas module variables are per-thread. Every access goes through the per-thread data block whose pointer sits in a frame slot, and vbdec shows it as [this+off]. This family (and FMem_Store) is how such globals are read and written. Standard-EXE globals use ImpAd* instead.

Check of vb6_source_eq example: verified: compiles and emits this slot.

Example from the description
Private Type TR
  c As Collection
End Type
Dim gr As TR

Public Sub Main()
  Dim n As Long
  n = gr.c.Count
End Sub
Slots sharing this handler

(3,0xDB) FMemLdPr

Description: draft, by claude-opus-5-5. Handler 0x661062D8, dispatch slot 0x66106E90, modOpcodes line 1056.

FMemLdPr

(3,0xDB)not emitteddup of (0,5F)handler #92Object / COMconfirmed_handler
Same handler as (0,0x5F) FMemLdPr: Load object pointer to pr from a field reached through a pointer held in a frame slot.
Encoding, evidence and notes
Encoding

Encoding: FD DB (lead byte FD selects table 3), then 4 operand byte(s); total instruction length 6 byte(s).
vbdec template: [%a+%2]
Operands:

  1. %a: local_var_ref, 2 byte(s). signed 16-bit offset from the procedure frame pointer (EBP). Negative = local/temporary (vbdec var_XX, XX = -offset), positive = argument (arg_XX).
  2. %2 (+): immediate_word, 2 byte(s). 16-bit immediate.
Evidence and notes

Emitted by VB6 SP6 (P-code): not observed in about 3,070 probe programs. The slot exists in the runtime's dispatch table, but no tested source construct makes the compiler emit it.

Handler: 0x661062D8, shared by 2 dispatch slots (real opcode #92). This is a duplicate slot of (0,5F) FMemLdPr. Other slots: (0,5F) FMemLdPr.

Family note: Phase 4: in ActiveX DLL/EXE projects, .bas module variables are per-thread. Every access goes through the per-thread data block whose pointer sits in a frame slot, and vbdec shows it as [this+off]. This family (and FMem_Store) is how such globals are read and written. Standard-EXE globals use ImpAd* instead.

Slots sharing this handler

(0,0x5F) FMemLdPr

Description: none. Handler 0x661062D8, dispatch slot 0x66107C80, modOpcodes line 1067.

FMemLdR4

(0,0x94)emittedprimary of 5handler #145Integerinferred_corpus29 corpus hits
Load a 4-byte value through a pointer held in a frame slot plus offset (FMem); not a Single-specific opcode.

Reads the base pointer from frame slot %a, adds the 16-bit offset %2 and pushes the 32-bit value found there.

Stack: [...] -> [..., v:R4]

When the compiler emits it

Emitted for 4-byte reads (Long, Single bit patterns, String/Object pointers) of: module variables in ActiveX DLL/EXE projects (per-thread data, vbdec [this+off]), fields of a ByRef UDT parameter, and fields of a UDT inside a With block (the block's address is kept in a frame temporary).

VB6 source (verified: compiles to this slot)
Dim g As Long

Public Sub Main()
  Dim b As Long
  b = g
End Sub
Encoding, evidence and notes
Encoding

Encoding: 94, then 4 operand byte(s); total instruction length 5 byte(s).
vbdec template: [%a+%2]
Operands:

  1. %a: local_var_ref, 2 byte(s). signed 16-bit offset from the procedure frame pointer (EBP). Negative = local/temporary (vbdec var_XX, XX = -offset), positive = argument (arg_XX).
  2. %2 (+): immediate_word, 2 byte(s). 16-bit immediate.

Observed: 94 08000000 FMemLdR4 [this+0x0]

Examples
modZLIB.Proc_43E6AC @ 0x43E6AC | 43E6AC    94 08000400           FMemLdR4 [this+0x4]
modZLIB.Proc_43E6AC @ 0x43E6AC | 43E6C4    94 08000400           FMemLdR4 [this+0x4]
modZLIB.Proc_43E804 @ 0x43E804 | 43E804    94 08000000           FMemLdR4 [this+0x0]

29 occurrence(s) in PDFStreamDumper.

Evidence and notes

Emitted by VB6 SP6 (P-code): yes. Minimal probe: probes\op\0_94_FMemLdR4.

Handler: 0x6610603E, shared by 5 dispatch slots (real opcode #145). This is the primary slot. Other slots: (3,D2) FMemLdR4, (3,D3) FMemLdR4, (3,D7) FMemLdR4, (3,D8) FMemLdR4.

Family note: Phase 4: in ActiveX DLL/EXE projects, .bas module variables are per-thread. Every access goes through the per-thread data block whose pointer sits in a frame slot, and vbdec shows it as [this+off]. This family (and FMem_Store) is how such globals are read and written. Standard-EXE globals use ImpAd* instead.

Check of vb6_source_eq example: verified: compiles and emits this slot.

Corpus: 29 occurrence(s) in PDFStreamDumper_p.exe.

Example from the description
Private Type TR
  a As Long
  b As Long
End Type
Sub Main()
  Dim r As TR, n As Long
  With r
    n = .b
  End With
End Sub
Slots sharing this handler

(3,0xD2) FMemLdR4, (3,0xD3) FMemLdR4, (3,0xD7) FMemLdR4, (3,0xD8) FMemLdR4

Description: draft, by claude-opus-5-5. Handler 0x6610603E, dispatch slot 0x66106F64, modOpcodes line 1047.

FMemLdR4

(3,0xD2)not emitteddup of (0,94)handler #145Integerconfirmed_handler
Same handler as (0,0x94) FMemLdR4: Load a 4-byte value through a pointer held in a frame slot plus offset (FMem); not a Single-specific opcode.
Encoding, evidence and notes
Encoding

Encoding: FD D2 (lead byte FD selects table 3), then 4 operand byte(s); total instruction length 6 byte(s).
vbdec template: [%a+%2]
Operands:

  1. %a: local_var_ref, 2 byte(s). signed 16-bit offset from the procedure frame pointer (EBP). Negative = local/temporary (vbdec var_XX, XX = -offset), positive = argument (arg_XX).
  2. %2 (+): immediate_word, 2 byte(s). 16-bit immediate.
Evidence and notes

Emitted by VB6 SP6 (P-code): not observed in about 3,070 probe programs. The slot exists in the runtime's dispatch table, but no tested source construct makes the compiler emit it.

Handler: 0x6610603E, shared by 5 dispatch slots (real opcode #145). This is a duplicate slot of (0,94) FMemLdR4. Other slots: (0,94) FMemLdR4, (3,D3) FMemLdR4, (3,D7) FMemLdR4, (3,D8) FMemLdR4.

Family note: Phase 4: in ActiveX DLL/EXE projects, .bas module variables are per-thread. Every access goes through the per-thread data block whose pointer sits in a frame slot, and vbdec shows it as [this+off]. This family (and FMem_Store) is how such globals are read and written. Standard-EXE globals use ImpAd* instead.

Slots sharing this handler

(0,0x94) FMemLdR4, (3,0xD3) FMemLdR4, (3,0xD7) FMemLdR4, (3,0xD8) FMemLdR4

Description: none. Handler 0x6610603E, dispatch slot 0x66107C5C, modOpcodes line 1059.

FMemLdR4

(3,0xD3)not emitteddup of (0,94)handler #145Integerconfirmed_handler
Same handler as (0,0x94) FMemLdR4: Load a 4-byte value through a pointer held in a frame slot plus offset (FMem); not a Single-specific opcode.
Encoding, evidence and notes
Encoding

Encoding: FD D3 (lead byte FD selects table 3), then 4 operand byte(s); total instruction length 6 byte(s).
vbdec template: [%a+%2]
Operands:

  1. %a: local_var_ref, 2 byte(s). signed 16-bit offset from the procedure frame pointer (EBP). Negative = local/temporary (vbdec var_XX, XX = -offset), positive = argument (arg_XX).
  2. %2 (+): immediate_word, 2 byte(s). 16-bit immediate.
Evidence and notes

Emitted by VB6 SP6 (P-code): not observed in about 3,070 probe programs. The slot exists in the runtime's dispatch table, but no tested source construct makes the compiler emit it.

Handler: 0x6610603E, shared by 5 dispatch slots (real opcode #145). This is a duplicate slot of (0,94) FMemLdR4. Other slots: (0,94) FMemLdR4, (3,D2) FMemLdR4, (3,D7) FMemLdR4, (3,D8) FMemLdR4.

Family note: Phase 4: in ActiveX DLL/EXE projects, .bas module variables are per-thread. Every access goes through the per-thread data block whose pointer sits in a frame slot, and vbdec shows it as [this+off]. This family (and FMem_Store) is how such globals are read and written. Standard-EXE globals use ImpAd* instead.

Slots sharing this handler

(0,0x94) FMemLdR4, (3,0xD2) FMemLdR4, (3,0xD7) FMemLdR4, (3,0xD8) FMemLdR4

Description: none. Handler 0x6610603E, dispatch slot 0x66107C60, modOpcodes line 1060.

FMemLdR4

(3,0xD7)not emitteddup of (0,94)handler #145Integerconfirmed_handler
Same handler as (0,0x94) FMemLdR4: Load a 4-byte value through a pointer held in a frame slot plus offset (FMem); not a Single-specific opcode.
Encoding, evidence and notes
Encoding

Encoding: FD D7 (lead byte FD selects table 3), then 4 operand byte(s); total instruction length 6 byte(s).
vbdec template: [%a+%2]
Operands:

  1. %a: local_var_ref, 2 byte(s). signed 16-bit offset from the procedure frame pointer (EBP). Negative = local/temporary (vbdec var_XX, XX = -offset), positive = argument (arg_XX).
  2. %2 (+): immediate_word, 2 byte(s). 16-bit immediate.
Evidence and notes

Emitted by VB6 SP6 (P-code): not observed in about 3,070 probe programs. The slot exists in the runtime's dispatch table, but no tested source construct makes the compiler emit it.

Handler: 0x6610603E, shared by 5 dispatch slots (real opcode #145). This is a duplicate slot of (0,94) FMemLdR4. Other slots: (0,94) FMemLdR4, (3,D2) FMemLdR4, (3,D3) FMemLdR4, (3,D8) FMemLdR4.

Family note: Phase 4: in ActiveX DLL/EXE projects, .bas module variables are per-thread. Every access goes through the per-thread data block whose pointer sits in a frame slot, and vbdec shows it as [this+off]. This family (and FMem_Store) is how such globals are read and written. Standard-EXE globals use ImpAd* instead.

Slots sharing this handler

(0,0x94) FMemLdR4, (3,0xD2) FMemLdR4, (3,0xD3) FMemLdR4, (3,0xD8) FMemLdR4

Description: none. Handler 0x6610603E, dispatch slot 0x66107C70, modOpcodes line 1063.

FMemLdR4

(3,0xD8)not emitteddup of (0,94)handler #145Integerconfirmed_handler
Same handler as (0,0x94) FMemLdR4: Load a 4-byte value through a pointer held in a frame slot plus offset (FMem); not a Single-specific opcode.
Encoding, evidence and notes
Encoding

Encoding: FD D8 (lead byte FD selects table 3), then 4 operand byte(s); total instruction length 6 byte(s).
vbdec template: [%a+%2]
Operands:

  1. %a: local_var_ref, 2 byte(s). signed 16-bit offset from the procedure frame pointer (EBP). Negative = local/temporary (vbdec var_XX, XX = -offset), positive = argument (arg_XX).
  2. %2 (+): immediate_word, 2 byte(s). 16-bit immediate.
Evidence and notes

Emitted by VB6 SP6 (P-code): not observed in about 3,070 probe programs. The slot exists in the runtime's dispatch table, but no tested source construct makes the compiler emit it.

Handler: 0x6610603E, shared by 5 dispatch slots (real opcode #145). This is a duplicate slot of (0,94) FMemLdR4. Other slots: (0,94) FMemLdR4, (3,D2) FMemLdR4, (3,D3) FMemLdR4, (3,D7) FMemLdR4.

Family note: Phase 4: in ActiveX DLL/EXE projects, .bas module variables are per-thread. Every access goes through the per-thread data block whose pointer sits in a frame slot, and vbdec shows it as [this+off]. This family (and FMem_Store) is how such globals are read and written. Standard-EXE globals use ImpAd* instead.

Slots sharing this handler

(0,0x94) FMemLdR4, (3,0xD2) FMemLdR4, (3,0xD3) FMemLdR4, (3,0xD7) FMemLdR4

Description: none. Handler 0x6610603E, dispatch slot 0x66107C74, modOpcodes line 1064.

FMemLdR8

(3,0xD4)not emitteddup of (0,95)handler #146Currencyinferred_corpus
Same handler as (0,0x95) FMemLdCy: Load Currency from a field reached through a pointer held in a frame slot.
Encoding, evidence and notes
Encoding

Encoding: FD D4 (lead byte FD selects table 3), then 4 operand byte(s); total instruction length 6 byte(s).
vbdec template: [%a+%2]
Operands:

  1. %a: local_var_ref, 2 byte(s). signed 16-bit offset from the procedure frame pointer (EBP). Negative = local/temporary (vbdec var_XX, XX = -offset), positive = argument (arg_XX).
  2. %2 (+): immediate_word, 2 byte(s). 16-bit immediate.
Evidence and notes

Emitted by VB6 SP6 (P-code): not observed in about 3,070 probe programs. The slot exists in the runtime's dispatch table, but no tested source construct makes the compiler emit it.

Handler: 0x6610AF41, shared by 3 dispatch slots (real opcode #146). This is a duplicate slot of (0,95) FMemLdCy. Other slots: (0,95) FMemLdCy, (3,D5) FMemLdR8.

Family note: Phase 4: in ActiveX DLL/EXE projects, .bas module variables are per-thread. Every access goes through the per-thread data block whose pointer sits in a frame slot, and vbdec shows it as [this+off]. This family (and FMem_Store) is how such globals are read and written. Standard-EXE globals use ImpAd* instead.

Slots sharing this handler

(0,0x95) FMemLdCy, (3,0xD5) FMemLdR8

Description: none. Handler 0x6610AF41, dispatch slot 0x66107C64, modOpcodes line 1061.

FMemLdR8

(3,0xD5)not emitteddup of (0,95)handler #146Currencyconfirmed_handler
Same handler as (0,0x95) FMemLdCy: Load Currency from a field reached through a pointer held in a frame slot.
Encoding, evidence and notes
Encoding

Encoding: FD D5 (lead byte FD selects table 3), then 4 operand byte(s); total instruction length 6 byte(s).
vbdec template: [%a+%2]
Operands:

  1. %a: local_var_ref, 2 byte(s). signed 16-bit offset from the procedure frame pointer (EBP). Negative = local/temporary (vbdec var_XX, XX = -offset), positive = argument (arg_XX).
  2. %2 (+): immediate_word, 2 byte(s). 16-bit immediate.
Evidence and notes

Emitted by VB6 SP6 (P-code): not observed in about 3,070 probe programs. The slot exists in the runtime's dispatch table, but no tested source construct makes the compiler emit it.

Handler: 0x6610AF41, shared by 3 dispatch slots (real opcode #146). This is a duplicate slot of (0,95) FMemLdCy. Other slots: (0,95) FMemLdCy, (3,D4) FMemLdR8.

Family note: Phase 4: in ActiveX DLL/EXE projects, .bas module variables are per-thread. Every access goes through the per-thread data block whose pointer sits in a frame slot, and vbdec shows it as [this+off]. This family (and FMem_Store) is how such globals are read and written. Standard-EXE globals use ImpAd* instead.

Slots sharing this handler

(0,0x95) FMemLdCy, (3,0xD4) FMemLdR8

Description: none. Handler 0x6610AF41, dispatch slot 0x66107C68, modOpcodes line 1062.

FMemLdRf

(0,0x07)emittedprimary of 3handler #6Stack & frameinferred_corpus27 corpus hits
Load a reference (ByRef slot) via [frame[%a] + offset] (FMemLdRf).

First dereferences a frame slot (typically holding an object pointer) and then reads a member at compile-time-known offset. Combined frame-load + member-load step.

When the compiler emits it

Emitted when reading a field of an object referenced by a local variable.

VB6 source (verified: compiles to this slot)
Dim g As Boolean

Public Sub Main()
  P g
End Sub

Sub P(x As Boolean)
End Sub
Encoding, evidence and notes
Encoding

Encoding: 07, then 4 operand byte(s); total instruction length 5 byte(s).
vbdec template: [%a+%2]
Operands:

  1. %a: local_var_ref, 2 byte(s). signed 16-bit offset from the procedure frame pointer (EBP). Negative = local/temporary (vbdec var_XX, XX = -offset), positive = argument (arg_XX).
  2. %2 (+): immediate_word, 2 byte(s). 16-bit immediate.

Observed: 07 08000000 FMemLdRf [this+0x0]

Examples
modZLIB.Proc_45E44C @ 0x45E44C | 45E4C8    07 34FF0400           FMemLdRf  [var_CC+0x4]
modZLIB.Proc_4666C0 @ 0x4666C0 | 46673E    07 20FF0400           FMemLdRf  [var_E0+0x4]
modCrc.Proc_446CFC @ 0x446CFC | 446D0E    07 08000000           FMemLdRf  [this+0x0]

27 occurrence(s) in PDFStreamDumper.

Evidence and notes

Emitted by VB6 SP6 (P-code): yes. Minimal probe: probes\op\0_07_FMemLdRf.

Handler: 0x66106063, shared by 3 dispatch slots (real opcode #6). This is the primary slot. Other slots: (3,D6) FMemLdRf, (3,DC) FMemLdRf.

Family note: Phase 4: in ActiveX DLL/EXE projects, .bas module variables are per-thread. Every access goes through the per-thread data block whose pointer sits in a frame slot, and vbdec shows it as [this+off]. This family (and FMem_Store) is how such globals are read and written. Standard-EXE globals use ImpAd* instead.

Corpus: 27 occurrence(s) in PDFStreamDumper_p.exe.

Slots sharing this handler

(3,0xD6) FMemLdRf, (3,0xDC) FMemLdRf

Description: draft, by claude-opus-4.7. Handler 0x66106063, dispatch slot 0x66106D30, modOpcodes line 1041.

FMemLdRf

(3,0xD6)not emitteddup of (0,07)handler #6Stack & frameconfirmed_handler
Same handler as (0,0x07) FMemLdRf: Load a reference (ByRef slot) via [frame[%a] + offset] (FMemLdRf).
Encoding, evidence and notes
Encoding

Encoding: FD D6 (lead byte FD selects table 3), then 4 operand byte(s); total instruction length 6 byte(s).
vbdec template: [%a+%2]
Operands:

  1. %a: local_var_ref, 2 byte(s). signed 16-bit offset from the procedure frame pointer (EBP). Negative = local/temporary (vbdec var_XX, XX = -offset), positive = argument (arg_XX).
  2. %2 (+): immediate_word, 2 byte(s). 16-bit immediate.
Evidence and notes

Emitted by VB6 SP6 (P-code): not observed in about 3,070 probe programs. The slot exists in the runtime's dispatch table, but no tested source construct makes the compiler emit it.

Handler: 0x66106063, shared by 3 dispatch slots (real opcode #6). This is a duplicate slot of (0,07) FMemLdRf. Other slots: (0,07) FMemLdRf, (3,DC) FMemLdRf.

Family note: Phase 4: in ActiveX DLL/EXE projects, .bas module variables are per-thread. Every access goes through the per-thread data block whose pointer sits in a frame slot, and vbdec shows it as [this+off]. This family (and FMem_Store) is how such globals are read and written. Standard-EXE globals use ImpAd* instead.

Slots sharing this handler

(0,0x07) FMemLdRf, (3,0xDC) FMemLdRf

Description: none. Handler 0x66106063, dispatch slot 0x66107C6C, modOpcodes line 1042.

FMemLdRf

(3,0xDC)not emitteddup of (0,07)handler #6Stack & frameconfirmed_handler
Same handler as (0,0x07) FMemLdRf: Load a reference (ByRef slot) via [frame[%a] + offset] (FMemLdRf).
Encoding, evidence and notes
Encoding

Encoding: FD DC (lead byte FD selects table 3), then 4 operand byte(s); total instruction length 6 byte(s).
vbdec template: [%a+%2]
Operands:

  1. %a: local_var_ref, 2 byte(s). signed 16-bit offset from the procedure frame pointer (EBP). Negative = local/temporary (vbdec var_XX, XX = -offset), positive = argument (arg_XX).
  2. %2 (+): immediate_word, 2 byte(s). 16-bit immediate.
Evidence and notes

Emitted by VB6 SP6 (P-code): not observed in about 3,070 probe programs. The slot exists in the runtime's dispatch table, but no tested source construct makes the compiler emit it.

Handler: 0x66106063, shared by 3 dispatch slots (real opcode #6). This is a duplicate slot of (0,07) FMemLdRf. Other slots: (0,07) FMemLdRf, (3,D6) FMemLdRf.

Family note: Phase 4: in ActiveX DLL/EXE projects, .bas module variables are per-thread. Every access goes through the per-thread data block whose pointer sits in a frame slot, and vbdec shows it as [this+off]. This family (and FMem_Store) is how such globals are read and written. Standard-EXE globals use ImpAd* instead.

Slots sharing this handler

(0,0x07) FMemLdRf, (3,0xD6) FMemLdRf

Description: none. Handler 0x66106063, dispatch slot 0x66107C84, modOpcodes line 1043.

FMemLdUI1

(3,0xD0)emittedhandler #573Integerinferred_corpus
Load Byte from a field reached through a pointer held in a frame slot.

Reads a Byte (stored as 1 byte, carried on the stack widened to 16/32 bits), and pushes it from a field reached through a pointer held in a frame slot.

Stack: [...] -> [..., v:UI1]

Operands: %a: frame slot holding the base pointer; %2: byte offset added to it.

Two observed uses: (1) ActiveX DLL/EXE module variables, where the frame slot holds the per-thread data block and vbdec shows [this+off]; (2) fields of a UDT passed ByRef, where the frame slot is the argument ([arg_C+off]).

When the compiler emits it

Emitted for reads of a field reached through a pointer held in a frame slot when the value is a Byte. The storage class selects the prefix (FMem); the value class selects the suffix (UI1).

VB6 source (verified: compiles to this slot)
Dim g As Byte

Public Sub Main()
  Dim b As Byte
  b = g
End Sub
Encoding, evidence and notes
Encoding

Encoding: FD D0 (lead byte FD selects table 3), then 4 operand byte(s); total instruction length 6 byte(s).
vbdec template: [%a+%2]
Operands:

  1. %a: local_var_ref, 2 byte(s). signed 16-bit offset from the procedure frame pointer (EBP). Negative = local/temporary (vbdec var_XX, XX = -offset), positive = argument (arg_XX).
  2. %2 (+): immediate_word, 2 byte(s). 16-bit immediate.

Observed: FDD0 08000000 FMemLdUI1 [this+0x0]

Examples
FDD0 08000000  FMemLdUI1 [this+0x0]

From the Phase 4 probe (VB6 SP6, P-code).

Evidence and notes

Emitted by VB6 SP6 (P-code): yes. Minimal probe: probes\op\3_D0_FMemLdUI1.

Handler: 0x6610AF1F, unique to this slot (real opcode #573).

Family note: Phase 4: in ActiveX DLL/EXE projects, .bas module variables are per-thread. Every access goes through the per-thread data block whose pointer sits in a frame slot, and vbdec shows it as [this+off]. This family (and FMem_Store) is how such globals are read and written. Standard-EXE globals use ImpAd* instead.

Check of vb6_source_eq example: verified: compiles and emits this slot.

Example from the description
Dim g As Byte

Public Sub Main()
  Dim b As Byte
  b = g
End Sub

Description: draft, by claude-opus-5-5. Handler 0x6610AF1F, dispatch slot 0x66107C54, modOpcodes line 1057.

FMemLdVar

(3,0xDD)not emittedhandler #574Variantinferred_corpus
No description yet.
Encoding, evidence and notes
Encoding

Encoding: FD DD (lead byte FD selects table 3), then 4 operand byte(s); total instruction length 6 byte(s).
vbdec template: [%a+%2]
Operands:

  1. %a: local_var_ref, 2 byte(s). signed 16-bit offset from the procedure frame pointer (EBP). Negative = local/temporary (vbdec var_XX, XX = -offset), positive = argument (arg_XX).
  2. %2 (+): immediate_word, 2 byte(s). 16-bit immediate.
Evidence and notes

Emitted by VB6 SP6 (P-code): not observed in about 3,070 probe programs. The slot exists in the runtime's dispatch table, but no tested source construct makes the compiler emit it.

Handler: 0x6610B14F, unique to this slot (real opcode #574).

Family note: Phase 4: in ActiveX DLL/EXE projects, .bas module variables are per-thread. Every access goes through the per-thread data block whose pointer sits in a frame slot, and vbdec shows it as [this+off]. This family (and FMem_Store) is how such globals are read and written. Standard-EXE globals use ImpAd* instead.

Description: none. Handler 0x6610B14F, dispatch slot 0x66107C88, modOpcodes line 1068.

FMem_Store

Frame+offset member store Prefix: F + Mem

FMemStAd

(3,0xE8)emittedhandler #578Object / COMinferred_corpus
Store object reference into a field reached through a pointer held in a frame slot.

Pops an object pointer (Set). The destination's old reference is Released and the new one is AddRef'd, and writes it to a field reached through a pointer held in a frame slot.

Stack: [..., v:Ad] -> [...]

Operands: %a: frame slot holding the base pointer; %2: byte offset added to it.

Two observed uses: (1) ActiveX DLL/EXE module variables, where the frame slot holds the per-thread data block and vbdec shows [this+off]; (2) fields of a UDT passed ByRef, where the frame slot is the argument ([arg_C+off]).

When the compiler emits it

Emitted for assignments to a field reached through a pointer held in a frame slot when the value is a object reference. The storage class selects the prefix (FMem); the value class selects the suffix (Ad).

VB6 source (verified: compiles to this slot)
Private Type TRec
  pad As Long
  f As Object
End Type
Dim gr As TRec

Public Sub Main()
  Dim b As Object
  Set gr.f = New Collection
End Sub
Encoding, evidence and notes
Encoding

Encoding: FD E8 (lead byte FD selects table 3), then 4 operand byte(s); total instruction length 6 byte(s).
vbdec template: [%a+%2]
Operands:

  1. %a: local_var_ref, 2 byte(s). signed 16-bit offset from the procedure frame pointer (EBP). Negative = local/temporary (vbdec var_XX, XX = -offset), positive = argument (arg_XX).
  2. %2 (+): immediate_word, 2 byte(s). 16-bit immediate.

Observed: FDE8 08000400 FMemStAd [this+0x4]

Examples
FDE8 08000400  FMemStAd [this+0x4]

From the Phase 4 probe (VB6 SP6, P-code).

Evidence and notes

Emitted by VB6 SP6 (P-code): yes. Minimal probe: probes\op\3_E8_FMemStAd.

Handler: 0x661063DC, unique to this slot (real opcode #578).

Family note: Phase 4: in ActiveX DLL/EXE projects, .bas module variables are per-thread. Every access goes through the per-thread data block whose pointer sits in a frame slot, and vbdec shows it as [this+off]. This family (and FMem_Store) is how such globals are read and written. Standard-EXE globals use ImpAd* instead.

Check of vb6_source_eq example: verified: compiles and emits this slot.

Example from the description
Private Type TRec
  pad As Long
  f As Object
End Type
Dim gr As TRec

Public Sub Main()
  Dim b As Object
  Set gr.f = New Collection
End Sub

Description: draft, by claude-opus-5-5. Handler 0x661063DC, dispatch slot 0x66107CB4, modOpcodes line 1076.

FMemStAdFunc

(3,0xEF)emittedhandler #583Object / COMinferred_corpus
Store object reference from a call into a field reached through a pointer held in a frame slot.

Pops an object pointer returned by a function call (Set x = F()). The returned reference is adopted without an extra AddRef, and writes it to a field reached through a pointer held in a frame slot.

Stack: [..., v:Ad] -> [...]

Operands: %a: frame slot holding the base pointer; %2: byte offset added to it.

Two observed uses: (1) ActiveX DLL/EXE module variables, where the frame slot holds the per-thread data block and vbdec shows [this+off]; (2) fields of a UDT passed ByRef, where the frame slot is the argument ([arg_C+off]).

When the compiler emits it

Emitted for assignments to a field reached through a pointer held in a frame slot when the value is a object reference from a call. The storage class selects the prefix (FMem); the value class selects the suffix (AdFunc).

VB6 source (verified: compiles to this slot)
Dim g As Object

Public Sub Main()
  Set g = New Collection
  Dim b As Object
End Sub
Encoding, evidence and notes
Encoding

Encoding: FD EF (lead byte FD selects table 3), then 4 operand byte(s); total instruction length 6 byte(s).
vbdec template: [%a+%2]
Operands:

  1. %a: local_var_ref, 2 byte(s). signed 16-bit offset from the procedure frame pointer (EBP). Negative = local/temporary (vbdec var_XX, XX = -offset), positive = argument (arg_XX).
  2. %2 (+): immediate_word, 2 byte(s). 16-bit immediate.

Observed: FDEF 08000000 FMemStAdFunc [this+0x0]

Examples
FDEF 08000000  FMemStAdFunc [this+0x0]

From the Phase 4 probe (VB6 SP6, P-code).

Evidence and notes

Emitted by VB6 SP6 (P-code): yes. Minimal probe: probes\op\3_EF_FMemStAdFunc.

Handler: 0x661063BE, unique to this slot (real opcode #583).

Family note: Phase 4: in ActiveX DLL/EXE projects, .bas module variables are per-thread. Every access goes through the per-thread data block whose pointer sits in a frame slot, and vbdec shows it as [this+off]. This family (and FMem_Store) is how such globals are read and written. Standard-EXE globals use ImpAd* instead.

Check of vb6_source_eq example: verified: compiles and emits this slot.

Example from the description
Dim g As Object

Public Sub Main()
  Set g = New Collection
  Dim b As Object
End Sub

Description: draft, by claude-opus-5-5. Handler 0x661063BE, dispatch slot 0x66107CD0, modOpcodes line 1083.

FMemStFPR4

(0,0x9B)emittedprimary of 2handler #152Floating pointinferred_corpus
Store Single into a field reached through a pointer held in a frame slot.

Pops a Single, moved through the FPU (fld/fstp dword), and writes it to a field reached through a pointer held in a frame slot.

Stack: [..., v:FPR4] -> [...]

Operands: %a: frame slot holding the base pointer; %2: byte offset added to it.

Two observed uses: (1) ActiveX DLL/EXE module variables, where the frame slot holds the per-thread data block and vbdec shows [this+off]; (2) fields of a UDT passed ByRef, where the frame slot is the argument ([arg_C+off]).

When the compiler emits it

Emitted for assignments to a field reached through a pointer held in a frame slot when the value is a Single. The storage class selects the prefix (FMem); the value class selects the suffix (FPR4).

VB6 source (verified: compiles to this slot)
Dim g As Single

Public Sub Main()
  g = 1.5!
  Dim b As Single
End Sub
Encoding, evidence and notes
Encoding

Encoding: 9B, then 4 operand byte(s); total instruction length 5 byte(s).
vbdec template: [%a+%2]
Operands:

  1. %a: local_var_ref, 2 byte(s). signed 16-bit offset from the procedure frame pointer (EBP). Negative = local/temporary (vbdec var_XX, XX = -offset), positive = argument (arg_XX).
  2. %2 (+): immediate_word, 2 byte(s). 16-bit immediate.

Observed: 9B 08000000 FMemStFPR4 [this+0x0]

Examples
9B 08000000  FMemStFPR4 [this+0x0]

From the Phase 4 probe (VB6 SP6, P-code).

Evidence and notes

Emitted by VB6 SP6 (P-code): yes. Minimal probe: probes\op\0_9B_FMemStFPR4.

Handler: 0x6610AFF6, shared by 2 dispatch slots (real opcode #152). This is the primary slot. Other slots: (3,E9) FMemStFPR4.

Family note: Phase 4: in ActiveX DLL/EXE projects, .bas module variables are per-thread. Every access goes through the per-thread data block whose pointer sits in a frame slot, and vbdec shows it as [this+off]. This family (and FMem_Store) is how such globals are read and written. Standard-EXE globals use ImpAd* instead.

Check of vb6_source_eq example: verified: compiles and emits this slot.

Example from the description
Dim g As Single

Public Sub Main()
  g = 1.5!
  Dim b As Single
End Sub
Slots sharing this handler

(3,0xE9) FMemStFPR4

Description: draft, by claude-opus-5-5. Handler 0x6610AFF6, dispatch slot 0x66106F80, modOpcodes line 1054.

FMemStFPR4

(3,0xE9)not emitteddup of (0,9B)handler #152Floating pointconfirmed_handler
Same handler as (0,0x9B) FMemStFPR4: Store Single into a field reached through a pointer held in a frame slot.
Encoding, evidence and notes
Encoding

Encoding: FD E9 (lead byte FD selects table 3), then 4 operand byte(s); total instruction length 6 byte(s).
vbdec template: [%a+%2]
Operands:

  1. %a: local_var_ref, 2 byte(s). signed 16-bit offset from the procedure frame pointer (EBP). Negative = local/temporary (vbdec var_XX, XX = -offset), positive = argument (arg_XX).
  2. %2 (+): immediate_word, 2 byte(s). 16-bit immediate.
Evidence and notes

Emitted by VB6 SP6 (P-code): not observed in about 3,070 probe programs. The slot exists in the runtime's dispatch table, but no tested source construct makes the compiler emit it.

Handler: 0x6610AFF6, shared by 2 dispatch slots (real opcode #152). This is a duplicate slot of (0,9B) FMemStFPR4. Other slots: (0,9B) FMemStFPR4.

Family note: Phase 4: in ActiveX DLL/EXE projects, .bas module variables are per-thread. Every access goes through the per-thread data block whose pointer sits in a frame slot, and vbdec shows it as [this+off]. This family (and FMem_Store) is how such globals are read and written. Standard-EXE globals use ImpAd* instead.

Slots sharing this handler

(0,0x9B) FMemStFPR4

Description: none. Handler 0x6610AFF6, dispatch slot 0x66107CB8, modOpcodes line 1077.

FMemStFPR8

(0,0x9C)emittedprimary of 2handler #153Floating pointinferred_corpus
Store Double/Date into a field reached through a pointer held in a frame slot.

Pops a Double or Date, moved through the FPU (fld/fstp qword), and writes it to a field reached through a pointer held in a frame slot.

Stack: [..., v:FPR8] -> [...]

Operands: %a: frame slot holding the base pointer; %2: byte offset added to it.

Two observed uses: (1) ActiveX DLL/EXE module variables, where the frame slot holds the per-thread data block and vbdec shows [this+off]; (2) fields of a UDT passed ByRef, where the frame slot is the argument ([arg_C+off]).

When the compiler emits it

Emitted for assignments to a field reached through a pointer held in a frame slot when the value is a Double/Date. The storage class selects the prefix (FMem); the value class selects the suffix (FPR8).

VB6 source (verified: compiles to this slot)
Dim g As Date

Public Sub Main()
  g = #1/1/2000#
  Dim b As Date
End Sub
Encoding, evidence and notes
Encoding

Encoding: 9C, then 4 operand byte(s); total instruction length 5 byte(s).
vbdec template: [%a+%2]
Operands:

  1. %a: local_var_ref, 2 byte(s). signed 16-bit offset from the procedure frame pointer (EBP). Negative = local/temporary (vbdec var_XX, XX = -offset), positive = argument (arg_XX).
  2. %2 (+): immediate_word, 2 byte(s). 16-bit immediate.

Observed: 9C 08000000 FMemStFPR8 [this+0x0]

Examples
9C 08000000  FMemStFPR8 [this+0x0]

From the Phase 4 probe (VB6 SP6, P-code).

Evidence and notes

Emitted by VB6 SP6 (P-code): yes. Minimal probe: probes\op\0_9C_FMemStFPR8.

Handler: 0x6610B021, shared by 2 dispatch slots (real opcode #153). This is the primary slot. Other slots: (3,EA) FMemStFPR8.

Family note: Phase 4: in ActiveX DLL/EXE projects, .bas module variables are per-thread. Every access goes through the per-thread data block whose pointer sits in a frame slot, and vbdec shows it as [this+off]. This family (and FMem_Store) is how such globals are read and written. Standard-EXE globals use ImpAd* instead.

Check of vb6_source_eq example: verified: compiles and emits this slot.

Example from the description
Dim g As Date

Public Sub Main()
  g = #1/1/2000#
  Dim b As Date
End Sub
Slots sharing this handler

(3,0xEA) FMemStFPR8

Description: draft, by claude-opus-5-5. Handler 0x6610B021, dispatch slot 0x66106F84, modOpcodes line 1055.

FMemStFPR8

(3,0xEA)not emitteddup of (0,9C)handler #153Floating pointconfirmed_handler
Same handler as (0,0x9C) FMemStFPR8: Store Double/Date into a field reached through a pointer held in a frame slot.
Encoding, evidence and notes
Encoding

Encoding: FD EA (lead byte FD selects table 3), then 4 operand byte(s); total instruction length 6 byte(s).
vbdec template: [%a+%2]
Operands:

  1. %a: local_var_ref, 2 byte(s). signed 16-bit offset from the procedure frame pointer (EBP). Negative = local/temporary (vbdec var_XX, XX = -offset), positive = argument (arg_XX).
  2. %2 (+): immediate_word, 2 byte(s). 16-bit immediate.
Evidence and notes

Emitted by VB6 SP6 (P-code): not observed in about 3,070 probe programs. The slot exists in the runtime's dispatch table, but no tested source construct makes the compiler emit it.

Handler: 0x6610B021, shared by 2 dispatch slots (real opcode #153). This is a duplicate slot of (0,9C) FMemStFPR8. Other slots: (0,9C) FMemStFPR8.

Family note: Phase 4: in ActiveX DLL/EXE projects, .bas module variables are per-thread. Every access goes through the per-thread data block whose pointer sits in a frame slot, and vbdec shows it as [this+off]. This family (and FMem_Store) is how such globals are read and written. Standard-EXE globals use ImpAd* instead.

Slots sharing this handler

(0,0x9C) FMemStFPR8

Description: none. Handler 0x6610B021, dispatch slot 0x66107CBC, modOpcodes line 1078.

FMemStI2

(0,0x98)emittedprimary of 2handler #149Integerinferred_corpus1 corpus hits
Store a 16-bit signed integer (VB6 Integer) via [frame[%a] + offset] (FMemStI2).

Mirror of FMemLd*. Dereferences a frame slot for an object pointer, writes a value at the member offset.

When the compiler emits it

Emitted when writing a field of an object referenced by a local.

VB6 source (verified: compiles to this slot)
Dim g As Boolean

Public Sub Main()
  g = True
  Dim b As Boolean
End Sub
Encoding, evidence and notes
Encoding

Encoding: 98, then 4 operand byte(s); total instruction length 5 byte(s).
vbdec template: [%a+%2]
Operands:

  1. %a: local_var_ref, 2 byte(s). signed 16-bit offset from the procedure frame pointer (EBP). Negative = local/temporary (vbdec var_XX, XX = -offset), positive = argument (arg_XX).
  2. %2 (+): immediate_word, 2 byte(s). 16-bit immediate.

Observed: 98 08000000 FMemStI2 [this+0x0]

Examples
b64.Proc_478E48 @ 0x478E48 | 479D4D    98 08003800           FMemStI2 [this+0x38]

1 occurrence(s) in PDFStreamDumper.

Evidence and notes

Emitted by VB6 SP6 (P-code): yes. Minimal probe: probes\op\0_98_FMemStI2.

Handler: 0x66106087, shared by 2 dispatch slots (real opcode #149). This is the primary slot. Other slots: (3,E1) FMemStI2.

Family note: Phase 4: in ActiveX DLL/EXE projects, .bas module variables are per-thread. Every access goes through the per-thread data block whose pointer sits in a frame slot, and vbdec shows it as [this+off]. This family (and FMem_Store) is how such globals are read and written. Standard-EXE globals use ImpAd* instead.

Corpus: 1 occurrence(s) in PDFStreamDumper_p.exe.

Slots sharing this handler

(3,0xE1) FMemStI2

Description: draft, by claude-opus-4.7. Handler 0x66106087, dispatch slot 0x66106F74, modOpcodes line 1051.

FMemStI2

(3,0xE1)not emitteddup of (0,98)handler #149Integerconfirmed_handler
Same handler as (0,0x98) FMemStI2: Store a 16-bit signed integer (VB6 Integer) via [frame[%a] + offset] (FMemStI2).
Encoding, evidence and notes
Encoding

Encoding: FD E1 (lead byte FD selects table 3), then 4 operand byte(s); total instruction length 6 byte(s).
vbdec template: [%a+%2]
Operands:

  1. %a: local_var_ref, 2 byte(s). signed 16-bit offset from the procedure frame pointer (EBP). Negative = local/temporary (vbdec var_XX, XX = -offset), positive = argument (arg_XX).
  2. %2 (+): immediate_word, 2 byte(s). 16-bit immediate.
Evidence and notes

Emitted by VB6 SP6 (P-code): not observed in about 3,070 probe programs. The slot exists in the runtime's dispatch table, but no tested source construct makes the compiler emit it.

Handler: 0x66106087, shared by 2 dispatch slots (real opcode #149). This is a duplicate slot of (0,98) FMemStI2. Other slots: (0,98) FMemStI2.

Family note: Phase 4: in ActiveX DLL/EXE projects, .bas module variables are per-thread. Every access goes through the per-thread data block whose pointer sits in a frame slot, and vbdec shows it as [this+off]. This family (and FMem_Store) is how such globals are read and written. Standard-EXE globals use ImpAd* instead.

Slots sharing this handler

(0,0x98) FMemStI2

Description: none. Handler 0x66106087, dispatch slot 0x66107C98, modOpcodes line 1070.

FMemStI4

(0,0x99)emittedprimary of 3handler #150Integerinferred_corpus18 corpus hits
Store a 32-bit signed integer (VB6 Long) via [frame[%a] + offset] (FMemStI4).

Mirror of FMemLd*. Dereferences a frame slot for an object pointer, writes a value at the member offset.

When the compiler emits it

Emitted when writing a field of an object referenced by a local.

VB6 source (verified: compiles to this slot)
Dim g As Long

Public Sub Main()
  g = 70000
  Dim b As Long
End Sub
Encoding, evidence and notes
Encoding

Encoding: 99, then 4 operand byte(s); total instruction length 5 byte(s).
vbdec template: [%a+%2]
Operands:

  1. %a: local_var_ref, 2 byte(s). signed 16-bit offset from the procedure frame pointer (EBP). Negative = local/temporary (vbdec var_XX, XX = -offset), positive = argument (arg_XX).
  2. %2 (+): immediate_word, 2 byte(s). 16-bit immediate.

Observed: 99 08000000 FMemStI4 [this+0x0]

Examples
modZLIB.Proc_43E6AC @ 0x43E6AC | 43E6BF    99 08000400           FMemStI4 [this+0x4]
modZLIB.Proc_43D378 @ 0x43D378 | 43D37B    99 08000400           FMemStI4 [this+0x4]
modZLIB.Proc_45E44C @ 0x45E44C | 45E4DC    99 34FF0400           FMemStI4 [var_CC+0x4]

18 occurrence(s) in PDFStreamDumper.

Evidence and notes

Emitted by VB6 SP6 (P-code): yes. Minimal probe: probes\op\0_99_FMemStI4.

Handler: 0x661060AE, shared by 3 dispatch slots (real opcode #150). This is the primary slot. Other slots: (3,E2) FMemStR4, (3,E3) FMemStR4.

Family note: Phase 4: in ActiveX DLL/EXE projects, .bas module variables are per-thread. Every access goes through the per-thread data block whose pointer sits in a frame slot, and vbdec shows it as [this+off]. This family (and FMem_Store) is how such globals are read and written. Standard-EXE globals use ImpAd* instead.

Corpus: 18 occurrence(s) in PDFStreamDumper_p.exe.

Slots sharing this handler

(3,0xE2) FMemStR4, (3,0xE3) FMemStR4

Description: draft, by claude-opus-4.7. Handler 0x661060AE, dispatch slot 0x66106F78, modOpcodes line 1052.

FMemStR4

(3,0xE2)not emitteddup of (0,99)handler #150Integerinferred_corpus
Same handler as (0,0x99) FMemStI4: Store a 32-bit signed integer (VB6 Long) via [frame[%a] + offset] (FMemStI4).
Encoding, evidence and notes
Encoding

Encoding: FD E2 (lead byte FD selects table 3), then 4 operand byte(s); total instruction length 6 byte(s).
vbdec template: [%a+%2]
Operands:

  1. %a: local_var_ref, 2 byte(s). signed 16-bit offset from the procedure frame pointer (EBP). Negative = local/temporary (vbdec var_XX, XX = -offset), positive = argument (arg_XX).
  2. %2 (+): immediate_word, 2 byte(s). 16-bit immediate.
Evidence and notes

Emitted by VB6 SP6 (P-code): not observed in about 3,070 probe programs. The slot exists in the runtime's dispatch table, but no tested source construct makes the compiler emit it.

Handler: 0x661060AE, shared by 3 dispatch slots (real opcode #150). This is a duplicate slot of (0,99) FMemStI4. Other slots: (0,99) FMemStI4, (3,E3) FMemStR4.

Family note: Phase 4: in ActiveX DLL/EXE projects, .bas module variables are per-thread. Every access goes through the per-thread data block whose pointer sits in a frame slot, and vbdec shows it as [this+off]. This family (and FMem_Store) is how such globals are read and written. Standard-EXE globals use ImpAd* instead.

Slots sharing this handler

(0,0x99) FMemStI4, (3,0xE3) FMemStR4

Description: none. Handler 0x661060AE, dispatch slot 0x66107C9C, modOpcodes line 1071.

FMemStR4

(3,0xE3)not emitteddup of (0,99)handler #150Integerconfirmed_handler
Same handler as (0,0x99) FMemStI4: Store a 32-bit signed integer (VB6 Long) via [frame[%a] + offset] (FMemStI4).
Encoding, evidence and notes
Encoding

Encoding: FD E3 (lead byte FD selects table 3), then 4 operand byte(s); total instruction length 6 byte(s).
vbdec template: [%a+%2]
Operands:

  1. %a: local_var_ref, 2 byte(s). signed 16-bit offset from the procedure frame pointer (EBP). Negative = local/temporary (vbdec var_XX, XX = -offset), positive = argument (arg_XX).
  2. %2 (+): immediate_word, 2 byte(s). 16-bit immediate.
Evidence and notes

Emitted by VB6 SP6 (P-code): not observed in about 3,070 probe programs. The slot exists in the runtime's dispatch table, but no tested source construct makes the compiler emit it.

Handler: 0x661060AE, shared by 3 dispatch slots (real opcode #150). This is a duplicate slot of (0,99) FMemStI4. Other slots: (0,99) FMemStI4, (3,E2) FMemStR4.

Family note: Phase 4: in ActiveX DLL/EXE projects, .bas module variables are per-thread. Every access goes through the per-thread data block whose pointer sits in a frame slot, and vbdec shows it as [this+off]. This family (and FMem_Store) is how such globals are read and written. Standard-EXE globals use ImpAd* instead.

Slots sharing this handler

(0,0x99) FMemStI4, (3,0xE2) FMemStR4

Description: none. Handler 0x661060AE, dispatch slot 0x66107CA0, modOpcodes line 1072.

FMemStR8

(0,0x9A)emittedprimary of 3handler #151Currencyinferred_corpus
Store 8-byte value into a field reached through a pointer held in a frame slot.

Pops a raw 64-bit value (in practice a Currency; Double/Date use the FPR8 forms), and writes it to a field reached through a pointer held in a frame slot.

Stack: [..., v:R8] -> [...]

Operands: %a: frame slot holding the base pointer; %2: byte offset added to it.

Two observed uses: (1) ActiveX DLL/EXE module variables, where the frame slot holds the per-thread data block and vbdec shows [this+off]; (2) fields of a UDT passed ByRef, where the frame slot is the argument ([arg_C+off]).

The R8 suffix denotes a raw 8-byte move, not a floating-point type. Phase 4 probes show it used for Currency values. Single/Double values use the FPR4/FPR8 forms.

When the compiler emits it

Emitted for assignments to a field reached through a pointer held in a frame slot when the value is a 8-byte value. The storage class selects the prefix (FMem); the value class selects the suffix (R8).

VB6 source (verified: compiles to this slot)
Dim g As Currency

Public Sub Main()
  g = 1.5@
  Dim b As Currency
End Sub
Encoding, evidence and notes
Encoding

Encoding: 9A, then 4 operand byte(s); total instruction length 5 byte(s).
vbdec template: [%a+%2]
Operands:

  1. %a: local_var_ref, 2 byte(s). signed 16-bit offset from the procedure frame pointer (EBP). Negative = local/temporary (vbdec var_XX, XX = -offset), positive = argument (arg_XX).
  2. %2 (+): immediate_word, 2 byte(s). 16-bit immediate.

Observed: 9A 08000000 FMemStR8 [this+0x0]

Examples
9A 08000000  FMemStR8 [this+0x0]

From the Phase 4 probe (VB6 SP6, P-code).

Evidence and notes

Emitted by VB6 SP6 (P-code): yes. Minimal probe: probes\op\0_9A_FMemStR8.

Handler: 0x6610AFD2, shared by 3 dispatch slots (real opcode #151). This is the primary slot. Other slots: (3,E4) FMemStR8, (3,E5) FMemStR8.

Family note: Phase 4: in ActiveX DLL/EXE projects, .bas module variables are per-thread. Every access goes through the per-thread data block whose pointer sits in a frame slot, and vbdec shows it as [this+off]. This family (and FMem_Store) is how such globals are read and written. Standard-EXE globals use ImpAd* instead.

Check of vb6_source_eq example: verified: compiles and emits this slot.

Example from the description
Dim g As Currency

Public Sub Main()
  g = 1.5@
  Dim b As Currency
End Sub
Slots sharing this handler

(3,0xE4) FMemStR8, (3,0xE5) FMemStR8

Description: draft, by claude-opus-5-5. Handler 0x6610AFD2, dispatch slot 0x66106F7C, modOpcodes line 1053.

FMemStR8

(3,0xE4)not emitteddup of (0,9A)handler #151Currencyconfirmed_handler
Same handler as (0,0x9A) FMemStR8: Store 8-byte value into a field reached through a pointer held in a frame slot.
Encoding, evidence and notes
Encoding

Encoding: FD E4 (lead byte FD selects table 3), then 4 operand byte(s); total instruction length 6 byte(s).
vbdec template: [%a+%2]
Operands:

  1. %a: local_var_ref, 2 byte(s). signed 16-bit offset from the procedure frame pointer (EBP). Negative = local/temporary (vbdec var_XX, XX = -offset), positive = argument (arg_XX).
  2. %2 (+): immediate_word, 2 byte(s). 16-bit immediate.
Evidence and notes

Emitted by VB6 SP6 (P-code): not observed in about 3,070 probe programs. The slot exists in the runtime's dispatch table, but no tested source construct makes the compiler emit it.

Handler: 0x6610AFD2, shared by 3 dispatch slots (real opcode #151). This is a duplicate slot of (0,9A) FMemStR8. Other slots: (0,9A) FMemStR8, (3,E5) FMemStR8.

Family note: Phase 4: in ActiveX DLL/EXE projects, .bas module variables are per-thread. Every access goes through the per-thread data block whose pointer sits in a frame slot, and vbdec shows it as [this+off]. This family (and FMem_Store) is how such globals are read and written. Standard-EXE globals use ImpAd* instead.

Slots sharing this handler

(0,0x9A) FMemStR8, (3,0xE5) FMemStR8

Description: none. Handler 0x6610AFD2, dispatch slot 0x66107CA4, modOpcodes line 1073.

FMemStR8

(3,0xE5)not emitteddup of (0,9A)handler #151Currencyconfirmed_handler
Same handler as (0,0x9A) FMemStR8: Store 8-byte value into a field reached through a pointer held in a frame slot.
Encoding, evidence and notes
Encoding

Encoding: FD E5 (lead byte FD selects table 3), then 4 operand byte(s); total instruction length 6 byte(s).
vbdec template: [%a+%2]
Operands:

  1. %a: local_var_ref, 2 byte(s). signed 16-bit offset from the procedure frame pointer (EBP). Negative = local/temporary (vbdec var_XX, XX = -offset), positive = argument (arg_XX).
  2. %2 (+): immediate_word, 2 byte(s). 16-bit immediate.
Evidence and notes

Emitted by VB6 SP6 (P-code): not observed in about 3,070 probe programs. The slot exists in the runtime's dispatch table, but no tested source construct makes the compiler emit it.

Handler: 0x6610AFD2, shared by 3 dispatch slots (real opcode #151). This is a duplicate slot of (0,9A) FMemStR8. Other slots: (0,9A) FMemStR8, (3,E4) FMemStR8.

Family note: Phase 4: in ActiveX DLL/EXE projects, .bas module variables are per-thread. Every access goes through the per-thread data block whose pointer sits in a frame slot, and vbdec shows it as [this+off]. This family (and FMem_Store) is how such globals are read and written. Standard-EXE globals use ImpAd* instead.

Slots sharing this handler

(0,0x9A) FMemStR8, (3,0xE4) FMemStR8

Description: none. Handler 0x6610AFD2, dispatch slot 0x66107CA8, modOpcodes line 1074.

FMemStStr

(3,0xE7)emittedhandler #577Stringinferred_corpus
Store String into a field reached through a pointer held in a frame slot.

Pops a String (BSTR pointer); ownership of the BSTR is transferred and the old value is freed, and writes it to a field reached through a pointer held in a frame slot.

Stack: [..., v:Str] -> [...]

Operands: %a: frame slot holding the base pointer; %2: byte offset added to it.

Two observed uses: (1) ActiveX DLL/EXE module variables, where the frame slot holds the per-thread data block and vbdec shows [this+off]; (2) fields of a UDT passed ByRef, where the frame slot is the argument ([arg_C+off]).

When the compiler emits it

Emitted for assignments to a field reached through a pointer held in a frame slot when the value is a String. The storage class selects the prefix (FMem); the value class selects the suffix (Str).

VB6 source (verified: compiles to this slot)
Private Type TR
  s As String
  v As Variant
End Type
Dim gs As String, gr As TR

Public Sub Main()
  Dim s As String, v As Variant, a(3) As String, r As TR, i As Long
  gs = F()
End Sub

Function F() As String
End Function
' ---- modG.bas
Public ps As String
Encoding, evidence and notes
Encoding

Encoding: FD E7 (lead byte FD selects table 3), then 4 operand byte(s); total instruction length 6 byte(s).
vbdec template: [%a+%2]
Operands:

  1. %a: local_var_ref, 2 byte(s). signed 16-bit offset from the procedure frame pointer (EBP). Negative = local/temporary (vbdec var_XX, XX = -offset), positive = argument (arg_XX).
  2. %2 (+): immediate_word, 2 byte(s). 16-bit immediate.

Observed: FDE7 08000000 FMemStStr [this+0x0]

Examples
FDE7 08000000  FMemStStr [this+0x0]

From the Phase 4 probe (VB6 SP6, P-code).

Evidence and notes

Emitted by VB6 SP6 (P-code): yes. Minimal probe: probes\op\3_E7_FMemStStr.

Handler: 0x6610636C, unique to this slot (real opcode #577).

Family note: Phase 4: in ActiveX DLL/EXE projects, .bas module variables are per-thread. Every access goes through the per-thread data block whose pointer sits in a frame slot, and vbdec shows it as [this+off]. This family (and FMem_Store) is how such globals are read and written. Standard-EXE globals use ImpAd* instead.

Check of vb6_source_eq example: verified: compiles and emits this slot.

Example from the description
Private Type TR
  s As String
  v As Variant
End Type
Dim gs As String, gr As TR

Public Sub Main()
  Dim s As String, v As Variant, a(3) As String, r As TR, i As Long
  gs = F()
End Sub

Function F() As String
End Function
' ---- modG.bas
Public ps As String

Description: draft, by claude-opus-5-5. Handler 0x6610636C, dispatch slot 0x66107CB0, modOpcodes line 1044.

FMemStStrCopy

(0,0x54)emittedprimary of 2handler #82Stringinferred_corpus2 corpus hits
Store a value of suffix ` via [frame[%a] + offset] (FMemStStrCopy`).

Mirror of FMemLd*. Dereferences a frame slot for an object pointer, writes a value at the member offset.

When the compiler emits it

Emitted when writing a field of an object referenced by a local.

VB6 source (verified: compiles to this slot)
Dim g As String

Public Sub Main()
  g = "abc"
  Dim b As String
End Sub
Encoding, evidence and notes
Encoding

Encoding: 54, then 4 operand byte(s); total instruction length 5 byte(s).
vbdec template: [%a+%2]
Operands:

  1. %a: local_var_ref, 2 byte(s). signed 16-bit offset from the procedure frame pointer (EBP). Negative = local/temporary (vbdec var_XX, XX = -offset), positive = argument (arg_XX).
  2. %2 (+): immediate_word, 2 byte(s). 16-bit immediate.

Observed: 54 08000000 FMemStStrCopy [this+0x0]

Examples
modZLIB.Proc_43E804 @ 0x43E804 | 43E817    54 08000000           FMemStStrCopy [this+0x0]
modZLIB.Proc_43D3B4 @ 0x43D3B4 | 43D3B7    54 08000000           FMemStStrCopy [this+0x0]

2 occurrence(s) in PDFStreamDumper.

Evidence and notes

Emitted by VB6 SP6 (P-code): yes. Minimal probe: probes\op\0_54_FMemStStrCopy.

Handler: 0x66106386, shared by 2 dispatch slots (real opcode #82). This is the primary slot. Other slots: (3,F1) FMemStStrCopy.

Family note: Phase 4: in ActiveX DLL/EXE projects, .bas module variables are per-thread. Every access goes through the per-thread data block whose pointer sits in a frame slot, and vbdec shows it as [this+off]. This family (and FMem_Store) is how such globals are read and written. Standard-EXE globals use ImpAd* instead.

Corpus: 2 occurrence(s) in PDFStreamDumper_p.exe.

Slots sharing this handler

(3,0xF1) FMemStStrCopy

Description: draft, by claude-opus-4.7. Handler 0x66106386, dispatch slot 0x66106E64, modOpcodes line 1045.

FMemStStrCopy

(3,0xF1)not emitteddup of (0,54)handler #82Stringconfirmed_handler
Same handler as (0,0x54) FMemStStrCopy: Store a value of suffix ` via [frame[%a] + offset] (FMemStStrCopy`).
Encoding, evidence and notes
Encoding

Encoding: FD F1 (lead byte FD selects table 3), then 4 operand byte(s); total instruction length 6 byte(s).
vbdec template: [%a+%2]
Operands:

  1. %a: local_var_ref, 2 byte(s). signed 16-bit offset from the procedure frame pointer (EBP). Negative = local/temporary (vbdec var_XX, XX = -offset), positive = argument (arg_XX).
  2. %2 (+): immediate_word, 2 byte(s). 16-bit immediate.
Evidence and notes

Emitted by VB6 SP6 (P-code): not observed in about 3,070 probe programs. The slot exists in the runtime's dispatch table, but no tested source construct makes the compiler emit it.

Handler: 0x66106386, shared by 2 dispatch slots (real opcode #82). This is a duplicate slot of (0,54) FMemStStrCopy. Other slots: (0,54) FMemStStrCopy.

Family note: Phase 4: in ActiveX DLL/EXE projects, .bas module variables are per-thread. Every access goes through the per-thread data block whose pointer sits in a frame slot, and vbdec shows it as [this+off]. This family (and FMem_Store) is how such globals are read and written. Standard-EXE globals use ImpAd* instead.

Slots sharing this handler

(0,0x54) FMemStStrCopy

Description: none. Handler 0x66106386, dispatch slot 0x66107CD8, modOpcodes line 1085.

FMemStUI1

(3,0xE0)emittedhandler #575Integerinferred_corpus
Store Byte into a field reached through a pointer held in a frame slot.

Pops a Byte (stored as 1 byte, carried on the stack widened to 16/32 bits), and writes it to a field reached through a pointer held in a frame slot.

Stack: [..., v:UI1] -> [...]

Operands: %a: frame slot holding the base pointer; %2: byte offset added to it.

Two observed uses: (1) ActiveX DLL/EXE module variables, where the frame slot holds the per-thread data block and vbdec shows [this+off]; (2) fields of a UDT passed ByRef, where the frame slot is the argument ([arg_C+off]).

When the compiler emits it

Emitted for assignments to a field reached through a pointer held in a frame slot when the value is a Byte. The storage class selects the prefix (FMem); the value class selects the suffix (UI1).

VB6 source (verified: compiles to this slot)
Dim g As Byte

Public Sub Main()
  g = 7
  Dim b As Byte
End Sub
Encoding, evidence and notes
Encoding

Encoding: FD E0 (lead byte FD selects table 3), then 4 operand byte(s); total instruction length 6 byte(s).
vbdec template: [%a+%2]
Operands:

  1. %a: local_var_ref, 2 byte(s). signed 16-bit offset from the procedure frame pointer (EBP). Negative = local/temporary (vbdec var_XX, XX = -offset), positive = argument (arg_XX).
  2. %2 (+): immediate_word, 2 byte(s). 16-bit immediate.

Observed: FDE0 08000000 FMemStUI1 [this+0x0]

Examples
FDE0 08000000  FMemStUI1 [this+0x0]

From the Phase 4 probe (VB6 SP6, P-code).

Evidence and notes

Emitted by VB6 SP6 (P-code): yes. Minimal probe: probes\op\3_E0_FMemStUI1.

Handler: 0x6610AFB1, unique to this slot (real opcode #575).

Family note: Phase 4: in ActiveX DLL/EXE projects, .bas module variables are per-thread. Every access goes through the per-thread data block whose pointer sits in a frame slot, and vbdec shows it as [this+off]. This family (and FMem_Store) is how such globals are read and written. Standard-EXE globals use ImpAd* instead.

Check of vb6_source_eq example: verified: compiles and emits this slot.

Example from the description
Dim g As Byte

Public Sub Main()
  g = 7
  Dim b As Byte
End Sub

Description: draft, by claude-opus-5-5. Handler 0x6610AFB1, dispatch slot 0x66107C94, modOpcodes line 1069.

FMemStVar

(3,0xE6)emittedhandler #576Variantinferred_corpus
Store Variant into a field reached through a pointer held in a frame slot.

Pops a Variant (16 bytes); the source Variant is moved and the old destination value is cleared, and writes it to a field reached through a pointer held in a frame slot.

Stack: [..., v:Var] -> [...]

Operands: %a: frame slot holding the base pointer; %2: byte offset added to it.

Two observed uses: (1) ActiveX DLL/EXE module variables, where the frame slot holds the per-thread data block and vbdec shows [this+off]; (2) fields of a UDT passed ByRef, where the frame slot is the argument ([arg_C+off]).

When the compiler emits it

Emitted for assignments to a field reached through a pointer held in a frame slot when the value is a Variant. The storage class selects the prefix (FMem); the value class selects the suffix (Var).

VB6 source (verified: compiles to this slot)
Dim g As Variant

Public Sub Main()
  g = 5
  Dim b As Variant
End Sub
Encoding, evidence and notes
Encoding

Encoding: FD E6 (lead byte FD selects table 3), then 4 operand byte(s); total instruction length 6 byte(s).
vbdec template: [%a+%2]
Operands:

  1. %a: local_var_ref, 2 byte(s). signed 16-bit offset from the procedure frame pointer (EBP). Negative = local/temporary (vbdec var_XX, XX = -offset), positive = argument (arg_XX).
  2. %2 (+): immediate_word, 2 byte(s). 16-bit immediate.

Observed: FDE6 08000000 FMemStVar [this+0x0]

Examples
FDE6 08000000  FMemStVar [this+0x0]

From the Phase 4 probe (VB6 SP6, P-code).

Evidence and notes

Emitted by VB6 SP6 (P-code): yes. Minimal probe: probes\op\3_E6_FMemStVar.

Handler: 0x6610B72B, unique to this slot (real opcode #576).

Family note: Phase 4: in ActiveX DLL/EXE projects, .bas module variables are per-thread. Every access goes through the per-thread data block whose pointer sits in a frame slot, and vbdec shows it as [this+off]. This family (and FMem_Store) is how such globals are read and written. Standard-EXE globals use ImpAd* instead.

Check of vb6_source_eq example: verified: compiles and emits this slot.

Example from the description
Dim g As Variant

Public Sub Main()
  g = 5
  Dim b As Variant
End Sub

Description: draft, by claude-opus-5-5. Handler 0x6610B72B, dispatch slot 0x66107CAC, modOpcodes line 1075.

FMemStVarAd

(3,0xEB)emittedhandler #579Variantinferred_corpus
Store object into a Variant into a field reached through a pointer held in a frame slot.

Pops an object pointer stored into a Variant as VT_DISPATCH (Set v = obj), AddRef'd, and writes it to a field reached through a pointer held in a frame slot.

Stack: [..., v:Var] -> [...]

Operands: %a: frame slot holding the base pointer; %2: byte offset added to it.

Two observed uses: (1) ActiveX DLL/EXE module variables, where the frame slot holds the per-thread data block and vbdec shows [this+off]; (2) fields of a UDT passed ByRef, where the frame slot is the argument ([arg_C+off]).

When the compiler emits it

Emitted for assignments to a field reached through a pointer held in a frame slot when the value is a object into a Variant. The storage class selects the prefix (FMem); the value class selects the suffix (VarAd).

VB6 source (verified: compiles to this slot)
Dim gv As Variant, go As Object, gu As IUnknown

Public Sub Main()
  Dim o As Object, u As IUnknown
  Set gv = o
End Sub
Encoding, evidence and notes
Encoding

Encoding: FD EB (lead byte FD selects table 3), then 4 operand byte(s); total instruction length 6 byte(s).
vbdec template: [%a+%2]
Operands:

  1. %a: local_var_ref, 2 byte(s). signed 16-bit offset from the procedure frame pointer (EBP). Negative = local/temporary (vbdec var_XX, XX = -offset), positive = argument (arg_XX).
  2. %2 (+): immediate_word, 2 byte(s). 16-bit immediate.

Observed: FDEB 08000000 FMemStVarAd [this+0x0]

Examples
FDEB 08000000  FMemStVarAd [this+0x0]

From the Phase 4 probe (VB6 SP6, P-code).

Evidence and notes

Emitted by VB6 SP6 (P-code): yes. Minimal probe: probes\op\3_EB_FMemStVarAd.

Handler: 0x6610B4B1, unique to this slot (real opcode #579).

Family note: Phase 4: in ActiveX DLL/EXE projects, .bas module variables are per-thread. Every access goes through the per-thread data block whose pointer sits in a frame slot, and vbdec shows it as [this+off]. This family (and FMem_Store) is how such globals are read and written. Standard-EXE globals use ImpAd* instead.

Check of vb6_source_eq example: verified: compiles and emits this slot.

Example from the description
Dim gv As Variant, go As Object, gu As IUnknown

Public Sub Main()
  Dim o As Object, u As IUnknown
  Set gv = o
End Sub

Description: draft, by claude-opus-5-5. Handler 0x6610B4B1, dispatch slot 0x66107CC0, modOpcodes line 1079.

FMemStVarAdFunc

(3,0xEC)emittedhandler #580Variantinferred_corpus
Store object from a call into a Variant into a field reached through a pointer held in a frame slot.

Pops an object pointer returned by a call, stored into a Variant as VT_DISPATCH and adopted without an extra AddRef, and writes it to a field reached through a pointer held in a frame slot.

Stack: [..., v:Var] -> [...]

Operands: %a: frame slot holding the base pointer; %2: byte offset added to it.

Two observed uses: (1) ActiveX DLL/EXE module variables, where the frame slot holds the per-thread data block and vbdec shows [this+off]; (2) fields of a UDT passed ByRef, where the frame slot is the argument ([arg_C+off]).

When the compiler emits it

Emitted for assignments to a field reached through a pointer held in a frame slot when the value is a object from a call into a Variant. The storage class selects the prefix (FMem); the value class selects the suffix (VarAdFunc).

VB6 source (verified: compiles to this slot)
Dim gv As Variant, go As Object, gu As IUnknown

Public Sub Main()
  Dim o As Object, u As IUnknown
  Set gv = New Collection
End Sub
Encoding, evidence and notes
Encoding

Encoding: FD EC (lead byte FD selects table 3), then 4 operand byte(s); total instruction length 6 byte(s).
vbdec template: [%a+%2]
Operands:

  1. %a: local_var_ref, 2 byte(s). signed 16-bit offset from the procedure frame pointer (EBP). Negative = local/temporary (vbdec var_XX, XX = -offset), positive = argument (arg_XX).
  2. %2 (+): immediate_word, 2 byte(s). 16-bit immediate.

Observed: FDEC 08000000 FMemStVarAdFunc [this+0x0]

Examples
FDEC 08000000  FMemStVarAdFunc [this+0x0]

From the Phase 4 probe (VB6 SP6, P-code).

Evidence and notes

Emitted by VB6 SP6 (P-code): yes. Minimal probe: probes\op\3_EC_FMemStVarAdFunc.

Handler: 0x6610B490, unique to this slot (real opcode #580).

Family note: Phase 4: in ActiveX DLL/EXE projects, .bas module variables are per-thread. Every access goes through the per-thread data block whose pointer sits in a frame slot, and vbdec shows it as [this+off]. This family (and FMem_Store) is how such globals are read and written. Standard-EXE globals use ImpAd* instead.

Check of vb6_source_eq example: verified: compiles and emits this slot.

Example from the description
Dim gv As Variant, go As Object, gu As IUnknown

Public Sub Main()
  Dim o As Object, u As IUnknown
  Set gv = New Collection
End Sub

Description: draft, by claude-opus-5-5. Handler 0x6610B490, dispatch slot 0x66107CC4, modOpcodes line 1080.

FMemStVarCopy

(3,0xF0)emittedhandler #584Variantinferred_corpus
Store Variant (copied) into a field reached through a pointer held in a frame slot.

Pops a Variant, deep-copied with VariantCopy semantics; the old destination value is cleared, and writes it to a field reached through a pointer held in a frame slot.

Stack: [..., v:Var] -> [...]

Operands: %a: frame slot holding the base pointer; %2: byte offset added to it.

Two observed uses: (1) ActiveX DLL/EXE module variables, where the frame slot holds the per-thread data block and vbdec shows [this+off]; (2) fields of a UDT passed ByRef, where the frame slot is the argument ([arg_C+off]).

When the compiler emits it

Emitted for assignments to a field reached through a pointer held in a frame slot when the value is a Variant (copied). The storage class selects the prefix (FMem); the value class selects the suffix (VarCopy).

VB6 source (verified: compiles to this slot)
Private Type TRec
  pad As Long
  f As Variant
End Type

Public Sub Main()
  Dim r As TRec
End Sub

Private Sub P(x As TRec)
  Dim b As Variant
  x.f = b
  b = x.f
End Sub
Encoding, evidence and notes
Encoding

Encoding: FD F0 (lead byte FD selects table 3), then 4 operand byte(s); total instruction length 6 byte(s).
vbdec template: [%a+%2]
Operands:

  1. %a: local_var_ref, 2 byte(s). signed 16-bit offset from the procedure frame pointer (EBP). Negative = local/temporary (vbdec var_XX, XX = -offset), positive = argument (arg_XX).
  2. %2 (+): immediate_word, 2 byte(s). 16-bit immediate.

Observed: FDF0 0C000400 FMemStVarCopy [arg_C+0x4]

Examples
FDF0 0C000400  FMemStVarCopy [arg_C+0x4]

From the Phase 4 probe (VB6 SP6, P-code).

Evidence and notes

Emitted by VB6 SP6 (P-code): yes. Minimal probe: probes\op\3_F0_FMemStVarCopy.

Handler: 0x6610648A, unique to this slot (real opcode #584).

Family note: Phase 4: in ActiveX DLL/EXE projects, .bas module variables are per-thread. Every access goes through the per-thread data block whose pointer sits in a frame slot, and vbdec shows it as [this+off]. This family (and FMem_Store) is how such globals are read and written. Standard-EXE globals use ImpAd* instead.

Check of vb6_source_eq example: verified: compiles and emits this slot.

Example from the description
Private Type TRec
  pad As Long
  f As Variant
End Type

Public Sub Main()
  Dim r As TRec
End Sub

Private Sub P(x As TRec)
  Dim b As Variant
  x.f = b
  b = x.f
End Sub

Description: draft, by claude-opus-5-5. Handler 0x6610648A, dispatch slot 0x66107CD4, modOpcodes line 1084.

FMemStVarUnk

(3,0xED)emittedhandler #581Variantinferred_corpus
Store IUnknown into a Variant into a field reached through a pointer held in a frame slot.

Pops an IUnknown pointer stored into a Variant as VT_UNKNOWN (Set v = unk), AddRef'd, and writes it to a field reached through a pointer held in a frame slot.

Stack: [..., v:Var] -> [...]

Operands: %a: frame slot holding the base pointer; %2: byte offset added to it.

Two observed uses: (1) ActiveX DLL/EXE module variables, where the frame slot holds the per-thread data block and vbdec shows [this+off]; (2) fields of a UDT passed ByRef, where the frame slot is the argument ([arg_C+off]).

When the compiler emits it

Emitted for assignments to a field reached through a pointer held in a frame slot when the value is a IUnknown into a Variant. The storage class selects the prefix (FMem); the value class selects the suffix (VarUnk).

VB6 source (verified: compiles to this slot)
Dim gv As Variant, gu As IUnknown

Public Sub Main()
  Dim u As IUnknown
  Set gv = u
End Sub

Function FU() As IUnknown
End Function
Function FO() As Object
End Function
Function FC() As Collection
End Function
Encoding, evidence and notes
Encoding

Encoding: FD ED (lead byte FD selects table 3), then 4 operand byte(s); total instruction length 6 byte(s).
vbdec template: [%a+%2]
Operands:

  1. %a: local_var_ref, 2 byte(s). signed 16-bit offset from the procedure frame pointer (EBP). Negative = local/temporary (vbdec var_XX, XX = -offset), positive = argument (arg_XX).
  2. %2 (+): immediate_word, 2 byte(s). 16-bit immediate.

Observed: FDED 08000000 FMemStVarUnk [this+0x0]

Examples
FDED 08000000  FMemStVarUnk [this+0x0]

From the Phase 4 probe (VB6 SP6, P-code).

Evidence and notes

Emitted by VB6 SP6 (P-code): yes. Minimal probe: probes\op\3_ED_FMemStVarUnk.

Handler: 0x6610B652, unique to this slot (real opcode #581).

Family note: Phase 4: in ActiveX DLL/EXE projects, .bas module variables are per-thread. Every access goes through the per-thread data block whose pointer sits in a frame slot, and vbdec shows it as [this+off]. This family (and FMem_Store) is how such globals are read and written. Standard-EXE globals use ImpAd* instead.

Check of vb6_source_eq example: verified: compiles and emits this slot.

Example from the description
Dim gv As Variant, gu As IUnknown

Public Sub Main()
  Dim u As IUnknown
  Set gv = u
End Sub

Function FU() As IUnknown
End Function
Function FO() As Object
End Function
Function FC() As Collection
End Function

Description: draft, by claude-opus-5-5. Handler 0x6610B652, dispatch slot 0x66107CC8, modOpcodes line 1081.

FMemStVarUnkFunc

(3,0xEE)emittedhandler #582Variantinferred_corpus
Store IUnknown from a call into a Variant into a field reached through a pointer held in a frame slot.

Pops an IUnknown pointer returned by a call, stored into a Variant as VT_UNKNOWN without an extra AddRef, and writes it to a field reached through a pointer held in a frame slot.

Stack: [..., v:Var] -> [...]

Operands: %a: frame slot holding the base pointer; %2: byte offset added to it.

Two observed uses: (1) ActiveX DLL/EXE module variables, where the frame slot holds the per-thread data block and vbdec shows [this+off]; (2) fields of a UDT passed ByRef, where the frame slot is the argument ([arg_C+off]).

When the compiler emits it

Emitted for assignments to a field reached through a pointer held in a frame slot when the value is a IUnknown from a call into a Variant. The storage class selects the prefix (FMem); the value class selects the suffix (VarUnkFunc).

VB6 source (verified: compiles to this slot)
Dim gv As Variant, gu As IUnknown

Public Sub Main()
  Dim u As IUnknown
  Set gv = FU()
End Sub

Function FU() As IUnknown
End Function
Function FO() As Object
End Function
Function FC() As Collection
End Function
Encoding, evidence and notes
Encoding

Encoding: FD EE (lead byte FD selects table 3), then 4 operand byte(s); total instruction length 6 byte(s).
vbdec template: [%a+%2]
Operands:

  1. %a: local_var_ref, 2 byte(s). signed 16-bit offset from the procedure frame pointer (EBP). Negative = local/temporary (vbdec var_XX, XX = -offset), positive = argument (arg_XX).
  2. %2 (+): immediate_word, 2 byte(s). 16-bit immediate.

Observed: FDEE 08000000 FMemStVarUnkFunc [this+0x0]

Examples
FDEE 08000000  FMemStVarUnkFunc [this+0x0]

From the Phase 4 probe (VB6 SP6, P-code).

Evidence and notes

Emitted by VB6 SP6 (P-code): yes. Minimal probe: probes\op\3_EE_FMemStVarUnkFunc.

Handler: 0x6610B62D, unique to this slot (real opcode #582).

Family note: Phase 4: in ActiveX DLL/EXE projects, .bas module variables are per-thread. Every access goes through the per-thread data block whose pointer sits in a frame slot, and vbdec shows it as [this+off]. This family (and FMem_Store) is how such globals are read and written. Standard-EXE globals use ImpAd* instead.

Check of vb6_source_eq example: verified: compiles and emits this slot.

Example from the description
Dim gv As Variant, gu As IUnknown

Public Sub Main()
  Dim u As IUnknown
  Set gv = FU()
End Sub

Function FU() As IUnknown
End Function
Function FO() As Object
End Function
Function FC() As Collection
End Function

Description: draft, by claude-opus-5-5. Handler 0x6610B62D, dispatch slot 0x66107CCC, modOpcodes line 1082.

F_Load

Frame-relative load (variable at [ebp+%a]) Prefix: F = frame (local var or arg)

FLdFPR4

(0,0x6E)emittedprimary of 2handler #107Floating pointinferred_corpus122 corpus hits
Frame-relative load: FLdFPR4.

Loads a local variable or argument from the current stack frame [ebp+%a] onto the stack. Suffix encodes the result form: FPR4.

When the compiler emits it

Emitted for every read of a typed local or argument outside of specialized paths.

VB6 source (verified: compiles to this slot)
Public Sub Main()
  Dim a As Single, c As Single
  c = CSng(a)
End Sub
Encoding, evidence and notes
Encoding

Encoding: 6E, then 2 operand byte(s); total instruction length 3 byte(s).
vbdec template: %a
Operands:

  1. %a: local_var_ref, 2 byte(s). signed 16-bit offset from the procedure frame pointer (EBP). Negative = local/temporary (vbdec var_XX, XX = -offset), positive = argument (arg_XX).

Observed: 6E 78FF FLdFPR4 var_88

Examples
Form1.Form_Resize @ 0x474F3C | 474F5E    6E 70FF               FLdFPR4 var_90
Form1.Form_Resize @ 0x474F3C | 474F83    6E 70FF               FLdFPR4 var_90
Form1.Form_Resize @ 0x474F3C | 474F9A    6E 70FF               FLdFPR4 var_90

122 occurrence(s) in PDFStreamDumper.

Evidence and notes

Emitted by VB6 SP6 (P-code): yes. Minimal probe: probes\op\0_6E_FLdFPR4.

Handler: 0x66105651, shared by 2 dispatch slots (real opcode #107). This is the primary slot. Other slots: (2,E9) FLdFPR4.

Corpus: 122 occurrence(s) in PDFStreamDumper_p.exe.

Slots sharing this handler

(2,0xE9) FLdFPR4

Description: draft, by claude-opus-4.7. Handler 0x66105651, dispatch slot 0x66106ECC, modOpcodes line 1097.

FLdFPR4

(2,0xE9)not emitteddup of (0,6E)handler #107Floating pointconfirmed_handler
Same handler as (0,0x6E) FLdFPR4: Frame-relative load: FLdFPR4.
Encoding, evidence and notes
Encoding

Encoding: FC E9 (lead byte FC selects table 2), then 2 operand byte(s); total instruction length 4 byte(s).
vbdec template: %a
Operands:

  1. %a: local_var_ref, 2 byte(s). signed 16-bit offset from the procedure frame pointer (EBP). Negative = local/temporary (vbdec var_XX, XX = -offset), positive = argument (arg_XX).
Evidence and notes

Emitted by VB6 SP6 (P-code): not observed in about 3,070 probe programs. The slot exists in the runtime's dispatch table, but no tested source construct makes the compiler emit it.

Handler: 0x66105651, shared by 2 dispatch slots (real opcode #107). This is a duplicate slot of (0,6E) FLdFPR4. Other slots: (0,6E) FLdFPR4.

Slots sharing this handler

(0,0x6E) FLdFPR4

Description: none. Handler 0x66105651, dispatch slot 0x661078B8, modOpcodes line 1113.

FLdFPR8

(0,0x6F)emittedprimary of 2handler #108Floating pointinferred_corpus11 corpus hits
Frame-relative load: FLdFPR8.

Loads a local variable or argument from the current stack frame [ebp+%a] onto the stack. Suffix encodes the result form: FPR8.

When the compiler emits it

Emitted for every read of a typed local or argument outside of specialized paths.

VB6 source (verified: compiles to this slot)
Public Sub Main()
  Dim d As Date, v As Variant
  v = d
End Sub
Encoding, evidence and notes
Encoding

Encoding: 6F, then 2 operand byte(s); total instruction length 3 byte(s).
vbdec template: %a
Operands:

  1. %a: local_var_ref, 2 byte(s). signed 16-bit offset from the procedure frame pointer (EBP). Negative = local/temporary (vbdec var_XX, XX = -offset), positive = argument (arg_XX).

Observed: 6F 74FF FLdFPR8 var_8C

Examples
Form2.LongHex @ 0x441B00 | 441B02    6F 0C00               FLdFPR8 arg_C
Form2.LongHex @ 0x441B00 | 441B0E    6F 0C00               FLdFPR8 arg_C
Form2.LongHex @ 0x441B00 | 441B11    6F 70FF               FLdFPR8 var_90

11 occurrence(s) in PDFStreamDumper.

Evidence and notes

Emitted by VB6 SP6 (P-code): yes. Minimal probe: probes\op\0_6F_FLdFPR8.

Handler: 0x66105666, shared by 2 dispatch slots (real opcode #108). This is the primary slot. Other slots: (2,EA) FLdFPR8.

Corpus: 11 occurrence(s) in PDFStreamDumper_p.exe.

Slots sharing this handler

(2,0xEA) FLdFPR8

Description: draft, by claude-opus-4.7. Handler 0x66105666, dispatch slot 0x66106ED0, modOpcodes line 1098.

FLdFPR8

(2,0xEA)not emitteddup of (0,6F)handler #108Floating pointconfirmed_handler
Same handler as (0,0x6F) FLdFPR8: Frame-relative load: FLdFPR8.
Encoding, evidence and notes
Encoding

Encoding: FC EA (lead byte FC selects table 2), then 2 operand byte(s); total instruction length 4 byte(s).
vbdec template: %a
Operands:

  1. %a: local_var_ref, 2 byte(s). signed 16-bit offset from the procedure frame pointer (EBP). Negative = local/temporary (vbdec var_XX, XX = -offset), positive = argument (arg_XX).
Evidence and notes

Emitted by VB6 SP6 (P-code): not observed in about 3,070 probe programs. The slot exists in the runtime's dispatch table, but no tested source construct makes the compiler emit it.

Handler: 0x66105666, shared by 2 dispatch slots (real opcode #108). This is a duplicate slot of (0,6F) FLdFPR8. Other slots: (0,6F) FLdFPR8.

Slots sharing this handler

(0,0x6F) FLdFPR8

Description: none. Handler 0x66105666, dispatch slot 0x661078BC, modOpcodes line 1114.

FLdI2

(0,0x6B)emittedprimary of 2handler #104Integerinferred_corpus383 corpus hits
Frame-relative load: FLdI2.

Loads a local variable or argument from the current stack frame [ebp+%a] onto the stack. Suffix encodes the result form: I2.

When the compiler emits it

Emitted for every read of a typed local or argument outside of specialized paths.

VB6 source (verified: compiles to this slot)
Public Sub Main()
  Dim a As Boolean, c As Boolean
  c = CBool(a)
End Sub
Encoding, evidence and notes
Encoding

Encoding: 6B, then 2 operand byte(s); total instruction length 3 byte(s).
vbdec template: [%a]
Operands:

  1. %a: local_var_ref, 2 byte(s). signed 16-bit offset from the procedure frame pointer (EBP). Negative = local/temporary (vbdec var_XX, XX = -offset), positive = argument (arg_XX).

Observed: 6B 7AFF FLdI2 [var_86]

Examples
Form1.LoadPlugins @ 0x4644FC | 4645EF    6B A2FE               FLdI2 [var_15E]
Form1.LoadPlugins @ 0x4644FC | 464630    6B 76FF               FLdI2 [var_8A]
Form1.LoadPlugins @ 0x4644FC | 464646    6B 76FF               FLdI2 [var_8A]

383 occurrence(s) in PDFStreamDumper.

Evidence and notes

Emitted by VB6 SP6 (P-code): yes. Minimal probe: probes\op\0_6B_FLdI2.

Handler: 0x66105609, shared by 2 dispatch slots (real opcode #104). This is the primary slot. Other slots: (2,E1) FLdI2.

Corpus: 383 occurrence(s) in PDFStreamDumper_p.exe.

Slots sharing this handler

(2,0xE1) FLdI2

Description: draft, by claude-opus-4.7. Handler 0x66105609, dispatch slot 0x66106EC0, modOpcodes line 1095.

FLdI2

(2,0xE1)not emitteddup of (0,6B)handler #104Integerconfirmed_handler
Same handler as (0,0x6B) FLdI2: Frame-relative load: FLdI2.
Encoding, evidence and notes
Encoding

Encoding: FC E1 (lead byte FC selects table 2), then 2 operand byte(s); total instruction length 4 byte(s).
vbdec template: %a
Operands:

  1. %a: local_var_ref, 2 byte(s). signed 16-bit offset from the procedure frame pointer (EBP). Negative = local/temporary (vbdec var_XX, XX = -offset), positive = argument (arg_XX).
Evidence and notes

Emitted by VB6 SP6 (P-code): not observed in about 3,070 probe programs. The slot exists in the runtime's dispatch table, but no tested source construct makes the compiler emit it.

Handler: 0x66105609, shared by 2 dispatch slots (real opcode #104). This is a duplicate slot of (0,6B) FLdI2. Other slots: (0,6B) FLdI2.

Slots sharing this handler

(0,0x6B) FLdI2

Description: none. Handler 0x66105609, dispatch slot 0x66107898, modOpcodes line 1105.

FLdLateIdUnkVar

(2,0x74)not emittedhandler #408Object / COMinferred_corpus
No description yet.
Encoding, evidence and notes
Encoding

Encoding: FC 74 (lead byte FC selects table 2), then 8 operand byte(s); total instruction length 10 byte(s).
No printf operands are declared, but the instruction still consumes operand bytes; see the size above and the observed bytes below. (Phase 3a: flag=0 does not mean 'no operands'.)

Evidence and notes

Emitted by VB6 SP6 (P-code): not observed in about 3,070 probe programs. The slot exists in the runtime's dispatch table, but no tested source construct makes the compiler emit it.

Handler: 0x6610A802, unique to this slot (real opcode #408).

Description: none. Handler 0x6610A802, dispatch slot 0x661076E4, modOpcodes line 1155.

FLdPr

(0,0x08)emittedprimary of 2handler #7Object / COMinferred_corpus3260 corpus hits
Load an object reference from a frame slot into the cached object register pr.

Loads a 4-byte object reference from a frame slot and pushes the raw pointer onto the stack. The slot at [ebp+%a] typically holds an IDispatch* or IUnknown* previously stored by FStAd/FStAdFunc. No reference counting is performed by this opcode -- the pointer is loaded as-is and ref-count balance is the caller's responsibility (the compiler arranges matching FFree1Ad/AddRef opcodes around the use).

Stack: [...] -> [..., (*[ebp+%a]):Pr]

Used as the receiver for VCall*/LateMemCall*, and as the this argument to module helpers that take an object pointer. Distinct from FLdRfVar (Variant slot reference, not an object pointer) and FLdPrThis (no operand; pushes the implicit Me).

When the compiler emits it

Emitted before member calls and field access on a local, temporary or ByVal-copied object variable (o.Method, o.Prop). Class members use FLdPrThis; ByRef object parameters use ILdPr.

VB6 source (verified: compiles to this slot)
Public Sub Main()
  Dim o As Object, v As Variant
  v = o.Prop
End Sub
Encoding, evidence and notes
Encoding

Encoding: 08, then 2 operand byte(s); total instruction length 3 byte(s).
vbdec template: %a
Operands:

  1. %a: local_var_ref, 2 byte(s). signed 16-bit offset from the procedure frame pointer (EBP). Negative = local/temporary (vbdec var_XX, XX = -offset), positive = argument (arg_XX).

Observed: 08 78FF FLdPr var_88

Examples
Form1.LoadPlugins @ 0x4644FC | 464516    08 68FF               FLdPr var_98
Form1.LoadPlugins @ 0x4644FC | 46455D    08 68FF               FLdPr var_98
Form1.LoadPlugins @ 0x4644FC | 46456E    08 B0FE               FLdPr var_150

3260 occurrence(s) in PDFStreamDumper.

Evidence and notes

Emitted by VB6 SP6 (P-code): yes. Minimal probe: probes\op\0_08_FLdPr.

Handler: 0x661062AA, shared by 2 dispatch slots (real opcode #7). This is the primary slot. Other slots: (2,EB) FLdPr.

Check of vb6_source_eq example: verified: compiles and emits this slot.

Corpus: 3260 occurrence(s) in PDFStreamDumper_p.exe.

Example from the description
Dim c As Collection, n As Long
Set c = New Collection
n = c.Count
Slots sharing this handler

(2,0xEB) FLdPr

Description: draft, by claude-opus-5-5. Handler 0x661062AA, dispatch slot 0x66106D34, modOpcodes line 1090.

FLdPr

(2,0xEB)not emitteddup of (0,08)handler #7Object / COMconfirmed_handler
Same handler as (0,0x08) FLdPr: Load an object reference from a frame slot into the cached object register pr.
Encoding, evidence and notes
Encoding

Encoding: FC EB (lead byte FC selects table 2), then 2 operand byte(s); total instruction length 4 byte(s).
vbdec template: %a
Operands:

  1. %a: local_var_ref, 2 byte(s). signed 16-bit offset from the procedure frame pointer (EBP). Negative = local/temporary (vbdec var_XX, XX = -offset), positive = argument (arg_XX).
Evidence and notes

Emitted by VB6 SP6 (P-code): not observed in about 3,070 probe programs. The slot exists in the runtime's dispatch table, but no tested source construct makes the compiler emit it.

Handler: 0x661062AA, shared by 2 dispatch slots (real opcode #7). This is a duplicate slot of (0,08) FLdPr. Other slots: (0,08) FLdPr.

Slots sharing this handler

(0,0x08) FLdPr

Description: none. Handler 0x661062AA, dispatch slot 0x661078C0, modOpcodes line 1091.

FLdPrThis

(0,0x21)emittedprimary of 2handler #32Object / COMconfirmed_msdocs1256 corpus hits
Load Me for a call on the host object's built-in interface (form, UserControl, UserDocument).

Pushes the current instance's interface pointer (Me, as the VB Form/UserControl interface) for the VCall that follows.

Stack: [...] -> [..., Me:Pr]

When the compiler emits it

Emitted inside form, control and document modules for unqualified use of the host's built-in members and controls: TextHeight("a"), Caption, Text1.Text (the control is fetched from Me). Access to the module's own variables uses FLdPr this + Mem*, and calls to its own procedures use ThisVCallHresult, so this opcode is never emitted in class or standard modules.

VB6 source (verified: compiles to this slot)
Public Sub Main()
  
End Sub
' ---- Form1.frm
Public Sub Work()
  Dim x As Single, n As Long, b As Boolean, i As Integer, c As Currency, s As String, y As Single, u As Integer, d As Single, v As Variant, o As Object, p As StdPicture
  On Error Resume Next
  s = Caption
End Sub
Encoding, evidence and notes
Encoding

Encoding: 21, then 0 operand byte(s); total instruction length 1 byte(s).
Operands: none. All inputs come from the evaluation stack or the frame.
Observed: 21 FLdPrThis

Examples
Form1.LoadPlugins @ 0x4644FC | 464556    21                    FLdPrThis
Form1.RegisterPlugin @ 0x44CB20 | 44CB25    21                    FLdPrThis
Form1.RegisterPlugin @ 0x44CB20 | 44CB43    21                    FLdPrThis

1256 occurrence(s) in PDFStreamDumper.

Evidence and notes

Emitted by VB6 SP6 (P-code): yes. Minimal probe: probes\op\0_21_FLdPrThis.

Handler: 0x66105690, shared by 2 dispatch slots (real opcode #32). This is the primary slot. Other slots: (3,9E) FLdPrThis.

Check of vb6_source_eq example: verified: compiles and emits this slot.

Corpus: 1256 occurrence(s) in PDFStreamDumper_p.exe.

Example from the description
Form1.Work
' ---- Form1.frm
Public Sub Work()
  Dim h As Single
  h = TextHeight("a")
End Sub
Slots sharing this handler

(3,0x9E) FLdPrThis

Description: draft, by claude-opus-5-5. Handler 0x66105690, dispatch slot 0x66106D98, modOpcodes line 1087.

FLdPrThis

(3,0x9E)not emitteddup of (0,21)handler #32Object / COMconfirmed_handler
(alias) Frame-relative load: FLdPrThis.

Alias dispatch slot (3, 0x9E) for the canonical FLdPrThis at (0, 0x21); semantics are identical.

Loads a local variable or argument from the current stack frame [ebp+%a] onto the stack. Suffix encodes the result form: ``.

When the compiler emits it

Emitted for every read of a typed local or argument outside of specialized paths.

Encoding, evidence and notes
Encoding

Encoding: FD 9E (lead byte FD selects table 3), then 0 operand byte(s); total instruction length 2 byte(s).
Operands: none. All inputs come from the evaluation stack or the frame.

Evidence and notes

Emitted by VB6 SP6 (P-code): not observed in about 3,070 probe programs. The slot exists in the runtime's dispatch table, but no tested source construct makes the compiler emit it.

Handler: 0x66105690, shared by 2 dispatch slots (real opcode #32). This is a duplicate slot of (0,21) FLdPrThis. Other slots: (0,21) FLdPrThis.

Slots sharing this handler

(0,0x21) FLdPrThis

Description: draft, by claude-opus-4.7. Handler 0x66105690, dispatch slot 0x66107B8C, modOpcodes line 1088.

FLdR4

(2,0xE2)not emitteddup of (0,6C)handler #105Integerinferred_corpus
Same handler as (0,0x6C) ILdRf: Re-load the pointer held in a ByRef frame slot [ebp+%a]; push it as a typed reference.
Encoding, evidence and notes
Encoding

Encoding: FC E2 (lead byte FC selects table 2), then 2 operand byte(s); total instruction length 4 byte(s).
vbdec template: %a
Operands:

  1. %a: local_var_ref, 2 byte(s). signed 16-bit offset from the procedure frame pointer (EBP). Negative = local/temporary (vbdec var_XX, XX = -offset), positive = argument (arg_XX).
Evidence and notes

Emitted by VB6 SP6 (P-code): not observed in about 3,070 probe programs. The slot exists in the runtime's dispatch table, but no tested source construct makes the compiler emit it.

Handler: 0x66105620, shared by 6 dispatch slots (real opcode #105). This is a duplicate slot of (0,6C) ILdRf. Other slots: (0,6C) ILdRf, (2,E3) FLdR4, (2,E7) FLdR4, (2,E8) FLdR4, (3,1C) FLdR4.

Slots sharing this handler

(0,0x6C) ILdRf, (2,0xE3) FLdR4, (2,0xE7) FLdR4, (2,0xE8) FLdR4, (3,0x1C) FLdR4

Description: none. Handler 0x66105620, dispatch slot 0x6610789C, modOpcodes line 1106.

FLdR4

(2,0xE3)not emitteddup of (0,6C)handler #105Integerconfirmed_handler
Same handler as (0,0x6C) ILdRf: Re-load the pointer held in a ByRef frame slot [ebp+%a]; push it as a typed reference.
Encoding, evidence and notes
Encoding

Encoding: FC E3 (lead byte FC selects table 2), then 2 operand byte(s); total instruction length 4 byte(s).
vbdec template: %a
Operands:

  1. %a: local_var_ref, 2 byte(s). signed 16-bit offset from the procedure frame pointer (EBP). Negative = local/temporary (vbdec var_XX, XX = -offset), positive = argument (arg_XX).
Evidence and notes

Emitted by VB6 SP6 (P-code): not observed in about 3,070 probe programs. The slot exists in the runtime's dispatch table, but no tested source construct makes the compiler emit it.

Handler: 0x66105620, shared by 6 dispatch slots (real opcode #105). This is a duplicate slot of (0,6C) ILdRf. Other slots: (0,6C) ILdRf, (2,E2) FLdR4, (2,E7) FLdR4, (2,E8) FLdR4, (3,1C) FLdR4.

Slots sharing this handler

(0,0x6C) ILdRf, (2,0xE2) FLdR4, (2,0xE7) FLdR4, (2,0xE8) FLdR4, (3,0x1C) FLdR4

Description: none. Handler 0x66105620, dispatch slot 0x661078A0, modOpcodes line 1107.

FLdR4

(2,0xE7)not emitteddup of (0,6C)handler #105Integerconfirmed_handler
Same handler as (0,0x6C) ILdRf: Re-load the pointer held in a ByRef frame slot [ebp+%a]; push it as a typed reference.
Encoding, evidence and notes
Encoding

Encoding: FC E7 (lead byte FC selects table 2), then 2 operand byte(s); total instruction length 4 byte(s).
vbdec template: %a
Operands:

  1. %a: local_var_ref, 2 byte(s). signed 16-bit offset from the procedure frame pointer (EBP). Negative = local/temporary (vbdec var_XX, XX = -offset), positive = argument (arg_XX).
Evidence and notes

Emitted by VB6 SP6 (P-code): not observed in about 3,070 probe programs. The slot exists in the runtime's dispatch table, but no tested source construct makes the compiler emit it.

Handler: 0x66105620, shared by 6 dispatch slots (real opcode #105). This is a duplicate slot of (0,6C) ILdRf. Other slots: (0,6C) ILdRf, (2,E2) FLdR4, (2,E3) FLdR4, (2,E8) FLdR4, (3,1C) FLdR4.

Slots sharing this handler

(0,0x6C) ILdRf, (2,0xE2) FLdR4, (2,0xE3) FLdR4, (2,0xE8) FLdR4, (3,0x1C) FLdR4

Description: none. Handler 0x66105620, dispatch slot 0x661078B0, modOpcodes line 1109.

FLdR4

(2,0xE8)not emitteddup of (0,6C)handler #105Integerconfirmed_handler
Same handler as (0,0x6C) ILdRf: Re-load the pointer held in a ByRef frame slot [ebp+%a]; push it as a typed reference.
Encoding, evidence and notes
Encoding

Encoding: FC E8 (lead byte FC selects table 2), then 2 operand byte(s); total instruction length 4 byte(s).
vbdec template: %a
Operands:

  1. %a: local_var_ref, 2 byte(s). signed 16-bit offset from the procedure frame pointer (EBP). Negative = local/temporary (vbdec var_XX, XX = -offset), positive = argument (arg_XX).
Evidence and notes

Emitted by VB6 SP6 (P-code): not observed in about 3,070 probe programs. The slot exists in the runtime's dispatch table, but no tested source construct makes the compiler emit it.

Handler: 0x66105620, shared by 6 dispatch slots (real opcode #105). This is a duplicate slot of (0,6C) ILdRf. Other slots: (0,6C) ILdRf, (2,E2) FLdR4, (2,E3) FLdR4, (2,E7) FLdR4, (3,1C) FLdR4.

Slots sharing this handler

(0,0x6C) ILdRf, (2,0xE2) FLdR4, (2,0xE3) FLdR4, (2,0xE7) FLdR4, (3,0x1C) FLdR4

Description: none. Handler 0x66105620, dispatch slot 0x661078B4, modOpcodes line 1110.

FLdR4

(3,0x1C)not emitteddup of (0,6C)handler #105Integerconfirmed_handler
Same handler as (0,0x6C) ILdRf: Re-load the pointer held in a ByRef frame slot [ebp+%a]; push it as a typed reference.
Encoding, evidence and notes
Encoding

Encoding: FD 1C (lead byte FD selects table 3), then 2 operand byte(s); total instruction length 4 byte(s).
vbdec template: %a
Operands:

  1. %a: local_var_ref, 2 byte(s). signed 16-bit offset from the procedure frame pointer (EBP). Negative = local/temporary (vbdec var_XX, XX = -offset), positive = argument (arg_XX).
Evidence and notes

Emitted by VB6 SP6 (P-code): not observed in about 3,070 probe programs. The slot exists in the runtime's dispatch table, but no tested source construct makes the compiler emit it.

Handler: 0x66105620, shared by 6 dispatch slots (real opcode #105). This is a duplicate slot of (0,6C) ILdRf. Other slots: (0,6C) ILdRf, (2,E2) FLdR4, (2,E3) FLdR4, (2,E7) FLdR4, (2,E8) FLdR4.

Slots sharing this handler

(0,0x6C) ILdRf, (2,0xE2) FLdR4, (2,0xE3) FLdR4, (2,0xE7) FLdR4, (2,0xE8) FLdR4

Description: none. Handler 0x66105620, dispatch slot 0x66107984, modOpcodes line 1108.

FLdR8

(0,0x6D)emittedprimary of 3handler #106Currencyinferred_corpus
Load 8-byte value from a frame slot (local variable, temporary or ByVal argument).

Reads a raw 64-bit value (in practice a Currency; Double/Date use the FPR8 forms), and pushes it from a frame slot (local variable, temporary or ByVal argument).

Stack: [...] -> [..., v:R8]

Operands: %a: signed 16-bit frame offset.

Locals, compiler temporaries and ByVal arguments.

The R8 suffix denotes a raw 8-byte move, not a floating-point type. Phase 4 probes show it used for Currency values. Single/Double values use the FPR4/FPR8 forms.

When the compiler emits it

Emitted for reads of a frame slot (local variable, temporary or ByVal argument) when the value is a 8-byte value. The storage class selects the prefix (F); the value class selects the suffix (R8).

VB6 source (verified: compiles to this slot)
Public Sub Main()
  Dim c As Currency, v As Variant
  v = c
End Sub
Encoding, evidence and notes
Encoding

Encoding: 6D, then 2 operand byte(s); total instruction length 3 byte(s).
vbdec template: %a
Operands:

  1. %a: local_var_ref, 2 byte(s). signed 16-bit offset from the procedure frame pointer (EBP). Negative = local/temporary (vbdec var_XX, XX = -offset), positive = argument (arg_XX).

Observed: 6D 74FF FLdR8 var_8C

Examples
6D 74FF  FLdR8 var_8C

From the Phase 4 probe (VB6 SP6, P-code).

Evidence and notes

Emitted by VB6 SP6 (P-code): yes. Minimal probe: probes\op\0_6D_FLdR8.

Handler: 0x66109DB0, shared by 3 dispatch slots (real opcode #106). This is the primary slot. Other slots: (2,E4) FLdR8, (2,E5) FLdR8.

Check of vb6_source_eq example: verified: compiles and emits this slot.

Example from the description
Public Sub Main()
  Dim c As Currency, v As Variant
  v = c
End Sub
Slots sharing this handler

(2,0xE4) FLdR8, (2,0xE5) FLdR8

Description: draft, by claude-opus-5-5. Handler 0x66109DB0, dispatch slot 0x66106EC8, modOpcodes line 1096.

FLdR8

(2,0xE4)not emitteddup of (0,6D)handler #106Currencyconfirmed_handler
Same handler as (0,0x6D) FLdR8: Load 8-byte value from a frame slot (local variable, temporary or ByVal argument).
Encoding, evidence and notes
Encoding

Encoding: FC E4 (lead byte FC selects table 2), then 2 operand byte(s); total instruction length 4 byte(s).
vbdec template: %a
Operands:

  1. %a: local_var_ref, 2 byte(s). signed 16-bit offset from the procedure frame pointer (EBP). Negative = local/temporary (vbdec var_XX, XX = -offset), positive = argument (arg_XX).
Evidence and notes

Emitted by VB6 SP6 (P-code): not observed in about 3,070 probe programs. The slot exists in the runtime's dispatch table, but no tested source construct makes the compiler emit it.

Handler: 0x66109DB0, shared by 3 dispatch slots (real opcode #106). This is a duplicate slot of (0,6D) FLdR8. Other slots: (0,6D) FLdR8, (2,E5) FLdR8.

Slots sharing this handler

(0,0x6D) FLdR8, (2,0xE5) FLdR8

Description: none. Handler 0x66109DB0, dispatch slot 0x661078A4, modOpcodes line 1111.

FLdR8

(2,0xE5)not emitteddup of (0,6D)handler #106Currencyconfirmed_handler
Same handler as (0,0x6D) FLdR8: Load 8-byte value from a frame slot (local variable, temporary or ByVal argument).
Encoding, evidence and notes
Encoding

Encoding: FC E5 (lead byte FC selects table 2), then 2 operand byte(s); total instruction length 4 byte(s).
vbdec template: %a
Operands:

  1. %a: local_var_ref, 2 byte(s). signed 16-bit offset from the procedure frame pointer (EBP). Negative = local/temporary (vbdec var_XX, XX = -offset), positive = argument (arg_XX).
Evidence and notes

Emitted by VB6 SP6 (P-code): not observed in about 3,070 probe programs. The slot exists in the runtime's dispatch table, but no tested source construct makes the compiler emit it.

Handler: 0x66109DB0, shared by 3 dispatch slots (real opcode #106). This is a duplicate slot of (0,6D) FLdR8. Other slots: (0,6D) FLdR8, (2,E4) FLdR8.

Slots sharing this handler

(0,0x6D) FLdR8, (2,0xE4) FLdR8

Description: none. Handler 0x66109DB0, dispatch slot 0x661078A8, modOpcodes line 1112.

FLdRfVar

(0,0x04)emittedprimary of 3handler #3Stack & frameinferred_corpus6566 corpus hits
Push a reference (ByRef pointer) to a Variant local/argument at [ebp+%a].

Loads a pointer to a Variant-typed frame slot onto the stack. The slot lives at [ebp+%a] where %a is a 2-byte signed offset (rendered as var_xx by vbdec). Unlike FLdVar, which copies the Variant value onto the stack, FLdRfVar pushes the slot address itself -- the receiver writes through it.

Stack: [...] -> [..., &([ebp+%a]):RfVar]

By a wide margin the most-emitted opcode in typical VB6 P-code (6566 occurrences in PDFStreamDumper), because every Variant argument passed to a runtime helper or user procedure travels as a ByRef slot reference rather than as a value copy. Sibling FLdRf plays the same role for typed (non-Variant) slots; FLdVar is selected only when a value copy is required (ByVal Variant arg, expression temp).

When the compiler emits it

Emitted on every read of a Variant local or argument whose value is going to be passed to or modified through a ByRef sink -- which in practice is most of them. FLdVar is selected only where a value copy is genuinely required.

VB6 source (verified: compiles to this slot)
Private Declare Sub Ext Lib "x.dll" (b As Object)

Public Sub Main()
  Dim b As Object
  Ext b
End Sub
Encoding, evidence and notes
Encoding

Encoding: 04, then 2 operand byte(s); total instruction length 3 byte(s).
vbdec template: %a
Operands:

  1. %a: local_var_ref, 2 byte(s). signed 16-bit offset from the procedure frame pointer (EBP). Negative = local/temporary (vbdec var_XX, XX = -offset), positive = argument (arg_XX).

Observed: 04 78FF FLdRfVar var_88

Examples
Form1.LoadPlugins @ 0x4644FC | 464505    04 64FF               FLdRfVar var_9C
Form1.LoadPlugins @ 0x4644FC | 464508    04 68FF               FLdRfVar var_98
Form1.LoadPlugins @ 0x4644FC | 46453C    04 ACFE               FLdRfVar var_154

6566 occurrence(s) in PDFStreamDumper.

Evidence and notes

Emitted by VB6 SP6 (P-code): yes. Minimal probe: probes\op\0_04_FLdRfVar.

Handler: 0x6610567B, shared by 3 dispatch slots (real opcode #3). This is the primary slot. Other slots: (2,E6) FLdRfVar, (2,EC) FLdRfVar.

Check of vb6_source_eq example: verified: compiles and emits this slot.

Corpus: 6566 occurrence(s) in PDFStreamDumper_p.exe.

Example from the description
Sub Helper(ByRef v As Variant)
    v = 42
End Sub

Dim x As Variant
Helper x   ' x's slot pushed via FLdRfVar
Slots sharing this handler

(2,0xE6) FLdRfVar, (2,0xEC) FLdRfVar

Description: draft, by claude-opus-4.7. Handler 0x6610567B, dispatch slot 0x66106D24, modOpcodes line 1115.

FLdRfVar

(2,0xE6)not emitteddup of (0,04)handler #3Stack & frameconfirmed_handler
Same handler as (0,0x04) FLdRfVar: Push a reference (ByRef pointer) to a Variant local/argument at [ebp+%a].
Encoding, evidence and notes
Encoding

Encoding: FC E6 (lead byte FC selects table 2), then 2 operand byte(s); total instruction length 4 byte(s).
vbdec template: %a
Operands:

  1. %a: local_var_ref, 2 byte(s). signed 16-bit offset from the procedure frame pointer (EBP). Negative = local/temporary (vbdec var_XX, XX = -offset), positive = argument (arg_XX).
Evidence and notes

Emitted by VB6 SP6 (P-code): not observed in about 3,070 probe programs. The slot exists in the runtime's dispatch table, but no tested source construct makes the compiler emit it.

Handler: 0x6610567B, shared by 3 dispatch slots (real opcode #3). This is a duplicate slot of (0,04) FLdRfVar. Other slots: (0,04) FLdRfVar, (2,EC) FLdRfVar.

Slots sharing this handler

(0,0x04) FLdRfVar, (2,0xEC) FLdRfVar

Description: none. Handler 0x6610567B, dispatch slot 0x661078AC, modOpcodes line 1117.

FLdRfVar

(2,0xEC)not emitteddup of (0,04)handler #3Stack & frameconfirmed_handler
Same handler as (0,0x04) FLdRfVar: Push a reference (ByRef pointer) to a Variant local/argument at [ebp+%a].
Encoding, evidence and notes
Encoding

Encoding: FC EC (lead byte FC selects table 2), then 2 operand byte(s); total instruction length 4 byte(s).
vbdec template: %a
Operands:

  1. %a: local_var_ref, 2 byte(s). signed 16-bit offset from the procedure frame pointer (EBP). Negative = local/temporary (vbdec var_XX, XX = -offset), positive = argument (arg_XX).
Evidence and notes

Emitted by VB6 SP6 (P-code): not observed in about 3,070 probe programs. The slot exists in the runtime's dispatch table, but no tested source construct makes the compiler emit it.

Handler: 0x6610567B, shared by 3 dispatch slots (real opcode #3). This is a duplicate slot of (0,04) FLdRfVar. Other slots: (0,04) FLdRfVar, (2,E6) FLdRfVar.

Slots sharing this handler

(0,0x04) FLdRfVar, (2,0xE6) FLdRfVar

Description: none. Handler 0x6610567B, dispatch slot 0x661078C4, modOpcodes line 1116.

FLdUI1

(2,0xE0)emittedhandler #462Integerinferred_corpus12 corpus hits
Frame-relative load: FLdUI1.

Loads a local variable or argument from the current stack frame [ebp+%a] onto the stack. Suffix encodes the result form: UI1.

When the compiler emits it

Emitted for every read of a typed local or argument outside of specialized paths.

VB6 source (verified: compiles to this slot)
Public Sub Main()
  Dim a As Byte, c As Byte
  c = CByte(a)
End Sub
Encoding, evidence and notes
Encoding

Encoding: FC E0 (lead byte FC selects table 2), then 2 operand byte(s); total instruction length 4 byte(s).
vbdec template: %a
Operands:

  1. %a: local_var_ref, 2 byte(s). signed 16-bit offset from the procedure frame pointer (EBP). Negative = local/temporary (vbdec var_XX, XX = -offset), positive = argument (arg_XX).

Observed: FCE0 7AFF FLdUI1 var_86

Examples
Form2.mnuReplaceHexAscii_Click @ 0x46572C | 4658D6    FCE0 66FF             FLdUI1 var_9A
Form2.mnuReplaceHexAscii_Click @ 0x46572C | 4658E4    FCE0 64FF             FLdUI1 var_9C
Form2.mnuReplaceHexAscii_Click @ 0x46572C | 4658FF    FCE0 62FF             FLdUI1 var_9E

12 occurrence(s) in PDFStreamDumper.

Evidence and notes

Emitted by VB6 SP6 (P-code): yes. Minimal probe: probes\op\2_E0_FLdUI1.

Handler: 0x66109D77, unique to this slot (real opcode #462).

Corpus: 12 occurrence(s) in PDFStreamDumper_p.exe.

Description: draft, by claude-opus-4.7. Handler 0x66109D77, dispatch slot 0x66107894, modOpcodes line 1104.

FLdVar

(2,0xED)emittedhandler #463Variantinferred_corpus29 corpus hits
Frame-relative load: FLdVar.

Loads a local variable or argument from the current stack frame [ebp+%a] onto the stack. Suffix encodes the result form: Var.

When the compiler emits it

Emitted for every read of a typed local or argument outside of specialized paths.

VB6 source (verified: compiles to this slot)
Private Declare Sub Ext Lib "x.dll" (b As Variant)
Private Declare Sub ExtV Lib "x.dll" Alias "Ext" (ByVal b As Variant)

Public Sub Main()
  Dim b As Variant
  ExtV b
End Sub
Encoding, evidence and notes
Encoding

Encoding: FC ED (lead byte FC selects table 2), then 2 operand byte(s); total instruction length 4 byte(s).
vbdec template: %a
Operands:

  1. %a: local_var_ref, 2 byte(s). signed 16-bit offset from the procedure frame pointer (EBP). Negative = local/temporary (vbdec var_XX, XX = -offset), positive = argument (arg_XX).

Observed: FCED 6CFF FLdVar var_94

Examples
Form1.mnuSearchFilter_Event_0 @ 0x473E0C | 4741BC    FCED 48FF             FLdVar var_B8
Form1.mnuSearchFilter_Event_0 @ 0x473E0C | 47448F    FCED 48FF             FLdVar var_B8
Form1.mnuUnescape_Click @ 0x45DEC4 | 45E017    FCED 2CFF             FLdVar var_D4

29 occurrence(s) in PDFStreamDumper.

Evidence and notes

Emitted by VB6 SP6 (P-code): yes. Minimal probe: probes\op\2_ED_FLdVar.

Handler: 0x6610624F, unique to this slot (real opcode #463).

Corpus: 29 occurrence(s) in PDFStreamDumper_p.exe.

Description: draft, by claude-opus-4.7. Handler 0x6610624F, dispatch slot 0x661078C8, modOpcodes line 1118.

FLdZeroAd

(0,0x3E)emittedprimary of 4handler #61Object / COMinferred_corpus284 corpus hits
Frame-relative load: FLdZeroAd.

Loads a local variable or argument from the current stack frame [ebp+%a] onto the stack. Suffix encodes the result form: Ad.

When the compiler emits it

Emitted for every read of a typed local or argument outside of specialized paths.

VB6 source (verified: compiles to this slot)
Public Sub Main()
  Dim v As Variant, s As String
  v = LoadResString(1)
End Sub
Encoding, evidence and notes
Encoding

Encoding: 3E, then 2 operand byte(s); total instruction length 3 byte(s).
vbdec template: %a
Operands:

  1. %a: local_var_ref, 2 byte(s). signed 16-bit offset from the procedure frame pointer (EBP). Negative = local/temporary (vbdec var_XX, XX = -offset), positive = argument (arg_XX).

Observed: 3E 64FF FLdZeroAd var_9C

Examples
Form1.mn_b64EncClip_Click @ 0x447B64 | 447B8A    3E 60FF               FLdZeroAd var_A0
Form1.mnuB64Clipboard_Click @ 0x44E37C | 44E3A2    3E 50FF               FLdZeroAd var_B0
Form1.mnub64decode_Click @ 0x451280 | 4512B7    3E 60FF               FLdZeroAd var_A0

284 occurrence(s) in PDFStreamDumper.

Evidence and notes

Emitted by VB6 SP6 (P-code): yes. Minimal probe: probes\op\0_3E_FLdZeroAd.

Handler: 0x66105635, shared by 4 dispatch slots (real opcode #61). This is the primary slot. Other slots: (0,51) FLdZeroAd, (3,3F) FLdZeroAd, (3,62) FLdZeroAd.

Compile-time slot selection: the compiler picks different slots of this handler for different source types:

  • (0,3E): Dim v As Variant, s As String : v = LoadResString(1)
  • (0,51): Dim o As Object : Set o = Printer

Corpus: 284 occurrence(s) in PDFStreamDumper_p.exe.

Slots sharing this handler

(0,0x51) FLdZeroAd, (3,0x3F) FLdZeroAd, (3,0x62) FLdZeroAd

Description: draft, by claude-opus-4.7. Handler 0x66105635, dispatch slot 0x66106E0C, modOpcodes line 1138.

FLdZeroAd

(0,0x51)emitteddup of (0,3E)handler #61Object / COMconfirmed_handler50 corpus hits
(alias) Frame-relative load: FLdZeroAd.

Alias dispatch slot (0, 0x51) for the canonical FLdZeroAd at (0, 0x3E); semantics are identical.

Loads a local variable or argument from the current stack frame [ebp+%a] onto the stack. Suffix encodes the result form: Ad.

When the compiler emits it

Emitted for every read of a typed local or argument outside of specialized paths.

VB6 source (verified: compiles to this slot)
Public Sub Main()
  Dim o As Object
  Set o = Printer
End Sub
Encoding, evidence and notes
Encoding

Encoding: 51, then 2 operand byte(s); total instruction length 3 byte(s).
vbdec template: %a
Operands:

  1. %a: local_var_ref, 2 byte(s). signed 16-bit offset from the procedure frame pointer (EBP). Negative = local/temporary (vbdec var_XX, XX = -offset), positive = argument (arg_XX).

Observed: 51 74FF FLdZeroAd var_8C

Examples
Form1.RegisterPlugin @ 0x44CB20 | 44CB52    51 5CFF               FLdZeroAd var_A4
Form1.mnuLoadAsImage_Click @ 0x45B0F4 | 45B13E    51 04FF               FLdZeroAd var_FC
Form1.mnuLoadAsImage_Click @ 0x45B0F4 | 45B23F    51 04FF               FLdZeroAd var_FC

50 occurrence(s) in PDFStreamDumper.

Evidence and notes

Emitted by VB6 SP6 (P-code): yes. Minimal probe: probes\op\0_51_FLdZeroAd.

Handler: 0x66105635, shared by 4 dispatch slots (real opcode #61). This is a duplicate slot of (0,3E) FLdZeroAd. Other slots: (0,3E) FLdZeroAd, (3,3F) FLdZeroAd, (3,62) FLdZeroAd.

Compile-time slot selection: the compiler picks different slots of this handler for different source types:

  • (0,3E): Dim v As Variant, s As String : v = LoadResString(1)
  • (0,51): Dim o As Object : Set o = Printer

Corpus: 50 occurrence(s) in PDFStreamDumper_p.exe.

Slots sharing this handler

(0,0x3E) FLdZeroAd, (3,0x3F) FLdZeroAd, (3,0x62) FLdZeroAd

Description: draft, by claude-opus-4.7. Handler 0x66105635, dispatch slot 0x66106E58, modOpcodes line 1139.

FLdZeroAd

(3,0x3F)not emitteddup of (0,3E)handler #61Object / COMconfirmed_handler
Same handler as (0,0x3E) FLdZeroAd: Frame-relative load: FLdZeroAd.
Encoding, evidence and notes
Encoding

Encoding: FD 3F (lead byte FD selects table 3), then 2 operand byte(s); total instruction length 4 byte(s).
vbdec template: %a
Operands:

  1. %a: local_var_ref, 2 byte(s). signed 16-bit offset from the procedure frame pointer (EBP). Negative = local/temporary (vbdec var_XX, XX = -offset), positive = argument (arg_XX).
Evidence and notes

Emitted by VB6 SP6 (P-code): not observed in about 3,070 probe programs. The slot exists in the runtime's dispatch table, but no tested source construct makes the compiler emit it.

Handler: 0x66105635, shared by 4 dispatch slots (real opcode #61). This is a duplicate slot of (0,3E) FLdZeroAd. Other slots: (0,3E) FLdZeroAd, (0,51) FLdZeroAd, (3,62) FLdZeroAd.

Compile-time slot selection: the compiler picks different slots of this handler for different source types:

  • (0,3E): Dim v As Variant, s As String : v = LoadResString(1)
  • (0,51): Dim o As Object : Set o = Printer
Slots sharing this handler

(0,0x3E) FLdZeroAd, (0,0x51) FLdZeroAd, (3,0x62) FLdZeroAd

Description: none. Handler 0x66105635, dispatch slot 0x66107A10, modOpcodes line 1140.

FLdZeroAd

(3,0x62)not emitteddup of (0,3E)handler #61Object / COMconfirmed_handler
Same handler as (0,0x3E) FLdZeroAd: Frame-relative load: FLdZeroAd.
Encoding, evidence and notes
Encoding

Encoding: FD 62 (lead byte FD selects table 3), then 2 operand byte(s); total instruction length 4 byte(s).
vbdec template: %a
Operands:

  1. %a: local_var_ref, 2 byte(s). signed 16-bit offset from the procedure frame pointer (EBP). Negative = local/temporary (vbdec var_XX, XX = -offset), positive = argument (arg_XX).
Evidence and notes

Emitted by VB6 SP6 (P-code): not observed in about 3,070 probe programs. The slot exists in the runtime's dispatch table, but no tested source construct makes the compiler emit it.

Handler: 0x66105635, shared by 4 dispatch slots (real opcode #61). This is a duplicate slot of (0,3E) FLdZeroAd. Other slots: (0,3E) FLdZeroAd, (0,51) FLdZeroAd, (3,3F) FLdZeroAd.

Compile-time slot selection: the compiler picks different slots of this handler for different source types:

  • (0,3E): Dim v As Variant, s As String : v = LoadResString(1)
  • (0,51): Dim o As Object : Set o = Printer
Slots sharing this handler

(0,0x3E) FLdZeroAd, (0,0x51) FLdZeroAd, (3,0x3F) FLdZeroAd

Description: none. Handler 0x66105635, dispatch slot 0x66107A9C, modOpcodes line 1141.

FLdZeroAry

(5,0x38)not emittedhandler #765Object / COMinferred_corpus
No description yet.
Encoding, evidence and notes
Encoding

Encoding: FF 38 (lead byte FF selects table 5), then 4 operand byte(s); total instruction length 6 byte(s).
No printf operands are declared, but the instruction still consumes operand bytes; see the size above and the observed bytes below. (Phase 3a: flag=0 does not mean 'no operands'.)

Evidence and notes

Emitted by VB6 SP6 (P-code): not observed in about 3,070 probe programs. The slot exists in the runtime's dispatch table, but no tested source construct makes the compiler emit it.

Handler: 0x66109D8E, unique to this slot (real opcode #765).

Description: none. Handler 0x66109D8E, dispatch slot 0x661081F4, modOpcodes line 1154.

F_Store

Frame-relative store (variable at [ebp+%a]) Prefix: F = frame

FStAd

(2,0xF8)emittedhandler #466Object / COMinferred_corpus50 corpus hits
Pop a raw 32-bit address (pointer); store into frame slot [ebp+%a].

Pops the top-of-stack value of the suffix-indicated type and writes it to a frame-relative slot identified by the %a operand (local variable or argument).

Stack: [..., a:Ad] -> [...] (slot [ebp+%a] <- a)

Mirror of FLdAd. Variants with Copy, NoPop, or Func suffixes modify the lifetime/refcount handling (a String Copy variant SysAlloc-duplicates the BSTR; NoPop leaves the value on the stack as well as storing it; Func flags the slot as the procedure's return value).

When the compiler emits it

Emitted for every write of a typed local or argument of type Ad.

VB6 source (verified: compiles to this slot)
Dim g As Object

Public Sub Main()
  Dim b As Object
  Set b = g
End Sub
Encoding, evidence and notes
Encoding

Encoding: FC F8 (lead byte FC selects table 2), then 2 operand byte(s); total instruction length 4 byte(s).
vbdec template: %a
Operands:

  1. %a: local_var_ref, 2 byte(s). signed 16-bit offset from the procedure frame pointer (EBP). Negative = local/temporary (vbdec var_XX, XX = -offset), positive = argument (arg_XX).

Observed: FCF8 78FF FStAd var_88

Examples
Form1.mnuFindReplace_Click @ 0x446984 | 446A16    FCF8 78FF             FStAd var_88
Form1.mnuWipeStream_Click @ 0x46D520 | 46D64F    FCF8 CCFE             FStAd var_134
Form1.cmdDecode_Click @ 0x4775C0 | 477CFA    FCF8 D4FE             FStAd var_12C

50 occurrence(s) in PDFStreamDumper.

Evidence and notes

Emitted by VB6 SP6 (P-code): yes. Minimal probe: probes\op\2_F8_FStAd.

Handler: 0x6610640A, unique to this slot (real opcode #466).

Corpus: 50 occurrence(s) in PDFStreamDumper_p.exe.

Description: draft, by claude-opus-4.7. Handler 0x6610640A, dispatch slot 0x661078F4, modOpcodes line 1128.

FStAdFunc

(0,0x19)emittedprimary of 2handler #24Object / COMinferred_corpus1680 corpus hits
Store an object reference returned by New or a call into an object variable, without an extra AddRef.

Pops an object pointer that the producer already owns (from New or a function return), releases the object previously held in frame slot %a and stores the new pointer without AddRef.

Stack: [..., o:Ad] -> [...]

When the compiler emits it

Emitted for Set o = New Class and Set o = F() into a local or argument object variable. The reference is a fresh one, so it is adopted as-is. Set o = p (copying an existing reference) uses FStAd (2,F8), which AddRefs.

VB6 source (verified: compiles to this slot)
Public Sub Main()
  Dim a As Object, b As Object
  Set a = New Collection
End Sub
Encoding, evidence and notes
Encoding

Encoding: 19, then 2 operand byte(s); total instruction length 3 byte(s).
vbdec template: %a
Operands:

  1. %a: local_var_ref, 2 byte(s). signed 16-bit offset from the procedure frame pointer (EBP). Negative = local/temporary (vbdec var_XX, XX = -offset), positive = argument (arg_XX).

Observed: 19 78FF FStAdFunc var_88

Examples
Form1.LoadPlugins @ 0x4644FC | 46455A    19 68FF               FStAdFunc var_98
Form1.LoadPlugins @ 0x4644FC | 46456B    19 B0FE               FStAdFunc var_150
Form1.LoadPlugins @ 0x4644FC | 46469E    19 68FF               FStAdFunc var_98

1680 occurrence(s) in PDFStreamDumper.

Evidence and notes

Emitted by VB6 SP6 (P-code): yes. Minimal probe: probes\op\0_19_FStAdFunc.

Handler: 0x661063E4, shared by 2 dispatch slots (real opcode #24). This is the primary slot. Other slots: (2,FF) FStAdFunc.

Check of vb6_source_eq example: verified: compiles and emits this slot.

Corpus: 1680 occurrence(s) in PDFStreamDumper_p.exe.

Example from the description
Dim c As Collection
Set c = New Collection
Slots sharing this handler

(2,0xFF) FStAdFunc

Description: draft, by claude-opus-5-5. Handler 0x661063E4, dispatch slot 0x66106D78, modOpcodes line 1135.

FStAdFunc

(2,0xFF)not emitteddup of (0,19)handler #24Object / COMconfirmed_handler
Same handler as (0,0x19) FStAdFunc: Store an object reference returned by New or a call into an object variable, without an extra AddRef.
Encoding, evidence and notes
Encoding

Encoding: FC FF (lead byte FC selects table 2), then 2 operand byte(s); total instruction length 4 byte(s).
vbdec template: %a
Operands:

  1. %a: local_var_ref, 2 byte(s). signed 16-bit offset from the procedure frame pointer (EBP). Negative = local/temporary (vbdec var_XX, XX = -offset), positive = argument (arg_XX).
Evidence and notes

Emitted by VB6 SP6 (P-code): not observed in about 3,070 probe programs. The slot exists in the runtime's dispatch table, but no tested source construct makes the compiler emit it.

Handler: 0x661063E4, shared by 2 dispatch slots (real opcode #24). This is a duplicate slot of (0,19) FStAdFunc. Other slots: (0,19) FStAdFunc.

Slots sharing this handler

(0,0x19) FStAdFunc

Description: none. Handler 0x661063E4, dispatch slot 0x66107910, modOpcodes line 1136.

FStAdFuncNoPop

(0,0x5B)emittedprimary of 2handler #89Object / COMinferred_corpus153 corpus hits
Pop a value of suffix `; store into frame slot [ebp+%a]`.

Pops the top-of-stack value of the suffix-indicated type and writes it to a frame-relative slot identified by the %a operand (local variable or argument).

Stack: [..., a:] -> [...] (slot [ebp+%a] <- a)

Mirror of FLd. Variants with Copy, NoPop, or Func suffixes modify the lifetime/refcount handling (a String Copy variant SysAlloc-duplicates the BSTR; NoPop leaves the value on the stack as well as storing it; Func flags the slot as the procedure's return value).

When the compiler emits it

Emitted for every write of a typed local or argument of type .

VB6 source (verified: compiles to this slot)
Private Type TRec
  pad As Long
  f As Object
End Type
Dim gr As TRec

Public Sub Main()
  Dim b As Object
  Set gr.f = New Collection
End Sub
Encoding, evidence and notes
Encoding

Encoding: 5B, then 2 operand byte(s); total instruction length 3 byte(s).
vbdec template: %a
Operands:

  1. %a: local_var_ref, 2 byte(s). signed 16-bit offset from the procedure frame pointer (EBP). Negative = local/temporary (vbdec var_XX, XX = -offset), positive = argument (arg_XX).

Observed: 5B 74FF FStAdFuncNoPop var_8C

Examples
Form1.RegisterPlugin @ 0x44CB20 | 44CB55    5B 58FF               FStAdFuncNoPop var_A8
Form1.lvSearch_MouseUp(ByVal Button As Integer, ByVal Shift As Integer, ByVal x As Long, ByVal y As Long) @ 0x43F1A8 | 43F1C5    5B 78FF               FStAdFuncNoPop var_88
Form1.mnuCopySearch_Click @ 0x449FA4 | 449FB9    5B 5CFF               FStAdFuncNoPop var_A4

153 occurrence(s) in PDFStreamDumper.

Evidence and notes

Emitted by VB6 SP6 (P-code): yes. Minimal probe: probes\op\0_5B_FStAdFuncNoPop.

Handler: 0x661063E0, shared by 2 dispatch slots (real opcode #89). This is the primary slot. Other slots: (3,9D) FStAdFuncNoPop.

Corpus: 153 occurrence(s) in PDFStreamDumper_p.exe.

Slots sharing this handler

(3,0x9D) FStAdFuncNoPop

Description: draft, by claude-opus-4.7. Handler 0x661063E0, dispatch slot 0x66106E80, modOpcodes line 1152.

FStAdFuncNoPop

(3,0x9D)not emitteddup of (0,5B)handler #89Object / COMconfirmed_handler
Same handler as (0,0x5B) FStAdFuncNoPop: Pop a value of suffix `; store into frame slot [ebp+%a]`.
Encoding, evidence and notes
Encoding

Encoding: FD 9D (lead byte FD selects table 3), then 2 operand byte(s); total instruction length 4 byte(s).
vbdec template: %a
Operands:

  1. %a: local_var_ref, 2 byte(s). signed 16-bit offset from the procedure frame pointer (EBP). Negative = local/temporary (vbdec var_XX, XX = -offset), positive = argument (arg_XX).
Evidence and notes

Emitted by VB6 SP6 (P-code): not observed in about 3,070 probe programs. The slot exists in the runtime's dispatch table, but no tested source construct makes the compiler emit it.

Handler: 0x661063E0, shared by 2 dispatch slots (real opcode #89). This is a duplicate slot of (0,5B) FStAdFuncNoPop. Other slots: (0,5B) FStAdFuncNoPop.

Slots sharing this handler

(0,0x5B) FStAdFuncNoPop

Description: none. Handler 0x661063E0, dispatch slot 0x66107B88, modOpcodes line 1153.

FStAdNoPop

(3,0x9C)emittedhandler #551Object / COMinferred_corpus16 corpus hits
Pop a value of suffix `; store into frame slot [ebp+%a]`.

Pops the top-of-stack value of the suffix-indicated type and writes it to a frame-relative slot identified by the %a operand (local variable or argument).

Stack: [..., a:] -> [...] (slot [ebp+%a] <- a)

Mirror of FLd. Variants with Copy, NoPop, or Func suffixes modify the lifetime/refcount handling (a String Copy variant SysAlloc-duplicates the BSTR; NoPop leaves the value on the stack as well as storing it; Func flags the slot as the procedure's return value).

When the compiler emits it

Emitted for every write of a typed local or argument of type .

VB6 source (verified: compiles to this slot)
Public Sub Main()
  Dim a As Object, b As Object
  P a
End Sub

Sub P(ByVal o As Object)
End Sub
Encoding, evidence and notes
Encoding

Encoding: FD 9C (lead byte FD selects table 3), then 2 operand byte(s); total instruction length 4 byte(s).
vbdec template: %a
Operands:

  1. %a: local_var_ref, 2 byte(s). signed 16-bit offset from the procedure frame pointer (EBP). Negative = local/temporary (vbdec var_XX, XX = -offset), positive = argument (arg_XX).

Observed: FD9C 70FF FStAdNoPop var_90

Examples
Form1.Shutdown @ 0x442740 | 44276F    FD9C 58FF             FStAdNoPop var_A8
Form1.mnuGotoObject_Click @ 0x44D160 | 44D221    FD9C 70FE             FStAdNoPop var_190
Form1.mnuWipeStream_Click @ 0x46D520 | 46D610    FD9C 78FF             FStAdNoPop var_88

16 occurrence(s) in PDFStreamDumper.

Evidence and notes

Emitted by VB6 SP6 (P-code): yes. Minimal probe: probes\op\3_9C_FStAdNoPop.

Handler: 0x66106406, unique to this slot (real opcode #551).

Corpus: 16 occurrence(s) in PDFStreamDumper_p.exe.

Description: draft, by claude-opus-4.7. Handler 0x66106406, dispatch slot 0x66107B84, modOpcodes line 1149.

FStFPR4

(0,0x73)emittedprimary of 2handler #112Floating pointinferred_corpus2 corpus hits
Pop a Single on the x87 FPU stack; store into frame slot [ebp+%a].

Pops the top-of-stack value of the suffix-indicated type and writes it to a frame-relative slot identified by the %a operand (local variable or argument).

Stack: [..., a:FPR4] -> [...] (slot [ebp+%a] <- a)

Mirror of FLdFPR4. Variants with Copy, NoPop, or Func suffixes modify the lifetime/refcount handling (a String Copy variant SysAlloc-duplicates the BSTR; NoPop leaves the value on the stack as well as storing it; Func flags the slot as the procedure's return value).

When the compiler emits it

Emitted for every write of a typed local or argument of type FPR4.

VB6 source (verified: compiles to this slot)
Public Sub Main()
  Dim a As Single, c As Single
  c = CSng(a)
End Sub
Encoding, evidence and notes
Encoding

Encoding: 73, then 2 operand byte(s); total instruction length 3 byte(s).
vbdec template: %a
Operands:

  1. %a: local_var_ref, 2 byte(s). signed 16-bit offset from the procedure frame pointer (EBP). Negative = local/temporary (vbdec var_XX, XX = -offset), positive = argument (arg_XX).

Observed: 73 74FF FStFPR4 var_8C

Examples
fso.Proc_44D3E8 @ 0x44D3E8 | 44D41D    73 D8FE               FStFPR4 var_128
fso.Proc_44D3E8 @ 0x44D3E8 | 44D430    73 D4FE               FStFPR4 var_12C

2 occurrence(s) in PDFStreamDumper.

Evidence and notes

Emitted by VB6 SP6 (P-code): yes. Minimal probe: probes\op\0_73_FStFPR4.

Handler: 0x661056CE, shared by 2 dispatch slots (real opcode #112). This is the primary slot. Other slots: (2,F9) FStFPR4.

Corpus: 2 occurrence(s) in PDFStreamDumper_p.exe.

Slots sharing this handler

(2,0xF9) FStFPR4

Description: draft, by claude-opus-4.7. Handler 0x661056CE, dispatch slot 0x66106EE0, modOpcodes line 1102.

FStFPR4

(2,0xF9)not emitteddup of (0,73)handler #112Floating pointconfirmed_handler
Same handler as (0,0x73) FStFPR4: Pop a Single on the x87 FPU stack; store into frame slot [ebp+%a].
Encoding, evidence and notes
Encoding

Encoding: FC F9 (lead byte FC selects table 2), then 2 operand byte(s); total instruction length 4 byte(s).
vbdec template: %a
Operands:

  1. %a: local_var_ref, 2 byte(s). signed 16-bit offset from the procedure frame pointer (EBP). Negative = local/temporary (vbdec var_XX, XX = -offset), positive = argument (arg_XX).
Evidence and notes

Emitted by VB6 SP6 (P-code): not observed in about 3,070 probe programs. The slot exists in the runtime's dispatch table, but no tested source construct makes the compiler emit it.

Handler: 0x661056CE, shared by 2 dispatch slots (real opcode #112). This is a duplicate slot of (0,73) FStFPR4. Other slots: (0,73) FStFPR4.

Slots sharing this handler

(0,0x73) FStFPR4

Description: none. Handler 0x661056CE, dispatch slot 0x661078F8, modOpcodes line 1129.

FStFPR8

(0,0x74)emittedprimary of 2handler #113Floating pointinferred_corpus38 corpus hits
Pop a Double on the x87 FPU stack; store into frame slot [ebp+%a].

Pops the top-of-stack value of the suffix-indicated type and writes it to a frame-relative slot identified by the %a operand (local variable or argument).

Stack: [..., a:FPR8] -> [...] (slot [ebp+%a] <- a)

Mirror of FLdFPR8. Variants with Copy, NoPop, or Func suffixes modify the lifetime/refcount handling (a String Copy variant SysAlloc-duplicates the BSTR; NoPop leaves the value on the stack as well as storing it; Func flags the slot as the procedure's return value).

When the compiler emits it

Emitted for every write of a typed local or argument of type FPR8.

VB6 source (verified: compiles to this slot)
Public Sub Main()
  Dim a As Date, c As Date
  c = CDate(a)
End Sub
Encoding, evidence and notes
Encoding

Encoding: 74, then 2 operand byte(s); total instruction length 3 byte(s).
vbdec template: %a
Operands:

  1. %a: local_var_ref, 2 byte(s). signed 16-bit offset from the procedure frame pointer (EBP). Negative = local/temporary (vbdec var_XX, XX = -offset), positive = argument (arg_XX).

Observed: 74 6CFF FStFPR8 var_94

Examples
Form1.LoadPlugins @ 0x4644FC | 464734    74 84FE               FStFPR8 var_17C
Form1.mnuBrowseHomeDir_Click @ 0x441CB0 | 441CED    74 58FF               FStFPR8 var_A8
Form1.mnuDecompileFlash_Click @ 0x4613A8 | 46148D    74 E0FE               FStFPR8 var_120

38 occurrence(s) in PDFStreamDumper.

Evidence and notes

Emitted by VB6 SP6 (P-code): yes. Minimal probe: probes\op\0_74_FStFPR8.

Handler: 0x661056ED, shared by 2 dispatch slots (real opcode #113). This is the primary slot. Other slots: (2,FA) FStFPR8.

Corpus: 38 occurrence(s) in PDFStreamDumper_p.exe.

Slots sharing this handler

(2,0xFA) FStFPR8

Description: draft, by claude-opus-4.7. Handler 0x661056ED, dispatch slot 0x66106EE4, modOpcodes line 1103.

FStFPR8

(2,0xFA)not emitteddup of (0,74)handler #113Floating pointconfirmed_handler
Same handler as (0,0x74) FStFPR8: Pop a Double on the x87 FPU stack; store into frame slot [ebp+%a].
Encoding, evidence and notes
Encoding

Encoding: FC FA (lead byte FC selects table 2), then 2 operand byte(s); total instruction length 4 byte(s).
vbdec template: %a
Operands:

  1. %a: local_var_ref, 2 byte(s). signed 16-bit offset from the procedure frame pointer (EBP). Negative = local/temporary (vbdec var_XX, XX = -offset), positive = argument (arg_XX).
Evidence and notes

Emitted by VB6 SP6 (P-code): not observed in about 3,070 probe programs. The slot exists in the runtime's dispatch table, but no tested source construct makes the compiler emit it.

Handler: 0x661056ED, shared by 2 dispatch slots (real opcode #113). This is a duplicate slot of (0,74) FStFPR8. Other slots: (0,74) FStFPR8.

Slots sharing this handler

(0,0x74) FStFPR8

Description: none. Handler 0x661056ED, dispatch slot 0x661078FC, modOpcodes line 1130.

FStI2

(0,0x70)emittedprimary of 2handler #109Integerinferred_corpus157 corpus hits
Pop a 16-bit signed integer (VB6 Integer); store into frame slot [ebp+%a].

Pops the top-of-stack value of the suffix-indicated type and writes it to a frame-relative slot identified by the %a operand (local variable or argument).

Stack: [..., a:I2] -> [...] (slot [ebp+%a] <- a)

Mirror of FLdI2. Variants with Copy, NoPop, or Func suffixes modify the lifetime/refcount handling (a String Copy variant SysAlloc-duplicates the BSTR; NoPop leaves the value on the stack as well as storing it; Func flags the slot as the procedure's return value).

When the compiler emits it

Emitted for every write of a typed local or argument of type I2.

VB6 source (verified: compiles to this slot)
Public Sub Main()
  Dim a As Boolean, c As Boolean
  c = CBool(a)
End Sub
Encoding, evidence and notes
Encoding

Encoding: 70, then 2 operand byte(s); total instruction length 3 byte(s).
vbdec template: [%a]
Operands:

  1. %a: local_var_ref, 2 byte(s). signed 16-bit offset from the procedure frame pointer (EBP). Negative = local/temporary (vbdec var_XX, XX = -offset), positive = argument (arg_XX).

Observed: 70 78FF FStI2 [var_88]

Examples
Form1.RegisterPlugin @ 0x44CB20 | 44CB37    70 6AFF               FStI2 [var_96]
Form1.isAS3Sorcerer_Installed @ 0x44D52C | 44D56B    70 7AFF               FStI2 [var_86]
Form1.isAS3Sorcerer_Installed @ 0x44D52C | 44D61F    70 7AFF               FStI2 [var_86]

157 occurrence(s) in PDFStreamDumper.

Evidence and notes

Emitted by VB6 SP6 (P-code): yes. Minimal probe: probes\op\0_70_FStI2.

Handler: 0x661056A2, shared by 2 dispatch slots (real opcode #109). This is the primary slot. Other slots: (2,F1) FStI2.

Corpus: 157 occurrence(s) in PDFStreamDumper_p.exe.

Slots sharing this handler

(2,0xF1) FStI2

Description: draft, by claude-opus-4.7. Handler 0x661056A2, dispatch slot 0x66106ED4, modOpcodes line 1099.

FStI2

(2,0xF1)not emitteddup of (0,70)handler #109Integerconfirmed_handler
Same handler as (0,0x70) FStI2: Pop a 16-bit signed integer (VB6 Integer); store into frame slot [ebp+%a].
Encoding, evidence and notes
Encoding

Encoding: FC F1 (lead byte FC selects table 2), then 2 operand byte(s); total instruction length 4 byte(s).
vbdec template: %a
Operands:

  1. %a: local_var_ref, 2 byte(s). signed 16-bit offset from the procedure frame pointer (EBP). Negative = local/temporary (vbdec var_XX, XX = -offset), positive = argument (arg_XX).
Evidence and notes

Emitted by VB6 SP6 (P-code): not observed in about 3,070 probe programs. The slot exists in the runtime's dispatch table, but no tested source construct makes the compiler emit it.

Handler: 0x661056A2, shared by 2 dispatch slots (real opcode #109). This is a duplicate slot of (0,70) FStI2. Other slots: (0,70) FStI2.

Slots sharing this handler

(0,0x70) FStI2

Description: none. Handler 0x661056A2, dispatch slot 0x661078D8, modOpcodes line 1120.

FStR4

(0,0x71)emittedprimary of 3handler #110Integerinferred_corpus371 corpus hits
Pop a 4-byte value and store it into a frame slot (Long locals; not Single).

Pops a raw 32-bit value and writes it to [ebp+%a].

Stack: [..., v:I4] -> [...]

When the compiler emits it

Emitted for writes to 4-byte non-floating locals and ByVal arguments: Long, and 32-bit values in general. Single values use FStFPR4 (0,73), Integer/Boolean FStI2 (0,70), String FStStr. The MSVBVM60 label for this handler is _lblEX_FStI4.

VB6 source (verified: compiles to this slot)
Option Base 1

Public Sub Main()
  Dim a(5) As Long, n As Long
  n = a(1)
End Sub
Encoding, evidence and notes
Encoding

Encoding: 71, then 2 operand byte(s); total instruction length 3 byte(s).
vbdec template: [%a]
Operands:

  1. %a: local_var_ref, 2 byte(s). signed 16-bit offset from the procedure frame pointer (EBP). Negative = local/temporary (vbdec var_XX, XX = -offset), positive = argument (arg_XX).

Observed: 71 5CFF FStR4 [var_A4]

Examples
Form1.mnuDecompileFlash_Click @ 0x4613A8 | 4615C3    71 C4FE               FStR4 [var_13C]
Form1.mnuDecompressSWC_Click @ 0x45E9E4 | 45EA50    71 74FF               FStR4 [var_8C]
Form1.mnuDecompressSWC_Click @ 0x45E9E4 | 45EBC5    71 74FF               FStR4 [var_8C]

371 occurrence(s) in PDFStreamDumper.

Evidence and notes

Emitted by VB6 SP6 (P-code): yes. Minimal probe: probes\op\0_71_FStR4.

Handler: 0x661056B9, shared by 3 dispatch slots (real opcode #110). This is the primary slot. Other slots: (2,F2) FStR4, (2,F3) FStR4.

Check of vb6_source_eq example: verified: compiles and emits this slot.

Corpus: 371 occurrence(s) in PDFStreamDumper_p.exe.

Example from the description
Dim n As Long
n = 70000
Slots sharing this handler

(2,0xF2) FStR4, (2,0xF3) FStR4

Description: draft, by claude-opus-5-5. Handler 0x661056B9, dispatch slot 0x66106ED8, modOpcodes line 1100.

FStR4

(2,0xF2)not emitteddup of (0,71)handler #110Integerconfirmed_handler
Same handler as (0,0x71) FStR4: Pop a 4-byte value and store it into a frame slot (Long locals; not Single).
Encoding, evidence and notes
Encoding

Encoding: FC F2 (lead byte FC selects table 2), then 2 operand byte(s); total instruction length 4 byte(s).
vbdec template: %a
Operands:

  1. %a: local_var_ref, 2 byte(s). signed 16-bit offset from the procedure frame pointer (EBP). Negative = local/temporary (vbdec var_XX, XX = -offset), positive = argument (arg_XX).
Evidence and notes

Emitted by VB6 SP6 (P-code): not observed in about 3,070 probe programs. The slot exists in the runtime's dispatch table, but no tested source construct makes the compiler emit it.

Handler: 0x661056B9, shared by 3 dispatch slots (real opcode #110). This is a duplicate slot of (0,71) FStR4. Other slots: (0,71) FStR4, (2,F3) FStR4.

Slots sharing this handler

(0,0x71) FStR4, (2,0xF3) FStR4

Description: none. Handler 0x661056B9, dispatch slot 0x661078DC, modOpcodes line 1121.

FStR4

(2,0xF3)not emitteddup of (0,71)handler #110Integerconfirmed_handler
Same handler as (0,0x71) FStR4: Pop a 4-byte value and store it into a frame slot (Long locals; not Single).
Encoding, evidence and notes
Encoding

Encoding: FC F3 (lead byte FC selects table 2), then 2 operand byte(s); total instruction length 4 byte(s).
vbdec template: %a
Operands:

  1. %a: local_var_ref, 2 byte(s). signed 16-bit offset from the procedure frame pointer (EBP). Negative = local/temporary (vbdec var_XX, XX = -offset), positive = argument (arg_XX).
Evidence and notes

Emitted by VB6 SP6 (P-code): not observed in about 3,070 probe programs. The slot exists in the runtime's dispatch table, but no tested source construct makes the compiler emit it.

Handler: 0x661056B9, shared by 3 dispatch slots (real opcode #110). This is a duplicate slot of (0,71) FStR4. Other slots: (0,71) FStR4, (2,F2) FStR4.

Slots sharing this handler

(0,0x71) FStR4, (2,0xF2) FStR4

Description: none. Handler 0x661056B9, dispatch slot 0x661078E0, modOpcodes line 1122.

FStR8

(0,0x72)emittedprimary of 3handler #111Currencyinferred_corpus
Store 8-byte value into a frame slot (local variable, temporary or ByVal argument).

Pops a raw 64-bit value (in practice a Currency; Double/Date use the FPR8 forms), and writes it to a frame slot (local variable, temporary or ByVal argument).

Stack: [..., v:R8] -> [...]

Operands: %a: signed 16-bit frame offset.

Locals, compiler temporaries and ByVal arguments.

The R8 suffix denotes a raw 8-byte move, not a floating-point type. Phase 4 probes show it used for Currency values. Single/Double values use the FPR4/FPR8 forms.

When the compiler emits it

Emitted for assignments to a frame slot (local variable, temporary or ByVal argument) when the value is a 8-byte value. The storage class selects the prefix (F); the value class selects the suffix (R8).

VB6 source (verified: compiles to this slot)
Public Sub Main()
  Dim a As Currency, c As Currency
  c = CCur(a)
End Sub
Encoding, evidence and notes
Encoding

Encoding: 72, then 2 operand byte(s); total instruction length 3 byte(s).
vbdec template: [%a]
Operands:

  1. %a: local_var_ref, 2 byte(s). signed 16-bit offset from the procedure frame pointer (EBP). Negative = local/temporary (vbdec var_XX, XX = -offset), positive = argument (arg_XX).

Observed: 72 6CFF FStR8 [var_94]

Examples
72 6CFF  FStR8 [var_94]

From the Phase 4 probe (VB6 SP6, P-code).

Evidence and notes

Emitted by VB6 SP6 (P-code): yes. Minimal probe: probes\op\0_72_FStR8.

Handler: 0x66109DDF, shared by 3 dispatch slots (real opcode #111). This is the primary slot. Other slots: (2,F4) FStR8, (2,F5) FStR8.

Check of vb6_source_eq example: verified: compiles and emits this slot.

Example from the description
Public Sub Main()
  Dim a As Currency, c As Currency
  c = CCur(a)
End Sub
Slots sharing this handler

(2,0xF4) FStR8, (2,0xF5) FStR8

Description: draft, by claude-opus-5-5. Handler 0x66109DDF, dispatch slot 0x66106EDC, modOpcodes line 1101.

FStR8

(2,0xF4)not emitteddup of (0,72)handler #111Currencyconfirmed_handler
Same handler as (0,0x72) FStR8: Store 8-byte value into a frame slot (local variable, temporary or ByVal argument).
Encoding, evidence and notes
Encoding

Encoding: FC F4 (lead byte FC selects table 2), then 2 operand byte(s); total instruction length 4 byte(s).
vbdec template: %a
Operands:

  1. %a: local_var_ref, 2 byte(s). signed 16-bit offset from the procedure frame pointer (EBP). Negative = local/temporary (vbdec var_XX, XX = -offset), positive = argument (arg_XX).
Evidence and notes

Emitted by VB6 SP6 (P-code): not observed in about 3,070 probe programs. The slot exists in the runtime's dispatch table, but no tested source construct makes the compiler emit it.

Handler: 0x66109DDF, shared by 3 dispatch slots (real opcode #111). This is a duplicate slot of (0,72) FStR8. Other slots: (0,72) FStR8, (2,F5) FStR8.

Slots sharing this handler

(0,0x72) FStR8, (2,0xF5) FStR8

Description: none. Handler 0x66109DDF, dispatch slot 0x661078E4, modOpcodes line 1123.

FStR8

(2,0xF5)not emitteddup of (0,72)handler #111Currencyconfirmed_handler
Same handler as (0,0x72) FStR8: Store 8-byte value into a frame slot (local variable, temporary or ByVal argument).
Encoding, evidence and notes
Encoding

Encoding: FC F5 (lead byte FC selects table 2), then 2 operand byte(s); total instruction length 4 byte(s).
vbdec template: %a
Operands:

  1. %a: local_var_ref, 2 byte(s). signed 16-bit offset from the procedure frame pointer (EBP). Negative = local/temporary (vbdec var_XX, XX = -offset), positive = argument (arg_XX).
Evidence and notes

Emitted by VB6 SP6 (P-code): not observed in about 3,070 probe programs. The slot exists in the runtime's dispatch table, but no tested source construct makes the compiler emit it.

Handler: 0x66109DDF, shared by 3 dispatch slots (real opcode #111). This is a duplicate slot of (0,72) FStR8. Other slots: (0,72) FStR8, (2,F4) FStR8.

Slots sharing this handler

(0,0x72) FStR8, (2,0xF4) FStR8

Description: none. Handler 0x66109DDF, dispatch slot 0x661078E8, modOpcodes line 1124.

FStStr

(0,0x31)emittedprimary of 2handler #48Stringinferred_corpus448 corpus hits
Pop a BSTR (VB6 String); store into frame slot [ebp+%a].

Pops the top-of-stack value of the suffix-indicated type and writes it to a frame-relative slot identified by the %a operand (local variable or argument).

Stack: [..., a:Str] -> [...] (slot [ebp+%a] <- a)

Mirror of FLdStr. Variants with Copy, NoPop, or Func suffixes modify the lifetime/refcount handling (a String Copy variant SysAlloc-duplicates the BSTR; NoPop leaves the value on the stack as well as storing it; Func flags the slot as the procedure's return value).

When the compiler emits it

Emitted for every write of a typed local or argument of type Str.

VB6 source (verified: compiles to this slot)
Public Sub Main()
  Dim a As Boolean, c As String
  c = CStr(a)
End Sub
Encoding, evidence and notes
Encoding

Encoding: 31, then 2 operand byte(s); total instruction length 3 byte(s).
vbdec template: %a
Operands:

  1. %a: local_var_ref, 2 byte(s). signed 16-bit offset from the procedure frame pointer (EBP). Negative = local/temporary (vbdec var_XX, XX = -offset), positive = argument (arg_XX).

Observed: 31 74FF FStStr var_8C

Examples
Form1.LoadPlugins @ 0x4644FC | 46465B    31 64FF               FStStr var_9C
Form1.LoadPlugins @ 0x4644FC | 464668    31 70FF               FStStr var_90
Form1.mn_b64EncClip_Click @ 0x447B64 | 447B8D    31 78FF               FStStr var_88

448 occurrence(s) in PDFStreamDumper.

Evidence and notes

Emitted by VB6 SP6 (P-code): yes. Minimal probe: probes\op\0_31_FStStr.

Handler: 0x66106305, shared by 2 dispatch slots (real opcode #48). This is the primary slot. Other slots: (2,F7) FStStr.

Corpus: 448 occurrence(s) in PDFStreamDumper_p.exe.

Slots sharing this handler

(2,0xF7) FStStr

Description: draft, by claude-opus-4.7. Handler 0x66106305, dispatch slot 0x66106DD8, modOpcodes line 1126.

FStStr

(2,0xF7)not emitteddup of (0,31)handler #48Stringconfirmed_handler
Same handler as (0,0x31) FStStr: Pop a BSTR (VB6 String); store into frame slot [ebp+%a].
Encoding, evidence and notes
Encoding

Encoding: FC F7 (lead byte FC selects table 2), then 2 operand byte(s); total instruction length 4 byte(s).
vbdec template: %a
Operands:

  1. %a: local_var_ref, 2 byte(s). signed 16-bit offset from the procedure frame pointer (EBP). Negative = local/temporary (vbdec var_XX, XX = -offset), positive = argument (arg_XX).
Evidence and notes

Emitted by VB6 SP6 (P-code): not observed in about 3,070 probe programs. The slot exists in the runtime's dispatch table, but no tested source construct makes the compiler emit it.

Handler: 0x66106305, shared by 2 dispatch slots (real opcode #48). This is a duplicate slot of (0,31) FStStr. Other slots: (0,31) FStStr.

Slots sharing this handler

(0,0x31) FStStr

Description: none. Handler 0x66106305, dispatch slot 0x661078F0, modOpcodes line 1127.

FStStrCopy

(0,0x43)emittedprimary of 2handler #66Stringinferred_corpus176 corpus hits
Pop a value of suffix `; store into frame slot [ebp+%a]`.

Pops the top-of-stack value of the suffix-indicated type and writes it to a frame-relative slot identified by the %a operand (local variable or argument).

Stack: [..., a:] -> [...] (slot [ebp+%a] <- a)

Mirror of FLd. Variants with Copy, NoPop, or Func suffixes modify the lifetime/refcount handling (a String Copy variant SysAlloc-duplicates the BSTR; NoPop leaves the value on the stack as well as storing it; Func flags the slot as the procedure's return value).

When the compiler emits it

Emitted for every write of a typed local or argument of type .

VB6 source (verified: compiles to this slot)
Public Sub Main()
  Dim a As String, c As String
  c = CStr(a)
End Sub
Encoding, evidence and notes
Encoding

Encoding: 43, then 2 operand byte(s); total instruction length 3 byte(s).
vbdec template: %a
Operands:

  1. %a: local_var_ref, 2 byte(s). signed 16-bit offset from the procedure frame pointer (EBP). Negative = local/temporary (vbdec var_XX, XX = -offset), positive = argument (arg_XX).

Observed: 43 74FF FStStrCopy var_8C

Examples
Form1.mnub64decode_Click @ 0x451280 | 451290    43 68FF               FStStrCopy var_98
Form1.mnub64decode_Click @ 0x451280 | 45129B    43 6CFF               FStStrCopy var_94
Form1.mnub64Encode_Click @ 0x4510EC | 4510FC    43 68FF               FStStrCopy var_98

176 occurrence(s) in PDFStreamDumper.

Evidence and notes

Emitted by VB6 SP6 (P-code): yes. Minimal probe: probes\op\0_43_FStStrCopy.

Handler: 0x66106323, shared by 2 dispatch slots (real opcode #66). This is the primary slot. Other slots: (3,01) FStStrCopy.

Corpus: 176 occurrence(s) in PDFStreamDumper_p.exe.

Slots sharing this handler

(3,0x01) FStStrCopy

Description: draft, by claude-opus-4.7. Handler 0x66106323, dispatch slot 0x66106E20, modOpcodes line 1147.

FStStrCopy

(3,0x01)not emitteddup of (0,43)handler #66Stringconfirmed_handler
Same handler as (0,0x43) FStStrCopy: Pop a value of suffix `; store into frame slot [ebp+%a]`.
Encoding, evidence and notes
Encoding

Encoding: FD 01 (lead byte FD selects table 3), then 2 operand byte(s); total instruction length 4 byte(s).
vbdec template: %a
Operands:

  1. %a: local_var_ref, 2 byte(s). signed 16-bit offset from the procedure frame pointer (EBP). Negative = local/temporary (vbdec var_XX, XX = -offset), positive = argument (arg_XX).
Evidence and notes

Emitted by VB6 SP6 (P-code): not observed in about 3,070 probe programs. The slot exists in the runtime's dispatch table, but no tested source construct makes the compiler emit it.

Handler: 0x66106323, shared by 2 dispatch slots (real opcode #66). This is a duplicate slot of (0,43) FStStrCopy. Other slots: (0,43) FStStrCopy.

Slots sharing this handler

(0,0x43) FStStrCopy

Description: none. Handler 0x66106323, dispatch slot 0x66107918, modOpcodes line 1148.

FStStrNoPop

(0,0x23)emittedprimary of 2handler #34Stringinferred_corpus782 corpus hits
Pop a value of suffix `; store into frame slot [ebp+%a]`.

Pops the top-of-stack value of the suffix-indicated type and writes it to a frame-relative slot identified by the %a operand (local variable or argument).

Stack: [..., a:] -> [...] (slot [ebp+%a] <- a)

Mirror of FLd. Variants with Copy, NoPop, or Func suffixes modify the lifetime/refcount handling (a String Copy variant SysAlloc-duplicates the BSTR; NoPop leaves the value on the stack as well as storing it; Func flags the slot as the procedure's return value).

When the compiler emits it

Emitted for every write of a typed local or argument of type .

VB6 source (verified: compiles to this slot)
Public Sub Main()
  Dim a As Boolean, c As Variant
  c = Asc(a)
End Sub
Encoding, evidence and notes
Encoding

Encoding: 23, then 2 operand byte(s); total instruction length 3 byte(s).
vbdec template: %a
Operands:

  1. %a: local_var_ref, 2 byte(s). signed 16-bit offset from the procedure frame pointer (EBP). Negative = local/temporary (vbdec var_XX, XX = -offset), positive = argument (arg_XX).

Observed: 23 64FF FStStrNoPop var_9C

Examples
Form1.LoadPlugins @ 0x4644FC | 464712    23 94FE               FStStrNoPop var_16C
Form1.LoadPlugins @ 0x4644FC | 464719    23 90FE               FStStrNoPop var_170
Form1.LoadPlugins @ 0x4644FC | 464725    23 8CFE               FStStrNoPop var_174

782 occurrence(s) in PDFStreamDumper.

Evidence and notes

Emitted by VB6 SP6 (P-code): yes. Minimal probe: probes\op\0_23_FStStrNoPop.

Handler: 0x66106301, shared by 2 dispatch slots (real opcode #34). This is the primary slot. Other slots: (3,64) FStStrNoPop.

Corpus: 782 occurrence(s) in PDFStreamDumper_p.exe.

Slots sharing this handler

(3,0x64) FStStrNoPop

Description: draft, by claude-opus-4.7. Handler 0x66106301, dispatch slot 0x66106DA0, modOpcodes line 1144.

FStStrNoPop

(3,0x64)not emitteddup of (0,23)handler #34Stringconfirmed_handler
Same handler as (0,0x23) FStStrNoPop: Pop a value of suffix `; store into frame slot [ebp+%a]`.
Encoding, evidence and notes
Encoding

Encoding: FD 64 (lead byte FD selects table 3), then 2 operand byte(s); total instruction length 4 byte(s).
vbdec template: %a
Operands:

  1. %a: local_var_ref, 2 byte(s). signed 16-bit offset from the procedure frame pointer (EBP). Negative = local/temporary (vbdec var_XX, XX = -offset), positive = argument (arg_XX).
Evidence and notes

Emitted by VB6 SP6 (P-code): not observed in about 3,070 probe programs. The slot exists in the runtime's dispatch table, but no tested source construct makes the compiler emit it.

Handler: 0x66106301, shared by 2 dispatch slots (real opcode #34). This is a duplicate slot of (0,23) FStStrNoPop. Other slots: (0,23) FStStrNoPop.

Slots sharing this handler

(0,0x23) FStStrNoPop

Description: none. Handler 0x66106301, dispatch slot 0x66107AA4, modOpcodes line 1146.

FStUI1

(2,0xF0)emittedhandler #464Integerinferred_corpus8 corpus hits
Pop a 8-bit unsigned integer (VB6 Byte); store into frame slot [ebp+%a].

Pops the top-of-stack value of the suffix-indicated type and writes it to a frame-relative slot identified by the %a operand (local variable or argument).

Stack: [..., a:UI1] -> [...] (slot [ebp+%a] <- a)

Mirror of FLdUI1. Variants with Copy, NoPop, or Func suffixes modify the lifetime/refcount handling (a String Copy variant SysAlloc-duplicates the BSTR; NoPop leaves the value on the stack as well as storing it; Func flags the slot as the procedure's return value).

When the compiler emits it

Emitted for every write of a typed local or argument of type UI1.

VB6 source (verified: compiles to this slot)
Public Sub Main()
  Dim a As Boolean, c As Byte
  c = a
End Sub
Encoding, evidence and notes
Encoding

Encoding: FC F0 (lead byte FC selects table 2), then 2 operand byte(s); total instruction length 4 byte(s).
vbdec template: %a
Operands:

  1. %a: local_var_ref, 2 byte(s). signed 16-bit offset from the procedure frame pointer (EBP). Negative = local/temporary (vbdec var_XX, XX = -offset), positive = argument (arg_XX).

Observed: FCF0 78FF FStUI1 var_88

Examples
Form2.mnuReplaceHexAscii_Click @ 0x46572C | 465769    FCF0 66FF             FStUI1 var_9A
Form2.mnuReplaceHexAscii_Click @ 0x46572C | 465779    FCF0 64FF             FStUI1 var_9C
Form2.mnuReplaceHexAscii_Click @ 0x46572C | 465789    FCF0 62FF             FStUI1 var_9E

8 occurrence(s) in PDFStreamDumper.

Evidence and notes

Emitted by VB6 SP6 (P-code): yes. Minimal probe: probes\op\2_F0_FStUI1.

Handler: 0x66109DC9, unique to this slot (real opcode #464).

Corpus: 8 occurrence(s) in PDFStreamDumper_p.exe.

Description: draft, by claude-opus-4.7. Handler 0x66109DC9, dispatch slot 0x661078D4, modOpcodes line 1119.

FStVar

(2,0xF6)emittedhandler #465Variantinferred_corpus564 corpus hits
Pop a VBA Variant; store into frame slot [ebp+%a].

Pops the top-of-stack value of the suffix-indicated type and writes it to a frame-relative slot identified by the %a operand (local variable or argument).

Stack: [..., a:Var] -> [...] (slot [ebp+%a] <- a)

Mirror of FLdVar. Variants with Copy, NoPop, or Func suffixes modify the lifetime/refcount handling (a String Copy variant SysAlloc-duplicates the BSTR; NoPop leaves the value on the stack as well as storing it; Func flags the slot as the procedure's return value).

When the compiler emits it

Emitted for every write of a typed local or argument of type Var.

VB6 source (verified: compiles to this slot)
Public Sub Main()
  Dim c As Variant
  c = 0
End Sub
Encoding, evidence and notes
Encoding

Encoding: FC F6 (lead byte FC selects table 2), then 2 operand byte(s); total instruction length 4 byte(s).
vbdec template: %a
Operands:

  1. %a: local_var_ref, 2 byte(s). signed 16-bit offset from the procedure frame pointer (EBP). Negative = local/temporary (vbdec var_XX, XX = -offset), positive = argument (arg_XX).

Observed: FCF6 6CFF FStVar var_94

Examples
Form1.mnuHelp_Event_0 @ 0x45A2C0 | 45A2EF    FCF6 6CFF             FStVar var_94
Form1.mnuHelp_Event_0 @ 0x45A2C0 | 45A3EB    FCF6 6CFF             FStVar var_94
Form1.AppPath @ 0x4405D8 | 4405F9    FCF6 6CFF             FStVar var_94

564 occurrence(s) in PDFStreamDumper.

Evidence and notes

Emitted by VB6 SP6 (P-code): yes. Minimal probe: probes\op\2_F6_FStVar.

Handler: 0x661064FD, unique to this slot (real opcode #465).

Corpus: 564 occurrence(s) in PDFStreamDumper_p.exe.

Description: draft, by claude-opus-4.7. Handler 0x661064FD, dispatch slot 0x661078EC, modOpcodes line 1125.

FStVarAd

(2,0xFB)emittedhandler #467Variantinferred_corpus
Store object into a Variant into a frame slot (local variable, temporary or ByVal argument).

Pops an object pointer stored into a Variant as VT_DISPATCH (Set v = obj), AddRef'd, and writes it to a frame slot (local variable, temporary or ByVal argument).

Stack: [..., v:Var] -> [...]

Operands: %a: signed 16-bit frame offset.

Locals, compiler temporaries and ByVal arguments.

When the compiler emits it

Emitted for assignments to a frame slot (local variable, temporary or ByVal argument) when the value is a object into a Variant. The storage class selects the prefix (F); the value class selects the suffix (VarAd).

VB6 source (verified: compiles to this slot)
Public Sub Main()
  Dim c As Variant
  Set c = Nothing
End Sub
Encoding, evidence and notes
Encoding

Encoding: FC FB (lead byte FC selects table 2), then 2 operand byte(s); total instruction length 4 byte(s).
vbdec template: %a
Operands:

  1. %a: local_var_ref, 2 byte(s). signed 16-bit offset from the procedure frame pointer (EBP). Negative = local/temporary (vbdec var_XX, XX = -offset), positive = argument (arg_XX).

Observed: FCFB 6CFF FStVarAd var_94

Examples
FCFB 6CFF  FStVarAd var_94

From the Phase 4 probe (VB6 SP6, P-code).

Evidence and notes

Emitted by VB6 SP6 (P-code): yes. Minimal probe: probes\op\2_FB_FStVarAd.

Handler: 0x6610B3F5, unique to this slot (real opcode #467).

Check of vb6_source_eq example: verified: compiles and emits this slot.

Example from the description
Public Sub Main()
  Dim c As Variant
  Set c = Nothing
End Sub

Description: draft, by claude-opus-5-5. Handler 0x6610B3F5, dispatch slot 0x66107900, modOpcodes line 1131.

FStVarAdFunc

(2,0xFC)emittedhandler #468Variantinferred_corpus1 corpus hits
Pop a value of suffix `; store into frame slot [ebp+%a]`.

Pops the top-of-stack value of the suffix-indicated type and writes it to a frame-relative slot identified by the %a operand (local variable or argument).

Stack: [..., a:] -> [...] (slot [ebp+%a] <- a)

Mirror of FLd. Variants with Copy, NoPop, or Func suffixes modify the lifetime/refcount handling (a String Copy variant SysAlloc-duplicates the BSTR; NoPop leaves the value on the stack as well as storing it; Func flags the slot as the procedure's return value).

When the compiler emits it

Emitted for every write of a typed local or argument of type .

VB6 source (verified: compiles to this slot)
Public Sub Main()
  Dim v As Variant
  Set v = New Collection
End Sub
Encoding, evidence and notes
Encoding

Encoding: FC FC (lead byte FC selects table 2), then 2 operand byte(s); total instruction length 4 byte(s).
vbdec template: %a
Operands:

  1. %a: local_var_ref, 2 byte(s). signed 16-bit offset from the procedure frame pointer (EBP). Negative = local/temporary (vbdec var_XX, XX = -offset), positive = argument (arg_XX).

Observed: FCFC 6CFF FStVarAdFunc var_94

Examples
Form2.mnuReplaceHexAscii_Click @ 0x46572C | 4657F3    FCFC 2CFF             FStVarAdFunc var_D4

1 occurrence(s) in PDFStreamDumper.

Evidence and notes

Emitted by VB6 SP6 (P-code): yes. Minimal probe: probes\op\2_FC_FStVarAdFunc.

Handler: 0x66106421, unique to this slot (real opcode #468).

Corpus: 1 occurrence(s) in PDFStreamDumper_p.exe.

Description: draft, by claude-opus-4.7. Handler 0x66106421, dispatch slot 0x66107904, modOpcodes line 1132.

FStVarCopy

(3,0x00)emittedhandler #471Variantinferred_corpus30 corpus hits
Pop a value of suffix `; store into frame slot [ebp+%a]`.

Pops the top-of-stack value of the suffix-indicated type and writes it to a frame-relative slot identified by the %a operand (local variable or argument).

Stack: [..., a:] -> [...] (slot [ebp+%a] <- a)

Mirror of FLd. Variants with Copy, NoPop, or Func suffixes modify the lifetime/refcount handling (a String Copy variant SysAlloc-duplicates the BSTR; NoPop leaves the value on the stack as well as storing it; Func flags the slot as the procedure's return value).

When the compiler emits it

Emitted for every write of a typed local or argument of type .

VB6 source (verified: compiles to this slot)
Public Sub Main()
  Dim c As Variant
  c = "s"
End Sub
Encoding, evidence and notes
Encoding

Encoding: FD 00 (lead byte FD selects table 3), then 2 operand byte(s); total instruction length 4 byte(s).
vbdec template: %a
Operands:

  1. %a: local_var_ref, 2 byte(s). signed 16-bit offset from the procedure frame pointer (EBP). Negative = local/temporary (vbdec var_XX, XX = -offset), positive = argument (arg_XX).

Observed: FD00 6CFF FStVarCopy var_94

Examples
Form1.GetExploits @ 0x43E384 | 43E391    FD00 6CFF             FStVarCopy var_94
fso.Proc_45D698 @ 0x45D698 | 45D72C    FD00 68FF             FStVarCopy var_98
fso.Proc_449A54 @ 0x449A54 | 449A59    FD00 68FF             FStVarCopy var_98

30 occurrence(s) in PDFStreamDumper.

Evidence and notes

Emitted by VB6 SP6 (P-code): yes. Minimal probe: probes\op\3_00_FStVarCopy.

Handler: 0x661064A3, unique to this slot (real opcode #471).

Corpus: 30 occurrence(s) in PDFStreamDumper_p.exe.

Description: draft, by claude-opus-4.7. Handler 0x661064A3, dispatch slot 0x66107914, modOpcodes line 1137.

FStVarCopyObj

(0,0x4E)emittedprimary of 2handler #77Variantinferred_corpus440 corpus hits
Pop a value of suffix `; store into frame slot [ebp+%a]`.

Pops the top-of-stack value of the suffix-indicated type and writes it to a frame-relative slot identified by the %a operand (local variable or argument).

Stack: [..., a:] -> [...] (slot [ebp+%a] <- a)

Mirror of FLd. Variants with Copy, NoPop, or Func suffixes modify the lifetime/refcount handling (a String Copy variant SysAlloc-duplicates the BSTR; NoPop leaves the value on the stack as well as storing it; Func flags the slot as the procedure's return value).

When the compiler emits it

Emitted for every write of a typed local or argument of type .

VB6 source (verified: compiles to this slot)
Public Sub Main()
  TakeVar "abc"
End Sub

Sub TakeVar(v As Variant)
End Sub
Encoding, evidence and notes
Encoding

Encoding: 4E, then 2 operand byte(s); total instruction length 3 byte(s).
vbdec template: %a
Operands:

  1. %a: local_var_ref, 2 byte(s). signed 16-bit offset from the procedure frame pointer (EBP). Negative = local/temporary (vbdec var_XX, XX = -offset), positive = argument (arg_XX).

Observed: 4E 5CFF FStVarCopyObj var_A4

Examples
Form1.LoadPlugins @ 0x4644FC | 464550    4E 34FF               FStVarCopyObj var_CC
Form1.LoadPlugins @ 0x4644FC | 4645B3    4E 34FF               FStVarCopyObj var_CC
Form1.mn_b64EncClip_Click @ 0x447B64 | 447BF2    4E 50FF               FStVarCopyObj var_B0

440 occurrence(s) in PDFStreamDumper.

Evidence and notes

Emitted by VB6 SP6 (P-code): yes. Minimal probe: probes\op\0_4E_FStVarCopyObj.

Handler: 0x661064D0, shared by 2 dispatch slots (real opcode #77). This is the primary slot. Other slots: (4,F8) FStVarCopyObj.

Corpus: 440 occurrence(s) in PDFStreamDumper_p.exe.

Slots sharing this handler

(4,0xF8) FStVarCopyObj

Description: draft, by claude-opus-4.7. Handler 0x661064D0, dispatch slot 0x66106E4C, modOpcodes line 1150.

FStVarCopyObj

(4,0xF8)not emitteddup of (0,4E)handler #77Variantconfirmed_handler
Same handler as (0,0x4E) FStVarCopyObj: Pop a value of suffix `; store into frame slot [ebp+%a]`.
Encoding, evidence and notes
Encoding

Encoding: FE F8 (lead byte FE selects table 4), then 2 operand byte(s); total instruction length 4 byte(s).
vbdec template: %a
Operands:

  1. %a: local_var_ref, 2 byte(s). signed 16-bit offset from the procedure frame pointer (EBP). Negative = local/temporary (vbdec var_XX, XX = -offset), positive = argument (arg_XX).
Evidence and notes

Emitted by VB6 SP6 (P-code): not observed in about 3,070 probe programs. The slot exists in the runtime's dispatch table, but no tested source construct makes the compiler emit it.

Handler: 0x661064D0, shared by 2 dispatch slots (real opcode #77). This is a duplicate slot of (0,4E) FStVarCopyObj. Other slots: (0,4E) FStVarCopyObj.

Slots sharing this handler

(0,0x4E) FStVarCopyObj

Description: none. Handler 0x661064D0, dispatch slot 0x661080F4, modOpcodes line 1151.

FStVarNoPop

(3,0x63)not emittedhandler #529Variantinferred_corpus
No description yet.
Encoding, evidence and notes
Encoding

Encoding: FD 63 (lead byte FD selects table 3), then 2 operand byte(s); total instruction length 4 byte(s).
vbdec template: %a
Operands:

  1. %a: local_var_ref, 2 byte(s). signed 16-bit offset from the procedure frame pointer (EBP). Negative = local/temporary (vbdec var_XX, XX = -offset), positive = argument (arg_XX).
Evidence and notes

Emitted by VB6 SP6 (P-code): not observed in about 3,070 probe programs. The slot exists in the runtime's dispatch table, but no tested source construct makes the compiler emit it.

Handler: 0x6610B6F4, unique to this slot (real opcode #529).

Description: none. Handler 0x6610B6F4, dispatch slot 0x66107AA0, modOpcodes line 1145.

FStVarUnk

(2,0xFD)emittedhandler #469Variantinferred_corpus
Store IUnknown into a Variant into a frame slot (local variable, temporary or ByVal argument).

Pops an IUnknown pointer stored into a Variant as VT_UNKNOWN (Set v = unk), AddRef'd, and writes it to a frame slot (local variable, temporary or ByVal argument).

Stack: [..., v:Var] -> [...]

Operands: %a: signed 16-bit frame offset.

Locals, compiler temporaries and ByVal arguments.

When the compiler emits it

Emitted for assignments to a frame slot (local variable, temporary or ByVal argument) when the value is a IUnknown into a Variant. The storage class selects the prefix (F); the value class selects the suffix (VarUnk).

VB6 source (verified: compiles to this slot)
Public Sub Main()
  Dim u As IUnknown, v As Variant
  Set v = u
End Sub
Encoding, evidence and notes
Encoding

Encoding: FC FD (lead byte FC selects table 2), then 2 operand byte(s); total instruction length 4 byte(s).
vbdec template: %a
Operands:

  1. %a: local_var_ref, 2 byte(s). signed 16-bit offset from the procedure frame pointer (EBP). Negative = local/temporary (vbdec var_XX, XX = -offset), positive = argument (arg_XX).

Observed: FCFD 68FF FStVarUnk var_98

Examples
FCFD 68FF  FStVarUnk var_98

From the Phase 4 probe (VB6 SP6, P-code).

Evidence and notes

Emitted by VB6 SP6 (P-code): yes. Minimal probe: probes\op\2_FD_FStVarUnk.

Handler: 0x6610B50B, unique to this slot (real opcode #469).

Check of vb6_source_eq example: verified: compiles and emits this slot.

Example from the description
Public Sub Main()
  Dim u As IUnknown, v As Variant
  Set v = u
End Sub

Description: draft, by claude-opus-5-5. Handler 0x6610B50B, dispatch slot 0x66107908, modOpcodes line 1133.

FStVarUnkFunc

(2,0xFE)emittedhandler #470Variantinferred_corpus
Store IUnknown from a call into a Variant into a frame slot (local variable, temporary or ByVal argument).

Pops an IUnknown pointer returned by a call, stored into a Variant as VT_UNKNOWN without an extra AddRef, and writes it to a frame slot (local variable, temporary or ByVal argument).

Stack: [..., v:Var] -> [...]

Operands: %a: signed 16-bit frame offset.

Locals, compiler temporaries and ByVal arguments.

When the compiler emits it

Emitted for assignments to a frame slot (local variable, temporary or ByVal argument) when the value is a IUnknown from a call into a Variant. The storage class selects the prefix (F); the value class selects the suffix (VarUnkFunc).

VB6 source (verified: compiles to this slot)
Public Sub Main()
  Dim v As Variant, u As IUnknown
  Set v = FU()
End Sub

Function FU() As IUnknown
End Function
Function FO() As Object
End Function
Function FC() As Collection
End Function
Encoding, evidence and notes
Encoding

Encoding: FC FE (lead byte FC selects table 2), then 2 operand byte(s); total instruction length 4 byte(s).
vbdec template: %a
Operands:

  1. %a: local_var_ref, 2 byte(s). signed 16-bit offset from the procedure frame pointer (EBP). Negative = local/temporary (vbdec var_XX, XX = -offset), positive = argument (arg_XX).

Observed: FCFE 6CFF FStVarUnkFunc var_94

Examples
FCFE 6CFF  FStVarUnkFunc var_94

From the Phase 4 probe (VB6 SP6, P-code).

Evidence and notes

Emitted by VB6 SP6 (P-code): yes. Minimal probe: probes\op\2_FE_FStVarUnkFunc.

Handler: 0x6610B4F5, unique to this slot (real opcode #470).

Check of vb6_source_eq example: verified: compiles and emits this slot.

Example from the description
Public Sub Main()
  Dim v As Variant, u As IUnknown
  Set v = FU()
End Sub

Function FU() As IUnknown
End Function
Function FO() As Object
End Function
Function FC() As Collection
End Function

Description: draft, by claude-opus-5-5. Handler 0x6610B4F5, dispatch slot 0x6610790C, modOpcodes line 1134.

FStVarZero

(4,0xF7)emittedprimary of 2handler #719Variantconfirmed_handler
Store a Variant temporary into a frame slot and zero the source (move semantics).

Moves a Variant into the slot %a and clears the source, so the temporary is not freed twice.

When the compiler emits it

Observed when the enumerable of a For Each comes from a function call (For Each x In F()). The compiler emits (4,F7); (5,39) is the other slot with this name.

VB6 source (verified: compiles to this slot)
Public Sub Main()
  Dim c As New Collection, x As Variant
  For Each x In F()
  Next
  For Each x In G()
  Next
End Sub

Function F() As Variant
End Function
Function G() As Collection
End Function
Encoding, evidence and notes
Encoding

Encoding: FE F7 (lead byte FE selects table 4), then 2 operand byte(s); total instruction length 4 byte(s).
vbdec template: %a
Operands:

  1. %a: local_var_ref, 2 byte(s). signed 16-bit offset from the procedure frame pointer (EBP). Negative = local/temporary (vbdec var_XX, XX = -offset), positive = argument (arg_XX).

Observed: FEF7 48FF FStVarZero var_B8

Examples
FEF7 48FF  FStVarZero var_B8

From the Phase 4 probe (VB6 SP6, P-code).

Evidence and notes

Emitted by VB6 SP6 (P-code): yes. Minimal probe: probes\op\4_F7_FStVarZero.

Handler: 0x6610B67C, shared by 2 dispatch slots (real opcode #719). This is the primary slot. Other slots: (5,39) FStVarZero.

Check of vb6_source_eq example: verified: compiles and emits this slot.

Example from the description
Public Sub Main()
  Dim c As New Collection, x As Variant
  For Each x In F()
  Next
  For Each x In G()
  Next
End Sub

Function F() As Variant
End Function
Function G() As Collection
End Function
Slots sharing this handler

(5,0x39) FStVarZero

Description: draft, by claude-opus-5-5. Handler 0x6610B67C, dispatch slot 0x661080F0, modOpcodes line 1143.

FStVarZero

(5,0x39)not emitteddup of (4,F7)handler #719Variantinferred_corpus
Same handler as (4,0xF7) FStVarZero: Store a Variant temporary into a frame slot and zero the source (move semantics).
Encoding, evidence and notes
Encoding

Encoding: FF 39 (lead byte FF selects table 5), then 2 operand byte(s); total instruction length 4 byte(s).
vbdec template: %a
Operands:

  1. %a: local_var_ref, 2 byte(s). signed 16-bit offset from the procedure frame pointer (EBP). Negative = local/temporary (vbdec var_XX, XX = -offset), positive = argument (arg_XX).
Evidence and notes

Emitted by VB6 SP6 (P-code): not observed in about 3,070 probe programs. The slot exists in the runtime's dispatch table, but no tested source construct makes the compiler emit it.

Handler: 0x6610B67C, shared by 2 dispatch slots (real opcode #719). This is a duplicate slot of (4,F7) FStVarZero. Other slots: (4,F7) FStVarZero.

Slots sharing this handler

(4,0xF7) FStVarZero

Description: none. Handler 0x6610B67C, dispatch slot 0x661081F8, modOpcodes line 1142.

File_IO

File I/O (#)

Close

(3,0x3D)emittedhandler #501File I/O & Printconfirmed_msdocs40 corpus hits
File I/O primitive: Close.

Implements one of VB6's Open/Close/Print/Write/Get/Put/Seek/Name/Reset statements. Operates on the legacy file-number (#N) channel table maintained by msvbvm60. See the printf template for argument layout.

When the compiler emits it

Emitted at the source-level file I/O keyword that lowers to Close.

VB6 source (verified: compiles to this slot)
Public Sub Main()
  Close #1
End Sub
Encoding, evidence and notes
Encoding

Encoding: FD 3D (lead byte FD selects table 3), then 0 operand byte(s); total instruction length 2 byte(s).
Operands: none. All inputs come from the evaluation stack or the frame.
Observed: FD3D Close

Examples
Form1.mnuDecompileFlash_Click @ 0x4613A8 | 46160C    FD3D                  Close
Form1.mnuDecompressSWC_Click @ 0x45E9E4 | 45EB40    FD3D                  Close
Form1.mnuDecompressSWC_Click @ 0x45E9E4 | 45EBFB    FD3D                  Close

40 occurrence(s) in PDFStreamDumper.

Evidence and notes

Emitted by VB6 SP6 (P-code): yes. Minimal probe: probes\op\3_3D_Close.

Handler: 0x661055ED, unique to this slot (real opcode #501).

Corpus: 40 occurrence(s) in PDFStreamDumper_p.exe.

Description: draft, by claude-opus-4.7. Handler 0x661055ED, dispatch slot 0x66107A08, modOpcodes line 498.

CloseAll

(3,0x3E)emittedhandler #502File I/O & Printconfirmed_msdocs1 corpus hits
File I/O primitive: CloseAll.

Implements one of VB6's Open/Close/Print/Write/Get/Put/Seek/Name/Reset statements. Operates on the legacy file-number (#N) channel table maintained by msvbvm60. See the printf template for argument layout.

When the compiler emits it

Emitted at the source-level file I/O keyword that lowers to CloseAll.

VB6 source (verified: compiles to this slot)
Public Sub Main()
  Close
End Sub
Encoding, evidence and notes
Encoding

Encoding: FD 3E (lead byte FD selects table 3), then 0 operand byte(s); total instruction length 2 byte(s).
Operands: none. All inputs come from the evaluation stack or the frame.
Observed: FD3E CloseAll

Examples
Form2.Shellcode2Exe @ 0x470410 | 470945    FD3E                  CloseAll

1 occurrence(s) in PDFStreamDumper.

Evidence and notes

Emitted by VB6 SP6 (P-code): yes. Minimal probe: probes\op\3_3E_CloseAll.

Handler: 0x66109A47, unique to this slot (real opcode #502).

Corpus: 1 occurrence(s) in PDFStreamDumper_p.exe.

Description: draft, by claude-opus-4.7. Handler 0x66109A47, dispatch slot 0x66107A0C, modOpcodes line 499.

GetRec3

(2,0x75)emittedhandler #409File I/O & Printconfirmed_msdocs1 corpus hits
File I/O primitive: GetRec3.

Implements one of VB6's Open/Close/Print/Write/Get/Put/Seek/Name/Reset statements. Operates on the legacy file-number (#N) channel table maintained by msvbvm60. See the printf template for argument layout.

When the compiler emits it

Emitted at the source-level file I/O keyword that lowers to GetRec3.

VB6 source (verified: compiles to this slot)
Public Sub Main()
  Dim f As Long, s As String
  Get #f, , s
End Sub
Encoding, evidence and notes
Encoding

Encoding: FC 75 (lead byte FC selects table 2), then 0 operand byte(s); total instruction length 2 byte(s).
Operands: none. All inputs come from the evaluation stack or the frame.
Observed: FC75 GetRec3

Examples
Form2.Shellcode2Exe @ 0x470410 | 47090C    FC75                  GetRec3

1 occurrence(s) in PDFStreamDumper.

Evidence and notes

Emitted by VB6 SP6 (P-code): yes. Minimal probe: probes\op\2_75_GetRec3.

Handler: 0x66109BF7, unique to this slot (real opcode #409).

Corpus: 1 occurrence(s) in PDFStreamDumper_p.exe.

Description: draft, by claude-opus-4.7. Handler 0x66109BF7, dispatch slot 0x661076E8, modOpcodes line 535.

GetRec4

(2,0x76)emittedhandler #410File I/O & Printconfirmed_msdocs
File I/O primitive: GetRec4.

Implements one of VB6's Open/Close/Print/Write/Get/Put/Seek/Name/Reset statements. Operates on the legacy file-number (#N) channel table maintained by msvbvm60. See the printf template for argument layout.

When the compiler emits it

Emitted at the source-level file I/O keyword that lowers to GetRec4.

VB6 source (verified: compiles to this slot)
Public Sub Main()
  Dim l As Long, s As String
  Get #1, 5, s: Put #1, 5, s
End Sub
Encoding, evidence and notes
Encoding

Encoding: FC 76 (lead byte FC selects table 2), then 0 operand byte(s); total instruction length 2 byte(s).
Operands: none. All inputs come from the evaluation stack or the frame.
Observed: FC76 GetRec4

Evidence and notes

Emitted by VB6 SP6 (P-code): yes. Minimal probe: probes\op\2_76_GetRec4.

Handler: 0x66109C19, unique to this slot (real opcode #410).

Description: draft, by claude-opus-4.7. Handler 0x66109C19, dispatch slot 0x661076EC, modOpcodes line 536.

GetRecFxStr3

(5,0x12)emittedhandler #743File I/O & Printconfirmed_msdocs
File I/O primitive: GetRecFxStr3.

Implements one of VB6's Open/Close/Print/Write/Get/Put/Seek/Name/Reset statements. Operates on the legacy file-number (#N) channel table maintained by msvbvm60. See the printf template for argument layout.

When the compiler emits it

Emitted at the source-level file I/O keyword that lowers to GetRecFxStr3.

VB6 source (verified: compiles to this slot)
Public Sub Main()
  Dim f As String * 10
  Get #1, , f: Put #1, , f
End Sub
Encoding, evidence and notes
Encoding

Encoding: FF 12 (lead byte FF selects table 5), then 0 operand byte(s); total instruction length 2 byte(s).
Operands: none. All inputs come from the evaluation stack or the frame.
Observed: FF12 GetRecFxStr3

Evidence and notes

Emitted by VB6 SP6 (P-code): yes. Minimal probe: probes\op\5_12_GetRecFxStr3.

Handler: 0x66109C85, unique to this slot (real opcode #743).

Description: draft, by claude-opus-4.7. Handler 0x66109C85, dispatch slot 0x6610815C, modOpcodes line 539.

GetRecFxStr4

(5,0x13)emittedhandler #744File I/O & Printconfirmed_msdocs
File I/O primitive: GetRecFxStr4.

Implements one of VB6's Open/Close/Print/Write/Get/Put/Seek/Name/Reset statements. Operates on the legacy file-number (#N) channel table maintained by msvbvm60. See the printf template for argument layout.

When the compiler emits it

Emitted at the source-level file I/O keyword that lowers to GetRecFxStr4.

VB6 source (verified: compiles to this slot)
Public Sub Main()
  Dim f As String * 10
  Get #1, 3, f: Put #1, 3, f
End Sub
Encoding, evidence and notes
Encoding

Encoding: FF 13 (lead byte FF selects table 5), then 0 operand byte(s); total instruction length 2 byte(s).
Operands: none. All inputs come from the evaluation stack or the frame.
Observed: FF13 GetRecFxStr4

Evidence and notes

Emitted by VB6 SP6 (P-code): yes. Minimal probe: probes\op\5_13_GetRecFxStr4.

Handler: 0x66109CA7, unique to this slot (real opcode #744).

Description: draft, by claude-opus-4.7. Handler 0x66109CA7, dispatch slot 0x66108160, modOpcodes line 540.

GetRecOwn3

(5,0x16)emittedhandler #747UDT / recordinferred_corpus17 corpus hits
File I/O primitive: GetRecOwn3.

Implements one of VB6's Open/Close/Print/Write/Get/Put/Seek/Name/Reset statements. Operates on the legacy file-number (#N) channel table maintained by msvbvm60. See the printf template for argument layout.

When the compiler emits it

Emitted at the source-level file I/O keyword that lowers to GetRecOwn3.

VB6 source (verified: compiles to this slot)
Private Type TRec
  a As Long
  s As String
  v As Variant
  o As Object
End Type
Private Type TPlain
  a As Long
  b As Integer
End Type

Public Sub Main()
  Dim r() As TPlain, f As Integer
  Get #f, , r
End Sub
Encoding, evidence and notes
Encoding

Encoding: FF 16 (lead byte FF selects table 5), then 2 operand byte(s); total instruction length 4 byte(s).
vbdec template: udtPoolIndex:%2
Operands:

  1. %2 (udtPoolIndex): immediate_word, 2 byte(s). 16-bit immediate.

Observed: FF16 0000 GetRecOwn3 udtPoolIndex:0x0

Examples
Form1.mnuDecompressSWC_Click @ 0x45E9E4 | 45EA87    FF16 4500             GetRecOwn3 udtPoolIndex:0x45
Form1.mnuDecompressSWC_Click @ 0x45E9E4 | 45EB36    FF16 4500             GetRecOwn3 udtPoolIndex:0x45
Form1.mnuUpdateCurrent_Click @ 0x46EC0C | 46F08F    FF16 4500             GetRecOwn3 udtPoolIndex:0x45

17 occurrence(s) in PDFStreamDumper.

Evidence and notes

Emitted by VB6 SP6 (P-code): yes. Minimal probe: probes\op\5_16_GetRecOwn3.

Handler: 0x66109CC9, unique to this slot (real opcode #747).

Corpus: 17 occurrence(s) in PDFStreamDumper_p.exe.

Description: draft, by claude-opus-4.7. Handler 0x66109CC9, dispatch slot 0x6610816C, modOpcodes line 541.

GetRecOwn4

(5,0x17)emittedhandler #748UDT / recordinferred_corpus4 corpus hits
File I/O primitive: GetRecOwn4.

Implements one of VB6's Open/Close/Print/Write/Get/Put/Seek/Name/Reset statements. Operates on the legacy file-number (#N) channel table maintained by msvbvm60. See the printf template for argument layout.

When the compiler emits it

Emitted at the source-level file I/O keyword that lowers to GetRecOwn4.

VB6 source (verified: compiles to this slot)
Private Type TR
  a As Long
  s As String * 4
End Type

Public Sub Main()
  Dim r As TR
  Get #1, 2, r
End Sub
Encoding, evidence and notes
Encoding

Encoding: FF 17 (lead byte FF selects table 5), then 2 operand byte(s); total instruction length 4 byte(s).
vbdec template: udtPoolIndex:%2
Operands:

  1. %2 (udtPoolIndex): immediate_word, 2 byte(s). 16-bit immediate.

Observed: FF17 0100 GetRecOwn4 udtPoolIndex:0x1

Examples
Form1.mnuUpdateCurrent_Click @ 0x46EC0C | 46F0EE    FF17 4500             GetRecOwn4 udtPoolIndex:0x45
Form1.mnuWipeStream_Click @ 0x46D520 | 46D906    FF17 4500             GetRecOwn4 udtPoolIndex:0x45
Form1.mnuReplaceStream_Click @ 0x46DAD0 | 46DEF9    FF17 4500             GetRecOwn4 udtPoolIndex:0x45

4 occurrence(s) in PDFStreamDumper.

Evidence and notes

Emitted by VB6 SP6 (P-code): yes. Minimal probe: probes\op\5_17_GetRecOwn4.

Handler: 0x66109CE6, unique to this slot (real opcode #748).

Corpus: 4 occurrence(s) in PDFStreamDumper_p.exe.

Description: draft, by claude-opus-4.7. Handler 0x66109CE6, dispatch slot 0x66108170, modOpcodes line 542.

GetRecOwner3

(2,0x79)not emittedhandler #413UDT / recordinferred_corpus
No description yet.
Encoding, evidence and notes
Encoding

Encoding: FC 79 (lead byte FC selects table 2), then a variable-length operand block (the first operand gives its byte count).
Operands: none. All inputs come from the evaluation stack or the frame.

Evidence and notes

Emitted by VB6 SP6 (P-code): not observed in about 3,070 probe programs. The slot exists in the runtime's dispatch table, but no tested source construct makes the compiler emit it.

Handler: 0x66109C3B, unique to this slot (real opcode #413).

Description: none. Handler 0x66109C3B, dispatch slot 0x661076F8, modOpcodes line 537.

GetRecOwner4

(2,0x7A)not emittedhandler #414UDT / recordinferred_corpus
No description yet.
Encoding, evidence and notes
Encoding

Encoding: FC 7A (lead byte FC selects table 2), then a variable-length operand block (the first operand gives its byte count).
Operands: none. All inputs come from the evaluation stack or the frame.

Evidence and notes

Emitted by VB6 SP6 (P-code): not observed in about 3,070 probe programs. The slot exists in the runtime's dispatch table, but no tested source construct makes the compiler emit it.

Handler: 0x66109C60, unique to this slot (real opcode #414).

Description: none. Handler 0x66109C60, dispatch slot 0x661076FC, modOpcodes line 538.

Input

(2,0x7D)not emittedhandler #417File I/O & Printconfirmed_msdocs
File I/O primitive: Input.

Implements one of VB6's Open/Close/Print/Write/Get/Put/Seek/Name/Reset statements. Operates on the legacy file-number (#N) channel table maintained by msvbvm60. See the printf template for argument layout.

When the compiler emits it

Emitted at the source-level file I/O keyword that lowers to Input.

Encoding, evidence and notes
Encoding

Encoding: FC 7D (lead byte FC selects table 2), then 0 operand byte(s); total instruction length 2 byte(s).
Operands: none. All inputs come from the evaluation stack or the frame.

Evidence and notes

Emitted by VB6 SP6 (P-code): not observed in about 3,070 probe programs. The slot exists in the runtime's dispatch table, but no tested source construct makes the compiler emit it.

Handler: 0x66109A7D, unique to this slot (real opcode #417).

Description: draft, by claude-opus-4.7. Handler 0x66109A7D, dispatch slot 0x66107708, modOpcodes line 503.

InputDone

(2,0x7E)not emittedhandler #418File I/O & Printconfirmed_msdocs
File I/O primitive: InputDone.

Implements one of VB6's Open/Close/Print/Write/Get/Put/Seek/Name/Reset statements. Operates on the legacy file-number (#N) channel table maintained by msvbvm60. See the printf template for argument layout.

When the compiler emits it

Emitted at the source-level file I/O keyword that lowers to InputDone.

Encoding, evidence and notes
Encoding

Encoding: FC 7E (lead byte FC selects table 2), then 0 operand byte(s); total instruction length 2 byte(s).
Operands: none. All inputs come from the evaluation stack or the frame.

Evidence and notes

Emitted by VB6 SP6 (P-code): not observed in about 3,070 probe programs. The slot exists in the runtime's dispatch table, but no tested source construct makes the compiler emit it.

Handler: 0x66109A8E, unique to this slot (real opcode #418).

Description: draft, by claude-opus-4.7. Handler 0x66109A8E, dispatch slot 0x6610770C, modOpcodes line 504.

InputFile

(5,0x10)emittedhandler #742File I/O & Printinferred_corpus
Input # statement: read a list of items, one descriptor-driven call.

Pops the file number and one reference per item (pushed in reverse order with FLdRfVar), then parses each comma-delimited field into its variable according to the type descriptor.

Stack: [..., ref_n, ..., ref_1, filenum:I2] -> [...]

Operands (4 bytes): descriptor index and item count (observed 0000 3000 for 10 items).

When the compiler emits it

Emitted for every Input #n, a, b, .... VB6 SP6 never emits the legacy per-item InputItem* opcodes.

VB6 source (verified: compiles to this slot)
Public Sub Main()
  Dim a As Byte, i As Integer, l As Long, f As Single, d As Double, c As Currency, s As String, v As Variant, b As Boolean, dt As Date
  Input #1, a, i, l, f, d, c, s, v, b, dt
End Sub
Encoding, evidence and notes
Encoding

Encoding: FF 10 (lead byte FF selects table 5), then 4 operand byte(s); total instruction length 6 byte(s).
No printf operands are declared, but the instruction still consumes operand bytes; see the size above and the observed bytes below. (Phase 3a: flag=0 does not mean 'no operands'.)
Observed: FF10 00003000 InputFile

Examples
FF10 00003000  InputFile

From the Phase 4 probe (VB6 SP6, P-code).

Evidence and notes

Emitted by VB6 SP6 (P-code): yes. Minimal probe: probes\op\5_10_InputFile.

Handler: 0x66109BB1, unique to this slot (real opcode #742).

Finding: Probe: an entire Input #n, a, b, c statement compiles to one InputFile with a per-item type descriptor. The per-item InputItem* / Input / InputDone opcodes are never emitted by VB6 SP6.

Check of vb6_source_eq example: verified: compiles and emits this slot.

Example from the description
Public Sub Main()
  Dim a As Byte, i As Integer, l As Long, f As Single, d As Double, c As Currency, s As String, v As Variant, b As Boolean, dt As Date
  Input #1, a, i, l, f, d, c, s, v, b, dt
End Sub

Description: draft, by claude-opus-5-5. Handler 0x66109BB1, dispatch slot 0x66108154, modOpcodes line 505.

InputItemBool

(2,0x87)not emittedhandler #427File I/O & Printconfirmed_msdocs
File I/O primitive: InputItemBool.

Implements one of VB6's Open/Close/Print/Write/Get/Put/Seek/Name/Reset statements. Operates on the legacy file-number (#N) channel table maintained by msvbvm60. See the printf template for argument layout.

When the compiler emits it

Emitted at the source-level file I/O keyword that lowers to InputItemBool.

Encoding, evidence and notes
Encoding

Encoding: FC 87 (lead byte FC selects table 2), then 0 operand byte(s); total instruction length 2 byte(s).
Operands: none. All inputs come from the evaluation stack or the frame.

Evidence and notes

Emitted by VB6 SP6 (P-code): not observed in about 3,070 probe programs. The slot exists in the runtime's dispatch table, but no tested source construct makes the compiler emit it.

Handler: 0x66109ABF, unique to this slot (real opcode #427).

Description: draft, by claude-opus-4.7. Handler 0x66109ABF, dispatch slot 0x66107730, modOpcodes line 514.

InputItemCy

(2,0x84)not emittedhandler #424File I/O & Printconfirmed_msdocs
File I/O primitive: InputItemCy.

Implements one of VB6's Open/Close/Print/Write/Get/Put/Seek/Name/Reset statements. Operates on the legacy file-number (#N) channel table maintained by msvbvm60. See the printf template for argument layout.

When the compiler emits it

Emitted at the source-level file I/O keyword that lowers to InputItemCy.

Encoding, evidence and notes
Encoding

Encoding: FC 84 (lead byte FC selects table 2), then 0 operand byte(s); total instruction length 2 byte(s).
Operands: none. All inputs come from the evaluation stack or the frame.

Evidence and notes

Emitted by VB6 SP6 (P-code): not observed in about 3,070 probe programs. The slot exists in the runtime's dispatch table, but no tested source construct makes the compiler emit it.

Handler: 0x66109B65, unique to this slot (real opcode #424).

Description: draft, by claude-opus-4.7. Handler 0x66109B65, dispatch slot 0x66107724, modOpcodes line 511.

InputItemDate

(2,0x88)not emittedhandler #428File I/O & Printconfirmed_msdocs
File I/O primitive: InputItemDate.

Implements one of VB6's Open/Close/Print/Write/Get/Put/Seek/Name/Reset statements. Operates on the legacy file-number (#N) channel table maintained by msvbvm60. See the printf template for argument layout.

When the compiler emits it

Emitted at the source-level file I/O keyword that lowers to InputItemDate.

Encoding, evidence and notes
Encoding

Encoding: FC 88 (lead byte FC selects table 2), then 0 operand byte(s); total instruction length 2 byte(s).
Operands: none. All inputs come from the evaluation stack or the frame.

Evidence and notes

Emitted by VB6 SP6 (P-code): not observed in about 3,070 probe programs. The slot exists in the runtime's dispatch table, but no tested source construct makes the compiler emit it.

Handler: 0x66109B3A, unique to this slot (real opcode #428).

Description: draft, by claude-opus-4.7. Handler 0x66109B3A, dispatch slot 0x66107734, modOpcodes line 515.

InputItemI2

(2,0x80)not emittedhandler #420File I/O & Printconfirmed_msdocs
File I/O primitive: InputItemI2.

Implements one of VB6's Open/Close/Print/Write/Get/Put/Seek/Name/Reset statements. Operates on the legacy file-number (#N) channel table maintained by msvbvm60. See the printf template for argument layout.

When the compiler emits it

Emitted at the source-level file I/O keyword that lowers to InputItemI2.

Encoding, evidence and notes
Encoding

Encoding: FC 80 (lead byte FC selects table 2), then 0 operand byte(s); total instruction length 2 byte(s).
Operands: none. All inputs come from the evaluation stack or the frame.

Evidence and notes

Emitted by VB6 SP6 (P-code): not observed in about 3,070 probe programs. The slot exists in the runtime's dispatch table, but no tested source construct makes the compiler emit it.

Handler: 0x66109AE3, unique to this slot (real opcode #420).

Description: draft, by claude-opus-4.7. Handler 0x66109AE3, dispatch slot 0x66107714, modOpcodes line 507.

InputItemI4

(2,0x81)not emittedhandler #421File I/O & Printconfirmed_msdocs
File I/O primitive: InputItemI4.

Implements one of VB6's Open/Close/Print/Write/Get/Put/Seek/Name/Reset statements. Operates on the legacy file-number (#N) channel table maintained by msvbvm60. See the printf template for argument layout.

When the compiler emits it

Emitted at the source-level file I/O keyword that lowers to InputItemI4.

Encoding, evidence and notes
Encoding

Encoding: FC 81 (lead byte FC selects table 2), then 0 operand byte(s); total instruction length 2 byte(s).
Operands: none. All inputs come from the evaluation stack or the frame.

Evidence and notes

Emitted by VB6 SP6 (P-code): not observed in about 3,070 probe programs. The slot exists in the runtime's dispatch table, but no tested source construct makes the compiler emit it.

Handler: 0x66109B34, unique to this slot (real opcode #421).

Description: draft, by claude-opus-4.7. Handler 0x66109B34, dispatch slot 0x66107718, modOpcodes line 508.

InputItemR4

(2,0x82)not emittedhandler #422File I/O & Printconfirmed_msdocs
File I/O primitive: InputItemR4.

Implements one of VB6's Open/Close/Print/Write/Get/Put/Seek/Name/Reset statements. Operates on the legacy file-number (#N) channel table maintained by msvbvm60. See the printf template for argument layout.

When the compiler emits it

Emitted at the source-level file I/O keyword that lowers to InputItemR4.

Encoding, evidence and notes
Encoding

Encoding: FC 82 (lead byte FC selects table 2), then 0 operand byte(s); total instruction length 2 byte(s).
Operands: none. All inputs come from the evaluation stack or the frame.

Evidence and notes

Emitted by VB6 SP6 (P-code): not observed in about 3,070 probe programs. The slot exists in the runtime's dispatch table, but no tested source construct makes the compiler emit it.

Handler: 0x66109B13, unique to this slot (real opcode #422).

Description: draft, by claude-opus-4.7. Handler 0x66109B13, dispatch slot 0x6610771C, modOpcodes line 509.

InputItemR8

(2,0x83)not emittedhandler #423File I/O & Printconfirmed_msdocs
File I/O primitive: InputItemR8.

Implements one of VB6's Open/Close/Print/Write/Get/Put/Seek/Name/Reset statements. Operates on the legacy file-number (#N) channel table maintained by msvbvm60. See the printf template for argument layout.

When the compiler emits it

Emitted at the source-level file I/O keyword that lowers to InputItemR8.

Encoding, evidence and notes
Encoding

Encoding: FC 83 (lead byte FC selects table 2), then 0 operand byte(s); total instruction length 2 byte(s).
Operands: none. All inputs come from the evaluation stack or the frame.

Evidence and notes

Emitted by VB6 SP6 (P-code): not observed in about 3,070 probe programs. The slot exists in the runtime's dispatch table, but no tested source construct makes the compiler emit it.

Handler: 0x66109B5F, unique to this slot (real opcode #423).

Description: draft, by claude-opus-4.7. Handler 0x66109B5F, dispatch slot 0x66107720, modOpcodes line 510.

InputItemStr

(2,0x86)not emittedhandler #426File I/O & Printconfirmed_msdocs
File I/O primitive: InputItemStr.

Implements one of VB6's Open/Close/Print/Write/Get/Put/Seek/Name/Reset statements. Operates on the legacy file-number (#N) channel table maintained by msvbvm60. See the printf template for argument layout.

When the compiler emits it

Emitted at the source-level file I/O keyword that lowers to InputItemStr.

Encoding, evidence and notes
Encoding

Encoding: FC 86 (lead byte FC selects table 2), then 0 operand byte(s); total instruction length 2 byte(s).
Operands: none. All inputs come from the evaluation stack or the frame.

Evidence and notes

Emitted by VB6 SP6 (P-code): not observed in about 3,070 probe programs. The slot exists in the runtime's dispatch table, but no tested source construct makes the compiler emit it.

Handler: 0x66109AE9, unique to this slot (real opcode #426).

Description: draft, by claude-opus-4.7. Handler 0x66109AE9, dispatch slot 0x6610772C, modOpcodes line 513.

InputItemUI1

(2,0x7F)not emittedhandler #419File I/O & Printconfirmed_msdocs
File I/O primitive: InputItemUI1.

Implements one of VB6's Open/Close/Print/Write/Get/Put/Seek/Name/Reset statements. Operates on the legacy file-number (#N) channel table maintained by msvbvm60. See the printf template for argument layout.

When the compiler emits it

Emitted at the source-level file I/O keyword that lowers to InputItemUI1.

Encoding, evidence and notes
Encoding

Encoding: FC 7F (lead byte FC selects table 2), then 0 operand byte(s); total instruction length 2 byte(s).
Operands: none. All inputs come from the evaluation stack or the frame.

Evidence and notes

Emitted by VB6 SP6 (P-code): not observed in about 3,070 probe programs. The slot exists in the runtime's dispatch table, but no tested source construct makes the compiler emit it.

Handler: 0x66109A9F, unique to this slot (real opcode #419).

Description: draft, by claude-opus-4.7. Handler 0x66109A9F, dispatch slot 0x66107710, modOpcodes line 506.

InputItemVar

(2,0x85)not emittedhandler #425File I/O & Printconfirmed_msdocs
File I/O primitive: InputItemVar.

Implements one of VB6's Open/Close/Print/Write/Get/Put/Seek/Name/Reset statements. Operates on the legacy file-number (#N) channel table maintained by msvbvm60. See the printf template for argument layout.

When the compiler emits it

Emitted at the source-level file I/O keyword that lowers to InputItemVar.

Encoding, evidence and notes
Encoding

Encoding: FC 85 (lead byte FC selects table 2), then 0 operand byte(s); total instruction length 2 byte(s).
Operands: none. All inputs come from the evaluation stack or the frame.

Evidence and notes

Emitted by VB6 SP6 (P-code): not observed in about 3,070 probe programs. The slot exists in the runtime's dispatch table, but no tested source construct makes the compiler emit it.

Handler: 0x66109B6B, unique to this slot (real opcode #425).

Description: draft, by claude-opus-4.7. Handler 0x66109B6B, dispatch slot 0x66107728, modOpcodes line 512.

LineInputStr

(2,0xC0)emittedhandler #456File I/O & Printconfirmed_msdocs
File I/O primitive: LineInputStr.

Implements one of VB6's Open/Close/Print/Write/Get/Put/Seek/Name/Reset statements. Operates on the legacy file-number (#N) channel table maintained by msvbvm60. See the printf template for argument layout.

When the compiler emits it

Emitted at the source-level file I/O keyword that lowers to LineInputStr.

VB6 source (verified: compiles to this slot)
Public Sub Main()
  Dim s As String, v As Variant
  Line Input #1, s
End Sub
Encoding, evidence and notes
Encoding

Encoding: FC C0 (lead byte FC selects table 2), then 0 operand byte(s); total instruction length 2 byte(s).
Operands: none. All inputs come from the evaluation stack or the frame.
Observed: FCC0 LineInputStr

Evidence and notes

Emitted by VB6 SP6 (P-code): yes. Minimal probe: probes\op\2_C0_LineInputStr.

Handler: 0x66109BD5, unique to this slot (real opcode #456).

Description: draft, by claude-opus-4.7. Handler 0x66109BD5, dispatch slot 0x66107814, modOpcodes line 517.

LineInputVar

(2,0xBF)emittedhandler #455File I/O & Printconfirmed_msdocs
File I/O primitive: LineInputVar.

Implements one of VB6's Open/Close/Print/Write/Get/Put/Seek/Name/Reset statements. Operates on the legacy file-number (#N) channel table maintained by msvbvm60. See the printf template for argument layout.

When the compiler emits it

Emitted at the source-level file I/O keyword that lowers to LineInputVar.

VB6 source (verified: compiles to this slot)
Public Sub Main()
  Dim s As String, v As Variant
  Line Input #1, v
End Sub
Encoding, evidence and notes
Encoding

Encoding: FC BF (lead byte FC selects table 2), then 0 operand byte(s); total instruction length 2 byte(s).
Operands: none. All inputs come from the evaluation stack or the frame.
Observed: FCBF LineInputVar

Evidence and notes

Emitted by VB6 SP6 (P-code): yes. Minimal probe: probes\op\2_BF_LineInputVar.

Handler: 0x66109BE6, unique to this slot (real opcode #455).

Description: draft, by claude-opus-4.7. Handler 0x66109BE6, dispatch slot 0x66107810, modOpcodes line 516.

LockFile

(4,0x5E)emittedhandler #618File I/O & Printinferred_corpus
Lock / Unlock statement.

Pops the record range and the file number and locks or unlocks the region.

Stack: [..., filenum:I2, from:I4, to:I4] -> [...]

Operand (16-bit): flags selecting lock/unlock and whether a range was given (observed 0x0005 for Unlock #1, 3).

When the compiler emits it

Emitted for Lock #n[, rec | from To to] and Unlock ....

VB6 source (verified: compiles to this slot)
Public Sub Main()
  Unlock #1, 3
End Sub
Encoding, evidence and notes
Encoding

Encoding: FE 5E (lead byte FE selects table 4), then 2 operand byte(s); total instruction length 4 byte(s).
No printf operands are declared, but the instruction still consumes operand bytes; see the size above and the observed bytes below. (Phase 3a: flag=0 does not mean 'no operands'.)
Observed: FE5E 0500 LockFile

Examples
FE5E 0500  LockFile

From the Phase 4 probe (VB6 SP6, P-code).

Evidence and notes

Emitted by VB6 SP6 (P-code): yes. Minimal probe: probes\op\4_5E_LockFile.

Handler: 0x66109D3D, unique to this slot (real opcode #618).

Check of vb6_source_eq example: verified: compiles and emits this slot.

Example from the description
Public Sub Main()
  Unlock #1, 3
End Sub

Description: draft, by claude-opus-5-5. Handler 0x66109D3D, dispatch slot 0x66107E8C, modOpcodes line 497.

NameFile

(1,0xFB)emittedhandler #352File I/O & Printconfirmed_msdocs2 corpus hits
File I/O primitive: NameFile.

Implements one of VB6's Open/Close/Print/Write/Get/Put/Seek/Name/Reset statements. Operates on the legacy file-number (#N) channel table maintained by msvbvm60. See the printf template for argument layout.

When the compiler emits it

Emitted at the source-level file I/O keyword that lowers to NameFile.

VB6 source (verified: compiles to this slot)
Public Sub Main()
  Name "c:\a" As "c:\b"
End Sub
Encoding, evidence and notes
Encoding

Encoding: FB FB (lead byte FB selects table 1), then 0 operand byte(s); total instruction length 2 byte(s).
Operands: none. All inputs come from the evaluation stack or the frame.
Observed: FBFB NameFile

Examples
Form1.ucAsyncDownload1_(fPath As String)  @ 0x445F60 | 445F86    FBFB                  NameFile
fso.Proc_44160C @ 0x44160C | 441640    FBFB                  NameFile

2 occurrence(s) in PDFStreamDumper.

Evidence and notes

Emitted by VB6 SP6 (P-code): yes. Minimal probe: probes\op\1_FB_NameFile.

Handler: 0x66109D66, unique to this slot (real opcode #352).

Corpus: 2 occurrence(s) in PDFStreamDumper_p.exe.

Description: draft, by claude-opus-4.7. Handler 0x66109D66, dispatch slot 0x66107500, modOpcodes line 501.

OpenFile

(4,0x5D)emittedhandler #617File I/O & Printcontextual40 corpus hits
Open statement: pop file name, file number and record length; open the file.

Pops the record length (observed -1 = default, pushed as LitI2_Byte 255), the file number and the file name, then opens the file through the runtime file table.

Stack: [..., name:Str, filenum:I2, reclen:I2] -> [...]

Operand (16-bit): mode/access/lock flags (observed 0x0002 for For Output; vbdec decodes the mode).

When the compiler emits it

Emitted for every Open ... For ... As #n [Len = x].

VB6 source (verified: compiles to this slot)
Public Sub Main()
  Open "c:\x.txt" For Output As #1
End Sub
Encoding, evidence and notes
Encoding

Encoding: FE 5D (lead byte FE selects table 4), then 2 operand byte(s); total instruction length 4 byte(s).
No printf operands are declared, but the instruction still consumes operand bytes; see the size above and the observed bytes below. (Phase 3a: flag=0 does not mean 'no operands'.)
Observed: FE5D 0200 OpenFile output

Examples
FE5D 0200  OpenFile output

From the Phase 4 probe (VB6 SP6, P-code).

Evidence and notes

Emitted by VB6 SP6 (P-code): yes. Minimal probe: probes\op\4_5D_OpenFile.

Handler: 0x661055D5, unique to this slot (real opcode #617).

Check of vb6_source_eq example: verified: compiles and emits this slot.

Corpus: 40 occurrence(s) in PDFStreamDumper_p.exe.

Example from the description
Public Sub Main()
  Open "c:\x.txt" For Output As #1
End Sub

Description: draft, by claude-opus-5-5. Handler 0x661055D5, dispatch slot 0x66107E88, modOpcodes line 496.

PutRec3

(2,0x77)emittedhandler #411File I/O & Printconfirmed_msdocs3 corpus hits
File I/O primitive: PutRec3.

Implements one of VB6's Open/Close/Print/Write/Get/Put/Seek/Name/Reset statements. Operates on the legacy file-number (#N) channel table maintained by msvbvm60. See the printf template for argument layout.

When the compiler emits it

Emitted at the source-level file I/O keyword that lowers to PutRec3.

VB6 source (verified: compiles to this slot)
Public Sub Main()
  Put #1, , "abc"
End Sub
Encoding, evidence and notes
Encoding

Encoding: FC 77 (lead byte FC selects table 2), then 0 operand byte(s); total instruction length 2 byte(s).
Operands: none. All inputs come from the evaluation stack or the frame.
Observed: FC77 PutRec3

Examples
lzma.Proc_46E084 @ 0x46E084 | 46E4CF    FC77                  PutRec3
lzma.Proc_46E084 @ 0x46E084 | 46E4ED    FC77                  PutRec3
lzma.Proc_46E084 @ 0x46E084 | 46E504    FC77                  PutRec3

3 occurrence(s) in PDFStreamDumper.

Evidence and notes

Emitted by VB6 SP6 (P-code): yes. Minimal probe: probes\op\2_77_PutRec3.

Handler: 0x66109C08, unique to this slot (real opcode #411).

Corpus: 3 occurrence(s) in PDFStreamDumper_p.exe.

Description: draft, by claude-opus-4.7. Handler 0x66109C08, dispatch slot 0x661076F0, modOpcodes line 544.

PutRec4

(2,0x78)emittedhandler #412File I/O & Printconfirmed_msdocs
File I/O primitive: PutRec4.

Implements one of VB6's Open/Close/Print/Write/Get/Put/Seek/Name/Reset statements. Operates on the legacy file-number (#N) channel table maintained by msvbvm60. See the printf template for argument layout.

When the compiler emits it

Emitted at the source-level file I/O keyword that lowers to PutRec4.

VB6 source (verified: compiles to this slot)
Public Sub Main()
  Put #1, 2, 1.5
End Sub
Encoding, evidence and notes
Encoding

Encoding: FC 78 (lead byte FC selects table 2), then 0 operand byte(s); total instruction length 2 byte(s).
Operands: none. All inputs come from the evaluation stack or the frame.
Observed: FC78 PutRec4

Evidence and notes

Emitted by VB6 SP6 (P-code): yes. Minimal probe: probes\op\2_78_PutRec4.

Handler: 0x66109C2A, unique to this slot (real opcode #412).

Description: draft, by claude-opus-4.7. Handler 0x66109C2A, dispatch slot 0x661076F4, modOpcodes line 545.

PutRecFxStr3

(5,0x14)emittedhandler #745File I/O & Printconfirmed_msdocs
File I/O primitive: PutRecFxStr3.

Implements one of VB6's Open/Close/Print/Write/Get/Put/Seek/Name/Reset statements. Operates on the legacy file-number (#N) channel table maintained by msvbvm60. See the printf template for argument layout.

When the compiler emits it

Emitted at the source-level file I/O keyword that lowers to PutRecFxStr3.

VB6 source (verified: compiles to this slot)
Public Sub Main()
  Dim f As String * 10
  Get #1, , f: Put #1, , f
End Sub
Encoding, evidence and notes
Encoding

Encoding: FF 14 (lead byte FF selects table 5), then 0 operand byte(s); total instruction length 2 byte(s).
Operands: none. All inputs come from the evaluation stack or the frame.
Observed: FF14 PutRecFxStr3

Evidence and notes

Emitted by VB6 SP6 (P-code): yes. Minimal probe: probes\op\5_14_PutRecFxStr3.

Handler: 0x66109C96, unique to this slot (real opcode #745).

Description: draft, by claude-opus-4.7. Handler 0x66109C96, dispatch slot 0x66108164, modOpcodes line 548.

PutRecFxStr4

(5,0x15)emittedhandler #746File I/O & Printconfirmed_msdocs
File I/O primitive: PutRecFxStr4.

Implements one of VB6's Open/Close/Print/Write/Get/Put/Seek/Name/Reset statements. Operates on the legacy file-number (#N) channel table maintained by msvbvm60. See the printf template for argument layout.

When the compiler emits it

Emitted at the source-level file I/O keyword that lowers to PutRecFxStr4.

VB6 source (verified: compiles to this slot)
Public Sub Main()
  Dim f As String * 10
  Get #1, 3, f: Put #1, 3, f
End Sub
Encoding, evidence and notes
Encoding

Encoding: FF 15 (lead byte FF selects table 5), then 0 operand byte(s); total instruction length 2 byte(s).
Operands: none. All inputs come from the evaluation stack or the frame.
Observed: FF15 PutRecFxStr4

Evidence and notes

Emitted by VB6 SP6 (P-code): yes. Minimal probe: probes\op\5_15_PutRecFxStr4.

Handler: 0x66109CB8, unique to this slot (real opcode #746).

Description: draft, by claude-opus-4.7. Handler 0x66109CB8, dispatch slot 0x66108168, modOpcodes line 549.

PutRecOwn3

(5,0x18)emittedhandler #749UDT / recordinferred_corpus36 corpus hits
File I/O primitive: PutRecOwn3.

Implements one of VB6's Open/Close/Print/Write/Get/Put/Seek/Name/Reset statements. Operates on the legacy file-number (#N) channel table maintained by msvbvm60. See the printf template for argument layout.

When the compiler emits it

Emitted at the source-level file I/O keyword that lowers to PutRecOwn3.

VB6 source (verified: compiles to this slot)
Private Type TRec
  a As Long
  s As String
  v As Variant
  o As Object
End Type
Private Type TPlain
  a As Long
  b As Integer
End Type

Public Sub Main()
  Dim r() As TPlain, f As Integer
  Put #f, , r
End Sub
Encoding, evidence and notes
Encoding

Encoding: FF 18 (lead byte FF selects table 5), then 2 operand byte(s); total instruction length 4 byte(s).
vbdec template: udtPoolIndex:%2
Operands:

  1. %2 (udtPoolIndex): immediate_word, 2 byte(s). 16-bit immediate.

Observed: FF18 0000 PutRecOwn3 udtPoolIndex:0x0

Examples
Form1.mnuDecompileFlash_Click @ 0x4613A8 | 461602    FF18 4500             PutRecOwn3 udtPoolIndex:0x45
Form1.mnuDecompressSWC_Click @ 0x45E9E4 | 45EBE3    FF18 4500             PutRecOwn3 udtPoolIndex:0x45
Form1.mnuDecompressSWC_Click @ 0x45E9E4 | 45EBF0    FF18 4500             PutRecOwn3 udtPoolIndex:0x45

36 occurrence(s) in PDFStreamDumper.

Evidence and notes

Emitted by VB6 SP6 (P-code): yes. Minimal probe: probes\op\5_18_PutRecOwn3.

Handler: 0x66109D03, unique to this slot (real opcode #749).

Corpus: 36 occurrence(s) in PDFStreamDumper_p.exe.

Description: draft, by claude-opus-4.7. Handler 0x66109D03, dispatch slot 0x66108174, modOpcodes line 550.

PutRecOwn4

(5,0x19)emittedhandler #750UDT / recordinferred_corpus2 corpus hits
File I/O primitive: PutRecOwn4.

Implements one of VB6's Open/Close/Print/Write/Get/Put/Seek/Name/Reset statements. Operates on the legacy file-number (#N) channel table maintained by msvbvm60. See the printf template for argument layout.

When the compiler emits it

Emitted at the source-level file I/O keyword that lowers to PutRecOwn4.

VB6 source (verified: compiles to this slot)
Private Type TR
  a As Long
  s As String * 4
End Type

Public Sub Main()
  Dim r As TR
  Put #1, 2, r
End Sub
Encoding, evidence and notes
Encoding

Encoding: FF 19 (lead byte FF selects table 5), then 2 operand byte(s); total instruction length 4 byte(s).
vbdec template: udtPoolIndex:%2
Operands:

  1. %2 (udtPoolIndex): immediate_word, 2 byte(s). 16-bit immediate.

Observed: FF19 0000 PutRecOwn4 udtPoolIndex:0x0

Examples
Form1.mnuWipeStream_Click @ 0x46D520 | 46D9C7    FF19 4500             PutRecOwn4 udtPoolIndex:0x45
Form2.Shellcode2Exe @ 0x470410 | 47093D    FF19 8A00             PutRecOwn4 udtPoolIndex:0x8A

2 occurrence(s) in PDFStreamDumper.

Evidence and notes

Emitted by VB6 SP6 (P-code): yes. Minimal probe: probes\op\5_19_PutRecOwn4.

Handler: 0x66109D20, unique to this slot (real opcode #750).

Corpus: 2 occurrence(s) in PDFStreamDumper_p.exe.

Description: draft, by claude-opus-4.7. Handler 0x66109D20, dispatch slot 0x66108178, modOpcodes line 551.

PutRecOwner3

(2,0x7B)not emittedhandler #415UDT / recordinferred_corpus
No description yet.
Encoding, evidence and notes
Encoding

Encoding: FC 7B (lead byte FC selects table 2), then a variable-length operand block (the first operand gives its byte count).
Operands: none. All inputs come from the evaluation stack or the frame.

Evidence and notes

Emitted by VB6 SP6 (P-code): not observed in about 3,070 probe programs. The slot exists in the runtime's dispatch table, but no tested source construct makes the compiler emit it.

Handler: 0x66109C58, unique to this slot (real opcode #415).

Description: none. Handler 0x66109C58, dispatch slot 0x66107700, modOpcodes line 546.

PutRecOwner4

(2,0x7C)not emittedhandler #416UDT / recordinferred_corpus
No description yet.
Encoding, evidence and notes
Encoding

Encoding: FC 7C (lead byte FC selects table 2), then a variable-length operand block (the first operand gives its byte count).
Operands: none. All inputs come from the evaluation stack or the frame.

Evidence and notes

Emitted by VB6 SP6 (P-code): not observed in about 3,070 probe programs. The slot exists in the runtime's dispatch table, but no tested source construct makes the compiler emit it.

Handler: 0x66109C7D, unique to this slot (real opcode #416).

Description: none. Handler 0x66109C7D, dispatch slot 0x66107704, modOpcodes line 547.

SeekFile

(1,0xFA)emittedhandler #351File I/O & Printconfirmed_msdocs1 corpus hits
File I/O primitive: SeekFile.

Implements one of VB6's Open/Close/Print/Write/Get/Put/Seek/Name/Reset statements. Operates on the legacy file-number (#N) channel table maintained by msvbvm60. See the printf template for argument layout.

When the compiler emits it

Emitted at the source-level file I/O keyword that lowers to SeekFile.

VB6 source (verified: compiles to this slot)
Public Sub Main()
  Dim n As Long
  Seek #1, 5
End Sub
Encoding, evidence and notes
Encoding

Encoding: FB FA (lead byte FB selects table 1), then 0 operand byte(s); total instruction length 2 byte(s).
Operands: none. All inputs come from the evaluation stack or the frame.
Observed: FBFA SeekFile

Examples
Form2.Shellcode2Exe @ 0x470410 | 4708E7    FBFA                  SeekFile

1 occurrence(s) in PDFStreamDumper.

Evidence and notes

Emitted by VB6 SP6 (P-code): yes. Minimal probe: probes\op\1_FA_SeekFile.

Handler: 0x66109D55, unique to this slot (real opcode #351).

Corpus: 1 occurrence(s) in PDFStreamDumper_p.exe.

Description: draft, by claude-opus-4.7. Handler 0x66109D55, dispatch slot 0x661074FC, modOpcodes line 500.

WriteChan

(3,0x33)not emittedhandler #491File I/O & Printconfirmed_msdocs
File I/O primitive: WriteChan.

Implements one of VB6's Open/Close/Print/Write/Get/Put/Seek/Name/Reset statements. Operates on the legacy file-number (#N) channel table maintained by msvbvm60. See the printf template for argument layout.

When the compiler emits it

Emitted at the source-level file I/O keyword that lowers to WriteChan.

Encoding, evidence and notes
Encoding

Encoding: FD 33 (lead byte FD selects table 3), then 0 operand byte(s); total instruction length 2 byte(s).
Operands: none. All inputs come from the evaluation stack or the frame.

Evidence and notes

Emitted by VB6 SP6 (P-code): not observed in about 3,070 probe programs. The slot exists in the runtime's dispatch table, but no tested source construct makes the compiler emit it.

Handler: 0x66109A6C, unique to this slot (real opcode #491).

Description: draft, by claude-opus-4.7. Handler 0x66109A6C, dispatch slot 0x661079E0, modOpcodes line 520.

WriteFile

(5,0x0F)emittedhandler #741File I/O & Printinferred_corpus
Write # statement: write a list of items, one descriptor-driven call.

Pops the file number and the items, and writes them comma-delimited with quoting, followed by a newline, according to the descriptor.

Operands (4 bytes): descriptor index and argument byte count (observed 0000 0800 for Write #1,).

When the compiler emits it

Emitted for every Write #n, .... The legacy WriteChan opcode is never emitted.

VB6 source (verified: compiles to this slot)
Public Sub Main()
  Dim n As Long, s As String, v As Variant, d As Date, c As Currency, b As Boolean
  Write #1,
End Sub
Encoding, evidence and notes
Encoding

Encoding: FF 0F (lead byte FF selects table 5), then 4 operand byte(s); total instruction length 6 byte(s).
No printf operands are declared, but the instruction still consumes operand bytes; see the size above and the observed bytes below. (Phase 3a: flag=0 does not mean 'no operands'.)
Observed: FF0F 00000800 WriteFile

Examples
FF0F 00000800  WriteFile

From the Phase 4 probe (VB6 SP6, P-code).

Evidence and notes

Emitted by VB6 SP6 (P-code): yes. Minimal probe: probes\op\5_0F_WriteFile.

Handler: 0x6610B8D6, unique to this slot (real opcode #741).

Finding: Probe: an entire Write #n, ... statement compiles to one WriteFile with a descriptor. WriteChan (3,33) is never emitted.

Check of vb6_source_eq example: verified: compiles and emits this slot.

Example from the description
Public Sub Main()
  Dim n As Long, s As String, v As Variant, d As Date, c As Currency, b As Boolean
  Write #1,
End Sub

Description: draft, by claude-opus-5-5. Handler 0x6610B8D6, dispatch slot 0x66108150, modOpcodes line 519.

Frame

Frame slot manipulation, no-pop variants

DestructAnsiOFrame

(4,0xF6)emittedhandler #718Stack & frameinferred_corpus5 corpus hits
Frame-slot manipulation (DestructAnsiOFrame).

Adjusts a frame-relative storage slot. See operand %a for the slot reference. Frame slots are local variables and arguments addressed as [ebp+offset].

When the compiler emits it

Emitted at variable load/store boundaries when no specialized loader applies.

VB6 source (verified: compiles to this slot)
Private Type TR
  s As String
End Type
Private Declare Sub P Lib "x.dll" (r As Any)

Public Sub Main()
  Dim r As TR
  P r
End Sub
Encoding, evidence and notes
Encoding

Encoding: FE F6 (lead byte FE selects table 4), then 4 operand byte(s); total instruction length 6 byte(s).
vbdec template: %a pool:%2
Operands:

  1. %a: local_var_ref, 2 byte(s). signed 16-bit offset from the procedure frame pointer (EBP). Negative = local/temporary (vbdec var_XX, XX = -offset), positive = argument (arg_XX).
  2. %2 (pool): immediate_word, 2 byte(s). 16-bit immediate.

Observed: FEF6 74FF0000 DestructAnsiOFrame var_8C pool:0x0

Examples
clsCmnDlg.OpenDialog @ 0x457B6C | 457C71    FEF6 24FF1700         DestructAnsiOFrame var_DC pool:0x17
clsCmnDlg.SaveDialog @ 0x45F270 | 45F3BD    FEF6 1CFF1700         DestructAnsiOFrame var_E4 pool:0x17
clsCmnDlg.ColorDialog @ 0x453728 | 4537BA    FEF6 00FF2D00         DestructAnsiOFrame var_100 pool:0x2D

5 occurrence(s) in PDFStreamDumper.

Evidence and notes

Emitted by VB6 SP6 (P-code): yes. Minimal probe: probes\op\4_F6_DestructAnsiOFrame.

Handler: 0x6610C0A1, unique to this slot (real opcode #718).

Corpus: 5 occurrence(s) in PDFStreamDumper_p.exe.

Description: draft, by claude-opus-4.7. Handler 0x6610C0A1, dispatch slot 0x661080EC, modOpcodes line 429.

DestructOFrame

(3,0xFF)emittedhandler #594UDT / recordinferred_corpus
Initialise (zero) a UDT temporary in the frame before a call that fills it.

Prepares the frame slot %a for a UDT returned by a call, so that later destruction of the temporary is safe. Observed right before calling a function As TRec whose UDT contains a String.

Operands: %a frame slot (2 bytes) and a 16-bit UDT-descriptor index (observed 0).

When the compiler emits it

Emitted before calling a function that returns a UDT containing reference-counted members (String/Variant/Object).

VB6 source (verified: compiles to this slot)
Private Type TRec
  a As Long
  s As String
  v As Variant
  o As Object
End Type
Private Type TPlain
  a As Long
  b As Integer
End Type

Public Sub Main()
  Dim r As TRec
  r = F()
End Sub

Private Function F() As TRec
  F.a = 1
End Function
Encoding, evidence and notes
Encoding

Encoding: FD FF (lead byte FD selects table 3), then 4 operand byte(s); total instruction length 6 byte(s).
No printf operands are declared, but the instruction still consumes operand bytes; see the size above and the observed bytes below. (Phase 3a: flag=0 does not mean 'no operands'.)
Observed: FDFF 44FF0000 DestructOFrame

Examples
FDFF 44FF0000  DestructOFrame

From the Phase 4 probe (VB6 SP6, P-code).

Evidence and notes

Emitted by VB6 SP6 (P-code): yes. Minimal probe: probes\op\3_FF_DestructOFrame.

Handler: 0x6610C07D, unique to this slot (real opcode #594).

Check of vb6_source_eq example: verified: compiles and emits this slot.

Example from the description
Private Type TRec
  a As Long
  s As String
  v As Variant
  o As Object
End Type
Private Type TPlain
  a As Long
  b As Integer
End Type

Public Sub Main()
  Dim r As TRec
  r = F()
End Sub

Private Function F() As TRec
  F.a = 1
End Function

Description: draft, by claude-opus-5-5. Handler 0x6610C07D, dispatch slot 0x66107D10, modOpcodes line 428.

EraseNoPop

(4,0xCF)not emittedhandler #691Arrayconfirmed_msdocs
Frame-slot manipulation (EraseNoPop).

Adjusts a frame-relative storage slot. See operand %a for the slot reference. Frame slots are local variables and arguments addressed as [ebp+offset].

When the compiler emits it

Emitted at variable load/store boundaries when no specialized loader applies.

Encoding, evidence and notes
Encoding

Encoding: FE CF (lead byte FE selects table 4), then 0 operand byte(s); total instruction length 2 byte(s).
Operands: none. All inputs come from the evaluation stack or the frame.

Evidence and notes

Emitted by VB6 SP6 (P-code): not observed in about 3,070 probe programs. The slot exists in the runtime's dispatch table, but no tested source construct makes the compiler emit it.

Handler: 0x66109109, unique to this slot (real opcode #691).

Description: draft, by claude-opus-4.7. Handler 0x66109109, dispatch slot 0x66108050, modOpcodes line 460.

LdFrameRf

(4,0x2F)not emittedhandler #613Stack & frameinferred_corpus
No description yet.
Encoding, evidence and notes
Encoding

Encoding: FE 2F (lead byte FE selects table 4), then 2 operand byte(s); total instruction length 4 byte(s).
No printf operands are declared, but the instruction still consumes operand bytes; see the size above and the observed bytes below. (Phase 3a: flag=0 does not mean 'no operands'.)

Evidence and notes

Emitted by VB6 SP6 (P-code): not observed in about 3,070 probe programs. The slot exists in the runtime's dispatch table, but no tested source construct makes the compiler emit it.

Handler: 0x6610BFB4, unique to this slot (real opcode #613).

Description: none. Handler 0x6610BFB4, dispatch slot 0x66107DD0, modOpcodes line 980.

LdPrUnkVar

(2,0x73)not emittedhandler #407Object / COMconfirmed_msdocs
Frame-slot manipulation (LdPrUnkVar).

Adjusts a frame-relative storage slot. See operand %a for the slot reference. Frame slots are local variables and arguments addressed as [ebp+offset].

When the compiler emits it

Emitted at variable load/store boundaries when no specialized loader applies.

Encoding, evidence and notes
Encoding

Encoding: FC 73 (lead byte FC selects table 2), then 0 operand byte(s); total instruction length 2 byte(s).
Operands: none. All inputs come from the evaluation stack or the frame.

Evidence and notes

Emitted by VB6 SP6 (P-code): not observed in about 3,070 probe programs. The slot exists in the runtime's dispatch table, but no tested source construct makes the compiler emit it.

Handler: 0x66109E21, unique to this slot (real opcode #407).

Description: draft, by claude-opus-4.7. Handler 0x66109E21, dispatch slot 0x661076E0, modOpcodes line 981.

LdPrVar

(3,0x9F)emittedhandler #552Object / COMconfirmed_msdocs1 corpus hits
Frame-slot manipulation (LdPrVar).

Adjusts a frame-relative storage slot. See operand %a for the slot reference. Frame slots are local variables and arguments addressed as [ebp+offset].

When the compiler emits it

Emitted at variable load/store boundaries when no specialized loader applies.

VB6 source (verified: compiles to this slot)
Public Sub Main()
  Dim v As Variant, w As Variant, n As Long
  v.DoIt n
End Sub

Sub P(x As Variant)
End Sub
Encoding, evidence and notes
Encoding

Encoding: FD 9F (lead byte FD selects table 3), then 0 operand byte(s); total instruction length 2 byte(s).
Operands: none. All inputs come from the evaluation stack or the frame.
Observed: FD9F LdPrVar

Examples
Form2.cmdRun_Click @ 0x469FCC | 46A02E    FD9F                  LdPrVar

1 occurrence(s) in PDFStreamDumper.

Evidence and notes

Emitted by VB6 SP6 (P-code): yes. Minimal probe: probes\op\3_9F_LdPrVar.

Handler: 0x66105729, unique to this slot (real opcode #552).

Corpus: 1 occurrence(s) in PDFStreamDumper_p.exe.

Description: draft, by claude-opus-4.7. Handler 0x66105729, dispatch slot 0x66107B90, modOpcodes line 982.

LdStkRf

(4,0x2E)not emittedhandler #612Stack & frameinferred_corpus
No description yet.
Encoding, evidence and notes
Encoding

Encoding: FE 2E (lead byte FE selects table 4), then 2 operand byte(s); total instruction length 4 byte(s).
No printf operands are declared, but the instruction still consumes operand bytes; see the size above and the observed bytes below. (Phase 3a: flag=0 does not mean 'no operands'.)

Evidence and notes

Emitted by VB6 SP6 (P-code): not observed in about 3,070 probe programs. The slot exists in the runtime's dispatch table, but no tested source construct makes the compiler emit it.

Handler: 0x6610BF9F, unique to this slot (real opcode #612).

Description: none. Handler 0x6610BF9F, dispatch slot 0x66107DCC, modOpcodes line 979.

SetVarVar

(4,0x4D)emittedhandler #615Variantconfirmed_msdocs
Frame-slot manipulation (SetVarVar).

Adjusts a frame-relative storage slot. See operand %a for the slot reference. Frame slots are local variables and arguments addressed as [ebp+offset].

When the compiler emits it

Emitted at variable load/store boundaries when no specialized loader applies.

VB6 source (verified: compiles to this slot)
Public Sub Main()
  Dim v As Variant, w As Variant
  Set v = w
End Sub
Encoding, evidence and notes
Encoding

Encoding: FE 4D (lead byte FE selects table 4), then 0 operand byte(s); total instruction length 2 byte(s).
Operands: none. All inputs come from the evaluation stack or the frame.
Observed: FE4D SetVarVar

Evidence and notes

Emitted by VB6 SP6 (P-code): yes. Minimal probe: probes\op\4_4D_SetVarVar.

Handler: 0x6610B669, unique to this slot (real opcode #615).

Description: draft, by claude-opus-4.7. Handler 0x6610B669, dispatch slot 0x66107E48, modOpcodes line 461.

SetVarVarFunc

(4,0x4E)emittedhandler #616Variantconfirmed_msdocs
Frame-slot manipulation (SetVarVarFunc).

Adjusts a frame-relative storage slot. See operand %a for the slot reference. Frame slots are local variables and arguments addressed as [ebp+offset].

When the compiler emits it

Emitted at variable load/store boundaries when no specialized loader applies.

VB6 source (verified: compiles to this slot)
Public Sub Main()
  Dim v As Variant, w As Variant, n As Long
  Set w = v.Child
End Sub

Sub P(x As Variant)
End Sub
Encoding, evidence and notes
Encoding

Encoding: FE 4E (lead byte FE selects table 4), then 0 operand byte(s); total instruction length 2 byte(s).
Operands: none. All inputs come from the evaluation stack or the frame.
Observed: FE4E SetVarVarFunc

Evidence and notes

Emitted by VB6 SP6 (P-code): yes. Minimal probe: probes\op\4_4E_SetVarVarFunc.

Handler: 0x6610B656, unique to this slot (real opcode #616).

Description: draft, by claude-opus-4.7. Handler 0x6610B656, dispatch slot 0x66107E4C, modOpcodes line 462.

StUdtVar

(5,0x35)emittedhandler #762UDT / recordinferred_corpus
Store a Variant holding a record into a UDT variable (udt = v).

Pops a Variant that contains a record (VT_RECORD), checks the record type against the destination UDT and copies the fields into it.

Operand: a 16-bit constant-pool index of the record type (observed 0).

When the compiler emits it

Emitted when a Variant is assigned to a public/typelib UDT variable (probe: gr = v, gr As TPubRec from a type library).

VB6 source (verified: compiles to this slot)
' references probes\_tlb\probetlb.tlb
Dim gr As TPubRec

Public Sub Main()
  Dim v As Variant
  gr = v
End Sub
Encoding, evidence and notes
Encoding

Encoding: FF 35 (lead byte FF selects table 5), then 2 operand byte(s); total instruction length 4 byte(s).
No printf operands are declared, but the instruction still consumes operand bytes; see the size above and the observed bytes below. (Phase 3a: flag=0 does not mean 'no operands'.)
Observed: FF35 0000 StUdtVar

Examples
FF35 0000  StUdtVar

From the Phase 4 probe (VB6 SP6, P-code).

Evidence and notes

Emitted by VB6 SP6 (P-code): yes. Minimal probe: probes\op\5_35_StUdtVar.

Handler: 0x661098D4, unique to this slot (real opcode #762).

Check of vb6_source_eq example: verified: compiles and emits this slot.

Example from the description
' references probes\_tlb\probetlb.tlb
Dim gr As TPubRec

Public Sub Main()
  Dim v As Variant
  gr = v
End Sub

Description: draft, by claude-opus-5-5. Handler 0x661098D4, dispatch slot 0x661081E8, modOpcodes line 983.

ZeroRetVal

(5,0x2D)emittedhandler #754Stack & frameconfirmed_msdocs38 corpus hits
Frame-slot manipulation (ZeroRetVal).

Adjusts a frame-relative storage slot. See operand %a for the slot reference. Frame slots are local variables and arguments addressed as [ebp+offset].

When the compiler emits it

Emitted at variable load/store boundaries when no specialized loader applies.

VB6 source (verified: compiles to this slot)
Public Sub Main()
  Dim o As New CR, s As String
End Sub
' ---- CR.cls
Public Function F(ByVal n As Long) As String
  If n Then F = "x": Exit Function
  F = "y"
End Function
Encoding, evidence and notes
Encoding

Encoding: FF 2D (lead byte FF selects table 5), then 0 operand byte(s); total instruction length 2 byte(s).
Operands: none. All inputs come from the evaluation stack or the frame.
Observed: FF2D ZeroRetVal

Examples
Form1.Proc_43F4AC @ 0x43F4AC | 43F4AE    FF2D                  ZeroRetVal
Form1.GetActiveData @ 0x464174 | 464176    FF2D                  ZeroRetVal
Form1.safe @ 0x44D7B8 | 44D7BE    FF2D                  ZeroRetVal

38 occurrence(s) in PDFStreamDumper.

Evidence and notes

Emitted by VB6 SP6 (P-code): yes. Minimal probe: probes\op\5_2D_ZeroRetVal.

Handler: 0x66106950, unique to this slot (real opcode #754).

Corpus: 38 occurrence(s) in PDFStreamDumper_p.exe.

Description: draft, by claude-opus-4.7. Handler 0x66106950, dispatch slot 0x661081C8, modOpcodes line 458.

ZeroRetValVar

(5,0x2E)emittedhandler #755Stack & frameconfirmed_msdocs75 corpus hits
Frame-slot manipulation (ZeroRetValVar).

Adjusts a frame-relative storage slot. See operand %a for the slot reference. Frame slots are local variables and arguments addressed as [ebp+offset].

When the compiler emits it

Emitted at variable load/store boundaries when no specialized loader applies.

VB6 source (verified: compiles to this slot)
Public Sub Main()
  Dim o As New CR, b As Variant
End Sub
' ---- CR.cls
Public Function F(ByVal n As Long) As Variant
End Function
Public Property Get P() As Variant
End Property
Private Function PF() As Variant
End Function
Public Sub Work()
  Dim b As Variant
  b = F(1)
  b = Me.F(2)
  b = P
  b = PF()
  F 3
  PF
End Sub
Encoding, evidence and notes
Encoding

Encoding: FF 2E (lead byte FF selects table 5), then 0 operand byte(s); total instruction length 2 byte(s).
Operands: none. All inputs come from the evaluation stack or the frame.
Observed: FF2E ZeroRetValVar

Examples
Form1.RegisterPlugin @ 0x44CB20 | 44CB20    FF2E                  ZeroRetValVar
Form1.DoEventsFor @ 0x44256C | 44256E    FF2E                  ZeroRetValVar
Form1.SleepFor @ 0x43E7AC | 43E7AE    FF2E                  ZeroRetValVar

75 occurrence(s) in PDFStreamDumper.

Evidence and notes

Emitted by VB6 SP6 (P-code): yes. Minimal probe: probes\op\5_2E_ZeroRetValVar.

Handler: 0x66106966, unique to this slot (real opcode #755).

Corpus: 75 occurrence(s) in PDFStreamDumper_p.exe.

Description: draft, by claude-opus-4.7. Handler 0x66106966, dispatch slot 0x661081CC, modOpcodes line 459.

IWMem_Load

IWMem loads: read through [W-base + offset], dereferenced once. Prefix: I + W + Mem + Ld (Phase 3a).

IWMemLdCy

(3,0x44)not emittedprimary of 2handler #506Currencycontextual
LOAD through a Currency (64-bit scaled int) at [W-base+offset] -> [eax], one extra dereference (8-byte, W+indirect).

Handler analysis (idalib, MSVBVM60.dll build 6.00.8268). Reads a 2-byte signed offset from the instruction stream and adds it to the pointer held at the fixed frame slot [ebp+10h]. That slot is set once by the procedure's caller ([ebp+10h] is procedure-invocation argument 3) and is never written by any handler in the ENGINE segment -- it is stable for the lifetime of the procedure.

This is an IWMem (indirect-W) variant: after computing base = [ebp+10h] + offset, the handler performs one extra dereference (mov eax, [eax]) before the final load. The slot at [ebp+10h] + offset is treated as itself a pointer to the actual Currency (64-bit scaled int).

Stack: [...] -> [..., (([([ebp+10h] + offset)])):Cy]

**Distinction from the corresponding Mem* opcode (non-W counterpart):** the regular Mem* family uses the runtime cache at [ebp-4Ch], which is updated by every preceding FLdPr, FLdPrThis, NewIfNullAd, Ary1LdPr, or LdPrVar instruction. The W-family bypasses that cache and uses the stable [ebp+10h] pointer instead -- so the W-base does not require a preceding object-load opcode to be set.

Identity of [ebp+10h] is not yet pinned. Handler analysis establishes the mechanical behavior; the source-language construct that establishes this secondary object pointer (parent scope, procedure descriptor, outer-class pointer, etc.) is not yet verified. PDFStreamDumper's corpus has zero occurrences of this family, suggesting the construct is rare in typical VB6 code. A targeted probe in Phase 4 should resolve which language-level construct emits these opcodes.

When the compiler emits it

Emitted when the compiler accesses a member through a STABLE, caller-supplied object pointer (the secondary slot at [ebp+10h]) rather than through the runtime object-load cache that Mem* uses. The specific source-language construct that establishes the W-base has not yet been pinned by handler analysis alone -- PDFStreamDumper's corpus has zero occurrences of the entire IWMem/WMem family, suggesting the construct is uncommon in typical VB6 code. Candidate emit triggers worth probing in Phase 4: nested-class member access, parent-scope references from inside an event handler, or compiler-synthesized accessors that have access to a known-stable secondary pointer.

Handler analysis

Handler label: label near 0x6610a49a at 0x6610a49a in MSVBVM60.dll (build 6.00.8268).

Canonical 8-instruction body:

movsx eax, word ptr [esi]        ; 2-byte signed offset
add   eax, [ebp+10h]              ; eax = W-base + offset
mov   eax, [eax]                  ; deref -> actual source ptr
push  dword ptr [eax]             ; push value at *eax
xor   eax, eax
mov   al,  [esi+2]                ; next opcode byte
add   esi, 3                      ; advance pcode pointer
jmp   [_tblByteDisp + eax*4]      ; dispatch next

Variations across suffixes (FPR4/FPR8/Var/Cy/Str/Darg) replace the central push/pop dword [eax] with the appropriate width-specific helper (fld/fst for FPU types, __vbaCopyBytes/__vbaStrCopy for BSTRs, the 16-byte Variant copy routine for Var, etc.). The base-computation step (add eax, [ebp+10h]) is identical across all 50 distinct handlers analyzed in the IWMem/WMem set.

Encoding, evidence and notes
Encoding

Encoding: FD 44 (lead byte FD selects table 3), then 2 operand byte(s); total instruction length 4 byte(s).
No printf operands are declared, but the instruction still consumes operand bytes; see the size above and the observed bytes below. (Phase 3a: flag=0 does not mean 'no operands'.)

Evidence and notes

Emitted by VB6 SP6 (P-code): not observed in about 3,070 probe programs. The slot exists in the runtime's dispatch table, but no tested source construct makes the compiler emit it.

Handler: 0x6610A49A, shared by 2 dispatch slots (real opcode #506). This is the primary slot. Other slots: (3,45) IWMemLdCy.

Family note: Phase 4: never emitted by VB6 SP6. Contexts tried include class/form/module statics, member UDTs with With, WithEvents, Implements, ActiveX DLL/EXE globals (these compile to FMem*), UserControl, PropertyPage, ActiveX Document, Add-in, DHTML and DataReport projects. Handler base [ebp+10h] (dispatcher arg 3) has no known source construct. IIS WebClass projects are untested.

Slots sharing this handler

(3,0x45) IWMemLdCy

Description: draft, by claude-opus-4.7. Handler 0x6610A49A, dispatch slot 0x66107A24, modOpcodes line 1253.

IWMemLdCy

(3,0x45)not emitteddup of (3,44)handler #506Currencyconfirmed_handler
LOAD through a Currency (64-bit scaled int) at [W-base+offset] -> [eax], one extra dereference (8-byte, W+indirect).

Handler analysis (idalib, MSVBVM60.dll build 6.00.8268). Reads a 2-byte signed offset from the instruction stream and adds it to the pointer held at the fixed frame slot [ebp+10h]. That slot is set once by the procedure's caller ([ebp+10h] is procedure-invocation argument 3) and is never written by any handler in the ENGINE segment -- it is stable for the lifetime of the procedure.

This is an IWMem (indirect-W) variant: after computing base = [ebp+10h] + offset, the handler performs one extra dereference (mov eax, [eax]) before the final load. The slot at [ebp+10h] + offset is treated as itself a pointer to the actual Currency (64-bit scaled int).

Stack: [...] -> [..., (([([ebp+10h] + offset)])):Cy]

**Distinction from the corresponding Mem* opcode (non-W counterpart):** the regular Mem* family uses the runtime cache at [ebp-4Ch], which is updated by every preceding FLdPr, FLdPrThis, NewIfNullAd, Ary1LdPr, or LdPrVar instruction. The W-family bypasses that cache and uses the stable [ebp+10h] pointer instead -- so the W-base does not require a preceding object-load opcode to be set.

Identity of [ebp+10h] is not yet pinned. Handler analysis establishes the mechanical behavior; the source-language construct that establishes this secondary object pointer (parent scope, procedure descriptor, outer-class pointer, etc.) is not yet verified. PDFStreamDumper's corpus has zero occurrences of this family, suggesting the construct is rare in typical VB6 code. A targeted probe in Phase 4 should resolve which language-level construct emits these opcodes.

When the compiler emits it

Emitted when the compiler accesses a member through a STABLE, caller-supplied object pointer (the secondary slot at [ebp+10h]) rather than through the runtime object-load cache that Mem* uses. The specific source-language construct that establishes the W-base has not yet been pinned by handler analysis alone -- PDFStreamDumper's corpus has zero occurrences of the entire IWMem/WMem family, suggesting the construct is uncommon in typical VB6 code. Candidate emit triggers worth probing in Phase 4: nested-class member access, parent-scope references from inside an event handler, or compiler-synthesized accessors that have access to a known-stable secondary pointer.

Handler analysis

Handler label: label near 0x6610a49a at 0x6610a49a in MSVBVM60.dll (build 6.00.8268).

Canonical 8-instruction body:

movsx eax, word ptr [esi]        ; 2-byte signed offset
add   eax, [ebp+10h]              ; eax = W-base + offset
mov   eax, [eax]                  ; deref -> actual source ptr
push  dword ptr [eax]             ; push value at *eax
xor   eax, eax
mov   al,  [esi+2]                ; next opcode byte
add   esi, 3                      ; advance pcode pointer
jmp   [_tblByteDisp + eax*4]      ; dispatch next

Variations across suffixes (FPR4/FPR8/Var/Cy/Str/Darg) replace the central push/pop dword [eax] with the appropriate width-specific helper (fld/fst for FPU types, __vbaCopyBytes/__vbaStrCopy for BSTRs, the 16-byte Variant copy routine for Var, etc.). The base-computation step (add eax, [ebp+10h]) is identical across all 50 distinct handlers analyzed in the IWMem/WMem set.

Encoding, evidence and notes
Encoding

Encoding: FD 45 (lead byte FD selects table 3), then 2 operand byte(s); total instruction length 4 byte(s).
No printf operands are declared, but the instruction still consumes operand bytes; see the size above and the observed bytes below. (Phase 3a: flag=0 does not mean 'no operands'.)

Evidence and notes

Emitted by VB6 SP6 (P-code): not observed in about 3,070 probe programs. The slot exists in the runtime's dispatch table, but no tested source construct makes the compiler emit it.

Handler: 0x6610A49A, shared by 2 dispatch slots (real opcode #506). This is a duplicate slot of (3,44) IWMemLdCy. Other slots: (3,44) IWMemLdCy.

Family note: Phase 4: never emitted by VB6 SP6. Contexts tried include class/form/module statics, member UDTs with With, WithEvents, Implements, ActiveX DLL/EXE globals (these compile to FMem*), UserControl, PropertyPage, ActiveX Document, Add-in, DHTML and DataReport projects. Handler base [ebp+10h] (dispatcher arg 3) has no known source construct. IIS WebClass projects are untested.

Slots sharing this handler

(3,0x44) IWMemLdCy

Description: draft, by claude-opus-4.7. Handler 0x6610A49A, dispatch slot 0x66107A28, modOpcodes line 1254.

IWMemLdDarg

(3,0x4D)not emittedhandler #512Variantcontextual
LOAD through a value of suffix `` at [W-base+offset] -> [eax], one extra dereference (unknown-size, W+indirect).

Handler analysis (idalib, MSVBVM60.dll build 6.00.8268). Reads a 2-byte signed offset from the instruction stream and adds it to the pointer held at the fixed frame slot [ebp+10h]. That slot is set once by the procedure's caller ([ebp+10h] is procedure-invocation argument 3) and is never written by any handler in the ENGINE segment -- it is stable for the lifetime of the procedure.

This is an IWMem (indirect-W) variant: after computing base = [ebp+10h] + offset, the handler performs one extra dereference (mov eax, [eax]) before the final load. The slot at [ebp+10h] + offset is treated as itself a pointer to the actual value of suffix ``.

Stack: [...] -> [..., (([([ebp+10h] + offset)])):]

**Distinction from the corresponding Mem* opcode (non-W counterpart):** the regular Mem* family uses the runtime cache at [ebp-4Ch], which is updated by every preceding FLdPr, FLdPrThis, NewIfNullAd, Ary1LdPr, or LdPrVar instruction. The W-family bypasses that cache and uses the stable [ebp+10h] pointer instead -- so the W-base does not require a preceding object-load opcode to be set.

Identity of [ebp+10h] is not yet pinned. Handler analysis establishes the mechanical behavior; the source-language construct that establishes this secondary object pointer (parent scope, procedure descriptor, outer-class pointer, etc.) is not yet verified. PDFStreamDumper's corpus has zero occurrences of this family, suggesting the construct is rare in typical VB6 code. A targeted probe in Phase 4 should resolve which language-level construct emits these opcodes.

When the compiler emits it

Emitted when the compiler accesses a member through a STABLE, caller-supplied object pointer (the secondary slot at [ebp+10h]) rather than through the runtime object-load cache that Mem* uses. The specific source-language construct that establishes the W-base has not yet been pinned by handler analysis alone -- PDFStreamDumper's corpus has zero occurrences of the entire IWMem/WMem family, suggesting the construct is uncommon in typical VB6 code. Candidate emit triggers worth probing in Phase 4: nested-class member access, parent-scope references from inside an event handler, or compiler-synthesized accessors that have access to a known-stable secondary pointer.

Handler analysis

Handler label: label near 0x6610b1bd at 0x6610b1bd in MSVBVM60.dll (build 6.00.8268).

Canonical 8-instruction body:

movsx eax, word ptr [esi]        ; 2-byte signed offset
add   eax, [ebp+10h]              ; eax = W-base + offset
mov   eax, [eax]                  ; deref -> actual source ptr
push  dword ptr [eax]             ; push value at *eax
xor   eax, eax
mov   al,  [esi+2]                ; next opcode byte
add   esi, 3                      ; advance pcode pointer
jmp   [_tblByteDisp + eax*4]      ; dispatch next

Variations across suffixes (FPR4/FPR8/Var/Cy/Str/Darg) replace the central push/pop dword [eax] with the appropriate width-specific helper (fld/fst for FPU types, __vbaCopyBytes/__vbaStrCopy for BSTRs, the 16-byte Variant copy routine for Var, etc.). The base-computation step (add eax, [ebp+10h]) is identical across all 50 distinct handlers analyzed in the IWMem/WMem set.

Encoding, evidence and notes
Encoding

Encoding: FD 4D (lead byte FD selects table 3), then 2 operand byte(s); total instruction length 4 byte(s).
No printf operands are declared, but the instruction still consumes operand bytes; see the size above and the observed bytes below. (Phase 3a: flag=0 does not mean 'no operands'.)

Evidence and notes

Emitted by VB6 SP6 (P-code): not observed in about 3,070 probe programs. The slot exists in the runtime's dispatch table, but no tested source construct makes the compiler emit it.

Handler: 0x6610B1BD, unique to this slot (real opcode #512).

Family note: Phase 4: never emitted by VB6 SP6. Contexts tried include class/form/module statics, member UDTs with With, WithEvents, Implements, ActiveX DLL/EXE globals (these compile to FMem*), UserControl, PropertyPage, ActiveX Document, Add-in, DHTML and DataReport projects. Handler base [ebp+10h] (dispatcher arg 3) has no known source construct. IIS WebClass projects are untested.

Description: draft, by claude-opus-4.7. Handler 0x6610B1BD, dispatch slot 0x66107A48, modOpcodes line 1262.

IWMemLdFPR4

(3,0x49)not emittedhandler #508Floating pointcontextual
LOAD through a Single via x87 FPU at [W-base+offset] -> [eax], one extra dereference (4-byte (FPU), W+indirect).

Handler analysis (idalib, MSVBVM60.dll build 6.00.8268). Reads a 2-byte signed offset from the instruction stream and adds it to the pointer held at the fixed frame slot [ebp+10h]. That slot is set once by the procedure's caller ([ebp+10h] is procedure-invocation argument 3) and is never written by any handler in the ENGINE segment -- it is stable for the lifetime of the procedure.

This is an IWMem (indirect-W) variant: after computing base = [ebp+10h] + offset, the handler performs one extra dereference (mov eax, [eax]) before the final load. The slot at [ebp+10h] + offset is treated as itself a pointer to the actual Single via x87 FPU.

Stack: [...] -> [..., (([([ebp+10h] + offset)])):FPR4]

**Distinction from the corresponding Mem* opcode (non-W counterpart):** the regular Mem* family uses the runtime cache at [ebp-4Ch], which is updated by every preceding FLdPr, FLdPrThis, NewIfNullAd, Ary1LdPr, or LdPrVar instruction. The W-family bypasses that cache and uses the stable [ebp+10h] pointer instead -- so the W-base does not require a preceding object-load opcode to be set.

Identity of [ebp+10h] is not yet pinned. Handler analysis establishes the mechanical behavior; the source-language construct that establishes this secondary object pointer (parent scope, procedure descriptor, outer-class pointer, etc.) is not yet verified. PDFStreamDumper's corpus has zero occurrences of this family, suggesting the construct is rare in typical VB6 code. A targeted probe in Phase 4 should resolve which language-level construct emits these opcodes.

When the compiler emits it

Emitted when the compiler accesses a member through a STABLE, caller-supplied object pointer (the secondary slot at [ebp+10h]) rather than through the runtime object-load cache that Mem* uses. The specific source-language construct that establishes the W-base has not yet been pinned by handler analysis alone -- PDFStreamDumper's corpus has zero occurrences of the entire IWMem/WMem family, suggesting the construct is uncommon in typical VB6 code. Candidate emit triggers worth probing in Phase 4: nested-class member access, parent-scope references from inside an event handler, or compiler-synthesized accessors that have access to a known-stable secondary pointer.

Handler analysis

Handler label: label near 0x6610a4b6 at 0x6610a4b6 in MSVBVM60.dll (build 6.00.8268).

Canonical 8-instruction body:

movsx eax, word ptr [esi]        ; 2-byte signed offset
add   eax, [ebp+10h]              ; eax = W-base + offset
mov   eax, [eax]                  ; deref -> actual source ptr
push  dword ptr [eax]             ; push value at *eax
xor   eax, eax
mov   al,  [esi+2]                ; next opcode byte
add   esi, 3                      ; advance pcode pointer
jmp   [_tblByteDisp + eax*4]      ; dispatch next

Variations across suffixes (FPR4/FPR8/Var/Cy/Str/Darg) replace the central push/pop dword [eax] with the appropriate width-specific helper (fld/fst for FPU types, __vbaCopyBytes/__vbaStrCopy for BSTRs, the 16-byte Variant copy routine for Var, etc.). The base-computation step (add eax, [ebp+10h]) is identical across all 50 distinct handlers analyzed in the IWMem/WMem set.

Encoding, evidence and notes
Encoding

Encoding: FD 49 (lead byte FD selects table 3), then 2 operand byte(s); total instruction length 4 byte(s).
No printf operands are declared, but the instruction still consumes operand bytes; see the size above and the observed bytes below. (Phase 3a: flag=0 does not mean 'no operands'.)

Evidence and notes

Emitted by VB6 SP6 (P-code): not observed in about 3,070 probe programs. The slot exists in the runtime's dispatch table, but no tested source construct makes the compiler emit it.

Handler: 0x6610A4B6, unique to this slot (real opcode #508).

Family note: Phase 4: never emitted by VB6 SP6. Contexts tried include class/form/module statics, member UDTs with With, WithEvents, Implements, ActiveX DLL/EXE globals (these compile to FMem*), UserControl, PropertyPage, ActiveX Document, Add-in, DHTML and DataReport projects. Handler base [ebp+10h] (dispatcher arg 3) has no known source construct. IIS WebClass projects are untested.

Description: draft, by claude-opus-4.7. Handler 0x6610A4B6, dispatch slot 0x66107A38, modOpcodes line 1258.

IWMemLdFPR8

(3,0x4A)not emittedhandler #509Floating pointcontextual
LOAD through a Double via x87 FPU at [W-base+offset] -> [eax], one extra dereference (8-byte (FPU), W+indirect).

Handler analysis (idalib, MSVBVM60.dll build 6.00.8268). Reads a 2-byte signed offset from the instruction stream and adds it to the pointer held at the fixed frame slot [ebp+10h]. That slot is set once by the procedure's caller ([ebp+10h] is procedure-invocation argument 3) and is never written by any handler in the ENGINE segment -- it is stable for the lifetime of the procedure.

This is an IWMem (indirect-W) variant: after computing base = [ebp+10h] + offset, the handler performs one extra dereference (mov eax, [eax]) before the final load. The slot at [ebp+10h] + offset is treated as itself a pointer to the actual Double via x87 FPU.

Stack: [...] -> [..., (([([ebp+10h] + offset)])):FPR8]

**Distinction from the corresponding Mem* opcode (non-W counterpart):** the regular Mem* family uses the runtime cache at [ebp-4Ch], which is updated by every preceding FLdPr, FLdPrThis, NewIfNullAd, Ary1LdPr, or LdPrVar instruction. The W-family bypasses that cache and uses the stable [ebp+10h] pointer instead -- so the W-base does not require a preceding object-load opcode to be set.

Identity of [ebp+10h] is not yet pinned. Handler analysis establishes the mechanical behavior; the source-language construct that establishes this secondary object pointer (parent scope, procedure descriptor, outer-class pointer, etc.) is not yet verified. PDFStreamDumper's corpus has zero occurrences of this family, suggesting the construct is rare in typical VB6 code. A targeted probe in Phase 4 should resolve which language-level construct emits these opcodes.

When the compiler emits it

Emitted when the compiler accesses a member through a STABLE, caller-supplied object pointer (the secondary slot at [ebp+10h]) rather than through the runtime object-load cache that Mem* uses. The specific source-language construct that establishes the W-base has not yet been pinned by handler analysis alone -- PDFStreamDumper's corpus has zero occurrences of the entire IWMem/WMem family, suggesting the construct is uncommon in typical VB6 code. Candidate emit triggers worth probing in Phase 4: nested-class member access, parent-scope references from inside an event handler, or compiler-synthesized accessors that have access to a known-stable secondary pointer.

Handler analysis

Handler label: label near 0x6610a4cf at 0x6610a4cf in MSVBVM60.dll (build 6.00.8268).

Canonical 8-instruction body:

movsx eax, word ptr [esi]        ; 2-byte signed offset
add   eax, [ebp+10h]              ; eax = W-base + offset
mov   eax, [eax]                  ; deref -> actual source ptr
push  dword ptr [eax]             ; push value at *eax
xor   eax, eax
mov   al,  [esi+2]                ; next opcode byte
add   esi, 3                      ; advance pcode pointer
jmp   [_tblByteDisp + eax*4]      ; dispatch next

Variations across suffixes (FPR4/FPR8/Var/Cy/Str/Darg) replace the central push/pop dword [eax] with the appropriate width-specific helper (fld/fst for FPU types, __vbaCopyBytes/__vbaStrCopy for BSTRs, the 16-byte Variant copy routine for Var, etc.). The base-computation step (add eax, [ebp+10h]) is identical across all 50 distinct handlers analyzed in the IWMem/WMem set.

Encoding, evidence and notes
Encoding

Encoding: FD 4A (lead byte FD selects table 3), then 2 operand byte(s); total instruction length 4 byte(s).
No printf operands are declared, but the instruction still consumes operand bytes; see the size above and the observed bytes below. (Phase 3a: flag=0 does not mean 'no operands'.)

Evidence and notes

Emitted by VB6 SP6 (P-code): not observed in about 3,070 probe programs. The slot exists in the runtime's dispatch table, but no tested source construct makes the compiler emit it.

Handler: 0x6610A4CF, unique to this slot (real opcode #509).

Family note: Phase 4: never emitted by VB6 SP6. Contexts tried include class/form/module statics, member UDTs with With, WithEvents, Implements, ActiveX DLL/EXE globals (these compile to FMem*), UserControl, PropertyPage, ActiveX Document, Add-in, DHTML and DataReport projects. Handler base [ebp+10h] (dispatcher arg 3) has no known source construct. IIS WebClass projects are untested.

Description: draft, by claude-opus-4.7. Handler 0x6610A4CF, dispatch slot 0x66107A3C, modOpcodes line 1259.

IWMemLdI2

(3,0x41)not emittedhandler #504Integercontextual
LOAD through a 16-bit signed integer (VB6 Integer) at [W-base+offset] -> [eax], one extra dereference (2-byte, W+indirect).

Handler analysis (idalib, MSVBVM60.dll build 6.00.8268). Reads a 2-byte signed offset from the instruction stream and adds it to the pointer held at the fixed frame slot [ebp+10h]. That slot is set once by the procedure's caller ([ebp+10h] is procedure-invocation argument 3) and is never written by any handler in the ENGINE segment -- it is stable for the lifetime of the procedure.

This is an IWMem (indirect-W) variant: after computing base = [ebp+10h] + offset, the handler performs one extra dereference (mov eax, [eax]) before the final load. The slot at [ebp+10h] + offset is treated as itself a pointer to the actual 16-bit signed integer (VB6 Integer).

Stack: [...] -> [..., (([([ebp+10h] + offset)])):I2]

**Distinction from the corresponding Mem* opcode (non-W counterpart):** the regular Mem* family uses the runtime cache at [ebp-4Ch], which is updated by every preceding FLdPr, FLdPrThis, NewIfNullAd, Ary1LdPr, or LdPrVar instruction. The W-family bypasses that cache and uses the stable [ebp+10h] pointer instead -- so the W-base does not require a preceding object-load opcode to be set.

Identity of [ebp+10h] is not yet pinned. Handler analysis establishes the mechanical behavior; the source-language construct that establishes this secondary object pointer (parent scope, procedure descriptor, outer-class pointer, etc.) is not yet verified. PDFStreamDumper's corpus has zero occurrences of this family, suggesting the construct is rare in typical VB6 code. A targeted probe in Phase 4 should resolve which language-level construct emits these opcodes.

When the compiler emits it

Emitted when the compiler accesses a member through a STABLE, caller-supplied object pointer (the secondary slot at [ebp+10h]) rather than through the runtime object-load cache that Mem* uses. The specific source-language construct that establishes the W-base has not yet been pinned by handler analysis alone -- PDFStreamDumper's corpus has zero occurrences of the entire IWMem/WMem family, suggesting the construct is uncommon in typical VB6 code. Candidate emit triggers worth probing in Phase 4: nested-class member access, parent-scope references from inside an event handler, or compiler-synthesized accessors that have access to a known-stable secondary pointer.

Handler analysis

Handler label: label near 0x6610a466 at 0x6610a466 in MSVBVM60.dll (build 6.00.8268).

Canonical 8-instruction body:

movsx eax, word ptr [esi]        ; 2-byte signed offset
add   eax, [ebp+10h]              ; eax = W-base + offset
mov   eax, [eax]                  ; deref -> actual source ptr
push  dword ptr [eax]             ; push value at *eax
xor   eax, eax
mov   al,  [esi+2]                ; next opcode byte
add   esi, 3                      ; advance pcode pointer
jmp   [_tblByteDisp + eax*4]      ; dispatch next

Variations across suffixes (FPR4/FPR8/Var/Cy/Str/Darg) replace the central push/pop dword [eax] with the appropriate width-specific helper (fld/fst for FPU types, __vbaCopyBytes/__vbaStrCopy for BSTRs, the 16-byte Variant copy routine for Var, etc.). The base-computation step (add eax, [ebp+10h]) is identical across all 50 distinct handlers analyzed in the IWMem/WMem set.

Encoding, evidence and notes
Encoding

Encoding: FD 41 (lead byte FD selects table 3), then 2 operand byte(s); total instruction length 4 byte(s).
No printf operands are declared, but the instruction still consumes operand bytes; see the size above and the observed bytes below. (Phase 3a: flag=0 does not mean 'no operands'.)

Evidence and notes

Emitted by VB6 SP6 (P-code): not observed in about 3,070 probe programs. The slot exists in the runtime's dispatch table, but no tested source construct makes the compiler emit it.

Handler: 0x6610A466, unique to this slot (real opcode #504).

Family note: Phase 4: never emitted by VB6 SP6. Contexts tried include class/form/module statics, member UDTs with With, WithEvents, Implements, ActiveX DLL/EXE globals (these compile to FMem*), UserControl, PropertyPage, ActiveX Document, Add-in, DHTML and DataReport projects. Handler base [ebp+10h] (dispatcher arg 3) has no known source construct. IIS WebClass projects are untested.

Description: draft, by claude-opus-4.7. Handler 0x6610A466, dispatch slot 0x66107A18, modOpcodes line 1250.

IWMemLdI4

(3,0x42)not emittedprimary of 4handler #505Integercontextual
LOAD through a 32-bit signed integer (VB6 Long) at [W-base+offset] -> [eax], one extra dereference (4-byte, W+indirect).

Handler analysis (idalib, MSVBVM60.dll build 6.00.8268). Reads a 2-byte signed offset from the instruction stream and adds it to the pointer held at the fixed frame slot [ebp+10h]. That slot is set once by the procedure's caller ([ebp+10h] is procedure-invocation argument 3) and is never written by any handler in the ENGINE segment -- it is stable for the lifetime of the procedure.

This is an IWMem (indirect-W) variant: after computing base = [ebp+10h] + offset, the handler performs one extra dereference (mov eax, [eax]) before the final load. The slot at [ebp+10h] + offset is treated as itself a pointer to the actual 32-bit signed integer (VB6 Long).

Stack: [...] -> [..., (([([ebp+10h] + offset)])):I4]

**Distinction from the corresponding Mem* opcode (non-W counterpart):** the regular Mem* family uses the runtime cache at [ebp-4Ch], which is updated by every preceding FLdPr, FLdPrThis, NewIfNullAd, Ary1LdPr, or LdPrVar instruction. The W-family bypasses that cache and uses the stable [ebp+10h] pointer instead -- so the W-base does not require a preceding object-load opcode to be set.

Identity of [ebp+10h] is not yet pinned. Handler analysis establishes the mechanical behavior; the source-language construct that establishes this secondary object pointer (parent scope, procedure descriptor, outer-class pointer, etc.) is not yet verified. PDFStreamDumper's corpus has zero occurrences of this family, suggesting the construct is rare in typical VB6 code. A targeted probe in Phase 4 should resolve which language-level construct emits these opcodes.

When the compiler emits it

Emitted when the compiler accesses a member through a STABLE, caller-supplied object pointer (the secondary slot at [ebp+10h]) rather than through the runtime object-load cache that Mem* uses. The specific source-language construct that establishes the W-base has not yet been pinned by handler analysis alone -- PDFStreamDumper's corpus has zero occurrences of the entire IWMem/WMem family, suggesting the construct is uncommon in typical VB6 code. Candidate emit triggers worth probing in Phase 4: nested-class member access, parent-scope references from inside an event handler, or compiler-synthesized accessors that have access to a known-stable secondary pointer.

Handler analysis

Handler label: label near 0x6610a481 at 0x6610a481 in MSVBVM60.dll (build 6.00.8268).

Canonical 8-instruction body:

movsx eax, word ptr [esi]        ; 2-byte signed offset
add   eax, [ebp+10h]              ; eax = W-base + offset
mov   eax, [eax]                  ; deref -> actual source ptr
push  dword ptr [eax]             ; push value at *eax
xor   eax, eax
mov   al,  [esi+2]                ; next opcode byte
add   esi, 3                      ; advance pcode pointer
jmp   [_tblByteDisp + eax*4]      ; dispatch next

Variations across suffixes (FPR4/FPR8/Var/Cy/Str/Darg) replace the central push/pop dword [eax] with the appropriate width-specific helper (fld/fst for FPU types, __vbaCopyBytes/__vbaStrCopy for BSTRs, the 16-byte Variant copy routine for Var, etc.). The base-computation step (add eax, [ebp+10h]) is identical across all 50 distinct handlers analyzed in the IWMem/WMem set.

Encoding, evidence and notes
Encoding

Encoding: FD 42 (lead byte FD selects table 3), then 2 operand byte(s); total instruction length 4 byte(s).
No printf operands are declared, but the instruction still consumes operand bytes; see the size above and the observed bytes below. (Phase 3a: flag=0 does not mean 'no operands'.)

Evidence and notes

Emitted by VB6 SP6 (P-code): not observed in about 3,070 probe programs. The slot exists in the runtime's dispatch table, but no tested source construct makes the compiler emit it.

Handler: 0x6610A481, shared by 4 dispatch slots (real opcode #505). This is the primary slot. Other slots: (3,43) IWMemLdI4, (3,47) IWMemLdI4, (3,48) IWMemLdI4.

Family note: Phase 4: never emitted by VB6 SP6. Contexts tried include class/form/module statics, member UDTs with With, WithEvents, Implements, ActiveX DLL/EXE globals (these compile to FMem*), UserControl, PropertyPage, ActiveX Document, Add-in, DHTML and DataReport projects. Handler base [ebp+10h] (dispatcher arg 3) has no known source construct. IIS WebClass projects are untested.

Slots sharing this handler

(3,0x43) IWMemLdI4, (3,0x47) IWMemLdI4, (3,0x48) IWMemLdI4

Description: draft, by claude-opus-4.7. Handler 0x6610A481, dispatch slot 0x66107A1C, modOpcodes line 1251.

IWMemLdI4

(3,0x43)not emitteddup of (3,42)handler #505Integerconfirmed_handler
LOAD through a 32-bit signed integer (VB6 Long) at [W-base+offset] -> [eax], one extra dereference (4-byte, W+indirect).

Handler analysis (idalib, MSVBVM60.dll build 6.00.8268). Reads a 2-byte signed offset from the instruction stream and adds it to the pointer held at the fixed frame slot [ebp+10h]. That slot is set once by the procedure's caller ([ebp+10h] is procedure-invocation argument 3) and is never written by any handler in the ENGINE segment -- it is stable for the lifetime of the procedure.

This is an IWMem (indirect-W) variant: after computing base = [ebp+10h] + offset, the handler performs one extra dereference (mov eax, [eax]) before the final load. The slot at [ebp+10h] + offset is treated as itself a pointer to the actual 32-bit signed integer (VB6 Long).

Stack: [...] -> [..., (([([ebp+10h] + offset)])):I4]

**Distinction from the corresponding Mem* opcode (non-W counterpart):** the regular Mem* family uses the runtime cache at [ebp-4Ch], which is updated by every preceding FLdPr, FLdPrThis, NewIfNullAd, Ary1LdPr, or LdPrVar instruction. The W-family bypasses that cache and uses the stable [ebp+10h] pointer instead -- so the W-base does not require a preceding object-load opcode to be set.

Identity of [ebp+10h] is not yet pinned. Handler analysis establishes the mechanical behavior; the source-language construct that establishes this secondary object pointer (parent scope, procedure descriptor, outer-class pointer, etc.) is not yet verified. PDFStreamDumper's corpus has zero occurrences of this family, suggesting the construct is rare in typical VB6 code. A targeted probe in Phase 4 should resolve which language-level construct emits these opcodes.

When the compiler emits it

Emitted when the compiler accesses a member through a STABLE, caller-supplied object pointer (the secondary slot at [ebp+10h]) rather than through the runtime object-load cache that Mem* uses. The specific source-language construct that establishes the W-base has not yet been pinned by handler analysis alone -- PDFStreamDumper's corpus has zero occurrences of the entire IWMem/WMem family, suggesting the construct is uncommon in typical VB6 code. Candidate emit triggers worth probing in Phase 4: nested-class member access, parent-scope references from inside an event handler, or compiler-synthesized accessors that have access to a known-stable secondary pointer.

Handler analysis

Handler label: label near 0x6610a481 at 0x6610a481 in MSVBVM60.dll (build 6.00.8268).

Canonical 8-instruction body:

movsx eax, word ptr [esi]        ; 2-byte signed offset
add   eax, [ebp+10h]              ; eax = W-base + offset
mov   eax, [eax]                  ; deref -> actual source ptr
push  dword ptr [eax]             ; push value at *eax
xor   eax, eax
mov   al,  [esi+2]                ; next opcode byte
add   esi, 3                      ; advance pcode pointer
jmp   [_tblByteDisp + eax*4]      ; dispatch next

Variations across suffixes (FPR4/FPR8/Var/Cy/Str/Darg) replace the central push/pop dword [eax] with the appropriate width-specific helper (fld/fst for FPU types, __vbaCopyBytes/__vbaStrCopy for BSTRs, the 16-byte Variant copy routine for Var, etc.). The base-computation step (add eax, [ebp+10h]) is identical across all 50 distinct handlers analyzed in the IWMem/WMem set.

Encoding, evidence and notes
Encoding

Encoding: FD 43 (lead byte FD selects table 3), then 2 operand byte(s); total instruction length 4 byte(s).
No printf operands are declared, but the instruction still consumes operand bytes; see the size above and the observed bytes below. (Phase 3a: flag=0 does not mean 'no operands'.)

Evidence and notes

Emitted by VB6 SP6 (P-code): not observed in about 3,070 probe programs. The slot exists in the runtime's dispatch table, but no tested source construct makes the compiler emit it.

Handler: 0x6610A481, shared by 4 dispatch slots (real opcode #505). This is a duplicate slot of (3,42) IWMemLdI4. Other slots: (3,42) IWMemLdI4, (3,47) IWMemLdI4, (3,48) IWMemLdI4.

Family note: Phase 4: never emitted by VB6 SP6. Contexts tried include class/form/module statics, member UDTs with With, WithEvents, Implements, ActiveX DLL/EXE globals (these compile to FMem*), UserControl, PropertyPage, ActiveX Document, Add-in, DHTML and DataReport projects. Handler base [ebp+10h] (dispatcher arg 3) has no known source construct. IIS WebClass projects are untested.

Slots sharing this handler

(3,0x42) IWMemLdI4, (3,0x47) IWMemLdI4, (3,0x48) IWMemLdI4

Description: draft, by claude-opus-4.7. Handler 0x6610A481, dispatch slot 0x66107A20, modOpcodes line 1252.

IWMemLdI4

(3,0x47)not emitteddup of (3,42)handler #505Integerconfirmed_handler
LOAD through a 32-bit signed integer (VB6 Long) at [W-base+offset] -> [eax], one extra dereference (4-byte, W+indirect).

Handler analysis (idalib, MSVBVM60.dll build 6.00.8268). Reads a 2-byte signed offset from the instruction stream and adds it to the pointer held at the fixed frame slot [ebp+10h]. That slot is set once by the procedure's caller ([ebp+10h] is procedure-invocation argument 3) and is never written by any handler in the ENGINE segment -- it is stable for the lifetime of the procedure.

This is an IWMem (indirect-W) variant: after computing base = [ebp+10h] + offset, the handler performs one extra dereference (mov eax, [eax]) before the final load. The slot at [ebp+10h] + offset is treated as itself a pointer to the actual 32-bit signed integer (VB6 Long).

Stack: [...] -> [..., (([([ebp+10h] + offset)])):I4]

**Distinction from the corresponding Mem* opcode (non-W counterpart):** the regular Mem* family uses the runtime cache at [ebp-4Ch], which is updated by every preceding FLdPr, FLdPrThis, NewIfNullAd, Ary1LdPr, or LdPrVar instruction. The W-family bypasses that cache and uses the stable [ebp+10h] pointer instead -- so the W-base does not require a preceding object-load opcode to be set.

Identity of [ebp+10h] is not yet pinned. Handler analysis establishes the mechanical behavior; the source-language construct that establishes this secondary object pointer (parent scope, procedure descriptor, outer-class pointer, etc.) is not yet verified. PDFStreamDumper's corpus has zero occurrences of this family, suggesting the construct is rare in typical VB6 code. A targeted probe in Phase 4 should resolve which language-level construct emits these opcodes.

When the compiler emits it

Emitted when the compiler accesses a member through a STABLE, caller-supplied object pointer (the secondary slot at [ebp+10h]) rather than through the runtime object-load cache that Mem* uses. The specific source-language construct that establishes the W-base has not yet been pinned by handler analysis alone -- PDFStreamDumper's corpus has zero occurrences of the entire IWMem/WMem family, suggesting the construct is uncommon in typical VB6 code. Candidate emit triggers worth probing in Phase 4: nested-class member access, parent-scope references from inside an event handler, or compiler-synthesized accessors that have access to a known-stable secondary pointer.

Handler analysis

Handler label: label near 0x6610a481 at 0x6610a481 in MSVBVM60.dll (build 6.00.8268).

Canonical 8-instruction body:

movsx eax, word ptr [esi]        ; 2-byte signed offset
add   eax, [ebp+10h]              ; eax = W-base + offset
mov   eax, [eax]                  ; deref -> actual source ptr
push  dword ptr [eax]             ; push value at *eax
xor   eax, eax
mov   al,  [esi+2]                ; next opcode byte
add   esi, 3                      ; advance pcode pointer
jmp   [_tblByteDisp + eax*4]      ; dispatch next

Variations across suffixes (FPR4/FPR8/Var/Cy/Str/Darg) replace the central push/pop dword [eax] with the appropriate width-specific helper (fld/fst for FPU types, __vbaCopyBytes/__vbaStrCopy for BSTRs, the 16-byte Variant copy routine for Var, etc.). The base-computation step (add eax, [ebp+10h]) is identical across all 50 distinct handlers analyzed in the IWMem/WMem set.

Encoding, evidence and notes
Encoding

Encoding: FD 47 (lead byte FD selects table 3), then 2 operand byte(s); total instruction length 4 byte(s).
No printf operands are declared, but the instruction still consumes operand bytes; see the size above and the observed bytes below. (Phase 3a: flag=0 does not mean 'no operands'.)

Evidence and notes

Emitted by VB6 SP6 (P-code): not observed in about 3,070 probe programs. The slot exists in the runtime's dispatch table, but no tested source construct makes the compiler emit it.

Handler: 0x6610A481, shared by 4 dispatch slots (real opcode #505). This is a duplicate slot of (3,42) IWMemLdI4. Other slots: (3,42) IWMemLdI4, (3,43) IWMemLdI4, (3,48) IWMemLdI4.

Family note: Phase 4: never emitted by VB6 SP6. Contexts tried include class/form/module statics, member UDTs with With, WithEvents, Implements, ActiveX DLL/EXE globals (these compile to FMem*), UserControl, PropertyPage, ActiveX Document, Add-in, DHTML and DataReport projects. Handler base [ebp+10h] (dispatcher arg 3) has no known source construct. IIS WebClass projects are untested.

Slots sharing this handler

(3,0x42) IWMemLdI4, (3,0x43) IWMemLdI4, (3,0x48) IWMemLdI4

Description: draft, by claude-opus-4.7. Handler 0x6610A481, dispatch slot 0x66107A30, modOpcodes line 1256.

IWMemLdI4

(3,0x48)not emitteddup of (3,42)handler #505Integerconfirmed_handler
LOAD through a 32-bit signed integer (VB6 Long) at [W-base+offset] -> [eax], one extra dereference (4-byte, W+indirect).

Handler analysis (idalib, MSVBVM60.dll build 6.00.8268). Reads a 2-byte signed offset from the instruction stream and adds it to the pointer held at the fixed frame slot [ebp+10h]. That slot is set once by the procedure's caller ([ebp+10h] is procedure-invocation argument 3) and is never written by any handler in the ENGINE segment -- it is stable for the lifetime of the procedure.

This is an IWMem (indirect-W) variant: after computing base = [ebp+10h] + offset, the handler performs one extra dereference (mov eax, [eax]) before the final load. The slot at [ebp+10h] + offset is treated as itself a pointer to the actual 32-bit signed integer (VB6 Long).

Stack: [...] -> [..., (([([ebp+10h] + offset)])):I4]

**Distinction from the corresponding Mem* opcode (non-W counterpart):** the regular Mem* family uses the runtime cache at [ebp-4Ch], which is updated by every preceding FLdPr, FLdPrThis, NewIfNullAd, Ary1LdPr, or LdPrVar instruction. The W-family bypasses that cache and uses the stable [ebp+10h] pointer instead -- so the W-base does not require a preceding object-load opcode to be set.

Identity of [ebp+10h] is not yet pinned. Handler analysis establishes the mechanical behavior; the source-language construct that establishes this secondary object pointer (parent scope, procedure descriptor, outer-class pointer, etc.) is not yet verified. PDFStreamDumper's corpus has zero occurrences of this family, suggesting the construct is rare in typical VB6 code. A targeted probe in Phase 4 should resolve which language-level construct emits these opcodes.

When the compiler emits it

Emitted when the compiler accesses a member through a STABLE, caller-supplied object pointer (the secondary slot at [ebp+10h]) rather than through the runtime object-load cache that Mem* uses. The specific source-language construct that establishes the W-base has not yet been pinned by handler analysis alone -- PDFStreamDumper's corpus has zero occurrences of the entire IWMem/WMem family, suggesting the construct is uncommon in typical VB6 code. Candidate emit triggers worth probing in Phase 4: nested-class member access, parent-scope references from inside an event handler, or compiler-synthesized accessors that have access to a known-stable secondary pointer.

Handler analysis

Handler label: label near 0x6610a481 at 0x6610a481 in MSVBVM60.dll (build 6.00.8268).

Canonical 8-instruction body:

movsx eax, word ptr [esi]        ; 2-byte signed offset
add   eax, [ebp+10h]              ; eax = W-base + offset
mov   eax, [eax]                  ; deref -> actual source ptr
push  dword ptr [eax]             ; push value at *eax
xor   eax, eax
mov   al,  [esi+2]                ; next opcode byte
add   esi, 3                      ; advance pcode pointer
jmp   [_tblByteDisp + eax*4]      ; dispatch next

Variations across suffixes (FPR4/FPR8/Var/Cy/Str/Darg) replace the central push/pop dword [eax] with the appropriate width-specific helper (fld/fst for FPU types, __vbaCopyBytes/__vbaStrCopy for BSTRs, the 16-byte Variant copy routine for Var, etc.). The base-computation step (add eax, [ebp+10h]) is identical across all 50 distinct handlers analyzed in the IWMem/WMem set.

Encoding, evidence and notes
Encoding

Encoding: FD 48 (lead byte FD selects table 3), then 2 operand byte(s); total instruction length 4 byte(s).
No printf operands are declared, but the instruction still consumes operand bytes; see the size above and the observed bytes below. (Phase 3a: flag=0 does not mean 'no operands'.)

Evidence and notes

Emitted by VB6 SP6 (P-code): not observed in about 3,070 probe programs. The slot exists in the runtime's dispatch table, but no tested source construct makes the compiler emit it.

Handler: 0x6610A481, shared by 4 dispatch slots (real opcode #505). This is a duplicate slot of (3,42) IWMemLdI4. Other slots: (3,42) IWMemLdI4, (3,43) IWMemLdI4, (3,47) IWMemLdI4.

Family note: Phase 4: never emitted by VB6 SP6. Contexts tried include class/form/module statics, member UDTs with With, WithEvents, Implements, ActiveX DLL/EXE globals (these compile to FMem*), UserControl, PropertyPage, ActiveX Document, Add-in, DHTML and DataReport projects. Handler base [ebp+10h] (dispatcher arg 3) has no known source construct. IIS WebClass projects are untested.

Slots sharing this handler

(3,0x42) IWMemLdI4, (3,0x43) IWMemLdI4, (3,0x47) IWMemLdI4

Description: draft, by claude-opus-4.7. Handler 0x6610A481, dispatch slot 0x66107A34, modOpcodes line 1257.

IWMemLdPr

(3,0x4B)not emittedprimary of 2handler #510Object / COMcontextual
LOAD through a object pointer at [W-base+offset] -> [eax], one extra dereference (4-byte, W+indirect).

Handler analysis (idalib, MSVBVM60.dll build 6.00.8268). Reads a 2-byte signed offset from the instruction stream and adds it to the pointer held at the fixed frame slot [ebp+10h]. That slot is set once by the procedure's caller ([ebp+10h] is procedure-invocation argument 3) and is never written by any handler in the ENGINE segment -- it is stable for the lifetime of the procedure.

This is an IWMem (indirect-W) variant: after computing base = [ebp+10h] + offset, the handler performs one extra dereference (mov eax, [eax]) before the final load. The slot at [ebp+10h] + offset is treated as itself a pointer to the actual object pointer.

Stack: [...] -> [..., (([([ebp+10h] + offset)])):Pr]

**Distinction from the corresponding Mem* opcode (non-W counterpart):** the regular Mem* family uses the runtime cache at [ebp-4Ch], which is updated by every preceding FLdPr, FLdPrThis, NewIfNullAd, Ary1LdPr, or LdPrVar instruction. The W-family bypasses that cache and uses the stable [ebp+10h] pointer instead -- so the W-base does not require a preceding object-load opcode to be set.

Identity of [ebp+10h] is not yet pinned. Handler analysis establishes the mechanical behavior; the source-language construct that establishes this secondary object pointer (parent scope, procedure descriptor, outer-class pointer, etc.) is not yet verified. PDFStreamDumper's corpus has zero occurrences of this family, suggesting the construct is rare in typical VB6 code. A targeted probe in Phase 4 should resolve which language-level construct emits these opcodes.

When the compiler emits it

Emitted when the compiler accesses a member through a STABLE, caller-supplied object pointer (the secondary slot at [ebp+10h]) rather than through the runtime object-load cache that Mem* uses. The specific source-language construct that establishes the W-base has not yet been pinned by handler analysis alone -- PDFStreamDumper's corpus has zero occurrences of the entire IWMem/WMem family, suggesting the construct is uncommon in typical VB6 code. Candidate emit triggers worth probing in Phase 4: nested-class member access, parent-scope references from inside an event handler, or compiler-synthesized accessors that have access to a known-stable secondary pointer.

Handler analysis

Handler label: label near 0x6610b228 at 0x6610b228 in MSVBVM60.dll (build 6.00.8268).

Canonical 8-instruction body:

movsx eax, word ptr [esi]        ; 2-byte signed offset
add   eax, [ebp+10h]              ; eax = W-base + offset
mov   eax, [eax]                  ; deref -> actual source ptr
push  dword ptr [eax]             ; push value at *eax
xor   eax, eax
mov   al,  [esi+2]                ; next opcode byte
add   esi, 3                      ; advance pcode pointer
jmp   [_tblByteDisp + eax*4]      ; dispatch next

Variations across suffixes (FPR4/FPR8/Var/Cy/Str/Darg) replace the central push/pop dword [eax] with the appropriate width-specific helper (fld/fst for FPU types, __vbaCopyBytes/__vbaStrCopy for BSTRs, the 16-byte Variant copy routine for Var, etc.). The base-computation step (add eax, [ebp+10h]) is identical across all 50 distinct handlers analyzed in the IWMem/WMem set.

Encoding, evidence and notes
Encoding

Encoding: FD 4B (lead byte FD selects table 3), then 2 operand byte(s); total instruction length 4 byte(s).
No printf operands are declared, but the instruction still consumes operand bytes; see the size above and the observed bytes below. (Phase 3a: flag=0 does not mean 'no operands'.)

Evidence and notes

Emitted by VB6 SP6 (P-code): not observed in about 3,070 probe programs. The slot exists in the runtime's dispatch table, but no tested source construct makes the compiler emit it.

Handler: 0x6610B228, shared by 2 dispatch slots (real opcode #510). This is the primary slot. Other slots: (4,DB) IWMemLdPr.

Family note: Phase 4: never emitted by VB6 SP6. Contexts tried include class/form/module statics, member UDTs with With, WithEvents, Implements, ActiveX DLL/EXE globals (these compile to FMem*), UserControl, PropertyPage, ActiveX Document, Add-in, DHTML and DataReport projects. Handler base [ebp+10h] (dispatcher arg 3) has no known source construct. IIS WebClass projects are untested.

Slots sharing this handler

(4,0xDB) IWMemLdPr

Description: draft, by claude-opus-4.7. Handler 0x6610B228, dispatch slot 0x66107A40, modOpcodes line 1260.

IWMemLdPr

(4,0xDB)not emitteddup of (3,4B)handler #510Object / COMconfirmed_handler
LOAD through a object pointer at [W-base+offset] -> [eax], one extra dereference (4-byte, W+indirect).

Handler analysis (idalib, MSVBVM60.dll build 6.00.8268). Reads a 2-byte signed offset from the instruction stream and adds it to the pointer held at the fixed frame slot [ebp+10h]. That slot is set once by the procedure's caller ([ebp+10h] is procedure-invocation argument 3) and is never written by any handler in the ENGINE segment -- it is stable for the lifetime of the procedure.

This is an IWMem (indirect-W) variant: after computing base = [ebp+10h] + offset, the handler performs one extra dereference (mov eax, [eax]) before the final load. The slot at [ebp+10h] + offset is treated as itself a pointer to the actual object pointer.

Stack: [...] -> [..., (([([ebp+10h] + offset)])):Pr]

**Distinction from the corresponding Mem* opcode (non-W counterpart):** the regular Mem* family uses the runtime cache at [ebp-4Ch], which is updated by every preceding FLdPr, FLdPrThis, NewIfNullAd, Ary1LdPr, or LdPrVar instruction. The W-family bypasses that cache and uses the stable [ebp+10h] pointer instead -- so the W-base does not require a preceding object-load opcode to be set.

Identity of [ebp+10h] is not yet pinned. Handler analysis establishes the mechanical behavior; the source-language construct that establishes this secondary object pointer (parent scope, procedure descriptor, outer-class pointer, etc.) is not yet verified. PDFStreamDumper's corpus has zero occurrences of this family, suggesting the construct is rare in typical VB6 code. A targeted probe in Phase 4 should resolve which language-level construct emits these opcodes.

When the compiler emits it

Emitted when the compiler accesses a member through a STABLE, caller-supplied object pointer (the secondary slot at [ebp+10h]) rather than through the runtime object-load cache that Mem* uses. The specific source-language construct that establishes the W-base has not yet been pinned by handler analysis alone -- PDFStreamDumper's corpus has zero occurrences of the entire IWMem/WMem family, suggesting the construct is uncommon in typical VB6 code. Candidate emit triggers worth probing in Phase 4: nested-class member access, parent-scope references from inside an event handler, or compiler-synthesized accessors that have access to a known-stable secondary pointer.

Handler analysis

Handler label: label near 0x6610b228 at 0x6610b228 in MSVBVM60.dll (build 6.00.8268).

Canonical 8-instruction body:

movsx eax, word ptr [esi]        ; 2-byte signed offset
add   eax, [ebp+10h]              ; eax = W-base + offset
mov   eax, [eax]                  ; deref -> actual source ptr
push  dword ptr [eax]             ; push value at *eax
xor   eax, eax
mov   al,  [esi+2]                ; next opcode byte
add   esi, 3                      ; advance pcode pointer
jmp   [_tblByteDisp + eax*4]      ; dispatch next

Variations across suffixes (FPR4/FPR8/Var/Cy/Str/Darg) replace the central push/pop dword [eax] with the appropriate width-specific helper (fld/fst for FPU types, __vbaCopyBytes/__vbaStrCopy for BSTRs, the 16-byte Variant copy routine for Var, etc.). The base-computation step (add eax, [ebp+10h]) is identical across all 50 distinct handlers analyzed in the IWMem/WMem set.

Encoding, evidence and notes
Encoding

Encoding: FE DB (lead byte FE selects table 4), then 2 operand byte(s); total instruction length 4 byte(s).
No printf operands are declared, but the instruction still consumes operand bytes; see the size above and the observed bytes below. (Phase 3a: flag=0 does not mean 'no operands'.)

Evidence and notes

Emitted by VB6 SP6 (P-code): not observed in about 3,070 probe programs. The slot exists in the runtime's dispatch table, but no tested source construct makes the compiler emit it.

Handler: 0x6610B228, shared by 2 dispatch slots (real opcode #510). This is a duplicate slot of (3,4B) IWMemLdPr. Other slots: (3,4B) IWMemLdPr.

Family note: Phase 4: never emitted by VB6 SP6. Contexts tried include class/form/module statics, member UDTs with With, WithEvents, Implements, ActiveX DLL/EXE globals (these compile to FMem*), UserControl, PropertyPage, ActiveX Document, Add-in, DHTML and DataReport projects. Handler base [ebp+10h] (dispatcher arg 3) has no known source construct. IIS WebClass projects are untested.

Slots sharing this handler

(3,0x4B) IWMemLdPr

Description: draft, by claude-opus-4.7. Handler 0x6610B228, dispatch slot 0x66108080, modOpcodes line 1281.

IWMemLdRf

(3,0x4C)not emittedhandler #511Stack & framecontextual
LOAD through a reference / ByRef slot at [W-base+offset] -> [eax], one extra dereference (4-byte (reference), W+indirect).

Handler analysis (idalib, MSVBVM60.dll build 6.00.8268). Reads a 2-byte signed offset from the instruction stream and adds it to the pointer held at the fixed frame slot [ebp+10h]. That slot is set once by the procedure's caller ([ebp+10h] is procedure-invocation argument 3) and is never written by any handler in the ENGINE segment -- it is stable for the lifetime of the procedure.

This is an IWMem (indirect-W) variant: after computing base = [ebp+10h] + offset, the handler performs one extra dereference (mov eax, [eax]) before the final load. The slot at [ebp+10h] + offset is treated as itself a pointer to the actual reference / ByRef slot.

Stack: [...] -> [..., (([([ebp+10h] + offset)])):Rf]

**Distinction from the corresponding Mem* opcode (non-W counterpart):** the regular Mem* family uses the runtime cache at [ebp-4Ch], which is updated by every preceding FLdPr, FLdPrThis, NewIfNullAd, Ary1LdPr, or LdPrVar instruction. The W-family bypasses that cache and uses the stable [ebp+10h] pointer instead -- so the W-base does not require a preceding object-load opcode to be set.

Identity of [ebp+10h] is not yet pinned. Handler analysis establishes the mechanical behavior; the source-language construct that establishes this secondary object pointer (parent scope, procedure descriptor, outer-class pointer, etc.) is not yet verified. PDFStreamDumper's corpus has zero occurrences of this family, suggesting the construct is rare in typical VB6 code. A targeted probe in Phase 4 should resolve which language-level construct emits these opcodes.

When the compiler emits it

Emitted when the compiler accesses a member through a STABLE, caller-supplied object pointer (the secondary slot at [ebp+10h]) rather than through the runtime object-load cache that Mem* uses. The specific source-language construct that establishes the W-base has not yet been pinned by handler analysis alone -- PDFStreamDumper's corpus has zero occurrences of the entire IWMem/WMem family, suggesting the construct is uncommon in typical VB6 code. Candidate emit triggers worth probing in Phase 4: nested-class member access, parent-scope references from inside an event handler, or compiler-synthesized accessors that have access to a known-stable secondary pointer.

Handler analysis

Handler label: label near 0x6610a4e8 at 0x6610a4e8 in MSVBVM60.dll (build 6.00.8268).

Canonical 8-instruction body:

movsx eax, word ptr [esi]        ; 2-byte signed offset
add   eax, [ebp+10h]              ; eax = W-base + offset
mov   eax, [eax]                  ; deref -> actual source ptr
push  dword ptr [eax]             ; push value at *eax
xor   eax, eax
mov   al,  [esi+2]                ; next opcode byte
add   esi, 3                      ; advance pcode pointer
jmp   [_tblByteDisp + eax*4]      ; dispatch next

Variations across suffixes (FPR4/FPR8/Var/Cy/Str/Darg) replace the central push/pop dword [eax] with the appropriate width-specific helper (fld/fst for FPU types, __vbaCopyBytes/__vbaStrCopy for BSTRs, the 16-byte Variant copy routine for Var, etc.). The base-computation step (add eax, [ebp+10h]) is identical across all 50 distinct handlers analyzed in the IWMem/WMem set.

Encoding, evidence and notes
Encoding

Encoding: FD 4C (lead byte FD selects table 3), then 2 operand byte(s); total instruction length 4 byte(s).
No printf operands are declared, but the instruction still consumes operand bytes; see the size above and the observed bytes below. (Phase 3a: flag=0 does not mean 'no operands'.)

Evidence and notes

Emitted by VB6 SP6 (P-code): not observed in about 3,070 probe programs. The slot exists in the runtime's dispatch table, but no tested source construct makes the compiler emit it.

Handler: 0x6610A4E8, unique to this slot (real opcode #511).

Family note: Phase 4: never emitted by VB6 SP6. Contexts tried include class/form/module statics, member UDTs with With, WithEvents, Implements, ActiveX DLL/EXE globals (these compile to FMem*), UserControl, PropertyPage, ActiveX Document, Add-in, DHTML and DataReport projects. Handler base [ebp+10h] (dispatcher arg 3) has no known source construct. IIS WebClass projects are untested.

Description: draft, by claude-opus-4.7. Handler 0x6610A4E8, dispatch slot 0x66107A44, modOpcodes line 1261.

IWMemLdRfDarg

(3,0x46)not emittedhandler #507Variantcontextual
LOAD through a value of suffix `` at [W-base+offset] -> [eax], one extra dereference (unknown-size, W+indirect).

Handler analysis (idalib, MSVBVM60.dll build 6.00.8268). Reads a 2-byte signed offset from the instruction stream and adds it to the pointer held at the fixed frame slot [ebp+10h]. That slot is set once by the procedure's caller ([ebp+10h] is procedure-invocation argument 3) and is never written by any handler in the ENGINE segment -- it is stable for the lifetime of the procedure.

This is an IWMem (indirect-W) variant: after computing base = [ebp+10h] + offset, the handler performs one extra dereference (mov eax, [eax]) before the final load. The slot at [ebp+10h] + offset is treated as itself a pointer to the actual value of suffix ``.

Stack: [...] -> [..., (([([ebp+10h] + offset)])):]

**Distinction from the corresponding Mem* opcode (non-W counterpart):** the regular Mem* family uses the runtime cache at [ebp-4Ch], which is updated by every preceding FLdPr, FLdPrThis, NewIfNullAd, Ary1LdPr, or LdPrVar instruction. The W-family bypasses that cache and uses the stable [ebp+10h] pointer instead -- so the W-base does not require a preceding object-load opcode to be set.

Identity of [ebp+10h] is not yet pinned. Handler analysis establishes the mechanical behavior; the source-language construct that establishes this secondary object pointer (parent scope, procedure descriptor, outer-class pointer, etc.) is not yet verified. PDFStreamDumper's corpus has zero occurrences of this family, suggesting the construct is rare in typical VB6 code. A targeted probe in Phase 4 should resolve which language-level construct emits these opcodes.

When the compiler emits it

Emitted when the compiler accesses a member through a STABLE, caller-supplied object pointer (the secondary slot at [ebp+10h]) rather than through the runtime object-load cache that Mem* uses. The specific source-language construct that establishes the W-base has not yet been pinned by handler analysis alone -- PDFStreamDumper's corpus has zero occurrences of the entire IWMem/WMem family, suggesting the construct is uncommon in typical VB6 code. Candidate emit triggers worth probing in Phase 4: nested-class member access, parent-scope references from inside an event handler, or compiler-synthesized accessors that have access to a known-stable secondary pointer.

Handler analysis

Handler label: label near 0x6610b1f5 at 0x6610b1f5 in MSVBVM60.dll (build 6.00.8268).

Canonical 8-instruction body:

movsx eax, word ptr [esi]        ; 2-byte signed offset
add   eax, [ebp+10h]              ; eax = W-base + offset
mov   eax, [eax]                  ; deref -> actual source ptr
push  dword ptr [eax]             ; push value at *eax
xor   eax, eax
mov   al,  [esi+2]                ; next opcode byte
add   esi, 3                      ; advance pcode pointer
jmp   [_tblByteDisp + eax*4]      ; dispatch next

Variations across suffixes (FPR4/FPR8/Var/Cy/Str/Darg) replace the central push/pop dword [eax] with the appropriate width-specific helper (fld/fst for FPU types, __vbaCopyBytes/__vbaStrCopy for BSTRs, the 16-byte Variant copy routine for Var, etc.). The base-computation step (add eax, [ebp+10h]) is identical across all 50 distinct handlers analyzed in the IWMem/WMem set.

Encoding, evidence and notes
Encoding

Encoding: FD 46 (lead byte FD selects table 3), then 4 operand byte(s); total instruction length 6 byte(s).
No printf operands are declared, but the instruction still consumes operand bytes; see the size above and the observed bytes below. (Phase 3a: flag=0 does not mean 'no operands'.)

Evidence and notes

Emitted by VB6 SP6 (P-code): not observed in about 3,070 probe programs. The slot exists in the runtime's dispatch table, but no tested source construct makes the compiler emit it.

Handler: 0x6610B1F5, unique to this slot (real opcode #507).

Family note: Phase 4: never emitted by VB6 SP6. Contexts tried include class/form/module statics, member UDTs with With, WithEvents, Implements, ActiveX DLL/EXE globals (these compile to FMem*), UserControl, PropertyPage, ActiveX Document, Add-in, DHTML and DataReport projects. Handler base [ebp+10h] (dispatcher arg 3) has no known source construct. IIS WebClass projects are untested.

Description: draft, by claude-opus-4.7. Handler 0x6610B1F5, dispatch slot 0x66107A2C, modOpcodes line 1255.

IWMemLdUI1

(3,0x40)not emittedhandler #503Integercontextual
LOAD through a 8-bit unsigned (VB6 Byte) at [W-base+offset] -> [eax], one extra dereference (1-byte, W+indirect).

Handler analysis (idalib, MSVBVM60.dll build 6.00.8268). Reads a 2-byte signed offset from the instruction stream and adds it to the pointer held at the fixed frame slot [ebp+10h]. That slot is set once by the procedure's caller ([ebp+10h] is procedure-invocation argument 3) and is never written by any handler in the ENGINE segment -- it is stable for the lifetime of the procedure.

This is an IWMem (indirect-W) variant: after computing base = [ebp+10h] + offset, the handler performs one extra dereference (mov eax, [eax]) before the final load. The slot at [ebp+10h] + offset is treated as itself a pointer to the actual 8-bit unsigned (VB6 Byte).

Stack: [...] -> [..., (([([ebp+10h] + offset)])):UI1]

**Distinction from the corresponding Mem* opcode (non-W counterpart):** the regular Mem* family uses the runtime cache at [ebp-4Ch], which is updated by every preceding FLdPr, FLdPrThis, NewIfNullAd, Ary1LdPr, or LdPrVar instruction. The W-family bypasses that cache and uses the stable [ebp+10h] pointer instead -- so the W-base does not require a preceding object-load opcode to be set.

Identity of [ebp+10h] is not yet pinned. Handler analysis establishes the mechanical behavior; the source-language construct that establishes this secondary object pointer (parent scope, procedure descriptor, outer-class pointer, etc.) is not yet verified. PDFStreamDumper's corpus has zero occurrences of this family, suggesting the construct is rare in typical VB6 code. A targeted probe in Phase 4 should resolve which language-level construct emits these opcodes.

When the compiler emits it

Emitted when the compiler accesses a member through a STABLE, caller-supplied object pointer (the secondary slot at [ebp+10h]) rather than through the runtime object-load cache that Mem* uses. The specific source-language construct that establishes the W-base has not yet been pinned by handler analysis alone -- PDFStreamDumper's corpus has zero occurrences of the entire IWMem/WMem family, suggesting the construct is uncommon in typical VB6 code. Candidate emit triggers worth probing in Phase 4: nested-class member access, parent-scope references from inside an event handler, or compiler-synthesized accessors that have access to a known-stable secondary pointer.

Handler analysis

Handler label: label near 0x6610a44b at 0x6610a44b in MSVBVM60.dll (build 6.00.8268).

Canonical 8-instruction body:

movsx eax, word ptr [esi]        ; 2-byte signed offset
add   eax, [ebp+10h]              ; eax = W-base + offset
mov   eax, [eax]                  ; deref -> actual source ptr
push  dword ptr [eax]             ; push value at *eax
xor   eax, eax
mov   al,  [esi+2]                ; next opcode byte
add   esi, 3                      ; advance pcode pointer
jmp   [_tblByteDisp + eax*4]      ; dispatch next

Variations across suffixes (FPR4/FPR8/Var/Cy/Str/Darg) replace the central push/pop dword [eax] with the appropriate width-specific helper (fld/fst for FPU types, __vbaCopyBytes/__vbaStrCopy for BSTRs, the 16-byte Variant copy routine for Var, etc.). The base-computation step (add eax, [ebp+10h]) is identical across all 50 distinct handlers analyzed in the IWMem/WMem set.

Encoding, evidence and notes
Encoding

Encoding: FD 40 (lead byte FD selects table 3), then 2 operand byte(s); total instruction length 4 byte(s).
No printf operands are declared, but the instruction still consumes operand bytes; see the size above and the observed bytes below. (Phase 3a: flag=0 does not mean 'no operands'.)

Evidence and notes

Emitted by VB6 SP6 (P-code): not observed in about 3,070 probe programs. The slot exists in the runtime's dispatch table, but no tested source construct makes the compiler emit it.

Handler: 0x6610A44B, unique to this slot (real opcode #503).

Family note: Phase 4: never emitted by VB6 SP6. Contexts tried include class/form/module statics, member UDTs with With, WithEvents, Implements, ActiveX DLL/EXE globals (these compile to FMem*), UserControl, PropertyPage, ActiveX Document, Add-in, DHTML and DataReport projects. Handler base [ebp+10h] (dispatcher arg 3) has no known source construct. IIS WebClass projects are untested.

Description: draft, by claude-opus-4.7. Handler 0x6610A44B, dispatch slot 0x66107A14, modOpcodes line 1249.

IWMem_Store

IWMem stores: write through [W-base + offset], dereferenced once. Prefix: I + W + Mem + St (Phase 3a).

IWMemStAd

(3,0x58)not emittedhandler #519Object / COMcontextual
STORE through a raw 32-bit address at [W-base+offset] -> [eax], one extra dereference (4-byte (address), W+indirect).

Handler analysis (idalib, MSVBVM60.dll build 6.00.8268). Reads a 2-byte signed offset from the instruction stream and adds it to the pointer held at the fixed frame slot [ebp+10h]. That slot is set once by the procedure's caller ([ebp+10h] is procedure-invocation argument 3) and is never written by any handler in the ENGINE segment -- it is stable for the lifetime of the procedure.

This is an IWMem (indirect-W) variant: after computing base = [ebp+10h] + offset, the handler performs one extra dereference (mov eax, [eax]) before the final store. The slot at [ebp+10h] + offset is treated as itself a pointer to the actual raw 32-bit address.

Stack: [..., v:Ad] -> [...] (([([ebp+10h] + offset)]) <- v)

**Distinction from the corresponding Mem* opcode (non-W counterpart):** the regular Mem* family uses the runtime cache at [ebp-4Ch], which is updated by every preceding FLdPr, FLdPrThis, NewIfNullAd, Ary1LdPr, or LdPrVar instruction. The W-family bypasses that cache and uses the stable [ebp+10h] pointer instead -- so the W-base does not require a preceding object-load opcode to be set.

Identity of [ebp+10h] is not yet pinned. Handler analysis establishes the mechanical behavior; the source-language construct that establishes this secondary object pointer (parent scope, procedure descriptor, outer-class pointer, etc.) is not yet verified. PDFStreamDumper's corpus has zero occurrences of this family, suggesting the construct is rare in typical VB6 code. A targeted probe in Phase 4 should resolve which language-level construct emits these opcodes.

When the compiler emits it

Emitted when the compiler accesses a member through a STABLE, caller-supplied object pointer (the secondary slot at [ebp+10h]) rather than through the runtime object-load cache that Mem* uses. The specific source-language construct that establishes the W-base has not yet been pinned by handler analysis alone -- PDFStreamDumper's corpus has zero occurrences of the entire IWMem/WMem family, suggesting the construct is uncommon in typical VB6 code. Candidate emit triggers worth probing in Phase 4: nested-class member access, parent-scope references from inside an event handler, or compiler-synthesized accessors that have access to a known-stable secondary pointer.

Handler analysis

Handler label: label near 0x6610b3af at 0x6610b3af in MSVBVM60.dll (build 6.00.8268).

Canonical 8-instruction body:

movsx eax, word ptr [esi]        ; 2-byte signed offset
add   eax, [ebp+10h]              ; eax = W-base + offset
mov   eax, [eax]                  ; deref -> actual destination ptr
pop   dword ptr [eax]             ; pop value, write to *eax
xor   eax, eax
mov   al,  [esi+2]                ; next opcode byte
add   esi, 3                      ; advance pcode pointer
jmp   [_tblByteDisp + eax*4]      ; dispatch next

Variations across suffixes (FPR4/FPR8/Var/Cy/Str/Darg) replace the central push/pop dword [eax] with the appropriate width-specific helper (fld/fst for FPU types, __vbaCopyBytes/__vbaStrCopy for BSTRs, the 16-byte Variant copy routine for Var, etc.). The base-computation step (add eax, [ebp+10h]) is identical across all 50 distinct handlers analyzed in the IWMem/WMem set.

Encoding, evidence and notes
Encoding

Encoding: FD 58 (lead byte FD selects table 3), then 2 operand byte(s); total instruction length 4 byte(s).
No printf operands are declared, but the instruction still consumes operand bytes; see the size above and the observed bytes below. (Phase 3a: flag=0 does not mean 'no operands'.)

Evidence and notes

Emitted by VB6 SP6 (P-code): not observed in about 3,070 probe programs. The slot exists in the runtime's dispatch table, but no tested source construct makes the compiler emit it.

Handler: 0x6610B3AF, unique to this slot (real opcode #519).

Family note: Phase 4: never emitted by VB6 SP6. Contexts tried include class/form/module statics, member UDTs with With, WithEvents, Implements, ActiveX DLL/EXE globals (these compile to FMem*), UserControl, PropertyPage, ActiveX Document, Add-in, DHTML and DataReport projects. Handler base [ebp+10h] (dispatcher arg 3) has no known source construct. IIS WebClass projects are untested.

Description: draft, by claude-opus-4.7. Handler 0x6610B3AF, dispatch slot 0x66107A74, modOpcodes line 1271.

IWMemStAdFunc

(3,0x5F)not emittedhandler #526Object / COMcontextual
STORE through a value of suffix `` at [W-base+offset] -> [eax], one extra dereference (unknown-size, W+indirect).

Handler analysis (idalib, MSVBVM60.dll build 6.00.8268). Reads a 2-byte signed offset from the instruction stream and adds it to the pointer held at the fixed frame slot [ebp+10h]. That slot is set once by the procedure's caller ([ebp+10h] is procedure-invocation argument 3) and is never written by any handler in the ENGINE segment -- it is stable for the lifetime of the procedure.

This is an IWMem (indirect-W) variant: after computing base = [ebp+10h] + offset, the handler performs one extra dereference (mov eax, [eax]) before the final store. The slot at [ebp+10h] + offset is treated as itself a pointer to the actual value of suffix ``.

Stack: [..., v:] -> [...] (([([ebp+10h] + offset)]) <- v)

**Distinction from the corresponding Mem* opcode (non-W counterpart):** the regular Mem* family uses the runtime cache at [ebp-4Ch], which is updated by every preceding FLdPr, FLdPrThis, NewIfNullAd, Ary1LdPr, or LdPrVar instruction. The W-family bypasses that cache and uses the stable [ebp+10h] pointer instead -- so the W-base does not require a preceding object-load opcode to be set.

Identity of [ebp+10h] is not yet pinned. Handler analysis establishes the mechanical behavior; the source-language construct that establishes this secondary object pointer (parent scope, procedure descriptor, outer-class pointer, etc.) is not yet verified. PDFStreamDumper's corpus has zero occurrences of this family, suggesting the construct is rare in typical VB6 code. A targeted probe in Phase 4 should resolve which language-level construct emits these opcodes.

When the compiler emits it

Emitted when the compiler accesses a member through a STABLE, caller-supplied object pointer (the secondary slot at [ebp+10h]) rather than through the runtime object-load cache that Mem* uses. The specific source-language construct that establishes the W-base has not yet been pinned by handler analysis alone -- PDFStreamDumper's corpus has zero occurrences of the entire IWMem/WMem family, suggesting the construct is uncommon in typical VB6 code. Candidate emit triggers worth probing in Phase 4: nested-class member access, parent-scope references from inside an event handler, or compiler-synthesized accessors that have access to a known-stable secondary pointer.

Handler analysis

Handler label: label near 0x6610b39a at 0x6610b39a in MSVBVM60.dll (build 6.00.8268).

Canonical 8-instruction body:

movsx eax, word ptr [esi]        ; 2-byte signed offset
add   eax, [ebp+10h]              ; eax = W-base + offset
mov   eax, [eax]                  ; deref -> actual destination ptr
pop   dword ptr [eax]             ; pop value, write to *eax
xor   eax, eax
mov   al,  [esi+2]                ; next opcode byte
add   esi, 3                      ; advance pcode pointer
jmp   [_tblByteDisp + eax*4]      ; dispatch next

Variations across suffixes (FPR4/FPR8/Var/Cy/Str/Darg) replace the central push/pop dword [eax] with the appropriate width-specific helper (fld/fst for FPU types, __vbaCopyBytes/__vbaStrCopy for BSTRs, the 16-byte Variant copy routine for Var, etc.). The base-computation step (add eax, [ebp+10h]) is identical across all 50 distinct handlers analyzed in the IWMem/WMem set.

Encoding, evidence and notes
Encoding

Encoding: FD 5F (lead byte FD selects table 3), then 2 operand byte(s); total instruction length 4 byte(s).
No printf operands are declared, but the instruction still consumes operand bytes; see the size above and the observed bytes below. (Phase 3a: flag=0 does not mean 'no operands'.)

Evidence and notes

Emitted by VB6 SP6 (P-code): not observed in about 3,070 probe programs. The slot exists in the runtime's dispatch table, but no tested source construct makes the compiler emit it.

Handler: 0x6610B39A, unique to this slot (real opcode #526).

Family note: Phase 4: never emitted by VB6 SP6. Contexts tried include class/form/module statics, member UDTs with With, WithEvents, Implements, ActiveX DLL/EXE globals (these compile to FMem*), UserControl, PropertyPage, ActiveX Document, Add-in, DHTML and DataReport projects. Handler base [ebp+10h] (dispatcher arg 3) has no known source construct. IIS WebClass projects are untested.

Description: draft, by claude-opus-4.7. Handler 0x6610B39A, dispatch slot 0x66107A90, modOpcodes line 1278.

IWMemStCy

(3,0x54)not emittedprimary of 2handler #516Currencycontextual
STORE through a Currency (64-bit scaled int) at [W-base+offset] -> [eax], one extra dereference (8-byte, W+indirect).

Handler analysis (idalib, MSVBVM60.dll build 6.00.8268). Reads a 2-byte signed offset from the instruction stream and adds it to the pointer held at the fixed frame slot [ebp+10h]. That slot is set once by the procedure's caller ([ebp+10h] is procedure-invocation argument 3) and is never written by any handler in the ENGINE segment -- it is stable for the lifetime of the procedure.

This is an IWMem (indirect-W) variant: after computing base = [ebp+10h] + offset, the handler performs one extra dereference (mov eax, [eax]) before the final store. The slot at [ebp+10h] + offset is treated as itself a pointer to the actual Currency (64-bit scaled int).

Stack: [..., v:Cy] -> [...] (([([ebp+10h] + offset)]) <- v)

**Distinction from the corresponding Mem* opcode (non-W counterpart):** the regular Mem* family uses the runtime cache at [ebp-4Ch], which is updated by every preceding FLdPr, FLdPrThis, NewIfNullAd, Ary1LdPr, or LdPrVar instruction. The W-family bypasses that cache and uses the stable [ebp+10h] pointer instead -- so the W-base does not require a preceding object-load opcode to be set.

Identity of [ebp+10h] is not yet pinned. Handler analysis establishes the mechanical behavior; the source-language construct that establishes this secondary object pointer (parent scope, procedure descriptor, outer-class pointer, etc.) is not yet verified. PDFStreamDumper's corpus has zero occurrences of this family, suggesting the construct is rare in typical VB6 code. A targeted probe in Phase 4 should resolve which language-level construct emits these opcodes.

When the compiler emits it

Emitted when the compiler accesses a member through a STABLE, caller-supplied object pointer (the secondary slot at [ebp+10h]) rather than through the runtime object-load cache that Mem* uses. The specific source-language construct that establishes the W-base has not yet been pinned by handler analysis alone -- PDFStreamDumper's corpus has zero occurrences of the entire IWMem/WMem family, suggesting the construct is uncommon in typical VB6 code. Candidate emit triggers worth probing in Phase 4: nested-class member access, parent-scope references from inside an event handler, or compiler-synthesized accessors that have access to a known-stable secondary pointer.

Handler analysis

Handler label: label near 0x6610a54e at 0x6610a54e in MSVBVM60.dll (build 6.00.8268).

Canonical 8-instruction body:

movsx eax, word ptr [esi]        ; 2-byte signed offset
add   eax, [ebp+10h]              ; eax = W-base + offset
mov   eax, [eax]                  ; deref -> actual destination ptr
pop   dword ptr [eax]             ; pop value, write to *eax
xor   eax, eax
mov   al,  [esi+2]                ; next opcode byte
add   esi, 3                      ; advance pcode pointer
jmp   [_tblByteDisp + eax*4]      ; dispatch next

Variations across suffixes (FPR4/FPR8/Var/Cy/Str/Darg) replace the central push/pop dword [eax] with the appropriate width-specific helper (fld/fst for FPU types, __vbaCopyBytes/__vbaStrCopy for BSTRs, the 16-byte Variant copy routine for Var, etc.). The base-computation step (add eax, [ebp+10h]) is identical across all 50 distinct handlers analyzed in the IWMem/WMem set.

Encoding, evidence and notes
Encoding

Encoding: FD 54 (lead byte FD selects table 3), then 2 operand byte(s); total instruction length 4 byte(s).
No printf operands are declared, but the instruction still consumes operand bytes; see the size above and the observed bytes below. (Phase 3a: flag=0 does not mean 'no operands'.)

Evidence and notes

Emitted by VB6 SP6 (P-code): not observed in about 3,070 probe programs. The slot exists in the runtime's dispatch table, but no tested source construct makes the compiler emit it.

Handler: 0x6610A54E, shared by 2 dispatch slots (real opcode #516). This is the primary slot. Other slots: (3,55) IWMemStCy.

Family note: Phase 4: never emitted by VB6 SP6. Contexts tried include class/form/module statics, member UDTs with With, WithEvents, Implements, ActiveX DLL/EXE globals (these compile to FMem*), UserControl, PropertyPage, ActiveX Document, Add-in, DHTML and DataReport projects. Handler base [ebp+10h] (dispatcher arg 3) has no known source construct. IIS WebClass projects are untested.

Slots sharing this handler

(3,0x55) IWMemStCy

Description: draft, by claude-opus-4.7. Handler 0x6610A54E, dispatch slot 0x66107A64, modOpcodes line 1267.

IWMemStCy

(3,0x55)not emitteddup of (3,54)handler #516Currencyconfirmed_handler
STORE through a Currency (64-bit scaled int) at [W-base+offset] -> [eax], one extra dereference (8-byte, W+indirect).

Handler analysis (idalib, MSVBVM60.dll build 6.00.8268). Reads a 2-byte signed offset from the instruction stream and adds it to the pointer held at the fixed frame slot [ebp+10h]. That slot is set once by the procedure's caller ([ebp+10h] is procedure-invocation argument 3) and is never written by any handler in the ENGINE segment -- it is stable for the lifetime of the procedure.

This is an IWMem (indirect-W) variant: after computing base = [ebp+10h] + offset, the handler performs one extra dereference (mov eax, [eax]) before the final store. The slot at [ebp+10h] + offset is treated as itself a pointer to the actual Currency (64-bit scaled int).

Stack: [..., v:Cy] -> [...] (([([ebp+10h] + offset)]) <- v)

**Distinction from the corresponding Mem* opcode (non-W counterpart):** the regular Mem* family uses the runtime cache at [ebp-4Ch], which is updated by every preceding FLdPr, FLdPrThis, NewIfNullAd, Ary1LdPr, or LdPrVar instruction. The W-family bypasses that cache and uses the stable [ebp+10h] pointer instead -- so the W-base does not require a preceding object-load opcode to be set.

Identity of [ebp+10h] is not yet pinned. Handler analysis establishes the mechanical behavior; the source-language construct that establishes this secondary object pointer (parent scope, procedure descriptor, outer-class pointer, etc.) is not yet verified. PDFStreamDumper's corpus has zero occurrences of this family, suggesting the construct is rare in typical VB6 code. A targeted probe in Phase 4 should resolve which language-level construct emits these opcodes.

When the compiler emits it

Emitted when the compiler accesses a member through a STABLE, caller-supplied object pointer (the secondary slot at [ebp+10h]) rather than through the runtime object-load cache that Mem* uses. The specific source-language construct that establishes the W-base has not yet been pinned by handler analysis alone -- PDFStreamDumper's corpus has zero occurrences of the entire IWMem/WMem family, suggesting the construct is uncommon in typical VB6 code. Candidate emit triggers worth probing in Phase 4: nested-class member access, parent-scope references from inside an event handler, or compiler-synthesized accessors that have access to a known-stable secondary pointer.

Handler analysis

Handler label: label near 0x6610a54e at 0x6610a54e in MSVBVM60.dll (build 6.00.8268).

Canonical 8-instruction body:

movsx eax, word ptr [esi]        ; 2-byte signed offset
add   eax, [ebp+10h]              ; eax = W-base + offset
mov   eax, [eax]                  ; deref -> actual destination ptr
pop   dword ptr [eax]             ; pop value, write to *eax
xor   eax, eax
mov   al,  [esi+2]                ; next opcode byte
add   esi, 3                      ; advance pcode pointer
jmp   [_tblByteDisp + eax*4]      ; dispatch next

Variations across suffixes (FPR4/FPR8/Var/Cy/Str/Darg) replace the central push/pop dword [eax] with the appropriate width-specific helper (fld/fst for FPU types, __vbaCopyBytes/__vbaStrCopy for BSTRs, the 16-byte Variant copy routine for Var, etc.). The base-computation step (add eax, [ebp+10h]) is identical across all 50 distinct handlers analyzed in the IWMem/WMem set.

Encoding, evidence and notes
Encoding

Encoding: FD 55 (lead byte FD selects table 3), then 2 operand byte(s); total instruction length 4 byte(s).
No printf operands are declared, but the instruction still consumes operand bytes; see the size above and the observed bytes below. (Phase 3a: flag=0 does not mean 'no operands'.)

Evidence and notes

Emitted by VB6 SP6 (P-code): not observed in about 3,070 probe programs. The slot exists in the runtime's dispatch table, but no tested source construct makes the compiler emit it.

Handler: 0x6610A54E, shared by 2 dispatch slots (real opcode #516). This is a duplicate slot of (3,54) IWMemStCy. Other slots: (3,54) IWMemStCy.

Family note: Phase 4: never emitted by VB6 SP6. Contexts tried include class/form/module statics, member UDTs with With, WithEvents, Implements, ActiveX DLL/EXE globals (these compile to FMem*), UserControl, PropertyPage, ActiveX Document, Add-in, DHTML and DataReport projects. Handler base [ebp+10h] (dispatcher arg 3) has no known source construct. IIS WebClass projects are untested.

Slots sharing this handler

(3,0x54) IWMemStCy

Description: draft, by claude-opus-4.7. Handler 0x6610A54E, dispatch slot 0x66107A68, modOpcodes line 1268.

IWMemStDarg

(3,0x56)not emittedhandler #517Variantcontextual
STORE through a value of suffix `` at [W-base+offset] -> [eax], one extra dereference (unknown-size, W+indirect).

Handler analysis (idalib, MSVBVM60.dll build 6.00.8268). Reads a 2-byte signed offset from the instruction stream and adds it to the pointer held at the fixed frame slot [ebp+10h]. That slot is set once by the procedure's caller ([ebp+10h] is procedure-invocation argument 3) and is never written by any handler in the ENGINE segment -- it is stable for the lifetime of the procedure.

This is an IWMem (indirect-W) variant: after computing base = [ebp+10h] + offset, the handler performs one extra dereference (mov eax, [eax]) before the final store. The slot at [ebp+10h] + offset is treated as itself a pointer to the actual value of suffix ``.

Stack: [..., v:] -> [...] (([([ebp+10h] + offset)]) <- v)

**Distinction from the corresponding Mem* opcode (non-W counterpart):** the regular Mem* family uses the runtime cache at [ebp-4Ch], which is updated by every preceding FLdPr, FLdPrThis, NewIfNullAd, Ary1LdPr, or LdPrVar instruction. The W-family bypasses that cache and uses the stable [ebp+10h] pointer instead -- so the W-base does not require a preceding object-load opcode to be set.

Identity of [ebp+10h] is not yet pinned. Handler analysis establishes the mechanical behavior; the source-language construct that establishes this secondary object pointer (parent scope, procedure descriptor, outer-class pointer, etc.) is not yet verified. PDFStreamDumper's corpus has zero occurrences of this family, suggesting the construct is rare in typical VB6 code. A targeted probe in Phase 4 should resolve which language-level construct emits these opcodes.

When the compiler emits it

Emitted when the compiler accesses a member through a STABLE, caller-supplied object pointer (the secondary slot at [ebp+10h]) rather than through the runtime object-load cache that Mem* uses. The specific source-language construct that establishes the W-base has not yet been pinned by handler analysis alone -- PDFStreamDumper's corpus has zero occurrences of the entire IWMem/WMem family, suggesting the construct is uncommon in typical VB6 code. Candidate emit triggers worth probing in Phase 4: nested-class member access, parent-scope references from inside an event handler, or compiler-synthesized accessors that have access to a known-stable secondary pointer.

Handler analysis

Handler label: label near 0x6610b7b8 at 0x6610b7b8 in MSVBVM60.dll (build 6.00.8268).

Canonical 8-instruction body:

movsx eax, word ptr [esi]        ; 2-byte signed offset
add   eax, [ebp+10h]              ; eax = W-base + offset
mov   eax, [eax]                  ; deref -> actual destination ptr
pop   dword ptr [eax]             ; pop value, write to *eax
xor   eax, eax
mov   al,  [esi+2]                ; next opcode byte
add   esi, 3                      ; advance pcode pointer
jmp   [_tblByteDisp + eax*4]      ; dispatch next

Variations across suffixes (FPR4/FPR8/Var/Cy/Str/Darg) replace the central push/pop dword [eax] with the appropriate width-specific helper (fld/fst for FPU types, __vbaCopyBytes/__vbaStrCopy for BSTRs, the 16-byte Variant copy routine for Var, etc.). The base-computation step (add eax, [ebp+10h]) is identical across all 50 distinct handlers analyzed in the IWMem/WMem set.

Encoding, evidence and notes
Encoding

Encoding: FD 56 (lead byte FD selects table 3), then 2 operand byte(s); total instruction length 4 byte(s).
No printf operands are declared, but the instruction still consumes operand bytes; see the size above and the observed bytes below. (Phase 3a: flag=0 does not mean 'no operands'.)

Evidence and notes

Emitted by VB6 SP6 (P-code): not observed in about 3,070 probe programs. The slot exists in the runtime's dispatch table, but no tested source construct makes the compiler emit it.

Handler: 0x6610B7B8, unique to this slot (real opcode #517).

Family note: Phase 4: never emitted by VB6 SP6. Contexts tried include class/form/module statics, member UDTs with With, WithEvents, Implements, ActiveX DLL/EXE globals (these compile to FMem*), UserControl, PropertyPage, ActiveX Document, Add-in, DHTML and DataReport projects. Handler base [ebp+10h] (dispatcher arg 3) has no known source construct. IIS WebClass projects are untested.

Description: draft, by claude-opus-4.7. Handler 0x6610B7B8, dispatch slot 0x66107A6C, modOpcodes line 1269.

IWMemStDargAd

(3,0x5B)not emittedhandler #522Variantcontextual
STORE through a raw 32-bit address at [W-base+offset] -> [eax], one extra dereference (4-byte (address), W+indirect).

Handler analysis (idalib, MSVBVM60.dll build 6.00.8268). Reads a 2-byte signed offset from the instruction stream and adds it to the pointer held at the fixed frame slot [ebp+10h]. That slot is set once by the procedure's caller ([ebp+10h] is procedure-invocation argument 3) and is never written by any handler in the ENGINE segment -- it is stable for the lifetime of the procedure.

This is an IWMem (indirect-W) variant: after computing base = [ebp+10h] + offset, the handler performs one extra dereference (mov eax, [eax]) before the final store. The slot at [ebp+10h] + offset is treated as itself a pointer to the actual raw 32-bit address.

Stack: [..., v:Ad] -> [...] (([([ebp+10h] + offset)]) <- v)

**Distinction from the corresponding Mem* opcode (non-W counterpart):** the regular Mem* family uses the runtime cache at [ebp-4Ch], which is updated by every preceding FLdPr, FLdPrThis, NewIfNullAd, Ary1LdPr, or LdPrVar instruction. The W-family bypasses that cache and uses the stable [ebp+10h] pointer instead -- so the W-base does not require a preceding object-load opcode to be set.

Identity of [ebp+10h] is not yet pinned. Handler analysis establishes the mechanical behavior; the source-language construct that establishes this secondary object pointer (parent scope, procedure descriptor, outer-class pointer, etc.) is not yet verified. PDFStreamDumper's corpus has zero occurrences of this family, suggesting the construct is rare in typical VB6 code. A targeted probe in Phase 4 should resolve which language-level construct emits these opcodes.

When the compiler emits it

Emitted when the compiler accesses a member through a STABLE, caller-supplied object pointer (the secondary slot at [ebp+10h]) rather than through the runtime object-load cache that Mem* uses. The specific source-language construct that establishes the W-base has not yet been pinned by handler analysis alone -- PDFStreamDumper's corpus has zero occurrences of the entire IWMem/WMem family, suggesting the construct is uncommon in typical VB6 code. Candidate emit triggers worth probing in Phase 4: nested-class member access, parent-scope references from inside an event handler, or compiler-synthesized accessors that have access to a known-stable secondary pointer.

Handler analysis

Handler label: label near 0x6610b45c at 0x6610b45c in MSVBVM60.dll (build 6.00.8268).

Canonical 8-instruction body:

movsx eax, word ptr [esi]        ; 2-byte signed offset
add   eax, [ebp+10h]              ; eax = W-base + offset
mov   eax, [eax]                  ; deref -> actual destination ptr
pop   dword ptr [eax]             ; pop value, write to *eax
xor   eax, eax
mov   al,  [esi+2]                ; next opcode byte
add   esi, 3                      ; advance pcode pointer
jmp   [_tblByteDisp + eax*4]      ; dispatch next

Variations across suffixes (FPR4/FPR8/Var/Cy/Str/Darg) replace the central push/pop dword [eax] with the appropriate width-specific helper (fld/fst for FPU types, __vbaCopyBytes/__vbaStrCopy for BSTRs, the 16-byte Variant copy routine for Var, etc.). The base-computation step (add eax, [ebp+10h]) is identical across all 50 distinct handlers analyzed in the IWMem/WMem set.

Encoding, evidence and notes
Encoding

Encoding: FD 5B (lead byte FD selects table 3), then 2 operand byte(s); total instruction length 4 byte(s).
No printf operands are declared, but the instruction still consumes operand bytes; see the size above and the observed bytes below. (Phase 3a: flag=0 does not mean 'no operands'.)

Evidence and notes

Emitted by VB6 SP6 (P-code): not observed in about 3,070 probe programs. The slot exists in the runtime's dispatch table, but no tested source construct makes the compiler emit it.

Handler: 0x6610B45C, unique to this slot (real opcode #522).

Family note: Phase 4: never emitted by VB6 SP6. Contexts tried include class/form/module statics, member UDTs with With, WithEvents, Implements, ActiveX DLL/EXE globals (these compile to FMem*), UserControl, PropertyPage, ActiveX Document, Add-in, DHTML and DataReport projects. Handler base [ebp+10h] (dispatcher arg 3) has no known source construct. IIS WebClass projects are untested.

Description: draft, by claude-opus-4.7. Handler 0x6610B45C, dispatch slot 0x66107A80, modOpcodes line 1274.

IWMemStDargAdFunc

(3,0x5C)not emittedhandler #523Variantcontextual
STORE through a value of suffix `` at [W-base+offset] -> [eax], one extra dereference (unknown-size, W+indirect).

Handler analysis (idalib, MSVBVM60.dll build 6.00.8268). Reads a 2-byte signed offset from the instruction stream and adds it to the pointer held at the fixed frame slot [ebp+10h]. That slot is set once by the procedure's caller ([ebp+10h] is procedure-invocation argument 3) and is never written by any handler in the ENGINE segment -- it is stable for the lifetime of the procedure.

This is an IWMem (indirect-W) variant: after computing base = [ebp+10h] + offset, the handler performs one extra dereference (mov eax, [eax]) before the final store. The slot at [ebp+10h] + offset is treated as itself a pointer to the actual value of suffix ``.

Stack: [..., v:] -> [...] (([([ebp+10h] + offset)]) <- v)

**Distinction from the corresponding Mem* opcode (non-W counterpart):** the regular Mem* family uses the runtime cache at [ebp-4Ch], which is updated by every preceding FLdPr, FLdPrThis, NewIfNullAd, Ary1LdPr, or LdPrVar instruction. The W-family bypasses that cache and uses the stable [ebp+10h] pointer instead -- so the W-base does not require a preceding object-load opcode to be set.

Identity of [ebp+10h] is not yet pinned. Handler analysis establishes the mechanical behavior; the source-language construct that establishes this secondary object pointer (parent scope, procedure descriptor, outer-class pointer, etc.) is not yet verified. PDFStreamDumper's corpus has zero occurrences of this family, suggesting the construct is rare in typical VB6 code. A targeted probe in Phase 4 should resolve which language-level construct emits these opcodes.

When the compiler emits it

Emitted when the compiler accesses a member through a STABLE, caller-supplied object pointer (the secondary slot at [ebp+10h]) rather than through the runtime object-load cache that Mem* uses. The specific source-language construct that establishes the W-base has not yet been pinned by handler analysis alone -- PDFStreamDumper's corpus has zero occurrences of the entire IWMem/WMem family, suggesting the construct is uncommon in typical VB6 code. Candidate emit triggers worth probing in Phase 4: nested-class member access, parent-scope references from inside an event handler, or compiler-synthesized accessors that have access to a known-stable secondary pointer.

Handler analysis

Handler label: label near 0x6610b44a at 0x6610b44a in MSVBVM60.dll (build 6.00.8268).

Canonical 8-instruction body:

movsx eax, word ptr [esi]        ; 2-byte signed offset
add   eax, [ebp+10h]              ; eax = W-base + offset
mov   eax, [eax]                  ; deref -> actual destination ptr
pop   dword ptr [eax]             ; pop value, write to *eax
xor   eax, eax
mov   al,  [esi+2]                ; next opcode byte
add   esi, 3                      ; advance pcode pointer
jmp   [_tblByteDisp + eax*4]      ; dispatch next

Variations across suffixes (FPR4/FPR8/Var/Cy/Str/Darg) replace the central push/pop dword [eax] with the appropriate width-specific helper (fld/fst for FPU types, __vbaCopyBytes/__vbaStrCopy for BSTRs, the 16-byte Variant copy routine for Var, etc.). The base-computation step (add eax, [ebp+10h]) is identical across all 50 distinct handlers analyzed in the IWMem/WMem set.

Encoding, evidence and notes
Encoding

Encoding: FD 5C (lead byte FD selects table 3), then 2 operand byte(s); total instruction length 4 byte(s).
No printf operands are declared, but the instruction still consumes operand bytes; see the size above and the observed bytes below. (Phase 3a: flag=0 does not mean 'no operands'.)

Evidence and notes

Emitted by VB6 SP6 (P-code): not observed in about 3,070 probe programs. The slot exists in the runtime's dispatch table, but no tested source construct makes the compiler emit it.

Handler: 0x6610B44A, unique to this slot (real opcode #523).

Family note: Phase 4: never emitted by VB6 SP6. Contexts tried include class/form/module statics, member UDTs with With, WithEvents, Implements, ActiveX DLL/EXE globals (these compile to FMem*), UserControl, PropertyPage, ActiveX Document, Add-in, DHTML and DataReport projects. Handler base [ebp+10h] (dispatcher arg 3) has no known source construct. IIS WebClass projects are untested.

Description: draft, by claude-opus-4.7. Handler 0x6610B44A, dispatch slot 0x66107A84, modOpcodes line 1275.

IWMemStDargCopy

(3,0x60)not emittedhandler #527Variantcontextual
STORE through a value of suffix `` at [W-base+offset] -> [eax], one extra dereference (unknown-size, W+indirect).

Handler analysis (idalib, MSVBVM60.dll build 6.00.8268). Reads a 2-byte signed offset from the instruction stream and adds it to the pointer held at the fixed frame slot [ebp+10h]. That slot is set once by the procedure's caller ([ebp+10h] is procedure-invocation argument 3) and is never written by any handler in the ENGINE segment -- it is stable for the lifetime of the procedure.

This is an IWMem (indirect-W) variant: after computing base = [ebp+10h] + offset, the handler performs one extra dereference (mov eax, [eax]) before the final store. The slot at [ebp+10h] + offset is treated as itself a pointer to the actual value of suffix ``.

Stack: [..., v:] -> [...] (([([ebp+10h] + offset)]) <- v)

**Distinction from the corresponding Mem* opcode (non-W counterpart):** the regular Mem* family uses the runtime cache at [ebp-4Ch], which is updated by every preceding FLdPr, FLdPrThis, NewIfNullAd, Ary1LdPr, or LdPrVar instruction. The W-family bypasses that cache and uses the stable [ebp+10h] pointer instead -- so the W-base does not require a preceding object-load opcode to be set.

Identity of [ebp+10h] is not yet pinned. Handler analysis establishes the mechanical behavior; the source-language construct that establishes this secondary object pointer (parent scope, procedure descriptor, outer-class pointer, etc.) is not yet verified. PDFStreamDumper's corpus has zero occurrences of this family, suggesting the construct is rare in typical VB6 code. A targeted probe in Phase 4 should resolve which language-level construct emits these opcodes.

When the compiler emits it

Emitted when the compiler accesses a member through a STABLE, caller-supplied object pointer (the secondary slot at [ebp+10h]) rather than through the runtime object-load cache that Mem* uses. The specific source-language construct that establishes the W-base has not yet been pinned by handler analysis alone -- PDFStreamDumper's corpus has zero occurrences of the entire IWMem/WMem family, suggesting the construct is uncommon in typical VB6 code. Candidate emit triggers worth probing in Phase 4: nested-class member access, parent-scope references from inside an event handler, or compiler-synthesized accessors that have access to a known-stable secondary pointer.

Handler analysis

Handler label: label near 0x6610b795 at 0x6610b795 in MSVBVM60.dll (build 6.00.8268).

Canonical 8-instruction body:

movsx eax, word ptr [esi]        ; 2-byte signed offset
add   eax, [ebp+10h]              ; eax = W-base + offset
mov   eax, [eax]                  ; deref -> actual destination ptr
pop   dword ptr [eax]             ; pop value, write to *eax
xor   eax, eax
mov   al,  [esi+2]                ; next opcode byte
add   esi, 3                      ; advance pcode pointer
jmp   [_tblByteDisp + eax*4]      ; dispatch next

Variations across suffixes (FPR4/FPR8/Var/Cy/Str/Darg) replace the central push/pop dword [eax] with the appropriate width-specific helper (fld/fst for FPU types, __vbaCopyBytes/__vbaStrCopy for BSTRs, the 16-byte Variant copy routine for Var, etc.). The base-computation step (add eax, [ebp+10h]) is identical across all 50 distinct handlers analyzed in the IWMem/WMem set.

Encoding, evidence and notes
Encoding

Encoding: FD 60 (lead byte FD selects table 3), then 2 operand byte(s); total instruction length 4 byte(s).
No printf operands are declared, but the instruction still consumes operand bytes; see the size above and the observed bytes below. (Phase 3a: flag=0 does not mean 'no operands'.)

Evidence and notes

Emitted by VB6 SP6 (P-code): not observed in about 3,070 probe programs. The slot exists in the runtime's dispatch table, but no tested source construct makes the compiler emit it.

Handler: 0x6610B795, unique to this slot (real opcode #527).

Family note: Phase 4: never emitted by VB6 SP6. Contexts tried include class/form/module statics, member UDTs with With, WithEvents, Implements, ActiveX DLL/EXE globals (these compile to FMem*), UserControl, PropertyPage, ActiveX Document, Add-in, DHTML and DataReport projects. Handler base [ebp+10h] (dispatcher arg 3) has no known source construct. IIS WebClass projects are untested.

Description: draft, by claude-opus-4.7. Handler 0x6610B795, dispatch slot 0x66107A94, modOpcodes line 1279.

IWMemStDargUnk

(3,0x5D)not emittedhandler #524Variantcontextual
STORE through a value of suffix `` at [W-base+offset] -> [eax], one extra dereference (unknown-size, W+indirect).

Handler analysis (idalib, MSVBVM60.dll build 6.00.8268). Reads a 2-byte signed offset from the instruction stream and adds it to the pointer held at the fixed frame slot [ebp+10h]. That slot is set once by the procedure's caller ([ebp+10h] is procedure-invocation argument 3) and is never written by any handler in the ENGINE segment -- it is stable for the lifetime of the procedure.

This is an IWMem (indirect-W) variant: after computing base = [ebp+10h] + offset, the handler performs one extra dereference (mov eax, [eax]) before the final store. The slot at [ebp+10h] + offset is treated as itself a pointer to the actual value of suffix ``.

Stack: [..., v:] -> [...] (([([ebp+10h] + offset)]) <- v)

**Distinction from the corresponding Mem* opcode (non-W counterpart):** the regular Mem* family uses the runtime cache at [ebp-4Ch], which is updated by every preceding FLdPr, FLdPrThis, NewIfNullAd, Ary1LdPr, or LdPrVar instruction. The W-family bypasses that cache and uses the stable [ebp+10h] pointer instead -- so the W-base does not require a preceding object-load opcode to be set.

Identity of [ebp+10h] is not yet pinned. Handler analysis establishes the mechanical behavior; the source-language construct that establishes this secondary object pointer (parent scope, procedure descriptor, outer-class pointer, etc.) is not yet verified. PDFStreamDumper's corpus has zero occurrences of this family, suggesting the construct is rare in typical VB6 code. A targeted probe in Phase 4 should resolve which language-level construct emits these opcodes.

When the compiler emits it

Emitted when the compiler accesses a member through a STABLE, caller-supplied object pointer (the secondary slot at [ebp+10h]) rather than through the runtime object-load cache that Mem* uses. The specific source-language construct that establishes the W-base has not yet been pinned by handler analysis alone -- PDFStreamDumper's corpus has zero occurrences of the entire IWMem/WMem family, suggesting the construct is uncommon in typical VB6 code. Candidate emit triggers worth probing in Phase 4: nested-class member access, parent-scope references from inside an event handler, or compiler-synthesized accessors that have access to a known-stable secondary pointer.

Handler analysis

Handler label: label near 0x6610b60e at 0x6610b60e in MSVBVM60.dll (build 6.00.8268).

Canonical 8-instruction body:

movsx eax, word ptr [esi]        ; 2-byte signed offset
add   eax, [ebp+10h]              ; eax = W-base + offset
mov   eax, [eax]                  ; deref -> actual destination ptr
pop   dword ptr [eax]             ; pop value, write to *eax
xor   eax, eax
mov   al,  [esi+2]                ; next opcode byte
add   esi, 3                      ; advance pcode pointer
jmp   [_tblByteDisp + eax*4]      ; dispatch next

Variations across suffixes (FPR4/FPR8/Var/Cy/Str/Darg) replace the central push/pop dword [eax] with the appropriate width-specific helper (fld/fst for FPU types, __vbaCopyBytes/__vbaStrCopy for BSTRs, the 16-byte Variant copy routine for Var, etc.). The base-computation step (add eax, [ebp+10h]) is identical across all 50 distinct handlers analyzed in the IWMem/WMem set.

Encoding, evidence and notes
Encoding

Encoding: FD 5D (lead byte FD selects table 3), then 2 operand byte(s); total instruction length 4 byte(s).
No printf operands are declared, but the instruction still consumes operand bytes; see the size above and the observed bytes below. (Phase 3a: flag=0 does not mean 'no operands'.)

Evidence and notes

Emitted by VB6 SP6 (P-code): not observed in about 3,070 probe programs. The slot exists in the runtime's dispatch table, but no tested source construct makes the compiler emit it.

Handler: 0x6610B60E, unique to this slot (real opcode #524).

Family note: Phase 4: never emitted by VB6 SP6. Contexts tried include class/form/module statics, member UDTs with With, WithEvents, Implements, ActiveX DLL/EXE globals (these compile to FMem*), UserControl, PropertyPage, ActiveX Document, Add-in, DHTML and DataReport projects. Handler base [ebp+10h] (dispatcher arg 3) has no known source construct. IIS WebClass projects are untested.

Description: draft, by claude-opus-4.7. Handler 0x6610B60E, dispatch slot 0x66107A88, modOpcodes line 1276.

IWMemStDargUnkFunc

(3,0x5E)not emittedhandler #525Variantcontextual
STORE through a value of suffix `` at [W-base+offset] -> [eax], one extra dereference (unknown-size, W+indirect).

Handler analysis (idalib, MSVBVM60.dll build 6.00.8268). Reads a 2-byte signed offset from the instruction stream and adds it to the pointer held at the fixed frame slot [ebp+10h]. That slot is set once by the procedure's caller ([ebp+10h] is procedure-invocation argument 3) and is never written by any handler in the ENGINE segment -- it is stable for the lifetime of the procedure.

This is an IWMem (indirect-W) variant: after computing base = [ebp+10h] + offset, the handler performs one extra dereference (mov eax, [eax]) before the final store. The slot at [ebp+10h] + offset is treated as itself a pointer to the actual value of suffix ``.

Stack: [..., v:] -> [...] (([([ebp+10h] + offset)]) <- v)

**Distinction from the corresponding Mem* opcode (non-W counterpart):** the regular Mem* family uses the runtime cache at [ebp-4Ch], which is updated by every preceding FLdPr, FLdPrThis, NewIfNullAd, Ary1LdPr, or LdPrVar instruction. The W-family bypasses that cache and uses the stable [ebp+10h] pointer instead -- so the W-base does not require a preceding object-load opcode to be set.

Identity of [ebp+10h] is not yet pinned. Handler analysis establishes the mechanical behavior; the source-language construct that establishes this secondary object pointer (parent scope, procedure descriptor, outer-class pointer, etc.) is not yet verified. PDFStreamDumper's corpus has zero occurrences of this family, suggesting the construct is rare in typical VB6 code. A targeted probe in Phase 4 should resolve which language-level construct emits these opcodes.

When the compiler emits it

Emitted when the compiler accesses a member through a STABLE, caller-supplied object pointer (the secondary slot at [ebp+10h]) rather than through the runtime object-load cache that Mem* uses. The specific source-language construct that establishes the W-base has not yet been pinned by handler analysis alone -- PDFStreamDumper's corpus has zero occurrences of the entire IWMem/WMem family, suggesting the construct is uncommon in typical VB6 code. Candidate emit triggers worth probing in Phase 4: nested-class member access, parent-scope references from inside an event handler, or compiler-synthesized accessors that have access to a known-stable secondary pointer.

Handler analysis

Handler label: label near 0x6610b5f9 at 0x6610b5f9 in MSVBVM60.dll (build 6.00.8268).

Canonical 8-instruction body:

movsx eax, word ptr [esi]        ; 2-byte signed offset
add   eax, [ebp+10h]              ; eax = W-base + offset
mov   eax, [eax]                  ; deref -> actual destination ptr
pop   dword ptr [eax]             ; pop value, write to *eax
xor   eax, eax
mov   al,  [esi+2]                ; next opcode byte
add   esi, 3                      ; advance pcode pointer
jmp   [_tblByteDisp + eax*4]      ; dispatch next

Variations across suffixes (FPR4/FPR8/Var/Cy/Str/Darg) replace the central push/pop dword [eax] with the appropriate width-specific helper (fld/fst for FPU types, __vbaCopyBytes/__vbaStrCopy for BSTRs, the 16-byte Variant copy routine for Var, etc.). The base-computation step (add eax, [ebp+10h]) is identical across all 50 distinct handlers analyzed in the IWMem/WMem set.

Encoding, evidence and notes
Encoding

Encoding: FD 5E (lead byte FD selects table 3), then 2 operand byte(s); total instruction length 4 byte(s).
No printf operands are declared, but the instruction still consumes operand bytes; see the size above and the observed bytes below. (Phase 3a: flag=0 does not mean 'no operands'.)

Evidence and notes

Emitted by VB6 SP6 (P-code): not observed in about 3,070 probe programs. The slot exists in the runtime's dispatch table, but no tested source construct makes the compiler emit it.

Handler: 0x6610B5F9, unique to this slot (real opcode #525).

Family note: Phase 4: never emitted by VB6 SP6. Contexts tried include class/form/module statics, member UDTs with With, WithEvents, Implements, ActiveX DLL/EXE globals (these compile to FMem*), UserControl, PropertyPage, ActiveX Document, Add-in, DHTML and DataReport projects. Handler base [ebp+10h] (dispatcher arg 3) has no known source construct. IIS WebClass projects are untested.

Description: draft, by claude-opus-4.7. Handler 0x6610B5F9, dispatch slot 0x66107A8C, modOpcodes line 1277.

IWMemStFPR4

(3,0x59)not emittedhandler #520Floating pointcontextual
STORE through a Single via x87 FPU at [W-base+offset] -> [eax], one extra dereference (4-byte (FPU), W+indirect).

Handler analysis (idalib, MSVBVM60.dll build 6.00.8268). Reads a 2-byte signed offset from the instruction stream and adds it to the pointer held at the fixed frame slot [ebp+10h]. That slot is set once by the procedure's caller ([ebp+10h] is procedure-invocation argument 3) and is never written by any handler in the ENGINE segment -- it is stable for the lifetime of the procedure.

This is an IWMem (indirect-W) variant: after computing base = [ebp+10h] + offset, the handler performs one extra dereference (mov eax, [eax]) before the final store. The slot at [ebp+10h] + offset is treated as itself a pointer to the actual Single via x87 FPU.

Stack: [..., v:FPR4] -> [...] (([([ebp+10h] + offset)]) <- v)

**Distinction from the corresponding Mem* opcode (non-W counterpart):** the regular Mem* family uses the runtime cache at [ebp-4Ch], which is updated by every preceding FLdPr, FLdPrThis, NewIfNullAd, Ary1LdPr, or LdPrVar instruction. The W-family bypasses that cache and uses the stable [ebp+10h] pointer instead -- so the W-base does not require a preceding object-load opcode to be set.

Identity of [ebp+10h] is not yet pinned. Handler analysis establishes the mechanical behavior; the source-language construct that establishes this secondary object pointer (parent scope, procedure descriptor, outer-class pointer, etc.) is not yet verified. PDFStreamDumper's corpus has zero occurrences of this family, suggesting the construct is rare in typical VB6 code. A targeted probe in Phase 4 should resolve which language-level construct emits these opcodes.

When the compiler emits it

Emitted when the compiler accesses a member through a STABLE, caller-supplied object pointer (the secondary slot at [ebp+10h]) rather than through the runtime object-load cache that Mem* uses. The specific source-language construct that establishes the W-base has not yet been pinned by handler analysis alone -- PDFStreamDumper's corpus has zero occurrences of the entire IWMem/WMem family, suggesting the construct is uncommon in typical VB6 code. Candidate emit triggers worth probing in Phase 4: nested-class member access, parent-scope references from inside an event handler, or compiler-synthesized accessors that have access to a known-stable secondary pointer.

Handler analysis

Handler label: label near 0x6610a56a at 0x6610a56a in MSVBVM60.dll (build 6.00.8268).

Canonical 8-instruction body:

movsx eax, word ptr [esi]        ; 2-byte signed offset
add   eax, [ebp+10h]              ; eax = W-base + offset
mov   eax, [eax]                  ; deref -> actual destination ptr
pop   dword ptr [eax]             ; pop value, write to *eax
xor   eax, eax
mov   al,  [esi+2]                ; next opcode byte
add   esi, 3                      ; advance pcode pointer
jmp   [_tblByteDisp + eax*4]      ; dispatch next

Variations across suffixes (FPR4/FPR8/Var/Cy/Str/Darg) replace the central push/pop dword [eax] with the appropriate width-specific helper (fld/fst for FPU types, __vbaCopyBytes/__vbaStrCopy for BSTRs, the 16-byte Variant copy routine for Var, etc.). The base-computation step (add eax, [ebp+10h]) is identical across all 50 distinct handlers analyzed in the IWMem/WMem set.

Encoding, evidence and notes
Encoding

Encoding: FD 59 (lead byte FD selects table 3), then 2 operand byte(s); total instruction length 4 byte(s).
No printf operands are declared, but the instruction still consumes operand bytes; see the size above and the observed bytes below. (Phase 3a: flag=0 does not mean 'no operands'.)

Evidence and notes

Emitted by VB6 SP6 (P-code): not observed in about 3,070 probe programs. The slot exists in the runtime's dispatch table, but no tested source construct makes the compiler emit it.

Handler: 0x6610A56A, unique to this slot (real opcode #520).

Family note: Phase 4: never emitted by VB6 SP6. Contexts tried include class/form/module statics, member UDTs with With, WithEvents, Implements, ActiveX DLL/EXE globals (these compile to FMem*), UserControl, PropertyPage, ActiveX Document, Add-in, DHTML and DataReport projects. Handler base [ebp+10h] (dispatcher arg 3) has no known source construct. IIS WebClass projects are untested.

Description: draft, by claude-opus-4.7. Handler 0x6610A56A, dispatch slot 0x66107A78, modOpcodes line 1272.

IWMemStFPR8

(3,0x5A)not emittedhandler #521Floating pointcontextual
STORE through a Double via x87 FPU at [W-base+offset] -> [eax], one extra dereference (8-byte (FPU), W+indirect).

Handler analysis (idalib, MSVBVM60.dll build 6.00.8268). Reads a 2-byte signed offset from the instruction stream and adds it to the pointer held at the fixed frame slot [ebp+10h]. That slot is set once by the procedure's caller ([ebp+10h] is procedure-invocation argument 3) and is never written by any handler in the ENGINE segment -- it is stable for the lifetime of the procedure.

This is an IWMem (indirect-W) variant: after computing base = [ebp+10h] + offset, the handler performs one extra dereference (mov eax, [eax]) before the final store. The slot at [ebp+10h] + offset is treated as itself a pointer to the actual Double via x87 FPU.

Stack: [..., v:FPR8] -> [...] (([([ebp+10h] + offset)]) <- v)

**Distinction from the corresponding Mem* opcode (non-W counterpart):** the regular Mem* family uses the runtime cache at [ebp-4Ch], which is updated by every preceding FLdPr, FLdPrThis, NewIfNullAd, Ary1LdPr, or LdPrVar instruction. The W-family bypasses that cache and uses the stable [ebp+10h] pointer instead -- so the W-base does not require a preceding object-load opcode to be set.

Identity of [ebp+10h] is not yet pinned. Handler analysis establishes the mechanical behavior; the source-language construct that establishes this secondary object pointer (parent scope, procedure descriptor, outer-class pointer, etc.) is not yet verified. PDFStreamDumper's corpus has zero occurrences of this family, suggesting the construct is rare in typical VB6 code. A targeted probe in Phase 4 should resolve which language-level construct emits these opcodes.

When the compiler emits it

Emitted when the compiler accesses a member through a STABLE, caller-supplied object pointer (the secondary slot at [ebp+10h]) rather than through the runtime object-load cache that Mem* uses. The specific source-language construct that establishes the W-base has not yet been pinned by handler analysis alone -- PDFStreamDumper's corpus has zero occurrences of the entire IWMem/WMem family, suggesting the construct is uncommon in typical VB6 code. Candidate emit triggers worth probing in Phase 4: nested-class member access, parent-scope references from inside an event handler, or compiler-synthesized accessors that have access to a known-stable secondary pointer.

Handler analysis

Handler label: label near 0x6610a58d at 0x6610a58d in MSVBVM60.dll (build 6.00.8268).

Canonical 8-instruction body:

movsx eax, word ptr [esi]        ; 2-byte signed offset
add   eax, [ebp+10h]              ; eax = W-base + offset
mov   eax, [eax]                  ; deref -> actual destination ptr
pop   dword ptr [eax]             ; pop value, write to *eax
xor   eax, eax
mov   al,  [esi+2]                ; next opcode byte
add   esi, 3                      ; advance pcode pointer
jmp   [_tblByteDisp + eax*4]      ; dispatch next

Variations across suffixes (FPR4/FPR8/Var/Cy/Str/Darg) replace the central push/pop dword [eax] with the appropriate width-specific helper (fld/fst for FPU types, __vbaCopyBytes/__vbaStrCopy for BSTRs, the 16-byte Variant copy routine for Var, etc.). The base-computation step (add eax, [ebp+10h]) is identical across all 50 distinct handlers analyzed in the IWMem/WMem set.

Encoding, evidence and notes
Encoding

Encoding: FD 5A (lead byte FD selects table 3), then 2 operand byte(s); total instruction length 4 byte(s).
No printf operands are declared, but the instruction still consumes operand bytes; see the size above and the observed bytes below. (Phase 3a: flag=0 does not mean 'no operands'.)

Evidence and notes

Emitted by VB6 SP6 (P-code): not observed in about 3,070 probe programs. The slot exists in the runtime's dispatch table, but no tested source construct makes the compiler emit it.

Handler: 0x6610A58D, unique to this slot (real opcode #521).

Family note: Phase 4: never emitted by VB6 SP6. Contexts tried include class/form/module statics, member UDTs with With, WithEvents, Implements, ActiveX DLL/EXE globals (these compile to FMem*), UserControl, PropertyPage, ActiveX Document, Add-in, DHTML and DataReport projects. Handler base [ebp+10h] (dispatcher arg 3) has no known source construct. IIS WebClass projects are untested.

Description: draft, by claude-opus-4.7. Handler 0x6610A58D, dispatch slot 0x66107A7C, modOpcodes line 1273.

IWMemStI2

(3,0x51)not emittedhandler #514Integercontextual
STORE through a 16-bit signed integer (VB6 Integer) at [W-base+offset] -> [eax], one extra dereference (2-byte, W+indirect).

Handler analysis (idalib, MSVBVM60.dll build 6.00.8268). Reads a 2-byte signed offset from the instruction stream and adds it to the pointer held at the fixed frame slot [ebp+10h]. That slot is set once by the procedure's caller ([ebp+10h] is procedure-invocation argument 3) and is never written by any handler in the ENGINE segment -- it is stable for the lifetime of the procedure.

This is an IWMem (indirect-W) variant: after computing base = [ebp+10h] + offset, the handler performs one extra dereference (mov eax, [eax]) before the final store. The slot at [ebp+10h] + offset is treated as itself a pointer to the actual 16-bit signed integer (VB6 Integer).

Stack: [..., v:I2] -> [...] (([([ebp+10h] + offset)]) <- v)

**Distinction from the corresponding Mem* opcode (non-W counterpart):** the regular Mem* family uses the runtime cache at [ebp-4Ch], which is updated by every preceding FLdPr, FLdPrThis, NewIfNullAd, Ary1LdPr, or LdPrVar instruction. The W-family bypasses that cache and uses the stable [ebp+10h] pointer instead -- so the W-base does not require a preceding object-load opcode to be set.

Identity of [ebp+10h] is not yet pinned. Handler analysis establishes the mechanical behavior; the source-language construct that establishes this secondary object pointer (parent scope, procedure descriptor, outer-class pointer, etc.) is not yet verified. PDFStreamDumper's corpus has zero occurrences of this family, suggesting the construct is rare in typical VB6 code. A targeted probe in Phase 4 should resolve which language-level construct emits these opcodes.

When the compiler emits it

Emitted when the compiler accesses a member through a STABLE, caller-supplied object pointer (the secondary slot at [ebp+10h]) rather than through the runtime object-load cache that Mem* uses. The specific source-language construct that establishes the W-base has not yet been pinned by handler analysis alone -- PDFStreamDumper's corpus has zero occurrences of the entire IWMem/WMem family, suggesting the construct is uncommon in typical VB6 code. Candidate emit triggers worth probing in Phase 4: nested-class member access, parent-scope references from inside an event handler, or compiler-synthesized accessors that have access to a known-stable secondary pointer.

Handler analysis

Handler label: label near 0x6610a51a at 0x6610a51a in MSVBVM60.dll (build 6.00.8268).

Canonical 8-instruction body:

movsx eax, word ptr [esi]        ; 2-byte signed offset
add   eax, [ebp+10h]              ; eax = W-base + offset
mov   eax, [eax]                  ; deref -> actual destination ptr
pop   dword ptr [eax]             ; pop value, write to *eax
xor   eax, eax
mov   al,  [esi+2]                ; next opcode byte
add   esi, 3                      ; advance pcode pointer
jmp   [_tblByteDisp + eax*4]      ; dispatch next

Variations across suffixes (FPR4/FPR8/Var/Cy/Str/Darg) replace the central push/pop dword [eax] with the appropriate width-specific helper (fld/fst for FPU types, __vbaCopyBytes/__vbaStrCopy for BSTRs, the 16-byte Variant copy routine for Var, etc.). The base-computation step (add eax, [ebp+10h]) is identical across all 50 distinct handlers analyzed in the IWMem/WMem set.

Encoding, evidence and notes
Encoding

Encoding: FD 51 (lead byte FD selects table 3), then 2 operand byte(s); total instruction length 4 byte(s).
No printf operands are declared, but the instruction still consumes operand bytes; see the size above and the observed bytes below. (Phase 3a: flag=0 does not mean 'no operands'.)

Evidence and notes

Emitted by VB6 SP6 (P-code): not observed in about 3,070 probe programs. The slot exists in the runtime's dispatch table, but no tested source construct makes the compiler emit it.

Handler: 0x6610A51A, unique to this slot (real opcode #514).

Family note: Phase 4: never emitted by VB6 SP6. Contexts tried include class/form/module statics, member UDTs with With, WithEvents, Implements, ActiveX DLL/EXE globals (these compile to FMem*), UserControl, PropertyPage, ActiveX Document, Add-in, DHTML and DataReport projects. Handler base [ebp+10h] (dispatcher arg 3) has no known source construct. IIS WebClass projects are untested.

Description: draft, by claude-opus-4.7. Handler 0x6610A51A, dispatch slot 0x66107A58, modOpcodes line 1264.

IWMemStR4

(3,0x52)not emittedprimary of 2handler #515Integercontextual
Store a raw 4-byte value at [W-base + offset] plus one extra dereference (W-base = dispatcher argument [ebp+10h]); not a floating-point store.

Pops a 4-byte value and writes it to the address computed from the stable secondary pointer at [ebp+10h] plus the 16-bit offset operand plus one extra dereference. The R4 suffix means a raw 4-byte move (compare FStR4, used for Long); floating-point values have separate FPR forms.

Stack: [..., v:R4] -> [...]

When the compiler emits it

Not emitted by VB6 SP6 in any tested project type (see the W/IW family note). The source construct that uses the [ebp+10h] base is unknown.

Handler analysis

Handler label: label near 0x6610a535 at 0x6610a535 in MSVBVM60.dll (build 6.00.8268).

Canonical 8-instruction body:

movsx eax, word ptr [esi]        ; 2-byte signed offset
add   eax, [ebp+10h]              ; eax = W-base + offset
mov   eax, [eax]                  ; deref -> actual destination ptr
pop   dword ptr [eax]             ; pop value, write to *eax
xor   eax, eax
mov   al,  [esi+2]                ; next opcode byte
add   esi, 3                      ; advance pcode pointer
jmp   [_tblByteDisp + eax*4]      ; dispatch next

Variations across suffixes (FPR4/FPR8/Var/Cy/Str/Darg) replace the central push/pop dword [eax] with the appropriate width-specific helper (fld/fst for FPU types, __vbaCopyBytes/__vbaStrCopy for BSTRs, the 16-byte Variant copy routine for Var, etc.). The base-computation step (add eax, [ebp+10h]) is identical across all 50 distinct handlers analyzed in the IWMem/WMem set.

Encoding, evidence and notes
Encoding

Encoding: FD 52 (lead byte FD selects table 3), then 2 operand byte(s); total instruction length 4 byte(s).
No printf operands are declared, but the instruction still consumes operand bytes; see the size above and the observed bytes below. (Phase 3a: flag=0 does not mean 'no operands'.)

Evidence and notes

Emitted by VB6 SP6 (P-code): not observed in about 3,070 probe programs. The slot exists in the runtime's dispatch table, but no tested source construct makes the compiler emit it.

Handler: 0x6610A535, shared by 2 dispatch slots (real opcode #515). This is the primary slot. Other slots: (3,53) IWMemStR4.

Family note: Phase 4: never emitted by VB6 SP6. Contexts tried include class/form/module statics, member UDTs with With, WithEvents, Implements, ActiveX DLL/EXE globals (these compile to FMem*), UserControl, PropertyPage, ActiveX Document, Add-in, DHTML and DataReport projects. Handler base [ebp+10h] (dispatcher arg 3) has no known source construct. IIS WebClass projects are untested.

Slots sharing this handler

(3,0x53) IWMemStR4

Description: draft, by claude-opus-5-5. Handler 0x6610A535, dispatch slot 0x66107A5C, modOpcodes line 1265.

IWMemStR4

(3,0x53)not emitteddup of (3,52)handler #515Integerconfirmed_handler
Store a raw 4-byte value at [W-base + offset] plus one extra dereference (W-base = dispatcher argument [ebp+10h]); not a floating-point store.

Pops a 4-byte value and writes it to the address computed from the stable secondary pointer at [ebp+10h] plus the 16-bit offset operand plus one extra dereference. The R4 suffix means a raw 4-byte move (compare FStR4, used for Long); floating-point values have separate FPR forms.

Stack: [..., v:R4] -> [...]

When the compiler emits it

Not emitted by VB6 SP6 in any tested project type (see the W/IW family note). The source construct that uses the [ebp+10h] base is unknown.

Handler analysis

Handler label: label near 0x6610a535 at 0x6610a535 in MSVBVM60.dll (build 6.00.8268).

Canonical 8-instruction body:

movsx eax, word ptr [esi]        ; 2-byte signed offset
add   eax, [ebp+10h]              ; eax = W-base + offset
mov   eax, [eax]                  ; deref -> actual destination ptr
pop   dword ptr [eax]             ; pop value, write to *eax
xor   eax, eax
mov   al,  [esi+2]                ; next opcode byte
add   esi, 3                      ; advance pcode pointer
jmp   [_tblByteDisp + eax*4]      ; dispatch next

Variations across suffixes (FPR4/FPR8/Var/Cy/Str/Darg) replace the central push/pop dword [eax] with the appropriate width-specific helper (fld/fst for FPU types, __vbaCopyBytes/__vbaStrCopy for BSTRs, the 16-byte Variant copy routine for Var, etc.). The base-computation step (add eax, [ebp+10h]) is identical across all 50 distinct handlers analyzed in the IWMem/WMem set.

Encoding, evidence and notes
Encoding

Encoding: FD 53 (lead byte FD selects table 3), then 2 operand byte(s); total instruction length 4 byte(s).
No printf operands are declared, but the instruction still consumes operand bytes; see the size above and the observed bytes below. (Phase 3a: flag=0 does not mean 'no operands'.)

Evidence and notes

Emitted by VB6 SP6 (P-code): not observed in about 3,070 probe programs. The slot exists in the runtime's dispatch table, but no tested source construct makes the compiler emit it.

Handler: 0x6610A535, shared by 2 dispatch slots (real opcode #515). This is a duplicate slot of (3,52) IWMemStR4. Other slots: (3,52) IWMemStR4.

Family note: Phase 4: never emitted by VB6 SP6. Contexts tried include class/form/module statics, member UDTs with With, WithEvents, Implements, ActiveX DLL/EXE globals (these compile to FMem*), UserControl, PropertyPage, ActiveX Document, Add-in, DHTML and DataReport projects. Handler base [ebp+10h] (dispatcher arg 3) has no known source construct. IIS WebClass projects are untested.

Slots sharing this handler

(3,0x52) IWMemStR4

Description: draft, by claude-opus-5-5. Handler 0x6610A535, dispatch slot 0x66107A60, modOpcodes line 1266.

IWMemStStr

(3,0x57)not emittedhandler #518Stringcontextual
STORE through a BSTR pointer (VB6 String) at [W-base+offset] -> [eax], one extra dereference (4-byte (pointer), W+indirect).

Handler analysis (idalib, MSVBVM60.dll build 6.00.8268). Reads a 2-byte signed offset from the instruction stream and adds it to the pointer held at the fixed frame slot [ebp+10h]. That slot is set once by the procedure's caller ([ebp+10h] is procedure-invocation argument 3) and is never written by any handler in the ENGINE segment -- it is stable for the lifetime of the procedure.

This is an IWMem (indirect-W) variant: after computing base = [ebp+10h] + offset, the handler performs one extra dereference (mov eax, [eax]) before the final store. The slot at [ebp+10h] + offset is treated as itself a pointer to the actual BSTR pointer (VB6 String).

Stack: [..., v:Str] -> [...] (([([ebp+10h] + offset)]) <- v)

**Distinction from the corresponding Mem* opcode (non-W counterpart):** the regular Mem* family uses the runtime cache at [ebp-4Ch], which is updated by every preceding FLdPr, FLdPrThis, NewIfNullAd, Ary1LdPr, or LdPrVar instruction. The W-family bypasses that cache and uses the stable [ebp+10h] pointer instead -- so the W-base does not require a preceding object-load opcode to be set.

Identity of [ebp+10h] is not yet pinned. Handler analysis establishes the mechanical behavior; the source-language construct that establishes this secondary object pointer (parent scope, procedure descriptor, outer-class pointer, etc.) is not yet verified. PDFStreamDumper's corpus has zero occurrences of this family, suggesting the construct is rare in typical VB6 code. A targeted probe in Phase 4 should resolve which language-level construct emits these opcodes.

When the compiler emits it

Emitted when the compiler accesses a member through a STABLE, caller-supplied object pointer (the secondary slot at [ebp+10h]) rather than through the runtime object-load cache that Mem* uses. The specific source-language construct that establishes the W-base has not yet been pinned by handler analysis alone -- PDFStreamDumper's corpus has zero occurrences of the entire IWMem/WMem family, suggesting the construct is uncommon in typical VB6 code. Candidate emit triggers worth probing in Phase 4: nested-class member access, parent-scope references from inside an event handler, or compiler-synthesized accessors that have access to a known-stable secondary pointer.

Handler analysis

Handler label: label near 0x6610b290 at 0x6610b290 in MSVBVM60.dll (build 6.00.8268).

Canonical 8-instruction body:

movsx eax, word ptr [esi]        ; 2-byte signed offset
add   eax, [ebp+10h]              ; eax = W-base + offset
mov   eax, [eax]                  ; deref -> actual destination ptr
pop   dword ptr [eax]             ; pop value, write to *eax
xor   eax, eax
mov   al,  [esi+2]                ; next opcode byte
add   esi, 3                      ; advance pcode pointer
jmp   [_tblByteDisp + eax*4]      ; dispatch next

Variations across suffixes (FPR4/FPR8/Var/Cy/Str/Darg) replace the central push/pop dword [eax] with the appropriate width-specific helper (fld/fst for FPU types, __vbaCopyBytes/__vbaStrCopy for BSTRs, the 16-byte Variant copy routine for Var, etc.). The base-computation step (add eax, [ebp+10h]) is identical across all 50 distinct handlers analyzed in the IWMem/WMem set.

Encoding, evidence and notes
Encoding

Encoding: FD 57 (lead byte FD selects table 3), then 2 operand byte(s); total instruction length 4 byte(s).
No printf operands are declared, but the instruction still consumes operand bytes; see the size above and the observed bytes below. (Phase 3a: flag=0 does not mean 'no operands'.)

Evidence and notes

Emitted by VB6 SP6 (P-code): not observed in about 3,070 probe programs. The slot exists in the runtime's dispatch table, but no tested source construct makes the compiler emit it.

Handler: 0x6610B290, unique to this slot (real opcode #518).

Family note: Phase 4: never emitted by VB6 SP6. Contexts tried include class/form/module statics, member UDTs with With, WithEvents, Implements, ActiveX DLL/EXE globals (these compile to FMem*), UserControl, PropertyPage, ActiveX Document, Add-in, DHTML and DataReport projects. Handler base [ebp+10h] (dispatcher arg 3) has no known source construct. IIS WebClass projects are untested.

Description: draft, by claude-opus-4.7. Handler 0x6610B290, dispatch slot 0x66107A70, modOpcodes line 1270.

IWMemStStrCopy

(3,0x61)not emittedhandler #528Stringcontextual
STORE through a value of suffix `` at [W-base+offset] -> [eax], one extra dereference (unknown-size, W+indirect).

Handler analysis (idalib, MSVBVM60.dll build 6.00.8268). Reads a 2-byte signed offset from the instruction stream and adds it to the pointer held at the fixed frame slot [ebp+10h]. That slot is set once by the procedure's caller ([ebp+10h] is procedure-invocation argument 3) and is never written by any handler in the ENGINE segment -- it is stable for the lifetime of the procedure.

This is an IWMem (indirect-W) variant: after computing base = [ebp+10h] + offset, the handler performs one extra dereference (mov eax, [eax]) before the final store. The slot at [ebp+10h] + offset is treated as itself a pointer to the actual value of suffix ``.

Stack: [..., v:] -> [...] (([([ebp+10h] + offset)]) <- v)

**Distinction from the corresponding Mem* opcode (non-W counterpart):** the regular Mem* family uses the runtime cache at [ebp-4Ch], which is updated by every preceding FLdPr, FLdPrThis, NewIfNullAd, Ary1LdPr, or LdPrVar instruction. The W-family bypasses that cache and uses the stable [ebp+10h] pointer instead -- so the W-base does not require a preceding object-load opcode to be set.

Identity of [ebp+10h] is not yet pinned. Handler analysis establishes the mechanical behavior; the source-language construct that establishes this secondary object pointer (parent scope, procedure descriptor, outer-class pointer, etc.) is not yet verified. PDFStreamDumper's corpus has zero occurrences of this family, suggesting the construct is rare in typical VB6 code. A targeted probe in Phase 4 should resolve which language-level construct emits these opcodes.

When the compiler emits it

Emitted when the compiler accesses a member through a STABLE, caller-supplied object pointer (the secondary slot at [ebp+10h]) rather than through the runtime object-load cache that Mem* uses. The specific source-language construct that establishes the W-base has not yet been pinned by handler analysis alone -- PDFStreamDumper's corpus has zero occurrences of the entire IWMem/WMem family, suggesting the construct is uncommon in typical VB6 code. Candidate emit triggers worth probing in Phase 4: nested-class member access, parent-scope references from inside an event handler, or compiler-synthesized accessors that have access to a known-stable secondary pointer.

Handler analysis

Handler label: label near 0x6610b2b0 at 0x6610b2b0 in MSVBVM60.dll (build 6.00.8268).

Canonical 8-instruction body:

movsx eax, word ptr [esi]        ; 2-byte signed offset
add   eax, [ebp+10h]              ; eax = W-base + offset
mov   eax, [eax]                  ; deref -> actual destination ptr
pop   dword ptr [eax]             ; pop value, write to *eax
xor   eax, eax
mov   al,  [esi+2]                ; next opcode byte
add   esi, 3                      ; advance pcode pointer
jmp   [_tblByteDisp + eax*4]      ; dispatch next

Variations across suffixes (FPR4/FPR8/Var/Cy/Str/Darg) replace the central push/pop dword [eax] with the appropriate width-specific helper (fld/fst for FPU types, __vbaCopyBytes/__vbaStrCopy for BSTRs, the 16-byte Variant copy routine for Var, etc.). The base-computation step (add eax, [ebp+10h]) is identical across all 50 distinct handlers analyzed in the IWMem/WMem set.

Encoding, evidence and notes
Encoding

Encoding: FD 61 (lead byte FD selects table 3), then 2 operand byte(s); total instruction length 4 byte(s).
No printf operands are declared, but the instruction still consumes operand bytes; see the size above and the observed bytes below. (Phase 3a: flag=0 does not mean 'no operands'.)

Evidence and notes

Emitted by VB6 SP6 (P-code): not observed in about 3,070 probe programs. The slot exists in the runtime's dispatch table, but no tested source construct makes the compiler emit it.

Handler: 0x6610B2B0, unique to this slot (real opcode #528).

Family note: Phase 4: never emitted by VB6 SP6. Contexts tried include class/form/module statics, member UDTs with With, WithEvents, Implements, ActiveX DLL/EXE globals (these compile to FMem*), UserControl, PropertyPage, ActiveX Document, Add-in, DHTML and DataReport projects. Handler base [ebp+10h] (dispatcher arg 3) has no known source construct. IIS WebClass projects are untested.

Description: draft, by claude-opus-4.7. Handler 0x6610B2B0, dispatch slot 0x66107A98, modOpcodes line 1280.

IWMemStUI1

(3,0x50)not emittedhandler #513Integercontextual
STORE through a 8-bit unsigned (VB6 Byte) at [W-base+offset] -> [eax], one extra dereference (1-byte, W+indirect).

Handler analysis (idalib, MSVBVM60.dll build 6.00.8268). Reads a 2-byte signed offset from the instruction stream and adds it to the pointer held at the fixed frame slot [ebp+10h]. That slot is set once by the procedure's caller ([ebp+10h] is procedure-invocation argument 3) and is never written by any handler in the ENGINE segment -- it is stable for the lifetime of the procedure.

This is an IWMem (indirect-W) variant: after computing base = [ebp+10h] + offset, the handler performs one extra dereference (mov eax, [eax]) before the final store. The slot at [ebp+10h] + offset is treated as itself a pointer to the actual 8-bit unsigned (VB6 Byte).

Stack: [..., v:UI1] -> [...] (([([ebp+10h] + offset)]) <- v)

**Distinction from the corresponding Mem* opcode (non-W counterpart):** the regular Mem* family uses the runtime cache at [ebp-4Ch], which is updated by every preceding FLdPr, FLdPrThis, NewIfNullAd, Ary1LdPr, or LdPrVar instruction. The W-family bypasses that cache and uses the stable [ebp+10h] pointer instead -- so the W-base does not require a preceding object-load opcode to be set.

Identity of [ebp+10h] is not yet pinned. Handler analysis establishes the mechanical behavior; the source-language construct that establishes this secondary object pointer (parent scope, procedure descriptor, outer-class pointer, etc.) is not yet verified. PDFStreamDumper's corpus has zero occurrences of this family, suggesting the construct is rare in typical VB6 code. A targeted probe in Phase 4 should resolve which language-level construct emits these opcodes.

When the compiler emits it

Emitted when the compiler accesses a member through a STABLE, caller-supplied object pointer (the secondary slot at [ebp+10h]) rather than through the runtime object-load cache that Mem* uses. The specific source-language construct that establishes the W-base has not yet been pinned by handler analysis alone -- PDFStreamDumper's corpus has zero occurrences of the entire IWMem/WMem family, suggesting the construct is uncommon in typical VB6 code. Candidate emit triggers worth probing in Phase 4: nested-class member access, parent-scope references from inside an event handler, or compiler-synthesized accessors that have access to a known-stable secondary pointer.

Handler analysis

Handler label: label near 0x6610a500 at 0x6610a500 in MSVBVM60.dll (build 6.00.8268).

Canonical 8-instruction body:

movsx eax, word ptr [esi]        ; 2-byte signed offset
add   eax, [ebp+10h]              ; eax = W-base + offset
mov   eax, [eax]                  ; deref -> actual destination ptr
pop   dword ptr [eax]             ; pop value, write to *eax
xor   eax, eax
mov   al,  [esi+2]                ; next opcode byte
add   esi, 3                      ; advance pcode pointer
jmp   [_tblByteDisp + eax*4]      ; dispatch next

Variations across suffixes (FPR4/FPR8/Var/Cy/Str/Darg) replace the central push/pop dword [eax] with the appropriate width-specific helper (fld/fst for FPU types, __vbaCopyBytes/__vbaStrCopy for BSTRs, the 16-byte Variant copy routine for Var, etc.). The base-computation step (add eax, [ebp+10h]) is identical across all 50 distinct handlers analyzed in the IWMem/WMem set.

Encoding, evidence and notes
Encoding

Encoding: FD 50 (lead byte FD selects table 3), then 2 operand byte(s); total instruction length 4 byte(s).
No printf operands are declared, but the instruction still consumes operand bytes; see the size above and the observed bytes below. (Phase 3a: flag=0 does not mean 'no operands'.)

Evidence and notes

Emitted by VB6 SP6 (P-code): not observed in about 3,070 probe programs. The slot exists in the runtime's dispatch table, but no tested source construct makes the compiler emit it.

Handler: 0x6610A500, unique to this slot (real opcode #513).

Family note: Phase 4: never emitted by VB6 SP6. Contexts tried include class/form/module statics, member UDTs with With, WithEvents, Implements, ActiveX DLL/EXE globals (these compile to FMem*), UserControl, PropertyPage, ActiveX Document, Add-in, DHTML and DataReport projects. Handler base [ebp+10h] (dispatcher arg 3) has no known source construct. IIS WebClass projects are untested.

Description: draft, by claude-opus-4.7. Handler 0x6610A500, dispatch slot 0x66107A54, modOpcodes line 1263.

I_IndirectLoad

Load through pointer at stack top Prefix: I = indirect (top-of-stack is address)

ILdDarg

(3,0x1D)not emittedhandler #479Variantinferred_corpus8 corpus hits
Pop an address; push the value of suffix `` read from it.

Pops an address from the stack and pushes the value of the suffix-indicated type that lives at *addr.

Stack: [..., addr:Ad] -> [..., (*addr):]

Used to read through a pointer (ByRef in-arg, dereferenced pointer field).

When the compiler emits it

Emitted when reading a through a runtime address.

Encoding, evidence and notes
Encoding

Encoding: FD 1D (lead byte FD selects table 3), then 2 operand byte(s); total instruction length 4 byte(s).
vbdec template: %a
Operands:

  1. %a: local_var_ref, 2 byte(s). signed 16-bit offset from the procedure frame pointer (EBP). Negative = local/temporary (vbdec var_XX, XX = -offset), positive = argument (arg_XX).

Observed: FD1D 0C00 ILdDarg arg_C

Examples
CScriptFunctions.GetPageNumWords @ 0x442608 | 442611    FD1D 0C00             ILdDarg arg_C
CScriptFunctions.GetPageNthWord @ 0x44018C | 440197    FD1D 0C00             ILdDarg arg_C
CScriptFunctions.GetPageNthWord @ 0x44018C | 44019B    FD1D 1000             ILdDarg arg_10

8 occurrence(s) in PDFStreamDumper.

Evidence and notes

Emitted by VB6 SP6 (P-code): not observed in about 3,070 probe programs. The slot exists in the runtime's dispatch table, but no tested source construct makes the compiler emit it.

Handler: 0x6610B1D8, unique to this slot (real opcode #479).

Corpus: 8 occurrence(s) in PDFStreamDumper_p.exe.

Description: draft, by claude-opus-4.7. Handler 0x6610B1D8, dispatch slot 0x66107988, modOpcodes line 1175.

ILdFPR4

(0,0x82)emittedprimary of 2handler #127Floating pointinferred_corpus1 corpus hits
Pop an address; push the Single on the x87 FPU stack read from it.

Pops an address from the stack and pushes the value of the suffix-indicated type that lives at *addr.

Stack: [..., addr:Ad] -> [..., (*addr):FPR4]

Used to read through a pointer (ByRef in-arg, dereferenced pointer field).

When the compiler emits it

Emitted when reading a FPR4 through a runtime address.

VB6 source (verified: compiles to this slot)
Public Sub Main()
  Dim a As Single
End Sub

Sub P(x As Single)
  Dim b As Single
  b = x
  x = b
End Sub
Encoding, evidence and notes
Encoding

Encoding: 82, then 2 operand byte(s); total instruction length 3 byte(s).
vbdec template: %a
Operands:

  1. %a: local_var_ref, 2 byte(s). signed 16-bit offset from the procedure frame pointer (EBP). Negative = local/temporary (vbdec var_XX, XX = -offset), positive = argument (arg_XX).

Observed: 82 0C00 ILdFPR4 arg_C

Examples
Form2.splitter_MouseMove (Button As Integer, Shift As Integer, X As Single, Y As Single) @ 0x4458E0 | 445946    82 1800               ILdFPR4 arg_18

1 occurrence(s) in PDFStreamDumper.

Evidence and notes

Emitted by VB6 SP6 (P-code): yes. Minimal probe: probes\op\0_82_ILdFPR4.

Handler: 0x66105A43, shared by 2 dispatch slots (real opcode #127). This is the primary slot. Other slots: (3,19) ILdFPR4.

Corpus: 1 occurrence(s) in PDFStreamDumper_p.exe.

Slots sharing this handler

(3,0x19) ILdFPR4

Description: draft, by claude-opus-4.7. Handler 0x66105A43, dispatch slot 0x66106F1C, modOpcodes line 1169.

ILdFPR4

(3,0x19)not emitteddup of (0,82)handler #127Floating pointconfirmed_handler
Same handler as (0,0x82) ILdFPR4: Pop an address; push the Single on the x87 FPU stack read from it.
Encoding, evidence and notes
Encoding

Encoding: FD 19 (lead byte FD selects table 3), then 2 operand byte(s); total instruction length 4 byte(s).
No printf operands are declared, but the instruction still consumes operand bytes; see the size above and the observed bytes below. (Phase 3a: flag=0 does not mean 'no operands'.)

Evidence and notes

Emitted by VB6 SP6 (P-code): not observed in about 3,070 probe programs. The slot exists in the runtime's dispatch table, but no tested source construct makes the compiler emit it.

Handler: 0x66105A43, shared by 2 dispatch slots (real opcode #127). This is a duplicate slot of (0,82) ILdFPR4. Other slots: (0,82) ILdFPR4.

Slots sharing this handler

(0,0x82) ILdFPR4

Description: none. Handler 0x66105A43, dispatch slot 0x66107978, modOpcodes line 1170.

ILdFPR8

(0,0x83)emittedprimary of 2handler #128Floating pointinferred_corpus
Load Double/Date from the variable a ByRef argument (or other frame-held pointer) points to.

Reads a Double or Date, moved through the FPU (fld/fstp qword), and pushes it from the variable a ByRef argument (or other frame-held pointer) points to.

Stack: [...] -> [..., v:FPR8]

Operands: %a: frame slot holding the pointer (usually a ByRef argument, arg_XX).

Access to ByRef parameters: the frame slot holds the caller's address, and the value is read or written through it.

When the compiler emits it

Emitted for reads of the variable a ByRef argument (or other frame-held pointer) points to when the value is a Double/Date. The storage class selects the prefix (I); the value class selects the suffix (FPR8).

VB6 source (verified: compiles to this slot)
Public Sub Main()
  Dim a As Date
End Sub

Sub P(x As Date)
  Dim b As Date
  b = x
  x = b
End Sub
Encoding, evidence and notes
Encoding

Encoding: 83, then 2 operand byte(s); total instruction length 3 byte(s).
vbdec template: %a
Operands:

  1. %a: local_var_ref, 2 byte(s). signed 16-bit offset from the procedure frame pointer (EBP). Negative = local/temporary (vbdec var_XX, XX = -offset), positive = argument (arg_XX).

Observed: 83 0C00 ILdFPR8 arg_C

Examples
83 0C00  ILdFPR8 arg_C

From the Phase 4 probe (VB6 SP6, P-code).

Evidence and notes

Emitted by VB6 SP6 (P-code): yes. Minimal probe: probes\op\0_83_ILdFPR8.

Handler: 0x6610A3A3, shared by 2 dispatch slots (real opcode #128). This is the primary slot. Other slots: (3,1A) ILdFPR8.

Check of vb6_source_eq example: verified: compiles and emits this slot.

Example from the description
Public Sub Main()
  Dim a As Date
End Sub

Sub P(x As Date)
  Dim b As Date
  b = x
  x = b
End Sub
Slots sharing this handler

(3,0x1A) ILdFPR8

Description: draft, by claude-opus-5-5. Handler 0x6610A3A3, dispatch slot 0x66106F20, modOpcodes line 1171.

ILdFPR8

(3,0x1A)not emitteddup of (0,83)handler #128Floating pointconfirmed_handler
Same handler as (0,0x83) ILdFPR8: Load Double/Date from the variable a ByRef argument (or other frame-held pointer) points to.
Encoding, evidence and notes
Encoding

Encoding: FD 1A (lead byte FD selects table 3), then 2 operand byte(s); total instruction length 4 byte(s).
vbdec template: %a
Operands:

  1. %a: local_var_ref, 2 byte(s). signed 16-bit offset from the procedure frame pointer (EBP). Negative = local/temporary (vbdec var_XX, XX = -offset), positive = argument (arg_XX).
Evidence and notes

Emitted by VB6 SP6 (P-code): not observed in about 3,070 probe programs. The slot exists in the runtime's dispatch table, but no tested source construct makes the compiler emit it.

Handler: 0x6610A3A3, shared by 2 dispatch slots (real opcode #128). This is a duplicate slot of (0,83) ILdFPR8. Other slots: (0,83) ILdFPR8.

Slots sharing this handler

(0,0x83) ILdFPR8

Description: none. Handler 0x6610A3A3, dispatch slot 0x6610797C, modOpcodes line 1172.

ILdI2

(0,0x7F)emittedprimary of 2handler #124Integerinferred_corpus102 corpus hits
Pop an address; push the 16-bit signed integer (VB6 Integer) read from it.

Pops an address from the stack and pushes the value of the suffix-indicated type that lives at *addr.

Stack: [..., addr:Ad] -> [..., (*addr):I2]

Used to read through a pointer (ByRef in-arg, dereferenced pointer field).

When the compiler emits it

Emitted when reading a I2 through a runtime address.

VB6 source (verified: compiles to this slot)
Public Sub Main()
  Dim a As Boolean
End Sub

Sub P(x As Boolean)
  Dim b As Boolean
  b = x
  x = b
End Sub
Encoding, evidence and notes
Encoding

Encoding: 7F, then 2 operand byte(s); total instruction length 3 byte(s).
vbdec template: [%a]
Operands:

  1. %a: local_var_ref, 2 byte(s). signed 16-bit offset from the procedure frame pointer (EBP). Negative = local/temporary (vbdec var_XX, XX = -offset), positive = argument (arg_XX).

Observed: 7F 0C00 ILdI2 [arg_C]

Examples
Form1.RegisterPlugin @ 0x44CB20 | 44CBCD    7F 1400               ILdI2 [arg_14]
Form1.lvSearch_MouseUp(ByVal Button As Integer, ByVal Shift As Integer, ByVal x As Long, ByVal y As Long) @ 0x43F1A8 | 43F1A8    7F 0C00               ILdI2 [arg_C]
Form1.mnuHelp_Event_0 @ 0x45A2C0 | 45A2CF    7F 0C00               ILdI2 [arg_C]

102 occurrence(s) in PDFStreamDumper.

Evidence and notes

Emitted by VB6 SP6 (P-code): yes. Minimal probe: probes\op\0_7F_ILdI2.

Handler: 0x66105A11, shared by 2 dispatch slots (real opcode #124). This is the primary slot. Other slots: (3,11) ILdI2.

Corpus: 102 occurrence(s) in PDFStreamDumper_p.exe.

Slots sharing this handler

(3,0x11) ILdI2

Description: draft, by claude-opus-4.7. Handler 0x66105A11, dispatch slot 0x66106F10, modOpcodes line 1157.

ILdI2

(3,0x11)not emitteddup of (0,7F)handler #124Integerconfirmed_handler
Same handler as (0,0x7F) ILdI2: Pop an address; push the 16-bit signed integer (VB6 Integer) read from it.
Encoding, evidence and notes
Encoding

Encoding: FD 11 (lead byte FD selects table 3), then 2 operand byte(s); total instruction length 4 byte(s).
vbdec template: [%a]
Operands:

  1. %a: local_var_ref, 2 byte(s). signed 16-bit offset from the procedure frame pointer (EBP). Negative = local/temporary (vbdec var_XX, XX = -offset), positive = argument (arg_XX).
Evidence and notes

Emitted by VB6 SP6 (P-code): not observed in about 3,070 probe programs. The slot exists in the runtime's dispatch table, but no tested source construct makes the compiler emit it.

Handler: 0x66105A11, shared by 2 dispatch slots (real opcode #124). This is a duplicate slot of (0,7F) ILdI2. Other slots: (0,7F) ILdI2.

Slots sharing this handler

(0,0x7F) ILdI2

Description: none. Handler 0x66105A11, dispatch slot 0x66107958, modOpcodes line 1158.

ILdI4

(0,0x80)emittedprimary of 5handler #125Integerinferred_corpus262 corpus hits
Pop an address; push the 32-bit signed integer (VB6 Long) read from it.

Pops an address from the stack and pushes the value of the suffix-indicated type that lives at *addr.

Stack: [..., addr:Ad] -> [..., (*addr):I4]

Used to read through a pointer (ByRef in-arg, dereferenced pointer field).

When the compiler emits it

Emitted when reading a I4 through a runtime address.

VB6 source (verified: compiles to this slot)
Public Sub Main()
  Dim c As Collection
End Sub

Sub P(x As Collection)
  Set x = New Collection
  Dim y As Collection
  Set y = x
End Sub
Encoding, evidence and notes
Encoding

Encoding: 80, then 2 operand byte(s); total instruction length 3 byte(s).
vbdec template: [%a]
Operands:

  1. %a: local_var_ref, 2 byte(s). signed 16-bit offset from the procedure frame pointer (EBP). Negative = local/temporary (vbdec var_XX, XX = -offset), positive = argument (arg_XX).

Observed: 80 0C00 ILdI4 [arg_C]

Examples
Form1.RegisterPlugin @ 0x44CB20 | 44CB6A    80 1000               ILdI4 [arg_10]
Form1.parser_NewStream @ 0x472690 | 472A0E    80 0C00               ILdI4 [arg_C]
Form1.ExtractTo @ 0x45FE38 | 45FF31    80 0C00               ILdI4 [arg_C]

262 occurrence(s) in PDFStreamDumper.

Evidence and notes

Emitted by VB6 SP6 (P-code): yes. Minimal probe: probes\op\0_80_ILdI4.

Handler: 0x66105A2B, shared by 5 dispatch slots (real opcode #125). This is the primary slot. Other slots: (3,12) ILdI4, (3,13) ILdI4, (3,17) ILdI4, (3,18) ILdI4.

Corpus: 262 occurrence(s) in PDFStreamDumper_p.exe.

Slots sharing this handler

(3,0x12) ILdI4, (3,0x13) ILdI4, (3,0x17) ILdI4, (3,0x18) ILdI4

Description: draft, by claude-opus-4.7. Handler 0x66105A2B, dispatch slot 0x66106F14, modOpcodes line 1159.

ILdI4

(3,0x12)not emitteddup of (0,80)handler #125Integerconfirmed_handler
Same handler as (0,0x80) ILdI4: Pop an address; push the 32-bit signed integer (VB6 Long) read from it.
Encoding, evidence and notes
Encoding

Encoding: FD 12 (lead byte FD selects table 3), then 2 operand byte(s); total instruction length 4 byte(s).
vbdec template: [%a]
Operands:

  1. %a: local_var_ref, 2 byte(s). signed 16-bit offset from the procedure frame pointer (EBP). Negative = local/temporary (vbdec var_XX, XX = -offset), positive = argument (arg_XX).
Evidence and notes

Emitted by VB6 SP6 (P-code): not observed in about 3,070 probe programs. The slot exists in the runtime's dispatch table, but no tested source construct makes the compiler emit it.

Handler: 0x66105A2B, shared by 5 dispatch slots (real opcode #125). This is a duplicate slot of (0,80) ILdI4. Other slots: (0,80) ILdI4, (3,13) ILdI4, (3,17) ILdI4, (3,18) ILdI4.

Slots sharing this handler

(0,0x80) ILdI4, (3,0x13) ILdI4, (3,0x17) ILdI4, (3,0x18) ILdI4

Description: none. Handler 0x66105A2B, dispatch slot 0x6610795C, modOpcodes line 1161.

ILdI4

(3,0x13)not emitteddup of (0,80)handler #125Integerconfirmed_handler
Same handler as (0,0x80) ILdI4: Pop an address; push the 32-bit signed integer (VB6 Long) read from it.
Encoding, evidence and notes
Encoding

Encoding: FD 13 (lead byte FD selects table 3), then 2 operand byte(s); total instruction length 4 byte(s).
vbdec template: [%a]
Operands:

  1. %a: local_var_ref, 2 byte(s). signed 16-bit offset from the procedure frame pointer (EBP). Negative = local/temporary (vbdec var_XX, XX = -offset), positive = argument (arg_XX).
Evidence and notes

Emitted by VB6 SP6 (P-code): not observed in about 3,070 probe programs. The slot exists in the runtime's dispatch table, but no tested source construct makes the compiler emit it.

Handler: 0x66105A2B, shared by 5 dispatch slots (real opcode #125). This is a duplicate slot of (0,80) ILdI4. Other slots: (0,80) ILdI4, (3,12) ILdI4, (3,17) ILdI4, (3,18) ILdI4.

Slots sharing this handler

(0,0x80) ILdI4, (3,0x12) ILdI4, (3,0x17) ILdI4, (3,0x18) ILdI4

Description: none. Handler 0x66105A2B, dispatch slot 0x66107960, modOpcodes line 1162.

ILdI4

(3,0x17)not emitteddup of (0,80)handler #125Integerconfirmed_handler
Same handler as (0,0x80) ILdI4: Pop an address; push the 32-bit signed integer (VB6 Long) read from it.
Encoding, evidence and notes
Encoding

Encoding: FD 17 (lead byte FD selects table 3), then 2 operand byte(s); total instruction length 4 byte(s).
vbdec template: [%a]
Operands:

  1. %a: local_var_ref, 2 byte(s). signed 16-bit offset from the procedure frame pointer (EBP). Negative = local/temporary (vbdec var_XX, XX = -offset), positive = argument (arg_XX).
Evidence and notes

Emitted by VB6 SP6 (P-code): not observed in about 3,070 probe programs. The slot exists in the runtime's dispatch table, but no tested source construct makes the compiler emit it.

Handler: 0x66105A2B, shared by 5 dispatch slots (real opcode #125). This is a duplicate slot of (0,80) ILdI4. Other slots: (0,80) ILdI4, (3,12) ILdI4, (3,13) ILdI4, (3,18) ILdI4.

Slots sharing this handler

(0,0x80) ILdI4, (3,0x12) ILdI4, (3,0x13) ILdI4, (3,0x18) ILdI4

Description: none. Handler 0x66105A2B, dispatch slot 0x66107970, modOpcodes line 1163.

ILdI4

(3,0x18)not emitteddup of (0,80)handler #125Integerconfirmed_handler
Same handler as (0,0x80) ILdI4: Pop an address; push the 32-bit signed integer (VB6 Long) read from it.
Encoding, evidence and notes
Encoding

Encoding: FD 18 (lead byte FD selects table 3), then 2 operand byte(s); total instruction length 4 byte(s).
vbdec template: [%a]
Operands:

  1. %a: local_var_ref, 2 byte(s). signed 16-bit offset from the procedure frame pointer (EBP). Negative = local/temporary (vbdec var_XX, XX = -offset), positive = argument (arg_XX).
Evidence and notes

Emitted by VB6 SP6 (P-code): not observed in about 3,070 probe programs. The slot exists in the runtime's dispatch table, but no tested source construct makes the compiler emit it.

Handler: 0x66105A2B, shared by 5 dispatch slots (real opcode #125). This is a duplicate slot of (0,80) ILdI4. Other slots: (0,80) ILdI4, (3,12) ILdI4, (3,13) ILdI4, (3,17) ILdI4.

Slots sharing this handler

(0,0x80) ILdI4, (3,0x12) ILdI4, (3,0x13) ILdI4, (3,0x17) ILdI4

Description: none. Handler 0x66105A2B, dispatch slot 0x66107974, modOpcodes line 1164.

ILdPr

(0,0x48)emittedprimary of 2handler #71Object / COMinferred_corpus73 corpus hits
Pop an address; push the object pointer read from it.

Pops an address from the stack and pushes the value of the suffix-indicated type that lives at *addr.

Stack: [..., addr:Ad] -> [..., (*addr):Pr]

Used to read through a pointer (ByRef in-arg, dereferenced pointer field).

When the compiler emits it

Emitted when reading a Pr through a runtime address.

VB6 source (verified: compiles to this slot)
Public Sub Main()
  Dim c As New Collection
End Sub

Sub P(c As Collection)
  Dim n As Long
  n = c.Count
End Sub
Encoding, evidence and notes
Encoding

Encoding: 48, then 2 operand byte(s); total instruction length 3 byte(s).
vbdec template: %a
Operands:

  1. %a: local_var_ref, 2 byte(s). signed 16-bit offset from the procedure frame pointer (EBP). Negative = local/temporary (vbdec var_XX, XX = -offset), positive = argument (arg_XX).

Observed: 48 0C00 ILdPr arg_C

Examples
Form1.parser_NewStream @ 0x472690 | 4726AA    48 0C00               ILdPr arg_C
Form1.parser_NewStream @ 0x472690 | 4726BC    48 0C00               ILdPr arg_C
Form1.parser_NewStream @ 0x472690 | 4726D1    48 0C00               ILdPr arg_C

73 occurrence(s) in PDFStreamDumper.

Evidence and notes

Emitted by VB6 SP6 (P-code): yes. Minimal probe: probes\op\0_48_ILdPr.

Handler: 0x661062F3, shared by 2 dispatch slots (real opcode #71). This is the primary slot. Other slots: (3,1B) ILdPr.

Finding: Probe: method call on a ByRef object parameter (Sub P(c As Collection): n = c.Count). ByVal object parameters are copied to a local first and use FLdPr instead. Also seen for runtime-supplied event arguments (UserDocument_AsyncReadComplete(AsyncProp As AsyncProperty)).

Corpus: 73 occurrence(s) in PDFStreamDumper_p.exe.

Slots sharing this handler

(3,0x1B) ILdPr

Description: draft, by claude-opus-4.7. Handler 0x661062F3, dispatch slot 0x66106E34, modOpcodes line 1173.

ILdPr

(3,0x1B)not emitteddup of (0,48)handler #71Object / COMconfirmed_handler
Same handler as (0,0x48) ILdPr: Pop an address; push the object pointer read from it.
Encoding, evidence and notes
Encoding

Encoding: FD 1B (lead byte FD selects table 3), then 2 operand byte(s); total instruction length 4 byte(s).
vbdec template: %a
Operands:

  1. %a: local_var_ref, 2 byte(s). signed 16-bit offset from the procedure frame pointer (EBP). Negative = local/temporary (vbdec var_XX, XX = -offset), positive = argument (arg_XX).
Evidence and notes

Emitted by VB6 SP6 (P-code): not observed in about 3,070 probe programs. The slot exists in the runtime's dispatch table, but no tested source construct makes the compiler emit it.

Handler: 0x661062F3, shared by 2 dispatch slots (real opcode #71). This is a duplicate slot of (0,48) ILdPr. Other slots: (0,48) ILdPr.

Slots sharing this handler

(0,0x48) ILdPr

Description: none. Handler 0x661062F3, dispatch slot 0x66107980, modOpcodes line 1174.

ILdR8

(0,0x81)emittedprimary of 3handler #126Currencyinferred_corpus
Load 8-byte value from the variable a ByRef argument (or other frame-held pointer) points to.

Reads a raw 64-bit value (in practice a Currency; Double/Date use the FPR8 forms), and pushes it from the variable a ByRef argument (or other frame-held pointer) points to.

Stack: [...] -> [..., v:R8]

Operands: %a: frame slot holding the pointer (usually a ByRef argument, arg_XX).

Access to ByRef parameters: the frame slot holds the caller's address, and the value is read or written through it.

The R8 suffix denotes a raw 8-byte move, not a floating-point type. Phase 4 probes show it used for Currency values. Single/Double values use the FPR4/FPR8 forms.

When the compiler emits it

Emitted for reads of the variable a ByRef argument (or other frame-held pointer) points to when the value is a 8-byte value. The storage class selects the prefix (I); the value class selects the suffix (R8).

VB6 source (verified: compiles to this slot)
Public Sub Main()
  Dim a As Currency
End Sub

Sub P(x As Currency)
  Dim b As Currency
  b = x
  x = b
End Sub
Encoding, evidence and notes
Encoding

Encoding: 81, then 2 operand byte(s); total instruction length 3 byte(s).
vbdec template: %a
Operands:

  1. %a: local_var_ref, 2 byte(s). signed 16-bit offset from the procedure frame pointer (EBP). Negative = local/temporary (vbdec var_XX, XX = -offset), positive = argument (arg_XX).

Observed: 81 0C00 ILdR8 arg_C

Examples
81 0C00  ILdR8 arg_C

From the Phase 4 probe (VB6 SP6, P-code).

Evidence and notes

Emitted by VB6 SP6 (P-code): yes. Minimal probe: probes\op\0_81_ILdR8.

Handler: 0x6610A388, shared by 3 dispatch slots (real opcode #126). This is the primary slot. Other slots: (3,14) ILdR8, (3,15) ILdR8.

Check of vb6_source_eq example: verified: compiles and emits this slot.

Example from the description
Public Sub Main()
  Dim a As Currency
End Sub

Sub P(x As Currency)
  Dim b As Currency
  b = x
  x = b
End Sub
Slots sharing this handler

(3,0x14) ILdR8, (3,0x15) ILdR8

Description: draft, by claude-opus-5-5. Handler 0x6610A388, dispatch slot 0x66106F18, modOpcodes line 1165.

ILdR8

(3,0x14)not emitteddup of (0,81)handler #126Currencyconfirmed_handler
Same handler as (0,0x81) ILdR8: Load 8-byte value from the variable a ByRef argument (or other frame-held pointer) points to.
Encoding, evidence and notes
Encoding

Encoding: FD 14 (lead byte FD selects table 3), then 2 operand byte(s); total instruction length 4 byte(s).
vbdec template: %a
Operands:

  1. %a: local_var_ref, 2 byte(s). signed 16-bit offset from the procedure frame pointer (EBP). Negative = local/temporary (vbdec var_XX, XX = -offset), positive = argument (arg_XX).
Evidence and notes

Emitted by VB6 SP6 (P-code): not observed in about 3,070 probe programs. The slot exists in the runtime's dispatch table, but no tested source construct makes the compiler emit it.

Handler: 0x6610A388, shared by 3 dispatch slots (real opcode #126). This is a duplicate slot of (0,81) ILdR8. Other slots: (0,81) ILdR8, (3,15) ILdR8.

Slots sharing this handler

(0,0x81) ILdR8, (3,0x15) ILdR8

Description: none. Handler 0x6610A388, dispatch slot 0x66107964, modOpcodes line 1166.

ILdR8

(3,0x15)not emitteddup of (0,81)handler #126Currencyconfirmed_handler
Same handler as (0,0x81) ILdR8: Load 8-byte value from the variable a ByRef argument (or other frame-held pointer) points to.
Encoding, evidence and notes
Encoding

Encoding: FD 15 (lead byte FD selects table 3), then 2 operand byte(s); total instruction length 4 byte(s).
vbdec template: %a
Operands:

  1. %a: local_var_ref, 2 byte(s). signed 16-bit offset from the procedure frame pointer (EBP). Negative = local/temporary (vbdec var_XX, XX = -offset), positive = argument (arg_XX).
Evidence and notes

Emitted by VB6 SP6 (P-code): not observed in about 3,070 probe programs. The slot exists in the runtime's dispatch table, but no tested source construct makes the compiler emit it.

Handler: 0x6610A388, shared by 3 dispatch slots (real opcode #126). This is a duplicate slot of (0,81) ILdR8. Other slots: (0,81) ILdR8, (3,14) ILdR8.

Slots sharing this handler

(0,0x81) ILdR8, (3,0x14) ILdR8

Description: none. Handler 0x6610A388, dispatch slot 0x66107968, modOpcodes line 1167.

ILdRf

(0,0x6C)emittedprimary of 6handler #105Stack & frameinferred_corpus2675 corpus hits
Re-load the pointer held in a ByRef frame slot [ebp+%a]; push it as a typed reference.

Loads the pointer value held in a frame slot -- typically a ByRef-parameter slot whose payload is the caller-supplied address of the actual variable -- and pushes that pointer onto the stack as a typed reference, ready to be passed onward to another ByRef receiver or further dereferenced.

Stack: [...] -> [..., (*[ebp+%a]):Rf]

The I prefix marks indirection: the frame slot does not hold the value, it holds an address. Mirror of IStRf. Companion ILd{I2,I4,UI1,...} siblings perform the same indirection but immediately dereference to fetch the typed value. Without ILdRf a ByRef-to-ByRef pass-through would require an extra frame-load + dereference sequence.

When the compiler emits it

Emitted when re-passing a ByRef parameter as a ByRef argument to another procedure (Sub A(ByRef x) -> Sub B(ByRef y) chain). Outside ByRef chains the typical loaders are FLdRf (address-of frame slot) and the per-type FLd{T} value loads.

VB6 source (verified: compiles to this slot)
Public Sub Main()
  Dim a As Long, c As Long
  c = CLng(a)
End Sub
Encoding, evidence and notes
Encoding

Encoding: 6C, then 2 operand byte(s); total instruction length 3 byte(s).
vbdec template: [%a]
Operands:

  1. %a: local_var_ref, 2 byte(s). signed 16-bit offset from the procedure frame pointer (EBP). Negative = local/temporary (vbdec var_XX, XX = -offset), positive = argument (arg_XX).

Observed: 6C 78FF ILdRf [var_88]

Examples
Form1.LoadPlugins @ 0x4644FC | 46451E    6C 64FF               ILdRf [var_9C]
Form1.LoadPlugins @ 0x4644FC | 4645B9    6C 64FF               ILdRf [var_9C]
Form1.LoadPlugins @ 0x4644FC | 46461B    6C 78FF               ILdRf [var_88]

2675 occurrence(s) in PDFStreamDumper.

Evidence and notes

Emitted by VB6 SP6 (P-code): yes. Minimal probe: probes\op\0_6C_ILdRf.

Handler: 0x66105620, shared by 6 dispatch slots (real opcode #105). This is the primary slot. Other slots: (2,E2) FLdR4, (2,E3) FLdR4, (2,E7) FLdR4, (2,E8) FLdR4, (3,1C) FLdR4.

Check of vb6_source_eq example: verified: compiles and emits this slot.

Corpus: 2675 occurrence(s) in PDFStreamDumper_p.exe.

Example from the description
Sub Inner(ByRef x As Variant)
    x = 42
End Sub

Sub Outer(ByRef y As Variant)
    Inner y   ' y's incoming pointer pushed via ILdRf
End Sub
Slots sharing this handler

(2,0xE2) FLdR4, (2,0xE3) FLdR4, (2,0xE7) FLdR4, (2,0xE8) FLdR4, (3,0x1C) FLdR4

Description: draft, by claude-opus-4.7. Handler 0x66105620, dispatch slot 0x66106EC4, modOpcodes line 1168.

ILdRfDarg

(3,0x16)emittedhandler #478Variantinferred_corpus199 corpus hits
Pop an address; push the value of suffix `` read from it.

Pops an address from the stack and pushes the value of the suffix-indicated type that lives at *addr.

Stack: [..., addr:Ad] -> [..., (*addr):]

Used to read through a pointer (ByRef in-arg, dereferenced pointer field).

When the compiler emits it

Emitted when reading a through a runtime address.

VB6 source (verified: compiles to this slot)
Public Sub Main()
  Dim a As Variant
End Sub

Sub P(x As Variant)
  Dim b As Variant
  b = x
  x = b
End Sub
Encoding, evidence and notes
Encoding

Encoding: FD 16 (lead byte FD selects table 3), then 4 operand byte(s); total instruction length 6 byte(s).
vbdec template: %r %a
Operands:

  1. %r: vt_type_byte, 1 byte(s). 8-bit VARTYPE code (VT_*).
  2. %a: local_var_ref, 2 byte(s). signed 16-bit offset from the procedure frame pointer (EBP). Negative = local/temporary (vbdec var_XX, XX = -offset), positive = argument (arg_XX).

Observed: FD16 0C005CFF ILdRfDarg 0xC (Variant) var_A4

Examples
Form1.DoEventsFor @ 0x44256C | 44257C    FD16 0C0058FF         ILdRfDarg  0xC (Variant) var_A8
Form1.SleepFor @ 0x43E7AC | 43E7B7    FD16 0C005CFF         ILdRfDarg  0xC (Variant) var_A4
Form1.looksEscaped @ 0x449B64 | 449B7B    FD16 0C005CFF         ILdRfDarg  0xC (Variant) var_A4

199 occurrence(s) in PDFStreamDumper.

Evidence and notes

Emitted by VB6 SP6 (P-code): yes. Minimal probe: probes\op\3_16_ILdRfDarg.

Handler: 0x6610626E, unique to this slot (real opcode #478).

Corpus: 199 occurrence(s) in PDFStreamDumper_p.exe.

Description: draft, by claude-opus-4.7. Handler 0x6610626E, dispatch slot 0x6610796C, modOpcodes line 1176.

ILdUI1

(3,0x10)emittedhandler #477Integerinferred_corpus2 corpus hits
Pop an address; push the 8-bit unsigned integer (VB6 Byte) read from it.

Pops an address from the stack and pushes the value of the suffix-indicated type that lives at *addr.

Stack: [..., addr:Ad] -> [..., (*addr):UI1]

Used to read through a pointer (ByRef in-arg, dereferenced pointer field).

When the compiler emits it

Emitted when reading a UI1 through a runtime address.

VB6 source (verified: compiles to this slot)
Public Sub Main()
  Dim a As Byte
End Sub

Sub P(x As Byte)
  Dim b As Byte
  b = x
  x = b
End Sub
Encoding, evidence and notes
Encoding

Encoding: FD 10 (lead byte FD selects table 3), then 2 operand byte(s); total instruction length 4 byte(s).
vbdec template: [%a]
Operands:

  1. %a: local_var_ref, 2 byte(s). signed 16-bit offset from the procedure frame pointer (EBP). Negative = local/temporary (vbdec var_XX, XX = -offset), positive = argument (arg_XX).

Observed: FD10 0C00 ILdUI1 [arg_C]

Examples
modEscapes.Proc_441F80 @ 0x441F80 | 441FAC    FD10 1000             ILdUI1 [arg_10]
modEscapes.Proc_441F80 @ 0x441F80 | 441FD4    FD10 1000             ILdUI1 [arg_10]

2 occurrence(s) in PDFStreamDumper.

Evidence and notes

Emitted by VB6 SP6 (P-code): yes. Minimal probe: probes\op\3_10_ILdUI1.

Handler: 0x6610A36E, unique to this slot (real opcode #477).

Corpus: 2 occurrence(s) in PDFStreamDumper_p.exe.

Description: draft, by claude-opus-4.7. Handler 0x6610A36E, dispatch slot 0x66107954, modOpcodes line 1160.

I_IndirectStore

Store through pointer at stack top Prefix: I = indirect

IStAd

(3,0x28)emittedhandler #482Object / COMinferred_corpus2 corpus hits
Pop value and address; write the raw 32-bit address (pointer) through the address.

Pops a value and a target address (the address is on top under the value depending on subvariant; see printf template). Writes the value at the target.

Stack: [..., addr:Ad, v:Ad] -> [...] (*addr <- v)

Used for indirect assignment via pointer (e.g. ByRef parameter writeback, pointer-style field assignment).

When the compiler emits it

Emitted when writing through a runtime-computed pointer of type Ad.

VB6 source (verified: compiles to this slot)
Public Sub Main()
  Dim a As Object
End Sub

Sub P(x As Object)
  Dim b As Object
  Set b = x
  Set x = b
End Sub
Encoding, evidence and notes
Encoding

Encoding: FD 28 (lead byte FD selects table 3), then 2 operand byte(s); total instruction length 4 byte(s).
vbdec template: %a
Operands:

  1. %a: local_var_ref, 2 byte(s). signed 16-bit offset from the procedure frame pointer (EBP). Negative = local/temporary (vbdec var_XX, XX = -offset), positive = argument (arg_XX).

Observed: FD28 0C00 IStAd arg_C

Examples
Form1.GetActiveData @ 0x464174 | 46419C    FD28 1400             IStAd arg_14
frmFilterVisualizer.Proc_445B48 @ 0x445B48 | 445BA1    FD28 1000             IStAd arg_10

2 occurrence(s) in PDFStreamDumper.

Evidence and notes

Emitted by VB6 SP6 (P-code): yes. Minimal probe: probes\op\3_28_IStAd.

Handler: 0x6610B393, unique to this slot (real opcode #482).

Corpus: 2 occurrence(s) in PDFStreamDumper_p.exe.

Description: draft, by claude-opus-4.7. Handler 0x6610B393, dispatch slot 0x661079B4, modOpcodes line 1188.

IStAdFunc

(3,0x2F)emittedhandler #487Object / COMinferred_corpus2 corpus hits
Pop value and address; write the value of suffix `` through the address.

Pops a value and a target address (the address is on top under the value depending on subvariant; see printf template). Writes the value at the target.

Stack: [..., addr:Ad, v:] -> [...] (*addr <- v)

Used for indirect assignment via pointer (e.g. ByRef parameter writeback, pointer-style field assignment).

When the compiler emits it

Emitted when writing through a runtime-computed pointer of type .

VB6 source (verified: compiles to this slot)
Public Sub Main()
  Dim c As Collection
End Sub

Sub P(x As Collection)
  Set x = New Collection
  Dim y As Collection
  Set y = x
End Sub
Encoding, evidence and notes
Encoding

Encoding: FD 2F (lead byte FD selects table 3), then 2 operand byte(s); total instruction length 4 byte(s).
vbdec template: %a
Operands:

  1. %a: local_var_ref, 2 byte(s). signed 16-bit offset from the procedure frame pointer (EBP). Negative = local/temporary (vbdec var_XX, XX = -offset), positive = argument (arg_XX).

Observed: FD2F 0C00 IStAdFunc arg_C

Examples
frmFuncGraph.GraphFrom @ 0x4691CC | 46926F    FD2F 1000             IStAdFunc arg_10
frmFuncGraph.GraphTo @ 0x46771C | 4677BF    FD2F 1000             IStAdFunc arg_10

2 occurrence(s) in PDFStreamDumper.

Evidence and notes

Emitted by VB6 SP6 (P-code): yes. Minimal probe: probes\op\3_2F_IStAdFunc.

Handler: 0x661063A0, unique to this slot (real opcode #487).

Corpus: 2 occurrence(s) in PDFStreamDumper_p.exe.

Description: draft, by claude-opus-4.7. Handler 0x661063A0, dispatch slot 0x661079D0, modOpcodes line 1198.

IStDarg

(0,0x62)emittedprimary of 2handler #95Variantconfirmed_handler39 corpus hits
(alias) Pop value and address; write the value of suffix `` through the address.

Alias dispatch slot (0, 0x62) for the canonical IStDarg at (3, 0x26); semantics are identical.

Pops a value and a target address (the address is on top under the value depending on subvariant; see printf template). Writes the value at the target.

Stack: [..., addr:Ad, v:] -> [...] (*addr <- v)

Used for indirect assignment via pointer (e.g. ByRef parameter writeback, pointer-style field assignment).

When the compiler emits it

Emitted when writing through a runtime-computed pointer of type .

VB6 source (verified: compiles to this slot)
Public Sub Main()
  
End Sub

Sub P(Optional x As Variant)
  Dim n As Long
  n = x
  x = 1
  If IsMissing(x) Then n = 2
End Sub
Encoding, evidence and notes
Encoding

Encoding: 62, then 2 operand byte(s); total instruction length 3 byte(s).
vbdec template: %a
Operands:

  1. %a: local_var_ref, 2 byte(s). signed 16-bit offset from the procedure frame pointer (EBP). Negative = local/temporary (vbdec var_XX, XX = -offset), positive = argument (arg_XX).

Observed: 62 0C00 IStDarg arg_C

Examples
Form1.looksEscaped @ 0x449B64 | 449B8D    62 0C00               IStDarg arg_C
fso.Proc_453AA8 @ 0x453AA8 | 453AFE    62 0C00               IStDarg arg_C
fso.Proc_453AA8 @ 0x453AA8 | 453B86    62 1000               IStDarg arg_10

39 occurrence(s) in PDFStreamDumper.

Evidence and notes

Emitted by VB6 SP6 (P-code): yes. Minimal probe: probes\op\0_62_IStDarg.

Handler: 0x6610B78E, shared by 2 dispatch slots (real opcode #95). This is the primary slot. Other slots: (3,26) IStDarg.

Corpus: 39 occurrence(s) in PDFStreamDumper_p.exe.

Slots sharing this handler

(3,0x26) IStDarg

Description: draft, by claude-opus-4.7. Handler 0x6610B78E, dispatch slot 0x66106E9C, modOpcodes line 1193.

IStDarg

(3,0x26)not emitteddup of (0,62)handler #95Variantinferred_corpus
Same handler as (0,0x62) IStDarg: (alias) Pop value and address; write the value of suffix `` through the address.
Encoding, evidence and notes
Encoding

Encoding: FD 26 (lead byte FD selects table 3), then 2 operand byte(s); total instruction length 4 byte(s).
vbdec template: %a
Operands:

  1. %a: local_var_ref, 2 byte(s). signed 16-bit offset from the procedure frame pointer (EBP). Negative = local/temporary (vbdec var_XX, XX = -offset), positive = argument (arg_XX).
Evidence and notes

Emitted by VB6 SP6 (P-code): not observed in about 3,070 probe programs. The slot exists in the runtime's dispatch table, but no tested source construct makes the compiler emit it.

Handler: 0x6610B78E, shared by 2 dispatch slots (real opcode #95). This is a duplicate slot of (0,62) IStDarg. Other slots: (0,62) IStDarg.

Slots sharing this handler

(0,0x62) IStDarg

Description: none. Handler 0x6610B78E, dispatch slot 0x661079AC, modOpcodes line 1186.

IStDargAd

(3,0x2B)emittedhandler #483Variantinferred_corpus
Set a ByRef Variant parameter to an object reference (VT_DISPATCH).

Pops an object pointer, AddRefs it and stores it as VT_DISPATCH into the Variant that argument %a points to.

When the compiler emits it

Emitted for Set x = o inside Sub P(x As Variant).

VB6 source (verified: compiles to this slot)
Public Sub Main()
  Dim v As Variant
End Sub

Sub P(x As Variant)
  Dim o As Object, u As IUnknown
  Set x = o
  Set x = u
  Set x = New Collection
  x = o
End Sub
Encoding, evidence and notes
Encoding

Encoding: FD 2B (lead byte FD selects table 3), then 2 operand byte(s); total instruction length 4 byte(s).
vbdec template: %a
Operands:

  1. %a: local_var_ref, 2 byte(s). signed 16-bit offset from the procedure frame pointer (EBP). Negative = local/temporary (vbdec var_XX, XX = -offset), positive = argument (arg_XX).

Observed: FD2B 0C00 IStDargAd arg_C

Examples
FD2B 0C00  IStDargAd arg_C

From the Phase 4 probe (VB6 SP6, P-code).

Evidence and notes

Emitted by VB6 SP6 (P-code): yes. Minimal probe: probes\op\3_2B_IStDargAd.

Handler: 0x6610B446, unique to this slot (real opcode #483).

Check of vb6_source_eq example: verified: compiles and emits this slot.

Example from the description
Public Sub Main()
  Dim v As Variant
End Sub

Sub P(x As Variant)
  Dim o As Object, u As IUnknown
  Set x = o
  Set x = u
  Set x = New Collection
  x = o
End Sub

Description: draft, by claude-opus-5-5. Handler 0x6610B446, dispatch slot 0x661079C0, modOpcodes line 1194.

IStDargAdFunc

(3,0x2C)emittedhandler #484Variantinferred_corpus
Set a ByRef Variant parameter to an object returned by a call.

As IStDargAd, but adopts the returned reference without an extra AddRef.

When the compiler emits it

Emitted for Set x = New Collection / Set x = F() inside Sub P(x As Variant).

VB6 source (verified: compiles to this slot)
Public Sub Main()
  Dim v As Variant
End Sub

Sub P(x As Variant)
  Dim o As Object, u As IUnknown
  Set x = o
  Set x = u
  Set x = New Collection
  x = o
End Sub
Encoding, evidence and notes
Encoding

Encoding: FD 2C (lead byte FD selects table 3), then 2 operand byte(s); total instruction length 4 byte(s).
vbdec template: %a
Operands:

  1. %a: local_var_ref, 2 byte(s). signed 16-bit offset from the procedure frame pointer (EBP). Negative = local/temporary (vbdec var_XX, XX = -offset), positive = argument (arg_XX).

Observed: FD2C 0C00 IStDargAdFunc arg_C

Examples
FD2C 0C00  IStDargAdFunc arg_C

From the Phase 4 probe (VB6 SP6, P-code).

Evidence and notes

Emitted by VB6 SP6 (P-code): yes. Minimal probe: probes\op\3_2C_IStDargAdFunc.

Handler: 0x6610B3FC, unique to this slot (real opcode #484).

Check of vb6_source_eq example: verified: compiles and emits this slot.

Example from the description
Public Sub Main()
  Dim v As Variant
End Sub

Sub P(x As Variant)
  Dim o As Object, u As IUnknown
  Set x = o
  Set x = u
  Set x = New Collection
  x = o
End Sub

Description: draft, by claude-opus-5-5. Handler 0x6610B3FC, dispatch slot 0x661079C4, modOpcodes line 1195.

IStDargCopy

(3,0x30)emittedhandler #488Variantinferred_corpus
Store a Variant into a ByRef Variant parameter (deep copy).

Pops a Variant and copies it (VariantCopy semantics) into the Variant that ByRef argument %a points to, clearing the old value.

Stack: [..., v:Var] -> [...]

When the compiler emits it

Emitted for x = b inside Sub P(x As Variant).

VB6 source (verified: compiles to this slot)
Public Sub Main()
  Dim a As Variant
End Sub

Sub P(x As Variant)
  Dim b As Variant
  b = x
  x = b
End Sub
Encoding, evidence and notes
Encoding

Encoding: FD 30 (lead byte FD selects table 3), then 2 operand byte(s); total instruction length 4 byte(s).
vbdec template: %a
Operands:

  1. %a: local_var_ref, 2 byte(s). signed 16-bit offset from the procedure frame pointer (EBP). Negative = local/temporary (vbdec var_XX, XX = -offset), positive = argument (arg_XX).

Observed: FD30 0C00 IStDargCopy arg_C

Examples
FD30 0C00  IStDargCopy arg_C

From the Phase 4 probe (VB6 SP6, P-code).

Evidence and notes

Emitted by VB6 SP6 (P-code): yes. Minimal probe: probes\op\3_30_IStDargCopy.

Handler: 0x6610B77E, unique to this slot (real opcode #488).

Check of vb6_source_eq example: verified: compiles and emits this slot.

Example from the description
Public Sub Main()
  Dim a As Variant
End Sub

Sub P(x As Variant)
  Dim b As Variant
  b = x
  x = b
End Sub

Description: draft, by claude-opus-5-5. Handler 0x6610B77E, dispatch slot 0x661079D4, modOpcodes line 1199.

IStDargUnk

(3,0x2D)emittedhandler #485Variantinferred_corpus
Set a ByRef Variant parameter to an IUnknown reference (VT_UNKNOWN).

Pops an IUnknown pointer, AddRefs it and stores it as VT_UNKNOWN into the Variant that argument %a points to.

When the compiler emits it

Emitted for Set x = u (u As IUnknown) inside Sub P(x As Variant).

VB6 source (verified: compiles to this slot)
Public Sub Main()
  Dim v As Variant
End Sub

Function FU() As IUnknown
End Function
Function FO() As Object
End Function
Function FC() As Collection
End Function
Sub P(x As Variant)
  Dim u As IUnknown
  Set x = FU()
  Set x = u
End Sub
Encoding, evidence and notes
Encoding

Encoding: FD 2D (lead byte FD selects table 3), then 2 operand byte(s); total instruction length 4 byte(s).
vbdec template: %a
Operands:

  1. %a: local_var_ref, 2 byte(s). signed 16-bit offset from the procedure frame pointer (EBP). Negative = local/temporary (vbdec var_XX, XX = -offset), positive = argument (arg_XX).

Observed: FD2D 0C00 IStDargUnk arg_C

Examples
FD2D 0C00  IStDargUnk arg_C

From the Phase 4 probe (VB6 SP6, P-code).

Evidence and notes

Emitted by VB6 SP6 (P-code): yes. Minimal probe: probes\op\3_2D_IStDargUnk.

Handler: 0x6610B5DC, unique to this slot (real opcode #485).

Check of vb6_source_eq example: verified: compiles and emits this slot.

Example from the description
Public Sub Main()
  Dim v As Variant
End Sub

Function FU() As IUnknown
End Function
Function FO() As Object
End Function
Function FC() As Collection
End Function
Sub P(x As Variant)
  Dim u As IUnknown
  Set x = FU()
  Set x = u
End Sub

Description: draft, by claude-opus-5-5. Handler 0x6610B5DC, dispatch slot 0x661079C8, modOpcodes line 1196.

IStDargUnkFunc

(3,0x2E)emittedhandler #486Variantinferred_corpus
Set a ByRef Variant parameter to an IUnknown returned by a call.

As IStDargUnk, but adopts the returned reference without an extra AddRef.

When the compiler emits it

Emitted for Set x = FU() where FU returns IUnknown.

VB6 source (verified: compiles to this slot)
Public Sub Main()
  Dim v As Variant
End Sub

Function FU() As IUnknown
End Function
Function FO() As Object
End Function
Function FC() As Collection
End Function
Sub P(x As Variant)
  Dim u As IUnknown
  Set x = FU()
  Set x = u
End Sub
Encoding, evidence and notes
Encoding

Encoding: FD 2E (lead byte FD selects table 3), then 2 operand byte(s); total instruction length 4 byte(s).
vbdec template: %a
Operands:

  1. %a: local_var_ref, 2 byte(s). signed 16-bit offset from the procedure frame pointer (EBP). Negative = local/temporary (vbdec var_XX, XX = -offset), positive = argument (arg_XX).

Observed: FD2E 0C00 IStDargUnkFunc arg_C

Examples
FD2E 0C00  IStDargUnkFunc arg_C

From the Phase 4 probe (VB6 SP6, P-code).

Evidence and notes

Emitted by VB6 SP6 (P-code): yes. Minimal probe: probes\op\3_2E_IStDargUnkFunc.

Handler: 0x6610B56A, unique to this slot (real opcode #486).

Check of vb6_source_eq example: verified: compiles and emits this slot.

Example from the description
Public Sub Main()
  Dim v As Variant
End Sub

Function FU() As IUnknown
End Function
Function FO() As Object
End Function
Function FC() As Collection
End Function
Sub P(x As Variant)
  Dim u As IUnknown
  Set x = FU()
  Set x = u
End Sub

Description: draft, by claude-opus-5-5. Handler 0x6610B56A, dispatch slot 0x661079CC, modOpcodes line 1197.

IStFPR4

(0,0x87)emittedprimary of 2handler #132Floating pointinferred_corpus
Store Single into the variable a ByRef argument (or other frame-held pointer) points to.

Pops a Single, moved through the FPU (fld/fstp dword), and writes it to the variable a ByRef argument (or other frame-held pointer) points to.

Stack: [..., v:FPR4] -> [...]

Operands: %a: frame slot holding the pointer (usually a ByRef argument, arg_XX).

Access to ByRef parameters: the frame slot holds the caller's address, and the value is read or written through it.

When the compiler emits it

Emitted for assignments to the variable a ByRef argument (or other frame-held pointer) points to when the value is a Single. The storage class selects the prefix (I); the value class selects the suffix (FPR4).

VB6 source (verified: compiles to this slot)
Public Sub Main()
  Dim a As Single
End Sub

Sub P(x As Single)
  Dim b As Single
  b = x
  x = b
End Sub
Encoding, evidence and notes
Encoding

Encoding: 87, then 2 operand byte(s); total instruction length 3 byte(s).
vbdec template: %a
Operands:

  1. %a: local_var_ref, 2 byte(s). signed 16-bit offset from the procedure frame pointer (EBP). Negative = local/temporary (vbdec var_XX, XX = -offset), positive = argument (arg_XX).

Observed: 87 0C00 IStFPR4 arg_C

Examples
87 0C00  IStFPR4 arg_C

From the Phase 4 probe (VB6 SP6, P-code).

Evidence and notes

Emitted by VB6 SP6 (P-code): yes. Minimal probe: probes\op\0_87_IStFPR4.

Handler: 0x6610A407, shared by 2 dispatch slots (real opcode #132). This is the primary slot. Other slots: (3,29) IStFPR4.

Check of vb6_source_eq example: verified: compiles and emits this slot.

Example from the description
Public Sub Main()
  Dim a As Single
End Sub

Sub P(x As Single)
  Dim b As Single
  b = x
  x = b
End Sub
Slots sharing this handler

(3,0x29) IStFPR4

Description: draft, by claude-opus-5-5. Handler 0x6610A407, dispatch slot 0x66106F30, modOpcodes line 1189.

IStFPR4

(3,0x29)not emitteddup of (0,87)handler #132Floating pointconfirmed_handler
Same handler as (0,0x87) IStFPR4: Store Single into the variable a ByRef argument (or other frame-held pointer) points to.
Encoding, evidence and notes
Encoding

Encoding: FD 29 (lead byte FD selects table 3), then 2 operand byte(s); total instruction length 4 byte(s).
vbdec template: %a
Operands:

  1. %a: local_var_ref, 2 byte(s). signed 16-bit offset from the procedure frame pointer (EBP). Negative = local/temporary (vbdec var_XX, XX = -offset), positive = argument (arg_XX).
Evidence and notes

Emitted by VB6 SP6 (P-code): not observed in about 3,070 probe programs. The slot exists in the runtime's dispatch table, but no tested source construct makes the compiler emit it.

Handler: 0x6610A407, shared by 2 dispatch slots (real opcode #132). This is a duplicate slot of (0,87) IStFPR4. Other slots: (0,87) IStFPR4.

Slots sharing this handler

(0,0x87) IStFPR4

Description: none. Handler 0x6610A407, dispatch slot 0x661079B8, modOpcodes line 1190.

IStFPR8

(0,0x88)emittedprimary of 2handler #133Floating pointinferred_corpus
Store Double/Date into the variable a ByRef argument (or other frame-held pointer) points to.

Pops a Double or Date, moved through the FPU (fld/fstp qword), and writes it to the variable a ByRef argument (or other frame-held pointer) points to.

Stack: [..., v:FPR8] -> [...]

Operands: %a: frame slot holding the pointer (usually a ByRef argument, arg_XX).

Access to ByRef parameters: the frame slot holds the caller's address, and the value is read or written through it.

When the compiler emits it

Emitted for assignments to the variable a ByRef argument (or other frame-held pointer) points to when the value is a Double/Date. The storage class selects the prefix (I); the value class selects the suffix (FPR8).

VB6 source (verified: compiles to this slot)
Public Sub Main()
  Dim a As Date
End Sub

Sub P(x As Date)
  Dim b As Date
  b = x
  x = b
End Sub
Encoding, evidence and notes
Encoding

Encoding: 88, then 2 operand byte(s); total instruction length 3 byte(s).
vbdec template: %a
Operands:

  1. %a: local_var_ref, 2 byte(s). signed 16-bit offset from the procedure frame pointer (EBP). Negative = local/temporary (vbdec var_XX, XX = -offset), positive = argument (arg_XX).

Observed: 88 0C00 IStFPR8 arg_C

Examples
88 0C00  IStFPR8 arg_C

From the Phase 4 probe (VB6 SP6, P-code).

Evidence and notes

Emitted by VB6 SP6 (P-code): yes. Minimal probe: probes\op\0_88_IStFPR8.

Handler: 0x6610A429, shared by 2 dispatch slots (real opcode #133). This is the primary slot. Other slots: (3,2A) IStFPR8.

Check of vb6_source_eq example: verified: compiles and emits this slot.

Example from the description
Public Sub Main()
  Dim a As Date
End Sub

Sub P(x As Date)
  Dim b As Date
  b = x
  x = b
End Sub
Slots sharing this handler

(3,0x2A) IStFPR8

Description: draft, by claude-opus-5-5. Handler 0x6610A429, dispatch slot 0x66106F34, modOpcodes line 1191.

IStFPR8

(3,0x2A)not emitteddup of (0,88)handler #133Floating pointconfirmed_handler
Same handler as (0,0x88) IStFPR8: Store Double/Date into the variable a ByRef argument (or other frame-held pointer) points to.
Encoding, evidence and notes
Encoding

Encoding: FD 2A (lead byte FD selects table 3), then 2 operand byte(s); total instruction length 4 byte(s).
vbdec template: %a
Operands:

  1. %a: local_var_ref, 2 byte(s). signed 16-bit offset from the procedure frame pointer (EBP). Negative = local/temporary (vbdec var_XX, XX = -offset), positive = argument (arg_XX).
Evidence and notes

Emitted by VB6 SP6 (P-code): not observed in about 3,070 probe programs. The slot exists in the runtime's dispatch table, but no tested source construct makes the compiler emit it.

Handler: 0x6610A429, shared by 2 dispatch slots (real opcode #133). This is a duplicate slot of (0,88) IStFPR8. Other slots: (0,88) IStFPR8.

Slots sharing this handler

(0,0x88) IStFPR8

Description: none. Handler 0x6610A429, dispatch slot 0x661079BC, modOpcodes line 1192.

IStI2

(0,0x84)emittedprimary of 2handler #129Integerinferred_corpus17 corpus hits
Pop value and address; write the 16-bit signed integer (VB6 Integer) through the address.

Pops a value and a target address (the address is on top under the value depending on subvariant; see printf template). Writes the value at the target.

Stack: [..., addr:Ad, v:I2] -> [...] (*addr <- v)

Used for indirect assignment via pointer (e.g. ByRef parameter writeback, pointer-style field assignment).

When the compiler emits it

Emitted when writing through a runtime-computed pointer of type I2.

VB6 source (verified: compiles to this slot)
Public Sub Main()
  Dim a As Boolean
End Sub

Sub P(x As Boolean)
  Dim b As Boolean
  b = x
  x = b
End Sub
Encoding, evidence and notes
Encoding

Encoding: 84, then 2 operand byte(s); total instruction length 3 byte(s).
vbdec template: %a
Operands:

  1. %a: local_var_ref, 2 byte(s). signed 16-bit offset from the procedure frame pointer (EBP). Negative = local/temporary (vbdec var_XX, XX = -offset), positive = argument (arg_XX).

Observed: 84 0C00 IStI2 arg_C

Examples
fso.Proc_44ECE8 @ 0x44ECE8 | 44ED02    84 1000               IStI2 arg_10
fso.Proc_44ECE8 @ 0x44ECE8 | 44ED1C    84 1000               IStI2 arg_10
fso.Proc_44ECE8 @ 0x44ECE8 | 44ED36    84 1000               IStI2 arg_10

17 occurrence(s) in PDFStreamDumper.

Evidence and notes

Emitted by VB6 SP6 (P-code): yes. Minimal probe: probes\op\0_84_IStI2.

Handler: 0x66105A5B, shared by 2 dispatch slots (real opcode #129). This is the primary slot. Other slots: (3,21) IStI2.

Corpus: 17 occurrence(s) in PDFStreamDumper_p.exe.

Slots sharing this handler

(3,0x21) IStI2

Description: draft, by claude-opus-4.7. Handler 0x66105A5B, dispatch slot 0x66106F24, modOpcodes line 1178.

IStI2

(3,0x21)not emitteddup of (0,84)handler #129Integerconfirmed_handler
Same handler as (0,0x84) IStI2: Pop value and address; write the 16-bit signed integer (VB6 Integer) through the address.
Encoding, evidence and notes
Encoding

Encoding: FD 21 (lead byte FD selects table 3), then 2 operand byte(s); total instruction length 4 byte(s).
vbdec template: %a
Operands:

  1. %a: local_var_ref, 2 byte(s). signed 16-bit offset from the procedure frame pointer (EBP). Negative = local/temporary (vbdec var_XX, XX = -offset), positive = argument (arg_XX).
Evidence and notes

Emitted by VB6 SP6 (P-code): not observed in about 3,070 probe programs. The slot exists in the runtime's dispatch table, but no tested source construct makes the compiler emit it.

Handler: 0x66105A5B, shared by 2 dispatch slots (real opcode #129). This is a duplicate slot of (0,84) IStI2. Other slots: (0,84) IStI2.

Slots sharing this handler

(0,0x84) IStI2

Description: none. Handler 0x66105A5B, dispatch slot 0x66107998, modOpcodes line 1179.

IStI4

(0,0x85)emittedprimary of 3handler #130Integerinferred_corpus6 corpus hits
Pop value and address; write the 32-bit signed integer (VB6 Long) through the address.

Pops a value and a target address (the address is on top under the value depending on subvariant; see printf template). Writes the value at the target.

Stack: [..., addr:Ad, v:I4] -> [...] (*addr <- v)

Used for indirect assignment via pointer (e.g. ByRef parameter writeback, pointer-style field assignment).

When the compiler emits it

Emitted when writing through a runtime-computed pointer of type I4.

VB6 source (verified: compiles to this slot)
Public Sub Main()
  Dim a As Long
End Sub

Sub P(x As Long)
  Dim b As Long
  b = x
  x = b
End Sub
Encoding, evidence and notes
Encoding

Encoding: 85, then 2 operand byte(s); total instruction length 3 byte(s).
vbdec template: %a
Operands:

  1. %a: local_var_ref, 2 byte(s). signed 16-bit offset from the procedure frame pointer (EBP). Negative = local/temporary (vbdec var_XX, XX = -offset), positive = argument (arg_XX).

Observed: 85 0C00 IStI4 arg_C

Examples
fso.Proc_45D698 @ 0x45D698 | 45D74B    85 2000               IStI4 arg_20
fso.Proc_45D698 @ 0x45D698 | 45D7D1    85 2000               IStI4 arg_20
fso.Proc_45D698 @ 0x45D698 | 45D881    85 2000               IStI4 arg_20

6 occurrence(s) in PDFStreamDumper.

Evidence and notes

Emitted by VB6 SP6 (P-code): yes. Minimal probe: probes\op\0_85_IStI4.

Handler: 0x6610A3D4, shared by 3 dispatch slots (real opcode #130). This is the primary slot. Other slots: (3,22) IStI4, (3,23) IStI4.

Corpus: 6 occurrence(s) in PDFStreamDumper_p.exe.

Slots sharing this handler

(3,0x22) IStI4, (3,0x23) IStI4

Description: draft, by claude-opus-4.7. Handler 0x6610A3D4, dispatch slot 0x66106F28, modOpcodes line 1180.

IStI4

(3,0x22)not emitteddup of (0,85)handler #130Integerconfirmed_handler
Same handler as (0,0x85) IStI4: Pop value and address; write the 32-bit signed integer (VB6 Long) through the address.
Encoding, evidence and notes
Encoding

Encoding: FD 22 (lead byte FD selects table 3), then 2 operand byte(s); total instruction length 4 byte(s).
vbdec template: %a
Operands:

  1. %a: local_var_ref, 2 byte(s). signed 16-bit offset from the procedure frame pointer (EBP). Negative = local/temporary (vbdec var_XX, XX = -offset), positive = argument (arg_XX).
Evidence and notes

Emitted by VB6 SP6 (P-code): not observed in about 3,070 probe programs. The slot exists in the runtime's dispatch table, but no tested source construct makes the compiler emit it.

Handler: 0x6610A3D4, shared by 3 dispatch slots (real opcode #130). This is a duplicate slot of (0,85) IStI4. Other slots: (0,85) IStI4, (3,23) IStI4.

Slots sharing this handler

(0,0x85) IStI4, (3,0x23) IStI4

Description: none. Handler 0x6610A3D4, dispatch slot 0x6610799C, modOpcodes line 1181.

IStI4

(3,0x23)not emitteddup of (0,85)handler #130Integerconfirmed_handler
Same handler as (0,0x85) IStI4: Pop value and address; write the 32-bit signed integer (VB6 Long) through the address.
Encoding, evidence and notes
Encoding

Encoding: FD 23 (lead byte FD selects table 3), then 2 operand byte(s); total instruction length 4 byte(s).
vbdec template: %a
Operands:

  1. %a: local_var_ref, 2 byte(s). signed 16-bit offset from the procedure frame pointer (EBP). Negative = local/temporary (vbdec var_XX, XX = -offset), positive = argument (arg_XX).
Evidence and notes

Emitted by VB6 SP6 (P-code): not observed in about 3,070 probe programs. The slot exists in the runtime's dispatch table, but no tested source construct makes the compiler emit it.

Handler: 0x6610A3D4, shared by 3 dispatch slots (real opcode #130). This is a duplicate slot of (0,85) IStI4. Other slots: (0,85) IStI4, (3,22) IStI4.

Slots sharing this handler

(0,0x85) IStI4, (3,0x22) IStI4

Description: none. Handler 0x6610A3D4, dispatch slot 0x661079A0, modOpcodes line 1182.

IStR8

(0,0x86)emittedprimary of 3handler #131Currencyinferred_corpus
Store 8-byte value into the variable a ByRef argument (or other frame-held pointer) points to.

Pops a raw 64-bit value (in practice a Currency; Double/Date use the FPR8 forms), and writes it to the variable a ByRef argument (or other frame-held pointer) points to.

Stack: [..., v:R8] -> [...]

Operands: %a: frame slot holding the pointer (usually a ByRef argument, arg_XX).

Access to ByRef parameters: the frame slot holds the caller's address, and the value is read or written through it.

The R8 suffix denotes a raw 8-byte move, not a floating-point type. Phase 4 probes show it used for Currency values. Single/Double values use the FPR4/FPR8 forms.

When the compiler emits it

Emitted for assignments to the variable a ByRef argument (or other frame-held pointer) points to when the value is a 8-byte value. The storage class selects the prefix (I); the value class selects the suffix (R8).

VB6 source (verified: compiles to this slot)
Public Sub Main()
  Dim a As Currency
End Sub

Sub P(x As Currency)
  Dim b As Currency
  b = x
  x = b
End Sub
Encoding, evidence and notes
Encoding

Encoding: 86, then 2 operand byte(s); total instruction length 3 byte(s).
vbdec template: %a
Operands:

  1. %a: local_var_ref, 2 byte(s). signed 16-bit offset from the procedure frame pointer (EBP). Negative = local/temporary (vbdec var_XX, XX = -offset), positive = argument (arg_XX).

Observed: 86 0C00 IStR8 arg_C

Examples
86 0C00  IStR8 arg_C

From the Phase 4 probe (VB6 SP6, P-code).

Evidence and notes

Emitted by VB6 SP6 (P-code): yes. Minimal probe: probes\op\0_86_IStR8.

Handler: 0x6610A3EC, shared by 3 dispatch slots (real opcode #131). This is the primary slot. Other slots: (3,24) IStR8, (3,25) IStR8.

Check of vb6_source_eq example: verified: compiles and emits this slot.

Example from the description
Public Sub Main()
  Dim a As Currency
End Sub

Sub P(x As Currency)
  Dim b As Currency
  b = x
  x = b
End Sub
Slots sharing this handler

(3,0x24) IStR8, (3,0x25) IStR8

Description: draft, by claude-opus-5-5. Handler 0x6610A3EC, dispatch slot 0x66106F2C, modOpcodes line 1183.

IStR8

(3,0x24)not emitteddup of (0,86)handler #131Currencyconfirmed_handler
Same handler as (0,0x86) IStR8: Store 8-byte value into the variable a ByRef argument (or other frame-held pointer) points to.
Encoding, evidence and notes
Encoding

Encoding: FD 24 (lead byte FD selects table 3), then 2 operand byte(s); total instruction length 4 byte(s).
vbdec template: %a
Operands:

  1. %a: local_var_ref, 2 byte(s). signed 16-bit offset from the procedure frame pointer (EBP). Negative = local/temporary (vbdec var_XX, XX = -offset), positive = argument (arg_XX).
Evidence and notes

Emitted by VB6 SP6 (P-code): not observed in about 3,070 probe programs. The slot exists in the runtime's dispatch table, but no tested source construct makes the compiler emit it.

Handler: 0x6610A3EC, shared by 3 dispatch slots (real opcode #131). This is a duplicate slot of (0,86) IStR8. Other slots: (0,86) IStR8, (3,25) IStR8.

Slots sharing this handler

(0,0x86) IStR8, (3,0x25) IStR8

Description: none. Handler 0x6610A3EC, dispatch slot 0x661079A4, modOpcodes line 1184.

IStR8

(3,0x25)not emitteddup of (0,86)handler #131Currencyconfirmed_handler
Same handler as (0,0x86) IStR8: Store 8-byte value into the variable a ByRef argument (or other frame-held pointer) points to.
Encoding, evidence and notes
Encoding

Encoding: FD 25 (lead byte FD selects table 3), then 2 operand byte(s); total instruction length 4 byte(s).
vbdec template: %a
Operands:

  1. %a: local_var_ref, 2 byte(s). signed 16-bit offset from the procedure frame pointer (EBP). Negative = local/temporary (vbdec var_XX, XX = -offset), positive = argument (arg_XX).
Evidence and notes

Emitted by VB6 SP6 (P-code): not observed in about 3,070 probe programs. The slot exists in the runtime's dispatch table, but no tested source construct makes the compiler emit it.

Handler: 0x6610A3EC, shared by 3 dispatch slots (real opcode #131). This is a duplicate slot of (0,86) IStR8. Other slots: (0,86) IStR8, (3,24) IStR8.

Slots sharing this handler

(0,0x86) IStR8, (3,0x24) IStR8

Description: none. Handler 0x6610A3EC, dispatch slot 0x661079A8, modOpcodes line 1185.

IStStr

(3,0x27)emittedhandler #481Stringinferred_corpus6 corpus hits
Pop value and address; write the BSTR (VB6 String) through the address.

Pops a value and a target address (the address is on top under the value depending on subvariant; see printf template). Writes the value at the target.

Stack: [..., addr:Ad, v:Str] -> [...] (*addr <- v)

Used for indirect assignment via pointer (e.g. ByRef parameter writeback, pointer-style field assignment).

When the compiler emits it

Emitted when writing through a runtime-computed pointer of type Str.

VB6 source (verified: compiles to this slot)
Public Sub Main()
  Dim k As New CSink
End Sub
' ---- CSrc.cls
Public Event Fired(ByVal n As Long, s As String)
Public Event Simple()
Public Sub Go()
  Dim s As String
  RaiseEvent Fired(1, s)
  RaiseEvent Simple
End Sub
' ---- CSink.cls
Private WithEvents src As CSrc
Public Sub Hook()
  Set src = New CSrc
  src.Go
End Sub
Private Sub src_Fired(ByVal n As Long, s As String)
  s = CStr(n)
End Sub
Private Sub src_Simple()
End Sub
Encoding, evidence and notes
Encoding

Encoding: FD 27 (lead byte FD selects table 3), then 2 operand byte(s); total instruction length 4 byte(s).
vbdec template: %a
Operands:

  1. %a: local_var_ref, 2 byte(s). signed 16-bit offset from the procedure frame pointer (EBP). Negative = local/temporary (vbdec var_XX, XX = -offset), positive = argument (arg_XX).

Observed: FD27 1000 IStStr arg_10

Examples
Form1.isAS3Sorcerer_Installed @ 0x44D52C | 44D605    FD27 0C00             IStStr arg_C
CPdfParser.Proc_442C44 @ 0x442C44 | 442C6D    FD27 1000             IStStr arg_10
CPdfParser.Proc_442C44 @ 0x442C44 | 442C9E    FD27 0C00             IStStr arg_C

6 occurrence(s) in PDFStreamDumper.

Evidence and notes

Emitted by VB6 SP6 (P-code): yes. Minimal probe: probes\op\3_27_IStStr.

Handler: 0x66106344, unique to this slot (real opcode #481).

Corpus: 6 occurrence(s) in PDFStreamDumper_p.exe.

Description: draft, by claude-opus-4.7. Handler 0x66106344, dispatch slot 0x661079B0, modOpcodes line 1187.

IStStrCopy

(3,0x31)emittedhandler #489Stringinferred_corpus3 corpus hits
Pop value and address; write the value of suffix `` through the address.

Pops a value and a target address (the address is on top under the value depending on subvariant; see printf template). Writes the value at the target.

Stack: [..., addr:Ad, v:] -> [...] (*addr <- v)

Used for indirect assignment via pointer (e.g. ByRef parameter writeback, pointer-style field assignment).

When the compiler emits it

Emitted when writing through a runtime-computed pointer of type .

VB6 source (verified: compiles to this slot)
Public Sub Main()
  
End Sub

Sub P(Optional x As Long = 3, Optional s As String = "a")
  Dim n As Long, t As String
  n = x
  x = 1
  t = s
  s = "b"
End Sub
Encoding, evidence and notes
Encoding

Encoding: FD 31 (lead byte FD selects table 3), then 2 operand byte(s); total instruction length 4 byte(s).
vbdec template: %a
Operands:

  1. %a: local_var_ref, 2 byte(s). signed 16-bit offset from the procedure frame pointer (EBP). Negative = local/temporary (vbdec var_XX, XX = -offset), positive = argument (arg_XX).

Observed: FD31 1000 IStStrCopy arg_10

Examples
Form1.isAS3Sorcerer_Installed @ 0x44D52C | 44D563    FD31 0C00             IStStrCopy arg_C
CSharpFilters.Decrypt @ 0x455BDC | 455D30    FD31 1000             IStStrCopy arg_10
CSharpFilters.Decrypt @ 0x455BDC | 455D52    FD31 1000             IStStrCopy arg_10

3 occurrence(s) in PDFStreamDumper.

Evidence and notes

Emitted by VB6 SP6 (P-code): yes. Minimal probe: probes\op\3_31_IStStrCopy.

Handler: 0x66106351, unique to this slot (real opcode #489).

Corpus: 3 occurrence(s) in PDFStreamDumper_p.exe.

Description: draft, by claude-opus-4.7. Handler 0x66106351, dispatch slot 0x661079D8, modOpcodes line 1200.

IStUI1

(3,0x20)emittedhandler #480Integerinferred_corpus1 corpus hits
Pop value and address; write the 8-bit unsigned integer (VB6 Byte) through the address.

Pops a value and a target address (the address is on top under the value depending on subvariant; see printf template). Writes the value at the target.

Stack: [..., addr:Ad, v:UI1] -> [...] (*addr <- v)

Used for indirect assignment via pointer (e.g. ByRef parameter writeback, pointer-style field assignment).

When the compiler emits it

Emitted when writing through a runtime-computed pointer of type UI1.

VB6 source (verified: compiles to this slot)
Public Sub Main()
  Dim a As Byte
End Sub

Sub P(x As Byte)
  Dim b As Byte
  b = x
  x = b
End Sub
Encoding, evidence and notes
Encoding

Encoding: FD 20 (lead byte FD selects table 3), then 2 operand byte(s); total instruction length 4 byte(s).
vbdec template: %a
Operands:

  1. %a: local_var_ref, 2 byte(s). signed 16-bit offset from the procedure frame pointer (EBP). Negative = local/temporary (vbdec var_XX, XX = -offset), positive = argument (arg_XX).

Observed: FD20 0C00 IStUI1 arg_C

Examples
modEscapes.Proc_448CF0 @ 0x448CF0 | 448D62    FD20 1000             IStUI1 arg_10

1 occurrence(s) in PDFStreamDumper.

Evidence and notes

Emitted by VB6 SP6 (P-code): yes. Minimal probe: probes\op\3_20_IStUI1.

Handler: 0x6610A3BB, unique to this slot (real opcode #480).

Corpus: 1 occurrence(s) in PDFStreamDumper_p.exe.

Description: draft, by claude-opus-4.7. Handler 0x6610A3BB, dispatch slot 0x66107994, modOpcodes line 1177.

IStVarCopyObj

(5,0x09)not emittedhandler #735Variantinferred_corpus
No description yet.
Encoding, evidence and notes
Encoding

Encoding: FF 09 (lead byte FF selects table 5), then 2 operand byte(s); total instruction length 4 byte(s).
vbdec template: %a
Operands:

  1. %a: local_var_ref, 2 byte(s). signed 16-bit offset from the procedure frame pointer (EBP). Negative = local/temporary (vbdec var_XX, XX = -offset), positive = argument (arg_XX).
Evidence and notes

Emitted by VB6 SP6 (P-code): not observed in about 3,070 probe programs. The slot exists in the runtime's dispatch table, but no tested source construct makes the compiler emit it.

Handler: 0x6610B6FD, unique to this slot (real opcode #735).

Description: none. Handler 0x6610B6FD, dispatch slot 0x66108138, modOpcodes line 1201.

ImpAd_Call

Call external (DLL/COM API) via const pool Prefix: Imp = import, Ad = address

ImpAdCallCbFrame

(4,0x2D)emittedhandler #611UDT / recordinferred_corpus
Call a module Function that returns a user-defined type into a frame buffer.

Calls the p-code procedure from the constant pool, passing the address of the frame slot %a as the hidden result buffer. Observed FE2D 6CFF 0000 0000 0800: buffer var_94, pool index 0, 8 bytes. The result is then copied out with CopyBytes or AssignRecord.

When the compiler emits it

Emitted for r = F() where F returns a UDT.

VB6 source (verified: compiles to this slot)
Private Type TRec
  a As Long
  s As String
  v As Variant
  o As Object
End Type
Private Type TPlain
  a As Long
  b As Integer
End Type

Public Sub Main()
  Dim r As TPlain
  r = F()
End Sub

Private Function F() As TPlain
  F.a = 1
End Function
Encoding, evidence and notes
Encoding

Encoding: FE 2D (lead byte FE selects table 4), then 8 operand byte(s); total instruction length 10 byte(s).
No printf operands are declared, but the instruction still consumes operand bytes; see the size above and the observed bytes below. (Phase 3a: flag=0 does not mean 'no operands'.)
Observed: FE2D 6CFF000000000800 ImpAdCallCbFrame

Examples
FE2D 6CFF000000000800 ImpAdCallCbFrame

From the Phase 4 probe (VB6 SP6, P-code).

Evidence and notes

Emitted by VB6 SP6 (P-code): yes. Minimal probe: probes\op\4_2D_ImpAdCallCbFrame.

Handler: 0x6610B972, unique to this slot (real opcode #611).

Check of vb6_source_eq example: verified: compiles and emits this slot.

Example from the description
Private Type TRec
  a As Long
  s As String
  v As Variant
  o As Object
End Type
Private Type TPlain
  a As Long
  b As Integer
End Type

Public Sub Main()
  Dim r As TPlain
  r = F()
End Sub

Private Function F() As TPlain
  F.a = 1
End Function

Description: draft, by claude-opus-5-5. Handler 0x6610B972, dispatch slot 0x66107DC8, modOpcodes line 319.

ImpAdCallCy

(0,0x0C)emittedprimary of 2handler #11Procedure call/returninferred_corpus
Call a procedure/import that returns Currency (EDX:EAX); push the result.

Calls the target from the constant pool (%x) and pushes the 8-byte Currency returned in EDX:EAX. %2 is the argument byte count to clean up.

When the compiler emits it

Emitted for calls to module Functions declared As Currency and API Declares returning Currency.

VB6 source (verified: compiles to this slot)
Public Sub Main()
  Dim b As Currency
  b = F()
End Sub

Function F() As Currency
  F = 1.5@
End Function
Encoding, evidence and notes
Encoding

Encoding: 0C, then 4 operand byte(s); total instruction length 5 byte(s).
vbdec template: %x %2
Operands:

  1. %x: pool_external_api, 2 byte(s). 16-bit constant-pool index of the callee (Declare'd API, runtime export, or p-code procedure stub).
  2. %2: immediate_word, 2 byte(s). 16-bit immediate.

Observed: 0C 00000000 ImpAdCallCy modProbe.Proc_40149C 0x0

Examples
0C 00000000  ImpAdCallCy modProbe.Proc_40149C 0x0

From the Phase 4 probe (VB6 SP6, P-code).

Evidence and notes

Emitted by VB6 SP6 (P-code): yes. Minimal probe: probes\op\0_0C_ImpAdCallCy.

Handler: 0x6610BAEE, shared by 2 dispatch slots (real opcode #11). This is the primary slot. Other slots: (4,25) ImpAdCallCy.

Check of vb6_source_eq example: verified: compiles and emits this slot.

Example from the description
Public Sub Main()
  Dim b As Currency
  b = F()
End Sub

Function F() As Currency
  F = 1.5@
End Function
Slots sharing this handler

(4,0x25) ImpAdCallCy

Description: draft, by claude-opus-5-5. Handler 0x6610BAEE, dispatch slot 0x66106D44, modOpcodes line 307.

ImpAdCallCy

(4,0x25)not emitteddup of (0,0C)handler #11Procedure call/returnconfirmed_handler
Same handler as (0,0x0C) ImpAdCallCy: Call a procedure/import that returns Currency (EDX:EAX); push the result.
Encoding, evidence and notes
Encoding

Encoding: FE 25 (lead byte FE selects table 4), then 4 operand byte(s); total instruction length 6 byte(s).
vbdec template: %x %2
Operands:

  1. %x: pool_external_api, 2 byte(s). 16-bit constant-pool index of the callee (Declare'd API, runtime export, or p-code procedure stub).
  2. %2: immediate_word, 2 byte(s). 16-bit immediate.
Evidence and notes

Emitted by VB6 SP6 (P-code): not observed in about 3,070 probe programs. The slot exists in the runtime's dispatch table, but no tested source construct makes the compiler emit it.

Handler: 0x6610BAEE, shared by 2 dispatch slots (real opcode #11). This is a duplicate slot of (0,0C) ImpAdCallCy. Other slots: (0,0C) ImpAdCallCy.

Slots sharing this handler

(0,0x0C) ImpAdCallCy

Description: none. Handler 0x6610BAEE, dispatch slot 0x66107DA8, modOpcodes line 308.

ImpAdCallFPR4

(0,0x0A)emittedprimary of 4handler #9Procedure call/returninferred_corpus1224 corpus hits
Call a procedure or import whose result is not returned in EAX: Subs, discarded results, and FPU/Variant returns.

Calls the target identified by the constant-pool operand %x with the arguments already on the stack. The argument area is cleaned up according to the callee's frame; no result is pushed from EAX.

When the compiler emits it

Emitted for calls to module procedures and Declared APIs that are Subs, calls whose result is ignored, and functions returning Single/Double/Date (FPU) or Variant (hidden result buffer). Integer-class results use ImpAdCallI2 (0,0B) or ImpAdCallI4 (0,5E), Byte ImpAdCallUI1, Currency ImpAdCallCy. Despite its name, the slot is not specific to Single.

VB6 source (verified: compiles to this slot)
Private Declare Sub Ext Lib "x.dll" Alias "#5" ()

Public Sub Main()
  Ext
End Sub
Encoding, evidence and notes
Encoding

Encoding: 0A, then 4 operand byte(s); total instruction length 5 byte(s).
vbdec template: %x
Operands:

  1. %x: pool_external_api, 2 byte(s). 16-bit constant-pool index of the callee (Declare'd API, runtime export, or p-code procedure stub).

Observed: 0A 00000000 ImpAdCallFPR4

Examples
Form1.LoadPlugins @ 0x4644FC | 46467B    0A 0F000C00           ImpAdCallFPR4 rtcCreateObject2
Form1.LoadPlugins @ 0x4644FC | 46472F    0A 17000800           ImpAdCallFPR4 rtcShell
Form1.LoadPlugins @ 0x4644FC | 46474F    0A 18000400           ImpAdCallFPR4 kernel32.Sleep

1224 occurrence(s) in PDFStreamDumper.

Evidence and notes

Emitted by VB6 SP6 (P-code): yes. Minimal probe: probes\op\0_0A_ImpAdCallFPR4.

Handler: 0x6610664E, shared by 4 dispatch slots (real opcode #9). This is the primary slot. Other slots: (4,29) ImpAdCallFPR4, (4,2A) ImpAdCallFPR4, (4,2C) ImpAdCallFPR4.

Check of vb6_source_eq example: verified: compiles and emits this slot.

Corpus: 1224 occurrence(s) in PDFStreamDumper_p.exe.

Example from the description
Sub P(ByVal n As Long)
End Sub
Sub Main()
  P 1
End Sub
Slots sharing this handler

(4,0x29) ImpAdCallFPR4, (4,0x2A) ImpAdCallFPR4, (4,0x2C) ImpAdCallFPR4

Description: draft, by claude-opus-5-5. Handler 0x6610664E, dispatch slot 0x66106D3C, modOpcodes line 301.

ImpAdCallFPR4

(4,0x29)not emitteddup of (0,0A)handler #9Procedure call/returnconfirmed_handler
Same handler as (0,0x0A) ImpAdCallFPR4: Call a procedure or import whose result is not returned in EAX: Subs, discarded results, and FPU/Variant returns.
Encoding, evidence and notes
Encoding

Encoding: FE 29 (lead byte FE selects table 4), then 4 operand byte(s); total instruction length 6 byte(s).
No printf operands are declared, but the instruction still consumes operand bytes; see the size above and the observed bytes below. (Phase 3a: flag=0 does not mean 'no operands'.)

Evidence and notes

Emitted by VB6 SP6 (P-code): not observed in about 3,070 probe programs. The slot exists in the runtime's dispatch table, but no tested source construct makes the compiler emit it.

Handler: 0x6610664E, shared by 4 dispatch slots (real opcode #9). This is a duplicate slot of (0,0A) ImpAdCallFPR4. Other slots: (0,0A) ImpAdCallFPR4, (4,2A) ImpAdCallFPR4, (4,2C) ImpAdCallFPR4.

Slots sharing this handler

(0,0x0A) ImpAdCallFPR4, (4,0x2A) ImpAdCallFPR4, (4,0x2C) ImpAdCallFPR4

Description: none. Handler 0x6610664E, dispatch slot 0x66107DB8, modOpcodes line 302.

ImpAdCallFPR4

(4,0x2A)not emitteddup of (0,0A)handler #9Procedure call/returnconfirmed_handler
Same handler as (0,0x0A) ImpAdCallFPR4: Call a procedure or import whose result is not returned in EAX: Subs, discarded results, and FPU/Variant returns.
Encoding, evidence and notes
Encoding

Encoding: FE 2A (lead byte FE selects table 4), then 4 operand byte(s); total instruction length 6 byte(s).
No printf operands are declared, but the instruction still consumes operand bytes; see the size above and the observed bytes below. (Phase 3a: flag=0 does not mean 'no operands'.)

Evidence and notes

Emitted by VB6 SP6 (P-code): not observed in about 3,070 probe programs. The slot exists in the runtime's dispatch table, but no tested source construct makes the compiler emit it.

Handler: 0x6610664E, shared by 4 dispatch slots (real opcode #9). This is a duplicate slot of (0,0A) ImpAdCallFPR4. Other slots: (0,0A) ImpAdCallFPR4, (4,29) ImpAdCallFPR4, (4,2C) ImpAdCallFPR4.

Slots sharing this handler

(0,0x0A) ImpAdCallFPR4, (4,0x29) ImpAdCallFPR4, (4,0x2C) ImpAdCallFPR4

Description: none. Handler 0x6610664E, dispatch slot 0x66107DBC, modOpcodes line 303.

ImpAdCallFPR4

(4,0x2C)not emitteddup of (0,0A)handler #9Procedure call/returnconfirmed_handler
Same handler as (0,0x0A) ImpAdCallFPR4: Call a procedure or import whose result is not returned in EAX: Subs, discarded results, and FPU/Variant returns.
Encoding, evidence and notes
Encoding

Encoding: FE 2C (lead byte FE selects table 4), then 4 operand byte(s); total instruction length 6 byte(s).
No printf operands are declared, but the instruction still consumes operand bytes; see the size above and the observed bytes below. (Phase 3a: flag=0 does not mean 'no operands'.)

Evidence and notes

Emitted by VB6 SP6 (P-code): not observed in about 3,070 probe programs. The slot exists in the runtime's dispatch table, but no tested source construct makes the compiler emit it.

Handler: 0x6610664E, shared by 4 dispatch slots (real opcode #9). This is a duplicate slot of (0,0A) ImpAdCallFPR4. Other slots: (0,0A) ImpAdCallFPR4, (4,29) ImpAdCallFPR4, (4,2A) ImpAdCallFPR4.

Slots sharing this handler

(0,0x0A) ImpAdCallFPR4, (4,0x29) ImpAdCallFPR4, (4,0x2A) ImpAdCallFPR4

Description: none. Handler 0x6610664E, dispatch slot 0x66107DC4, modOpcodes line 304.

ImpAdCallHresult

(0,0x09)emittedprimary of 2handler #8Procedure call/returninferred_corpus
Call an HRESULT-returning runtime helper; raise on failure.

Calls the import (%x), checks the HRESULT and raises a VB error on failure. %2 is the argument byte count. Observed: ::call rtDecFromVar 0x8 for CDec(1).

When the compiler emits it

Emitted for runtime helpers that return HRESULTs (Decimal conversions and similar).

VB6 source (verified: compiles to this slot)
Public Sub Main()
  Dim v As Variant, s As String
  v = CDec(1)
End Sub
Encoding, evidence and notes
Encoding

Encoding: 09, then 4 operand byte(s); total instruction length 5 byte(s).
vbdec template: ::call %x %2
Operands:

  1. %x (call): pool_external_api, 2 byte(s). 16-bit constant-pool index of the callee (Declare'd API, runtime export, or p-code procedure stub).
  2. %2: immediate_word, 2 byte(s). 16-bit immediate.

Observed: 09 00000800 ImpAdCallHresult ::call rtDecFromVar 0x8

Examples
09 00000800  ImpAdCallHresult ::call rtDecFromVar 0x8

From the Phase 4 probe (VB6 SP6, P-code).

Evidence and notes

Emitted by VB6 SP6 (P-code): yes. Minimal probe: probes\op\0_09_ImpAdCallHresult.

Handler: 0x6610B902, shared by 2 dispatch slots (real opcode #8). This is the primary slot. Other slots: (4,4F) ImpAdCallHresult.

Check of vb6_source_eq example: verified: compiles and emits this slot.

Example from the description
Public Sub Main()
  Dim v As Variant, s As String
  v = CDec(1)
End Sub
Slots sharing this handler

(4,0x4F) ImpAdCallHresult

Description: draft, by claude-opus-5-5. Handler 0x6610B902, dispatch slot 0x66106D38, modOpcodes line 298.

ImpAdCallHresult

(4,0x4F)not emitteddup of (0,09)handler #8Procedure call/returnconfirmed_handler
Same handler as (0,0x09) ImpAdCallHresult: Call an HRESULT-returning runtime helper; raise on failure.
Encoding, evidence and notes
Encoding

Encoding: FE 4F (lead byte FE selects table 4), then 4 operand byte(s); total instruction length 6 byte(s).
vbdec template: ::call %x %2
Operands:

  1. %x (call): pool_external_api, 2 byte(s). 16-bit constant-pool index of the callee (Declare'd API, runtime export, or p-code procedure stub).
  2. %2: immediate_word, 2 byte(s). 16-bit immediate.
Evidence and notes

Emitted by VB6 SP6 (P-code): not observed in about 3,070 probe programs. The slot exists in the runtime's dispatch table, but no tested source construct makes the compiler emit it.

Handler: 0x6610B902, shared by 2 dispatch slots (real opcode #8). This is a duplicate slot of (0,09) ImpAdCallHresult. Other slots: (0,09) ImpAdCallHresult.

Slots sharing this handler

(0,0x09) ImpAdCallHresult

Description: none. Handler 0x6610B902, dispatch slot 0x66107E50, modOpcodes line 299.

ImpAdCallI2

(0,0x0B)emittedprimary of 6handler #10Procedure call/returninferred_corpus689 corpus hits
Call a procedure or import and push its 32-bit EAX result (Integer, Boolean, String or Object returns).

Calls the target from the constant pool (%x) and pushes EAX. %2 is the byte count of arguments to drop.

When the compiler emits it

Emitted for calls whose result comes back in EAX and is typed Integer, Boolean, String (BSTR pointer) or Object: user Functions, runtime functions (DoEvents, string functions returning BSTR) and Declares returning Integer/String. Long-returning calls use (0,5E), which shares this handler.

VB6 source (verified: compiles to this slot)
Public Sub Main()
  Dim n As Long
  n = DoEvents
End Sub
Encoding, evidence and notes
Encoding

Encoding: 0B, then 4 operand byte(s); total instruction length 5 byte(s).
vbdec template: %x %2
Operands:

  1. %x: pool_external_api, 2 byte(s). 16-bit constant-pool index of the callee (Declare'd API, runtime export, or p-code procedure stub).
  2. %2: immediate_word, 2 byte(s). 16-bit immediate.

Observed: 0B 00000000 ImpAdCallI2 rtcDoEvents 0x0

Examples
Form1.LoadPlugins @ 0x4644FC | 464528    0B 06000400           ImpAdCallI2 fso.Proc_440BCC 0x4
Form1.LoadPlugins @ 0x4644FC | 464656    0B 0D000400           ImpAdCallI2 fso.Proc_449624 0x4
Form1.LoadPlugins @ 0x4644FC | 464699    0B 10000000           ImpAdCallI2 rtcErrObj 0x0

689 occurrence(s) in PDFStreamDumper.

Evidence and notes

Emitted by VB6 SP6 (P-code): yes. Minimal probe: probes\op\0_0B_ImpAdCallI2.

Handler: 0x6610668C, shared by 6 dispatch slots (real opcode #10). This is the primary slot. Other slots: (0,5E) ImpAdCallI4, (4,21) ImpAdCallI4, (4,22) ImpAdCallI4, (4,27) ImpAdCallI4, (4,28) ImpAdCallI4.

Compile-time slot selection: the compiler picks different slots of this handler for different source types:

  • (0,0B): Dim n As Long : n = DoEvents
  • (0,5E): Dim n As Long : n = GetTickCount()

Check of vb6_source_eq example: verified: compiles and emits this slot.

Corpus: 689 occurrence(s) in PDFStreamDumper_p.exe.

Example from the description
Function F() As Integer
  F = 1
End Function
Sub Main()
  Dim n As Integer
  n = F()
End Sub
Slots sharing this handler

(0,0x5E) ImpAdCallI4, (4,0x21) ImpAdCallI4, (4,0x22) ImpAdCallI4, (4,0x27) ImpAdCallI4, (4,0x28) ImpAdCallI4

Description: draft, by claude-opus-5-5. Handler 0x6610668C, dispatch slot 0x66106D40, modOpcodes line 306.

ImpAdCallI4

(0,0x5E)emitteddup of (0,0B)handler #10Procedure call/returninferred_corpus118 corpus hits
Call a procedure or import and push its 32-bit Long result (EAX).

Calls the target from the constant pool (%x) and pushes EAX. addESP:%2 is the argument byte count.

When the compiler emits it

Emitted for calls whose result is a Long: Declare functions As Long, user Functions As Long, and runtime functions returning Long (VarType, Seek, Erl, ...). Same handler as ImpAdCallI2 (0,0B); the slot records the Long return type.

VB6 source (verified: compiles to this slot)
Private Declare Function GetTickCount Lib "kernel32" () As Long

Public Sub Main()
  Dim n As Long
  n = GetTickCount()
End Sub
Encoding, evidence and notes
Encoding

Encoding: 5E, then 4 operand byte(s); total instruction length 5 byte(s).
vbdec template: %x addESP:%2
Operands:

  1. %x: pool_external_api, 2 byte(s). 16-bit constant-pool index of the callee (Declare'd API, runtime export, or p-code procedure stub).
  2. %2 (addESP): immediate_word, 2 byte(s). 16-bit immediate.

Observed: 5E 00000000 ImpAdCallI4 kernel32.GetTickCount addESP:0x0

Examples
Form1.LoadPlugins @ 0x4644FC | 4645C3    5E 0A000800           ImpAdCallI4 fso.Proc_453AA8 addESP:0x8
Form1.LoadPlugins @ 0x4644FC | 4646D2    5E 13001400           ImpAdCallI4 rtcMsgBox addESP:0x14
Form1.mnub64decode_Click @ 0x451280 | 45134A    5E 30000400           ImpAdCallI4 rtcFileLen addESP:0x4

118 occurrence(s) in PDFStreamDumper.

Evidence and notes

Emitted by VB6 SP6 (P-code): yes. Minimal probe: probes\op\0_5E_ImpAdCallI4.

Handler: 0x6610668C, shared by 6 dispatch slots (real opcode #10). This is a duplicate slot of (0,0B) ImpAdCallI2. Other slots: (0,0B) ImpAdCallI2, (4,21) ImpAdCallI4, (4,22) ImpAdCallI4, (4,27) ImpAdCallI4, (4,28) ImpAdCallI4.

Compile-time slot selection: the compiler picks different slots of this handler for different source types:

  • (0,0B): Dim n As Long : n = DoEvents
  • (0,5E): Dim n As Long : n = GetTickCount()

Check of vb6_source_eq example: verified: compiles and emits this slot.

Corpus: 118 occurrence(s) in PDFStreamDumper_p.exe.

Example from the description
Private Declare Function GetTickCount Lib "kernel32" () As Long
Sub Main()
  Dim n As Long
  n = GetTickCount()
End Sub
Slots sharing this handler

(0,0x0B) ImpAdCallI2, (4,0x21) ImpAdCallI4, (4,0x22) ImpAdCallI4, (4,0x27) ImpAdCallI4, (4,0x28) ImpAdCallI4

Description: draft, by claude-opus-5-5. Handler 0x6610668C, dispatch slot 0x66106E8C, modOpcodes line 310.

ImpAdCallI4

(4,0x21)not emitteddup of (0,0B)handler #10Procedure call/returnconfirmed_handler
Same handler as (0,0x0B) ImpAdCallI2: Call a procedure or import and push its 32-bit EAX result (Integer, Boolean, String or Object returns).
Encoding, evidence and notes
Encoding

Encoding: FE 21 (lead byte FE selects table 4), then 4 operand byte(s); total instruction length 6 byte(s).
vbdec template: %x addESP:%2
Operands:

  1. %x: pool_external_api, 2 byte(s). 16-bit constant-pool index of the callee (Declare'd API, runtime export, or p-code procedure stub).
  2. %2 (addESP): immediate_word, 2 byte(s). 16-bit immediate.
Evidence and notes

Emitted by VB6 SP6 (P-code): not observed in about 3,070 probe programs. The slot exists in the runtime's dispatch table, but no tested source construct makes the compiler emit it.

Handler: 0x6610668C, shared by 6 dispatch slots (real opcode #10). This is a duplicate slot of (0,0B) ImpAdCallI2. Other slots: (0,0B) ImpAdCallI2, (0,5E) ImpAdCallI4, (4,22) ImpAdCallI4, (4,27) ImpAdCallI4, (4,28) ImpAdCallI4.

Compile-time slot selection: the compiler picks different slots of this handler for different source types:

  • (0,0B): Dim n As Long : n = DoEvents
  • (0,5E): Dim n As Long : n = GetTickCount()
Slots sharing this handler

(0,0x0B) ImpAdCallI2, (0,0x5E) ImpAdCallI4, (4,0x22) ImpAdCallI4, (4,0x27) ImpAdCallI4, (4,0x28) ImpAdCallI4

Description: none. Handler 0x6610668C, dispatch slot 0x66107D98, modOpcodes line 311.

ImpAdCallI4

(4,0x22)not emitteddup of (0,0B)handler #10Procedure call/returnconfirmed_handler
Same handler as (0,0x0B) ImpAdCallI2: Call a procedure or import and push its 32-bit EAX result (Integer, Boolean, String or Object returns).
Encoding, evidence and notes
Encoding

Encoding: FE 22 (lead byte FE selects table 4), then 4 operand byte(s); total instruction length 6 byte(s).
vbdec template: %x addESP:%2
Operands:

  1. %x: pool_external_api, 2 byte(s). 16-bit constant-pool index of the callee (Declare'd API, runtime export, or p-code procedure stub).
  2. %2 (addESP): immediate_word, 2 byte(s). 16-bit immediate.
Evidence and notes

Emitted by VB6 SP6 (P-code): not observed in about 3,070 probe programs. The slot exists in the runtime's dispatch table, but no tested source construct makes the compiler emit it.

Handler: 0x6610668C, shared by 6 dispatch slots (real opcode #10). This is a duplicate slot of (0,0B) ImpAdCallI2. Other slots: (0,0B) ImpAdCallI2, (0,5E) ImpAdCallI4, (4,21) ImpAdCallI4, (4,27) ImpAdCallI4, (4,28) ImpAdCallI4.

Compile-time slot selection: the compiler picks different slots of this handler for different source types:

  • (0,0B): Dim n As Long : n = DoEvents
  • (0,5E): Dim n As Long : n = GetTickCount()
Slots sharing this handler

(0,0x0B) ImpAdCallI2, (0,0x5E) ImpAdCallI4, (4,0x21) ImpAdCallI4, (4,0x27) ImpAdCallI4, (4,0x28) ImpAdCallI4

Description: none. Handler 0x6610668C, dispatch slot 0x66107D9C, modOpcodes line 312.

ImpAdCallI4

(4,0x27)not emitteddup of (0,0B)handler #10Procedure call/returnconfirmed_handler
Same handler as (0,0x0B) ImpAdCallI2: Call a procedure or import and push its 32-bit EAX result (Integer, Boolean, String or Object returns).
Encoding, evidence and notes
Encoding

Encoding: FE 27 (lead byte FE selects table 4), then 4 operand byte(s); total instruction length 6 byte(s).
vbdec template: %x addESP:%2
Operands:

  1. %x: pool_external_api, 2 byte(s). 16-bit constant-pool index of the callee (Declare'd API, runtime export, or p-code procedure stub).
  2. %2 (addESP): immediate_word, 2 byte(s). 16-bit immediate.
Evidence and notes

Emitted by VB6 SP6 (P-code): not observed in about 3,070 probe programs. The slot exists in the runtime's dispatch table, but no tested source construct makes the compiler emit it.

Handler: 0x6610668C, shared by 6 dispatch slots (real opcode #10). This is a duplicate slot of (0,0B) ImpAdCallI2. Other slots: (0,0B) ImpAdCallI2, (0,5E) ImpAdCallI4, (4,21) ImpAdCallI4, (4,22) ImpAdCallI4, (4,28) ImpAdCallI4.

Compile-time slot selection: the compiler picks different slots of this handler for different source types:

  • (0,0B): Dim n As Long : n = DoEvents
  • (0,5E): Dim n As Long : n = GetTickCount()
Slots sharing this handler

(0,0x0B) ImpAdCallI2, (0,0x5E) ImpAdCallI4, (4,0x21) ImpAdCallI4, (4,0x22) ImpAdCallI4, (4,0x28) ImpAdCallI4

Description: none. Handler 0x6610668C, dispatch slot 0x66107DB0, modOpcodes line 313.

ImpAdCallI4

(4,0x28)not emitteddup of (0,0B)handler #10Procedure call/returnconfirmed_handler
Same handler as (0,0x0B) ImpAdCallI2: Call a procedure or import and push its 32-bit EAX result (Integer, Boolean, String or Object returns).
Encoding, evidence and notes
Encoding

Encoding: FE 28 (lead byte FE selects table 4), then 4 operand byte(s); total instruction length 6 byte(s).
vbdec template: %x addESP:%2
Operands:

  1. %x: pool_external_api, 2 byte(s). 16-bit constant-pool index of the callee (Declare'd API, runtime export, or p-code procedure stub).
  2. %2 (addESP): immediate_word, 2 byte(s). 16-bit immediate.
Evidence and notes

Emitted by VB6 SP6 (P-code): not observed in about 3,070 probe programs. The slot exists in the runtime's dispatch table, but no tested source construct makes the compiler emit it.

Handler: 0x6610668C, shared by 6 dispatch slots (real opcode #10). This is a duplicate slot of (0,0B) ImpAdCallI2. Other slots: (0,0B) ImpAdCallI2, (0,5E) ImpAdCallI4, (4,21) ImpAdCallI4, (4,22) ImpAdCallI4, (4,27) ImpAdCallI4.

Compile-time slot selection: the compiler picks different slots of this handler for different source types:

  • (0,0B): Dim n As Long : n = DoEvents
  • (0,5E): Dim n As Long : n = GetTickCount()
Slots sharing this handler

(0,0x0B) ImpAdCallI2, (0,0x5E) ImpAdCallI4, (4,0x21) ImpAdCallI4, (4,0x22) ImpAdCallI4, (4,0x27) ImpAdCallI4

Description: none. Handler 0x6610668C, dispatch slot 0x66107DB4, modOpcodes line 314.

ImpAdCallNonVirt

(5,0x1E)emittedhandler #752Procedure call/returncontextual2 corpus hits
Non-virtual (direct) call to a Friend procedure of a class.

Calls the procedure directly rather than through the vtable, passing the object as this. Operand: pool index of the procedure; vbdec also shows the stack-check byte count (espCheck).

When the compiler emits it

Emitted for calls to Friend methods (o.FrFn()), which are not part of the COM interface.

VB6 source (verified: compiles to this slot)
Public Sub Main()
  Dim o As CThing, b As Boolean
  b = o.FrFn()
End Sub
' ---- CThing.cls
Public pub As Boolean
Private m As Boolean
Private ma(3) As Boolean
Public Sub Work()
  Dim b As Boolean, i As Long
  m = b
  b = m
  pub = b
  b = pub
  i = 1
  ma(i) = b
  b = ma(i)
  b = Me.Prop
  Me.pub = b
  b = Fn()
  Sb
  Me.Sb
End Sub
Public Property Get Prop() As Boolean
  Prop = m
End Property
Public Property Let Prop(v As Boolean)
  m = v
End Property
Public Function Fn() As Boolean
  Fn = m
End Function
Private Function PFn() As Boolean
  PFn = m
End Function
Public Sub Sb()
  Dim b As Boolean
  b = PFn()
End Sub
Friend Function FrFn() As Boolean
  FrFn = m
End Function
Encoding, evidence and notes
Encoding

Encoding: FF 1E (lead byte FF selects table 5), then 4 operand byte(s); total instruction length 6 byte(s).
No printf operands are declared, but the instruction still consumes operand bytes; see the size above and the observed bytes below. (Phase 3a: flag=0 does not mean 'no operands'.)
Observed: FF1E 00000800 ImpAdCallNonVirt CThing.Proc_401944 espCheck: 8

Examples
FF1E 00000800  ImpAdCallNonVirt CThing.Proc_401944 espCheck: 8

From the Phase 4 probe (VB6 SP6, P-code).

Evidence and notes

Emitted by VB6 SP6 (P-code): yes. Minimal probe: probes\op\5_1E_ImpAdCallNonVirt.

Handler: 0x6610B8FA, unique to this slot (real opcode #752).

Check of vb6_source_eq example: verified: compiles and emits this slot.

Corpus: 2 occurrence(s) in PDFStreamDumper_p.exe.

Example from the description
Public Sub Main()
  Dim o As CThing, b As Boolean
  b = o.FrFn()
End Sub
' ---- CThing.cls
Public pub As Boolean
Private m As Boolean
Private ma(3) As Boolean
Public Sub Work()
  Dim b As Boolean, i As Long
  m = b
  b = m
  pub = b
  b = pub
  i = 1
  ma(i) = b
  b = ma(i)
  b = Me.Prop
  Me.pub = b
  b = Fn()
  Sb
  Me.Sb
End Sub
Public Property Get Prop() As Boolean
  Prop = m
End Property
Public Property Let Prop(v As Boolean)
  m = v
End Property
Public Function Fn() As Boolean
  Fn = m
End Function
Private Function PFn() As Boolean
  PFn = m
End Function
Public Sub Sb()
  Dim b As Boolean
  b = PFn()
End Sub
Friend Function FrFn() As Boolean
  FrFn = m
End Function

Description: draft, by claude-opus-5-5. Handler 0x6610B8FA, dispatch slot 0x6610818C, modOpcodes line 320.

ImpAdCallR4

(4,0x23)not emittedhandler #609Procedure call/returninferred_corpus
No description yet.
Encoding, evidence and notes
Encoding

Encoding: FE 23 (lead byte FE selects table 4), then 4 operand byte(s); total instruction length 6 byte(s).
vbdec template: %x addESP:%2
Operands:

  1. %x: pool_external_api, 2 byte(s). 16-bit constant-pool index of the callee (Declare'd API, runtime export, or p-code procedure stub).
  2. %2 (addESP): immediate_word, 2 byte(s). 16-bit immediate.
Evidence and notes

Emitted by VB6 SP6 (P-code): not observed in about 3,070 probe programs. The slot exists in the runtime's dispatch table, but no tested source construct makes the compiler emit it.

Handler: 0x6610BA26, unique to this slot (real opcode #609).

Description: none. Handler 0x6610BA26, dispatch slot 0x66107DA0, modOpcodes line 316.

ImpAdCallR8

(4,0x24)not emittedhandler #610Procedure call/returninferred_corpus
No description yet.
Encoding, evidence and notes
Encoding

Encoding: FE 24 (lead byte FE selects table 4), then 4 operand byte(s); total instruction length 6 byte(s).
vbdec template: %x addESP:%2
Operands:

  1. %x: pool_external_api, 2 byte(s). 16-bit constant-pool index of the callee (Declare'd API, runtime export, or p-code procedure stub).
  2. %2 (addESP): immediate_word, 2 byte(s). 16-bit immediate.
Evidence and notes

Emitted by VB6 SP6 (P-code): not observed in about 3,070 probe programs. The slot exists in the runtime's dispatch table, but no tested source construct makes the compiler emit it.

Handler: 0x6610BA88, unique to this slot (real opcode #610).

Description: none. Handler 0x6610BA88, dispatch slot 0x66107DA4, modOpcodes line 317.

ImpAdCallUI1

(4,0x20)emittedhandler #608Procedure call/returninferred_corpus
Call a runtime/import function that returns a Byte (AL); push the result.

Calls the import (%x) and pushes the Byte returned in AL. addESP:%2 is the argument byte count.

When the compiler emits it

Observed: rtcByteValueBstr for AscB(s). Emitted for imports or Declares returning Byte.

VB6 source (verified: compiles to this slot)
Public Sub Main()
  Dim s As String, r As Variant
  r = AscB(s)
End Sub
Encoding, evidence and notes
Encoding

Encoding: FE 20 (lead byte FE selects table 4), then 4 operand byte(s); total instruction length 6 byte(s).
vbdec template: %x addESP:%2
Operands:

  1. %x: pool_external_api, 2 byte(s). 16-bit constant-pool index of the callee (Declare'd API, runtime export, or p-code procedure stub).
  2. %2 (addESP): immediate_word, 2 byte(s). 16-bit immediate.

Observed: FE20 00000400 ImpAdCallUI1 rtcByteValueBstr addESP:0x4

Examples
FE20 00000400  ImpAdCallUI1 rtcByteValueBstr addESP:0x4

From the Phase 4 probe (VB6 SP6, P-code).

Evidence and notes

Emitted by VB6 SP6 (P-code): yes. Minimal probe: probes\op\4_20_ImpAdCallUI1.

Handler: 0x6610BB6F, unique to this slot (real opcode #608).

Check of vb6_source_eq example: verified: compiles and emits this slot.

Example from the description
Public Sub Main()
  Dim s As String, r As Variant
  r = AscB(s)
End Sub

Description: draft, by claude-opus-5-5. Handler 0x6610BB6F, dispatch slot 0x66107D94, modOpcodes line 318.

ImpAd_Load

Load via imported address (const pool) Prefix: Imp = import, Ad = address

ImpAdLdCy

(0,0x77)emittedprimary of 3handler #116Currencyinferred_corpus
Load Currency from a module-level (global) variable.

Reads a Currency (scaled 64-bit integer), and pushes it from a module-level (global) variable.

Stack: [...] -> [..., v:Cy]

Operands: %c: constant-pool index whose slot holds the variable's address.

Standard-EXE module variables (and Public variables of other modules) referenced by address. In ActiveX DLL/EXE projects module variables are per-thread and use FMem* instead.

When the compiler emits it

Emitted for reads of a module-level (global) variable when the value is a Currency. The storage class selects the prefix (ImpAd); the value class selects the suffix (Cy).

VB6 source (verified: compiles to this slot)
Public Sub Main()
  Dim b As Currency
  b = modG.g
End Sub
' ---- modG.bas
Public g As Currency
Encoding, evidence and notes
Encoding

Encoding: 77, then 2 operand byte(s); total instruction length 3 byte(s).
vbdec template: %c
Operands:

  1. %c: pool_proc_or_global, 2 byte(s). 16-bit constant-pool index; the pool slot holds an address (a global variable, a procedure, or an object-table entry).

Observed: 77 0000 ImpAdLdCy global_402018

Examples
77 0000  ImpAdLdCy global_402018

From the Phase 4 probe (VB6 SP6, P-code).

Evidence and notes

Emitted by VB6 SP6 (P-code): yes. Minimal probe: probes\op\0_77_ImpAdLdCy.

Handler: 0x6610A717, shared by 3 dispatch slots (real opcode #116). This is the primary slot. Other slots: (3,A4) ImpAdLdCy, (3,A5) ImpAdLdCy.

Check of vb6_source_eq example: verified: compiles and emits this slot.

Example from the description
Public Sub Main()
  Dim b As Currency
  b = modG.g
End Sub
' ---- modG.bas
Public g As Currency
Slots sharing this handler

(3,0xA4) ImpAdLdCy, (3,0xA5) ImpAdLdCy

Description: draft, by claude-opus-5-5. Handler 0x6610A717, dispatch slot 0x66106EF0, modOpcodes line 1207.

ImpAdLdCy

(3,0xA4)not emitteddup of (0,77)handler #116Currencyconfirmed_handler
Same handler as (0,0x77) ImpAdLdCy: Load Currency from a module-level (global) variable.
Encoding, evidence and notes
Encoding

Encoding: FD A4 (lead byte FD selects table 3), then 2 operand byte(s); total instruction length 4 byte(s).
vbdec template: %c
Operands:

  1. %c: pool_proc_or_global, 2 byte(s). 16-bit constant-pool index; the pool slot holds an address (a global variable, a procedure, or an object-table entry).
Evidence and notes

Emitted by VB6 SP6 (P-code): not observed in about 3,070 probe programs. The slot exists in the runtime's dispatch table, but no tested source construct makes the compiler emit it.

Handler: 0x6610A717, shared by 3 dispatch slots (real opcode #116). This is a duplicate slot of (0,77) ImpAdLdCy. Other slots: (0,77) ImpAdLdCy, (3,A5) ImpAdLdCy.

Slots sharing this handler

(0,0x77) ImpAdLdCy, (3,0xA5) ImpAdLdCy

Description: none. Handler 0x6610A717, dispatch slot 0x66107BA4, modOpcodes line 1219.

ImpAdLdCy

(3,0xA5)not emitteddup of (0,77)handler #116Currencyconfirmed_handler
Same handler as (0,0x77) ImpAdLdCy: Load Currency from a module-level (global) variable.
Encoding, evidence and notes
Encoding

Encoding: FD A5 (lead byte FD selects table 3), then 2 operand byte(s); total instruction length 4 byte(s).
vbdec template: %c
Operands:

  1. %c: pool_proc_or_global, 2 byte(s). 16-bit constant-pool index; the pool slot holds an address (a global variable, a procedure, or an object-table entry).
Evidence and notes

Emitted by VB6 SP6 (P-code): not observed in about 3,070 probe programs. The slot exists in the runtime's dispatch table, but no tested source construct makes the compiler emit it.

Handler: 0x6610A717, shared by 3 dispatch slots (real opcode #116). This is a duplicate slot of (0,77) ImpAdLdCy. Other slots: (0,77) ImpAdLdCy, (3,A4) ImpAdLdCy.

Slots sharing this handler

(0,0x77) ImpAdLdCy, (3,0xA4) ImpAdLdCy

Description: none. Handler 0x6610A717, dispatch slot 0x66107BA8, modOpcodes line 1220.

ImpAdLdFPR4

(0,0x78)emittedprimary of 2handler #117Floating pointinferred_corpus
Load Single from a module-level (global) variable.

Reads a Single, moved through the FPU (fld/fstp dword), and pushes it from a module-level (global) variable.

Stack: [...] -> [..., v:FPR4]

Operands: %c: constant-pool index whose slot holds the variable's address.

Standard-EXE module variables (and Public variables of other modules) referenced by address. In ActiveX DLL/EXE projects module variables are per-thread and use FMem* instead.

When the compiler emits it

Emitted for reads of a module-level (global) variable when the value is a Single. The storage class selects the prefix (ImpAd); the value class selects the suffix (FPR4).

VB6 source (verified: compiles to this slot)
Public Sub Main()
  Dim b As Single
  b = modG.g
End Sub
' ---- modG.bas
Public g As Single
Encoding, evidence and notes
Encoding

Encoding: 78, then 2 operand byte(s); total instruction length 3 byte(s).
vbdec template: %c
Operands:

  1. %c: pool_proc_or_global, 2 byte(s). 16-bit constant-pool index; the pool slot holds an address (a global variable, a procedure, or an object-table entry).

Observed: 78 0000 ImpAdLdFPR4 global_402018

Examples
78 0000  ImpAdLdFPR4 global_402018

From the Phase 4 probe (VB6 SP6, P-code).

Evidence and notes

Emitted by VB6 SP6 (P-code): yes. Minimal probe: probes\op\0_78_ImpAdLdFPR4.

Handler: 0x6610A734, shared by 2 dispatch slots (real opcode #117). This is the primary slot. Other slots: (3,A9) ImpAdLdFPR4.

Check of vb6_source_eq example: verified: compiles and emits this slot.

Example from the description
Public Sub Main()
  Dim b As Single
  b = modG.g
End Sub
' ---- modG.bas
Public g As Single
Slots sharing this handler

(3,0xA9) ImpAdLdFPR4

Description: draft, by claude-opus-5-5. Handler 0x6610A734, dispatch slot 0x66106EF4, modOpcodes line 1208.

ImpAdLdFPR4

(3,0xA9)not emitteddup of (0,78)handler #117Floating pointconfirmed_handler
Same handler as (0,0x78) ImpAdLdFPR4: Load Single from a module-level (global) variable.
Encoding, evidence and notes
Encoding

Encoding: FD A9 (lead byte FD selects table 3), then 2 operand byte(s); total instruction length 4 byte(s).
vbdec template: %c
Operands:

  1. %c: pool_proc_or_global, 2 byte(s). 16-bit constant-pool index; the pool slot holds an address (a global variable, a procedure, or an object-table entry).
Evidence and notes

Emitted by VB6 SP6 (P-code): not observed in about 3,070 probe programs. The slot exists in the runtime's dispatch table, but no tested source construct makes the compiler emit it.

Handler: 0x6610A734, shared by 2 dispatch slots (real opcode #117). This is a duplicate slot of (0,78) ImpAdLdFPR4. Other slots: (0,78) ImpAdLdFPR4.

Slots sharing this handler

(0,0x78) ImpAdLdFPR4

Description: none. Handler 0x6610A734, dispatch slot 0x66107BB8, modOpcodes line 1224.

ImpAdLdFPR8

(0,0x79)emittedprimary of 2handler #118Floating pointinferred_corpus
Load Double/Date from a module-level (global) variable.

Reads a Double or Date, moved through the FPU (fld/fstp qword), and pushes it from a module-level (global) variable.

Stack: [...] -> [..., v:FPR8]

Operands: %c: constant-pool index whose slot holds the variable's address.

Standard-EXE module variables (and Public variables of other modules) referenced by address. In ActiveX DLL/EXE projects module variables are per-thread and use FMem* instead.

When the compiler emits it

Emitted for reads of a module-level (global) variable when the value is a Double/Date. The storage class selects the prefix (ImpAd); the value class selects the suffix (FPR8).

VB6 source (verified: compiles to this slot)
Public Sub Main()
  Dim b As Date
  b = modG.g
End Sub
' ---- modG.bas
Public g As Date
Encoding, evidence and notes
Encoding

Encoding: 79, then 2 operand byte(s); total instruction length 3 byte(s).
vbdec template: %c
Operands:

  1. %c: pool_proc_or_global, 2 byte(s). 16-bit constant-pool index; the pool slot holds an address (a global variable, a procedure, or an object-table entry).

Observed: 79 0000 ImpAdLdFPR8 global_402018

Examples
79 0000  ImpAdLdFPR8 global_402018

From the Phase 4 probe (VB6 SP6, P-code).

Evidence and notes

Emitted by VB6 SP6 (P-code): yes. Minimal probe: probes\op\0_79_ImpAdLdFPR8.

Handler: 0x6610A74E, shared by 2 dispatch slots (real opcode #118). This is the primary slot. Other slots: (3,AA) ImpAdLdFPR8.

Check of vb6_source_eq example: verified: compiles and emits this slot.

Example from the description
Public Sub Main()
  Dim b As Date
  b = modG.g
End Sub
' ---- modG.bas
Public g As Date
Slots sharing this handler

(3,0xAA) ImpAdLdFPR8

Description: draft, by claude-opus-5-5. Handler 0x6610A74E, dispatch slot 0x66106EF8, modOpcodes line 1209.

ImpAdLdFPR8

(3,0xAA)not emitteddup of (0,79)handler #118Floating pointconfirmed_handler
Same handler as (0,0x79) ImpAdLdFPR8: Load Double/Date from a module-level (global) variable.
Encoding, evidence and notes
Encoding

Encoding: FD AA (lead byte FD selects table 3), then 2 operand byte(s); total instruction length 4 byte(s).
vbdec template: %c
Operands:

  1. %c: pool_proc_or_global, 2 byte(s). 16-bit constant-pool index; the pool slot holds an address (a global variable, a procedure, or an object-table entry).
Evidence and notes

Emitted by VB6 SP6 (P-code): not observed in about 3,070 probe programs. The slot exists in the runtime's dispatch table, but no tested source construct makes the compiler emit it.

Handler: 0x6610A74E, shared by 2 dispatch slots (real opcode #118). This is a duplicate slot of (0,79) ImpAdLdFPR8. Other slots: (0,79) ImpAdLdFPR8.

Slots sharing this handler

(0,0x79) ImpAdLdFPR8

Description: none. Handler 0x6610A74E, dispatch slot 0x66107BBC, modOpcodes line 1225.

ImpAdLdI2

(0,0x75)emittedprimary of 2handler #114Integerinferred_corpus
Load Integer/Boolean from a module-level (global) variable.

Reads a 16-bit value (Integer or Boolean), and pushes it from a module-level (global) variable.

Stack: [...] -> [..., v:I2]

Operands: %c: constant-pool index whose slot holds the variable's address.

Standard-EXE module variables (and Public variables of other modules) referenced by address. In ActiveX DLL/EXE projects module variables are per-thread and use FMem* instead.

When the compiler emits it

Emitted for reads of a module-level (global) variable when the value is a Integer/Boolean. The storage class selects the prefix (ImpAd); the value class selects the suffix (I2).

VB6 source (verified: compiles to this slot)
Public Sub Main()
  Dim b As Boolean
  b = modG.g
End Sub
' ---- modG.bas
Public g As Boolean
Encoding, evidence and notes
Encoding

Encoding: 75, then 2 operand byte(s); total instruction length 3 byte(s).
vbdec template: %c
Operands:

  1. %c: pool_proc_or_global, 2 byte(s). 16-bit constant-pool index; the pool slot holds an address (a global variable, a procedure, or an object-table entry).

Observed: 75 0000 ImpAdLdI2 global_402018

Examples
75 0000  ImpAdLdI2 global_402018

From the Phase 4 probe (VB6 SP6, P-code).

Evidence and notes

Emitted by VB6 SP6 (P-code): yes. Minimal probe: probes\op\0_75_ImpAdLdI2.

Handler: 0x66105A75, shared by 2 dispatch slots (real opcode #114). This is the primary slot. Other slots: (3,A1) ImpAdLdI2.

Check of vb6_source_eq example: verified: compiles and emits this slot.

Example from the description
Public Sub Main()
  Dim b As Boolean
  b = modG.g
End Sub
' ---- modG.bas
Public g As Boolean
Slots sharing this handler

(3,0xA1) ImpAdLdI2

Description: draft, by claude-opus-5-5. Handler 0x66105A75, dispatch slot 0x66106EE8, modOpcodes line 1205.

ImpAdLdI2

(3,0xA1)not emitteddup of (0,75)handler #114Integerconfirmed_handler
Same handler as (0,0x75) ImpAdLdI2: Load Integer/Boolean from a module-level (global) variable.
Encoding, evidence and notes
Encoding

Encoding: FD A1 (lead byte FD selects table 3), then 2 operand byte(s); total instruction length 4 byte(s).
vbdec template: %c
Operands:

  1. %c: pool_proc_or_global, 2 byte(s). 16-bit constant-pool index; the pool slot holds an address (a global variable, a procedure, or an object-table entry).
Evidence and notes

Emitted by VB6 SP6 (P-code): not observed in about 3,070 probe programs. The slot exists in the runtime's dispatch table, but no tested source construct makes the compiler emit it.

Handler: 0x66105A75, shared by 2 dispatch slots (real opcode #114). This is a duplicate slot of (0,75) ImpAdLdI2. Other slots: (0,75) ImpAdLdI2.

Slots sharing this handler

(0,0x75) ImpAdLdI2

Description: none. Handler 0x66105A75, dispatch slot 0x66107B98, modOpcodes line 1216.

ImpAdLdI4

(0,0x76)emittedprimary of 5handler #115Integerinferred_corpus
Load Long from a module-level (global) variable.

Reads a 32-bit value, and pushes it from a module-level (global) variable.

Stack: [...] -> [..., v:I4]

Operands: %c: constant-pool index whose slot holds the variable's address.

Standard-EXE module variables (and Public variables of other modules) referenced by address. In ActiveX DLL/EXE projects module variables are per-thread and use FMem* instead.

When the compiler emits it

Emitted for reads of a module-level (global) variable when the value is a Long. The storage class selects the prefix (ImpAd); the value class selects the suffix (I4).

VB6 source (verified: compiles to this slot)
Public Sub Main()
  Dim b As Long
  b = modG.g
End Sub
' ---- modG.bas
Public g As Long
Encoding, evidence and notes
Encoding

Encoding: 76, then 2 operand byte(s); total instruction length 3 byte(s).
vbdec template: [%c]
Operands:

  1. %c: pool_proc_or_global, 2 byte(s). 16-bit constant-pool index; the pool slot holds an address (a global variable, a procedure, or an object-table entry).

Observed: 76 0000 ImpAdLdI4 [global_402018]

Examples
76 0000  ImpAdLdI4 [global_402018]

From the Phase 4 probe (VB6 SP6, P-code).

Evidence and notes

Emitted by VB6 SP6 (P-code): yes. Minimal probe: probes\op\0_76_ImpAdLdI4.

Handler: 0x66105A91, shared by 5 dispatch slots (real opcode #115). This is the primary slot. Other slots: (3,A2) ImpAdLdStr, (3,A3) ImpAdLdStr, (3,A7) ImpAdLdStr, (3,A8) ImpAdLdStr.

Check of vb6_source_eq example: verified: compiles and emits this slot.

Example from the description
Public Sub Main()
  Dim b As Long
  b = modG.g
End Sub
' ---- modG.bas
Public g As Long
Slots sharing this handler

(3,0xA2) ImpAdLdStr, (3,0xA3) ImpAdLdStr, (3,0xA7) ImpAdLdStr, (3,0xA8) ImpAdLdStr

Description: draft, by claude-opus-5-5. Handler 0x66105A91, dispatch slot 0x66106EEC, modOpcodes line 1206.

ImpAdLdPr

(0,0x22)not emittedprimary of 2handler #33Object / COMinferred_corpus
No description yet.
Encoding, evidence and notes
Encoding

Encoding: 22, then 2 operand byte(s); total instruction length 3 byte(s).
vbdec template: [%c]
Operands:

  1. %c: pool_proc_or_global, 2 byte(s). 16-bit constant-pool index; the pool slot holds an address (a global variable, a procedure, or an object-table entry).
Evidence and notes

Emitted by VB6 SP6 (P-code): not observed in about 3,070 probe programs. The slot exists in the runtime's dispatch table, but no tested source construct makes the compiler emit it.

Handler: 0x6610B238, shared by 2 dispatch slots (real opcode #33). This is the primary slot. Other slots: (3,AB) ImpAdLdPr.

Slots sharing this handler

(3,0xAB) ImpAdLdPr

Description: none. Handler 0x6610B238, dispatch slot 0x66106D9C, modOpcodes line 1203.

ImpAdLdPr

(3,0xAB)not emitteddup of (0,22)handler #33Object / COMconfirmed_handler
No description yet.
Encoding, evidence and notes
Encoding

Encoding: FD AB (lead byte FD selects table 3), then 2 operand byte(s); total instruction length 4 byte(s).
vbdec template: %c
Operands:

  1. %c: pool_proc_or_global, 2 byte(s). 16-bit constant-pool index; the pool slot holds an address (a global variable, a procedure, or an object-table entry).
Evidence and notes

Emitted by VB6 SP6 (P-code): not observed in about 3,070 probe programs. The slot exists in the runtime's dispatch table, but no tested source construct makes the compiler emit it.

Handler: 0x6610B238, shared by 2 dispatch slots (real opcode #33). This is a duplicate slot of (0,22) ImpAdLdPr. Other slots: (0,22) ImpAdLdPr.

Slots sharing this handler

(0,0x22) ImpAdLdPr

Description: none. Handler 0x6610B238, dispatch slot 0x66107BC0, modOpcodes line 1226.

ImpAdLdRf

(0,0x05)emittedprimary of 3handler #4Stack & frameinferred_corpus272 corpus hits
Load through an imported address (ImpAdLdRf).

Reads a value (typed by suffix) through a runtime address resolved from the const pool. Used to access globals exported by Declared libraries and module-level externals.

When the compiler emits it

Emitted for reads of Declared external data or compiler-generated runtime statics.

VB6 source (verified: compiles to this slot)
Public Sub Main()
  Dim n As Long
  n = F(AddressOf CB)
End Sub

Function F(ByVal x As Long) As Long
  F = x
End Function
Sub CB()
End Sub
Encoding, evidence and notes
Encoding

Encoding: 05, then 2 operand byte(s); total instruction length 3 byte(s).
vbdec template: %c
Operands:

  1. %c: pool_proc_or_global, 2 byte(s). 16-bit constant-pool index; the pool slot holds an address (a global variable, a procedure, or an object-table entry).

Observed: 05 0000 ImpAdLdRf modProbe.Proc_401474

Examples
Form1.LoadPlugins @ 0x4644FC | 46450B    05 0100               ImpAdLdRf global_47D11C
Form1.LoadPlugins @ 0x4644FC | 46459B    05 0100               ImpAdLdRf global_47D11C
Form1.LoadPlugins @ 0x4644FC | 4646F3    05 0100               ImpAdLdRf global_47D11C

272 occurrence(s) in PDFStreamDumper.

Evidence and notes

Emitted by VB6 SP6 (P-code): yes. Minimal probe: probes\op\0_05_ImpAdLdRf.

Handler: 0x66105AAB, shared by 3 dispatch slots (real opcode #4). This is the primary slot. Other slots: (3,A6) ImpAdLdRf, (3,AC) ImpAdLdRf.

Corpus: 272 occurrence(s) in PDFStreamDumper_p.exe.

Slots sharing this handler

(3,0xA6) ImpAdLdRf, (3,0xAC) ImpAdLdRf

Description: draft, by claude-opus-4.7. Handler 0x66105AAB, dispatch slot 0x66106D28, modOpcodes line 1204.

ImpAdLdRf

(3,0xA6)not emitteddup of (0,05)handler #4Stack & frameconfirmed_handler
Same handler as (0,0x05) ImpAdLdRf: Load through an imported address (ImpAdLdRf).
Encoding, evidence and notes
Encoding

Encoding: FD A6 (lead byte FD selects table 3), then 2 operand byte(s); total instruction length 4 byte(s).
vbdec template: %c
Operands:

  1. %c: pool_proc_or_global, 2 byte(s). 16-bit constant-pool index; the pool slot holds an address (a global variable, a procedure, or an object-table entry).
Evidence and notes

Emitted by VB6 SP6 (P-code): not observed in about 3,070 probe programs. The slot exists in the runtime's dispatch table, but no tested source construct makes the compiler emit it.

Handler: 0x66105AAB, shared by 3 dispatch slots (real opcode #4). This is a duplicate slot of (0,05) ImpAdLdRf. Other slots: (0,05) ImpAdLdRf, (3,AC) ImpAdLdRf.

Slots sharing this handler

(0,0x05) ImpAdLdRf, (3,0xAC) ImpAdLdRf

Description: none. Handler 0x66105AAB, dispatch slot 0x66107BAC, modOpcodes line 1221.

ImpAdLdRf

(3,0xAC)not emitteddup of (0,05)handler #4Stack & frameconfirmed_handler
Same handler as (0,0x05) ImpAdLdRf: Load through an imported address (ImpAdLdRf).
Encoding, evidence and notes
Encoding

Encoding: FD AC (lead byte FD selects table 3), then 2 operand byte(s); total instruction length 4 byte(s).
vbdec template: %c
Operands:

  1. %c: pool_proc_or_global, 2 byte(s). 16-bit constant-pool index; the pool slot holds an address (a global variable, a procedure, or an object-table entry).
Evidence and notes

Emitted by VB6 SP6 (P-code): not observed in about 3,070 probe programs. The slot exists in the runtime's dispatch table, but no tested source construct makes the compiler emit it.

Handler: 0x66105AAB, shared by 3 dispatch slots (real opcode #4). This is a duplicate slot of (0,05) ImpAdLdRf. Other slots: (0,05) ImpAdLdRf, (3,A6) ImpAdLdRf.

Slots sharing this handler

(0,0x05) ImpAdLdRf, (3,0xA6) ImpAdLdRf

Description: none. Handler 0x66105AAB, dispatch slot 0x66107BC4, modOpcodes line 1227.

ImpAdLdStr

(3,0xA2)not emitteddup of (0,76)handler #115Stringinferred_corpus
Same handler as (0,0x76) ImpAdLdI4: Load Long from a module-level (global) variable.
Encoding, evidence and notes
Encoding

Encoding: FD A2 (lead byte FD selects table 3), then 2 operand byte(s); total instruction length 4 byte(s).
vbdec template: %c
Operands:

  1. %c: pool_proc_or_global, 2 byte(s). 16-bit constant-pool index; the pool slot holds an address (a global variable, a procedure, or an object-table entry).
Evidence and notes

Emitted by VB6 SP6 (P-code): not observed in about 3,070 probe programs. The slot exists in the runtime's dispatch table, but no tested source construct makes the compiler emit it.

Handler: 0x66105A91, shared by 5 dispatch slots (real opcode #115). This is a duplicate slot of (0,76) ImpAdLdI4. Other slots: (0,76) ImpAdLdI4, (3,A3) ImpAdLdStr, (3,A7) ImpAdLdStr, (3,A8) ImpAdLdStr.

Slots sharing this handler

(0,0x76) ImpAdLdI4, (3,0xA3) ImpAdLdStr, (3,0xA7) ImpAdLdStr, (3,0xA8) ImpAdLdStr

Description: none. Handler 0x66105A91, dispatch slot 0x66107B9C, modOpcodes line 1217.

ImpAdLdStr

(3,0xA3)not emitteddup of (0,76)handler #115Stringconfirmed_handler
Same handler as (0,0x76) ImpAdLdI4: Load Long from a module-level (global) variable.
Encoding, evidence and notes
Encoding

Encoding: FD A3 (lead byte FD selects table 3), then 2 operand byte(s); total instruction length 4 byte(s).
vbdec template: %c
Operands:

  1. %c: pool_proc_or_global, 2 byte(s). 16-bit constant-pool index; the pool slot holds an address (a global variable, a procedure, or an object-table entry).
Evidence and notes

Emitted by VB6 SP6 (P-code): not observed in about 3,070 probe programs. The slot exists in the runtime's dispatch table, but no tested source construct makes the compiler emit it.

Handler: 0x66105A91, shared by 5 dispatch slots (real opcode #115). This is a duplicate slot of (0,76) ImpAdLdI4. Other slots: (0,76) ImpAdLdI4, (3,A2) ImpAdLdStr, (3,A7) ImpAdLdStr, (3,A8) ImpAdLdStr.

Slots sharing this handler

(0,0x76) ImpAdLdI4, (3,0xA2) ImpAdLdStr, (3,0xA7) ImpAdLdStr, (3,0xA8) ImpAdLdStr

Description: none. Handler 0x66105A91, dispatch slot 0x66107BA0, modOpcodes line 1218.

ImpAdLdStr

(3,0xA7)not emitteddup of (0,76)handler #115Stringconfirmed_handler
Same handler as (0,0x76) ImpAdLdI4: Load Long from a module-level (global) variable.
Encoding, evidence and notes
Encoding

Encoding: FD A7 (lead byte FD selects table 3), then 2 operand byte(s); total instruction length 4 byte(s).
vbdec template: %c
Operands:

  1. %c: pool_proc_or_global, 2 byte(s). 16-bit constant-pool index; the pool slot holds an address (a global variable, a procedure, or an object-table entry).
Evidence and notes

Emitted by VB6 SP6 (P-code): not observed in about 3,070 probe programs. The slot exists in the runtime's dispatch table, but no tested source construct makes the compiler emit it.

Handler: 0x66105A91, shared by 5 dispatch slots (real opcode #115). This is a duplicate slot of (0,76) ImpAdLdI4. Other slots: (0,76) ImpAdLdI4, (3,A2) ImpAdLdStr, (3,A3) ImpAdLdStr, (3,A8) ImpAdLdStr.

Slots sharing this handler

(0,0x76) ImpAdLdI4, (3,0xA2) ImpAdLdStr, (3,0xA3) ImpAdLdStr, (3,0xA8) ImpAdLdStr

Description: none. Handler 0x66105A91, dispatch slot 0x66107BB0, modOpcodes line 1222.

ImpAdLdStr

(3,0xA8)not emitteddup of (0,76)handler #115Stringconfirmed_handler
Same handler as (0,0x76) ImpAdLdI4: Load Long from a module-level (global) variable.
Encoding, evidence and notes
Encoding

Encoding: FD A8 (lead byte FD selects table 3), then 2 operand byte(s); total instruction length 4 byte(s).
vbdec template: %c
Operands:

  1. %c: pool_proc_or_global, 2 byte(s). 16-bit constant-pool index; the pool slot holds an address (a global variable, a procedure, or an object-table entry).
Evidence and notes

Emitted by VB6 SP6 (P-code): not observed in about 3,070 probe programs. The slot exists in the runtime's dispatch table, but no tested source construct makes the compiler emit it.

Handler: 0x66105A91, shared by 5 dispatch slots (real opcode #115). This is a duplicate slot of (0,76) ImpAdLdI4. Other slots: (0,76) ImpAdLdI4, (3,A2) ImpAdLdStr, (3,A3) ImpAdLdStr, (3,A7) ImpAdLdStr.

Slots sharing this handler

(0,0x76) ImpAdLdI4, (3,0xA2) ImpAdLdStr, (3,0xA3) ImpAdLdStr, (3,0xA7) ImpAdLdStr

Description: none. Handler 0x66105A91, dispatch slot 0x66107BB4, modOpcodes line 1223.

ImpAdLdUI1

(3,0xA0)emittedhandler #553Integerinferred_corpus
Load Byte from a module-level (global) variable.

Reads a Byte (stored as 1 byte, carried on the stack widened to 16/32 bits), and pushes it from a module-level (global) variable.

Stack: [...] -> [..., v:UI1]

Operands: %c: constant-pool index whose slot holds the variable's address.

Standard-EXE module variables (and Public variables of other modules) referenced by address. In ActiveX DLL/EXE projects module variables are per-thread and use FMem* instead.

When the compiler emits it

Emitted for reads of a module-level (global) variable when the value is a Byte. The storage class selects the prefix (ImpAd); the value class selects the suffix (UI1).

VB6 source (verified: compiles to this slot)
Public Sub Main()
  Dim b As Byte
  b = modG.g
End Sub
' ---- modG.bas
Public g As Byte
Encoding, evidence and notes
Encoding

Encoding: FD A0 (lead byte FD selects table 3), then 2 operand byte(s); total instruction length 4 byte(s).
vbdec template: %c
Operands:

  1. %c: pool_proc_or_global, 2 byte(s). 16-bit constant-pool index; the pool slot holds an address (a global variable, a procedure, or an object-table entry).

Observed: FDA0 0000 ImpAdLdUI1 global_402018

Examples
FDA0 0000  ImpAdLdUI1 global_402018

From the Phase 4 probe (VB6 SP6, P-code).

Evidence and notes

Emitted by VB6 SP6 (P-code): yes. Minimal probe: probes\op\3_A0_ImpAdLdUI1.

Handler: 0x6610A6FB, unique to this slot (real opcode #553).

Check of vb6_source_eq example: verified: compiles and emits this slot.

Example from the description
Public Sub Main()
  Dim b As Byte
  b = modG.g
End Sub
' ---- modG.bas
Public g As Byte

Description: draft, by claude-opus-5-5. Handler 0x6610A6FB, dispatch slot 0x66107B94, modOpcodes line 1215.

ImpAdLdVar

(3,0xAD)not emittedhandler #554Variantinferred_corpus
No description yet.
Encoding, evidence and notes
Encoding

Encoding: FD AD (lead byte FD selects table 3), then 2 operand byte(s); total instruction length 4 byte(s).
vbdec template: %c
Operands:

  1. %c: pool_proc_or_global, 2 byte(s). 16-bit constant-pool index; the pool slot holds an address (a global variable, a procedure, or an object-table entry).
Evidence and notes

Emitted by VB6 SP6 (P-code): not observed in about 3,070 probe programs. The slot exists in the runtime's dispatch table, but no tested source construct makes the compiler emit it.

Handler: 0x6610B16B, unique to this slot (real opcode #554).

Description: none. Handler 0x6610B16B, dispatch slot 0x66107BC8, modOpcodes line 1228.

ImpAd_Store

Store via imported address Prefix: Imp = import, Ad = address

ImpAdStAd

(3,0xB8)emittedhandler #558Object / COMinferred_corpus
Store object reference into a module-level (global) variable.

Pops an object pointer (Set). The destination's old reference is Released and the new one is AddRef'd, and writes it to a module-level (global) variable.

Stack: [..., v:Ad] -> [...]

Operands: %c: constant-pool index whose slot holds the variable's address.

Standard-EXE module variables (and Public variables of other modules) referenced by address. In ActiveX DLL/EXE projects module variables are per-thread and use FMem* instead.

When the compiler emits it

Emitted for assignments to a module-level (global) variable when the value is a object reference. The storage class selects the prefix (ImpAd); the value class selects the suffix (Ad).

VB6 source (verified: compiles to this slot)
Public Sub Main()
  Dim o As Object
  Set modG.go = o
End Sub

Function F() As Object
End Function
' ---- modG.bas
Public go As Object, gu As IUnknown, gv As Variant
Encoding, evidence and notes
Encoding

Encoding: FD B8 (lead byte FD selects table 3), then 2 operand byte(s); total instruction length 4 byte(s).
vbdec template: %c
Operands:

  1. %c: pool_proc_or_global, 2 byte(s). 16-bit constant-pool index; the pool slot holds an address (a global variable, a procedure, or an object-table entry).

Observed: FDB8 0000 ImpAdStAd global_402018

Examples
FDB8 0000  ImpAdStAd global_402018

From the Phase 4 probe (VB6 SP6, P-code).

Evidence and notes

Emitted by VB6 SP6 (P-code): yes. Minimal probe: probes\op\3_B8_ImpAdStAd.

Handler: 0x6610B3D4, unique to this slot (real opcode #558).

Check of vb6_source_eq example: verified: compiles and emits this slot.

Example from the description
Public Sub Main()
  Dim o As Object
  Set modG.go = o
End Sub

Function F() As Object
End Function
' ---- modG.bas
Public go As Object, gu As IUnknown, gv As Variant

Description: draft, by claude-opus-5-5. Handler 0x6610B3D4, dispatch slot 0x66107BF4, modOpcodes line 1237.

ImpAdStAdFunc

(3,0xBF)emittedhandler #563Object / COMinferred_corpus1 corpus hits
Store through an imported address (ImpAdStAdFunc).

Writes a value (typed by suffix) to an external/imported address resolved from the const pool.

When the compiler emits it

Emitted at writes to Declared external data or runtime statics.

VB6 source (verified: compiles to this slot)
Public Sub Main()
  Set modG.g = New Collection
  Dim b As Object
End Sub
' ---- modG.bas
Public g As Object
Encoding, evidence and notes
Encoding

Encoding: FD BF (lead byte FD selects table 3), then 2 operand byte(s); total instruction length 4 byte(s).
vbdec template: %c
Operands:

  1. %c: pool_proc_or_global, 2 byte(s). 16-bit constant-pool index; the pool slot holds an address (a global variable, a procedure, or an object-table entry).

Observed: FDBF 0100 ImpAdStAdFunc global_402018

Examples
CScriptFunctions.RefreshObjBrowserData @ 0x4440A8 | 44410B    FDBF 1B00             ImpAdStAdFunc global_47C008

1 occurrence(s) in PDFStreamDumper.

Evidence and notes

Emitted by VB6 SP6 (P-code): yes. Minimal probe: probes\op\3_BF_ImpAdStAdFunc.

Handler: 0x6610640E, unique to this slot (real opcode #563).

Corpus: 1 occurrence(s) in PDFStreamDumper_p.exe.

Description: draft, by claude-opus-4.7. Handler 0x6610640E, dispatch slot 0x66107C10, modOpcodes line 1244.

ImpAdStCy

(0,0x7C)emittedprimary of 3handler #121Currencyinferred_corpus
Store Currency into a module-level (global) variable.

Pops a Currency (scaled 64-bit integer), and writes it to a module-level (global) variable.

Stack: [..., v:Cy] -> [...]

Operands: %c: constant-pool index whose slot holds the variable's address.

Standard-EXE module variables (and Public variables of other modules) referenced by address. In ActiveX DLL/EXE projects module variables are per-thread and use FMem* instead.

When the compiler emits it

Emitted for assignments to a module-level (global) variable when the value is a Currency. The storage class selects the prefix (ImpAd); the value class selects the suffix (Cy).

VB6 source (verified: compiles to this slot)
Public Sub Main()
  modG.g = 1.5@
  Dim b As Currency
End Sub
' ---- modG.bas
Public g As Currency
Encoding, evidence and notes
Encoding

Encoding: 7C, then 2 operand byte(s); total instruction length 3 byte(s).
vbdec template: %c
Operands:

  1. %c: pool_proc_or_global, 2 byte(s). 16-bit constant-pool index; the pool slot holds an address (a global variable, a procedure, or an object-table entry).

Observed: 7C 0000 ImpAdStCy global_402018

Examples
7C 0000  ImpAdStCy global_402018

From the Phase 4 probe (VB6 SP6, P-code).

Evidence and notes

Emitted by VB6 SP6 (P-code): yes. Minimal probe: probes\op\0_7C_ImpAdStCy.

Handler: 0x6610A79D, shared by 3 dispatch slots (real opcode #121). This is the primary slot. Other slots: (3,B4) ImpAdStR8, (3,B5) ImpAdStR8.

Check of vb6_source_eq example: verified: compiles and emits this slot.

Example from the description
Public Sub Main()
  modG.g = 1.5@
  Dim b As Currency
End Sub
' ---- modG.bas
Public g As Currency
Slots sharing this handler

(3,0xB4) ImpAdStR8, (3,0xB5) ImpAdStR8

Description: draft, by claude-opus-5-5. Handler 0x6610A79D, dispatch slot 0x66106F04, modOpcodes line 1212.

ImpAdStFPR4

(0,0x7D)emittedprimary of 2handler #122Floating pointinferred_corpus
Store Single into a module-level (global) variable.

Pops a Single, moved through the FPU (fld/fstp dword), and writes it to a module-level (global) variable.

Stack: [..., v:FPR4] -> [...]

Operands: %c: constant-pool index whose slot holds the variable's address.

Standard-EXE module variables (and Public variables of other modules) referenced by address. In ActiveX DLL/EXE projects module variables are per-thread and use FMem* instead.

When the compiler emits it

Emitted for assignments to a module-level (global) variable when the value is a Single. The storage class selects the prefix (ImpAd); the value class selects the suffix (FPR4).

VB6 source (verified: compiles to this slot)
Public Sub Main()
  modG.g = 1.5!
  Dim b As Single
End Sub
' ---- modG.bas
Public g As Single
Encoding, evidence and notes
Encoding

Encoding: 7D, then 2 operand byte(s); total instruction length 3 byte(s).
vbdec template: %c
Operands:

  1. %c: pool_proc_or_global, 2 byte(s). 16-bit constant-pool index; the pool slot holds an address (a global variable, a procedure, or an object-table entry).

Observed: 7D 0000 ImpAdStFPR4 global_402018

Examples
7D 0000  ImpAdStFPR4 global_402018

From the Phase 4 probe (VB6 SP6, P-code).

Evidence and notes

Emitted by VB6 SP6 (P-code): yes. Minimal probe: probes\op\0_7D_ImpAdStFPR4.

Handler: 0x6610A7BA, shared by 2 dispatch slots (real opcode #122). This is the primary slot. Other slots: (3,B9) ImpAdStFPR4.

Check of vb6_source_eq example: verified: compiles and emits this slot.

Example from the description
Public Sub Main()
  modG.g = 1.5!
  Dim b As Single
End Sub
' ---- modG.bas
Public g As Single
Slots sharing this handler

(3,0xB9) ImpAdStFPR4

Description: draft, by claude-opus-5-5. Handler 0x6610A7BA, dispatch slot 0x66106F08, modOpcodes line 1213.

ImpAdStFPR4

(3,0xB9)not emitteddup of (0,7D)handler #122Floating pointconfirmed_handler
Same handler as (0,0x7D) ImpAdStFPR4: Store Single into a module-level (global) variable.
Encoding, evidence and notes
Encoding

Encoding: FD B9 (lead byte FD selects table 3), then 2 operand byte(s); total instruction length 4 byte(s).
vbdec template: %c
Operands:

  1. %c: pool_proc_or_global, 2 byte(s). 16-bit constant-pool index; the pool slot holds an address (a global variable, a procedure, or an object-table entry).
Evidence and notes

Emitted by VB6 SP6 (P-code): not observed in about 3,070 probe programs. The slot exists in the runtime's dispatch table, but no tested source construct makes the compiler emit it.

Handler: 0x6610A7BA, shared by 2 dispatch slots (real opcode #122). This is a duplicate slot of (0,7D) ImpAdStFPR4. Other slots: (0,7D) ImpAdStFPR4.

Slots sharing this handler

(0,0x7D) ImpAdStFPR4

Description: none. Handler 0x6610A7BA, dispatch slot 0x66107BF8, modOpcodes line 1238.

ImpAdStFPR8

(0,0x7E)emittedprimary of 2handler #123Floating pointinferred_corpus
Store Double/Date into a module-level (global) variable.

Pops a Double or Date, moved through the FPU (fld/fstp qword), and writes it to a module-level (global) variable.

Stack: [..., v:FPR8] -> [...]

Operands: %c: constant-pool index whose slot holds the variable's address.

Standard-EXE module variables (and Public variables of other modules) referenced by address. In ActiveX DLL/EXE projects module variables are per-thread and use FMem* instead.

When the compiler emits it

Emitted for assignments to a module-level (global) variable when the value is a Double/Date. The storage class selects the prefix (ImpAd); the value class selects the suffix (FPR8).

VB6 source (verified: compiles to this slot)
Public Sub Main()
  modG.g = #1/1/2000#
  Dim b As Date
End Sub
' ---- modG.bas
Public g As Date
Encoding, evidence and notes
Encoding

Encoding: 7E, then 2 operand byte(s); total instruction length 3 byte(s).
vbdec template: %c
Operands:

  1. %c: pool_proc_or_global, 2 byte(s). 16-bit constant-pool index; the pool slot holds an address (a global variable, a procedure, or an object-table entry).

Observed: 7E 0000 ImpAdStFPR8 global_402018

Examples
7E 0000  ImpAdStFPR8 global_402018

From the Phase 4 probe (VB6 SP6, P-code).

Evidence and notes

Emitted by VB6 SP6 (P-code): yes. Minimal probe: probes\op\0_7E_ImpAdStFPR8.

Handler: 0x6610A7DE, shared by 2 dispatch slots (real opcode #123). This is the primary slot. Other slots: (3,BA) ImpAdStFPR8.

Check of vb6_source_eq example: verified: compiles and emits this slot.

Example from the description
Public Sub Main()
  modG.g = #1/1/2000#
  Dim b As Date
End Sub
' ---- modG.bas
Public g As Date
Slots sharing this handler

(3,0xBA) ImpAdStFPR8

Description: draft, by claude-opus-5-5. Handler 0x6610A7DE, dispatch slot 0x66106F0C, modOpcodes line 1214.

ImpAdStFPR8

(3,0xBA)not emitteddup of (0,7E)handler #123Floating pointconfirmed_handler
Same handler as (0,0x7E) ImpAdStFPR8: Store Double/Date into a module-level (global) variable.
Encoding, evidence and notes
Encoding

Encoding: FD BA (lead byte FD selects table 3), then 2 operand byte(s); total instruction length 4 byte(s).
vbdec template: %c
Operands:

  1. %c: pool_proc_or_global, 2 byte(s). 16-bit constant-pool index; the pool slot holds an address (a global variable, a procedure, or an object-table entry).
Evidence and notes

Emitted by VB6 SP6 (P-code): not observed in about 3,070 probe programs. The slot exists in the runtime's dispatch table, but no tested source construct makes the compiler emit it.

Handler: 0x6610A7DE, shared by 2 dispatch slots (real opcode #123). This is a duplicate slot of (0,7E) ImpAdStFPR8. Other slots: (0,7E) ImpAdStFPR8.

Slots sharing this handler

(0,0x7E) ImpAdStFPR8

Description: none. Handler 0x6610A7DE, dispatch slot 0x66107BFC, modOpcodes line 1239.

ImpAdStI2

(0,0x7A)emittedprimary of 2handler #119Integerinferred_corpus
Store Integer/Boolean into a module-level (global) variable.

Pops a 16-bit value (Integer or Boolean), and writes it to a module-level (global) variable.

Stack: [..., v:I2] -> [...]

Operands: %c: constant-pool index whose slot holds the variable's address.

Standard-EXE module variables (and Public variables of other modules) referenced by address. In ActiveX DLL/EXE projects module variables are per-thread and use FMem* instead.

When the compiler emits it

Emitted for assignments to a module-level (global) variable when the value is a Integer/Boolean. The storage class selects the prefix (ImpAd); the value class selects the suffix (I2).

VB6 source (verified: compiles to this slot)
Public Sub Main()
  modG.g = True
  Dim b As Boolean
End Sub
' ---- modG.bas
Public g As Boolean
Encoding, evidence and notes
Encoding

Encoding: 7A, then 2 operand byte(s); total instruction length 3 byte(s).
vbdec template: %c
Operands:

  1. %c: pool_proc_or_global, 2 byte(s). 16-bit constant-pool index; the pool slot holds an address (a global variable, a procedure, or an object-table entry).

Observed: 7A 0000 ImpAdStI2 global_402018

Examples
7A 0000  ImpAdStI2 global_402018

From the Phase 4 probe (VB6 SP6, P-code).

Evidence and notes

Emitted by VB6 SP6 (P-code): yes. Minimal probe: probes\op\0_7A_ImpAdStI2.

Handler: 0x66105AC4, shared by 2 dispatch slots (real opcode #119). This is the primary slot. Other slots: (3,B1) ImpAdStI2.

Check of vb6_source_eq example: verified: compiles and emits this slot.

Example from the description
Public Sub Main()
  modG.g = True
  Dim b As Boolean
End Sub
' ---- modG.bas
Public g As Boolean
Slots sharing this handler

(3,0xB1) ImpAdStI2

Description: draft, by claude-opus-5-5. Handler 0x66105AC4, dispatch slot 0x66106EFC, modOpcodes line 1210.

ImpAdStI2

(3,0xB1)not emitteddup of (0,7A)handler #119Integerconfirmed_handler
Same handler as (0,0x7A) ImpAdStI2: Store Integer/Boolean into a module-level (global) variable.
Encoding, evidence and notes
Encoding

Encoding: FD B1 (lead byte FD selects table 3), then 2 operand byte(s); total instruction length 4 byte(s).
vbdec template: %c
Operands:

  1. %c: pool_proc_or_global, 2 byte(s). 16-bit constant-pool index; the pool slot holds an address (a global variable, a procedure, or an object-table entry).
Evidence and notes

Emitted by VB6 SP6 (P-code): not observed in about 3,070 probe programs. The slot exists in the runtime's dispatch table, but no tested source construct makes the compiler emit it.

Handler: 0x66105AC4, shared by 2 dispatch slots (real opcode #119). This is a duplicate slot of (0,7A) ImpAdStI2. Other slots: (0,7A) ImpAdStI2.

Slots sharing this handler

(0,0x7A) ImpAdStI2

Description: none. Handler 0x66105AC4, dispatch slot 0x66107BD8, modOpcodes line 1230.

ImpAdStR4

(0,0x7B)emittedprimary of 3handler #120Integerinferred_corpus
Store 4-byte value into a module-level (global) variable.

Pops a raw 32-bit value (in practice a Long; Single values use the FPR4 forms), and writes it to a module-level (global) variable.

Stack: [..., v:R4] -> [...]

Operands: %c: constant-pool index whose slot holds the variable's address.

Standard-EXE module variables (and Public variables of other modules) referenced by address. In ActiveX DLL/EXE projects module variables are per-thread and use FMem* instead.

The R4 suffix denotes a raw 4-byte move, not a floating-point type. Phase 4 probes show it used for Long values. Single/Double values use the FPR4/FPR8 forms.

When the compiler emits it

Emitted for assignments to a module-level (global) variable when the value is a 4-byte value. The storage class selects the prefix (ImpAd); the value class selects the suffix (R4).

VB6 source (verified: compiles to this slot)
Public Sub Main()
  modG.g = 70000
  Dim b As Long
End Sub
' ---- modG.bas
Public g As Long
Encoding, evidence and notes
Encoding

Encoding: 7B, then 2 operand byte(s); total instruction length 3 byte(s).
vbdec template: %c
Operands:

  1. %c: pool_proc_or_global, 2 byte(s). 16-bit constant-pool index; the pool slot holds an address (a global variable, a procedure, or an object-table entry).

Observed: 7B 0000 ImpAdStR4 global_402018

Examples
7B 0000  ImpAdStR4 global_402018

From the Phase 4 probe (VB6 SP6, P-code).

Evidence and notes

Emitted by VB6 SP6 (P-code): yes. Minimal probe: probes\op\0_7B_ImpAdStR4.

Handler: 0x6610A783, shared by 3 dispatch slots (real opcode #120). This is the primary slot. Other slots: (3,B2) ImpAdStR4, (3,B3) ImpAdStR4.

Check of vb6_source_eq example: verified: compiles and emits this slot.

Example from the description
Public Sub Main()
  modG.g = 70000
  Dim b As Long
End Sub
' ---- modG.bas
Public g As Long
Slots sharing this handler

(3,0xB2) ImpAdStR4, (3,0xB3) ImpAdStR4

Description: draft, by claude-opus-5-5. Handler 0x6610A783, dispatch slot 0x66106F00, modOpcodes line 1211.

ImpAdStR4

(3,0xB2)not emitteddup of (0,7B)handler #120Integerconfirmed_handler
Same handler as (0,0x7B) ImpAdStR4: Store 4-byte value into a module-level (global) variable.
Encoding, evidence and notes
Encoding

Encoding: FD B2 (lead byte FD selects table 3), then 2 operand byte(s); total instruction length 4 byte(s).
vbdec template: %c
Operands:

  1. %c: pool_proc_or_global, 2 byte(s). 16-bit constant-pool index; the pool slot holds an address (a global variable, a procedure, or an object-table entry).
Evidence and notes

Emitted by VB6 SP6 (P-code): not observed in about 3,070 probe programs. The slot exists in the runtime's dispatch table, but no tested source construct makes the compiler emit it.

Handler: 0x6610A783, shared by 3 dispatch slots (real opcode #120). This is a duplicate slot of (0,7B) ImpAdStR4. Other slots: (0,7B) ImpAdStR4, (3,B3) ImpAdStR4.

Slots sharing this handler

(0,0x7B) ImpAdStR4, (3,0xB3) ImpAdStR4

Description: none. Handler 0x6610A783, dispatch slot 0x66107BDC, modOpcodes line 1231.

ImpAdStR4

(3,0xB3)not emitteddup of (0,7B)handler #120Integerconfirmed_handler
Same handler as (0,0x7B) ImpAdStR4: Store 4-byte value into a module-level (global) variable.
Encoding, evidence and notes
Encoding

Encoding: FD B3 (lead byte FD selects table 3), then 2 operand byte(s); total instruction length 4 byte(s).
vbdec template: %c
Operands:

  1. %c: pool_proc_or_global, 2 byte(s). 16-bit constant-pool index; the pool slot holds an address (a global variable, a procedure, or an object-table entry).
Evidence and notes

Emitted by VB6 SP6 (P-code): not observed in about 3,070 probe programs. The slot exists in the runtime's dispatch table, but no tested source construct makes the compiler emit it.

Handler: 0x6610A783, shared by 3 dispatch slots (real opcode #120). This is a duplicate slot of (0,7B) ImpAdStR4. Other slots: (0,7B) ImpAdStR4, (3,B2) ImpAdStR4.

Slots sharing this handler

(0,0x7B) ImpAdStR4, (3,0xB2) ImpAdStR4

Description: none. Handler 0x6610A783, dispatch slot 0x66107BE0, modOpcodes line 1232.

ImpAdStR8

(3,0xB4)not emitteddup of (0,7C)handler #121Currencyinferred_corpus
Same handler as (0,0x7C) ImpAdStCy: Store Currency into a module-level (global) variable.
Encoding, evidence and notes
Encoding

Encoding: FD B4 (lead byte FD selects table 3), then 2 operand byte(s); total instruction length 4 byte(s).
vbdec template: %c
Operands:

  1. %c: pool_proc_or_global, 2 byte(s). 16-bit constant-pool index; the pool slot holds an address (a global variable, a procedure, or an object-table entry).
Evidence and notes

Emitted by VB6 SP6 (P-code): not observed in about 3,070 probe programs. The slot exists in the runtime's dispatch table, but no tested source construct makes the compiler emit it.

Handler: 0x6610A79D, shared by 3 dispatch slots (real opcode #121). This is a duplicate slot of (0,7C) ImpAdStCy. Other slots: (0,7C) ImpAdStCy, (3,B5) ImpAdStR8.

Slots sharing this handler

(0,0x7C) ImpAdStCy, (3,0xB5) ImpAdStR8

Description: none. Handler 0x6610A79D, dispatch slot 0x66107BE4, modOpcodes line 1233.

ImpAdStR8

(3,0xB5)not emitteddup of (0,7C)handler #121Currencyconfirmed_handler
Same handler as (0,0x7C) ImpAdStCy: Store Currency into a module-level (global) variable.
Encoding, evidence and notes
Encoding

Encoding: FD B5 (lead byte FD selects table 3), then 2 operand byte(s); total instruction length 4 byte(s).
vbdec template: %c
Operands:

  1. %c: pool_proc_or_global, 2 byte(s). 16-bit constant-pool index; the pool slot holds an address (a global variable, a procedure, or an object-table entry).
Evidence and notes

Emitted by VB6 SP6 (P-code): not observed in about 3,070 probe programs. The slot exists in the runtime's dispatch table, but no tested source construct makes the compiler emit it.

Handler: 0x6610A79D, shared by 3 dispatch slots (real opcode #121). This is a duplicate slot of (0,7C) ImpAdStCy. Other slots: (0,7C) ImpAdStCy, (3,B4) ImpAdStR8.

Slots sharing this handler

(0,0x7C) ImpAdStCy, (3,0xB4) ImpAdStR8

Description: none. Handler 0x6610A79D, dispatch slot 0x66107BE8, modOpcodes line 1234.

ImpAdStStr

(3,0xB7)emittedhandler #557Stringinferred_corpus
Store String into a module-level (global) variable.

Pops a String (BSTR pointer); ownership of the BSTR is transferred and the old value is freed, and writes it to a module-level (global) variable.

Stack: [..., v:Str] -> [...]

Operands: %c: constant-pool index whose slot holds the variable's address.

Standard-EXE module variables (and Public variables of other modules) referenced by address. In ActiveX DLL/EXE projects module variables are per-thread and use FMem* instead.

When the compiler emits it

Emitted for assignments to a module-level (global) variable when the value is a String. The storage class selects the prefix (ImpAd); the value class selects the suffix (Str).

VB6 source (verified: compiles to this slot)
Private Type TR
  s As String
  v As Variant
End Type
Dim gs As String, gr As TR

Public Sub Main()
  Dim s As String, v As Variant, a(3) As String, r As TR, i As Long
  modG.ps = F()
End Sub

Function F() As String
End Function
' ---- modG.bas
Public ps As String
Encoding, evidence and notes
Encoding

Encoding: FD B7 (lead byte FD selects table 3), then 2 operand byte(s); total instruction length 4 byte(s).
vbdec template: %c
Operands:

  1. %c: pool_proc_or_global, 2 byte(s). 16-bit constant-pool index; the pool slot holds an address (a global variable, a procedure, or an object-table entry).

Observed: FDB7 0100 ImpAdStStr global_40202C

Examples
FDB7 0100  ImpAdStStr global_40202C

From the Phase 4 probe (VB6 SP6, P-code).

Evidence and notes

Emitted by VB6 SP6 (P-code): yes. Minimal probe: probes\op\3_B7_ImpAdStStr.

Handler: 0x6610B2E1, unique to this slot (real opcode #557).

Check of vb6_source_eq example: verified: compiles and emits this slot.

Example from the description
Private Type TR
  s As String
  v As Variant
End Type
Dim gs As String, gr As TR

Public Sub Main()
  Dim s As String, v As Variant, a(3) As String, r As TR, i As Long
  modG.ps = F()
End Sub

Function F() As String
End Function
' ---- modG.bas
Public ps As String

Description: draft, by claude-opus-5-5. Handler 0x6610B2E1, dispatch slot 0x66107BF0, modOpcodes line 1236.

ImpAdStStrCopy

(3,0xC1)emittedhandler #565Stringinferred_corpus
Store String (copied) into a module-level (global) variable.

Pops a String. A private copy of the BSTR is made (SysAllocString) and the old value is freed, and writes it to a module-level (global) variable.

Stack: [..., v:Str] -> [...]

Operands: %c: constant-pool index whose slot holds the variable's address.

Standard-EXE module variables (and Public variables of other modules) referenced by address. In ActiveX DLL/EXE projects module variables are per-thread and use FMem* instead.

When the compiler emits it

Emitted for assignments to a module-level (global) variable when the value is a String (copied). The storage class selects the prefix (ImpAd); the value class selects the suffix (StrCopy).

VB6 source (verified: compiles to this slot)
Public Sub Main()
  modG.g = "abc"
  Dim b As String
End Sub
' ---- modG.bas
Public g As String
Encoding, evidence and notes
Encoding

Encoding: FD C1 (lead byte FD selects table 3), then 2 operand byte(s); total instruction length 4 byte(s).
vbdec template: %c
Operands:

  1. %c: pool_proc_or_global, 2 byte(s). 16-bit constant-pool index; the pool slot holds an address (a global variable, a procedure, or an object-table entry).

Observed: FDC1 0100 ImpAdStStrCopy global_402018

Examples
FDC1 0100  ImpAdStStrCopy global_402018

From the Phase 4 probe (VB6 SP6, P-code).

Evidence and notes

Emitted by VB6 SP6 (P-code): yes. Minimal probe: probes\op\3_C1_ImpAdStStrCopy.

Handler: 0x6610B2F3, unique to this slot (real opcode #565).

Check of vb6_source_eq example: verified: compiles and emits this slot.

Example from the description
Public Sub Main()
  modG.g = "abc"
  Dim b As String
End Sub
' ---- modG.bas
Public g As String

Description: draft, by claude-opus-5-5. Handler 0x6610B2F3, dispatch slot 0x66107C18, modOpcodes line 1246.

ImpAdStUI1

(3,0xB0)emittedhandler #555Integerinferred_corpus
Store Byte into a module-level (global) variable.

Pops a Byte (stored as 1 byte, carried on the stack widened to 16/32 bits), and writes it to a module-level (global) variable.

Stack: [..., v:UI1] -> [...]

Operands: %c: constant-pool index whose slot holds the variable's address.

Standard-EXE module variables (and Public variables of other modules) referenced by address. In ActiveX DLL/EXE projects module variables are per-thread and use FMem* instead.

When the compiler emits it

Emitted for assignments to a module-level (global) variable when the value is a Byte. The storage class selects the prefix (ImpAd); the value class selects the suffix (UI1).

VB6 source (verified: compiles to this slot)
Public Sub Main()
  modG.g = 7
  Dim b As Byte
End Sub
' ---- modG.bas
Public g As Byte
Encoding, evidence and notes
Encoding

Encoding: FD B0 (lead byte FD selects table 3), then 2 operand byte(s); total instruction length 4 byte(s).
vbdec template: %c
Operands:

  1. %c: pool_proc_or_global, 2 byte(s). 16-bit constant-pool index; the pool slot holds an address (a global variable, a procedure, or an object-table entry).

Observed: FDB0 0000 ImpAdStUI1 global_402018

Examples
FDB0 0000  ImpAdStUI1 global_402018

From the Phase 4 probe (VB6 SP6, P-code).

Evidence and notes

Emitted by VB6 SP6 (P-code): yes. Minimal probe: probes\op\3_B0_ImpAdStUI1.

Handler: 0x6610A768, unique to this slot (real opcode #555).

Check of vb6_source_eq example: verified: compiles and emits this slot.

Example from the description
Public Sub Main()
  modG.g = 7
  Dim b As Byte
End Sub
' ---- modG.bas
Public g As Byte

Description: draft, by claude-opus-5-5. Handler 0x6610A768, dispatch slot 0x66107BD4, modOpcodes line 1229.

ImpAdStVar

(3,0xB6)emittedhandler #556Variantinferred_corpus
Store Variant into a module-level (global) variable.

Pops a Variant (16 bytes); the source Variant is moved and the old destination value is cleared, and writes it to a module-level (global) variable.

Stack: [..., v:Var] -> [...]

Operands: %c: constant-pool index whose slot holds the variable's address.

Standard-EXE module variables (and Public variables of other modules) referenced by address. In ActiveX DLL/EXE projects module variables are per-thread and use FMem* instead.

When the compiler emits it

Emitted for assignments to a module-level (global) variable when the value is a Variant. The storage class selects the prefix (ImpAd); the value class selects the suffix (Var).

VB6 source (verified: compiles to this slot)
Public Sub Main()
  modG.g = 5
  Dim b As Variant
End Sub
' ---- modG.bas
Public g As Variant
Encoding, evidence and notes
Encoding

Encoding: FD B6 (lead byte FD selects table 3), then 2 operand byte(s); total instruction length 4 byte(s).
vbdec template: %c
Operands:

  1. %c: pool_proc_or_global, 2 byte(s). 16-bit constant-pool index; the pool slot holds an address (a global variable, a procedure, or an object-table entry).

Observed: FDB6 0000 ImpAdStVar global_402018

Examples
FDB6 0000  ImpAdStVar global_402018

From the Phase 4 probe (VB6 SP6, P-code).

Evidence and notes

Emitted by VB6 SP6 (P-code): yes. Minimal probe: probes\op\3_B6_ImpAdStVar.

Handler: 0x6610B71A, unique to this slot (real opcode #556).

Check of vb6_source_eq example: verified: compiles and emits this slot.

Example from the description
Public Sub Main()
  modG.g = 5
  Dim b As Variant
End Sub
' ---- modG.bas
Public g As Variant

Description: draft, by claude-opus-5-5. Handler 0x6610B71A, dispatch slot 0x66107BEC, modOpcodes line 1235.

ImpAdStVarAd

(3,0xBB)emittedhandler #559Variantinferred_corpus
Store object into a Variant into a module-level (global) variable.

Pops an object pointer stored into a Variant as VT_DISPATCH (Set v = obj), AddRef'd, and writes it to a module-level (global) variable.

Stack: [..., v:Var] -> [...]

Operands: %c: constant-pool index whose slot holds the variable's address.

Standard-EXE module variables (and Public variables of other modules) referenced by address. In ActiveX DLL/EXE projects module variables are per-thread and use FMem* instead.

When the compiler emits it

Emitted for assignments to a module-level (global) variable when the value is a object into a Variant. The storage class selects the prefix (ImpAd); the value class selects the suffix (VarAd).

VB6 source (verified: compiles to this slot)
Public Sub Main()
  Dim o As Object
  Set modG.gv = o
End Sub

Function F() As Object
End Function
' ---- modG.bas
Public go As Object, gu As IUnknown, gv As Variant
Encoding, evidence and notes
Encoding

Encoding: FD BB (lead byte FD selects table 3), then 2 operand byte(s); total instruction length 4 byte(s).
vbdec template: %c
Operands:

  1. %c: pool_proc_or_global, 2 byte(s). 16-bit constant-pool index; the pool slot holds an address (a global variable, a procedure, or an object-table entry).

Observed: FDBB 0000 ImpAdStVarAd global_402020

Examples
FDBB 0000  ImpAdStVarAd global_402020

From the Phase 4 probe (VB6 SP6, P-code).

Evidence and notes

Emitted by VB6 SP6 (P-code): yes. Minimal probe: probes\op\3_BB_ImpAdStVarAd.

Handler: 0x6610B4CB, unique to this slot (real opcode #559).

Check of vb6_source_eq example: verified: compiles and emits this slot.

Example from the description
Public Sub Main()
  Dim o As Object
  Set modG.gv = o
End Sub

Function F() As Object
End Function
' ---- modG.bas
Public go As Object, gu As IUnknown, gv As Variant

Description: draft, by claude-opus-5-5. Handler 0x6610B4CB, dispatch slot 0x66107C00, modOpcodes line 1240.

ImpAdStVarAdFunc

(3,0xBC)emittedhandler #560Variantinferred_corpus
Store object from a call into a Variant into a module-level (global) variable.

Pops an object pointer returned by a call, stored into a Variant as VT_DISPATCH and adopted without an extra AddRef, and writes it to a module-level (global) variable.

Stack: [..., v:Var] -> [...]

Operands: %c: constant-pool index whose slot holds the variable's address.

Standard-EXE module variables (and Public variables of other modules) referenced by address. In ActiveX DLL/EXE projects module variables are per-thread and use FMem* instead.

When the compiler emits it

Emitted for assignments to a module-level (global) variable when the value is a object from a call into a Variant. The storage class selects the prefix (ImpAd); the value class selects the suffix (VarAdFunc).

VB6 source (verified: compiles to this slot)
Public Sub Main()
  Dim o As Object
  Set modG.gv = F()
End Sub

Function F() As Object
End Function
' ---- modG.bas
Public go As Object, gu As IUnknown, gv As Variant
Encoding, evidence and notes
Encoding

Encoding: FD BC (lead byte FD selects table 3), then 2 operand byte(s); total instruction length 4 byte(s).
vbdec template: %c
Operands:

  1. %c: pool_proc_or_global, 2 byte(s). 16-bit constant-pool index; the pool slot holds an address (a global variable, a procedure, or an object-table entry).

Observed: FDBC 0100 ImpAdStVarAdFunc global_402020

Examples
FDBC 0100  ImpAdStVarAdFunc global_402020

From the Phase 4 probe (VB6 SP6, P-code).

Evidence and notes

Emitted by VB6 SP6 (P-code): yes. Minimal probe: probes\op\3_BC_ImpAdStVarAdFunc.

Handler: 0x6610B4B5, unique to this slot (real opcode #560).

Check of vb6_source_eq example: verified: compiles and emits this slot.

Example from the description
Public Sub Main()
  Dim o As Object
  Set modG.gv = F()
End Sub

Function F() As Object
End Function
' ---- modG.bas
Public go As Object, gu As IUnknown, gv As Variant

Description: draft, by claude-opus-5-5. Handler 0x6610B4B5, dispatch slot 0x66107C04, modOpcodes line 1241.

ImpAdStVarCopy

(3,0xC0)emittedhandler #564Variantinferred_corpus
Store Variant (copied) into a module-level (global) variable.

Pops a Variant, deep-copied with VariantCopy semantics; the old destination value is cleared, and writes it to a module-level (global) variable.

Stack: [..., v:Var] -> [...]

Operands: %c: constant-pool index whose slot holds the variable's address.

Standard-EXE module variables (and Public variables of other modules) referenced by address. In ActiveX DLL/EXE projects module variables are per-thread and use FMem* instead.

When the compiler emits it

Emitted for assignments to a module-level (global) variable when the value is a Variant (copied). The storage class selects the prefix (ImpAd); the value class selects the suffix (VarCopy).

VB6 source (verified: compiles to this slot)
Public Sub Main()
  Dim o As Object
  modG.gv = o
End Sub

Function F() As Object
End Function
' ---- modG.bas
Public go As Object, gu As IUnknown, gv As Variant
Encoding, evidence and notes
Encoding

Encoding: FD C0 (lead byte FD selects table 3), then 2 operand byte(s); total instruction length 4 byte(s).
vbdec template: %c
Operands:

  1. %c: pool_proc_or_global, 2 byte(s). 16-bit constant-pool index; the pool slot holds an address (a global variable, a procedure, or an object-table entry).

Observed: FDC0 0000 ImpAdStVarCopy global_402020

Examples
FDC0 0000  ImpAdStVarCopy global_402020

From the Phase 4 probe (VB6 SP6, P-code).

Evidence and notes

Emitted by VB6 SP6 (P-code): yes. Minimal probe: probes\op\3_C0_ImpAdStVarCopy.

Handler: 0x6610B6D5, unique to this slot (real opcode #564).

Check of vb6_source_eq example: verified: compiles and emits this slot.

Example from the description
Public Sub Main()
  Dim o As Object
  modG.gv = o
End Sub

Function F() As Object
End Function
' ---- modG.bas
Public go As Object, gu As IUnknown, gv As Variant

Description: draft, by claude-opus-5-5. Handler 0x6610B6D5, dispatch slot 0x66107C14, modOpcodes line 1245.

ImpAdStVarUnk

(3,0xBD)emittedhandler #561Variantinferred_corpus
Store IUnknown into a Variant into a module-level (global) variable.

Pops an IUnknown pointer stored into a Variant as VT_UNKNOWN (Set v = unk), AddRef'd, and writes it to a module-level (global) variable.

Stack: [..., v:Var] -> [...]

Operands: %c: constant-pool index whose slot holds the variable's address.

Standard-EXE module variables (and Public variables of other modules) referenced by address. In ActiveX DLL/EXE projects module variables are per-thread and use FMem* instead.

When the compiler emits it

Emitted for assignments to a module-level (global) variable when the value is a IUnknown into a Variant. The storage class selects the prefix (ImpAd); the value class selects the suffix (VarUnk).

VB6 source (verified: compiles to this slot)
Public Sub Main()
  Dim u As IUnknown
  Set modG.gv = u
End Sub

Function FU() As IUnknown
End Function
Function FO() As Object
End Function
Function FC() As Collection
End Function
' ---- modG.bas
Public gv As Variant
Encoding, evidence and notes
Encoding

Encoding: FD BD (lead byte FD selects table 3), then 2 operand byte(s); total instruction length 4 byte(s).
vbdec template: %c
Operands:

  1. %c: pool_proc_or_global, 2 byte(s). 16-bit constant-pool index; the pool slot holds an address (a global variable, a procedure, or an object-table entry).

Observed: FDBD 0000 ImpAdStVarUnk global_402018

Examples
FDBD 0000  ImpAdStVarUnk global_402018

From the Phase 4 probe (VB6 SP6, P-code).

Evidence and notes

Emitted by VB6 SP6 (P-code): yes. Minimal probe: probes\op\3_BD_ImpAdStVarUnk.

Handler: 0x6610B546, unique to this slot (real opcode #561).

Check of vb6_source_eq example: verified: compiles and emits this slot.

Example from the description
Public Sub Main()
  Dim u As IUnknown
  Set modG.gv = u
End Sub

Function FU() As IUnknown
End Function
Function FO() As Object
End Function
Function FC() As Collection
End Function
' ---- modG.bas
Public gv As Variant

Description: draft, by claude-opus-5-5. Handler 0x6610B546, dispatch slot 0x66107C08, modOpcodes line 1242.

ImpAdStVarUnkFunc

(3,0xBE)emittedhandler #562Variantinferred_corpus
Store IUnknown from a call into a Variant into a module-level (global) variable.

Pops an IUnknown pointer returned by a call, stored into a Variant as VT_UNKNOWN without an extra AddRef, and writes it to a module-level (global) variable.

Stack: [..., v:Var] -> [...]

Operands: %c: constant-pool index whose slot holds the variable's address.

Standard-EXE module variables (and Public variables of other modules) referenced by address. In ActiveX DLL/EXE projects module variables are per-thread and use FMem* instead.

When the compiler emits it

Emitted for assignments to a module-level (global) variable when the value is a IUnknown from a call into a Variant. The storage class selects the prefix (ImpAd); the value class selects the suffix (VarUnkFunc).

VB6 source (verified: compiles to this slot)
Public Sub Main()
  Dim u As IUnknown
  Set modG.gv = FU()
End Sub

Function FU() As IUnknown
End Function
Function FO() As Object
End Function
Function FC() As Collection
End Function
' ---- modG.bas
Public gv As Variant
Encoding, evidence and notes
Encoding

Encoding: FD BE (lead byte FD selects table 3), then 2 operand byte(s); total instruction length 4 byte(s).
vbdec template: %c
Operands:

  1. %c: pool_proc_or_global, 2 byte(s). 16-bit constant-pool index; the pool slot holds an address (a global variable, a procedure, or an object-table entry).

Observed: FDBE 0100 ImpAdStVarUnkFunc global_402018

Examples
FDBE 0100  ImpAdStVarUnkFunc global_402018

From the Phase 4 probe (VB6 SP6, P-code).

Evidence and notes

Emitted by VB6 SP6 (P-code): yes. Minimal probe: probes\op\3_BE_ImpAdStVarUnkFunc.

Handler: 0x6610B52C, unique to this slot (real opcode #562).

Check of vb6_source_eq example: verified: compiles and emits this slot.

Example from the description
Public Sub Main()
  Dim u As IUnknown
  Set modG.gv = FU()
End Sub

Function FU() As IUnknown
End Function
Function FO() As Object
End Function
Function FC() As Collection
End Function
' ---- modG.bas
Public gv As Variant

Description: draft, by claude-opus-5-5. Handler 0x6610B52C, dispatch slot 0x66107C0C, modOpcodes line 1243.

LateId_Call

Late-bound DispID call Prefix: Id = DispID

LateIdCall

(4,0xA0)emittedhandler #664Object / COMcontextual79 corpus hits
Late-bound method call by compile-time DISPID (statement form, result discarded).

Calls IDispatch::Invoke(DISPATCH_METHOD) on the object with a DISPID known at compile time from the type library, so no GetIDsOfNames is needed. Operands (6 bytes): DISPID and argument count/flags (observed 0000 0200 0000 for Printer.EndDoc).

When the compiler emits it

Emitted for method calls on objects whose type is a dispatch-only interface known from a type library (e.g. VB's Printer, a typelib dispinterface).

VB6 source (verified: compiles to this slot)
Public Sub Main()
  Printer.EndDoc
End Sub
Encoding, evidence and notes
Encoding

Encoding: FE A0 (lead byte FE selects table 4), then 6 operand byte(s); total instruction length 8 byte(s).
No printf operands are declared, but the instruction still consumes operand bytes; see the size above and the observed bytes below. (Phase 3a: flag=0 does not mean 'no operands'.)
Observed: FEA0 000002000000 LateIdCall

Examples
FEA0 000002000000  LateIdCall

From the Phase 4 probe (VB6 SP6, P-code).

Evidence and notes

Emitted by VB6 SP6 (P-code): yes. Minimal probe: probes\op\4_A0_LateIdCall.

Handler: 0x66105AF4, unique to this slot (real opcode #664).

Check of vb6_source_eq example: verified: compiles and emits this slot.

Corpus: 79 occurrence(s) in PDFStreamDumper_p.exe.

Example from the description
Public Sub Main()
  Printer.EndDoc
End Sub

Description: draft, by claude-opus-5-5. Handler 0x66105AF4, dispatch slot 0x66107F94, modOpcodes line 336.

LateIdCallLdVar

(4,0xA2)emittedhandler #665Object / COMinferred_corpus17 corpus hits
Late-bound call by pre-resolved DispID (LateIdCallLdVar).

Invokes IDispatch::Invoke with a DispID already known at compile time. The compiler uses this path when it has seen the type library and can baked the DispID, but the binding is still IDispatch-based rather than vtable.

When the compiler emits it

Emitted for Object-typed receivers where the type library provides DispIDs at compile.

VB6 source (verified: compiles to this slot)
Public Sub Main()
  Dim o As Object, v As Variant
  v = o(1)
End Sub
Encoding, evidence and notes
Encoding

Encoding: FE A2 (lead byte FE selects table 4), then 8 operand byte(s); total instruction length 10 byte(s).
vbdec template: %a
Operands:

  1. %a: local_var_ref, 2 byte(s). signed 16-bit offset from the procedure frame pointer (EBP). Negative = local/temporary (vbdec var_XX, XX = -offset), positive = argument (arg_XX).

Observed: FEA2 38FF000000000100 LateIdCallLdVar var_C8

Examples
Form2.ExtractFunction @ 0x45FB40 | 45FBB1    FEA2 0CFF3C0003600100 LateIdCallLdVar var_F4 scivb2.SciSimple.GetLineText(ByVal lline As Long) As String
Form2.GetIndentLevel @ 0x449204 | 44924C    FEA2 44FF3C0003600100 LateIdCallLdVar var_BC scivb2.SciSimple.GetLineText(ByVal lline As Long) As String
Form2.mnuFunctionScan_Click @ 0x4688A0 | 468968    FEA2 54FF3C0003600100 LateIdCallLdVar var_AC scivb2.SciSimple.GetLineText(ByVal lline As Long) As String

17 occurrence(s) in PDFStreamDumper.

Evidence and notes

Emitted by VB6 SP6 (P-code): yes. Minimal probe: probes\op\4_A2_LateIdCallLdVar.

Handler: 0x66105B06, unique to this slot (real opcode #665).

Corpus: 17 occurrence(s) in PDFStreamDumper_p.exe.

Description: draft, by claude-opus-4.7. Handler 0x66105B06, dispatch slot 0x66107F9C, modOpcodes line 338.

LateIdCallSt

(4,0xA4)emittedhandler #666Object / COMinferred_corpus
Late-bound property-put by DISPID with arguments (o(i) = v / o.P(i) = v).

Calls IDispatch::Invoke(DISPATCH_PROPERTYPUT) with the indices and the assigned value. Observed for o(1) = 2 on o As Object, where the default member has DISPID 0. Operands (6 bytes): DISPID and argument count.

When the compiler emits it

Emitted for an assignment to an indexed default member or a known-DISPID property.

VB6 source (verified: compiles to this slot)
Public Sub Main()
  Dim o As Object, v As Variant
  o(1) = 2
End Sub
Encoding, evidence and notes
Encoding

Encoding: FE A4 (lead byte FE selects table 4), then 6 operand byte(s); total instruction length 8 byte(s).
No printf operands are declared, but the instruction still consumes operand bytes; see the size above and the observed bytes below. (Phase 3a: flag=0 does not mean 'no operands'.)
Observed: FEA4 000000000100 LateIdCallSt

Examples
FEA4 000000000100  LateIdCallSt

From the Phase 4 probe (VB6 SP6, P-code).

Evidence and notes

Emitted by VB6 SP6 (P-code): yes. Minimal probe: probes\op\4_A4_LateIdCallSt.

Handler: 0x66105B40, unique to this slot (real opcode #666).

Check of vb6_source_eq example: verified: compiles and emits this slot.

Example from the description
Public Sub Main()
  Dim o As Object, v As Variant
  o(1) = 2
End Sub

Description: draft, by claude-opus-5-5. Handler 0x66105B40, dispatch slot 0x66107FA4, modOpcodes line 337.

LateId_Load

Late-bound DispID property get Prefix: Id = DispID

LateIdLdVar

(0,0x61)emittedprimary of 2handler #94Object / COMcontextual464 corpus hits
Late-bound property-get by compile-time DISPID; push the result Variant.

Calls IDispatch::Invoke(DISPATCH_PROPERTYGET) with a DISPID known at compile time and stores the result in the temporary given by the first operand (observed 60FF 0200 0000: var_A0, DISPID 2 = IFontDisp.Size).

When the compiler emits it

Emitted for property reads through dispatch-only typelib interfaces (IFontDisp, StdFont default interface, typelib dispinterfaces).

VB6 source (verified: compiles to this slot)
Public Sub Main()
  Dim f As StdFont, g As IFontDisp, s As String
  s = g.Size
End Sub
Encoding, evidence and notes
Encoding

Encoding: 61, then 6 operand byte(s); total instruction length 7 byte(s).
No printf operands are declared, but the instruction still consumes operand bytes; see the size above and the observed bytes below. (Phase 3a: flag=0 does not mean 'no operands'.)
Observed: 61 60FF02000000 LateIdLdVar

Examples
61 60FF02000000  LateIdLdVar

From the Phase 4 probe (VB6 SP6, P-code).

Evidence and notes

Emitted by VB6 SP6 (P-code): yes. Minimal probe: probes\op\0_61_LateIdLdVar.

Handler: 0x66105AE0, shared by 2 dispatch slots (real opcode #94). This is the primary slot. Other slots: (4,A1) LateIdLdVar.

Check of vb6_source_eq example: verified: compiles and emits this slot.

Corpus: 464 occurrence(s) in PDFStreamDumper_p.exe.

Example from the description
Public Sub Main()
  Dim f As StdFont, g As IFontDisp, s As String
  s = g.Size
End Sub
Slots sharing this handler

(4,0xA1) LateIdLdVar

Description: draft, by claude-opus-5-5. Handler 0x66105AE0, dispatch slot 0x66106E98, modOpcodes line 344.

LateIdLdVar

(4,0xA1)not emitteddup of (0,61)handler #94Object / COMconfirmed_handler
Same handler as (0,0x61) LateIdLdVar: Late-bound property-get by compile-time DISPID; push the result Variant.
Encoding, evidence and notes
Encoding

Encoding: FE A1 (lead byte FE selects table 4), then 6 operand byte(s); total instruction length 8 byte(s).
No printf operands are declared, but the instruction still consumes operand bytes; see the size above and the observed bytes below. (Phase 3a: flag=0 does not mean 'no operands'.)

Evidence and notes

Emitted by VB6 SP6 (P-code): not observed in about 3,070 probe programs. The slot exists in the runtime's dispatch table, but no tested source construct makes the compiler emit it.

Handler: 0x66105AE0, shared by 2 dispatch slots (real opcode #94). This is a duplicate slot of (0,61) LateIdLdVar. Other slots: (0,61) LateIdLdVar.

Slots sharing this handler

(0,0x61) LateIdLdVar

Description: none. Handler 0x66105AE0, dispatch slot 0x66107F98, modOpcodes line 345.

LateId_Named

Late-bound DispID with named args Prefix: Id+named

LateIdNamedCall

(4,0xAA)emittedhandler #672Object / COMcontextual
Late-bound method call by DISPID with named arguments.

Late-bound call by DISPID with named arguments, on a dispinterface whose type is known at compile time (for example StdPicture, or a typelib dispinterface). Operand block: u16 len, u32 dispid, u16 cArgs (every argument), then (len-6)/4 x u32 named-argument DISPIDs. Each named DISPID is the parameter's position in the member (for Picture.Render, hdc = 0 ... prcWBounds = 9). Instruction length = 4 + len; the size column (9) is the zero-name minimum. Names are stored in source order (the runtime reverses them to match rgvarg). Positional arguments are pushed first and are not listed, so cArgs can exceed the number of names; each argument value is pushed before the call (one PopAdLdVar each).

When the compiler emits it

Emitted for o.Add v:=1, key:="a" where o is a typelib dispinterface.

Handler analysis

lblEX_LateIdNamedCall (0x6610A868) reads len (named bytes = len-6), the DISPID and cArgs. ExLateIdNamed reverses the named DISPID array to match rgvarg and calls SafeInvoke with flags 1 (DISPATCH_METHOD). vbdec resolves names when the object came from a typed call: the call's return type gives the interface, and the member is found by DISPID.

VB6 source (verified: compiles to this slot)
' references probes\_tlb\probetlb.tlb
Public Sub Main()
  Dim o As DOnly, v As Variant, c As Object
  o.Add v:=1, key:="a"
End Sub
Encoding, evidence and notes
Encoding

Encoding: FE AA (lead byte FE selects table 4), then a variable-length block: u16 len, u32 dispid, u16 cArgs (every argument), then (len-6)/4 x u32 named-argument DISPIDs.
Size: 4 + len bytes in total; the size column (9) is the minimum, with no named arguments.
Observed (decoded): 401467 FEAA 0E00040000000200 [8 bytes] LateIdNamedCall dispid:0x4 args:2 named:(#0:=, #1:=)

Examples
401467    FEAA 0E00040000000200 [8 bytes] LateIdNamedCall dispid:0x4 args:2 named:(#0:=, #1:=)

Phase 4 probe, decoded by vbdec's named-call post-processor (2026-10-14).

More cases from the layout probes:

p.Render hdc:=hdc, x:=0, ... prcWBounds:=0 (p from LoadPicture)  ->  LateIdNamedCall Picture.Render args:10 named:(hdc:=, x:=, y:=, cx:=, cy:=, xSrc:=, ySrc:=, cxSrc:=, cySrc:=, prcWBounds:=)
d.Add key:="k", v:=1  ->  LateIdNamedCall dispid:0x4 args:2 named:(#1:=, #0:=)
p.Render 0, 0, cy:=1, cx:=2, y:=3, ...  ->  named DISPIDs 4,3,2,5,6,7,8,9 (positional args not listed)
Evidence and notes

Emitted by VB6 SP6 (P-code): yes. Minimal probe: probes\op\4_AA_LateIdNamedCall.

Handler: 0x6610A868, unique to this slot (real opcode #672).

Check of vb6_source_eq example: verified: compiles and emits this slot.

Runtime check: Confirmed 2026-10-14 against the runtime handler and compiled probes covering all four variants, named arguments out of order and positional arguments mixed in (probes\_lateid via lateid_lab.py, probes\_latemem via latemem_lab.py).

Example from the description
' references probes\_tlb\probetlb.tlb
Public Sub Main()
  Dim o As DOnly, v As Variant, c As Object
  o.Add v:=1, key:="a"
End Sub

Description: draft, by claude-opus-5-5. Handler 0x6610A868, dispatch slot 0x66107FBC, modOpcodes line 347.

LateIdNamedCallLdVar

(4,0xAB)emittedhandler #673Object / COMcontextual
Late-bound function call by DISPID with named arguments; push the result Variant.

As LateIdNamedCall, for a call whose result is used. Operand block: u16 len first, then i16 %a (the result Variant temporary), u32 dispid, u16 cArgs, then (len-8)/4 x u32 named DISPIDs. Instruction length = 4 + len. Names are stored in source order (the runtime reverses them to match rgvarg). Positional arguments are pushed first and are not listed, so cArgs can exceed the number of names; each argument value is pushed before the call (one PopAdLdVar each).

When the compiler emits it

Emitted for Set c = o.Child(n:=2) / v = o.Item(idx:=1) on a typelib dispinterface.

Handler analysis

lblEX_LateIdNamedCallLdVar (0x6610A8A0): named bytes = len-8; flags 3 (DISPATCH_METHOD | DISPATCH_PROPERTYGET); shared lblExLateIdNamed / ExLateIdNamed path.

VB6 source (verified: compiles to this slot)
' references probes\_tlb\probetlb.tlb
Public Sub Main()
  Dim o As DOnly, c As Object
  Set c = o.Child(n:=2)
End Sub
Encoding, evidence and notes
Encoding

Encoding: FE AB (lead byte FE selects table 4), then a variable-length block: u16 len, i16 %a (result Variant), u32 dispid, u16 cArgs, then (len-8)/4 x u32 named DISPIDs.
Size: 4 + len bytes in total; the size column (11) is the minimum, with no named arguments.
Observed (decoded): 401455 FEAB 0C0044FF050000000100 [4 bytes] LateIdNamedCallLdVar var_BC = dispid:0x5 args:1 named:(#0:=)

Examples
401455    FEAB 0C0044FF050000000100 [4 bytes] LateIdNamedCallLdVar var_BC = dispid:0x5 args:1 named:(#0:=)

Phase 4 probe, decoded by vbdec's named-call post-processor (2026-10-14).

More cases from the layout probes:

r = d.Item(idx:=1)          ->  LateIdNamedCallLdVar var_C4 = dispid:0x3 args:1 named:(#0:=)
r = d.Mix(1, 2, d:=4, c:=3) ->  LateIdNamedCallLdVar var_118 = dispid:0x9 args:4 named:(#3:=, #2:=)
Evidence and notes

Emitted by VB6 SP6 (P-code): yes. Minimal probe: probes\op\4_AB_LateIdNamedCallLdVar.

Handler: 0x6610A8A0, unique to this slot (real opcode #673).

Check of vb6_source_eq example: verified: compiles and emits this slot.

Runtime check: Confirmed 2026-10-14 against the runtime handler and compiled probes covering all four variants, named arguments out of order and positional arguments mixed in (probes\_lateid via lateid_lab.py, probes\_latemem via latemem_lab.py).

Example from the description
' references probes\_tlb\probetlb.tlb
Public Sub Main()
  Dim o As DOnly, c As Object
  Set c = o.Child(n:=2)
End Sub

Description: draft, by claude-opus-5-5. Handler 0x6610A8A0, dispatch slot 0x66107FC0, modOpcodes line 348.

LateIdNamedCallSt

(4,0xAC)emittedhandler #674Object / COMcontextual
Late-bound property-put by DISPID with named index arguments.

Late-bound property Let by DISPID with named index arguments (d.Indexed(i:=1) = 5). Same operand block as LateIdNamedCall. The assigned value comes from the stack and is not counted in cArgs, and no DISPID_PROPERTYPUT (-3) entry is stored: the runtime adds it. Names are stored in source order (the runtime reverses them to match rgvarg). Positional arguments are pushed first and are not listed, so cArgs can exceed the number of names; each argument value is pushed before the call (one PopAdLdVar each).

When the compiler emits it

Emitted for o.Indexed(i:=1) = 2 on a typelib dispinterface.

Handler analysis

lblEX_LateIdNamedCallSt (0x6610A8BD) reads the same fields and calls ExLateIdNamedCallSt.

VB6 source (verified: compiles to this slot)
' references probes\_tlb\probetlb.tlb
Public Sub Main()
  Dim o As DOnly, c As Object
  o.Indexed(i:=1) = 2
End Sub
Encoding, evidence and notes
Encoding

Encoding: FE AC (lead byte FE selects table 4), then a variable-length block: u16 len, u32 dispid, u16 cArgs (every argument), then (len-6)/4 x u32 named-argument DISPIDs.
Size: 4 + len bytes in total; the size column (9) is the minimum, with no named arguments.
Observed (decoded): 40145E FEAC 0A00060000000100 [4 bytes] LateIdNamedCallSt dispid:0x6 args:1 named:(#0:=)

Examples
40145E    FEAC 0A00060000000100 [4 bytes] LateIdNamedCallSt dispid:0x6 args:1 named:(#0:=)

Phase 4 probe, decoded by vbdec's named-call post-processor (2026-10-14).

More cases from the layout probes:

d.Indexed(i:=1) = 5  ->  LateIdNamedCallSt dispid:0x6 args:1 named:(#0:=)
Evidence and notes

Emitted by VB6 SP6 (P-code): yes. Minimal probe: probes\op\4_AC_LateIdNamedCallSt.

Handler: 0x6610A8BD, unique to this slot (real opcode #674).

Check of vb6_source_eq example: verified: compiles and emits this slot.

Runtime check: Confirmed 2026-10-14 against the runtime handler and compiled probes covering all four variants, named arguments out of order and positional arguments mixed in (probes\_lateid via lateid_lab.py, probes\_latemem via latemem_lab.py).

Example from the description
' references probes\_tlb\probetlb.tlb
Public Sub Main()
  Dim o As DOnly, c As Object
  o.Indexed(i:=1) = 2
End Sub

Description: draft, by claude-opus-5-5. Handler 0x6610A8BD, dispatch slot 0x66107FC4, modOpcodes line 349.

LateIdNamedStAd

(4,0xAD)emittedhandler #675Object / COMcontextual
Late-bound property-putref (Set) by DISPID with named index arguments.

Late-bound property Set (by reference) by DISPID with named index arguments (Set d.ObjAt(i:=1) = x). Same operand block as LateIdNamedCall. Names are stored in source order (the runtime reverses them to match rgvarg). Positional arguments are pushed first and are not listed, so cArgs can exceed the number of names; each argument value is pushed before the call (one PopAdLdVar each).

When the compiler emits it

Emitted for Set o.ObjAt(i:=1) = Nothing where o is a typelib dispinterface (DOnly in probetlb, member ObjAt added 2026-10-14) and the property takes an index argument.

Handler analysis

lblEX_LateIdNamedStAd (0x6610A8E9): same fields, flags 8 (DISPATCH_PROPERTYPUTREF), ExLateIdNamedSt.

VB6 source (verified: compiles to this slot)
Option Explicit

Public Sub Main()
  Dim o As DOnly
  Set o.ObjAt(i:=1) = Nothing
End Sub
Encoding, evidence and notes
Encoding

Encoding: FE AD (lead byte FE selects table 4), then a variable-length block: u16 len, u32 dispid, u16 cArgs (every argument), then (len-6)/4 x u32 named-argument DISPIDs.
Size: 4 + len bytes in total; the size column (9) is the minimum, with no named arguments.
Observed (decoded): 40145E FEAD 0A00080000000100 [4 bytes] LateIdNamedStAd dispid:0x8 args:1 named:(#0:=)

Examples
40145E    FEAD 0A00080000000100 [4 bytes] LateIdNamedStAd dispid:0x8 args:1 named:(#0:=)

Phase 4 probe, decoded by vbdec's named-call post-processor (2026-10-14).

More cases from the layout probes:

Set d.ObjAt(i:=2) = Nothing  ->  LateIdNamedStAd dispid:0x8 args:1 named:(#0:=)
Evidence and notes

Emitted by VB6 SP6 (P-code): yes. Minimal probe: probes\op\4_AD_LateIdNamedStAd (added 2026-10-14; it needed an indexed propputref member, DOnly.ObjAt, in the probe typelib).

Handler: 0x6610A8E9, unique to this slot.

Runtime check: Confirmed 2026-10-14 against the runtime handler and compiled probes covering all four variants, named arguments out of order and positional arguments mixed in (probes\_lateid via lateid_lab.py, probes\_latemem via latemem_lab.py).

Example from the description
Option Explicit

Public Sub Main()
  Dim o As DOnly
  Set o.ObjAt(i:=1) = Nothing
End Sub

Description: draft, by claude-opus-5-5. Handler 0x6610A8E9, dispatch slot 0x66107FC8, modOpcodes line 350.

LateId_Store

Late-bound DispID property put Prefix: Id = DispID

LateIdSt

(0,0x2C)emittedprimary of 2handler #43Object / COMcontextual201 corpus hits
Late-bound property-put by compile-time DISPID.

Pops the value and the object and calls IDispatch::Invoke(DISPATCH_PROPERTYPUT) with the DISPID from the operand (observed 0000 0000: DISPID 0 = Font.Name).

When the compiler emits it

Emitted for f.Name = "x" where the property belongs to a dispatch interface known from a type library.

VB6 source (verified: compiles to this slot)
Public Sub Main()
  Dim f As StdFont, v As Variant
  f.Name = "x"
End Sub
Encoding, evidence and notes
Encoding

Encoding: 2C, then 4 operand byte(s); total instruction length 5 byte(s).
No printf operands are declared, but the instruction still consumes operand bytes; see the size above and the observed bytes below. (Phase 3a: flag=0 does not mean 'no operands'.)
Observed: 2C 00000000 LateIdSt

Examples
2C 00000000  LateIdSt

From the Phase 4 probe (VB6 SP6, P-code).

Evidence and notes

Emitted by VB6 SP6 (P-code): yes. Minimal probe: probes\op\0_2C_LateIdSt.

Handler: 0x66105B1C, shared by 2 dispatch slots (real opcode #43). This is the primary slot. Other slots: (4,A3) LateIdSt.

Check of vb6_source_eq example: verified: compiles and emits this slot.

Corpus: 201 occurrence(s) in PDFStreamDumper_p.exe.

Example from the description
Public Sub Main()
  Dim f As StdFont, v As Variant
  f.Name = "x"
End Sub
Slots sharing this handler

(4,0xA3) LateIdSt

Description: draft, by claude-opus-5-5. Handler 0x66105B1C, dispatch slot 0x66106DC4, modOpcodes line 340.

LateIdSt

(4,0xA3)not emitteddup of (0,2C)handler #43Object / COMconfirmed_handler
Same handler as (0,0x2C) LateIdSt: Late-bound property-put by compile-time DISPID.
Encoding, evidence and notes
Encoding

Encoding: FE A3 (lead byte FE selects table 4), then 4 operand byte(s); total instruction length 6 byte(s).
No printf operands are declared, but the instruction still consumes operand bytes; see the size above and the observed bytes below. (Phase 3a: flag=0 does not mean 'no operands'.)

Evidence and notes

Emitted by VB6 SP6 (P-code): not observed in about 3,070 probe programs. The slot exists in the runtime's dispatch table, but no tested source construct makes the compiler emit it.

Handler: 0x66105B1C, shared by 2 dispatch slots (real opcode #43). This is a duplicate slot of (0,2C) LateIdSt. Other slots: (0,2C) LateIdSt.

Slots sharing this handler

(0,0x2C) LateIdSt

Description: none. Handler 0x66105B1C, dispatch slot 0x66107FA0, modOpcodes line 341.

LateIdStAd

(4,0xA5)emittedhandler #667Object / COMinferred_corpus
Late-bound property-putref by DISPID (Set o(i) = obj).

Calls IDispatch::Invoke(DISPATCH_PROPERTYPUTREF) with the indices and the object. Operands: DISPID and argument count.

When the compiler emits it

Emitted for Set o(1) = Nothing on o As Object (default member, DISPID 0).

VB6 source (verified: compiles to this slot)
Public Sub Main()
  Dim o As Object
  Set o(1) = Nothing
End Sub
Encoding, evidence and notes
Encoding

Encoding: FE A5 (lead byte FE selects table 4), then 6 operand byte(s); total instruction length 8 byte(s).
No printf operands are declared, but the instruction still consumes operand bytes; see the size above and the observed bytes below. (Phase 3a: flag=0 does not mean 'no operands'.)
Observed: FEA5 000000000100 LateIdStAd

Examples
FEA5 000000000100  LateIdStAd

From the Phase 4 probe (VB6 SP6, P-code).

Evidence and notes

Emitted by VB6 SP6 (P-code): yes. Minimal probe: probes\op\4_A5_LateIdStAd.

Handler: 0x66105B2D, unique to this slot (real opcode #667).

Check of vb6_source_eq example: verified: compiles and emits this slot.

Example from the description
Public Sub Main()
  Dim o As Object
  Set o(1) = Nothing
End Sub

Description: draft, by claude-opus-5-5. Handler 0x66105B2D, dispatch slot 0x66107FA8, modOpcodes line 342.

LateMem_Call

Late-bound member call Prefix: Late = IDispatch::Invoke

LateMemCall

(4,0x98)emittedhandler #657Object / COMinferred_corpus11 corpus hits
Late-bound method call by name (LateMemCall).

Performs IDispatch::GetIDsOfNames for the member name, then IDispatch::Invoke with DISPATCH_METHOD. Operand %c resolves the name string from the const pool; additional operands carry the argument count.

When the compiler emits it

Emitted for every late-bound method call (receiver typed Object, Variant, or DAO/ADO interfaces).

VB6 source (verified: compiles to this slot)
Public Sub Main()
  Dim o As Object, n As Long
  o.DoIt n
End Sub
Encoding, evidence and notes
Encoding

Encoding: FE 98 (lead byte FE selects table 4), then 4 operand byte(s); total instruction length 6 byte(s).
vbdec template: %s args:%2
Operands:

  1. %s: pool_string, 2 byte(s). 16-bit constant-pool index of a string literal (BSTR).
  2. %2 (args): immediate_word, 2 byte(s). 16-bit immediate.

Observed: FE98 00000100 LateMemCall str_4011E8='DoIt' args:0x1

Examples
Form1.LoadPlugins @ 0x4644FC | 464797    FE98 19000100         LateMemCall str_41CC60='sethost'  args:0x1
Form1.mnuPluginList_Event_0 @ 0x44C3D4 | 44C46B    FE98 92000100         LateMemCall str_41F060='startup'  args:0x1
Form1.cmdDecode_Click @ 0x4775C0 | 477F51    FE98 4A010100         LateMemCall str_420B64='initasLib'  args:0x1

11 occurrence(s) in PDFStreamDumper.

Evidence and notes

Emitted by VB6 SP6 (P-code): yes. Minimal probe: probes\op\4_98_LateMemCall.

Handler: 0x66105B96, unique to this slot (real opcode #657).

Check of vb6_source_eq example: verified: compiles and emits this slot.

Corpus: 11 occurrence(s) in PDFStreamDumper_p.exe.

Example from the description
Dim o As Object
o.SomeMethod arg1, arg2

Description: draft, by claude-opus-4.7. Handler 0x66105B96, dispatch slot 0x66107F74, modOpcodes line 330.

LateMemCallLdVar

(4,0x9A)emittedhandler #658Object / COMinferred_corpus9 corpus hits
Late-bound function call by name with arguments; result Variant in a temporary.

Performs IDispatch::GetIDsOfNames for the member name, then IDispatch::Invoke with DISPATCH_METHOD. Operand %c resolves the name string from the const pool; additional operands carry the argument count.

When the compiler emits it

Emitted for v = o.Method(args) (the result is used) where o is typed Object. Statement calls whose result is discarded use LateMemCall.

VB6 source (verified: compiles to this slot)
Public Sub Main()
  Dim o As Object, v As Variant
  v = o.DoIt(1, "a")
End Sub
Encoding, evidence and notes
Encoding

Encoding: FE 9A (lead byte FE selects table 4), then 6 operand byte(s); total instruction length 8 byte(s).
vbdec template: %a %s args:%2
Operands:

  1. %a: local_var_ref, 2 byte(s). signed 16-bit offset from the procedure frame pointer (EBP). Negative = local/temporary (vbdec var_XX, XX = -offset), positive = argument (arg_XX).
  2. %s: pool_string, 2 byte(s). 16-bit constant-pool index of a string literal (BSTR).
  3. %2 (args): immediate_word, 2 byte(s). 16-bit immediate.

Observed: FE9A 18FF01000200 LateMemCallLdVar var_E8 str_4011F4='DoIt' args:0x2

Examples
CScriptFunctions.GetListviewData @ 0x44080C | 440824    FE9A 4CFF03000100     LateMemCallLdVar var_B4 str_426A10='ListItems'  args:0x1
CScriptFunctions.GetPageNumWords @ 0x442608 | 44261B    FE9A 68FF10000100     LateMemCallLdVar var_98 str_426C88='GetPageNumWords'  args:0x1
CScriptFunctions.GetPageNthWord @ 0x44018C | 4401A5    FE9A 5CFF13000200     LateMemCallLdVar var_A4 str_426CF4='GetPageNthWord'  args:0x2

9 occurrence(s) in PDFStreamDumper.

Evidence and notes

Emitted by VB6 SP6 (P-code): yes. Minimal probe: probes\op\4_9A_LateMemCallLdVar.

Handler: 0x66105BA9, unique to this slot (real opcode #658).

Check of vb6_source_eq example: verified: compiles and emits this slot.

Corpus: 9 occurrence(s) in PDFStreamDumper_p.exe.

Example from the description
Dim o As Object, v As Variant
v = o.DoIt(1, "a")

Description: draft, by claude-opus-5-5. Handler 0x66105BA9, dispatch slot 0x66107F7C, modOpcodes line 329.

LateMemCallSt

(4,0x9C)emittedhandler #660Object / COMinferred_corpus
Late-bound property-put by name with arguments (o.Prop(i) = v).

Resolves the member name from the string pool via GetIDsOfNames, then calls Invoke(DISPATCH_PROPERTYPUT) with the index arguments and the value.

Operands: %s member name, args:%2 argument count.

When the compiler emits it

Emitted for an indexed property assignment on an Object variable.

VB6 source (verified: compiles to this slot)
Public Sub Main()
  Dim o As Object
  o.Prop(1) = 5
End Sub
Encoding, evidence and notes
Encoding

Encoding: FE 9C (lead byte FE selects table 4), then 4 operand byte(s); total instruction length 6 byte(s).
vbdec template: %s args:%2
Operands:

  1. %s: pool_string, 2 byte(s). 16-bit constant-pool index of a string literal (BSTR).
  2. %2 (args): immediate_word, 2 byte(s). 16-bit immediate.

Observed: FE9C 00000100 LateMemCallSt str_4011E8='Prop' args:0x1

Examples
FE9C 00000100  LateMemCallSt str_4011E8='Prop'  args:0x1

From the Phase 4 probe (VB6 SP6, P-code).

Evidence and notes

Emitted by VB6 SP6 (P-code): yes. Minimal probe: probes\op\4_9C_LateMemCallSt.

Handler: 0x66105C0E, unique to this slot (real opcode #660).

Check of vb6_source_eq example: verified: compiles and emits this slot.

Example from the description
Public Sub Main()
  Dim o As Object
  o.Prop(1) = 5
End Sub

Description: draft, by claude-opus-5-5. Handler 0x66105C0E, dispatch slot 0x66107F84, modOpcodes line 326.

LateMem_Load

Late-bound member property get Prefix: Late = IDispatch::Invoke

LateMemLdVar

(0,0x57)emittedprimary of 2handler #85Object / COMinferred_corpus25 corpus hits
Late-bound property get (LateMemLdVar).

Invokes a property's Get accessor via IDispatch::Invoke with DISPATCH_PROPERTYGET. Pushes the returned value onto the stack.

When the compiler emits it

Emitted at every late-bound property read.

VB6 source (verified: compiles to this slot)
Public Sub Main()
  Dim o As Object, v As Variant
  v = o.Prop
End Sub
Encoding, evidence and notes
Encoding

Encoding: 57, then 4 operand byte(s); total instruction length 5 byte(s).
vbdec template: %a %s
Operands:

  1. %a: local_var_ref, 2 byte(s). signed 16-bit offset from the procedure frame pointer (EBP). Negative = local/temporary (vbdec var_XX, XX = -offset), positive = argument (arg_XX).
  2. %s: pool_string, 2 byte(s). 16-bit constant-pool index of a string literal (BSTR).

Observed: 57 58FF0000 LateMemLdVar var_A8 str_4011E8='Prop'

Examples
Form1.mnuManualEscape_Event_0 @ 0x467B64 | 467C0E    57 5CFFB000           LateMemLdVar var_A4 str_41F72C='SelText'
Form1.mnuManualEscape_Event_0 @ 0x467B64 | 467C37    57 5CFFB100           LateMemLdVar var_A4 str_41F73C='Text'
Form1.mnuManualEscape_Event_0 @ 0x467B64 | 467C5A    57 5CFFB200           LateMemLdVar var_A4 str_41F748='SelStart'

25 occurrence(s) in PDFStreamDumper.

Evidence and notes

Emitted by VB6 SP6 (P-code): yes. Minimal probe: probes\op\0_57_LateMemLdVar.

Handler: 0x66105B4E, shared by 2 dispatch slots (real opcode #85). This is the primary slot. Other slots: (4,99) LateMemLdVar.

Check of vb6_source_eq example: verified: compiles and emits this slot.

Corpus: 25 occurrence(s) in PDFStreamDumper_p.exe.

Example from the description
Dim o As Object, x As Variant
x = o.SomeProperty
Slots sharing this handler

(4,0x99) LateMemLdVar

Description: draft, by claude-opus-4.7. Handler 0x66105B4E, dispatch slot 0x66106E70, modOpcodes line 323.

LateMemLdVar

(4,0x99)not emitteddup of (0,57)handler #85Object / COMconfirmed_handler
Same handler as (0,0x57) LateMemLdVar: Late-bound property get (LateMemLdVar).
Encoding, evidence and notes
Encoding

Encoding: FE 99 (lead byte FE selects table 4), then 4 operand byte(s); total instruction length 6 byte(s).
vbdec template: %a %s
Operands:

  1. %a: local_var_ref, 2 byte(s). signed 16-bit offset from the procedure frame pointer (EBP). Negative = local/temporary (vbdec var_XX, XX = -offset), positive = argument (arg_XX).
  2. %s: pool_string, 2 byte(s). 16-bit constant-pool index of a string literal (BSTR).
Evidence and notes

Emitted by VB6 SP6 (P-code): not observed in about 3,070 probe programs. The slot exists in the runtime's dispatch table, but no tested source construct makes the compiler emit it.

Handler: 0x66105B4E, shared by 2 dispatch slots (real opcode #85). This is a duplicate slot of (0,57) LateMemLdVar. Other slots: (0,57) LateMemLdVar.

Slots sharing this handler

(0,0x57) LateMemLdVar

Description: none. Handler 0x66105B4E, dispatch slot 0x66107F78, modOpcodes line 324.

LateMem_Named

Late-bound member with named args Prefix: Named-arg variant

LateMemNamedCall

(4,0xA6)emittedhandler #668Object / COMcontextual
Late-bound method call by name with named arguments.

Late-bound call by name with named arguments, on an Object/Variant. The member name and every argument name are resolved with IDispatch::GetIDsOfNames at run time, then Invoke is called with DISPATCH_METHOD. Operand block: u16 len, u16 member (const-pool index of the member name), u16 cArgs (every argument), then (len-4)/2 x u16 const-pool indices of the argument names. Instruction length = 4 + len. Names are stored in source order (the runtime reverses them to match rgvarg). Positional arguments are pushed first and are not listed, so cArgs can exceed the number of names; each argument value is pushed before the call (one PopAdLdVar each).

When the compiler emits it

Emitted for o.DoIt A:=1, B:=2 on an Object variable.

Handler analysis

lblEX_LateMemNamedCall (0x6610A968) reads len, the member index and cArgs. ExLateMemNamedImp builds [member, names...] from the procedure's const pool ([ebp-54h]), reversing the named list; DoLateMemNamed calls GetIDsOfNames and SafeInvoke with flags 1 (DISPATCH_METHOD). If the member resolves but an argument name does not, the error is reported as DISP_E_PARAMNOTFOUND.

VB6 source (verified: compiles to this slot)
Public Sub Main()
  Dim o As Object
  o.DoIt A:=1, B:=2
End Sub
Encoding, evidence and notes
Encoding

Encoding: FE A6 (lead byte FE selects table 4), then a variable-length block: u16 len, u16 member (const-pool index of the member name), u16 cArgs (every argument), then (len-4)/2 x u16 const-pool indices of the argument names.
Size: 4 + len bytes in total; the size column (7) is the minimum, with no named arguments.
Observed (decoded): 40147B FEA6 080000000200 [4 bytes] LateMemNamedCall DoIt args:2 named:(A:=, B:=)

Examples
40147B    FEA6 080000000200 [4 bytes] LateMemNamedCall DoIt args:2 named:(A:=, B:=)

Phase 4 probe, decoded by vbdec's named-call post-processor (2026-10-14).

More cases from the layout probes:

o.Add key:="k", v:=1     ->  LateMemNamedCall Add args:2 named:(key:=, v:=)
o.Add 1, key:="k"        ->  LateMemNamedCall Add args:2 named:(key:=)
o.Mix 10, c:=3, d:=4, b:=2 ->  LateMemNamedCall Mix args:4 named:(c:=, d:=, b:=)
Evidence and notes

Emitted by VB6 SP6 (P-code): yes. Minimal probe: probes\op\4_A6_LateMemNamedCall.

Handler: 0x6610A968, unique to this slot (real opcode #668).

Check of vb6_source_eq example: verified: compiles and emits this slot.

Runtime check: Confirmed 2026-10-14 against the runtime handler and compiled probes covering all four variants, named arguments out of order and positional arguments mixed in (probes\_lateid via lateid_lab.py, probes\_latemem via latemem_lab.py).

Example from the description
Public Sub Main()
  Dim o As Object
  o.DoIt A:=1, B:=2
End Sub

Description: draft, by claude-opus-5-5. Handler 0x6610A968, dispatch slot 0x66107FAC, modOpcodes line 331.

LateMemNamedCallLdVar

(4,0xA7)emittedhandler #669Object / COMcontextual
Late-bound function call by name with named arguments; push the result Variant.

As LateMemNamedCall, for a call whose result is used. Operand block: u16 len, i16 %a (the result Variant temporary), u16 member, u16 cArgs, then (len-6)/2 x u16 name indices. Instruction length = 4 + len. Names are stored in source order (the runtime reverses them to match rgvarg). Positional arguments are pushed first and are not listed, so cArgs can exceed the number of names; each argument value is pushed before the call (one PopAdLdVar each).

When the compiler emits it

Emitted for v = o.DoIt(A:=1, B:=2).

Handler analysis

lblEX_LateMemNamedCallLdVar (0x6610A9A2): len comes first, then the result frame offset; flags 3 (DISPATCH_METHOD | DISPATCH_PROPERTYGET), then the shared lblExLateMemNamed path.

VB6 source (verified: compiles to this slot)
Public Sub Main()
  Dim o As Object, v As Variant
  v = o.DoIt(A:=1, B:=2)
End Sub
Encoding, evidence and notes
Encoding

Encoding: FE A7 (lead byte FE selects table 4), then a variable-length block: u16 len, i16 %a (result Variant), u16 member, u16 cArgs, then (len-6)/2 x u16 name indices.
Size: 4 + len bytes in total; the size column (9) is the minimum, with no named arguments.
Observed (decoded): 40147B FEA7 0A0018FF00000200 [4 bytes] LateMemNamedCallLdVar var_E8 = DoIt args:2 named:(A:=, B:=)

Examples
40147B    FEA7 0A0018FF00000200 [4 bytes] LateMemNamedCallLdVar var_E8 = DoIt args:2 named:(A:=, B:=)

Phase 4 probe, decoded by vbdec's named-call post-processor (2026-10-14).

More cases from the layout probes:

r = o.Item(idx:=1)          ->  LateMemNamedCallLdVar var_C4 = Item args:1 named:(idx:=)
r = o.Mix(1, 2, d:=4, c:=3) ->  LateMemNamedCallLdVar var_118 = Mix args:4 named:(d:=, c:=)
Evidence and notes

Emitted by VB6 SP6 (P-code): yes. Minimal probe: probes\op\4_A7_LateMemNamedCallLdVar.

Handler: 0x6610A9A2, unique to this slot (real opcode #669).

Check of vb6_source_eq example: verified: compiles and emits this slot.

Runtime check: Confirmed 2026-10-14 against the runtime handler and compiled probes covering all four variants, named arguments out of order and positional arguments mixed in (probes\_lateid via lateid_lab.py, probes\_latemem via latemem_lab.py).

Example from the description
Public Sub Main()
  Dim o As Object, v As Variant
  v = o.DoIt(A:=1, B:=2)
End Sub

Description: draft, by claude-opus-5-5. Handler 0x6610A9A2, dispatch slot 0x66107FB0, modOpcodes line 332.

LateMemNamedCallSt

(4,0xA8)emittedhandler #670Object / COMcontextual
Late-bound property-put by name with named index arguments.

Late-bound property Let by name with named index arguments (o.P(i:=1) = v). Same operand block as LateMemNamedCall. The value being assigned comes from the stack and is not counted in cArgs or in the name list. Names are stored in source order (the runtime reverses them to match rgvarg). Positional arguments are pushed first and are not listed, so cArgs can exceed the number of names; each argument value is pushed before the call (one PopAdLdVar each).

When the compiler emits it

Emitted for o.Prop(A:=1) = 2.

Handler analysis

lblEX_LateMemNamedCallSt (0x6610A9C0) reads the same fields and calls ExLateMemNamedCallStImp (DISPATCH_PROPERTYPUT).

VB6 source (verified: compiles to this slot)
Public Sub Main()
  Dim o As Object
  o.Prop(A:=1) = 2
End Sub
Encoding, evidence and notes
Encoding

Encoding: FE A8 (lead byte FE selects table 4), then a variable-length block: u16 len, u16 member (const-pool index of the member name), u16 cArgs (every argument), then (len-4)/2 x u16 const-pool indices of the argument names.
Size: 4 + len bytes in total; the size column (7) is the minimum, with no named arguments.
Observed (decoded): 401473 FEA8 060000000100 [2 bytes] LateMemNamedCallSt Prop args:1 named:(A:=)

Examples
401473    FEA8 060000000100 [2 bytes] LateMemNamedCallSt Prop args:1 named:(A:=)

Phase 4 probe, decoded by vbdec's named-call post-processor (2026-10-14).

More cases from the layout probes:

o.Indexed(i:=1) = 5  ->  LateMemNamedCallSt Indexed args:1 named:(i:=)
Evidence and notes

Emitted by VB6 SP6 (P-code): yes. Minimal probe: probes\op\4_A8_LateMemNamedCallSt.

Handler: 0x6610A9C0, unique to this slot (real opcode #670).

Check of vb6_source_eq example: verified: compiles and emits this slot.

Runtime check: Confirmed 2026-10-14 against the runtime handler and compiled probes covering all four variants, named arguments out of order and positional arguments mixed in (probes\_lateid via lateid_lab.py, probes\_latemem via latemem_lab.py).

Example from the description
Public Sub Main()
  Dim o As Object
  o.Prop(A:=1) = 2
End Sub

Description: draft, by claude-opus-5-5. Handler 0x6610A9C0, dispatch slot 0x66107FB4, modOpcodes line 333.

LateMemNamedStAd

(4,0xA9)emittedhandler #671Object / COMcontextual
Late-bound property-putref by name with named index arguments.

Late-bound property Set (by reference) by name with named index arguments (Set o.P(i:=1) = x). Same operand block as LateMemNamedCall. Names are stored in source order (the runtime reverses them to match rgvarg). Positional arguments are pushed first and are not listed, so cArgs can exceed the number of names; each argument value is pushed before the call (one PopAdLdVar each).

When the compiler emits it

Emitted for Set o.Prop(A:=1) = x.

Handler analysis

lblEX_LateMemNamedStAd (0x6610A9EE): same fields, flags 8 (DISPATCH_PROPERTYPUTREF), ExLateMemNamedStImp.

VB6 source (verified: compiles to this slot)
Public Sub Main()
  Dim o As Object
  Set o.Prop(A:=1) = Nothing
End Sub
Encoding, evidence and notes
Encoding

Encoding: FE A9 (lead byte FE selects table 4), then a variable-length block: u16 len, u16 member (const-pool index of the member name), u16 cArgs (every argument), then (len-4)/2 x u16 const-pool indices of the argument names.
Size: 4 + len bytes in total; the size column (7) is the minimum, with no named arguments.
Observed (decoded): 401474 FEA9 060000000100 [2 bytes] LateMemNamedStAd Prop args:1 named:(A:=)

Examples
401474    FEA9 060000000100 [2 bytes] LateMemNamedStAd Prop args:1 named:(A:=)

Phase 4 probe, decoded by vbdec's named-call post-processor (2026-10-14).

More cases from the layout probes:

Set o.ObjAt(i:=2) = Nothing  ->  LateMemNamedStAd ObjAt args:1 named:(i:=)
Evidence and notes

Emitted by VB6 SP6 (P-code): yes. Minimal probe: probes\op\4_A9_LateMemNamedStAd.

Handler: 0x6610A9EE, unique to this slot (real opcode #671).

Check of vb6_source_eq example: verified: compiles and emits this slot.

Runtime check: Confirmed 2026-10-14 against the runtime handler and compiled probes covering all four variants, named arguments out of order and positional arguments mixed in (probes\_lateid via lateid_lab.py, probes\_latemem via latemem_lab.py).

Example from the description
Public Sub Main()
  Dim o As Object
  Set o.Prop(A:=1) = Nothing
End Sub

Description: draft, by claude-opus-5-5. Handler 0x6610A9EE, dispatch slot 0x66107FB8, modOpcodes line 334.

LateMem_Store

Late-bound member property put Prefix: Late = IDispatch::Invoke

LateMemSt

(4,0x9B)emittedhandler #659Object / COMinferred_corpus16 corpus hits
Late-bound property put (LateMemSt).

Invokes a property's Let/Set accessor via IDispatch::Invoke with DISPATCH_PROPERTYPUT (or PROPERTYPUTREF for Set-style assignment).

When the compiler emits it

Emitted at every late-bound property write; the Set vs Let form is chosen by the value's type.

VB6 source (verified: compiles to this slot)
Public Sub Main()
  Dim o As Object
  o.Prop = 5
End Sub
Encoding, evidence and notes
Encoding

Encoding: FE 9B (lead byte FE selects table 4), then 2 operand byte(s); total instruction length 4 byte(s).
vbdec template: %s
Operands:

  1. %s: pool_string, 2 byte(s). 16-bit constant-pool index of a string literal (BSTR).

Observed: FE9B 0000 LateMemSt str_4011E8='Prop'

Examples
Form1.mnuManualEscape_Event_0 @ 0x467B64 | 467F29    FE9B B000             LateMemSt str_41F72C='SelText'
Form1.mnuManualEscape_Event_0 @ 0x467B64 | 467F3A    FE9B B200             LateMemSt str_41F748='SelStart'
Form1.mnuManualEscape_Event_0 @ 0x467B64 | 467F4C    FE9B C000             LateMemSt str_41F774='SelLength'

16 occurrence(s) in PDFStreamDumper.

Evidence and notes

Emitted by VB6 SP6 (P-code): yes. Minimal probe: probes\op\4_9B_LateMemSt.

Handler: 0x66105BC0, unique to this slot (real opcode #659).

Check of vb6_source_eq example: verified: compiles and emits this slot.

Corpus: 16 occurrence(s) in PDFStreamDumper_p.exe.

Example from the description
Dim o As Object
o.SomeProperty = newValue

Description: draft, by claude-opus-4.7. Handler 0x66105BC0, dispatch slot 0x66107F80, modOpcodes line 325.

LateMemStAd

(4,0x9D)emittedhandler #661Object / COMinferred_corpus
Late-bound property-putref by name (Set o.Prop = obj).

Resolves the name and calls Invoke(DISPATCH_PROPERTYPUTREF). Operand: string-pool index of the member name.

When the compiler emits it

Emitted for Set o.Prop = x on an Object variable.

VB6 source (verified: compiles to this slot)
Public Sub Main()
  Dim o As Object
  Set o.Prop = Nothing
End Sub
Encoding, evidence and notes
Encoding

Encoding: FE 9D (lead byte FE selects table 4), then 4 operand byte(s); total instruction length 6 byte(s).
No printf operands are declared, but the instruction still consumes operand bytes; see the size above and the observed bytes below. (Phase 3a: flag=0 does not mean 'no operands'.)
Observed: FE9D 00000000 LateMemStAd

Examples
FE9D 00000000  LateMemStAd

From the Phase 4 probe (VB6 SP6, P-code).

Evidence and notes

Emitted by VB6 SP6 (P-code): yes. Minimal probe: probes\op\4_9D_LateMemStAd.

Handler: 0x66105BFD, unique to this slot (real opcode #661).

Check of vb6_source_eq example: verified: compiles and emits this slot.

Example from the description
Public Sub Main()
  Dim o As Object
  Set o.Prop = Nothing
End Sub

Description: draft, by claude-opus-5-5. Handler 0x66105BFD, dispatch slot 0x66107F88, modOpcodes line 327.

Lit

Push literal onto stack

LitCy

(0,0xF6)emittedprimary of 3handler #243Currencyinferred_corpus
Push an 8-byte literal (Currency literals; also raw 8-byte double payloads).

Pushes the 8 operand bytes onto the evaluation stack as-is.

Stack: [...] -> [..., c:Cy]

Operand %C: 8 bytes. For Currency, the value is the scaled integer (1.5@ = 0x3A98 = 15000). Phase 4 also observed it carrying an IEEE double when a Double literal is passed ByVal or printed, so treat it as a raw 8-byte push. vbdec always formats it as Currency.

When the compiler emits it

Emitted for Currency literals and for some Double literals pushed by value.

VB6 source (verified: compiles to this slot)
Public Sub Main()
  Dim a As Currency, c As Currency
  a = 1.5@
End Sub
Encoding, evidence and notes
Encoding

Encoding: F6, then 8 operand byte(s); total instruction length 9 byte(s).
vbdec template: %C
Operands:

  1. %C: literal_currency, 8 byte(s). 8-byte Currency literal (scaled 64-bit integer, value*10000).

Observed: F6 983A000000000000 LitCy 1.5

Examples
F6 983A000000000000  LitCy 1.5

From the Phase 4 probe (VB6 SP6, P-code).

Evidence and notes

Emitted by VB6 SP6 (P-code): yes. Minimal probe: probes\op\0_F6_LitCy.

Handler: 0x6610AA36, shared by 3 dispatch slots (real opcode #243). This is the primary slot. Other slots: (4,BB) LitR8, (4,BC) LitR8.

Finding: Probe: emitted for Currency literals, and with raw 8-byte double payloads when a Double literal is passed ByVal or used in a Print # list. Effectively an 8-byte raw push. vbdec's display decodes it as Currency even when the bytes are a double. Same handler as LitR8 (4,BB/BC).

Check of vb6_source_eq example: verified: compiles and emits this slot.

Example from the description
Public Sub Main()
  Dim a As Currency, c As Currency
  a = 1.5@
End Sub
Slots sharing this handler

(4,0xBB) LitR8, (4,0xBC) LitR8

Description: draft, by claude-opus-5-5. Handler 0x6610AA36, dispatch slot 0x661070EC, modOpcodes line 770.

LitCy4

(0,0xF7)not emittedprimary of 2handler #244Currencyinferred_corpus
No description yet.
Encoding, evidence and notes
Encoding

Encoding: F7, then 4 operand byte(s); total instruction length 5 byte(s).
No printf operands are declared, but the instruction still consumes operand bytes; see the size above and the observed bytes below. (Phase 3a: flag=0 does not mean 'no operands'.)

Evidence and notes

Emitted by VB6 SP6 (P-code): not observed in about 3,070 probe programs. The slot exists in the runtime's dispatch table, but no tested source construct makes the compiler emit it.

Handler: 0x6610AA22, shared by 2 dispatch slots (real opcode #244). This is the primary slot. Other slots: (4,B7) LitCy4.

Slots sharing this handler

(4,0xB7) LitCy4

Description: none. Handler 0x6610AA22, dispatch slot 0x661070F0, modOpcodes line 771.

LitCy4

(4,0xB7)not emitteddup of (0,F7)handler #244Currencyconfirmed_handler
No description yet.
Encoding, evidence and notes
Encoding

Encoding: FE B7 (lead byte FE selects table 4), then 4 operand byte(s); total instruction length 6 byte(s).
No printf operands are declared, but the instruction still consumes operand bytes; see the size above and the observed bytes below. (Phase 3a: flag=0 does not mean 'no operands'.)

Evidence and notes

Emitted by VB6 SP6 (P-code): not observed in about 3,070 probe programs. The slot exists in the runtime's dispatch table, but no tested source construct makes the compiler emit it.

Handler: 0x6610AA22, shared by 2 dispatch slots (real opcode #244). This is a duplicate slot of (0,F7) LitCy4. Other slots: (0,F7) LitCy4.

Slots sharing this handler

(0,0xF7) LitCy4

Description: none. Handler 0x6610AA22, dispatch slot 0x66107FF0, modOpcodes line 772.

LitDate

(0,0xFA)emittedprimary of 3handler #247Floating pointinferred_corpus
Push an 8-byte floating-point literal onto the FPU (Double and Date literals).

Loads the 8-byte IEEE double operand onto the FPU stack.

Stack: [...] -> [..., d:R8 (ST0)]

Operand %D: 8-byte double. Dates are their serial number (#1/1/2000# = 36526).

When the compiler emits it

Emitted for Date literals and ordinary Double literals assigned to Double/Date/Single targets (probe: d = 2.5). The name understates its use.

VB6 source (verified: compiles to this slot)
Public Sub Main()
  Dim a As Date, c As Date
  a = #1/1/2000#
End Sub
Encoding, evidence and notes
Encoding

Encoding: FA, then 8 operand byte(s); total instruction length 9 byte(s).
vbdec template: %D
Operands:

  1. %D: literal_double, 8 byte(s). 8-byte IEEE double literal (also used for Date).

Observed: FA 00000000C0D5E140 LitDate 36526

Examples
FA 00000000C0D5E140  LitDate 36526

From the Phase 4 probe (VB6 SP6, P-code).

Evidence and notes

Emitted by VB6 SP6 (P-code): yes. Minimal probe: probes\op\0_FA_LitDate.

Handler: 0x66105CDE, shared by 3 dispatch slots (real opcode #247). This is the primary slot. Other slots: (4,BD) LitR8FP, (4,BE) LitR8FP.

Finding: Probe: emitted for plain Double literals (d = 2.5) as well as Date literals. The operand is an 8-byte IEEE double pushed to the FPU. The LitDate name is too narrow. Same handler as LitR8FP (4,BD/BE).

Check of vb6_source_eq example: verified: compiles and emits this slot.

Example from the description
Public Sub Main()
  Dim a As Date, c As Date
  a = #1/1/2000#
End Sub
Slots sharing this handler

(4,0xBD) LitR8FP, (4,0xBE) LitR8FP

Description: draft, by claude-opus-5-5. Handler 0x66105CDE, dispatch slot 0x661070FC, modOpcodes line 740.

LitI2

(0,0xF3)emittedprimary of 2handler #240Integerconfirmed_handler39 corpus hits
(alias) Push a 16-bit Integer literal.

Alias dispatch slot (0, 0xF3) for the canonical LitI2 at (4, 0xB5); semantics are identical.

Pushes the 2-byte immediate as a signed I2 onto the stack.

Stack: [...] -> [..., lit:I2]

When the compiler emits it

Emitted for Integer literal values requiring more than a byte.

VB6 source (verified: compiles to this slot)
Public Sub Main()
  Dim a As Integer, c As Integer
  a = 300
End Sub
Encoding, evidence and notes
Encoding

Encoding: F3, then 2 operand byte(s); total instruction length 3 byte(s).
vbdec template: %2
Operands:

  1. %2: immediate_word, 2 byte(s). 16-bit immediate.

Observed: F3 2C01 LitI2 0x12C

Examples
Form1.Form_Resize @ 0x474F3C | 474F9D    F3 6419               LitI2 0x1964
Form1.Form_Resize @ 0x474F3C | 474FA7    F3 6419               LitI2 0x1964
Form1.Form_Resize @ 0x474F3C | 474FC4    F3 C832               LitI2 0x32C8

39 occurrence(s) in PDFStreamDumper.

Evidence and notes

Emitted by VB6 SP6 (P-code): yes. Minimal probe: probes\op\0_F3_LitI2.

Handler: 0x66105C98, shared by 2 dispatch slots (real opcode #240). This is the primary slot. Other slots: (4,B5) LitI2.

Check of vb6_source_eq example: verified: compiles and emits this slot.

Corpus: 39 occurrence(s) in PDFStreamDumper_p.exe.

Example from the description
Dim n As Integer
n = 12345
Slots sharing this handler

(4,0xB5) LitI2

Description: draft, by claude-opus-4.7. Handler 0x66105C98, dispatch slot 0x661070E0, modOpcodes line 759.

LitI2

(4,0xB5)not emitteddup of (0,F3)handler #240Integerinferred_corpus
Same handler as (0,0xF3) LitI2: (alias) Push a 16-bit Integer literal.
Encoding, evidence and notes
Encoding

Encoding: FE B5 (lead byte FE selects table 4), then 2 operand byte(s); total instruction length 4 byte(s).
vbdec template: %2
Operands:

  1. %2: immediate_word, 2 byte(s). 16-bit immediate.
Evidence and notes

Emitted by VB6 SP6 (P-code): not observed in about 3,070 probe programs. The slot exists in the runtime's dispatch table, but no tested source construct makes the compiler emit it.

Handler: 0x66105C98, shared by 2 dispatch slots (real opcode #240). This is a duplicate slot of (0,F3) LitI2. Other slots: (0,F3) LitI2.

Slots sharing this handler

(0,0xF3) LitI2

Description: none. Handler 0x66105C98, dispatch slot 0x66107FE8, modOpcodes line 758.

LitI2FP

(0,0xF8)not emittedprimary of 2handler #245Integerinferred_corpus
No description yet.
Encoding, evidence and notes
Encoding

Encoding: F8, then 2 operand byte(s); total instruction length 3 byte(s).
No printf operands are declared, but the instruction still consumes operand bytes; see the size above and the observed bytes below. (Phase 3a: flag=0 does not mean 'no operands'.)

Evidence and notes

Emitted by VB6 SP6 (P-code): not observed in about 3,070 probe programs. The slot exists in the runtime's dispatch table, but no tested source construct makes the compiler emit it.

Handler: 0x6610AA4C, shared by 2 dispatch slots (real opcode #245). This is the primary slot. Other slots: (4,B6) LitI2FP.

Slots sharing this handler

(4,0xB6) LitI2FP

Description: none. Handler 0x6610AA4C, dispatch slot 0x661070F4, modOpcodes line 775.

LitI2FP

(4,0xB6)not emitteddup of (0,F8)handler #245Integerconfirmed_handler
No description yet.
Encoding, evidence and notes
Encoding

Encoding: FE B6 (lead byte FE selects table 4), then 2 operand byte(s); total instruction length 4 byte(s).
No printf operands are declared, but the instruction still consumes operand bytes; see the size above and the observed bytes below. (Phase 3a: flag=0 does not mean 'no operands'.)

Evidence and notes

Emitted by VB6 SP6 (P-code): not observed in about 3,070 probe programs. The slot exists in the runtime's dispatch table, but no tested source construct makes the compiler emit it.

Handler: 0x6610AA4C, shared by 2 dispatch slots (real opcode #245). This is a duplicate slot of (0,F8) LitI2FP. Other slots: (0,F8) LitI2FP.

Slots sharing this handler

(0,0xF8) LitI2FP

Description: none. Handler 0x6610AA4C, dispatch slot 0x66107FEC, modOpcodes line 776.

LitI2_Byte

(0,0xF4)emittedprimary of 2handler #241Integerinferred_corpus1047 corpus hits
Push a 1-byte immediate sign-extended to Integer.

Compact form of LitI2: the immediate is 1 byte and is sign-extended to I2 on the stack. Used for small Integer constants (-128..127).

Stack: [...] -> [..., lit:I2]

When the compiler emits it

Emitted for small Integer literals that fit in a signed byte.

VB6 source (verified: compiles to this slot)
Public Sub Main()
  Dim a As Boolean, c As Boolean
  a = True
End Sub
Encoding, evidence and notes
Encoding

Encoding: F4, then 1 operand byte(s); total instruction length 2 byte(s).
vbdec template: %1
Operands:

  1. %1: immediate_byte, 1 byte(s). 8-bit immediate.

Observed: F4 FF LitI2_Byte 255

Examples
Form1.LoadPlugins @ 0x4644FC | 464616    F4 00                 LitI2_Byte 0
Form1.LoadPlugins @ 0x4644FC | 46461E    F4 01                 LitI2_Byte 1
Form1.RegisterPlugin @ 0x44CB20 | 44CB91    F4 FF                 LitI2_Byte 255

1047 occurrence(s) in PDFStreamDumper.

Evidence and notes

Emitted by VB6 SP6 (P-code): yes. Minimal probe: probes\op\0_F4_LitI2_Byte.

Handler: 0x66105CAB, shared by 2 dispatch slots (real opcode #241). This is the primary slot. Other slots: (5,1A) LitI2_Byte.

Check of vb6_source_eq example: verified: compiles and emits this slot.

Corpus: 1047 occurrence(s) in PDFStreamDumper_p.exe.

Example from the description
Dim n As Integer
n = 5
Slots sharing this handler

(5,0x1A) LitI2_Byte

Description: draft, by claude-opus-4.7. Handler 0x66105CAB, dispatch slot 0x661070E4, modOpcodes line 760.

LitI2_Byte

(5,0x1A)not emitteddup of (0,F4)handler #241Integerconfirmed_handler
Same handler as (0,0xF4) LitI2_Byte: Push a 1-byte immediate sign-extended to Integer.
Encoding, evidence and notes
Encoding

Encoding: FF 1A (lead byte FF selects table 5), then 1 operand byte(s); total instruction length 3 byte(s).
vbdec template: %1
Operands:

  1. %1: immediate_byte, 1 byte(s). 8-bit immediate.
Evidence and notes

Emitted by VB6 SP6 (P-code): not observed in about 3,070 probe programs. The slot exists in the runtime's dispatch table, but no tested source construct makes the compiler emit it.

Handler: 0x66105CAB, shared by 2 dispatch slots (real opcode #241). This is a duplicate slot of (0,F4) LitI2_Byte. Other slots: (0,F4) LitI2_Byte.

Slots sharing this handler

(0,0xF4) LitI2_Byte

Description: none. Handler 0x66105CAB, dispatch slot 0x6610817C, modOpcodes line 761.

LitI4

(0,0xF5)emittedprimary of 3handler #242Integerinferred_corpus3006 corpus hits
Push a 32-bit Long literal.

Pushes the 4-byte immediate as a signed I4 onto the stack.

Stack: [...] -> [..., lit:I4]

When the compiler emits it

Emitted for Long literal expressions.

VB6 source (verified: compiles to this slot)
Public Sub Main()
  Dim c As Variant
  c = vbNullString
End Sub
Encoding, evidence and notes
Encoding

Encoding: F5, then 4 operand byte(s); total instruction length 5 byte(s).
vbdec template: %4
Operands:

  1. %4: immediate_dword, 4 byte(s). 32-bit immediate.

Observed: F5 00000000 LitI4 0x0

Examples
Form1.LoadPlugins @ 0x4644FC | 4645FA    F5 00000000           LitI4 0x0
Form1.LoadPlugins @ 0x4644FC | 4645FF    F5 00000000           LitI4 0x0
Form1.LoadPlugins @ 0x4644FC | 46462B    F5 00000000           LitI4 0x0

3006 occurrence(s) in PDFStreamDumper.

Evidence and notes

Emitted by VB6 SP6 (P-code): yes. Minimal probe: probes\op\0_F5_LitI4.

Handler: 0x66105CBE, shared by 3 dispatch slots (real opcode #242). This is the primary slot. Other slots: (4,B8) LitI4, (4,B9) LitI4.

Check of vb6_source_eq example: verified: compiles and emits this slot.

Corpus: 3006 occurrence(s) in PDFStreamDumper_p.exe.

Example from the description
Dim n As Long
n = 1000000
Slots sharing this handler

(4,0xB8) LitI4, (4,0xB9) LitI4

Description: draft, by claude-opus-4.7. Handler 0x66105CBE, dispatch slot 0x661070E8, modOpcodes line 765.

LitI4

(4,0xB8)not emitteddup of (0,F5)handler #242Integerconfirmed_handler
Same handler as (0,0xF5) LitI4: Push a 32-bit Long literal.
Encoding, evidence and notes
Encoding

Encoding: FE B8 (lead byte FE selects table 4), then 4 operand byte(s); total instruction length 6 byte(s).
vbdec template: %4
Operands:

  1. %4: immediate_dword, 4 byte(s). 32-bit immediate.
Evidence and notes

Emitted by VB6 SP6 (P-code): not observed in about 3,070 probe programs. The slot exists in the runtime's dispatch table, but no tested source construct makes the compiler emit it.

Handler: 0x66105CBE, shared by 3 dispatch slots (real opcode #242). This is a duplicate slot of (0,F5) LitI4. Other slots: (0,F5) LitI4, (4,B9) LitI4.

Slots sharing this handler

(0,0xF5) LitI4, (4,0xB9) LitI4

Description: none. Handler 0x66105CBE, dispatch slot 0x66107FF4, modOpcodes line 766.

LitI4

(4,0xB9)not emitteddup of (0,F5)handler #242Integerconfirmed_handler
Same handler as (0,0xF5) LitI4: Push a 32-bit Long literal.
Encoding, evidence and notes
Encoding

Encoding: FE B9 (lead byte FE selects table 4), then 4 operand byte(s); total instruction length 6 byte(s).
vbdec template: %4
Operands:

  1. %4: immediate_dword, 4 byte(s). 32-bit immediate.
Evidence and notes

Emitted by VB6 SP6 (P-code): not observed in about 3,070 probe programs. The slot exists in the runtime's dispatch table, but no tested source construct makes the compiler emit it.

Handler: 0x66105CBE, shared by 3 dispatch slots (real opcode #242). This is a duplicate slot of (0,F5) LitI4. Other slots: (0,F5) LitI4, (4,B8) LitI4.

Slots sharing this handler

(0,0xF5) LitI4, (4,0xB8) LitI4

Description: none. Handler 0x66105CBE, dispatch slot 0x66107FF8, modOpcodes line 767.

LitNothing

(2,0x63)emittedhandler #400Object / COMconfirmed_msdocs90 corpus hits
Push a literal: LitNothing.

Pushes a compile-time constant onto the stack. The constant value is embedded in the operand stream (see printf template).

When the compiler emits it

Emitted for every literal expression of the corresponding type.

VB6 source (verified: compiles to this slot)
Public Sub Main()
  Dim c As Variant
  Set c = Nothing
End Sub
Encoding, evidence and notes
Encoding

Encoding: FC 63 (lead byte FC selects table 2), then 0 operand byte(s); total instruction length 2 byte(s).
Operands: none. All inputs come from the evaluation stack or the frame.
Observed: FC63 LitNothing

Examples
Form1.mnuDecompileFlash_Click @ 0x4613A8 | 4613B7    FC63                  LitNothing
Form1.mnuDecompileFlashTools_Click @ 0x45A770 | 45A828    FC63                  LitNothing
Form1.mnuErrorSaveRaw_Click @ 0x45C9BC | 45C9D4    FC63                  LitNothing

90 occurrence(s) in PDFStreamDumper.

Evidence and notes

Emitted by VB6 SP6 (P-code): yes. Minimal probe: probes\op\2_63_LitNothing.

Handler: 0x66105CD0, unique to this slot (real opcode #400).

Corpus: 90 occurrence(s) in PDFStreamDumper_p.exe.

Description: draft, by claude-opus-4.7. Handler 0x66105CD0, dispatch slot 0x661076A0, modOpcodes line 754.

LitR4FP

(0,0xF9)emittedprimary of 2handler #246Floating pointinferred_corpus
Push a 4-byte Single literal onto the FPU.

Loads the 4-byte IEEE single operand onto the FPU stack.

Stack: [...] -> [..., f:R4 (ST0)]

Operand %!: 4-byte single (1.5! = 0x3FC00000).

When the compiler emits it

Emitted for Single literals (1.5!, or literals representable as Single in a Single context).

VB6 source (verified: compiles to this slot)
Public Sub Main()
  Dim a As Single, c As Single
  a = 1.5!
End Sub
Encoding, evidence and notes
Encoding

Encoding: F9, then 4 operand byte(s); total instruction length 5 byte(s).
vbdec template: %!
Operands:

  1. %!: literal_single, 4 byte(s). 4-byte IEEE single literal.

Observed: F9 0000C03F LitR4FP 1.5

Examples
F9 0000C03F  LitR4FP 1.5

From the Phase 4 probe (VB6 SP6, P-code).

Evidence and notes

Emitted by VB6 SP6 (P-code): yes. Minimal probe: probes\op\0_F9_LitR4FP.

Handler: 0x6610AA5D, shared by 2 dispatch slots (real opcode #246). This is the primary slot. Other slots: (4,BA) LitR4FP.

Check of vb6_source_eq example: verified: compiles and emits this slot.

Example from the description
Public Sub Main()
  Dim a As Single, c As Single
  a = 1.5!
End Sub
Slots sharing this handler

(4,0xBA) LitR4FP

Description: draft, by claude-opus-5-5. Handler 0x6610AA5D, dispatch slot 0x661070F8, modOpcodes line 778.

LitR4FP

(4,0xBA)not emitteddup of (0,F9)handler #246Floating pointconfirmed_handler
Same handler as (0,0xF9) LitR4FP: Push a 4-byte Single literal onto the FPU.
Encoding, evidence and notes
Encoding

Encoding: FE BA (lead byte FE selects table 4), then 4 operand byte(s); total instruction length 6 byte(s).
vbdec template: %!
Operands:

  1. %!: literal_single, 4 byte(s). 4-byte IEEE single literal.
Evidence and notes

Emitted by VB6 SP6 (P-code): not observed in about 3,070 probe programs. The slot exists in the runtime's dispatch table, but no tested source construct makes the compiler emit it.

Handler: 0x6610AA5D, shared by 2 dispatch slots (real opcode #246). This is a duplicate slot of (0,F9) LitR4FP. Other slots: (0,F9) LitR4FP.

Slots sharing this handler

(0,0xF9) LitR4FP

Description: none. Handler 0x6610AA5D, dispatch slot 0x66107FFC, modOpcodes line 779.

LitR8

(4,0xBB)not emitteddup of (0,F6)handler #243Floating pointinferred_corpus
Same handler as (0,0xF6) LitCy: Push an 8-byte literal (Currency literals; also raw 8-byte double payloads).
Encoding, evidence and notes
Encoding

Encoding: FE BB (lead byte FE selects table 4), then 8 operand byte(s); total instruction length 10 byte(s).
No printf operands are declared, but the instruction still consumes operand bytes; see the size above and the observed bytes below. (Phase 3a: flag=0 does not mean 'no operands'.)

Evidence and notes

Emitted by VB6 SP6 (P-code): not observed in about 3,070 probe programs. The slot exists in the runtime's dispatch table, but no tested source construct makes the compiler emit it.

Handler: 0x6610AA36, shared by 3 dispatch slots (real opcode #243). This is a duplicate slot of (0,F6) LitCy. Other slots: (0,F6) LitCy, (4,BC) LitR8.

Slots sharing this handler

(0,0xF6) LitCy, (4,0xBC) LitR8

Description: none. Handler 0x6610AA36, dispatch slot 0x66108000, modOpcodes line 781.

LitR8

(4,0xBC)not emitteddup of (0,F6)handler #243Floating pointconfirmed_handler
Same handler as (0,0xF6) LitCy: Push an 8-byte literal (Currency literals; also raw 8-byte double payloads).
Encoding, evidence and notes
Encoding

Encoding: FE BC (lead byte FE selects table 4), then 8 operand byte(s); total instruction length 10 byte(s).
No printf operands are declared, but the instruction still consumes operand bytes; see the size above and the observed bytes below. (Phase 3a: flag=0 does not mean 'no operands'.)

Evidence and notes

Emitted by VB6 SP6 (P-code): not observed in about 3,070 probe programs. The slot exists in the runtime's dispatch table, but no tested source construct makes the compiler emit it.

Handler: 0x6610AA36, shared by 3 dispatch slots (real opcode #243). This is a duplicate slot of (0,F6) LitCy. Other slots: (0,F6) LitCy, (4,BB) LitR8.

Slots sharing this handler

(0,0xF6) LitCy, (4,0xBB) LitR8

Description: none. Handler 0x6610AA36, dispatch slot 0x66108004, modOpcodes line 782.

LitR8FP

(4,0xBD)not emitteddup of (0,FA)handler #247Floating pointinferred_corpus
Same handler as (0,0xFA) LitDate: Push an 8-byte floating-point literal onto the FPU (Double and Date literals).
Encoding, evidence and notes
Encoding

Encoding: FE BD (lead byte FE selects table 4), then 8 operand byte(s); total instruction length 10 byte(s).
No printf operands are declared, but the instruction still consumes operand bytes; see the size above and the observed bytes below. (Phase 3a: flag=0 does not mean 'no operands'.)

Evidence and notes

Emitted by VB6 SP6 (P-code): not observed in about 3,070 probe programs. The slot exists in the runtime's dispatch table, but no tested source construct makes the compiler emit it.

Handler: 0x66105CDE, shared by 3 dispatch slots (real opcode #247). This is a duplicate slot of (0,FA) LitDate. Other slots: (0,FA) LitDate, (4,BE) LitR8FP.

Slots sharing this handler

(0,0xFA) LitDate, (4,0xBE) LitR8FP

Description: none. Handler 0x66105CDE, dispatch slot 0x66108008, modOpcodes line 783.

LitR8FP

(4,0xBE)not emitteddup of (0,FA)handler #247Floating pointconfirmed_handler
Same handler as (0,0xFA) LitDate: Push an 8-byte floating-point literal onto the FPU (Double and Date literals).
Encoding, evidence and notes
Encoding

Encoding: FE BE (lead byte FE selects table 4), then 8 operand byte(s); total instruction length 10 byte(s).
No printf operands are declared, but the instruction still consumes operand bytes; see the size above and the observed bytes below. (Phase 3a: flag=0 does not mean 'no operands'.)

Evidence and notes

Emitted by VB6 SP6 (P-code): not observed in about 3,070 probe programs. The slot exists in the runtime's dispatch table, but no tested source construct makes the compiler emit it.

Handler: 0x66105CDE, shared by 3 dispatch slots (real opcode #247). This is a duplicate slot of (0,FA) LitDate. Other slots: (0,FA) LitDate, (4,BD) LitR8FP.

Slots sharing this handler

(0,0xFA) LitDate, (4,0xBD) LitR8FP

Description: none. Handler 0x66105CDE, dispatch slot 0x6610800C, modOpcodes line 784.

LitStr

(0,0x1B)emittedprimary of 2handler #26Stringinferred_corpus1171 corpus hits
Push a BSTR literal from the const pool.

Pushes a BSTR onto the stack. The operand %s is a const-pool offset whose payload is the string bytes; the runtime takes a refcounted reference (does not allocate a copy).

Stack: [...] -> [..., lit:Str]

When the compiler emits it

Emitted for every String literal expression.

VB6 source (verified: compiles to this slot)
Public Sub Main()
  Dim a As String, c As String
  a = "12"
End Sub
Encoding, evidence and notes
Encoding

Encoding: 1B, then 2 operand byte(s); total instruction length 3 byte(s).
vbdec template: %s
Operands:

  1. %s: pool_string, 2 byte(s). 16-bit constant-pool index of a string literal (BSTR).

Observed: 1B 0000 LitStr str_4011EC='12'

Examples
Form1.LoadPlugins @ 0x4644FC | 464521    1B 0500               LitStr str_41C9A0='\plugins'
Form1.LoadPlugins @ 0x4644FC | 4645BC    1B 0500               LitStr str_41C9A0='\plugins'
Form1.LoadPlugins @ 0x4644FC | 464664    1B 0E00               LitStr str_41CBB8='.plugin'

1171 occurrence(s) in PDFStreamDumper.

Evidence and notes

Emitted by VB6 SP6 (P-code): yes. Minimal probe: probes\op\0_1B_LitStr.

Handler: 0x66105CEF, shared by 2 dispatch slots (real opcode #26). This is the primary slot. Other slots: (4,BF) LitStr.

Check of vb6_source_eq example: verified: compiles and emits this slot.

Corpus: 1171 occurrence(s) in PDFStreamDumper_p.exe.

Example from the description
Dim s As String
s = "hello"
Slots sharing this handler

(4,0xBF) LitStr

Description: draft, by claude-opus-4.7. Handler 0x66105CEF, dispatch slot 0x66106D80, modOpcodes line 742.

LitStr

(4,0xBF)not emitteddup of (0,1B)handler #26Stringconfirmed_handler
Same handler as (0,0x1B) LitStr: Push a BSTR literal from the const pool.
Encoding, evidence and notes
Encoding

Encoding: FE BF (lead byte FE selects table 4), then 2 operand byte(s); total instruction length 4 byte(s).
vbdec template: %s
Operands:

  1. %s: pool_string, 2 byte(s). 16-bit constant-pool index of a string literal (BSTR).
Evidence and notes

Emitted by VB6 SP6 (P-code): not observed in about 3,070 probe programs. The slot exists in the runtime's dispatch table, but no tested source construct makes the compiler emit it.

Handler: 0x66105CEF, shared by 2 dispatch slots (real opcode #26). This is a duplicate slot of (0,1B) LitStr. Other slots: (0,1B) LitStr.

Slots sharing this handler

(0,0x1B) LitStr

Description: none. Handler 0x66105CEF, dispatch slot 0x66108010, modOpcodes line 743.

Lit_Var

Push literal variant

LitVarCy

(4,0xC3)emittedhandler #682Variantinferred_corpus
Create a Variant Currency literal (VT_CY) in a temporary.

Writes a VT_CY Variant holding the 8-byte operand into the temporary %a and pushes its address.

Operands: %a temporary, 8-byte scaled Currency value. (vbdec's template labels the value %D and shows it as a double; the bytes are Currency: 983A000000000000 = 1.5@.)

When the compiler emits it

Emitted for v = 1.5@.

VB6 source (verified: compiles to this slot)
Public Sub Main()
  Dim c As Variant
  c = 1.5@
End Sub
Encoding, evidence and notes
Encoding

Encoding: FE C3 (lead byte FE selects table 4), then 10 operand byte(s); total instruction length 12 byte(s).
vbdec template: %a %D
Operands:

  1. %a: local_var_ref, 2 byte(s). signed 16-bit offset from the procedure frame pointer (EBP). Negative = local/temporary (vbdec var_XX, XX = -offset), positive = argument (arg_XX).
  2. %D: literal_double, 8 byte(s). 8-byte IEEE double literal (also used for Date).

Observed: FEC3 5CFF983A000000000000LitVarCy var_A4 7.4109846876187E-320

Examples
FEC3 5CFF983A000000000000LitVarCy var_A4 7.4109846876187E-320

From the Phase 4 probe (VB6 SP6, P-code).

Evidence and notes

Emitted by VB6 SP6 (P-code): yes. Minimal probe: probes\op\4_C3_LitVarCy.

Handler: 0x6610AAB3, unique to this slot (real opcode #682).

Check of vb6_source_eq example: verified: compiles and emits this slot.

Example from the description
Public Sub Main()
  Dim c As Variant
  c = 1.5@
End Sub

Description: draft, by claude-opus-5-5. Handler 0x6610AAB3, dispatch slot 0x66108020, modOpcodes line 773.

LitVarDate

(4,0xC5)emittedhandler #684Variantinferred_corpus
Create a Variant Date literal (VT_DATE) in a temporary.

Writes a VT_DATE Variant holding the 8-byte serial date into the temporary %a and pushes its address.

When the compiler emits it

Emitted for v = #1/1/2000#.

VB6 source (verified: compiles to this slot)
Public Sub Main()
  Dim c As Variant
  c = #1/1/2000#
End Sub
Encoding, evidence and notes
Encoding

Encoding: FE C5 (lead byte FE selects table 4), then 10 operand byte(s); total instruction length 12 byte(s).
vbdec template: %a %D
Operands:

  1. %a: local_var_ref, 2 byte(s). signed 16-bit offset from the procedure frame pointer (EBP). Negative = local/temporary (vbdec var_XX, XX = -offset), positive = argument (arg_XX).
  2. %D: literal_double, 8 byte(s). 8-byte IEEE double literal (also used for Date).

Observed: FEC5 5CFF00000000C0D5E140LitVarDate var_A4 36526

Examples
FEC5 5CFF00000000C0D5E140LitVarDate var_A4 36526

From the Phase 4 probe (VB6 SP6, P-code).

Evidence and notes

Emitted by VB6 SP6 (P-code): yes. Minimal probe: probes\op\4_C5_LitVarDate.

Handler: 0x6610AABD, unique to this slot (real opcode #684).

Check of vb6_source_eq example: verified: compiles and emits this slot.

Example from the description
Public Sub Main()
  Dim c As Variant
  c = #1/1/2000#
End Sub

Description: draft, by claude-opus-5-5. Handler 0x6610AABD, dispatch slot 0x66108028, modOpcodes line 739.

LitVarI2

(0,0x28)emittedprimary of 2handler #39Variantinferred_corpus573 corpus hits
Create a Variant Integer literal (VT_I2) in a temporary.

Pushes a Variant whose subtype is Integer and value is the I2 immediate read from the operand stream.

Stack: [...] -> [..., (lit):Var]

When the compiler emits it

Emitted for small integer literals (-32768..32767) used where a Variant is needed: v = 0, Variant arguments, Case values for a Variant selector.

VB6 source (verified: compiles to this slot)
Public Sub Main()
  Dim c As Variant
  c = 0
End Sub
Encoding, evidence and notes
Encoding

Encoding: 28, then 4 operand byte(s); total instruction length 5 byte(s).
vbdec template: %a,%2
Operands:

  1. %a: local_var_ref, 2 byte(s). signed 16-bit offset from the procedure frame pointer (EBP). Negative = local/temporary (vbdec var_XX, XX = -offset), positive = argument (arg_XX).
  2. %2: immediate_word, 2 byte(s). 16-bit immediate.

Observed: 28 5CFF0000 LitVarI2 var_A4,0x0

Examples
Form1.mnuHelp_Event_0 @ 0x45A2C0 | 45A303    28 40FF0000           LitVarI2 var_C0,0x0
Form1.Form_Resize @ 0x474F3C | 4756B2    28 14FF0100           LitVarI2 var_EC,0x1
Form1.Form_Resize @ 0x474F3C | 4756FB    28 24FF0100           LitVarI2 var_DC,0x1

573 occurrence(s) in PDFStreamDumper.

Evidence and notes

Emitted by VB6 SP6 (P-code): yes. Minimal probe: probes\op\0_28_LitVarI2.

Handler: 0x66105D6E, shared by 2 dispatch slots (real opcode #39). This is the primary slot. Other slots: (4,C0) LitVarI2.

Check of vb6_source_eq example: verified: compiles and emits this slot.

Corpus: 573 occurrence(s) in PDFStreamDumper_p.exe.

Example from the description
Dim v As Variant
v = 5
Slots sharing this handler

(4,0xC0) LitVarI2

Description: draft, by claude-opus-5-5. Handler 0x66105D6E, dispatch slot 0x66106DB4, modOpcodes line 762.

LitVarI2

(4,0xC0)not emitteddup of (0,28)handler #39Variantconfirmed_handler
Same handler as (0,0x28) LitVarI2: Create a Variant Integer literal (VT_I2) in a temporary.
Encoding, evidence and notes
Encoding

Encoding: FE C0 (lead byte FE selects table 4), then 4 operand byte(s); total instruction length 6 byte(s).
vbdec template: %a = %2
Operands:

  1. %a: local_var_ref, 2 byte(s). signed 16-bit offset from the procedure frame pointer (EBP). Negative = local/temporary (vbdec var_XX, XX = -offset), positive = argument (arg_XX).
  2. %2: immediate_word, 2 byte(s). 16-bit immediate.
Evidence and notes

Emitted by VB6 SP6 (P-code): not observed in about 3,070 probe programs. The slot exists in the runtime's dispatch table, but no tested source construct makes the compiler emit it.

Handler: 0x66105D6E, shared by 2 dispatch slots (real opcode #39). This is a duplicate slot of (0,28) LitVarI2. Other slots: (0,28) LitVarI2.

Slots sharing this handler

(0,0x28) LitVarI2

Description: none. Handler 0x66105D6E, dispatch slot 0x66108014, modOpcodes line 763.

LitVarI4

(4,0xC1)emittedhandler #680Variantinferred_corpus33 corpus hits
Create a Variant Long literal (VT_I4) in a temporary.

Pushes a Variant whose subtype is Long and value is the I4 immediate read from the operand stream.

Stack: [...] -> [..., (lit):Var]

When the compiler emits it

Emitted for integer literals outside the Integer range, or with the & suffix, used where a Variant is needed (v = 70000, v = &HFFFF&).

VB6 source (verified: compiles to this slot)
Public Sub Main()
  Dim c As Variant
  c = &HFFFF&
End Sub
Encoding, evidence and notes
Encoding

Encoding: FE C1 (lead byte FE selects table 4), then 6 operand byte(s); total instruction length 8 byte(s).
vbdec template: %a = %4
Operands:

  1. %a: local_var_ref, 2 byte(s). signed 16-bit offset from the procedure frame pointer (EBP). Negative = local/temporary (vbdec var_XX, XX = -offset), positive = argument (arg_XX).
  2. %4: immediate_dword, 4 byte(s). 32-bit immediate.

Observed: FEC1 5CFFFFFF0000 LitVarI4 var_A4 = 0xFFFF

Examples
Form1.mnuSecureDownload_Click @ 0x456570 | 4566DF    FEC1 40FF10000000     LitVarI4 var_C0 = 0x10
Form1.mnuJavascriptUI_Click @ 0x45B844 | 45BA0A    FEC1 28FF00000000     LitVarI4 var_D8 = 0x0
fso.Proc_44A0B4 @ 0x44A0B4 | 44A112    FEC1 54FF00000000     LitVarI4 var_AC = 0x0

33 occurrence(s) in PDFStreamDumper.

Evidence and notes

Emitted by VB6 SP6 (P-code): yes. Minimal probe: probes\op\4_C1_LitVarI4.

Handler: 0x66105D85, unique to this slot (real opcode #680).

Check of vb6_source_eq example: verified: compiles and emits this slot.

Corpus: 33 occurrence(s) in PDFStreamDumper_p.exe.

Example from the description
Dim v As Variant
v = 70000

Description: draft, by claude-opus-5-5. Handler 0x66105D85, dispatch slot 0x66108018, modOpcodes line 768.

LitVarR4

(4,0xC2)emittedhandler #681Variantinferred_corpus
Create a Variant Single literal (VT_R4) in a temporary.

Writes a VT_R4 Variant holding the 4-byte operand into the temporary %a (observed 5CFF 0000C03F = var_A4, 1.5).

When the compiler emits it

Emitted for v = 1.5!.

VB6 source (verified: compiles to this slot)
Public Sub Main()
  Dim c As Variant
  c = 1.5!
End Sub
Encoding, evidence and notes
Encoding

Encoding: FE C2 (lead byte FE selects table 4), then 6 operand byte(s); total instruction length 8 byte(s).
No printf operands are declared, but the instruction still consumes operand bytes; see the size above and the observed bytes below. (Phase 3a: flag=0 does not mean 'no operands'.)
Observed: FEC2 5CFF0000C03F LitVarR4

Examples
FEC2 5CFF0000C03F  LitVarR4

From the Phase 4 probe (VB6 SP6, P-code).

Evidence and notes

Emitted by VB6 SP6 (P-code): yes. Minimal probe: probes\op\4_C2_LitVarR4.

Handler: 0x6610AAA9, unique to this slot (real opcode #681).

Check of vb6_source_eq example: verified: compiles and emits this slot.

Example from the description
Public Sub Main()
  Dim c As Variant
  c = 1.5!
End Sub

Description: draft, by claude-opus-5-5. Handler 0x6610AAA9, dispatch slot 0x6610801C, modOpcodes line 786.

LitVarR8

(4,0xC4)emittedhandler #683Variantinferred_corpus
Create a Variant Double literal (VT_R8) in a temporary.

Writes a VT_R8 Variant holding the 8-byte double into the temporary %a and pushes its address.

When the compiler emits it

Emitted for v = 1.5# (and Double literals in Variant contexts).

VB6 source (verified: compiles to this slot)
Public Sub Main()
  Dim c As Variant
  c = 1.5#
End Sub
Encoding, evidence and notes
Encoding

Encoding: FE C4 (lead byte FE selects table 4), then 10 operand byte(s); total instruction length 12 byte(s).
vbdec template: %a %D
Operands:

  1. %a: local_var_ref, 2 byte(s). signed 16-bit offset from the procedure frame pointer (EBP). Negative = local/temporary (vbdec var_XX, XX = -offset), positive = argument (arg_XX).
  2. %D: literal_double, 8 byte(s). 8-byte IEEE double literal (also used for Date).

Observed: FEC4 5CFF000000000000F83FLitVarR8 var_A4 1.5

Examples
FEC4 5CFF000000000000F83FLitVarR8 var_A4 1.5

From the Phase 4 probe (VB6 SP6, P-code).

Evidence and notes

Emitted by VB6 SP6 (P-code): yes. Minimal probe: probes\op\4_C4_LitVarR8.

Handler: 0x66105DA0, unique to this slot (real opcode #683).

Check of vb6_source_eq example: verified: compiles and emits this slot.

Example from the description
Public Sub Main()
  Dim c As Variant
  c = 1.5#
End Sub

Description: draft, by claude-opus-5-5. Handler 0x66105DA0, dispatch slot 0x66108024, modOpcodes line 787.

LitVarStr

(0,0x3A)emittedprimary of 2handler #57Variantinferred_corpus1195 corpus hits
Push variant literal (LitVarStr).

Pushes a literal whose subtype and value are encoded in the operand stream.

When the compiler emits it

Emitted wherever the literal LitVarStr is required in a Variant-typed expression.

VB6 source (verified: compiles to this slot)
Public Sub Main()
  Dim c As Variant
  c = "s"
End Sub
Encoding, evidence and notes
Encoding

Encoding: 3A, then 4 operand byte(s); total instruction length 5 byte(s).
vbdec template: %a %s
Operands:

  1. %a: local_var_ref, 2 byte(s). signed 16-bit offset from the procedure frame pointer (EBP). Negative = local/temporary (vbdec var_XX, XX = -offset), positive = argument (arg_XX).
  2. %s: pool_string, 2 byte(s). 16-bit constant-pool index of a string literal (BSTR).

Observed: 3A 5CFF0000 LitVarStr var_A4 str_4011EC='s'

Examples
Form1.LoadPlugins @ 0x4644FC | 46454B    3A 44FF0700           LitVarStr var_BC str_41CB50='Plugins folder not found'
Form1.LoadPlugins @ 0x4644FC | 4645AE    3A 44FF0900           LitVarStr var_BC str_41CB98='*dll'
Form1.mn_b64EncClip_Click @ 0x447B64 | 447BED    3A 64FF2300           LitVarStr var_9C str_41CD64='Clipboard text encoded (not binary safe)'

1195 occurrence(s) in PDFStreamDumper.

Evidence and notes

Emitted by VB6 SP6 (P-code): yes. Minimal probe: probes\op\0_3A_LitVarStr.

Handler: 0x66105D47, shared by 2 dispatch slots (real opcode #57). This is the primary slot. Other slots: (4,C6) LitVarStr.

Corpus: 1195 occurrence(s) in PDFStreamDumper_p.exe.

Slots sharing this handler

(4,0xC6) LitVarStr

Description: draft, by claude-opus-4.7. Handler 0x66105D47, dispatch slot 0x66106DFC, modOpcodes line 744.

LitVarStr

(4,0xC6)not emitteddup of (0,3A)handler #57Variantconfirmed_handler
Same handler as (0,0x3A) LitVarStr: Push variant literal (LitVarStr).
Encoding, evidence and notes
Encoding

Encoding: FE C6 (lead byte FE selects table 4), then 4 operand byte(s); total instruction length 6 byte(s).
vbdec template: %a %s
Operands:

  1. %a: local_var_ref, 2 byte(s). signed 16-bit offset from the procedure frame pointer (EBP). Negative = local/temporary (vbdec var_XX, XX = -offset), positive = argument (arg_XX).
  2. %s: pool_string, 2 byte(s). 16-bit constant-pool index of a string literal (BSTR).
Evidence and notes

Emitted by VB6 SP6 (P-code): not observed in about 3,070 probe programs. The slot exists in the runtime's dispatch table, but no tested source construct makes the compiler emit it.

Handler: 0x66105D47, shared by 2 dispatch slots (real opcode #57). This is a duplicate slot of (0,3A) LitVarStr. Other slots: (0,3A) LitVarStr.

Slots sharing this handler

(0,0x3A) LitVarStr

Description: none. Handler 0x66105D47, dispatch slot 0x6610802C, modOpcodes line 745.

LitVarUI1

(4,0x3D)not emittedhandler #614Variantinferred_corpus
No description yet.
Encoding, evidence and notes
Encoding

Encoding: FE 3D (lead byte FE selects table 4), then 4 operand byte(s); total instruction length 6 byte(s).
No printf operands are declared, but the instruction still consumes operand bytes; see the size above and the observed bytes below. (Phase 3a: flag=0 does not mean 'no operands'.)

Evidence and notes

Emitted by VB6 SP6 (P-code): not observed in about 3,070 probe programs. The slot exists in the runtime's dispatch table, but no tested source construct makes the compiler emit it.

Handler: 0x6610AA90, unique to this slot (real opcode #614).

Description: none. Handler 0x6610AA90, dispatch slot 0x66107E08, modOpcodes line 756.

LitVar_Empty

(2,0x67)emittedhandler #403Variantinferred_corpus123 corpus hits
Create a Variant Empty literal in a temporary.

Pushes a Variant of subtype Empty -- the state of a freshly-declared, never-assigned Variant. Use IsEmpty() to test.

Stack: [...] -> [..., Empty:Var]

When the compiler emits it

Emitted for the Empty keyword in a Variant context (v = Empty, Empty passed as an argument).

VB6 source (verified: compiles to this slot)
Public Sub Main()
  Dim c As Variant
  c = Empty
End Sub
Encoding, evidence and notes
Encoding

Encoding: FC 67 (lead byte FC selects table 2), then 2 operand byte(s); total instruction length 4 byte(s).
vbdec template: %a
Operands:

  1. %a: local_var_ref, 2 byte(s). signed 16-bit offset from the procedure frame pointer (EBP). Negative = local/temporary (vbdec var_XX, XX = -offset), positive = argument (arg_XX).

Observed: FC67 5CFF LitVar_Empty var_A4

Examples
Form1.mnuManualEscape_Event_0 @ 0x467B64 | 467DEF    FC67 44FF             LitVar_Empty var_BC
Form1.mnuManualEscape_Event_0 @ 0x467B64 | 467E19    FC67 44FF             LitVar_Empty var_BC
Form1.mnuManualEscape_Event_0 @ 0x467B64 | 467E43    FC67 44FF             LitVar_Empty var_BC

123 occurrence(s) in PDFStreamDumper.

Evidence and notes

Emitted by VB6 SP6 (P-code): yes. Minimal probe: probes\op\2_67_LitVar_Empty.

Handler: 0x6610AA6E, unique to this slot (real opcode #403).

Check of vb6_source_eq example: verified: compiles and emits this slot.

Corpus: 123 occurrence(s) in PDFStreamDumper_p.exe.

Example from the description
Dim v As Variant
v = Empty

Description: draft, by claude-opus-5-5. Handler 0x6610AA6E, dispatch slot 0x661076B0, modOpcodes line 751.

LitVar_FALSE

(2,0x66)emittedhandler #402Variantinferred_corpus41 corpus hits
Push Variant False (0, subtype Boolean).

Pushes a Variant whose subtype is Boolean and value is False.

Stack: [...] -> [..., False:Var]

When the compiler emits it

Emitted wherever the literal LitVar_FALSE is required in a Variant-typed expression.

VB6 source (verified: compiles to this slot)
Public Sub Main()
  Dim c As Variant
  c = False
End Sub
Encoding, evidence and notes
Encoding

Encoding: FC 66 (lead byte FC selects table 2), then 2 operand byte(s); total instruction length 4 byte(s).
vbdec template: %a
Operands:

  1. %a: local_var_ref, 2 byte(s). signed 16-bit offset from the procedure frame pointer (EBP). Negative = local/temporary (vbdec var_XX, XX = -offset), positive = argument (arg_XX).

Observed: FC66 5CFF LitVar_FALSE var_A4

Examples
Form1.mnuB64Clipboard_Click @ 0x44E37C | 44E44D    FC66 30FF             LitVar_FALSE var_D0
Form1.lv_MouseDown(ByVal Button As Integer, ByVal Shift As Integer, ByVal x As Long, ByVal y As Long) @ 0x447E40 | 447E88    FC66 24FF             LitVar_FALSE var_DC
Form1.Form_Load @ 0x479DC0 | 47A53A    FC66 94FD             LitVar_FALSE var_26C

41 occurrence(s) in PDFStreamDumper.

Evidence and notes

Emitted by VB6 SP6 (P-code): yes. Minimal probe: probes\op\2_66_LitVar_FALSE.

Handler: 0x66105D2A, unique to this slot (real opcode #402).

Check of vb6_source_eq example: verified: compiles and emits this slot.

Corpus: 41 occurrence(s) in PDFStreamDumper_p.exe.

Example from the description
Dim v As Variant
v = False

Description: draft, by claude-opus-4.7. Handler 0x66105D2A, dispatch slot 0x661076AC, modOpcodes line 750.

LitVar_Missing

(0,0x27)emittedprimary of 2handler #38Variantconfirmed_handler1060 corpus hits
Create a Variant Missing value (an omitted Optional argument) in a temporary.

Writes a VT_ERROR Variant with value DISP_E_PARAMNOTFOUND (0x80020004, what IsMissing tests) into temporary %a and pushes its address.

Stack: [...] -> [..., Missing:Var]

When the compiler emits it

Emitted when a call omits an Optional ... As Variant argument, including the many optional parameters of VB runtime functions (Format$, MsgBox, ...). The compiler uses this slot; (2,68), which shares the handler, is never emitted.

VB6 source (verified: compiles to this slot)
Public Sub Main()
  Opt
End Sub

Sub Opt(Optional v As Variant)
End Sub
Encoding, evidence and notes
Encoding

Encoding: 27, then 2 operand byte(s); total instruction length 3 byte(s).
vbdec template: %a
Operands:

  1. %a: local_var_ref, 2 byte(s). signed 16-bit offset from the procedure frame pointer (EBP). Negative = local/temporary (vbdec var_XX, XX = -offset), positive = argument (arg_XX).

Observed: 27 5CFF LitVar_Missing var_A4

Examples
Form1.LoadPlugins @ 0x4644FC | 46453F    27 B4FE               LitVar_Missing var_14C
Form1.LoadPlugins @ 0x4644FC | 464542    27 D4FE               LitVar_Missing var_12C
Form1.LoadPlugins @ 0x4644FC | 464545    27 F4FE               LitVar_Missing var_10C

1060 occurrence(s) in PDFStreamDumper.

Evidence and notes

Emitted by VB6 SP6 (P-code): yes. Minimal probe: probes\op\0_27_LitVar_Missing.

Handler: 0x66105D07, shared by 2 dispatch slots (real opcode #38). This is the primary slot. Other slots: (2,68) LitVar_Missing.

Check of vb6_source_eq example: verified: compiles and emits this slot.

Corpus: 1060 occurrence(s) in PDFStreamDumper_p.exe.

Example from the description
Sub Opt(Optional v As Variant)
End Sub
Sub Main()
  Opt
End Sub
Slots sharing this handler

(2,0x68) LitVar_Missing

Description: draft, by claude-opus-5-5. Handler 0x66105D07, dispatch slot 0x66106DB0, modOpcodes line 753.

LitVar_Missing

(2,0x68)not emitteddup of (0,27)handler #38Variantinferred_corpus
Same handler as (0,0x27) LitVar_Missing: Create a Variant Missing value (an omitted Optional argument) in a temporary.
Encoding, evidence and notes
Encoding

Encoding: FC 68 (lead byte FC selects table 2), then 2 operand byte(s); total instruction length 4 byte(s).
vbdec template: %a
Operands:

  1. %a: local_var_ref, 2 byte(s). signed 16-bit offset from the procedure frame pointer (EBP). Negative = local/temporary (vbdec var_XX, XX = -offset), positive = argument (arg_XX).
Evidence and notes

Emitted by VB6 SP6 (P-code): not observed in about 3,070 probe programs. The slot exists in the runtime's dispatch table, but no tested source construct makes the compiler emit it.

Handler: 0x66105D07, shared by 2 dispatch slots (real opcode #38). This is a duplicate slot of (0,27) LitVar_Missing. Other slots: (0,27) LitVar_Missing.

Slots sharing this handler

(0,0x27) LitVar_Missing

Description: none. Handler 0x66105D07, dispatch slot 0x661076B4, modOpcodes line 752.

LitVar_Null

(2,0x64)emittedhandler #401Variantinferred_corpus
Create a Variant Null (VT_NULL) in a temporary.

Writes VT_NULL into the temporary %a and pushes its address.

When the compiler emits it

Emitted for v = Null.

VB6 source (verified: compiles to this slot)
Public Sub Main()
  Dim c As Variant
  c = Null
End Sub
Encoding, evidence and notes
Encoding

Encoding: FC 64 (lead byte FC selects table 2), then 2 operand byte(s); total instruction length 4 byte(s).
vbdec template: %a
Operands:

  1. %a: local_var_ref, 2 byte(s). signed 16-bit offset from the procedure frame pointer (EBP). Negative = local/temporary (vbdec var_XX, XX = -offset), positive = argument (arg_XX).

Observed: FC64 5CFF LitVar_Null var_A4

Examples
FC64 5CFF  LitVar_Null var_A4

From the Phase 4 probe (VB6 SP6, P-code).

Evidence and notes

Emitted by VB6 SP6 (P-code): yes. Minimal probe: probes\op\2_64_LitVar_Null.

Handler: 0x6610AA7F, unique to this slot (real opcode #401).

Check of vb6_source_eq example: verified: compiles and emits this slot.

Example from the description
Public Sub Main()
  Dim c As Variant
  c = Null
End Sub

Description: draft, by claude-opus-5-5. Handler 0x6610AA7F, dispatch slot 0x661076A4, modOpcodes line 747.

LitVar_TRUE

(0,0x63)emittedprimary of 2handler #96Variantinferred_corpus50 corpus hits
Push Variant True (-1, subtype Boolean).

Pushes a Variant whose subtype is Boolean and value is True.

Stack: [...] -> [..., True:Var]

When the compiler emits it

Emitted wherever the literal LitVar_TRUE is required in a Variant-typed expression.

VB6 source (verified: compiles to this slot)
Public Sub Main()
  Dim c As Variant
  c = True
End Sub
Encoding, evidence and notes
Encoding

Encoding: 63, then 2 operand byte(s); total instruction length 3 byte(s).
vbdec template: %a
Operands:

  1. %a: local_var_ref, 2 byte(s). signed 16-bit offset from the procedure frame pointer (EBP). Negative = local/temporary (vbdec var_XX, XX = -offset), positive = argument (arg_XX).

Observed: 63 5CFF LitVar_TRUE var_A4

Examples
Form1.mnuNewHexEditorWin_Click @ 0x45AC2C | 45AC5B    63 5CFF               LitVar_TRUE var_A4
Form1.looksEscaped @ 0x449B64 | 449BBE    63 5CFF               LitVar_TRUE var_A4
Form1.looksEscaped @ 0x449B64 | 449BEF    63 5CFF               LitVar_TRUE var_A4

50 occurrence(s) in PDFStreamDumper.

Evidence and notes

Emitted by VB6 SP6 (P-code): yes. Minimal probe: probes\op\0_63_LitVar_TRUE.

Handler: 0x66105D30, shared by 2 dispatch slots (real opcode #96). This is the primary slot. Other slots: (2,65) LitVar_TRUE.

Check of vb6_source_eq example: verified: compiles and emits this slot.

Corpus: 50 occurrence(s) in PDFStreamDumper_p.exe.

Example from the description
Dim v As Variant
v = True
Slots sharing this handler

(2,0x65) LitVar_TRUE

Description: draft, by claude-opus-4.7. Handler 0x66105D30, dispatch slot 0x66106EA0, modOpcodes line 748.

LitVar_TRUE

(2,0x65)not emitteddup of (0,63)handler #96Variantconfirmed_handler
Same handler as (0,0x63) LitVar_TRUE: Push Variant True (-1, subtype Boolean).
Encoding, evidence and notes
Encoding

Encoding: FC 65 (lead byte FC selects table 2), then 2 operand byte(s); total instruction length 4 byte(s).
vbdec template: %a
Operands:

  1. %a: local_var_ref, 2 byte(s). signed 16-bit offset from the procedure frame pointer (EBP). Negative = local/temporary (vbdec var_XX, XX = -offset), positive = argument (arg_XX).
Evidence and notes

Emitted by VB6 SP6 (P-code): not observed in about 3,070 probe programs. The slot exists in the runtime's dispatch table, but no tested source construct makes the compiler emit it.

Handler: 0x66105D30, shared by 2 dispatch slots (real opcode #96). This is a duplicate slot of (0,63) LitVar_TRUE. Other slots: (0,63) LitVar_TRUE.

Slots sharing this handler

(0,0x63) LitVar_TRUE

Description: none. Handler 0x66105D30, dispatch slot 0x661076A8, modOpcodes line 749.

Logic_And

Logical/bitwise AND

AndI4

(0,0xC4)emittedprimary of 4handler #193Integerconfirmed_msdocs114 corpus hits
Pop operand(s); push bitwise And.

Pops two 32-bit signed integer (VB6 Long) operands b and a (top is b), pushes bitwise a & b.

Stack: [..., a:I4, b:I4] -> [..., (a & b):I4]

Operands are treated as a I4-width integer; the operation is bit-parallel. No overflow is possible.

When the compiler emits it

Emitted for the And operator on I4-typed operands; Variant operands emit AndVar.

VB6 source (verified: compiles to this slot)
Public Sub Main()
  Dim a As Boolean, b As Boolean, c As Boolean
  c = a And b
End Sub
Encoding, evidence and notes
Encoding

Encoding: C4, then 0 operand byte(s); total instruction length 1 byte(s).
Operands: none. All inputs come from the evaluation stack or the frame.
Observed: C4 AndI4

Examples
Form1.mnuExtractURI_Click @ 0x45774C | 45782B    C4                    AndI4
Form1.mnuExtractURI_Click @ 0x45774C | 457833    C4                    AndI4
Form1.lv_KeyDown(ByRef KeyCode As Integer, ByVal Shift As Integer) @ 0x456764 | 456770    C4                    AndI4

114 occurrence(s) in PDFStreamDumper.

Evidence and notes

Emitted by VB6 SP6 (P-code): yes. Minimal probe: probes\op\0_C4_AndI4.

Handler: 0x66105EA9, shared by 4 dispatch slots (real opcode #193). This is the primary slot. Other slots: (1,21) AndUI1, (1,22) AndUI1, (1,23) AndUI1.

Check of vb6_source_eq example: verified: compiles and emits this slot.

Corpus: 114 occurrence(s) in PDFStreamDumper_p.exe.

Example from the description
Dim a As Long, b As Long, c As Long
c = a And b
Slots sharing this handler

(1,0x21) AndUI1, (1,0x22) AndUI1, (1,0x23) AndUI1

Description: draft, by claude-opus-4.7. Handler 0x66105EA9, dispatch slot 0x66107024, modOpcodes line 1395.

AndUI1

(1,0x21)not emitteddup of (0,C4)handler #193Integerconfirmed_msdocs
Pop operand(s); push bitwise And.

Pops two 8-bit unsigned integer (VB6 Byte) operands b and a (top is b), pushes bitwise a & b.

Stack: [..., a:UI1, b:UI1] -> [..., (a & b):UI1]

Operands are treated as a UI1-width integer; the operation is bit-parallel. No overflow is possible.

When the compiler emits it

Emitted for the And operator on UI1-typed operands; Variant operands emit AndVar.

VB6 source (from description, not verified)
Dim a As Byte, b As Byte, c As Byte
c = a And b
Encoding, evidence and notes
Encoding

Encoding: FB 21 (lead byte FB selects table 1), then 0 operand byte(s); total instruction length 2 byte(s).
Operands: none. All inputs come from the evaluation stack or the frame.

Evidence and notes

Emitted by VB6 SP6 (P-code): not observed in about 3,070 probe programs. The slot exists in the runtime's dispatch table, but no tested source construct makes the compiler emit it.

Handler: 0x66105EA9, shared by 4 dispatch slots (real opcode #193). This is a duplicate slot of (0,C4) AndI4. Other slots: (0,C4) AndI4, (1,22) AndUI1, (1,23) AndUI1.

Check of vb6_source_eq example: compiles, but emits a different slot of the same handler. emits (0,C4) AndI4 (same handler, different slot)

Slots sharing this handler

(0,0xC4) AndI4, (1,0x22) AndUI1, (1,0x23) AndUI1

Description: draft, by claude-opus-4.7. Handler 0x66105EA9, dispatch slot 0x66107198, modOpcodes line 1396.

AndUI1

(1,0x22)not emitteddup of (0,C4)handler #193Integerconfirmed_handler
(alias) Pop operand(s); push bitwise And.

Alias dispatch slot (1, 0x22) for the canonical AndUI1 at (1, 0x21); semantics are identical.

Pops two 8-bit unsigned integer (VB6 Byte) operands b and a (top is b), pushes bitwise a & b.

Stack: [..., a:UI1, b:UI1] -> [..., (a & b):UI1]

Operands are treated as a UI1-width integer; the operation is bit-parallel. No overflow is possible.

When the compiler emits it

Emitted for the And operator on UI1-typed operands; Variant operands emit AndVar.

VB6 source (from description, not verified)
Dim a As Byte, b As Byte, c As Byte
c = a And b
Encoding, evidence and notes
Encoding

Encoding: FB 22 (lead byte FB selects table 1), then 0 operand byte(s); total instruction length 2 byte(s).
Operands: none. All inputs come from the evaluation stack or the frame.

Evidence and notes

Emitted by VB6 SP6 (P-code): not observed in about 3,070 probe programs. The slot exists in the runtime's dispatch table, but no tested source construct makes the compiler emit it.

Handler: 0x66105EA9, shared by 4 dispatch slots (real opcode #193). This is a duplicate slot of (0,C4) AndI4. Other slots: (0,C4) AndI4, (1,21) AndUI1, (1,23) AndUI1.

Check of vb6_source_eq example: compiles, but emits a different slot of the same handler. emits (0,C4) AndI4 (same handler, different slot)

Slots sharing this handler

(0,0xC4) AndI4, (1,0x21) AndUI1, (1,0x23) AndUI1

Description: draft, by claude-opus-4.7. Handler 0x66105EA9, dispatch slot 0x6610719C, modOpcodes line 1397.

AndUI1

(1,0x23)not emitteddup of (0,C4)handler #193Integerconfirmed_handler
(alias) Pop operand(s); push bitwise And.

Alias dispatch slot (1, 0x23) for the canonical AndUI1 at (1, 0x21); semantics are identical.

Pops two 8-bit unsigned integer (VB6 Byte) operands b and a (top is b), pushes bitwise a & b.

Stack: [..., a:UI1, b:UI1] -> [..., (a & b):UI1]

Operands are treated as a UI1-width integer; the operation is bit-parallel. No overflow is possible.

When the compiler emits it

Emitted for the And operator on UI1-typed operands; Variant operands emit AndVar.

VB6 source (from description, not verified)
Dim a As Byte, b As Byte, c As Byte
c = a And b
Encoding, evidence and notes
Encoding

Encoding: FB 23 (lead byte FB selects table 1), then 0 operand byte(s); total instruction length 2 byte(s).
Operands: none. All inputs come from the evaluation stack or the frame.

Evidence and notes

Emitted by VB6 SP6 (P-code): not observed in about 3,070 probe programs. The slot exists in the runtime's dispatch table, but no tested source construct makes the compiler emit it.

Handler: 0x66105EA9, shared by 4 dispatch slots (real opcode #193). This is a duplicate slot of (0,C4) AndI4. Other slots: (0,C4) AndI4, (1,21) AndUI1, (1,22) AndUI1.

Check of vb6_source_eq example: compiles, but emits a different slot of the same handler. emits (0,C4) AndI4 (same handler, different slot)

Slots sharing this handler

(0,0xC4) AndI4, (1,0x21) AndUI1, (1,0x22) AndUI1

Description: draft, by claude-opus-4.7. Handler 0x66105EA9, dispatch slot 0x661071A0, modOpcodes line 1398.

AndVar

(1,0x27)emittedhandler #262Variantinferred_corpus14 corpus hits
Pop operand(s); push bitwise And.

Pops two VBA Variant operands b and a (top is b), pushes bitwise a & b.

Stack: [..., a:Var, b:Var] -> [..., (a & b):Var]

Variant variant performs type coercion; for non-Boolean operands the operation is bitwise on the integer representation. Three-state logic (Null) is honored per VB6 rules.

When the compiler emits it

Emitted for the And operator on Var-typed operands; Variant operands emit AndVar.

VB6 source (verified: compiles to this slot)
Public Sub Main()
  Dim a As Variant, b As Variant, c As Variant
  c = a And b
End Sub
Encoding, evidence and notes
Encoding

Encoding: FB 27 (lead byte FB selects table 1), then 2 operand byte(s); total instruction length 4 byte(s).
vbdec template: %a
Operands:

  1. %a: local_var_ref, 2 byte(s). signed 16-bit offset from the procedure frame pointer (EBP). Negative = local/temporary (vbdec var_XX, XX = -offset), positive = argument (arg_XX).

Observed: FB27 3CFF AndVar var_C4

Examples
fso.Proc_467FC4 @ 0x467FC4 | 4680F8    FB27 9CFE             AndVar var_164
fso.Proc_467FC4 @ 0x467FC4 | 468148    FB27 8CFE             AndVar var_174
Form2.mnuFindFuncDependancies_Click @ 0x460130 | 46029A    FB27 F8FE             AndVar var_108

14 occurrence(s) in PDFStreamDumper.

Evidence and notes

Emitted by VB6 SP6 (P-code): yes. Minimal probe: probes\op\1_27_AndVar.

Handler: 0x66105F74, unique to this slot (real opcode #262).

Check of vb6_source_eq example: verified: compiles and emits this slot.

Corpus: 14 occurrence(s) in PDFStreamDumper_p.exe.

Example from the description
Dim a As Variant, b As Variant, c As Variant
c = a And b

Description: draft, by claude-opus-4.7. Handler 0x66105F74, dispatch slot 0x661071B0, modOpcodes line 1399.

Logic_Eqv

VB Eqv operator (equivalence)

EqvI4

(1,0x0A)emittedprimary of 2handler #257Integerconfirmed_msdocs
Pop two operands; push the bitwise equivalence (Eqv).

a Eqv b is Not (a Xor b) bitwise. Result bits are 1 where the input bits agree.

Stack: [..., a:I4, b:I4] -> [..., (a Eqv b):I4]

When the compiler emits it

Emitted for the Eqv operator on I4-typed operands.

VB6 source (verified: compiles to this slot)
Public Sub Main()
  Dim a As Boolean, b As Boolean, c As Boolean
  c = a Eqv b
End Sub
Encoding, evidence and notes
Encoding

Encoding: FB 0A (lead byte FB selects table 1), then 0 operand byte(s); total instruction length 2 byte(s).
Operands: none. All inputs come from the evaluation stack or the frame.
Observed: FB0A EqvI4

Evidence and notes

Emitted by VB6 SP6 (P-code): yes. Minimal probe: probes\op\1_0A_EqvI4.

Handler: 0x6610AD35, shared by 2 dispatch slots (real opcode #257). This is the primary slot. Other slots: (1,0B) EqvI4.

Compile-time slot selection: the compiler picks different slots of this handler for different source types:

  • (1,0A): Dim a As Boolean, b As Boolean, c As Boolean : c = a Eqv b
  • (1,0B): Dim a As Long, b As Long, c As Long : c = a Eqv b

Finding: Compiler selects this slot for Integer/Boolean operands (a Eqv b with Integer or Boolean). (1,0B) is used for Long and wider. Both share one handler. Effective meaning: EqvI2.

Check of vb6_source_eq example: compiles, but emits a different slot of the same handler. emits (1,0B) EqvI4 (same handler, different slot)

Example from the description
Dim a As Long, b As Long, c As Long
c = a Eqv b
Slots sharing this handler

(1,0x0B) EqvI4

Description: draft, by claude-opus-4.7. Handler 0x6610AD35, dispatch slot 0x6610713C, modOpcodes line 1470.

EqvI4

(1,0x0B)emitteddup of (1,0A)handler #257Integerconfirmed_handler
(alias) Pop two operands; push the bitwise equivalence (Eqv).

Alias dispatch slot (1, 0x0B) for the canonical EqvI4 at (1, 0x0A); semantics are identical.

a Eqv b is Not (a Xor b) bitwise. Result bits are 1 where the input bits agree.

Stack: [..., a:I4, b:I4] -> [..., (a Eqv b):I4]

When the compiler emits it

Emitted for the Eqv operator on I4-typed operands.

VB6 source (verified: compiles to this slot)
Public Sub Main()
  Dim a As Long, b As Long, c As Long
  c = a Eqv b
End Sub
Encoding, evidence and notes
Encoding

Encoding: FB 0B (lead byte FB selects table 1), then 0 operand byte(s); total instruction length 2 byte(s).
Operands: none. All inputs come from the evaluation stack or the frame.
Observed: FB0B EqvI4

Evidence and notes

Emitted by VB6 SP6 (P-code): yes. Minimal probe: probes\op\1_0B_EqvI4.

Handler: 0x6610AD35, shared by 2 dispatch slots (real opcode #257). This is a duplicate slot of (1,0A) EqvI4. Other slots: (1,0A) EqvI4.

Compile-time slot selection: the compiler picks different slots of this handler for different source types:

  • (1,0A): Dim a As Boolean, b As Boolean, c As Boolean : c = a Eqv b
  • (1,0B): Dim a As Long, b As Long, c As Long : c = a Eqv b

Finding: Compiler selects this slot for Long, Single, Double, Currency, Date and String operands (all coerced to Long). (1,0A) is used for Integer/Boolean.

Check of vb6_source_eq example: verified: compiles and emits this slot.

Example from the description
Dim a As Long, b As Long, c As Long
c = a Eqv b
Slots sharing this handler

(1,0x0A) EqvI4

Description: draft, by claude-opus-4.7. Handler 0x6610AD35, dispatch slot 0x66107140, modOpcodes line 1471.

EqvUI1

(1,0x09)emittedhandler #256Integerconfirmed_msdocs
Pop two operands; push the bitwise equivalence (Eqv).

a Eqv b is Not (a Xor b) bitwise. Result bits are 1 where the input bits agree.

Stack: [..., a:UI1, b:UI1] -> [..., (a Eqv b):UI1]

When the compiler emits it

Emitted for the Eqv operator on UI1-typed operands.

VB6 source (verified: compiles to this slot)
Public Sub Main()
  Dim a As Byte, b As Byte, c As Byte
  c = a Eqv b
End Sub
Encoding, evidence and notes
Encoding

Encoding: FB 09 (lead byte FB selects table 1), then 0 operand byte(s); total instruction length 2 byte(s).
Operands: none. All inputs come from the evaluation stack or the frame.
Observed: FB09 EqvUI1

Evidence and notes

Emitted by VB6 SP6 (P-code): yes. Minimal probe: probes\op\1_09_EqvUI1.

Handler: 0x6610AD22, unique to this slot (real opcode #256).

Check of vb6_source_eq example: verified: compiles and emits this slot.

Example from the description
Dim a As Byte, b As Byte, c As Byte
c = a Eqv b

Description: draft, by claude-opus-4.7. Handler 0x6610AD22, dispatch slot 0x66107138, modOpcodes line 1469.

EqvVar

(1,0x0F)emittedhandler #258Variantinferred_corpus
Variant bitwise equivalence (Eqv); result Variant in a temporary.

Pops two Variants, applies bitwise equivalence (Eqv) with VB's Variant coercion and Null-propagation rules, and writes the result Variant to the temporary %a, whose address is pushed.

Stack: [..., a:Var, b:Var] -> [..., r:Var]

When the compiler emits it

Emitted when either operand of bitwise equivalence (Eqv) is a Variant.

VB6 source (verified: compiles to this slot)
Public Sub Main()
  Dim a As Variant, b As Variant, c As Variant
  c = a Eqv b
End Sub
Encoding, evidence and notes
Encoding

Encoding: FB 0F (lead byte FB selects table 1), then 2 operand byte(s); total instruction length 4 byte(s).
vbdec template: %a
Operands:

  1. %a: local_var_ref, 2 byte(s). signed 16-bit offset from the procedure frame pointer (EBP). Negative = local/temporary (vbdec var_XX, XX = -offset), positive = argument (arg_XX).

Observed: FB0F 3CFF EqvVar var_C4

Examples
FB0F 3CFF  EqvVar var_C4

From the Phase 4 probe (VB6 SP6, P-code).

Evidence and notes

Emitted by VB6 SP6 (P-code): yes. Minimal probe: probes\op\1_0F_EqvVar.

Handler: 0x6610AE2A, unique to this slot (real opcode #258).

Check of vb6_source_eq example: verified: compiles and emits this slot.

Example from the description
Public Sub Main()
  Dim a As Variant, b As Variant, c As Variant
  c = a Eqv b
End Sub

Description: draft, by claude-opus-5-5. Handler 0x6610AE2A, dispatch slot 0x66107150, modOpcodes line 1472.

Logic_Imp

VB Imp operator (implication)

ImpI4

(1,0x02)emittedprimary of 2handler #254Integerconfirmed_msdocs
Pop two operands; push the logical implication (Imp).

a Imp b is (Not a) Or b bitwise. For Booleans this is material implication. VB6's Imp is rarely seen outside of legacy code and propositional-logic exercises.

Stack: [..., a:I4, b:I4] -> [..., (a Imp b):I4]

When the compiler emits it

Emitted for the Imp operator on I4-typed operands.

VB6 source (verified: compiles to this slot)
Public Sub Main()
  Dim a As Boolean, b As Boolean, c As Boolean
  c = a Imp b
End Sub
Encoding, evidence and notes
Encoding

Encoding: FB 02 (lead byte FB selects table 1), then 0 operand byte(s); total instruction length 2 byte(s).
Operands: none. All inputs come from the evaluation stack or the frame.
Observed: FB02 ImpI4

Evidence and notes

Emitted by VB6 SP6 (P-code): yes. Minimal probe: probes\op\1_02_ImpI4.

Handler: 0x6610AD5B, shared by 2 dispatch slots (real opcode #254). This is the primary slot. Other slots: (1,03) ImpI4.

Compile-time slot selection: the compiler picks different slots of this handler for different source types:

  • (1,02): Dim a As Boolean, b As Boolean, c As Boolean : c = a Imp b
  • (1,03): Dim a As Long, b As Long, c As Long : c = a Imp b

Finding: Compiler selects this slot for Integer/Boolean operands of Imp. (1,03) is used for Long and wider. Effective meaning: ImpI2.

Check of vb6_source_eq example: compiles, but emits a different slot of the same handler. emits (1,03) ImpI4 (same handler, different slot)

Example from the description
Dim a As Long, b As Long, c As Long
c = a Imp b
Slots sharing this handler

(1,0x03) ImpI4

Description: draft, by claude-opus-4.7. Handler 0x6610AD5B, dispatch slot 0x6610711C, modOpcodes line 1417.

ImpI4

(1,0x03)emitteddup of (1,02)handler #254Integerconfirmed_handler
(alias) Pop two operands; push the logical implication (Imp).

Alias dispatch slot (1, 0x03) for the canonical ImpI4 at (1, 0x02); semantics are identical.

a Imp b is (Not a) Or b bitwise. For Booleans this is material implication. VB6's Imp is rarely seen outside of legacy code and propositional-logic exercises.

Stack: [..., a:I4, b:I4] -> [..., (a Imp b):I4]

When the compiler emits it

Emitted for the Imp operator on I4-typed operands.

VB6 source (verified: compiles to this slot)
Public Sub Main()
  Dim a As Long, b As Long, c As Long
  c = a Imp b
End Sub
Encoding, evidence and notes
Encoding

Encoding: FB 03 (lead byte FB selects table 1), then 0 operand byte(s); total instruction length 2 byte(s).
Operands: none. All inputs come from the evaluation stack or the frame.
Observed: FB03 ImpI4

Evidence and notes

Emitted by VB6 SP6 (P-code): yes. Minimal probe: probes\op\1_03_ImpI4.

Handler: 0x6610AD5B, shared by 2 dispatch slots (real opcode #254). This is a duplicate slot of (1,02) ImpI4. Other slots: (1,02) ImpI4.

Compile-time slot selection: the compiler picks different slots of this handler for different source types:

  • (1,02): Dim a As Boolean, b As Boolean, c As Boolean : c = a Imp b
  • (1,03): Dim a As Long, b As Long, c As Long : c = a Imp b

Finding: Compiler selects this slot for Long and wider operands of Imp. (1,02) is used for Integer/Boolean.

Check of vb6_source_eq example: verified: compiles and emits this slot.

Example from the description
Dim a As Long, b As Long, c As Long
c = a Imp b
Slots sharing this handler

(1,0x02) ImpI4

Description: draft, by claude-opus-4.7. Handler 0x6610AD5B, dispatch slot 0x66107120, modOpcodes line 1418.

ImpUI1

(1,0x01)emittedhandler #253Integerconfirmed_msdocs
Pop two operands; push the logical implication (Imp).

a Imp b is (Not a) Or b bitwise. For Booleans this is material implication. VB6's Imp is rarely seen outside of legacy code and propositional-logic exercises.

Stack: [..., a:UI1, b:UI1] -> [..., (a Imp b):UI1]

When the compiler emits it

Emitted for the Imp operator on UI1-typed operands.

VB6 source (verified: compiles to this slot)
Public Sub Main()
  Dim a As Byte, b As Byte, c As Byte
  c = a Imp b
End Sub
Encoding, evidence and notes
Encoding

Encoding: FB 01 (lead byte FB selects table 1), then 0 operand byte(s); total instruction length 2 byte(s).
Operands: none. All inputs come from the evaluation stack or the frame.
Observed: FB01 ImpUI1

Evidence and notes

Emitted by VB6 SP6 (P-code): yes. Minimal probe: probes\op\1_01_ImpUI1.

Handler: 0x6610AD48, unique to this slot (real opcode #253).

Check of vb6_source_eq example: verified: compiles and emits this slot.

Example from the description
Dim a As Byte, b As Byte, c As Byte
c = a Imp b

Description: draft, by claude-opus-4.7. Handler 0x6610AD48, dispatch slot 0x66107118, modOpcodes line 1416.

ImpVar

(1,0x07)emittedhandler #255Variantinferred_corpus
Variant bitwise implication (Imp); result Variant in a temporary.

Pops two Variants, applies bitwise implication (Imp) with VB's Variant coercion and Null-propagation rules, and writes the result Variant to the temporary %a, whose address is pushed.

Stack: [..., a:Var, b:Var] -> [..., r:Var]

When the compiler emits it

Emitted when either operand of bitwise implication (Imp) is a Variant.

VB6 source (verified: compiles to this slot)
Public Sub Main()
  Dim a As Variant, b As Variant, c As Variant
  c = a Imp b
End Sub
Encoding, evidence and notes
Encoding

Encoding: FB 07 (lead byte FB selects table 1), then 2 operand byte(s); total instruction length 4 byte(s).
vbdec template: %a
Operands:

  1. %a: local_var_ref, 2 byte(s). signed 16-bit offset from the procedure frame pointer (EBP). Negative = local/temporary (vbdec var_XX, XX = -offset), positive = argument (arg_XX).

Observed: FB07 3CFF ImpVar var_C4

Examples
FB07 3CFF  ImpVar var_C4

From the Phase 4 probe (VB6 SP6, P-code).

Evidence and notes

Emitted by VB6 SP6 (P-code): yes. Minimal probe: probes\op\1_07_ImpVar.

Handler: 0x6610AE35, unique to this slot (real opcode #255).

Check of vb6_source_eq example: verified: compiles and emits this slot.

Example from the description
Public Sub Main()
  Dim a As Variant, b As Variant, c As Variant
  c = a Imp b
End Sub

Description: draft, by claude-opus-5-5. Handler 0x6610AE35, dispatch slot 0x66107130, modOpcodes line 1419.

Logic_Not

Logical/bitwise NOT

NotI4

(0,0xC3)emittedprimary of 3handler #192Integerconfirmed_msdocs159 corpus hits
Pop operand(s); push bitwise Not.

Pops one 32-bit signed integer (VB6 Long) operand a, pushes bitwise NOT a.

Stack: [..., a:I4] -> [..., (~a):I4]

Operands are treated as a I4-width integer; the operation is bit-parallel. No overflow is possible.

When the compiler emits it

Emitted for the Not unary operator on a I4-typed operand.

VB6 source (verified: compiles to this slot)
Public Sub Main()
  Dim a As Boolean, c As Boolean
  c = Not a
End Sub
Encoding, evidence and notes
Encoding

Encoding: C3, then 0 operand byte(s); total instruction length 1 byte(s).
Operands: none. All inputs come from the evaluation stack or the frame.
Observed: C3 NotI4

Examples
Form1.LoadPlugins @ 0x4644FC | 46452D    C3                    NotI4
Form1.mnuAlwaysUseZlib_Click @ 0x43FBDC | 43FBF1    C3                    NotI4
Form1.mnuAutoSwitchTabs_Click @ 0x43F834 | 43F849    C3                    NotI4

159 occurrence(s) in PDFStreamDumper.

Evidence and notes

Emitted by VB6 SP6 (P-code): yes. Minimal probe: probes\op\0_C3_NotI4.

Handler: 0x66105E9A, shared by 3 dispatch slots (real opcode #192). This is the primary slot. Other slots: (1,BF) NotI4, (1,C0) NotI4.

Check of vb6_source_eq example: verified: compiles and emits this slot.

Corpus: 159 occurrence(s) in PDFStreamDumper_p.exe.

Example from the description
Dim a As Long, c As Long
c = Not a
Slots sharing this handler

(1,0xBF) NotI4, (1,0xC0) NotI4

Description: draft, by claude-opus-4.7. Handler 0x66105E9A, dispatch slot 0x66107020, modOpcodes line 1389.

NotI4

(1,0xBF)not emitteddup of (0,C3)handler #192Integerconfirmed_handler
(alias) Pop operand(s); push bitwise Not.

Alias dispatch slot (1, 0xBF) for the canonical NotI4 at (0, 0xC3); semantics are identical.

Pops one 32-bit signed integer (VB6 Long) operand a, pushes bitwise NOT a.

Stack: [..., a:I4] -> [..., (~a):I4]

Operands are treated as a I4-width integer; the operation is bit-parallel. No overflow is possible.

When the compiler emits it

Emitted for the Not unary operator on a I4-typed operand.

VB6 source (from description, not verified)
Dim a As Long, c As Long
c = Not a
Encoding, evidence and notes
Encoding

Encoding: FB BF (lead byte FB selects table 1), then 0 operand byte(s); total instruction length 2 byte(s).
Operands: none. All inputs come from the evaluation stack or the frame.

Evidence and notes

Emitted by VB6 SP6 (P-code): not observed in about 3,070 probe programs. The slot exists in the runtime's dispatch table, but no tested source construct makes the compiler emit it.

Handler: 0x66105E9A, shared by 3 dispatch slots (real opcode #192). This is a duplicate slot of (0,C3) NotI4. Other slots: (0,C3) NotI4, (1,C0) NotI4.

Check of vb6_source_eq example: compiles, but emits a different slot of the same handler. emits (0,C3) NotI4 (same handler, different slot)

Slots sharing this handler

(0,0xC3) NotI4, (1,0xC0) NotI4

Description: draft, by claude-opus-4.7. Handler 0x66105E9A, dispatch slot 0x66107410, modOpcodes line 1390.

NotI4

(1,0xC0)not emitteddup of (0,C3)handler #192Integerconfirmed_handler
(alias) Pop operand(s); push bitwise Not.

Alias dispatch slot (1, 0xC0) for the canonical NotI4 at (0, 0xC3); semantics are identical.

Pops one 32-bit signed integer (VB6 Long) operand a, pushes bitwise NOT a.

Stack: [..., a:I4] -> [..., (~a):I4]

Operands are treated as a I4-width integer; the operation is bit-parallel. No overflow is possible.

When the compiler emits it

Emitted for the Not unary operator on a I4-typed operand.

VB6 source (from description, not verified)
Dim a As Long, c As Long
c = Not a
Encoding, evidence and notes
Encoding

Encoding: FB C0 (lead byte FB selects table 1), then 0 operand byte(s); total instruction length 2 byte(s).
Operands: none. All inputs come from the evaluation stack or the frame.

Evidence and notes

Emitted by VB6 SP6 (P-code): not observed in about 3,070 probe programs. The slot exists in the runtime's dispatch table, but no tested source construct makes the compiler emit it.

Handler: 0x66105E9A, shared by 3 dispatch slots (real opcode #192). This is a duplicate slot of (0,C3) NotI4. Other slots: (0,C3) NotI4, (1,BF) NotI4.

Check of vb6_source_eq example: compiles, but emits a different slot of the same handler. emits (0,C3) NotI4 (same handler, different slot)

Slots sharing this handler

(0,0xC3) NotI4, (1,0xBF) NotI4

Description: draft, by claude-opus-4.7. Handler 0x66105E9A, dispatch slot 0x66107414, modOpcodes line 1391.

NotUI1

(1,0xBE)emittedhandler #329Integerconfirmed_msdocs
Pop operand(s); push bitwise Not.

Pops one 8-bit unsigned integer (VB6 Byte) operand a, pushes bitwise NOT a.

Stack: [..., a:UI1] -> [..., (~a):UI1]

Operands are treated as a UI1-width integer; the operation is bit-parallel. No overflow is possible.

When the compiler emits it

Emitted for the Not unary operator on a UI1-typed operand.

VB6 source (verified: compiles to this slot)
Public Sub Main()
  Dim a As Byte, c As Byte
  c = Not a
End Sub
Encoding, evidence and notes
Encoding

Encoding: FB BE (lead byte FB selects table 1), then 0 operand byte(s); total instruction length 2 byte(s).
Operands: none. All inputs come from the evaluation stack or the frame.
Observed: FBBE NotUI1

Evidence and notes

Emitted by VB6 SP6 (P-code): yes. Minimal probe: probes\op\1_BE_NotUI1.

Handler: 0x6610AD03, unique to this slot (real opcode #329).

Check of vb6_source_eq example: verified: compiles and emits this slot.

Example from the description
Dim a As Byte, c As Byte
c = Not a

Description: draft, by claude-opus-4.7. Handler 0x6610AD03, dispatch slot 0x6610740C, modOpcodes line 1392.

NotVar

(1,0xC4)emittedhandler #330Variantinferred_corpus5 corpus hits
Pop operand(s); push bitwise Not.

Pops one VBA Variant operand a, pushes bitwise NOT a.

Stack: [..., a:Var] -> [..., (~a):Var]

Variant variant performs type coercion; for non-Boolean operands the operation is bitwise on the integer representation. Three-state logic (Null) is honored per VB6 rules.

When the compiler emits it

Emitted for the Not unary operator on a Var-typed operand.

VB6 source (verified: compiles to this slot)
Public Sub Main()
  Dim a As Variant, c As Variant
  c = Not a
End Sub
Encoding, evidence and notes
Encoding

Encoding: FB C4 (lead byte FB selects table 1), then 2 operand byte(s); total instruction length 4 byte(s).
vbdec template: %a
Operands:

  1. %a: local_var_ref, 2 byte(s). signed 16-bit offset from the procedure frame pointer (EBP). Negative = local/temporary (vbdec var_XX, XX = -offset), positive = argument (arg_XX).

Observed: FBC4 4CFF NotVar var_B4

Examples
Form2.ExtractFunction @ 0x45FB40 | 45FD7B    FBC4 0CFF             NotVar var_F4
modEscapes.Proc_472E38 @ 0x472E38 | 4731D0    FBC4 18FF             NotVar var_E8
CSharpFilters.Decrypt @ 0x455BDC | 455CF2    FBC4 10FF             NotVar var_F0

5 occurrence(s) in PDFStreamDumper.

Evidence and notes

Emitted by VB6 SP6 (P-code): yes. Minimal probe: probes\op\1_C4_NotVar.

Handler: 0x66105F2E, unique to this slot (real opcode #330).

Check of vb6_source_eq example: verified: compiles and emits this slot.

Corpus: 5 occurrence(s) in PDFStreamDumper_p.exe.

Example from the description
Dim a As Variant, c As Variant
c = Not a

Description: draft, by claude-opus-4.7. Handler 0x66105F2E, dispatch slot 0x66107424, modOpcodes line 1393.

Logic_Or

Logical/bitwise OR

OrI2

(1,0x19)not emitteddup of (0,C5)handler #194Integerconfirmed_msdocs
Pop operand(s); push bitwise Or.

Pops two 16-bit signed integer (VB6 Integer) operands b and a (top is b), pushes bitwise a | b.

Stack: [..., a:I2, b:I2] -> [..., (a | b):I2]

Operands are treated as a I2-width integer; the operation is bit-parallel. No overflow is possible.

When the compiler emits it

Emitted for the Or operator on I2-typed operands; Variant operands emit OrVar.

VB6 source (from description, not verified)
Dim a As Integer, b As Integer, c As Integer
c = a Or b
Encoding, evidence and notes
Encoding

Encoding: FB 19 (lead byte FB selects table 1), then 0 operand byte(s); total instruction length 2 byte(s).
Operands: none. All inputs come from the evaluation stack or the frame.

Evidence and notes

Emitted by VB6 SP6 (P-code): not observed in about 3,070 probe programs. The slot exists in the runtime's dispatch table, but no tested source construct makes the compiler emit it.

Handler: 0x66105EB9, shared by 4 dispatch slots (real opcode #194). This is a duplicate slot of (0,C5) OrI4. Other slots: (0,C5) OrI4, (1,1A) OrI2, (1,1B) OrI2.

Check of vb6_source_eq example: compiles, but emits a different slot of the same handler. emits (0,C5) OrI4 (same handler, different slot)

Slots sharing this handler

(0,0xC5) OrI4, (1,0x1A) OrI2, (1,0x1B) OrI2

Description: draft, by claude-opus-4.7. Handler 0x66105EB9, dispatch slot 0x66107178, modOpcodes line 1407.

OrI2

(1,0x1A)not emitteddup of (0,C5)handler #194Integerconfirmed_handler
(alias) Pop operand(s); push bitwise Or.

Alias dispatch slot (1, 0x1A) for the canonical OrI2 at (1, 0x19); semantics are identical.

Pops two 16-bit signed integer (VB6 Integer) operands b and a (top is b), pushes bitwise a | b.

Stack: [..., a:I2, b:I2] -> [..., (a | b):I2]

Operands are treated as a I2-width integer; the operation is bit-parallel. No overflow is possible.

When the compiler emits it

Emitted for the Or operator on I2-typed operands; Variant operands emit OrVar.

VB6 source (from description, not verified)
Dim a As Integer, b As Integer, c As Integer
c = a Or b
Encoding, evidence and notes
Encoding

Encoding: FB 1A (lead byte FB selects table 1), then 0 operand byte(s); total instruction length 2 byte(s).
Operands: none. All inputs come from the evaluation stack or the frame.

Evidence and notes

Emitted by VB6 SP6 (P-code): not observed in about 3,070 probe programs. The slot exists in the runtime's dispatch table, but no tested source construct makes the compiler emit it.

Handler: 0x66105EB9, shared by 4 dispatch slots (real opcode #194). This is a duplicate slot of (0,C5) OrI4. Other slots: (0,C5) OrI4, (1,19) OrI2, (1,1B) OrI2.

Check of vb6_source_eq example: compiles, but emits a different slot of the same handler. emits (0,C5) OrI4 (same handler, different slot)

Slots sharing this handler

(0,0xC5) OrI4, (1,0x19) OrI2, (1,0x1B) OrI2

Description: draft, by claude-opus-4.7. Handler 0x66105EB9, dispatch slot 0x6610717C, modOpcodes line 1408.

OrI2

(1,0x1B)not emitteddup of (0,C5)handler #194Integerconfirmed_handler
(alias) Pop operand(s); push bitwise Or.

Alias dispatch slot (1, 0x1B) for the canonical OrI2 at (1, 0x19); semantics are identical.

Pops two 16-bit signed integer (VB6 Integer) operands b and a (top is b), pushes bitwise a | b.

Stack: [..., a:I2, b:I2] -> [..., (a | b):I2]

Operands are treated as a I2-width integer; the operation is bit-parallel. No overflow is possible.

When the compiler emits it

Emitted for the Or operator on I2-typed operands; Variant operands emit OrVar.

VB6 source (from description, not verified)
Dim a As Integer, b As Integer, c As Integer
c = a Or b
Encoding, evidence and notes
Encoding

Encoding: FB 1B (lead byte FB selects table 1), then 0 operand byte(s); total instruction length 2 byte(s).
Operands: none. All inputs come from the evaluation stack or the frame.

Evidence and notes

Emitted by VB6 SP6 (P-code): not observed in about 3,070 probe programs. The slot exists in the runtime's dispatch table, but no tested source construct makes the compiler emit it.

Handler: 0x66105EB9, shared by 4 dispatch slots (real opcode #194). This is a duplicate slot of (0,C5) OrI4. Other slots: (0,C5) OrI4, (1,19) OrI2, (1,1A) OrI2.

Check of vb6_source_eq example: compiles, but emits a different slot of the same handler. emits (0,C5) OrI4 (same handler, different slot)

Slots sharing this handler

(0,0xC5) OrI4, (1,0x19) OrI2, (1,0x1A) OrI2

Description: draft, by claude-opus-4.7. Handler 0x66105EB9, dispatch slot 0x66107180, modOpcodes line 1409.

OrI4

(0,0xC5)emittedprimary of 4handler #194Integerconfirmed_msdocs43 corpus hits
Pop operand(s); push bitwise Or.

Pops two 32-bit signed integer (VB6 Long) operands b and a (top is b), pushes bitwise a | b.

Stack: [..., a:I4, b:I4] -> [..., (a | b):I4]

Operands are treated as a I4-width integer; the operation is bit-parallel. No overflow is possible.

When the compiler emits it

Emitted for the Or operator on I4-typed operands; Variant operands emit OrVar.

VB6 source (verified: compiles to this slot)
Public Sub Main()
  Dim a As Boolean, b As Boolean, c As Boolean
  c = a Or b
End Sub
Encoding, evidence and notes
Encoding

Encoding: C5, then 0 operand byte(s); total instruction length 1 byte(s).
Operands: none. All inputs come from the evaluation stack or the frame.
Observed: C5 OrI4

Examples
Form1.mnuDecompileFlashTools_Click @ 0x45A770 | 45A8DB    C5                    OrI4
Form1.mnuDecompressSWC_Click @ 0x45E9E4 | 45EAB7    C5                    OrI4
Form1.mnuDecompressSWC_Click @ 0x45E9E4 | 45EACD    C5                    OrI4

43 occurrence(s) in PDFStreamDumper.

Evidence and notes

Emitted by VB6 SP6 (P-code): yes. Minimal probe: probes\op\0_C5_OrI4.

Handler: 0x66105EB9, shared by 4 dispatch slots (real opcode #194). This is the primary slot. Other slots: (1,19) OrI2, (1,1A) OrI2, (1,1B) OrI2.

Check of vb6_source_eq example: verified: compiles and emits this slot.

Corpus: 43 occurrence(s) in PDFStreamDumper_p.exe.

Example from the description
Dim a As Long, b As Long, c As Long
c = a Or b
Slots sharing this handler

(1,0x19) OrI2, (1,0x1A) OrI2, (1,0x1B) OrI2

Description: draft, by claude-opus-4.7. Handler 0x66105EB9, dispatch slot 0x66107028, modOpcodes line 1406.

OrVar

(1,0x1F)emittedhandler #261Variantinferred_corpus11 corpus hits
Pop operand(s); push bitwise Or.

Pops two VBA Variant operands b and a (top is b), pushes bitwise a | b.

Stack: [..., a:Var, b:Var] -> [..., (a | b):Var]

Variant variant performs type coercion; for non-Boolean operands the operation is bitwise on the integer representation. Three-state logic (Null) is honored per VB6 rules.

When the compiler emits it

Emitted for the Or operator on Var-typed operands; Variant operands emit OrVar.

VB6 source (verified: compiles to this slot)
Public Sub Main()
  Dim a As Variant, b As Variant, c As Variant
  c = a Or b
End Sub
Encoding, evidence and notes
Encoding

Encoding: FB 1F (lead byte FB selects table 1), then 2 operand byte(s); total instruction length 4 byte(s).
vbdec template: %a
Operands:

  1. %a: local_var_ref, 2 byte(s). signed 16-bit offset from the procedure frame pointer (EBP). Negative = local/temporary (vbdec var_XX, XX = -offset), positive = argument (arg_XX).

Observed: FB1F 3CFF OrVar var_C4

Examples
Form1.Form_Load @ 0x479DC0 | 47AF51    FB1F 94FD             OrVar var_26C
CPDFStream.Proc_455814 @ 0x455814 | 45587F    FB1F D8FE             OrVar var_128
CPDFStream.Proc_455814 @ 0x455814 | 455939    FB1F D8FE             OrVar var_128

11 occurrence(s) in PDFStreamDumper.

Evidence and notes

Emitted by VB6 SP6 (P-code): yes. Minimal probe: probes\op\1_1F_OrVar.

Handler: 0x66105F92, unique to this slot (real opcode #261).

Check of vb6_source_eq example: verified: compiles and emits this slot.

Corpus: 11 occurrence(s) in PDFStreamDumper_p.exe.

Example from the description
Dim a As Variant, b As Variant, c As Variant
c = a Or b

Description: draft, by claude-opus-4.7. Handler 0x66105F92, dispatch slot 0x66107190, modOpcodes line 1410.

Logic_Xor

Exclusive OR

XorI4

(1,0x11)emitteddup of (1,12)handler #259Integerconfirmed_msdocs
Pop operand(s); push bitwise Xor.

Pops two 32-bit signed integer (VB6 Long) operands b and a (top is b), pushes bitwise a ^ b.

Stack: [..., a:I4, b:I4] -> [..., (a ^ b):I4]

Operands are treated as a I4-width integer; the operation is bit-parallel. No overflow is possible.

When the compiler emits it

Emitted for the Xor operator on I4-typed operands; Variant operands emit XorVar.

VB6 source (verified: compiles to this slot)
Public Sub Main()
  Dim a As Byte, b As Byte, c As Byte
  c = a Xor b
End Sub
Encoding, evidence and notes
Encoding

Encoding: FB 11 (lead byte FB selects table 1), then 0 operand byte(s); total instruction length 2 byte(s).
Operands: none. All inputs come from the evaluation stack or the frame.
Observed: FB11 XorI4

Evidence and notes

Emitted by VB6 SP6 (P-code): yes. Minimal probe: probes\op\1_11_XorI4.

Handler: 0x6610AD12, shared by 3 dispatch slots (real opcode #259). This is a duplicate slot of (1,12) XorI4. Other slots: (1,12) XorI4, (1,13) XorI4.

Compile-time slot selection: the compiler picks different slots of this handler for different source types:

  • (1,11): Dim a As Byte, b As Byte, c As Byte : c = a Xor b
  • (1,12): Dim a As Boolean, b As Boolean, c As Boolean : c = a Xor b
  • (1,13): Dim a As Long, b As Long, c As Long : c = a Xor b

Finding: Compiler selects this slot for Byte operands of Xor. Effective meaning: XorUI1.

Check of vb6_source_eq example: compiles, but emits a different slot of the same handler. emits (1,13) XorI4 (same handler, different slot)

Example from the description
Dim a As Long, b As Long, c As Long
c = a Xor b
Slots sharing this handler

(1,0x12) XorI4, (1,0x13) XorI4

Description: draft, by claude-opus-4.7. Handler 0x6610AD12, dispatch slot 0x66107158, modOpcodes line 1401.

XorI4

(1,0x12)emittedprimary of 3handler #259Integerconfirmed_handler4 corpus hits
(alias) Pop operand(s); push bitwise Xor.

Alias dispatch slot (1, 0x12) for the canonical XorI4 at (1, 0x11); semantics are identical.

Pops two 32-bit signed integer (VB6 Long) operands b and a (top is b), pushes bitwise a ^ b.

Stack: [..., a:I4, b:I4] -> [..., (a ^ b):I4]

Operands are treated as a I4-width integer; the operation is bit-parallel. No overflow is possible.

When the compiler emits it

Emitted for the Xor operator on I4-typed operands; Variant operands emit XorVar.

VB6 source (verified: compiles to this slot)
Public Sub Main()
  Dim a As Boolean, b As Boolean, c As Boolean
  c = a Xor b
End Sub
Encoding, evidence and notes
Encoding

Encoding: FB 12 (lead byte FB selects table 1), then 0 operand byte(s); total instruction length 2 byte(s).
Operands: none. All inputs come from the evaluation stack or the frame.
Observed: FB12 XorI4

Examples
Form2.Shellcode2Exe @ 0x470410 | 4705E9    FB12                  XorI4
Form2.Shellcode2Exe @ 0x470410 | 47068B    FB12                  XorI4
modEscapes.Proc_4501DC @ 0x4501DC | 450259    FB12                  XorI4

4 occurrence(s) in PDFStreamDumper.

Evidence and notes

Emitted by VB6 SP6 (P-code): yes. Minimal probe: probes\op\1_12_XorI4.

Handler: 0x6610AD12, shared by 3 dispatch slots (real opcode #259). This is the primary slot. Other slots: (1,11) XorI4, (1,13) XorI4.

Compile-time slot selection: the compiler picks different slots of this handler for different source types:

  • (1,11): Dim a As Byte, b As Byte, c As Byte : c = a Xor b
  • (1,12): Dim a As Boolean, b As Boolean, c As Boolean : c = a Xor b
  • (1,13): Dim a As Long, b As Long, c As Long : c = a Xor b

Finding: Compiler selects this slot for Integer/Boolean operands of Xor. Effective meaning: XorI2.

Check of vb6_source_eq example: compiles, but emits a different slot of the same handler. emits (1,13) XorI4 (same handler, different slot)

Corpus: 4 occurrence(s) in PDFStreamDumper_p.exe.

Example from the description
Dim a As Long, b As Long, c As Long
c = a Xor b
Slots sharing this handler

(1,0x11) XorI4, (1,0x13) XorI4

Description: draft, by claude-opus-4.7. Handler 0x6610AD12, dispatch slot 0x6610715C, modOpcodes line 1402.

XorI4

(1,0x13)emitteddup of (1,12)handler #259Integerconfirmed_handler3 corpus hits
(alias) Pop operand(s); push bitwise Xor.

Alias dispatch slot (1, 0x13) for the canonical XorI4 at (1, 0x11); semantics are identical.

Pops two 32-bit signed integer (VB6 Long) operands b and a (top is b), pushes bitwise a ^ b.

Stack: [..., a:I4, b:I4] -> [..., (a ^ b):I4]

Operands are treated as a I4-width integer; the operation is bit-parallel. No overflow is possible.

When the compiler emits it

Emitted for the Xor operator on I4-typed operands; Variant operands emit XorVar.

VB6 source (verified: compiles to this slot)
Public Sub Main()
  Dim a As Long, b As Long, c As Long
  c = a Xor b
End Sub
Encoding, evidence and notes
Encoding

Encoding: FB 13 (lead byte FB selects table 1), then 0 operand byte(s); total instruction length 2 byte(s).
Operands: none. All inputs come from the evaluation stack or the frame.
Observed: FB13 XorI4

Examples
modCrc.Proc_446CFC @ 0x446CFC | 446D6D    FB13                  XorI4
modCrc.Proc_44821C @ 0x44821C | 44827C    FB13                  XorI4
modCrc.Proc_44821C @ 0x44821C | 4482A7    FB13                  XorI4

3 occurrence(s) in PDFStreamDumper.

Evidence and notes

Emitted by VB6 SP6 (P-code): yes. Minimal probe: probes\op\1_13_XorI4.

Handler: 0x6610AD12, shared by 3 dispatch slots (real opcode #259). This is a duplicate slot of (1,12) XorI4. Other slots: (1,11) XorI4, (1,12) XorI4.

Compile-time slot selection: the compiler picks different slots of this handler for different source types:

  • (1,11): Dim a As Byte, b As Byte, c As Byte : c = a Xor b
  • (1,12): Dim a As Boolean, b As Boolean, c As Boolean : c = a Xor b
  • (1,13): Dim a As Long, b As Long, c As Long : c = a Xor b

Finding: Compiler selects this slot for Long and wider operands of Xor.

Check of vb6_source_eq example: verified: compiles and emits this slot.

Corpus: 3 occurrence(s) in PDFStreamDumper_p.exe.

Example from the description
Dim a As Long, b As Long, c As Long
c = a Xor b
Slots sharing this handler

(1,0x11) XorI4, (1,0x12) XorI4

Description: draft, by claude-opus-4.7. Handler 0x6610AD12, dispatch slot 0x66107160, modOpcodes line 1403.

XorVar

(1,0x17)emittedhandler #260Variantinferred_corpus
Variant bitwise exclusive-or (Xor); result Variant in a temporary.

Pops two Variants, applies bitwise exclusive-or (Xor) with VB's Variant coercion and Null-propagation rules, and writes the result Variant to the temporary %a, whose address is pushed.

Stack: [..., a:Var, b:Var] -> [..., r:Var]

When the compiler emits it

Emitted when either operand of bitwise exclusive-or (Xor) is a Variant.

VB6 source (verified: compiles to this slot)
Public Sub Main()
  Dim a As Variant, b As Variant, c As Variant
  c = a Xor b
End Sub
Encoding, evidence and notes
Encoding

Encoding: FB 17 (lead byte FB selects table 1), then 2 operand byte(s); total instruction length 4 byte(s).
vbdec template: %a
Operands:

  1. %a: local_var_ref, 2 byte(s). signed 16-bit offset from the procedure frame pointer (EBP). Negative = local/temporary (vbdec var_XX, XX = -offset), positive = argument (arg_XX).

Observed: FB17 3CFF XorVar var_C4

Examples
FB17 3CFF  XorVar var_C4

From the Phase 4 probe (VB6 SP6, P-code).

Evidence and notes

Emitted by VB6 SP6 (P-code): yes. Minimal probe: probes\op\1_17_XorVar.

Handler: 0x6610AE1F, unique to this slot (real opcode #260).

Check of vb6_source_eq example: verified: compiles and emits this slot.

Example from the description
Public Sub Main()
  Dim a As Variant, b As Variant, c As Variant
  c = a Xor b
End Sub

Description: draft, by claude-opus-5-5. Handler 0x6610AE1F, dispatch slot 0x66107170, modOpcodes line 1404.

Loop_ExitFor

Exit For

ExitForAryVar

(3,0xCE)emittedhandler #571Control flowinferred_corpus3 corpus hits
Exit For out of a For Each loop over an array, with a Variant control variable.

Releases the iteration state held in %a and jumps to %L, the first instruction after the loop.

When the compiler emits it

Emitted for Exit For inside For Each over an array, with a Variant control variable.

VB6 source (verified: compiles to this slot)
Public Sub Main()
  Dim a(5) As Object, x As Variant
  For Each x In a
    Exit For
  Next
End Sub
Encoding, evidence and notes
Encoding

Encoding: FD CE (lead byte FD selects table 3), then 4 operand byte(s); total instruction length 6 byte(s).
vbdec template: %a %L
Operands:

  1. %a: local_var_ref, 2 byte(s). signed 16-bit offset from the procedure frame pointer (EBP). Negative = local/temporary (vbdec var_XX, XX = -offset), positive = argument (arg_XX).
  2. %L: branch_target_no_loc, 2 byte(s). 16-bit branch target (proc-relative), not added to vbdec's label list.

Observed: FDCE 3CFF1F00 ExitForAryVar var_C4 loc_40147B

Examples
CApplyFilters.ApplyFilters @ 0x4626A4 | 46271F    FDCE 48FFC902         ExitForAryVar var_B8 loc_46296D
CApplyFilters.ApplyFilters @ 0x4626A4 | 4628F5    FDCE 48FFC902         ExitForAryVar var_B8 loc_46296D
CApplyFilters.ApplyFilters @ 0x4626A4 | 46295C    FDCE 48FFC902         ExitForAryVar var_B8 loc_46296D

3 occurrence(s) in PDFStreamDumper.

Evidence and notes

Emitted by VB6 SP6 (P-code): yes. Minimal probe: probes\op\3_CE_ExitForAryVar.

Handler: 0x6610A358, unique to this slot (real opcode #571).

Check of vb6_source_eq example: verified: compiles and emits this slot.

Corpus: 3 occurrence(s) in PDFStreamDumper_p.exe.

Example from the description
Dim a(3) As Long, x As Variant
For Each x In a
  Exit For
Next

Description: draft, by claude-opus-5-5. Handler 0x6610A358, dispatch slot 0x66107C4C, modOpcodes line 609.

ExitForCollObj

(3,0xCB)emitteddup of (3,CD)handler #570Control flowinferred_corpus
Same handler as (3,0xCD) ExitForCollObj: Exit For out of a For Each over a collection whose control variable is a specific class.
VB6 source (verified: compiles to this slot)
Public Sub Main()
  Dim c As Object, x As Variant
  For Each x In c
    Exit For
  Next
End Sub
Encoding, evidence and notes
Encoding

Encoding: FD CB (lead byte FD selects table 3), then 4 operand byte(s); total instruction length 6 byte(s).
vbdec template: %a %L
Operands:

  1. %a: local_var_ref, 2 byte(s). signed 16-bit offset from the procedure frame pointer (EBP). Negative = local/temporary (vbdec var_XX, XX = -offset), positive = argument (arg_XX).
  2. %L: branch_target_no_loc, 2 byte(s). 16-bit branch target (proc-relative), not added to vbdec's label list.

Observed: FDCB 64FF1B00 ExitForCollObj var_9C loc_401467

Evidence and notes

Emitted by VB6 SP6 (P-code): yes. Minimal probe: probes\op\3_CB_ExitForCollObj.

Handler: 0x6610A318, shared by 3 dispatch slots (real opcode #570). This is a duplicate slot of (3,CD) ExitForCollObj. Other slots: (3,CC) ExitForCollObj, (3,CD) ExitForCollObj.

Compile-time slot selection: the compiler picks different slots of this handler for different source types:

  • (3,CB): Dim c As Object, x As Variant : For Each x In c : Exit For : Next
  • (3,CC): Dim c As New Collection, x As Object : For Each x In c : Exit For : Next
  • (3,CD): Dim c As New Collection, x As CThing : For Each x In c : Exit For : Next

Finding: Exit For inside For Each over a collection, control variable typed Variant.

Slots sharing this handler

(3,0xCC) ExitForCollObj, (3,0xCD) ExitForCollObj

Description: none. Handler 0x6610A318, dispatch slot 0x66107C40, modOpcodes line 606.

ExitForCollObj

(3,0xCC)emitteddup of (3,CD)handler #570Control flowconfirmed_handler
Same handler as (3,0xCD) ExitForCollObj: Exit For out of a For Each over a collection whose control variable is a specific class.
VB6 source (verified: compiles to this slot)
Public Sub Main()
  Dim c As New Collection, x As Object
  For Each x In c
    Exit For
  Next
End Sub
Encoding, evidence and notes
Encoding

Encoding: FD CC (lead byte FD selects table 3), then 4 operand byte(s); total instruction length 6 byte(s).
vbdec template: %a %L
Operands:

  1. %a: local_var_ref, 2 byte(s). signed 16-bit offset from the procedure frame pointer (EBP). Negative = local/temporary (vbdec var_XX, XX = -offset), positive = argument (arg_XX).
  2. %L: branch_target_no_loc, 2 byte(s). 16-bit branch target (proc-relative), not added to vbdec's label list.

Observed: FDCC 70FF1E00 ExitForCollObj var_90 loc_40149E

Evidence and notes

Emitted by VB6 SP6 (P-code): yes. Minimal probe: probes\op\3_CC_ExitForCollObj.

Handler: 0x6610A318, shared by 3 dispatch slots (real opcode #570). This is a duplicate slot of (3,CD) ExitForCollObj. Other slots: (3,CB) ExitForCollObj, (3,CD) ExitForCollObj.

Compile-time slot selection: the compiler picks different slots of this handler for different source types:

  • (3,CB): Dim c As Object, x As Variant : For Each x In c : Exit For : Next
  • (3,CC): Dim c As New Collection, x As Object : For Each x In c : Exit For : Next
  • (3,CD): Dim c As New Collection, x As CThing : For Each x In c : Exit For : Next

Finding: Exit For inside For Each over a collection, control variable typed Object.

Slots sharing this handler

(3,0xCB) ExitForCollObj, (3,0xCD) ExitForCollObj

Description: none. Handler 0x6610A318, dispatch slot 0x66107C44, modOpcodes line 607.

ExitForCollObj

(3,0xCD)emittedprimary of 3handler #570Control flowconfirmed_handler11 corpus hits
Exit For out of a For Each over a collection whose control variable is a specific class.

Releases the enumerator held in %a (and the current element reference) and jumps to %L.

When the compiler emits it

Emitted for Exit For inside For Each x In coll where x is typed as a specific class or control type. (3,CB) is used for a Variant control variable and (3,CC) for Object; all three share one handler.

VB6 source (verified: compiles to this slot)
Public Sub Main()
  Dim c As New Collection, x As CThing
  For Each x In c
    Exit For
  Next
End Sub
' ---- CThing.cls
Encoding, evidence and notes
Encoding

Encoding: FD CD (lead byte FD selects table 3), then 4 operand byte(s); total instruction length 6 byte(s).
vbdec template: %a %L
Operands:

  1. %a: local_var_ref, 2 byte(s). signed 16-bit offset from the procedure frame pointer (EBP). Negative = local/temporary (vbdec var_XX, XX = -offset), positive = argument (arg_XX).
  2. %L: branch_target_no_loc, 2 byte(s). 16-bit branch target (proc-relative), not added to vbdec's label list.

Observed: FDCD 70FF2200 ExitForCollObj var_90 loc_4016DE

Examples
Form1.mnuWipeStream_Click @ 0x46D520 | 46D646    FDCD B4FE3E01         ExitForCollObj var_14C loc_46D65E
Form1.cmdDecode_Click @ 0x4775C0 | 477DFF    FDCD C4FE5408         ExitForCollObj var_13C loc_477E14
Form1.lvSearch_ItemClick(ByVal Item As ListItem) @ 0x44F68C | 44F74A    FDCD 48FFD300         ExitForCollObj var_B8 loc_44F75F

11 occurrence(s) in PDFStreamDumper.

Evidence and notes

Emitted by VB6 SP6 (P-code): yes. Minimal probe: probes\op\3_CD_ExitForCollObj.

Handler: 0x6610A318, shared by 3 dispatch slots (real opcode #570). This is the primary slot. Other slots: (3,CB) ExitForCollObj, (3,CC) ExitForCollObj.

Compile-time slot selection: the compiler picks different slots of this handler for different source types:

  • (3,CB): Dim c As Object, x As Variant : For Each x In c : Exit For : Next
  • (3,CC): Dim c As New Collection, x As Object : For Each x In c : Exit For : Next
  • (3,CD): Dim c As New Collection, x As CThing : For Each x In c : Exit For : Next

Finding: Exit For inside For Each over a collection, control variable typed as a specific class / control.

Check of vb6_source_eq example: verified: compiles and emits this slot.

Corpus: 11 occurrence(s) in PDFStreamDumper_p.exe.

Example from the description
Dim c As New Collection, x As Collection
For Each x In c
  Exit For
Next
Slots sharing this handler

(3,0xCB) ExitForCollObj, (3,0xCC) ExitForCollObj

Description: draft, by claude-opus-5-5. Handler 0x6610A318, dispatch slot 0x66107C48, modOpcodes line 608.

ExitForVar

(3,0xCF)emittedhandler #572Control flowinferred_corpus
Exit For out of a For Each over a Variant-held collection/array.

Releases the enumerator/iteration state held in %a and jumps to %L.

When the compiler emits it

Emitted for Exit For inside For Each x In v where v As Variant.

VB6 source (verified: compiles to this slot)
Public Sub Main()
  Dim c As Variant, x As Variant
  For Each x In c
    Exit For
  Next
End Sub
Encoding, evidence and notes
Encoding

Encoding: FD CF (lead byte FD selects table 3), then 4 operand byte(s); total instruction length 6 byte(s).
vbdec template: %a %L
Operands:

  1. %a: local_var_ref, 2 byte(s). signed 16-bit offset from the procedure frame pointer (EBP). Negative = local/temporary (vbdec var_XX, XX = -offset), positive = argument (arg_XX).
  2. %L: branch_target_no_loc, 2 byte(s). 16-bit branch target (proc-relative), not added to vbdec's label list.

Observed: FDCF 4CFF1B00 ExitForVar var_B4 loc_401467

Examples
FDCF 4CFF1B00  ExitForVar var_B4 loc_401467

From the Phase 4 probe (VB6 SP6, P-code).

Evidence and notes

Emitted by VB6 SP6 (P-code): yes. Minimal probe: probes\op\3_CF_ExitForVar.

Handler: 0x6610A348, unique to this slot (real opcode #572).

Check of vb6_source_eq example: verified: compiles and emits this slot.

Example from the description
Public Sub Main()
  Dim c As Variant, x As Variant
  For Each x In c
    Exit For
  Next
End Sub

Description: draft, by claude-opus-5-5. Handler 0x6610A348, dispatch slot 0x66107C50, modOpcodes line 610.

Loop_For

FOR counter init

ForCy

(4,0x67)emittedhandler #625Currencyinferred_corpus
Initialise a For loop with a Currency counter.

Pops the limit and the start value, stores the loop state in the frame block at %a, assigns the counter and evaluates the entry test. If the loop must not run at all it jumps to %L.

Stack: [..., start, limit] -> [...]

When the compiler emits it

Emitted at the head of For i = a To b where i is Currency.

VB6 source (verified: compiles to this slot)
Dim gi As Currency

Public Sub Main()
  Dim n As Long
  For gi = 1 To 5
  Next
End Sub
Encoding, evidence and notes
Encoding

Encoding: FE 67 (lead byte FE selects table 4), then 4 operand byte(s); total instruction length 6 byte(s).
vbdec template: %a %L
Operands:

  1. %a: local_var_ref, 2 byte(s). signed 16-bit offset from the procedure frame pointer (EBP). Negative = local/temporary (vbdec var_XX, XX = -offset), positive = argument (arg_XX).
  2. %L: branch_target_no_loc, 2 byte(s). 16-bit branch target (proc-relative), not added to vbdec's label list.

Observed: FE67 68FF1B00 ForCy var_98 loc_401467

Examples
FE67 68FF1B00  ForCy var_98 loc_401467

From the Phase 4 probe (VB6 SP6, P-code).

Evidence and notes

Emitted by VB6 SP6 (P-code): yes. Minimal probe: probes\op\4_67_ForCy.

Handler: 0x66109F86, unique to this slot (real opcode #625).

Check of vb6_source_eq example: verified: compiles and emits this slot.

Example from the description
Dim gi As Currency

Public Sub Main()
  Dim n As Long
  For gi = 1 To 5
  Next
End Sub

Description: draft, by claude-opus-5-5. Handler 0x66109F86, dispatch slot 0x66107EB0, modOpcodes line 573.

ForI2

(4,0x63)emittedhandler #621Integerinferred_corpus3 corpus hits
Initialise a For loop with a Integer counter.

Pops the limit and the start value, initialises the counter and the loop-state block at %a, and jumps to %L (past the loop) if the body must not run.

Stack: [..., start, limit] -> [...]

When the compiler emits it

Emitted at the head of For i = a To b where i is Integer. A loop with Step uses the matching ForStep form. The paired Next opcode closes the loop.

VB6 source (verified: compiles to this slot)
Dim gi As Integer

Public Sub Main()
  Dim n As Long
  For gi = 1 To 5
  Next
End Sub
Encoding, evidence and notes
Encoding

Encoding: FE 63 (lead byte FE selects table 4), then 4 operand byte(s); total instruction length 6 byte(s).
vbdec template: %a %L
Operands:

  1. %a: local_var_ref, 2 byte(s). signed 16-bit offset from the procedure frame pointer (EBP). Negative = local/temporary (vbdec var_XX, XX = -offset), positive = argument (arg_XX).
  2. %L: branch_target_no_loc, 2 byte(s). 16-bit branch target (proc-relative), not added to vbdec's label list.

Observed: FE63 74FF1900 ForI2 var_8C loc_401465

Examples
Form1.LoadPlugins @ 0x4644FC | 464623    FE63 9EFEAB02         ForI2 var_162 loc_4647A7
Form1.DoEventsFor @ 0x44256C | 442583    FE63 54FF2E00         ForI2 var_AC loc_44259A
modCrc.Proc_446CFC @ 0x446CFC | 446D25    FE63 6CFFAE00         ForI2 var_94 loc_446DAA

3 occurrence(s) in PDFStreamDumper.

Evidence and notes

Emitted by VB6 SP6 (P-code): yes. Minimal probe: probes\op\4_63_ForI2.

Handler: 0x66105764, unique to this slot (real opcode #621).

Check of vb6_source_eq example: verified: compiles and emits this slot.

Corpus: 3 occurrence(s) in PDFStreamDumper_p.exe.

Example from the description
Dim i As Integer, n As Long
For i = 1 To 5
  n = n + 1
Next

Description: draft, by claude-opus-5-5. Handler 0x66105764, dispatch slot 0x66107EA0, modOpcodes line 569.

ForI4

(4,0x64)emittedhandler #622Integerinferred_corpus16 corpus hits
Initialize a For loop (ForI4).

Sets up loop state for a For counter loop. Pops the limit (and step, in ForStep* variants) and the initial counter from the stack; stores them in the loop frame; evaluates the entry condition and either branches into the body or to the loop exit.

Operand %l is the exit branch target.

When the compiler emits it

Emitted at the head of every For ... Next loop; suffix matches the counter's type.

VB6 source (verified: compiles to this slot)
Dim gi As Long

Public Sub Main()
  Dim n As Long
  For gi = 1 To 5
  Next
End Sub
Encoding, evidence and notes
Encoding

Encoding: FE 64 (lead byte FE selects table 4), then 4 operand byte(s); total instruction length 6 byte(s).
vbdec template: %a %L
Operands:

  1. %a: local_var_ref, 2 byte(s). signed 16-bit offset from the procedure frame pointer (EBP). Negative = local/temporary (vbdec var_XX, XX = -offset), positive = argument (arg_XX).
  2. %L: branch_target_no_loc, 2 byte(s). 16-bit branch target (proc-relative), not added to vbdec's label list.

Observed: FE64 70FF1F00 ForI4 var_90 loc_40146B

Examples
Form1.mnuUpdateCurrent_Click @ 0x46EC0C | 46EFF8    FE64 04FE0604         ForI4 var_1FC loc_46F012
Form1.mnuExploitScan_Click @ 0x46CF80 | 46CFE1    FE64 38FF4501         ForI4 var_C8 loc_46D0C5
Form1.mnuExploitScan_Click @ 0x46CF80 | 46D12C    FE64 E4FE7802         ForI4 var_11C loc_46D1F8

16 occurrence(s) in PDFStreamDumper.

Evidence and notes

Emitted by VB6 SP6 (P-code): yes. Minimal probe: probes\op\4_64_ForI4.

Handler: 0x66105837, unique to this slot (real opcode #622).

Check of vb6_source_eq example: verified: compiles and emits this slot.

Corpus: 16 occurrence(s) in PDFStreamDumper_p.exe.

Example from the description
Dim i As Long
For i = 0 To 9
    ' body
Next i

Description: draft, by claude-opus-4.7. Handler 0x66105837, dispatch slot 0x66107EA4, modOpcodes line 570.

ForR4

(4,0x65)emittedhandler #623Floating pointinferred_corpus
Initialise a For loop with a Single counter.

Pops the limit and the start value, stores the loop state in the frame block at %a, assigns the counter and evaluates the entry test. If the loop must not run at all it jumps to %L.

Stack: [..., start, limit] -> [...]

When the compiler emits it

Emitted at the head of For i = a To b where i is Single.

VB6 source (verified: compiles to this slot)
Dim gi As Single

Public Sub Main()
  Dim n As Long
  For gi = 1 To 5
  Next
End Sub
Encoding, evidence and notes
Encoding

Encoding: FE 65 (lead byte FE selects table 4), then 4 operand byte(s); total instruction length 6 byte(s).
vbdec template: %a %L
Operands:

  1. %a: local_var_ref, 2 byte(s). signed 16-bit offset from the procedure frame pointer (EBP). Negative = local/temporary (vbdec var_XX, XX = -offset), positive = argument (arg_XX).
  2. %L: branch_target_no_loc, 2 byte(s). 16-bit branch target (proc-relative), not added to vbdec's label list.

Observed: FE65 70FF1B00 ForR4 var_90 loc_401467

Examples
FE65 70FF1B00  ForR4 var_90 loc_401467

From the Phase 4 probe (VB6 SP6, P-code).

Evidence and notes

Emitted by VB6 SP6 (P-code): yes. Minimal probe: probes\op\4_65_ForR4.

Handler: 0x66109ED8, unique to this slot (real opcode #623).

Check of vb6_source_eq example: verified: compiles and emits this slot.

Example from the description
Dim gi As Single

Public Sub Main()
  Dim n As Long
  For gi = 1 To 5
  Next
End Sub

Description: draft, by claude-opus-5-5. Handler 0x66109ED8, dispatch slot 0x66107EA8, modOpcodes line 571.

ForR8

(4,0x66)emittedhandler #624Floating pointinferred_corpus
Initialise a For loop with a Double counter.

Pops the limit and the start value, stores the loop state in the frame block at %a, assigns the counter and evaluates the entry test. If the loop must not run at all it jumps to %L.

Stack: [..., start, limit] -> [...]

When the compiler emits it

Emitted at the head of For i = a To b where i is Double.

VB6 source (verified: compiles to this slot)
Dim gi As Double

Public Sub Main()
  Dim n As Long
  For gi = 1 To 5
  Next
End Sub
Encoding, evidence and notes
Encoding

Encoding: FE 66 (lead byte FE selects table 4), then 4 operand byte(s); total instruction length 6 byte(s).
vbdec template: %a %L
Operands:

  1. %a: local_var_ref, 2 byte(s). signed 16-bit offset from the procedure frame pointer (EBP). Negative = local/temporary (vbdec var_XX, XX = -offset), positive = argument (arg_XX).
  2. %L: branch_target_no_loc, 2 byte(s). 16-bit branch target (proc-relative), not added to vbdec's label list.

Observed: FE66 68FF1B00 ForR8 var_98 loc_401467

Examples
FE66 68FF1B00  ForR8 var_98 loc_401467

From the Phase 4 probe (VB6 SP6, P-code).

Evidence and notes

Emitted by VB6 SP6 (P-code): yes. Minimal probe: probes\op\4_66_ForR8.

Handler: 0x66109F46, unique to this slot (real opcode #624).

Check of vb6_source_eq example: verified: compiles and emits this slot.

Example from the description
Dim gi As Double

Public Sub Main()
  Dim n As Long
  For gi = 1 To 5
  Next
End Sub

Description: draft, by claude-opus-5-5. Handler 0x66109F46, dispatch slot 0x66107EAC, modOpcodes line 572.

ForStepCy

(4,0x6F)emittedhandler #632Currencyinferred_corpus
Initialise a For loop with a Currency counter and explicit Step.

Pops the limit, the step and the start value, stores the loop state in the frame block at %a, assigns the counter and evaluates the entry test. If the loop must not run at all it jumps to %L.

Stack: [..., start, limit, step] -> [...]

When the compiler emits it

Emitted at the head of For i = a To b Step s where i is Currency.

VB6 source (verified: compiles to this slot)
Public Sub Main()
  Dim i As Currency, n As Long
  For i = 9 To 1 Step -1
  Next
End Sub
Encoding, evidence and notes
Encoding

Encoding: FE 6F (lead byte FE selects table 4), then 4 operand byte(s); total instruction length 6 byte(s).
vbdec template: %a %L
Operands:

  1. %a: local_var_ref, 2 byte(s). signed 16-bit offset from the procedure frame pointer (EBP). Negative = local/temporary (vbdec var_XX, XX = -offset), positive = argument (arg_XX).
  2. %L: branch_target_no_loc, 2 byte(s). 16-bit branch target (proc-relative), not added to vbdec's label list.

Observed: FE6F 60FF1A00 ForStepCy var_A0 loc_401466

Examples
FE6F 60FF1A00  ForStepCy var_A0 loc_401466

From the Phase 4 probe (VB6 SP6, P-code).

Evidence and notes

Emitted by VB6 SP6 (P-code): yes. Minimal probe: probes\op\4_6F_ForStepCy.

Handler: 0x66109F8E, unique to this slot (real opcode #632).

Check of vb6_source_eq example: verified: compiles and emits this slot.

Example from the description
Public Sub Main()
  Dim i As Currency, n As Long
  For i = 9 To 1 Step -1
  Next
End Sub

Description: draft, by claude-opus-5-5. Handler 0x66109F8E, dispatch slot 0x66107ED0, modOpcodes line 580.

ForStepI2

(4,0x6B)emittedhandler #628Integerinferred_corpus1 corpus hits
Initialise a For loop with a Integer counter and an explicit Step.

Pops the limit, the step and the start value, initialises the counter and the loop-state block at %a, and jumps to %L (past the loop) if the body must not run.

Stack: [..., start, limit, step] -> [...]

When the compiler emits it

Emitted at the head of For i = a To b Step s where i is Integer. Loops without Step use the non-Step form. The paired Next opcode closes the loop.

VB6 source (verified: compiles to this slot)
Public Sub Main()
  Dim i As Integer, n As Long
  For i = 9 To 1 Step -1
  Next
End Sub
Encoding, evidence and notes
Encoding

Encoding: FE 6B (lead byte FE selects table 4), then 4 operand byte(s); total instruction length 6 byte(s).
vbdec template: %a %L
Operands:

  1. %a: local_var_ref, 2 byte(s). signed 16-bit offset from the procedure frame pointer (EBP). Negative = local/temporary (vbdec var_XX, XX = -offset), positive = argument (arg_XX).
  2. %L: branch_target_no_loc, 2 byte(s). 16-bit branch target (proc-relative), not added to vbdec's label list.

Observed: FE6B 70FF1700 ForStepI2 var_90 loc_401463

Examples
modCrc.Proc_446CFC @ 0x446CFC | 446D3B    FE6B 68FF9900         ForStepI2 var_98 loc_446D95

1 occurrence(s) in PDFStreamDumper.

Evidence and notes

Emitted by VB6 SP6 (P-code): yes. Minimal probe: probes\op\4_6B_ForStepI2.

Handler: 0x661057C2, unique to this slot (real opcode #628).

Check of vb6_source_eq example: verified: compiles and emits this slot.

Corpus: 1 occurrence(s) in PDFStreamDumper_p.exe.

Example from the description
Dim i As Integer, n As Long
For i = 10 To 1 Step -2
  n = n + 1
Next

Description: draft, by claude-opus-5-5. Handler 0x661057C2, dispatch slot 0x66107EC0, modOpcodes line 576.

ForStepI4

(4,0x6C)emittedhandler #629Integerinferred_corpus7 corpus hits
Initialise a For loop with a Long counter and an explicit Step.

Pops the limit, the step and the start value, initialises the counter and the loop-state block at %a, and jumps to %L (past the loop) if the body must not run.

Stack: [..., start, limit, step] -> [...]

When the compiler emits it

Emitted at the head of For i = a To b Step s where i is Long. Loops without Step use the non-Step form. The paired Next opcode closes the loop.

VB6 source (verified: compiles to this slot)
Public Sub Main()
  Dim i As Long, n As Long
  For i = 9 To 1 Step -1
  Next
End Sub
Encoding, evidence and notes
Encoding

Encoding: FE 6C (lead byte FE selects table 4), then 4 operand byte(s); total instruction length 6 byte(s).
vbdec template: %a %L
Operands:

  1. %a: local_var_ref, 2 byte(s). signed 16-bit offset from the procedure frame pointer (EBP). Negative = local/temporary (vbdec var_XX, XX = -offset), positive = argument (arg_XX).
  2. %L: branch_target_no_loc, 2 byte(s). 16-bit branch target (proc-relative), not added to vbdec's label list.

Observed: FE6C 6CFF2000 ForStepI4 var_94 loc_40146C

Examples
Form1.lv_KeyDown(ByRef KeyCode As Integer, ByVal Shift As Integer) @ 0x456764 | 45685A    FE6C 3CFF4A01         ForStepI4 var_C4 loc_4568AE
Form1.mnuHideUnselected_Click @ 0x44AA74 | 44AABA    FE6C 54FFD900         ForStepI4 var_AC loc_44AB4D
Form1.mnuHideDups_Click @ 0x4629E4 | 462A7D    FE6C 44FF1702         ForStepI4 var_BC loc_462BFB

7 occurrence(s) in PDFStreamDumper.

Evidence and notes

Emitted by VB6 SP6 (P-code): yes. Minimal probe: probes\op\4_6C_ForStepI4.

Handler: 0x6610583B, unique to this slot (real opcode #629).

Check of vb6_source_eq example: verified: compiles and emits this slot.

Corpus: 7 occurrence(s) in PDFStreamDumper_p.exe.

Example from the description
Dim i As Long, n As Long
For i = 10 To 1 Step -2
  n = n + 1
Next

Description: draft, by claude-opus-5-5. Handler 0x6610583B, dispatch slot 0x66107EC4, modOpcodes line 577.

ForStepR4

(4,0x6D)emittedhandler #630Floating pointinferred_corpus
Initialise a For loop with a Single counter and explicit Step.

Pops the limit, the step and the start value, stores the loop state in the frame block at %a, assigns the counter and evaluates the entry test. If the loop must not run at all it jumps to %L.

Stack: [..., start, limit, step] -> [...]

When the compiler emits it

Emitted at the head of For i = a To b Step s where i is Single.

VB6 source (verified: compiles to this slot)
Public Sub Main()
  Dim i As Single, n As Long
  For i = 9 To 1 Step -1
  Next
End Sub
Encoding, evidence and notes
Encoding

Encoding: FE 6D (lead byte FE selects table 4), then 4 operand byte(s); total instruction length 6 byte(s).
vbdec template: %a %L
Operands:

  1. %a: local_var_ref, 2 byte(s). signed 16-bit offset from the procedure frame pointer (EBP). Negative = local/temporary (vbdec var_XX, XX = -offset), positive = argument (arg_XX).
  2. %L: branch_target_no_loc, 2 byte(s). 16-bit branch target (proc-relative), not added to vbdec's label list.

Observed: FE6D 6CFF1A00 ForStepR4 var_94 loc_401466

Examples
FE6D 6CFF1A00  ForStepR4 var_94 loc_401466

From the Phase 4 probe (VB6 SP6, P-code).

Evidence and notes

Emitted by VB6 SP6 (P-code): yes. Minimal probe: probes\op\4_6D_ForStepR4.

Handler: 0x66109EDC, unique to this slot (real opcode #630).

Check of vb6_source_eq example: verified: compiles and emits this slot.

Example from the description
Public Sub Main()
  Dim i As Single, n As Long
  For i = 9 To 1 Step -1
  Next
End Sub

Description: draft, by claude-opus-5-5. Handler 0x66109EDC, dispatch slot 0x66107EC8, modOpcodes line 578.

ForStepR8

(4,0x6E)emittedhandler #631Floating pointinferred_corpus
Initialise a For loop with a Double counter and explicit Step.

Pops the limit, the step and the start value, stores the loop state in the frame block at %a, assigns the counter and evaluates the entry test. If the loop must not run at all it jumps to %L.

Stack: [..., start, limit, step] -> [...]

When the compiler emits it

Emitted at the head of For i = a To b Step s where i is Double.

VB6 source (verified: compiles to this slot)
Public Sub Main()
  Dim i As Double, n As Long
  For i = 9 To 1 Step -1
  Next
End Sub
Encoding, evidence and notes
Encoding

Encoding: FE 6E (lead byte FE selects table 4), then 4 operand byte(s); total instruction length 6 byte(s).
vbdec template: %a %L
Operands:

  1. %a: local_var_ref, 2 byte(s). signed 16-bit offset from the procedure frame pointer (EBP). Negative = local/temporary (vbdec var_XX, XX = -offset), positive = argument (arg_XX).
  2. %L: branch_target_no_loc, 2 byte(s). 16-bit branch target (proc-relative), not added to vbdec's label list.

Observed: FE6E 60FF1A00 ForStepR8 var_A0 loc_401466

Examples
FE6E 60FF1A00  ForStepR8 var_A0 loc_401466

From the Phase 4 probe (VB6 SP6, P-code).

Evidence and notes

Emitted by VB6 SP6 (P-code): yes. Minimal probe: probes\op\4_6E_ForStepR8.

Handler: 0x66109F4A, unique to this slot (real opcode #631).

Check of vb6_source_eq example: verified: compiles and emits this slot.

Example from the description
Public Sub Main()
  Dim i As Double, n As Long
  For i = 9 To 1 Step -1
  Next
End Sub

Description: draft, by claude-opus-5-5. Handler 0x66109F4A, dispatch slot 0x66107ECC, modOpcodes line 579.

ForStepUI1

(4,0x6A)emittedhandler #627Integerinferred_corpus
Initialise a For loop with a Byte counter and explicit Step.

Pops the limit, the step and the start value, stores the loop state in the frame block at %a, assigns the counter and evaluates the entry test. If the loop must not run at all it jumps to %L.

Stack: [..., start, limit, step] -> [...]

When the compiler emits it

Emitted at the head of For i = a To b Step s where i is Byte.

VB6 source (verified: compiles to this slot)
Public Sub Main()
  Dim i As Byte, n As Long
  For i = 9 To 1 Step -1
  Next
End Sub
Encoding, evidence and notes
Encoding

Encoding: FE 6A (lead byte FE selects table 4), then 4 operand byte(s); total instruction length 6 byte(s).
vbdec template: %a %L
Operands:

  1. %a: local_var_ref, 2 byte(s). signed 16-bit offset from the procedure frame pointer (EBP). Negative = local/temporary (vbdec var_XX, XX = -offset), positive = argument (arg_XX).
  2. %L: branch_target_no_loc, 2 byte(s). 16-bit branch target (proc-relative), not added to vbdec's label list.

Observed: FE6A 70FF1E00 ForStepUI1 var_90 loc_40146A

Examples
FE6A 70FF1E00  ForStepUI1 var_90 loc_40146A

From the Phase 4 probe (VB6 SP6, P-code).

Evidence and notes

Emitted by VB6 SP6 (P-code): yes. Minimal probe: probes\op\4_6A_ForStepUI1.

Handler: 0x66109E41, unique to this slot (real opcode #627).

Check of vb6_source_eq example: verified: compiles and emits this slot.

Example from the description
Public Sub Main()
  Dim i As Byte, n As Long
  For i = 9 To 1 Step -1
  Next
End Sub

Description: draft, by claude-opus-5-5. Handler 0x66109E41, dispatch slot 0x66107EBC, modOpcodes line 575.

ForStepVar

(4,0x70)emittedhandler #633Variantinferred_corpus7 corpus hits
Initialise a For loop with a Variant counter and an explicit Step.

Pops the limit, the step and the start value, initialises the counter and the loop-state block at %a, and jumps to %L (past the loop) if the body must not run.

Stack: [..., start, limit, step] -> [...]

When the compiler emits it

Emitted at the head of For i = a To b Step s where i is Variant. Loops without Step use the non-Step form. The paired Next opcode closes the loop.

VB6 source (verified: compiles to this slot)
Public Sub Main()
  Dim i As Variant, n As Long
  For i = 9 To 1 Step -1
  Next
End Sub
Encoding, evidence and notes
Encoding

Encoding: FE 70 (lead byte FE selects table 4), then 4 operand byte(s); total instruction length 6 byte(s).
vbdec template: %a %L
Operands:

  1. %a: local_var_ref, 2 byte(s). signed 16-bit offset from the procedure frame pointer (EBP). Negative = local/temporary (vbdec var_XX, XX = -offset), positive = argument (arg_XX).
  2. %L: branch_target_no_loc, 2 byte(s). 16-bit branch target (proc-relative), not added to vbdec's label list.

Observed: FE70 18FF2100 ForStepVar var_E8 loc_40146D

Examples
Form2.mnuHex2Unicode_Click @ 0x45D160 | 45D289    FE70 B0FEB001         ForStepVar var_150 loc_45D310
modEscapes.Proc_44C174 @ 0x44C174 | 44C194    FE70 ECFE6E00         ForStepVar var_114 loc_44C1E2
modEscapes.Proc_46074C @ 0x46074C | 4608DC    FE70 CCFE0502         ForStepVar var_134 loc_460951

7 occurrence(s) in PDFStreamDumper.

Evidence and notes

Emitted by VB6 SP6 (P-code): yes. Minimal probe: probes\op\4_70_ForStepVar.

Handler: 0x661058AF, unique to this slot (real opcode #633).

Check of vb6_source_eq example: verified: compiles and emits this slot.

Corpus: 7 occurrence(s) in PDFStreamDumper_p.exe.

Example from the description
Dim i As Variant, n As Long
For i = 10 To 1 Step -2
  n = n + 1
Next

Description: draft, by claude-opus-5-5. Handler 0x661058AF, dispatch slot 0x66107ED4, modOpcodes line 581.

ForUI1

(4,0x62)emittedhandler #620Integerinferred_corpus
Initialise a For loop with a Byte counter.

Pops the limit and the start value, stores the loop state in the frame block at %a, assigns the counter and evaluates the entry test. If the loop must not run at all it jumps to %L.

Stack: [..., start, limit] -> [...]

When the compiler emits it

Emitted at the head of For i = a To b where i is Byte.

VB6 source (verified: compiles to this slot)
Dim gi As Byte

Public Sub Main()
  Dim n As Long
  For gi = 1 To 5
  Next
End Sub
Encoding, evidence and notes
Encoding

Encoding: FE 62 (lead byte FE selects table 4), then 4 operand byte(s); total instruction length 6 byte(s).
vbdec template: %a %L
Operands:

  1. %a: local_var_ref, 2 byte(s). signed 16-bit offset from the procedure frame pointer (EBP). Negative = local/temporary (vbdec var_XX, XX = -offset), positive = argument (arg_XX).
  2. %L: branch_target_no_loc, 2 byte(s). 16-bit branch target (proc-relative), not added to vbdec's label list.

Observed: FE62 74FF1E00 ForUI1 var_8C loc_40146A

Examples
FE62 74FF1E00  ForUI1 var_8C loc_40146A

From the Phase 4 probe (VB6 SP6, P-code).

Evidence and notes

Emitted by VB6 SP6 (P-code): yes. Minimal probe: probes\op\4_62_ForUI1.

Handler: 0x66109E3D, unique to this slot (real opcode #620).

Check of vb6_source_eq example: verified: compiles and emits this slot.

Example from the description
Dim gi As Byte

Public Sub Main()
  Dim n As Long
  For gi = 1 To 5
  Next
End Sub

Description: draft, by claude-opus-5-5. Handler 0x66109E3D, dispatch slot 0x66107E9C, modOpcodes line 568.

ForVar

(4,0x68)emittedhandler #626Variantinferred_corpus40 corpus hits
Initialise a For loop with a Variant counter.

Pops the limit and the start value, initialises the counter and the loop-state block at %a, and jumps to %L (past the loop) if the body must not run.

Stack: [..., start, limit] -> [...]

When the compiler emits it

Emitted at the head of For i = a To b where i is Variant. A loop with Step uses the matching ForStep form. The paired Next opcode closes the loop.

VB6 source (verified: compiles to this slot)
Dim gi As Variant

Public Sub Main()
  Dim n As Long
  For gi = 1 To 5
  Next
End Sub
Encoding, evidence and notes
Encoding

Encoding: FE 68 (lead byte FE selects table 4), then 4 operand byte(s); total instruction length 6 byte(s).
vbdec template: %a %L
Operands:

  1. %a: local_var_ref, 2 byte(s). signed 16-bit offset from the procedure frame pointer (EBP). Negative = local/temporary (vbdec var_XX, XX = -offset), positive = argument (arg_XX).
  2. %L: branch_target_no_loc, 2 byte(s). 16-bit branch target (proc-relative), not added to vbdec's label list.

Observed: FE68 28FF2000 ForVar var_D8 loc_401470

Examples
fso.Proc_45ECB4 @ 0x45ECB4 | 45EE0E    FE68 C8FE5902         ForVar var_138 loc_45EF0D
fso.Proc_467FC4 @ 0x467FC4 | 468033    FE68 E0FE6502         ForVar var_120 loc_468229
fso.Proc_461D10 @ 0x461D10 | 461D91    FE68 E8FEAA02         ForVar var_118 loc_461FBA

40 occurrence(s) in PDFStreamDumper.

Evidence and notes

Emitted by VB6 SP6 (P-code): yes. Minimal probe: probes\op\4_68_ForVar.

Handler: 0x6610589F, unique to this slot (real opcode #626).

Check of vb6_source_eq example: verified: compiles and emits this slot.

Corpus: 40 occurrence(s) in PDFStreamDumper_p.exe.

Example from the description
Dim i As Variant, n As Long
For i = 1 To 5
  n = n + 1
Next

Description: draft, by claude-opus-5-5. Handler 0x6610589F, dispatch slot 0x66107EB4, modOpcodes line 574.

Loop_ForEach

For Each init

ForEachAryVar

(4,0x76)emittedhandler #638Arrayinferred_corpus12 corpus hits
Start a For Each loop over an array, with a Variant control variable.

Initialises iteration (an array cursor, or the collection's _NewEnum IEnumVARIANT) in the loop block at %a, fetches the first element into the control variable, or jumps to %L (past the loop) if there is none.

When the compiler emits it

Emitted at the head of For Each x In y over an array, with a Variant control variable. The control variable's type and the container kind select the slot (arrays: ForEachAryVar; collections: ForEachCollVar for Variant, ForEachCollAd for Object, ForEachCollObj for a specific class).

VB6 source (verified: compiles to this slot)
Public Sub Main()
  Dim a(5) As Object, x As Variant
  For Each x In a
  Next
End Sub
Encoding, evidence and notes
Encoding

Encoding: FE 76 (lead byte FE selects table 4), then 6 operand byte(s); total instruction length 8 byte(s).
vbdec template: %a %2 %L
Operands:

  1. %a: local_var_ref, 2 byte(s). signed 16-bit offset from the procedure frame pointer (EBP). Negative = local/temporary (vbdec var_XX, XX = -offset), positive = argument (arg_XX).
  2. %2: immediate_word, 2 byte(s). 16-bit immediate.
  3. %L: branch_target_no_loc, 2 byte(s). 16-bit branch target (proc-relative), not added to vbdec's label list.

Observed: FE76 3CFF09001900 ForEachAryVar var_C4 0x9 loc_401475

Examples
Form1.Form_Load @ 0x479DC0 | 47A3C1    FE76 ACFD0C002E07     ForEachAryVar var_254 0xC loc_47A4EE
fso.Proc_44E8D4 @ 0x44E8D4 | 44E98E    FE76 00FF0800F600     ForEachAryVar var_100 0x8 loc_44E9CA
Form2.Form_Unload (Cancel As Integer) @ 0x460A60 | 460CE1    FE76 B0FE0C00AD02     ForEachAryVar var_150 0xC loc_460D0D

12 occurrence(s) in PDFStreamDumper.

Evidence and notes

Emitted by VB6 SP6 (P-code): yes. Minimal probe: probes\op\4_76_ForEachAryVar.

Handler: 0x6610A2E2, unique to this slot (real opcode #638).

Check of vb6_source_eq example: verified: compiles and emits this slot.

Corpus: 12 occurrence(s) in PDFStreamDumper_p.exe.

Example from the description
Dim n As Long
Dim a(3) As Long, x As Variant
For Each x In a
  n = n + 1
Next

Description: draft, by claude-opus-5-5. Handler 0x6610A2E2, dispatch slot 0x66107EEC, modOpcodes line 556.

ForEachCollAd

(4,0x74)emittedhandler #636Object / COMinferred_corpus
Start a For Each over a collection with an Object-typed control variable.

Pops the collection, obtains its enumerator (_NewEnum) and stores it in the loop slot %a. It fetches the first item into the control variable as an object reference; if there is none, it jumps to %L (loop exit).

When the compiler emits it

Emitted for For Each x In coll where x As Object (or a class).

VB6 source (verified: compiles to this slot)
Public Sub Main()
  Dim c As New Collection, x As Object
  For Each x In c
  Next
End Sub
Encoding, evidence and notes
Encoding

Encoding: FE 74 (lead byte FE selects table 4), then 4 operand byte(s); total instruction length 6 byte(s).
vbdec template: %a %L
Operands:

  1. %a: local_var_ref, 2 byte(s). signed 16-bit offset from the procedure frame pointer (EBP). Negative = local/temporary (vbdec var_XX, XX = -offset), positive = argument (arg_XX).
  2. %L: branch_target_no_loc, 2 byte(s). 16-bit branch target (proc-relative), not added to vbdec's label list.

Observed: FE74 70FF1800 ForEachCollAd var_90 loc_401498

Examples
FE74 70FF1800  ForEachCollAd var_90 loc_401498

From the Phase 4 probe (VB6 SP6, P-code).

Evidence and notes

Emitted by VB6 SP6 (P-code): yes. Minimal probe: probes\op\4_74_ForEachCollAd.

Handler: 0x661059AD, unique to this slot (real opcode #636).

Check of vb6_source_eq example: verified: compiles and emits this slot.

Example from the description
Public Sub Main()
  Dim c As New Collection, x As Object
  For Each x In c
  Next
End Sub

Description: draft, by claude-opus-5-5. Handler 0x661059AD, dispatch slot 0x66107EE4, modOpcodes line 562.

ForEachCollObj

(4,0x88)emittedhandler #642Object / COMinferred_corpus74 corpus hits
Start a For Each loop over a collection, with the control variable typed as a specific class (or Object).

Initialises iteration (an array cursor, or the collection's _NewEnum IEnumVARIANT) in the loop block at %a, fetches the first element into the control variable, or jumps to %L (past the loop) if there is none.

When the compiler emits it

Emitted at the head of For Each x In y over a collection, with the control variable typed as a specific class (or Object). The control variable's type and the container kind select the slot (arrays: ForEachAryVar; collections: ForEachCollVar for Variant, ForEachCollAd for Object, ForEachCollObj for a specific class).

VB6 source (verified: compiles to this slot)
Public Sub Main()
  Dim c As New Collection, x As CThing
  For Each x In c
  Next
End Sub
' ---- CThing.cls
Encoding, evidence and notes
Encoding

Encoding: FE 88 (lead byte FE selects table 4), then 6 operand byte(s); total instruction length 8 byte(s).
vbdec template: %a %2 %L
Operands:

  1. %a: local_var_ref, 2 byte(s). signed 16-bit offset from the procedure frame pointer (EBP). Negative = local/temporary (vbdec var_XX, XX = -offset), positive = argument (arg_XX).
  2. %2: immediate_word, 2 byte(s). 16-bit immediate.
  3. %L: branch_target_no_loc, 2 byte(s). 16-bit branch target (proc-relative), not added to vbdec's label list.

Observed: FE88 70FF01001C00 ForEachCollObj var_90 0x1 loc_4016D8

Examples
Form1.mnuCopySearch_Click @ 0x449FA4 | 449FC5    FE88 58FF37005500     ForEachCollObj var_A8 0x37 loc_449FF9
Form1.mnuErrorSaveRawAll_Click @ 0x45D950 | 45DA0F    FE88 C8FE3700CA01     ForEachCollObj var_138 0x37 loc_45DB1A
Form1.mnuExtractURI_Click @ 0x45774C | 457776    FE88 3CFF37004C01     ForEachCollObj var_C4 0x37 loc_457898

74 occurrence(s) in PDFStreamDumper.

Evidence and notes

Emitted by VB6 SP6 (P-code): yes. Minimal probe: probes\op\4_88_ForEachCollObj.

Handler: 0x661059BF, unique to this slot (real opcode #642).

Check of vb6_source_eq example: verified: compiles and emits this slot.

Corpus: 74 occurrence(s) in PDFStreamDumper_p.exe.

Example from the description
Dim n As Long
Dim c As New Collection, x As Collection
For Each x In c
  n = n + 1
Next

Description: draft, by claude-opus-5-5. Handler 0x661059BF, dispatch slot 0x66107F34, modOpcodes line 557.

ForEachCollVar

(4,0x72)emittedhandler #634Object / COMinferred_corpus14 corpus hits
Start a For Each loop over a collection or object, with a Variant control variable.

Initialises iteration (an array cursor, or the collection's _NewEnum IEnumVARIANT) in the loop block at %a, fetches the first element into the control variable, or jumps to %L (past the loop) if there is none.

When the compiler emits it

Emitted at the head of For Each x In y over a collection or object, with a Variant control variable. The control variable's type and the container kind select the slot (arrays: ForEachAryVar; collections: ForEachCollVar for Variant, ForEachCollAd for Object, ForEachCollObj for a specific class).

VB6 source (verified: compiles to this slot)
Public Sub Main()
  Dim c As New Collection, x As Variant
  For Each x In c
  Next
out:
End Sub
Encoding, evidence and notes
Encoding

Encoding: FE 72 (lead byte FE selects table 4), then 4 operand byte(s); total instruction length 6 byte(s).
vbdec template: %a %L
Operands:

  1. %a: local_var_ref, 2 byte(s). signed 16-bit offset from the procedure frame pointer (EBP). Negative = local/temporary (vbdec var_XX, XX = -offset), positive = argument (arg_XX).
  2. %L: branch_target_no_loc, 2 byte(s). 16-bit branch target (proc-relative), not added to vbdec's label list.

Observed: FE72 64FF1800 ForEachCollVar var_9C loc_401498

Examples
Form1.Shutdown @ 0x442740 | 442762    FE72 50FF4C00         ForEachCollVar var_B0 loc_44278C
Form2.mnuRenameFunc_Click @ 0x471130 | 471271    FE72 60FE9801         ForEachCollVar var_1A0 loc_4712C8
CFunc.ApplyOverrides @ 0x44FD88 | 44FDAE    FE72 60FF0501         ForEachCollVar var_A0 loc_44FE8D

14 occurrence(s) in PDFStreamDumper.

Evidence and notes

Emitted by VB6 SP6 (P-code): yes. Minimal probe: probes\op\4_72_ForEachCollVar.

Handler: 0x6610A2A4, unique to this slot (real opcode #634).

Check of vb6_source_eq example: verified: compiles and emits this slot.

Corpus: 14 occurrence(s) in PDFStreamDumper_p.exe.

Example from the description
Dim n As Long
Dim c As New Collection, x As Variant
For Each x In c
  n = n + 1
Next

Description: draft, by claude-opus-5-5. Handler 0x6610A2A4, dispatch slot 0x66107EDC, modOpcodes line 561.

ForEachVar

(4,0x89)emittedhandler #643Object / COMinferred_corpus7 corpus hits
Initialize a For Each iteration (ForEachVar).

Sets up enumeration over a Collection, Variant, or array. Acquires the IEnumVARIANT interface (for Collections / objects implementing _NewEnum) or array iterator state, fetches the first element into the iteration variable, and branches to the loop body or to the exit if the source is empty.

When the compiler emits it

Emitted at every For Each loop head; variant chosen by the iteration variable's type.

VB6 source (verified: compiles to this slot)
Public Sub Main()
  Dim c As Variant, x As Variant
  For Each x In c
  Next
End Sub
Encoding, evidence and notes
Encoding

Encoding: FE 89 (lead byte FE selects table 4), then 4 operand byte(s); total instruction length 6 byte(s).
vbdec template: %a %L
Operands:

  1. %a: local_var_ref, 2 byte(s). signed 16-bit offset from the procedure frame pointer (EBP). Negative = local/temporary (vbdec var_XX, XX = -offset), positive = argument (arg_XX).
  2. %L: branch_target_no_loc, 2 byte(s). 16-bit branch target (proc-relative), not added to vbdec's label list.

Observed: FE89 4CFF1500 ForEachVar var_B4 loc_401461

Examples
Form2.mnuCopyFuncsNames_Click @ 0x456D48 | 456DA4    FE89 04FFB100         ForEachVar var_FC loc_456DF9
CFunc.ParseAsGlobal @ 0x468430 | 46848B    FE89 F4FEBF02         ForEachVar var_10C loc_4686EF
CFunc.ParseSelf @ 0x47181C | 47192D    FE89 80FE7B01         ForEachVar var_180 loc_471997

7 occurrence(s) in PDFStreamDumper.

Evidence and notes

Emitted by VB6 SP6 (P-code): yes. Minimal probe: probes\op\4_89_ForEachVar.

Handler: 0x6610A29D, unique to this slot (real opcode #643).

Check of vb6_source_eq example: verified: compiles and emits this slot.

Corpus: 7 occurrence(s) in PDFStreamDumper_p.exe.

Example from the description
For Each item In coll
    ' body
Next

Description: draft, by claude-opus-4.7. Handler 0x6610A29D, dispatch slot 0x66107F38, modOpcodes line 563.

ForEachVarFree

(4,0x8A)not emittedhandler #644Object / COMinferred_corpus
No description yet.
Encoding, evidence and notes
Encoding

Encoding: FE 8A (lead byte FE selects table 4), then 4 operand byte(s); total instruction length 6 byte(s).
vbdec template: %a %L
Operands:

  1. %a: local_var_ref, 2 byte(s). signed 16-bit offset from the procedure frame pointer (EBP). Negative = local/temporary (vbdec var_XX, XX = -offset), positive = argument (arg_XX).
  2. %L: branch_target_no_loc, 2 byte(s). 16-bit branch target (proc-relative), not added to vbdec's label list.
Evidence and notes

Emitted by VB6 SP6 (P-code): not observed in about 3,070 probe programs. The slot exists in the runtime's dispatch table, but no tested source construct makes the compiler emit it.

Handler: 0x6610A286, unique to this slot (real opcode #644).

Description: none. Handler 0x6610A286, dispatch slot 0x66107F3C, modOpcodes line 564.

Loop_Next

FOR counter advance/test

NextI2

(0,0x64)emittedprimary of 2handler #97Integerconfirmed_handler3 corpus hits
Next of a For loop with a Integer counter.

Adds the increment (1) to the counter, tests it against the limit stored in the loop block %a, and jumps back to %L while the loop continues. Overflow raises error 6.

When the compiler emits it

Emitted at Next for a Integer counter without Step. The compiler emits this table-0 slot; the table-4 slot of the same name is a never-emitted duplicate.

VB6 source (verified: compiles to this slot)
Dim gi As Integer

Public Sub Main()
  Dim n As Long
  For gi = 1 To 5
  Next
End Sub
Encoding, evidence and notes
Encoding

Encoding: 64, then 4 operand byte(s); total instruction length 5 byte(s).
vbdec template: %a %L
Operands:

  1. %a: local_var_ref, 2 byte(s). signed 16-bit offset from the procedure frame pointer (EBP). Negative = local/temporary (vbdec var_XX, XX = -offset), positive = argument (arg_XX).
  2. %L: branch_target_no_loc, 2 byte(s). 16-bit branch target (proc-relative), not added to vbdec's label list.

Observed: 64 74FF0F00 NextI2 var_8C loc_40145B

Examples
Form1.LoadPlugins @ 0x4644FC | 4647A2    64 9EFE2D01           NextI2 var_162 loc_464629
Form1.DoEventsFor @ 0x44256C | 442595    64 54FF1D00           NextI2 var_AC loc_442589
modCrc.Proc_446CFC @ 0x446CFC | 446DA5    64 6CFF2F00           NextI2 var_94 loc_446D2B

3 occurrence(s) in PDFStreamDumper.

Evidence and notes

Emitted by VB6 SP6 (P-code): yes. Minimal probe: probes\op\0_64_NextI2.

Handler: 0x66105793, shared by 2 dispatch slots (real opcode #97). This is the primary slot. Other slots: (4,79) NextI2.

Check of vb6_source_eq example: verified: compiles and emits this slot.

Corpus: 3 occurrence(s) in PDFStreamDumper_p.exe.

Example from the description
Dim i As Integer, n As Long
For i = 1 To 5
  n = n + 1
Next
Slots sharing this handler

(4,0x79) NextI2

Description: draft, by claude-opus-5-5. Handler 0x66105793, dispatch slot 0x66106EA4, modOpcodes line 598.

NextI2

(4,0x79)not emitteddup of (0,64)handler #97Integerinferred_corpus
Same handler as (0,0x64) NextI2: Next of a For loop with a Integer counter.
Encoding, evidence and notes
Encoding

Encoding: FE 79 (lead byte FE selects table 4), then 4 operand byte(s); total instruction length 6 byte(s).
vbdec template: %a %L
Operands:

  1. %a: local_var_ref, 2 byte(s). signed 16-bit offset from the procedure frame pointer (EBP). Negative = local/temporary (vbdec var_XX, XX = -offset), positive = argument (arg_XX).
  2. %L: branch_target_no_loc, 2 byte(s). 16-bit branch target (proc-relative), not added to vbdec's label list.
Evidence and notes

Emitted by VB6 SP6 (P-code): not observed in about 3,070 probe programs. The slot exists in the runtime's dispatch table, but no tested source construct makes the compiler emit it.

Handler: 0x66105793, shared by 2 dispatch slots (real opcode #97). This is a duplicate slot of (0,64) NextI2. Other slots: (0,64) NextI2.

Slots sharing this handler

(0,0x64) NextI2

Description: none. Handler 0x66105793, dispatch slot 0x66107EF8, modOpcodes line 584.

NextI4

(0,0x66)emittedprimary of 2handler #99Integerconfirmed_handler16 corpus hits
Next of a For loop with a Long counter.

Adds the increment (1) to the counter, tests it against the limit stored in the loop block %a, and jumps back to %L while the loop continues. Overflow raises error 6.

When the compiler emits it

Emitted at Next for a Long counter without Step. The compiler emits this table-0 slot; the table-4 slot of the same name is a never-emitted duplicate.

VB6 source (verified: compiles to this slot)
Dim gi As Long

Public Sub Main()
  Dim n As Long
  For gi = 1 To 5
  Next
End Sub
Encoding, evidence and notes
Encoding

Encoding: 66, then 4 operand byte(s); total instruction length 5 byte(s).
vbdec template: %a %L
Operands:

  1. %a: local_var_ref, 2 byte(s). signed 16-bit offset from the procedure frame pointer (EBP). Negative = local/temporary (vbdec var_XX, XX = -offset), positive = argument (arg_XX).
  2. %L: branch_target_no_loc, 2 byte(s). 16-bit branch target (proc-relative), not added to vbdec's label list.

Observed: 66 70FF1500 NextI4 var_90 loc_401461

Examples
Form1.mnuUpdateCurrent_Click @ 0x46EC0C | 46F00D    66 04FEF203           NextI4 var_1FC loc_46EFFE
Form1.mnuExploitScan_Click @ 0x46CF80 | 46D0C0    66 38FF6700           NextI4 var_C8 loc_46CFE7
Form1.mnuExploitScan_Click @ 0x46CF80 | 46D1F3    66 E4FEB201           NextI4 var_11C loc_46D132

16 occurrence(s) in PDFStreamDumper.

Evidence and notes

Emitted by VB6 SP6 (P-code): yes. Minimal probe: probes\op\0_66_NextI4.

Handler: 0x66105877, shared by 2 dispatch slots (real opcode #99). This is the primary slot. Other slots: (4,7A) NextI4.

Check of vb6_source_eq example: verified: compiles and emits this slot.

Corpus: 16 occurrence(s) in PDFStreamDumper_p.exe.

Example from the description
Dim i As Long, n As Long
For i = 1 To 5
  n = n + 1
Next
Slots sharing this handler

(4,0x7A) NextI4

Description: draft, by claude-opus-5-5. Handler 0x66105877, dispatch slot 0x66106EAC, modOpcodes line 600.

NextI4

(4,0x7A)not emitteddup of (0,66)handler #99Integerinferred_corpus
Same handler as (0,0x66) NextI4: Next of a For loop with a Long counter.
Encoding, evidence and notes
Encoding

Encoding: FE 7A (lead byte FE selects table 4), then 4 operand byte(s); total instruction length 6 byte(s).
vbdec template: %a %L
Operands:

  1. %a: local_var_ref, 2 byte(s). signed 16-bit offset from the procedure frame pointer (EBP). Negative = local/temporary (vbdec var_XX, XX = -offset), positive = argument (arg_XX).
  2. %L: branch_target_no_loc, 2 byte(s). 16-bit branch target (proc-relative), not added to vbdec's label list.
Evidence and notes

Emitted by VB6 SP6 (P-code): not observed in about 3,070 probe programs. The slot exists in the runtime's dispatch table, but no tested source construct makes the compiler emit it.

Handler: 0x66105877, shared by 2 dispatch slots (real opcode #99). This is a duplicate slot of (0,66) NextI4. Other slots: (0,66) NextI4.

Slots sharing this handler

(0,0x66) NextI4

Description: none. Handler 0x66105877, dispatch slot 0x66107EFC, modOpcodes line 585.

NextR8

(4,0x7C)not emitteddup of (0,69)handler #102Floating pointinferred_corpus
Same handler as (0,0x69) NextStepR8: Next for a Double loop counter with Step.
Encoding, evidence and notes
Encoding

Encoding: FE 7C (lead byte FE selects table 4), then 4 operand byte(s); total instruction length 6 byte(s).
vbdec template: %a %L
Operands:

  1. %a: local_var_ref, 2 byte(s). signed 16-bit offset from the procedure frame pointer (EBP). Negative = local/temporary (vbdec var_XX, XX = -offset), positive = argument (arg_XX).
  2. %L: branch_target_no_loc, 2 byte(s). 16-bit branch target (proc-relative), not added to vbdec's label list.
Evidence and notes

Emitted by VB6 SP6 (P-code): not observed in about 3,070 probe programs. The slot exists in the runtime's dispatch table, but no tested source construct makes the compiler emit it.

Handler: 0x66109F6E, shared by 3 dispatch slots (real opcode #102). This is a duplicate slot of (0,69) NextStepR8. Other slots: (0,69) NextStepR8, (4,84) NextR8.

Slots sharing this handler

(0,0x69) NextStepR8, (4,0x84) NextR8

Description: none. Handler 0x66109F6E, dispatch slot 0x66107F04, modOpcodes line 587.

NextR8

(4,0x84)not emitteddup of (0,69)handler #102Floating pointconfirmed_handler
Same handler as (0,0x69) NextStepR8: Next for a Double loop counter with Step.
Encoding, evidence and notes
Encoding

Encoding: FE 84 (lead byte FE selects table 4), then 4 operand byte(s); total instruction length 6 byte(s).
vbdec template: %a %L
Operands:

  1. %a: local_var_ref, 2 byte(s). signed 16-bit offset from the procedure frame pointer (EBP). Negative = local/temporary (vbdec var_XX, XX = -offset), positive = argument (arg_XX).
  2. %L: branch_target_no_loc, 2 byte(s). 16-bit branch target (proc-relative), not added to vbdec's label list.
Evidence and notes

Emitted by VB6 SP6 (P-code): not observed in about 3,070 probe programs. The slot exists in the runtime's dispatch table, but no tested source construct makes the compiler emit it.

Handler: 0x66109F6E, shared by 3 dispatch slots (real opcode #102). This is a duplicate slot of (0,69) NextStepR8. Other slots: (0,69) NextStepR8, (4,7C) NextR8.

Slots sharing this handler

(0,0x69) NextStepR8, (4,0x7C) NextR8

Description: none. Handler 0x66109F6E, dispatch slot 0x66107F24, modOpcodes line 594.

NextStepCy

(0,0x6A)emittedprimary of 3handler #103Currencyconfirmed_handler
Next for a Currency loop counter with Step.

Adds the step to the counter (state in %a), tests against the limit and jumps back to the loop body at %L while the loop continues.

When the compiler emits it

Paired with the corresponding ForStepCy. Phase 4: the compiler emits this slot for Currency counters even when no explicit Step was written; the lead-0 NextStep* slots are the general form.

VB6 source (verified: compiles to this slot)
Dim gi As Currency

Public Sub Main()
  Dim n As Long
  For gi = 1 To 5
  Next
End Sub
Encoding, evidence and notes
Encoding

Encoding: 6A, then 4 operand byte(s); total instruction length 5 byte(s).
vbdec template: %a %L
Operands:

  1. %a: local_var_ref, 2 byte(s). signed 16-bit offset from the procedure frame pointer (EBP). Negative = local/temporary (vbdec var_XX, XX = -offset), positive = argument (arg_XX).
  2. %L: branch_target_no_loc, 2 byte(s). 16-bit branch target (proc-relative), not added to vbdec's label list.

Observed: 6A 68FF1100 NextStepCy var_98 loc_40145D

Examples
6A 68FF1100  NextStepCy var_98 loc_40145D

From the Phase 4 probe (VB6 SP6, P-code).

Evidence and notes

Emitted by VB6 SP6 (P-code): yes. Minimal probe: probes\op\0_6A_NextStepCy.

Handler: 0x66109FDE, shared by 3 dispatch slots (real opcode #103). This is the primary slot. Other slots: (4,7D) NextStepCy, (4,85) NextStepCy.

Check of vb6_source_eq example: verified: compiles and emits this slot.

Example from the description
Dim gi As Currency

Public Sub Main()
  Dim n As Long
  For gi = 1 To 5
  Next
End Sub
Slots sharing this handler

(4,0x7D) NextStepCy, (4,0x85) NextStepCy

Description: draft, by claude-opus-5-5. Handler 0x66109FDE, dispatch slot 0x66106EBC, modOpcodes line 604.

NextStepCy

(4,0x7D)not emitteddup of (0,6A)handler #103Currencyinferred_corpus
Same handler as (0,0x6A) NextStepCy: Next for a Currency loop counter with Step.
Encoding, evidence and notes
Encoding

Encoding: FE 7D (lead byte FE selects table 4), then 4 operand byte(s); total instruction length 6 byte(s).
vbdec template: %a %L
Operands:

  1. %a: local_var_ref, 2 byte(s). signed 16-bit offset from the procedure frame pointer (EBP). Negative = local/temporary (vbdec var_XX, XX = -offset), positive = argument (arg_XX).
  2. %L: branch_target_no_loc, 2 byte(s). 16-bit branch target (proc-relative), not added to vbdec's label list.
Evidence and notes

Emitted by VB6 SP6 (P-code): not observed in about 3,070 probe programs. The slot exists in the runtime's dispatch table, but no tested source construct makes the compiler emit it.

Handler: 0x66109FDE, shared by 3 dispatch slots (real opcode #103). This is a duplicate slot of (0,6A) NextStepCy. Other slots: (0,6A) NextStepCy, (4,85) NextStepCy.

Slots sharing this handler

(0,0x6A) NextStepCy, (4,0x85) NextStepCy

Description: none. Handler 0x66109FDE, dispatch slot 0x66107F08, modOpcodes line 588.

NextStepCy

(4,0x85)not emitteddup of (0,6A)handler #103Currencyconfirmed_handler
Same handler as (0,0x6A) NextStepCy: Next for a Currency loop counter with Step.
Encoding, evidence and notes
Encoding

Encoding: FE 85 (lead byte FE selects table 4), then 4 operand byte(s); total instruction length 6 byte(s).
vbdec template: %a %L
Operands:

  1. %a: local_var_ref, 2 byte(s). signed 16-bit offset from the procedure frame pointer (EBP). Negative = local/temporary (vbdec var_XX, XX = -offset), positive = argument (arg_XX).
  2. %L: branch_target_no_loc, 2 byte(s). 16-bit branch target (proc-relative), not added to vbdec's label list.
Evidence and notes

Emitted by VB6 SP6 (P-code): not observed in about 3,070 probe programs. The slot exists in the runtime's dispatch table, but no tested source construct makes the compiler emit it.

Handler: 0x66109FDE, shared by 3 dispatch slots (real opcode #103). This is a duplicate slot of (0,6A) NextStepCy. Other slots: (0,6A) NextStepCy, (4,7D) NextStepCy.

Slots sharing this handler

(0,0x6A) NextStepCy, (4,0x7D) NextStepCy

Description: none. Handler 0x66109FDE, dispatch slot 0x66107F28, modOpcodes line 595.

NextStepI2

(0,0x65)emittedprimary of 2handler #98Integerconfirmed_handler1 corpus hits
Next of a For loop with a Integer counter and an explicit Step.

Adds the step to the counter, tests it against the limit stored in the loop block %a, and jumps back to %L while the loop continues. Overflow raises error 6.

When the compiler emits it

Emitted at Next for a Integer counter when the loop has a Step clause. The compiler emits this table-0 slot; the table-4 slot of the same name is a never-emitted duplicate.

VB6 source (verified: compiles to this slot)
Public Sub Main()
  Dim i As Integer, n As Long
  For i = 9 To 1 Step -1
  Next
End Sub
Encoding, evidence and notes
Encoding

Encoding: 65, then 4 operand byte(s); total instruction length 5 byte(s).
vbdec template: %a %L
Operands:

  1. %a: local_var_ref, 2 byte(s). signed 16-bit offset from the procedure frame pointer (EBP). Negative = local/temporary (vbdec var_XX, XX = -offset), positive = argument (arg_XX).
  2. %L: branch_target_no_loc, 2 byte(s). 16-bit branch target (proc-relative), not added to vbdec's label list.

Observed: 65 70FF0F00 NextStepI2 var_90 loc_40145B

Examples
modCrc.Proc_446CFC @ 0x446CFC | 446D90    65 68FF4500           NextStepI2 var_98 loc_446D41

1 occurrence(s) in PDFStreamDumper.

Evidence and notes

Emitted by VB6 SP6 (P-code): yes. Minimal probe: probes\op\0_65_NextStepI2.

Handler: 0x661057E1, shared by 2 dispatch slots (real opcode #98). This is the primary slot. Other slots: (4,81) NextStepI2.

Check of vb6_source_eq example: verified: compiles and emits this slot.

Corpus: 1 occurrence(s) in PDFStreamDumper_p.exe.

Example from the description
Dim i As Integer, n As Long
For i = 10 To 1 Step -2
  n = n + 1
Next
Slots sharing this handler

(4,0x81) NextStepI2

Description: draft, by claude-opus-5-5. Handler 0x661057E1, dispatch slot 0x66106EA8, modOpcodes line 599.

NextStepI2

(4,0x81)not emitteddup of (0,65)handler #98Integerinferred_corpus
Same handler as (0,0x65) NextStepI2: Next of a For loop with a Integer counter and an explicit Step.
Encoding, evidence and notes
Encoding

Encoding: FE 81 (lead byte FE selects table 4), then 4 operand byte(s); total instruction length 6 byte(s).
vbdec template: %a %L
Operands:

  1. %a: local_var_ref, 2 byte(s). signed 16-bit offset from the procedure frame pointer (EBP). Negative = local/temporary (vbdec var_XX, XX = -offset), positive = argument (arg_XX).
  2. %L: branch_target_no_loc, 2 byte(s). 16-bit branch target (proc-relative), not added to vbdec's label list.
Evidence and notes

Emitted by VB6 SP6 (P-code): not observed in about 3,070 probe programs. The slot exists in the runtime's dispatch table, but no tested source construct makes the compiler emit it.

Handler: 0x661057E1, shared by 2 dispatch slots (real opcode #98). This is a duplicate slot of (0,65) NextStepI2. Other slots: (0,65) NextStepI2.

Slots sharing this handler

(0,0x65) NextStepI2

Description: none. Handler 0x661057E1, dispatch slot 0x66107F18, modOpcodes line 591.

NextStepI4

(0,0x67)emittedprimary of 2handler #100Integerconfirmed_handler7 corpus hits
Next of a For loop with a Long counter and an explicit Step.

Adds the step to the counter, tests it against the limit stored in the loop block %a, and jumps back to %L while the loop continues. Overflow raises error 6.

When the compiler emits it

Emitted at Next for a Long counter when the loop has a Step clause. The compiler emits this table-0 slot; the table-4 slot of the same name is a never-emitted duplicate.

VB6 source (verified: compiles to this slot)
Public Sub Main()
  Dim i As Long, n As Long
  For i = 9 To 1 Step -1
  Next
End Sub
Encoding, evidence and notes
Encoding

Encoding: 67, then 4 operand byte(s); total instruction length 5 byte(s).
vbdec template: %a %L
Operands:

  1. %a: local_var_ref, 2 byte(s). signed 16-bit offset from the procedure frame pointer (EBP). Negative = local/temporary (vbdec var_XX, XX = -offset), positive = argument (arg_XX).
  2. %L: branch_target_no_loc, 2 byte(s). 16-bit branch target (proc-relative), not added to vbdec's label list.

Observed: 67 6CFF1800 NextStepI4 var_94 loc_401464

Examples
Form1.lv_KeyDown(ByRef KeyCode As Integer, ByVal Shift As Integer) @ 0x456764 | 4568A9    67 3CFFFC00           NextStepI4 var_C4 loc_456860
Form1.mnuHideUnselected_Click @ 0x44AA74 | 44AB48    67 54FF4C00           NextStepI4 var_AC loc_44AAC0
Form1.mnuHideDups_Click @ 0x4629E4 | 462BF6    67 44FF9F00           NextStepI4 var_BC loc_462A83

7 occurrence(s) in PDFStreamDumper.

Evidence and notes

Emitted by VB6 SP6 (P-code): yes. Minimal probe: probes\op\0_67_NextStepI4.

Handler: 0x66109EA5, shared by 2 dispatch slots (real opcode #100). This is the primary slot. Other slots: (4,82) NextStepI4.

Check of vb6_source_eq example: verified: compiles and emits this slot.

Corpus: 7 occurrence(s) in PDFStreamDumper_p.exe.

Example from the description
Dim i As Long, n As Long
For i = 10 To 1 Step -2
  n = n + 1
Next
Slots sharing this handler

(4,0x82) NextStepI4

Description: draft, by claude-opus-5-5. Handler 0x66109EA5, dispatch slot 0x66106EB0, modOpcodes line 601.

NextStepI4

(4,0x82)not emitteddup of (0,67)handler #100Integerinferred_corpus
Same handler as (0,0x67) NextStepI4: Next of a For loop with a Long counter and an explicit Step.
Encoding, evidence and notes
Encoding

Encoding: FE 82 (lead byte FE selects table 4), then 4 operand byte(s); total instruction length 6 byte(s).
vbdec template: %a %L
Operands:

  1. %a: local_var_ref, 2 byte(s). signed 16-bit offset from the procedure frame pointer (EBP). Negative = local/temporary (vbdec var_XX, XX = -offset), positive = argument (arg_XX).
  2. %L: branch_target_no_loc, 2 byte(s). 16-bit branch target (proc-relative), not added to vbdec's label list.
Evidence and notes

Emitted by VB6 SP6 (P-code): not observed in about 3,070 probe programs. The slot exists in the runtime's dispatch table, but no tested source construct makes the compiler emit it.

Handler: 0x66109EA5, shared by 2 dispatch slots (real opcode #100). This is a duplicate slot of (0,67) NextStepI4. Other slots: (0,67) NextStepI4.

Slots sharing this handler

(0,0x67) NextStepI4

Description: none. Handler 0x66109EA5, dispatch slot 0x66107F1C, modOpcodes line 592.

NextStepR4

(0,0x68)emittedprimary of 3handler #101Floating pointconfirmed_handler
Next for a Single loop counter with Step.

Adds the step to the counter (state in %a), tests against the limit and jumps back to the loop body at %L while the loop continues.

When the compiler emits it

Paired with the corresponding ForStepR4. Phase 4: the compiler emits this slot for Single counters even when no explicit Step was written; the lead-0 NextStep* slots are the general form.

VB6 source (verified: compiles to this slot)
Dim gi As Single

Public Sub Main()
  Dim n As Long
  For gi = 1 To 5
  Next
End Sub
Encoding, evidence and notes
Encoding

Encoding: 68, then 4 operand byte(s); total instruction length 5 byte(s).
vbdec template: %a %L
Operands:

  1. %a: local_var_ref, 2 byte(s). signed 16-bit offset from the procedure frame pointer (EBP). Negative = local/temporary (vbdec var_XX, XX = -offset), positive = argument (arg_XX).
  2. %L: branch_target_no_loc, 2 byte(s). 16-bit branch target (proc-relative), not added to vbdec's label list.

Observed: 68 70FF1100 NextStepR4 var_90 loc_40145D

Examples
68 70FF1100  NextStepR4 var_90 loc_40145D

From the Phase 4 probe (VB6 SP6, P-code).

Evidence and notes

Emitted by VB6 SP6 (P-code): yes. Minimal probe: probes\op\0_68_NextStepR4.

Handler: 0x66109F20, shared by 3 dispatch slots (real opcode #101). This is the primary slot. Other slots: (4,7B) NextStepR4, (4,83) NextStepR4.

Check of vb6_source_eq example: verified: compiles and emits this slot.

Example from the description
Dim gi As Single

Public Sub Main()
  Dim n As Long
  For gi = 1 To 5
  Next
End Sub
Slots sharing this handler

(4,0x7B) NextStepR4, (4,0x83) NextStepR4

Description: draft, by claude-opus-5-5. Handler 0x66109F20, dispatch slot 0x66106EB4, modOpcodes line 602.

NextStepR4

(4,0x7B)not emitteddup of (0,68)handler #101Floating pointinferred_corpus
Same handler as (0,0x68) NextStepR4: Next for a Single loop counter with Step.
Encoding, evidence and notes
Encoding

Encoding: FE 7B (lead byte FE selects table 4), then 4 operand byte(s); total instruction length 6 byte(s).
vbdec template: %a %L
Operands:

  1. %a: local_var_ref, 2 byte(s). signed 16-bit offset from the procedure frame pointer (EBP). Negative = local/temporary (vbdec var_XX, XX = -offset), positive = argument (arg_XX).
  2. %L: branch_target_no_loc, 2 byte(s). 16-bit branch target (proc-relative), not added to vbdec's label list.
Evidence and notes

Emitted by VB6 SP6 (P-code): not observed in about 3,070 probe programs. The slot exists in the runtime's dispatch table, but no tested source construct makes the compiler emit it.

Handler: 0x66109F20, shared by 3 dispatch slots (real opcode #101). This is a duplicate slot of (0,68) NextStepR4. Other slots: (0,68) NextStepR4, (4,83) NextStepR4.

Slots sharing this handler

(0,0x68) NextStepR4, (4,0x83) NextStepR4

Description: none. Handler 0x66109F20, dispatch slot 0x66107F00, modOpcodes line 586.

NextStepR4

(4,0x83)not emitteddup of (0,68)handler #101Floating pointconfirmed_handler
Same handler as (0,0x68) NextStepR4: Next for a Single loop counter with Step.
Encoding, evidence and notes
Encoding

Encoding: FE 83 (lead byte FE selects table 4), then 4 operand byte(s); total instruction length 6 byte(s).
vbdec template: %a %L
Operands:

  1. %a: local_var_ref, 2 byte(s). signed 16-bit offset from the procedure frame pointer (EBP). Negative = local/temporary (vbdec var_XX, XX = -offset), positive = argument (arg_XX).
  2. %L: branch_target_no_loc, 2 byte(s). 16-bit branch target (proc-relative), not added to vbdec's label list.
Evidence and notes

Emitted by VB6 SP6 (P-code): not observed in about 3,070 probe programs. The slot exists in the runtime's dispatch table, but no tested source construct makes the compiler emit it.

Handler: 0x66109F20, shared by 3 dispatch slots (real opcode #101). This is a duplicate slot of (0,68) NextStepR4. Other slots: (0,68) NextStepR4, (4,7B) NextStepR4.

Slots sharing this handler

(0,0x68) NextStepR4, (4,0x7B) NextStepR4

Description: none. Handler 0x66109F20, dispatch slot 0x66107F20, modOpcodes line 593.

NextStepR8

(0,0x69)emittedprimary of 3handler #102Floating pointinferred_corpus
Next for a Double loop counter with Step.

Adds the step to the counter (state in %a), tests against the limit and jumps back to the loop body at %L while the loop continues.

When the compiler emits it

Paired with the corresponding ForStepR8. Phase 4: the compiler emits this slot for Double counters even when no explicit Step was written; the lead-0 NextStep* slots are the general form.

VB6 source (verified: compiles to this slot)
Dim gi As Double

Public Sub Main()
  Dim n As Long
  For gi = 1 To 5
  Next
End Sub
Encoding, evidence and notes
Encoding

Encoding: 69, then 4 operand byte(s); total instruction length 5 byte(s).
vbdec template: %a %L
Operands:

  1. %a: local_var_ref, 2 byte(s). signed 16-bit offset from the procedure frame pointer (EBP). Negative = local/temporary (vbdec var_XX, XX = -offset), positive = argument (arg_XX).
  2. %L: branch_target_no_loc, 2 byte(s). 16-bit branch target (proc-relative), not added to vbdec's label list.

Observed: 69 68FF1100 NextStepR8 var_98 loc_40145D

Examples
69 68FF1100  NextStepR8 var_98 loc_40145D

From the Phase 4 probe (VB6 SP6, P-code).

Evidence and notes

Emitted by VB6 SP6 (P-code): yes. Minimal probe: probes\op\0_69_NextStepR8.

Handler: 0x66109F6E, shared by 3 dispatch slots (real opcode #102). This is the primary slot. Other slots: (4,7C) NextR8, (4,84) NextR8.

Check of vb6_source_eq example: verified: compiles and emits this slot.

Example from the description
Dim gi As Double

Public Sub Main()
  Dim n As Long
  For gi = 1 To 5
  Next
End Sub
Slots sharing this handler

(4,0x7C) NextR8, (4,0x84) NextR8

Description: draft, by claude-opus-5-5. Handler 0x66109F6E, dispatch slot 0x66106EB8, modOpcodes line 603.

NextStepUI1

(4,0x80)emitteddup of (4,78)handler #640Integerinferred_corpus
Next for a Byte loop counter with Step.

Adds the step to the counter (state in %a), tests against the limit and jumps back to the loop body at %L while the loop continues.

When the compiler emits it

Paired with the corresponding ForStepUI1. Phase 4: the compiler emits this slot for Byte counters even when no explicit Step was written; the lead-0 NextStep* slots are the general form.

VB6 source (verified: compiles to this slot)
Public Sub Main()
  Dim i As Byte, n As Long
  For i = 9 To 1 Step -1
  Next
End Sub
Encoding, evidence and notes
Encoding

Encoding: FE 80 (lead byte FE selects table 4), then 4 operand byte(s); total instruction length 6 byte(s).
vbdec template: %a %L
Operands:

  1. %a: local_var_ref, 2 byte(s). signed 16-bit offset from the procedure frame pointer (EBP). Negative = local/temporary (vbdec var_XX, XX = -offset), positive = argument (arg_XX).
  2. %L: branch_target_no_loc, 2 byte(s). 16-bit branch target (proc-relative), not added to vbdec's label list.

Observed: FE80 70FF1500 NextStepUI1 var_90 loc_401461

Examples
FE80 70FF1500  NextStepUI1 var_90 loc_401461

From the Phase 4 probe (VB6 SP6, P-code).

Evidence and notes

Emitted by VB6 SP6 (P-code): yes. Minimal probe: probes\op\4_80_NextStepUI1.

Handler: 0x66109E6D, shared by 2 dispatch slots (real opcode #640). This is a duplicate slot of (4,78) NextUI1. Other slots: (4,78) NextUI1.

Compile-time slot selection: the compiler picks different slots of this handler for different source types:

  • (4,78): Dim n As Long : For gi = 1 To 5 : Next
  • (4,80): Dim i As Byte, n As Long : For i = 9 To 1 Step -1 : Next

Check of vb6_source_eq example: verified: compiles and emits this slot.

Example from the description
Public Sub Main()
  Dim i As Byte, n As Long
  For i = 9 To 1 Step -1
  Next
End Sub
Slots sharing this handler

(4,0x78) NextUI1

Description: draft, by claude-opus-5-5. Handler 0x66109E6D, dispatch slot 0x66107F14, modOpcodes line 590.

NextStepVar

(4,0x7E)emittedprimary of 2handler #641Variantinferred_corpus40 corpus hits
Step and re-test a For loop (NextStepVar).

Increments (or steps) the counter, re-evaluates the loop condition, and either branches back to the body or falls through past the loop.

When the compiler emits it

Emitted at the Next of a For ... Next loop matching the counter's type.

VB6 source (verified: compiles to this slot)
Dim gi As Variant

Public Sub Main()
  Dim n As Long
  For gi = 1 To 5
  Next
End Sub
Encoding, evidence and notes
Encoding

Encoding: FE 7E (lead byte FE selects table 4), then 4 operand byte(s); total instruction length 6 byte(s).
vbdec template: %a %L
Operands:

  1. %a: local_var_ref, 2 byte(s). signed 16-bit offset from the procedure frame pointer (EBP). Negative = local/temporary (vbdec var_XX, XX = -offset), positive = argument (arg_XX).
  2. %L: branch_target_no_loc, 2 byte(s). 16-bit branch target (proc-relative), not added to vbdec's label list.

Observed: FE7E 28FF1500 NextStepVar var_D8 loc_401465

Examples
fso.Proc_45ECB4 @ 0x45ECB4 | 45EF07    FE7E C8FE6001         NextStepVar var_138 loc_45EE14
fso.Proc_467FC4 @ 0x467FC4 | 468223    FE7E E0FE7500         NextStepVar var_120 loc_468039
fso.Proc_461D10 @ 0x461D10 | 461FB4    FE7E E8FE8700         NextStepVar var_118 loc_461D97

40 occurrence(s) in PDFStreamDumper.

Evidence and notes

Emitted by VB6 SP6 (P-code): yes. Minimal probe: probes\op\4_7E_NextStepVar.

Handler: 0x661058DE, shared by 2 dispatch slots (real opcode #641). This is the primary slot. Other slots: (4,86) NextStepVar.

Compile-time slot selection: the compiler picks different slots of this handler for different source types:

  • (4,7E): Dim n As Long : For gi = 1 To 5 : Next
  • (4,86): Dim i As Variant, n As Long : For i = 9 To 1 Step -1 : Next

Finding: Compiler selects this slot for a Variant For loop without Step. (4,86) is used with Step. Effective meaning: NextVar.

Check of vb6_source_eq example: verified: compiles and emits this slot.

Corpus: 40 occurrence(s) in PDFStreamDumper_p.exe.

Example from the description
For i = 0 To 9
    ' ...
Next i  ' compiles to NextI4 (or NextStep* with explicit Step)
Slots sharing this handler

(4,0x86) NextStepVar

Description: draft, by claude-opus-4.7. Handler 0x661058DE, dispatch slot 0x66107F0C, modOpcodes line 589.

NextStepVar

(4,0x86)emitteddup of (4,7E)handler #641Variantconfirmed_handler7 corpus hits
(alias) Step and re-test a For loop (NextStepVar).

Alias dispatch slot (4, 0x86) for the canonical NextStepVar at (4, 0x7E); semantics are identical.

Increments (or steps) the counter, re-evaluates the loop condition, and either branches back to the body or falls through past the loop.

When the compiler emits it

Emitted at the Next of a For ... Next loop matching the counter's type.

VB6 source (verified: compiles to this slot)
Public Sub Main()
  Dim i As Variant, n As Long
  For i = 9 To 1 Step -1
  Next
End Sub
Encoding, evidence and notes
Encoding

Encoding: FE 86 (lead byte FE selects table 4), then 4 operand byte(s); total instruction length 6 byte(s).
vbdec template: %a %L
Operands:

  1. %a: local_var_ref, 2 byte(s). signed 16-bit offset from the procedure frame pointer (EBP). Negative = local/temporary (vbdec var_XX, XX = -offset), positive = argument (arg_XX).
  2. %L: branch_target_no_loc, 2 byte(s). 16-bit branch target (proc-relative), not added to vbdec's label list.

Observed: FE86 18FF1800 NextStepVar var_E8 loc_401464

Examples
Form2.mnuHex2Unicode_Click @ 0x45D160 | 45D30A    FE86 B0FE2F01         NextStepVar var_150 loc_45D28F
modEscapes.Proc_44C174 @ 0x44C174 | 44C1DC    FE86 ECFE2600         NextStepVar var_114 loc_44C19A
modEscapes.Proc_46074C @ 0x46074C | 46094B    FE86 CCFE9601         NextStepVar var_134 loc_4608E2

7 occurrence(s) in PDFStreamDumper.

Evidence and notes

Emitted by VB6 SP6 (P-code): yes. Minimal probe: probes\op\4_86_NextStepVar.

Handler: 0x661058DE, shared by 2 dispatch slots (real opcode #641). This is a duplicate slot of (4,7E) NextStepVar. Other slots: (4,7E) NextStepVar.

Compile-time slot selection: the compiler picks different slots of this handler for different source types:

  • (4,7E): Dim n As Long : For gi = 1 To 5 : Next
  • (4,86): Dim i As Variant, n As Long : For i = 9 To 1 Step -1 : Next

Finding: Compiler selects this slot for a Variant For loop with Step.

Check of vb6_source_eq example: compiles, but emits a different slot of the same handler. emits (4,7E) NextStepVar (same handler, different slot) [compiles only without Option Explicit: undeclared names became Variants]

Corpus: 7 occurrence(s) in PDFStreamDumper_p.exe.

Example from the description
For i = 0 To 9
    ' ...
Next i  ' compiles to NextI4 (or NextStep* with explicit Step)
Slots sharing this handler

(4,0x7E) NextStepVar

Description: draft, by claude-opus-4.7. Handler 0x661058DE, dispatch slot 0x66107F2C, modOpcodes line 596.

NextUI1

(4,0x78)emittedprimary of 2handler #640Integerinferred_corpus
Next for a Byte loop counter.

Adds the step to the counter (state in %a), tests against the limit and jumps back to the loop body at %L while the loop continues.

When the compiler emits it

Paired with the corresponding ForUI1. Phase 4: the compiler emits this slot for Byte counters.

VB6 source (verified: compiles to this slot)
Dim gi As Byte

Public Sub Main()
  Dim n As Long
  For gi = 1 To 5
  Next
End Sub
Encoding, evidence and notes
Encoding

Encoding: FE 78 (lead byte FE selects table 4), then 4 operand byte(s); total instruction length 6 byte(s).
vbdec template: %a %L
Operands:

  1. %a: local_var_ref, 2 byte(s). signed 16-bit offset from the procedure frame pointer (EBP). Negative = local/temporary (vbdec var_XX, XX = -offset), positive = argument (arg_XX).
  2. %L: branch_target_no_loc, 2 byte(s). 16-bit branch target (proc-relative), not added to vbdec's label list.

Observed: FE78 74FF1300 NextUI1 var_8C loc_40145F

Examples
FE78 74FF1300  NextUI1 var_8C loc_40145F

From the Phase 4 probe (VB6 SP6, P-code).

Evidence and notes

Emitted by VB6 SP6 (P-code): yes. Minimal probe: probes\op\4_78_NextUI1.

Handler: 0x66109E6D, shared by 2 dispatch slots (real opcode #640). This is the primary slot. Other slots: (4,80) NextStepUI1.

Compile-time slot selection: the compiler picks different slots of this handler for different source types:

  • (4,78): Dim n As Long : For gi = 1 To 5 : Next
  • (4,80): Dim i As Byte, n As Long : For i = 9 To 1 Step -1 : Next

Check of vb6_source_eq example: verified: compiles and emits this slot.

Example from the description
Dim gi As Byte

Public Sub Main()
  Dim n As Long
  For gi = 1 To 5
  Next
End Sub
Slots sharing this handler

(4,0x80) NextStepUI1

Description: draft, by claude-opus-5-5. Handler 0x66109E6D, dispatch slot 0x66107EF4, modOpcodes line 583.

Loop_NextEach

For Each advance

NextEachAryVar

(4,0x77)emittedhandler #639Arrayinferred_corpus12 corpus hits
Next of a For Each loop over an array, with a Variant control variable.

Fetches the next element into the control variable and jumps back to the body at %L. When the sequence is exhausted, releases the iteration state in %a and falls through.

When the compiler emits it

Emitted at the Next of a For Each loop over an array, with a Variant control variable; it pairs with the matching ForEach slot.

VB6 source (verified: compiles to this slot)
Public Sub Main()
  Dim a(5) As Object, x As Variant
  For Each x In a
  Next
End Sub
Encoding, evidence and notes
Encoding

Encoding: FE 77 (lead byte FE selects table 4), then 6 operand byte(s); total instruction length 8 byte(s).
vbdec template: %a %2 %L
Operands:

  1. %a: local_var_ref, 2 byte(s). signed 16-bit offset from the procedure frame pointer (EBP). Negative = local/temporary (vbdec var_XX, XX = -offset), positive = argument (arg_XX).
  2. %2: immediate_word, 2 byte(s). 16-bit immediate.
  3. %L: branch_target_no_loc, 2 byte(s). 16-bit branch target (proc-relative), not added to vbdec's label list.

Observed: FE77 3CFF09000E00 NextEachAryVar var_C4 0x9 loc_40146A

Examples
Form1.Form_Load @ 0x479DC0 | 47A4E6    FE77 ACFD0C000906     NextEachAryVar var_254 0xC loc_47A3C9
fso.Proc_44E8D4 @ 0x44E8D4 | 44E9C2    FE77 00FF0800C200     NextEachAryVar var_100 0x8 loc_44E996
Form2.Form_Unload (Cancel As Integer) @ 0x460A60 | 460D05    FE77 B0FE0C008902     NextEachAryVar var_150 0xC loc_460CE9

12 occurrence(s) in PDFStreamDumper.

Evidence and notes

Emitted by VB6 SP6 (P-code): yes. Minimal probe: probes\op\4_77_NextEachAryVar.

Handler: 0x6610A2FC, unique to this slot (real opcode #639).

Check of vb6_source_eq example: verified: compiles and emits this slot.

Corpus: 12 occurrence(s) in PDFStreamDumper_p.exe.

Example from the description
Dim n As Long
Dim a(3) As Long, x As Variant
For Each x In a
  n = n + 1
Next

Description: draft, by claude-opus-5-5. Handler 0x6610A2FC, dispatch slot 0x66107EF0, modOpcodes line 559.

NextEachCollAd

(4,0x75)emittedhandler #637Object / COMinferred_corpus
Next of a For Each over a collection with an Object-typed control variable.

Fetches the next item from the enumerator in %a into the control variable (object reference). If one was obtained it jumps back to %L; otherwise it releases the enumerator and falls through.

When the compiler emits it

Paired with ForEachCollAd.

VB6 source (verified: compiles to this slot)
Public Sub Main()
  Dim c As New Collection, x As Object
  For Each x In c
  Next
End Sub
Encoding, evidence and notes
Encoding

Encoding: FE 75 (lead byte FE selects table 4), then 4 operand byte(s); total instruction length 6 byte(s).
vbdec template: %a %L
Operands:

  1. %a: local_var_ref, 2 byte(s). signed 16-bit offset from the procedure frame pointer (EBP). Negative = local/temporary (vbdec var_XX, XX = -offset), positive = argument (arg_XX).
  2. %L: branch_target_no_loc, 2 byte(s). 16-bit branch target (proc-relative), not added to vbdec's label list.

Observed: FE75 70FF0F00 NextEachCollAd var_90 loc_40148F

Examples
FE75 70FF0F00  NextEachCollAd var_90 loc_40148F

From the Phase 4 probe (VB6 SP6, P-code).

Evidence and notes

Emitted by VB6 SP6 (P-code): yes. Minimal probe: probes\op\4_75_NextEachCollAd.

Handler: 0x6610A2CB, unique to this slot (real opcode #637).

Check of vb6_source_eq example: verified: compiles and emits this slot.

Example from the description
Public Sub Main()
  Dim c As New Collection, x As Object
  For Each x In c
  Next
End Sub

Description: draft, by claude-opus-5-5. Handler 0x6610A2CB, dispatch slot 0x66107EE8, modOpcodes line 565.

NextEachCollObj

(4,0x8B)emittedhandler #645Object / COMinferred_corpus74 corpus hits
Next of a For Each loop over a collection, with the control variable typed as a specific class (or Object).

Fetches the next element into the control variable and jumps back to the body at %L. When the sequence is exhausted, releases the iteration state in %a and falls through.

When the compiler emits it

Emitted at the Next of a For Each loop over a collection, with the control variable typed as a specific class (or Object); it pairs with the matching ForEach slot.

VB6 source (verified: compiles to this slot)
Public Sub Main()
  Dim c As New Collection, x As CThing
  For Each x In c
  Next
End Sub
' ---- CThing.cls
Encoding, evidence and notes
Encoding

Encoding: FE 8B (lead byte FE selects table 4), then 6 operand byte(s); total instruction length 8 byte(s).
vbdec template: %a %2 %L
Operands:

  1. %a: local_var_ref, 2 byte(s). signed 16-bit offset from the procedure frame pointer (EBP). Negative = local/temporary (vbdec var_XX, XX = -offset), positive = argument (arg_XX).
  2. %2: immediate_word, 2 byte(s). 16-bit immediate.
  3. %L: branch_target_no_loc, 2 byte(s). 16-bit branch target (proc-relative), not added to vbdec's label list.

Observed: FE8B 70FF01001100 NextEachCollObj var_90 0x1 loc_4016CD

Examples
Form1.mnuCopySearch_Click @ 0x449FA4 | 449FF1    FE8B 58FF37002900     NextEachCollObj var_A8 0x37 loc_449FCD
Form1.mnuErrorSaveRawAll_Click @ 0x45D950 | 45DB12    FE8B C8FE3700C700     NextEachCollObj var_138 0x37 loc_45DA17
Form1.mnuExtractURI_Click @ 0x45774C | 457890    FE8B 3CFF37003200     NextEachCollObj var_C4 0x37 loc_45777E

74 occurrence(s) in PDFStreamDumper.

Evidence and notes

Emitted by VB6 SP6 (P-code): yes. Minimal probe: probes\op\4_8B_NextEachCollObj.

Handler: 0x661059DB, unique to this slot (real opcode #645).

Check of vb6_source_eq example: verified: compiles and emits this slot.

Corpus: 74 occurrence(s) in PDFStreamDumper_p.exe.

Example from the description
Dim n As Long
Dim c As New Collection, x As Collection
For Each x In c
  n = n + 1
Next

Description: draft, by claude-opus-5-5. Handler 0x661059DB, dispatch slot 0x66107F40, modOpcodes line 558.

NextEachCollVar

(4,0x73)emittedhandler #635Object / COMinferred_corpus14 corpus hits
Next of a For Each loop over a collection or object, with a Variant control variable.

Fetches the next element into the control variable and jumps back to the body at %L. When the sequence is exhausted, releases the iteration state in %a and falls through.

When the compiler emits it

Emitted at the Next of a For Each loop over a collection or object, with a Variant control variable; it pairs with the matching ForEach slot.

VB6 source (verified: compiles to this slot)
Public Sub Main()
  Dim c As New Collection, x As Variant
  For Each x In c
  Next
out:
End Sub
Encoding, evidence and notes
Encoding

Encoding: FE 73 (lead byte FE selects table 4), then 4 operand byte(s); total instruction length 6 byte(s).
vbdec template: %a %L
Operands:

  1. %a: local_var_ref, 2 byte(s). signed 16-bit offset from the procedure frame pointer (EBP). Negative = local/temporary (vbdec var_XX, XX = -offset), positive = argument (arg_XX).
  2. %L: branch_target_no_loc, 2 byte(s). 16-bit branch target (proc-relative), not added to vbdec's label list.

Observed: FE73 64FF0F00 NextEachCollVar var_9C loc_40148F

Examples
Form1.Shutdown @ 0x442740 | 442786    FE73 50FF2800         NextEachCollVar var_B0 loc_442768
Form2.mnuRenameFunc_Click @ 0x471130 | 4712C2    FE73 60FE4701         NextEachCollVar var_1A0 loc_471277
CFunc.ApplyOverrides @ 0x44FD88 | 44FE87    FE73 60FF2C00         NextEachCollVar var_A0 loc_44FDB4

14 occurrence(s) in PDFStreamDumper.

Evidence and notes

Emitted by VB6 SP6 (P-code): yes. Minimal probe: probes\op\4_73_NextEachCollVar.

Handler: 0x6610A2C4, unique to this slot (real opcode #635).

Check of vb6_source_eq example: verified: compiles and emits this slot.

Corpus: 14 occurrence(s) in PDFStreamDumper_p.exe.

Example from the description
Dim n As Long
Dim c As New Collection, x As Variant
For Each x In c
  n = n + 1
Next

Description: draft, by claude-opus-5-5. Handler 0x6610A2C4, dispatch slot 0x66107EE0, modOpcodes line 566.

NextEachVar

(4,0x8C)emittedhandler #646Object / COMinferred_corpus7 corpus hits
Advance a For Each iteration (NextEachVar).

Fetches the next enumerated element; if exhausted, releases the enumerator and falls through past the loop, otherwise stores the element into the iteration variable and branches back to the body.

When the compiler emits it

Emitted at the Next of every For Each loop.

VB6 source (verified: compiles to this slot)
Public Sub Main()
  Dim c As Variant, x As Variant
  For Each x In c
  Next
End Sub
Encoding, evidence and notes
Encoding

Encoding: FE 8C (lead byte FE selects table 4), then 4 operand byte(s); total instruction length 6 byte(s).
vbdec template: %a %L
Operands:

  1. %a: local_var_ref, 2 byte(s). signed 16-bit offset from the procedure frame pointer (EBP). Negative = local/temporary (vbdec var_XX, XX = -offset), positive = argument (arg_XX).
  2. %L: branch_target_no_loc, 2 byte(s). 16-bit branch target (proc-relative), not added to vbdec's label list.

Observed: FE8C 4CFF0C00 NextEachVar var_B4 loc_401458

Examples
Form2.mnuCopyFuncsNames_Click @ 0x456D48 | 456DF3    FE8C 04FF6200         NextEachVar var_FC loc_456DAA
CFunc.ParseAsGlobal @ 0x468430 | 4686E9    FE8C F4FE6100         NextEachVar var_10C loc_468491
CFunc.ParseSelf @ 0x47181C | 471991    FE8C 80FE1701         NextEachVar var_180 loc_471933

7 occurrence(s) in PDFStreamDumper.

Evidence and notes

Emitted by VB6 SP6 (P-code): yes. Minimal probe: probes\op\4_8C_NextEachVar.

Handler: 0x6610A2AB, unique to this slot (real opcode #646).

Check of vb6_source_eq example: verified: compiles and emits this slot.

Corpus: 7 occurrence(s) in PDFStreamDumper_p.exe.

Example from the description
For Each x In coll
    ' ...
Next  ' -> NextEachCollObj / NextEachAryVar

Description: draft, by claude-opus-4.7. Handler 0x6610A2AB, dispatch slot 0x66107F44, modOpcodes line 597.

Math_Abs

Absolute value

FnAbsCy

(0,0xBE)emittedprimary of 2handler #187Currencyconfirmed_msdocs
Pop one 64-bit scaled-integer Currency (×10^4); push its absolute value.

Pops a of type 64-bit scaled-integer Currency (×10^4), pushes |a| of the same type.

Stack: [..., a:Cy] -> [..., |a|:Cy]

Implements VB6 Abs(). For signed integers, Abs(MinValue) raises overflow (error 6). For floating values, the sign bit is cleared; NaN is preserved.

When the compiler emits it

Emitted for Abs() applied to a Currency-typed argument.

VB6 source (verified: compiles to this slot)
Public Sub Main()
  Dim a As Currency, c As Currency
  c = Abs(a)
End Sub
Encoding, evidence and notes
Encoding

Encoding: BE, then 0 operand byte(s); total instruction length 1 byte(s).
Operands: none. All inputs come from the evaluation stack or the frame.
Observed: BE FnAbsCy

Evidence and notes

Emitted by VB6 SP6 (P-code): yes. Minimal probe: probes\op\0_BE_FnAbsCy.

Handler: 0x6610ACE1, shared by 2 dispatch slots (real opcode #187). This is the primary slot. Other slots: (1,D8) FnAbsCy.

Check of vb6_source_eq example: verified: compiles and emits this slot.

Example from the description
Dim a As Currency, c As Currency
c = Abs(a)
Slots sharing this handler

(1,0xD8) FnAbsCy

Description: draft, by claude-opus-4.7. Handler 0x6610ACE1, dispatch slot 0x6610700C, modOpcodes line 1380.

FnAbsCy

(1,0xD8)not emitteddup of (0,BE)handler #187Currencyconfirmed_handler
(alias) Pop one 64-bit scaled-integer Currency (×10^4); push its absolute value.

Alias dispatch slot (1, 0xD8) for the canonical FnAbsCy at (0, 0xBE); semantics are identical.

Pops a of type 64-bit scaled-integer Currency (×10^4), pushes |a| of the same type.

Stack: [..., a:Cy] -> [..., |a|:Cy]

Implements VB6 Abs(). For signed integers, Abs(MinValue) raises overflow (error 6). For floating values, the sign bit is cleared; NaN is preserved.

When the compiler emits it

Emitted for Abs() applied to a Currency-typed argument.

VB6 source (from description, not verified)
Dim a As Currency, c As Currency
c = Abs(a)
Encoding, evidence and notes
Encoding

Encoding: FB D8 (lead byte FB selects table 1), then 0 operand byte(s); total instruction length 2 byte(s).
Operands: none. All inputs come from the evaluation stack or the frame.

Evidence and notes

Emitted by VB6 SP6 (P-code): not observed in about 3,070 probe programs. The slot exists in the runtime's dispatch table, but no tested source construct makes the compiler emit it.

Handler: 0x6610ACE1, shared by 2 dispatch slots (real opcode #187). This is a duplicate slot of (0,BE) FnAbsCy. Other slots: (0,BE) FnAbsCy.

Check of vb6_source_eq example: compiles, but emits a different slot of the same handler. emits (0,BE) FnAbsCy (same handler, different slot)

Slots sharing this handler

(0,0xBE) FnAbsCy

Description: draft, by claude-opus-4.7. Handler 0x6610ACE1, dispatch slot 0x66107474, modOpcodes line 1425.

FnAbsI2

(0,0xBB)emittedprimary of 2handler #184Integerconfirmed_msdocs
Pop one 16-bit signed integer (VB6 Integer); push its absolute value.

Pops a of type 16-bit signed integer (VB6 Integer), pushes |a| of the same type.

Stack: [..., a:I2] -> [..., |a|:I2]

Implements VB6 Abs(). For signed integers, Abs(MinValue) raises overflow (error 6). For floating values, the sign bit is cleared; NaN is preserved.

When the compiler emits it

Emitted for Abs() applied to a Integer-typed argument.

VB6 source (verified: compiles to this slot)
Public Sub Main()
  Dim a As Integer, c As Integer
  c = Abs(a)
End Sub
Encoding, evidence and notes
Encoding

Encoding: BB, then 0 operand byte(s); total instruction length 1 byte(s).
Operands: none. All inputs come from the evaluation stack or the frame.
Observed: BB FnAbsI2

Evidence and notes

Emitted by VB6 SP6 (P-code): yes. Minimal probe: probes\op\0_BB_FnAbsI2.

Handler: 0x6610ACA9, shared by 2 dispatch slots (real opcode #184). This is the primary slot. Other slots: (1,D4) FnAbsI2.

Check of vb6_source_eq example: verified: compiles and emits this slot.

Example from the description
Dim a As Integer, c As Integer
c = Abs(a)
Slots sharing this handler

(1,0xD4) FnAbsI2

Description: draft, by claude-opus-4.7. Handler 0x6610ACA9, dispatch slot 0x66107000, modOpcodes line 1377.

FnAbsI2

(1,0xD4)not emitteddup of (0,BB)handler #184Integerconfirmed_handler
(alias) Pop one 16-bit signed integer (VB6 Integer); push its absolute value.

Alias dispatch slot (1, 0xD4) for the canonical FnAbsI2 at (0, 0xBB); semantics are identical.

Pops a of type 16-bit signed integer (VB6 Integer), pushes |a| of the same type.

Stack: [..., a:I2] -> [..., |a|:I2]

Implements VB6 Abs(). For signed integers, Abs(MinValue) raises overflow (error 6). For floating values, the sign bit is cleared; NaN is preserved.

When the compiler emits it

Emitted for Abs() applied to a Integer-typed argument.

VB6 source (from description, not verified)
Dim a As Integer, c As Integer
c = Abs(a)
Encoding, evidence and notes
Encoding

Encoding: FB D4 (lead byte FB selects table 1), then 0 operand byte(s); total instruction length 2 byte(s).
Operands: none. All inputs come from the evaluation stack or the frame.

Evidence and notes

Emitted by VB6 SP6 (P-code): not observed in about 3,070 probe programs. The slot exists in the runtime's dispatch table, but no tested source construct makes the compiler emit it.

Handler: 0x6610ACA9, shared by 2 dispatch slots (real opcode #184). This is a duplicate slot of (0,BB) FnAbsI2. Other slots: (0,BB) FnAbsI2.

Check of vb6_source_eq example: compiles, but emits a different slot of the same handler. emits (0,BB) FnAbsI2 (same handler, different slot)

Slots sharing this handler

(0,0xBB) FnAbsI2

Description: draft, by claude-opus-4.7. Handler 0x6610ACA9, dispatch slot 0x66107464, modOpcodes line 1421.

FnAbsI4

(0,0xBC)emittedprimary of 2handler #185Integerconfirmed_msdocs3 corpus hits
Pop one 32-bit signed integer (VB6 Long); push its absolute value.

Pops a of type 32-bit signed integer (VB6 Long), pushes |a| of the same type.

Stack: [..., a:I4] -> [..., |a|:I4]

Implements VB6 Abs(). For signed integers, Abs(MinValue) raises overflow (error 6). For floating values, the sign bit is cleared; NaN is preserved.

When the compiler emits it

Emitted for Abs() applied to a Long-typed argument.

VB6 source (verified: compiles to this slot)
Public Sub Main()
  Dim a As Long, c As Long
  c = Abs(a)
End Sub
Encoding, evidence and notes
Encoding

Encoding: BC, then 0 operand byte(s); total instruction length 1 byte(s).
Operands: none. All inputs come from the evaluation stack or the frame.
Observed: BC FnAbsI4

Examples
Form2.txtJS_LineChanged(ByRef Position As Long) @ 0x452294 | 45232A    BC                    FnAbsI4
Form2.txtJS_LineChanged(ByRef Position As Long) @ 0x452294 | 452363    BC                    FnAbsI4
frmBruteZLib.cmdLoadNewStream_Click @ 0x465B08 | 465DA1    BC                    FnAbsI4

3 occurrence(s) in PDFStreamDumper.

Evidence and notes

Emitted by VB6 SP6 (P-code): yes. Minimal probe: probes\op\0_BC_FnAbsI4.

Handler: 0x6610ACC6, shared by 2 dispatch slots (real opcode #185). This is the primary slot. Other slots: (1,D5) FnAbsI4.

Check of vb6_source_eq example: verified: compiles and emits this slot.

Corpus: 3 occurrence(s) in PDFStreamDumper_p.exe.

Example from the description
Dim a As Long, c As Long
c = Abs(a)
Slots sharing this handler

(1,0xD5) FnAbsI4

Description: draft, by claude-opus-4.7. Handler 0x6610ACC6, dispatch slot 0x66107004, modOpcodes line 1378.

FnAbsI4

(1,0xD5)not emitteddup of (0,BC)handler #185Integerconfirmed_handler
(alias) Pop one 32-bit signed integer (VB6 Long); push its absolute value.

Alias dispatch slot (1, 0xD5) for the canonical FnAbsI4 at (0, 0xBC); semantics are identical.

Pops a of type 32-bit signed integer (VB6 Long), pushes |a| of the same type.

Stack: [..., a:I4] -> [..., |a|:I4]

Implements VB6 Abs(). For signed integers, Abs(MinValue) raises overflow (error 6). For floating values, the sign bit is cleared; NaN is preserved.

When the compiler emits it

Emitted for Abs() applied to a Long-typed argument.

VB6 source (from description, not verified)
Dim a As Long, c As Long
c = Abs(a)
Encoding, evidence and notes
Encoding

Encoding: FB D5 (lead byte FB selects table 1), then 0 operand byte(s); total instruction length 2 byte(s).
Operands: none. All inputs come from the evaluation stack or the frame.

Evidence and notes

Emitted by VB6 SP6 (P-code): not observed in about 3,070 probe programs. The slot exists in the runtime's dispatch table, but no tested source construct makes the compiler emit it.

Handler: 0x6610ACC6, shared by 2 dispatch slots (real opcode #185). This is a duplicate slot of (0,BC) FnAbsI4. Other slots: (0,BC) FnAbsI4.

Check of vb6_source_eq example: compiles, but emits a different slot of the same handler. emits (0,BC) FnAbsI4 (same handler, different slot)

Slots sharing this handler

(0,0xBC) FnAbsI4

Description: draft, by claude-opus-4.7. Handler 0x6610ACC6, dispatch slot 0x66107468, modOpcodes line 1422.

FnAbsR4

(0,0xBD)emittedprimary of 3handler #186Floating pointconfirmed_msdocs
Pop one 32-bit IEEE 754 float (VB6 Single); push its absolute value.

Pops a of type 32-bit IEEE 754 float (VB6 Single), pushes |a| of the same type.

Stack: [..., a:R4] -> [..., |a|:R4]

Implements VB6 Abs(). For signed integers, Abs(MinValue) raises overflow (error 6). For floating values, the sign bit is cleared; NaN is preserved.

When the compiler emits it

Emitted for Abs() applied to a Single-typed argument.

VB6 source (verified: compiles to this slot)
Public Sub Main()
  Dim a As Single, c As Single
  c = Abs(a)
End Sub
Encoding, evidence and notes
Encoding

Encoding: BD, then 0 operand byte(s); total instruction length 1 byte(s).
Operands: none. All inputs come from the evaluation stack or the frame.
Observed: BD FnAbsR4

Evidence and notes

Emitted by VB6 SP6 (P-code): yes. Minimal probe: probes\op\0_BD_FnAbsR4.

Handler: 0x6610ACF5, shared by 3 dispatch slots (real opcode #186). This is the primary slot. Other slots: (1,D6) FnAbsR4, (1,D7) FnAbsR4.

Check of vb6_source_eq example: verified: compiles and emits this slot.

Example from the description
Dim a As Single, c As Single
c = Abs(a)
Slots sharing this handler

(1,0xD6) FnAbsR4, (1,0xD7) FnAbsR4

Description: draft, by claude-opus-4.7. Handler 0x6610ACF5, dispatch slot 0x66107008, modOpcodes line 1379.

FnAbsR4

(1,0xD6)not emitteddup of (0,BD)handler #186Floating pointconfirmed_handler
(alias) Pop one 32-bit IEEE 754 float (VB6 Single); push its absolute value.

Alias dispatch slot (1, 0xD6) for the canonical FnAbsR4 at (0, 0xBD); semantics are identical.

Pops a of type 32-bit IEEE 754 float (VB6 Single), pushes |a| of the same type.

Stack: [..., a:R4] -> [..., |a|:R4]

Implements VB6 Abs(). For signed integers, Abs(MinValue) raises overflow (error 6). For floating values, the sign bit is cleared; NaN is preserved.

When the compiler emits it

Emitted for Abs() applied to a Single-typed argument.

VB6 source (from description, not verified)
Dim a As Single, c As Single
c = Abs(a)
Encoding, evidence and notes
Encoding

Encoding: FB D6 (lead byte FB selects table 1), then 0 operand byte(s); total instruction length 2 byte(s).
Operands: none. All inputs come from the evaluation stack or the frame.

Evidence and notes

Emitted by VB6 SP6 (P-code): not observed in about 3,070 probe programs. The slot exists in the runtime's dispatch table, but no tested source construct makes the compiler emit it.

Handler: 0x6610ACF5, shared by 3 dispatch slots (real opcode #186). This is a duplicate slot of (0,BD) FnAbsR4. Other slots: (0,BD) FnAbsR4, (1,D7) FnAbsR4.

Check of vb6_source_eq example: compiles, but emits a different slot of the same handler. emits (0,BD) FnAbsR4 (same handler, different slot)

Slots sharing this handler

(0,0xBD) FnAbsR4, (1,0xD7) FnAbsR4

Description: draft, by claude-opus-4.7. Handler 0x6610ACF5, dispatch slot 0x6610746C, modOpcodes line 1423.

FnAbsR4

(1,0xD7)not emitteddup of (0,BD)handler #186Floating pointconfirmed_handler
(alias) Pop one 32-bit IEEE 754 float (VB6 Single); push its absolute value.

Alias dispatch slot (1, 0xD7) for the canonical FnAbsR4 at (0, 0xBD); semantics are identical.

Pops a of type 32-bit IEEE 754 float (VB6 Single), pushes |a| of the same type.

Stack: [..., a:R4] -> [..., |a|:R4]

Implements VB6 Abs(). For signed integers, Abs(MinValue) raises overflow (error 6). For floating values, the sign bit is cleared; NaN is preserved.

When the compiler emits it

Emitted for Abs() applied to a Single-typed argument.

VB6 source (from description, not verified)
Dim a As Single, c As Single
c = Abs(a)
Encoding, evidence and notes
Encoding

Encoding: FB D7 (lead byte FB selects table 1), then 0 operand byte(s); total instruction length 2 byte(s).
Operands: none. All inputs come from the evaluation stack or the frame.

Evidence and notes

Emitted by VB6 SP6 (P-code): not observed in about 3,070 probe programs. The slot exists in the runtime's dispatch table, but no tested source construct makes the compiler emit it.

Handler: 0x6610ACF5, shared by 3 dispatch slots (real opcode #186). This is a duplicate slot of (0,BD) FnAbsR4. Other slots: (0,BD) FnAbsR4, (1,D6) FnAbsR4.

Check of vb6_source_eq example: compiles, but emits a different slot of the same handler. emits (0,BD) FnAbsR4 (same handler, different slot)

Slots sharing this handler

(0,0xBD) FnAbsR4, (1,0xD6) FnAbsR4

Description: draft, by claude-opus-4.7. Handler 0x6610ACF5, dispatch slot 0x66107470, modOpcodes line 1424.

FnAbsVar

(1,0xD9)emittedhandler #336Variantinferred_corpus
Variant Abs(); result Variant in a temporary.

Pops a Variant, applies Abs() (Null propagates) and writes the result Variant to the temporary %a.

Stack: [..., a:Var] -> [..., r:Var]

When the compiler emits it

Emitted for Abs() applied to a Variant.

VB6 source (verified: compiles to this slot)
Public Sub Main()
  Dim a As Variant, c As Variant
  c = Abs(a)
End Sub
Encoding, evidence and notes
Encoding

Encoding: FB D9 (lead byte FB selects table 1), then 2 operand byte(s); total instruction length 4 byte(s).
vbdec template: %a
Operands:

  1. %a: local_var_ref, 2 byte(s). signed 16-bit offset from the procedure frame pointer (EBP). Negative = local/temporary (vbdec var_XX, XX = -offset), positive = argument (arg_XX).

Observed: FBD9 4CFF FnAbsVar var_B4

Examples
FBD9 4CFF  FnAbsVar var_B4

From the Phase 4 probe (VB6 SP6, P-code).

Evidence and notes

Emitted by VB6 SP6 (P-code): yes. Minimal probe: probes\op\1_D9_FnAbsVar.

Handler: 0x6610ADE8, unique to this slot (real opcode #336).

Check of vb6_source_eq example: verified: compiles and emits this slot.

Example from the description
Public Sub Main()
  Dim a As Variant, c As Variant
  c = Abs(a)
End Sub

Description: draft, by claude-opus-5-5. Handler 0x6610ADE8, dispatch slot 0x66107478, modOpcodes line 1092.

FnFixCy

(1,0xE0)emittedhandler #338Currencyconfirmed_msdocs
Fix() of a Currency value: truncates toward zero.

Replaces the 8-byte Currency on the evaluation stack with its integer part: Fix truncates toward zero (Fix(-2.5) = -2, Int(-2.5) = -3). The type is unchanged.

Stack: [..., a] -> [..., Fix(a)]

When the compiler emits it

Emitted for Fix(x) where x is Currency. Variant arguments use FnFixVar.

VB6 source (verified: compiles to this slot)
Public Sub Main()
  Dim a As Currency, c As Currency
  c = Fix(a)
End Sub
Encoding, evidence and notes
Encoding

Encoding: FB E0 (lead byte FB selects table 1), then 0 operand byte(s); total instruction length 2 byte(s).
Operands: none. All inputs come from the evaluation stack or the frame.
Observed: FBE0 FnFixCy

Evidence and notes

Emitted by VB6 SP6 (P-code): yes. Minimal probe: probes\op\1_E0_FnFixCy.

Handler: 0x6610ADB5, unique to this slot (real opcode #338).

Check of vb6_source_eq example: verified: compiles and emits this slot.

Example from the description
Dim a As Currency, c As Currency
a = -2.5
c = Fix(a)

Description: draft, by claude-opus-5-5. Handler 0x6610ADB5, dispatch slot 0x66107494, modOpcodes line 1572.

FnFixR8

(1,0xDE)emittedprimary of 2handler #337Floating pointconfirmed_msdocs
Fix() of a Single value: truncates toward zero.

Replaces the floating-point value in ST0 with its integer part: Fix truncates toward zero (Fix(-2.5) = -2, Int(-2.5) = -3). The type is unchanged.

Stack: [..., a] -> [..., Fix(a)]

When the compiler emits it

Emitted for Fix(x) where x is Single. (1,DF) is the Double/Date/String form; same handler. Variant arguments use FnFixVar.

VB6 source (verified: compiles to this slot)
Public Sub Main()
  Dim a As Single, c As Single
  c = Fix(a)
End Sub
Encoding, evidence and notes
Encoding

Encoding: FB DE (lead byte FB selects table 1), then 0 operand byte(s); total instruction length 2 byte(s).
Operands: none. All inputs come from the evaluation stack or the frame.
Observed: FBDE FnFixR8

Evidence and notes

Emitted by VB6 SP6 (P-code): yes. Minimal probe: probes\op\1_DE_FnFixR8.

Handler: 0x66105EC9, shared by 2 dispatch slots (real opcode #337). This is the primary slot. Other slots: (1,DF) FnFixR8.

Compile-time slot selection: the compiler picks different slots of this handler for different source types:

  • (1,DE): Dim a As Single, c As Single : c = Fix(a)
  • (1,DF): Dim a As Double, c As Double : c = Fix(a)

Finding: Compiler selects this slot for Fix(<Single>). (1,DF) is used for Double/Date/String. Effective meaning: FnFixR4.

Check of vb6_source_eq example: verified: compiles and emits this slot.

Example from the description
Dim a As Single, c As Single
a = -2.5
c = Fix(a)
Slots sharing this handler

(1,0xDF) FnFixR8

Description: draft, by claude-opus-5-5. Handler 0x66105EC9, dispatch slot 0x6610748C, modOpcodes line 1570.

FnFixR8

(1,0xDF)emitteddup of (1,DE)handler #337Floating pointconfirmed_handler
Fix() of a Double, Date or String value: truncates toward zero.

Replaces the floating-point value in ST0 with its integer part: Fix truncates toward zero (Fix(-2.5) = -2, Int(-2.5) = -3). The type is unchanged.

Stack: [..., a] -> [..., Fix(a)]

When the compiler emits it

Emitted for Fix(x) where x is Double, Date or String. (1,DE) is the Single form; same handler. Variant arguments use FnFixVar.

VB6 source (verified: compiles to this slot)
Public Sub Main()
  Dim a As Double, c As Double
  c = Fix(a)
End Sub
Encoding, evidence and notes
Encoding

Encoding: FB DF (lead byte FB selects table 1), then 0 operand byte(s); total instruction length 2 byte(s).
Operands: none. All inputs come from the evaluation stack or the frame.
Observed: FBDF FnFixR8

Evidence and notes

Emitted by VB6 SP6 (P-code): yes. Minimal probe: probes\op\1_DF_FnFixR8.

Handler: 0x66105EC9, shared by 2 dispatch slots (real opcode #337). This is a duplicate slot of (1,DE) FnFixR8. Other slots: (1,DE) FnFixR8.

Compile-time slot selection: the compiler picks different slots of this handler for different source types:

  • (1,DE): Dim a As Single, c As Single : c = Fix(a)
  • (1,DF): Dim a As Double, c As Double : c = Fix(a)

Finding: Compiler selects this slot for Fix(<Double|Date|String>).

Check of vb6_source_eq example: verified: compiles and emits this slot.

Example from the description
Dim a As Double, c As Double
a = -2.5
c = Fix(a)
Slots sharing this handler

(1,0xDE) FnFixR8

Description: draft, by claude-opus-5-5. Handler 0x66105EC9, dispatch slot 0x66107490, modOpcodes line 1571.

FnFixVar

(1,0xE1)emittedhandler #339Variantinferred_corpus
Variant Fix(); result Variant in a temporary.

Pops a Variant, applies Fix() (Null propagates) and writes the result Variant to the temporary %a.

Stack: [..., a:Var] -> [..., r:Var]

When the compiler emits it

Emitted for Fix() applied to a Variant.

VB6 source (verified: compiles to this slot)
Public Sub Main()
  Dim a As Variant, c As Variant
  c = Fix(a)
End Sub
Encoding, evidence and notes
Encoding

Encoding: FB E1 (lead byte FB selects table 1), then 2 operand byte(s); total instruction length 4 byte(s).
vbdec template: %a
Operands:

  1. %a: local_var_ref, 2 byte(s). signed 16-bit offset from the procedure frame pointer (EBP). Negative = local/temporary (vbdec var_XX, XX = -offset), positive = argument (arg_XX).

Observed: FBE1 4CFF FnFixVar var_B4

Examples
FBE1 4CFF  FnFixVar var_B4

From the Phase 4 probe (VB6 SP6, P-code).

Evidence and notes

Emitted by VB6 SP6 (P-code): yes. Minimal probe: probes\op\1_E1_FnFixVar.

Handler: 0x6610ADF3, unique to this slot (real opcode #339).

Check of vb6_source_eq example: verified: compiles and emits this slot.

Example from the description
Public Sub Main()
  Dim a As Variant, c As Variant
  c = Fix(a)
End Sub

Description: draft, by claude-opus-5-5. Handler 0x6610ADF3, dispatch slot 0x66107498, modOpcodes line 1093.

FnIntCy

(1,0xE8)emittedhandler #341Currencyconfirmed_msdocs
Int() of a Currency value: rounds down toward negative infinity.

Replaces the 8-byte Currency on the evaluation stack with its integer part: Int rounds down toward negative infinity (Fix(-2.5) = -2, Int(-2.5) = -3). The type is unchanged.

Stack: [..., a] -> [..., Int(a)]

When the compiler emits it

Emitted for Int(x) where x is Currency. Variant arguments use FnIntVar.

VB6 source (verified: compiles to this slot)
Public Sub Main()
  Dim a As Currency, c As Currency
  c = Int(a)
End Sub
Encoding, evidence and notes
Encoding

Encoding: FB E8 (lead byte FB selects table 1), then 0 operand byte(s); total instruction length 2 byte(s).
Operands: none. All inputs come from the evaluation stack or the frame.
Observed: FBE8 FnIntCy

Evidence and notes

Emitted by VB6 SP6 (P-code): yes. Minimal probe: probes\op\1_E8_FnIntCy.

Handler: 0x6610ADC8, unique to this slot (real opcode #341).

Check of vb6_source_eq example: verified: compiles and emits this slot.

Example from the description
Dim a As Currency, c As Currency
a = -2.5
c = Int(a)

Description: draft, by claude-opus-5-5. Handler 0x6610ADC8, dispatch slot 0x661074B4, modOpcodes line 928.

FnIntR8

(1,0xE6)emitteddup of (1,E7)handler #340Floating pointconfirmed_msdocs
Int() of a Single value: rounds down toward negative infinity.

Replaces the floating-point value in ST0 with its integer part: Int rounds down toward negative infinity (Fix(-2.5) = -2, Int(-2.5) = -3). The type is unchanged.

Stack: [..., a] -> [..., Int(a)]

When the compiler emits it

Emitted for Int(x) where x is Single. (1,E7) is the Double/Date/String form; same handler. Variant arguments use FnIntVar.

VB6 source (verified: compiles to this slot)
Public Sub Main()
  Dim a As Single, c As Single
  c = Int(a)
End Sub
Encoding, evidence and notes
Encoding

Encoding: FB E6 (lead byte FB selects table 1), then 0 operand byte(s); total instruction length 2 byte(s).
Operands: none. All inputs come from the evaluation stack or the frame.
Observed: FBE6 FnIntR8

Evidence and notes

Emitted by VB6 SP6 (P-code): yes. Minimal probe: probes\op\1_E6_FnIntR8.

Handler: 0x66105EE5, shared by 2 dispatch slots (real opcode #340). This is a duplicate slot of (1,E7) FnIntR8. Other slots: (1,E7) FnIntR8.

Compile-time slot selection: the compiler picks different slots of this handler for different source types:

  • (1,E6): Dim a As Single, c As Single : c = Int(a)
  • (1,E7): Dim a As Double, c As Double : c = Int(a)

Finding: Compiler selects this slot for Int(<Single>). (1,E7) is used for Double/Date/String. Effective meaning: FnIntR4.

Check of vb6_source_eq example: verified: compiles and emits this slot.

Example from the description
Dim a As Single, c As Single
a = -2.5
c = Int(a)
Slots sharing this handler

(1,0xE7) FnIntR8

Description: draft, by claude-opus-5-5. Handler 0x66105EE5, dispatch slot 0x661074AC, modOpcodes line 926.

FnIntR8

(1,0xE7)emittedprimary of 2handler #340Floating pointconfirmed_handler1 corpus hits
Int() of a Double, Date or String value: rounds down toward negative infinity.

Replaces the floating-point value in ST0 with its integer part: Int rounds down toward negative infinity (Fix(-2.5) = -2, Int(-2.5) = -3). The type is unchanged.

Stack: [..., a] -> [..., Int(a)]

When the compiler emits it

Emitted for Int(x) where x is Double, Date or String. (1,E6) is the Single form; same handler. Variant arguments use FnIntVar.

VB6 source (verified: compiles to this slot)
Public Sub Main()
  Dim a As Double, c As Double
  c = Int(a)
End Sub
Encoding, evidence and notes
Encoding

Encoding: FB E7 (lead byte FB selects table 1), then 0 operand byte(s); total instruction length 2 byte(s).
Operands: none. All inputs come from the evaluation stack or the frame.
Observed: FBE7 FnIntR8

Examples
Form2.LongHex @ 0x441B00 | 441B09    FBE7                  FnIntR8

1 occurrence(s) in PDFStreamDumper.

Evidence and notes

Emitted by VB6 SP6 (P-code): yes. Minimal probe: probes\op\1_E7_FnIntR8.

Handler: 0x66105EE5, shared by 2 dispatch slots (real opcode #340). This is the primary slot. Other slots: (1,E6) FnIntR8.

Compile-time slot selection: the compiler picks different slots of this handler for different source types:

  • (1,E6): Dim a As Single, c As Single : c = Int(a)
  • (1,E7): Dim a As Double, c As Double : c = Int(a)

Finding: Compiler selects this slot for Int(<Double|Date|String>).

Check of vb6_source_eq example: verified: compiles and emits this slot.

Corpus: 1 occurrence(s) in PDFStreamDumper_p.exe.

Example from the description
Dim a As Double, c As Double
a = -2.5
c = Int(a)
Slots sharing this handler

(1,0xE6) FnIntR8

Description: draft, by claude-opus-5-5. Handler 0x66105EE5, dispatch slot 0x661074B0, modOpcodes line 927.

FnIntVar

(1,0xE9)emittedhandler #342Variantinferred_corpus
Variant Int(); result Variant in a temporary.

Pops a Variant, applies Int() (Null propagates) and writes the result Variant to the temporary %a.

Stack: [..., a:Var] -> [..., r:Var]

When the compiler emits it

Emitted for Int() applied to a Variant.

VB6 source (verified: compiles to this slot)
Public Sub Main()
  Dim a As Variant, c As Variant
  c = Int(a)
End Sub
Encoding, evidence and notes
Encoding

Encoding: FB E9 (lead byte FB selects table 1), then 2 operand byte(s); total instruction length 4 byte(s).
vbdec template: %a
Operands:

  1. %a: local_var_ref, 2 byte(s). signed 16-bit offset from the procedure frame pointer (EBP). Negative = local/temporary (vbdec var_XX, XX = -offset), positive = argument (arg_XX).

Observed: FBE9 4CFF FnIntVar var_B4

Examples
FBE9 4CFF  FnIntVar var_B4

From the Phase 4 probe (VB6 SP6, P-code).

Evidence and notes

Emitted by VB6 SP6 (P-code): yes. Minimal probe: probes\op\1_E9_FnIntVar.

Handler: 0x6610ADFE, unique to this slot (real opcode #342).

Check of vb6_source_eq example: verified: compiles and emits this slot.

Example from the description
Public Sub Main()
  Dim a As Variant, c As Variant
  c = Int(a)
End Sub

Description: draft, by claude-opus-5-5. Handler 0x6610ADFE, dispatch slot 0x661074B8, modOpcodes line 1094.

FnSgnCy

(1,0xF7)emittedhandler #350Currencyconfirmed_msdocs
Sgn() of a Currency value; push an Integer (-1, 0 or 1).

Pops the operand and pushes its sign as a 16-bit Integer: -1 if negative, 0 if zero, 1 if positive.

Stack: [..., a] -> [..., s:I2]

When the compiler emits it

Emitted for Sgn(x) where x is Currency.

VB6 source (verified: compiles to this slot)
Public Sub Main()
  Dim a As Currency, c As Variant
  c = Sgn(a)
End Sub
Encoding, evidence and notes
Encoding

Encoding: FB F7 (lead byte FB selects table 1), then 0 operand byte(s); total instruction length 2 byte(s).
Operands: none. All inputs come from the evaluation stack or the frame.
Observed: FBF7 FnSgnCy

Evidence and notes

Emitted by VB6 SP6 (P-code): yes. Minimal probe: probes\op\1_F7_FnSgnCy.

Handler: 0x6610AD85, unique to this slot (real opcode #350).

Check of vb6_source_eq example: verified: compiles and emits this slot.

Example from the description
Dim a As Currency, r As Integer
a = -5
r = Sgn(a)

Description: draft, by claude-opus-5-5. Handler 0x6610AD85, dispatch slot 0x661074F0, modOpcodes line 934.

FnSgnI4

(1,0xF4)emittedhandler #348Integerconfirmed_msdocs
Sgn() of a Long value; push an Integer (-1, 0 or 1).

Pops the operand and pushes its sign as a 16-bit Integer: -1 if negative, 0 if zero, 1 if positive.

Stack: [..., a] -> [..., s:I2]

When the compiler emits it

Emitted for Sgn(x) where x is Long.

VB6 source (verified: compiles to this slot)
Public Sub Main()
  Dim a As Long, c As Variant
  c = Sgn(a)
End Sub
Encoding, evidence and notes
Encoding

Encoding: FB F4 (lead byte FB selects table 1), then 0 operand byte(s); total instruction length 2 byte(s).
Operands: none. All inputs come from the evaluation stack or the frame.
Observed: FBF4 FnSgnI4

Evidence and notes

Emitted by VB6 SP6 (P-code): yes. Minimal probe: probes\op\1_F4_FnSgnI4.

Handler: 0x6610AD82, unique to this slot (real opcode #348).

Check of vb6_source_eq example: verified: compiles and emits this slot.

Example from the description
Dim a As Long, r As Integer
a = -5
r = Sgn(a)

Description: draft, by claude-opus-5-5. Handler 0x6610AD82, dispatch slot 0x661074E4, modOpcodes line 931.

FnSgnR4

(1,0xF6)emitteddup of (1,F5)handler #349Floating pointconfirmed_msdocs
Sgn() of a Double, Date, String or Variant (after coercion) value; push an Integer (-1, 0 or 1).

Pops the operand and pushes its sign as a 16-bit Integer: -1 if negative, 0 if zero, 1 if positive.

Stack: [..., a] -> [..., s:I2]

When the compiler emits it

Emitted for Sgn(x) where x is Double, Date, String or Variant (after coercion). The slot is named FnSgnR4, but probes show it is selected for Double/Date/String (and coerced Variant) arguments; (1,F5) is used for Single. Same handler.

VB6 source (verified: compiles to this slot)
Public Sub Main()
  Dim a As Date, c As Variant
  c = Sgn(a)
End Sub
Encoding, evidence and notes
Encoding

Encoding: FB F6 (lead byte FB selects table 1), then 0 operand byte(s); total instruction length 2 byte(s).
Operands: none. All inputs come from the evaluation stack or the frame.
Observed: FBF6 FnSgnR4

Evidence and notes

Emitted by VB6 SP6 (P-code): yes. Minimal probe: probes\op\1_F6_FnSgnR4.

Handler: 0x6610AD8E, shared by 2 dispatch slots (real opcode #349). This is a duplicate slot of (1,F5) FnSgnR8. Other slots: (1,F5) FnSgnR8.

Compile-time slot selection: the compiler picks different slots of this handler for different source types:

  • (1,F5): Dim a As Single, c As Variant : c = Sgn(a)
  • (1,F6): Dim a As Date, c As Variant : c = Sgn(a)

Check of vb6_source_eq example: verified: compiles and emits this slot.

Example from the description
Dim a As Double, r As Integer
a = -5
r = Sgn(a)
Slots sharing this handler

(1,0xF5) FnSgnR8

Description: draft, by claude-opus-5-5. Handler 0x6610AD8E, dispatch slot 0x661074EC, modOpcodes line 933.

FnSgnR8

(1,0xF5)emittedprimary of 2handler #349Floating pointconfirmed_msdocs
Sgn() of a Single value; push an Integer (-1, 0 or 1).

Pops the operand and pushes its sign as a 16-bit Integer: -1 if negative, 0 if zero, 1 if positive.

Stack: [..., a] -> [..., s:I2]

When the compiler emits it

Emitted for Sgn(x) where x is Single. The slot is named FnSgnR8, but probes show it is selected for Single arguments; (1,F6) is used for Double. Same handler.

VB6 source (verified: compiles to this slot)
Public Sub Main()
  Dim a As Single, c As Variant
  c = Sgn(a)
End Sub
Encoding, evidence and notes
Encoding

Encoding: FB F5 (lead byte FB selects table 1), then 0 operand byte(s); total instruction length 2 byte(s).
Operands: none. All inputs come from the evaluation stack or the frame.
Observed: FBF5 FnSgnR8

Evidence and notes

Emitted by VB6 SP6 (P-code): yes. Minimal probe: probes\op\1_F5_FnSgnR8.

Handler: 0x6610AD8E, shared by 2 dispatch slots (real opcode #349). This is the primary slot. Other slots: (1,F6) FnSgnR4.

Compile-time slot selection: the compiler picks different slots of this handler for different source types:

  • (1,F5): Dim a As Single, c As Variant : c = Sgn(a)
  • (1,F6): Dim a As Date, c As Variant : c = Sgn(a)

Check of vb6_source_eq example: verified: compiles and emits this slot.

Example from the description
Dim a As Single, r As Integer
a = -5
r = Sgn(a)
Slots sharing this handler

(1,0xF6) FnSgnR4

Description: draft, by claude-opus-5-5. Handler 0x6610AD8E, dispatch slot 0x661074E8, modOpcodes line 932.

FnSgnUI1

(1,0xF2)not emitteddup of (1,F3)handler #347Integerconfirmed_msdocs
(duplicate slot of (1,F3) FnSgnUI1) (alias) Pop one 8-bit unsigned integer (VB6 Byte); push its absolute value.

Dispatch slot (1, 0xF2) runs the same MSVBVM60 handler as (1,F3) FnSgnUI1; runtime behaviour is identical.

Alias dispatch slot (1, 0xF3) for the canonical FnSgnUI1 at (1, 0xF2); semantics are identical.

Pops a of type 8-bit unsigned integer (VB6 Byte), pushes |a| of the same type.

Stack: [..., a:UI1] -> [..., |a|:UI1]

Implements VB6 Abs(). For signed integers, Abs(MinValue) raises overflow (error 6). For floating values, the sign bit is cleared; NaN is preserved.

When the compiler emits it

Not emitted by VB6 SP6 in Phase 4 probes. Source that performs this operation (Sgn() of Byte/Integer/Boolean) compiles to (1,F3) FnSgnUI1 instead. The slot is reachable only by hand-crafted or non-VB6-compiled p-code.

Encoding, evidence and notes
Encoding

Encoding: FB F2 (lead byte FB selects table 1), then 0 operand byte(s); total instruction length 2 byte(s).
Operands: none. All inputs come from the evaluation stack or the frame.

Evidence and notes

Emitted by VB6 SP6 (P-code): not observed in about 3,070 probe programs. The slot exists in the runtime's dispatch table, but no tested source construct makes the compiler emit it.

Handler: 0x6610AD6E, shared by 2 dispatch slots (real opcode #347). This is a duplicate slot of (1,F3) FnSgnUI1. Other slots: (1,F3) FnSgnUI1.

Slots sharing this handler

(1,0xF3) FnSgnUI1

Description: draft, by claude-opus-5-5. Handler 0x6610AD6E, dispatch slot 0x661074DC, modOpcodes line 929.

FnSgnUI1

(1,0xF3)emittedprimary of 2handler #347Integerconfirmed_handler
Sgn() of a Integer, Boolean or Byte value; push an Integer (-1, 0 or 1).

Pops the operand and pushes its sign as a 16-bit Integer: -1 if negative, 0 if zero, 1 if positive.

Stack: [..., a] -> [..., s:I2]

When the compiler emits it

Emitted for Sgn(x) where x is Integer, Boolean or Byte. The name suggests Byte, but the compiler also uses this slot for Integer and Boolean arguments.

VB6 source (verified: compiles to this slot)
Public Sub Main()
  Dim a As Integer, c As Integer
  c = Sgn(a)
End Sub
Encoding, evidence and notes
Encoding

Encoding: FB F3 (lead byte FB selects table 1), then 0 operand byte(s); total instruction length 2 byte(s).
Operands: none. All inputs come from the evaluation stack or the frame.
Observed: FBF3 FnSgnUI1

Evidence and notes

Emitted by VB6 SP6 (P-code): yes. Minimal probe: probes\op\1_F3_FnSgnUI1.

Handler: 0x6610AD6E, shared by 2 dispatch slots (real opcode #347). This is the primary slot. Other slots: (1,F2) FnSgnUI1.

Check of vb6_source_eq example: verified: compiles and emits this slot.

Example from the description
Dim a As Integer, r As Integer
a = -5
r = Sgn(a)
Slots sharing this handler

(1,0xF2) FnSgnUI1

Description: draft, by claude-opus-5-5. Handler 0x6610AD6E, dispatch slot 0x661074E0, modOpcodes line 930.

Math_Add

Addition

AddCy

(0,0xAC)emittedprimary of 2handler #169Currencyconfirmed_msdocs
Pop two 64-bit scaled-integer Currency (×10^4) values; push their addition result.

Pops two 64-bit scaled-integer Currency (×10^4) operands b and a (top is b), computes a + b, pushes the 64-bit scaled-integer Currency (×10^4) result.

Stack: [..., a:Cy, b:Cy] -> [..., (a + b):Cy]

Currency arithmetic on the underlying scaled 64-bit integer (4 implicit decimal places). Overflow raises run-time error 6.

When the compiler emits it

Emitted when both operands of + are statically typed as Currency. Mixed-type expressions go through narrower or wider variants (AddR8 if Double appears; AddVar if Variant is involved).

VB6 source (verified: compiles to this slot)
Public Sub Main()
  Dim a As Currency, b As Currency, c As Currency
  c = a + b
End Sub
Encoding, evidence and notes
Encoding

Encoding: AC, then 0 operand byte(s); total instruction length 1 byte(s).
Operands: none. All inputs come from the evaluation stack or the frame.
Observed: AC AddCy

Evidence and notes

Emitted by VB6 SP6 (P-code): yes. Minimal probe: probes\op\0_AC_AddCy.

Handler: 0x6610AADD, shared by 2 dispatch slots (real opcode #169). This is the primary slot. Other slots: (1,93) AddCy.

Check of vb6_source_eq example: verified: compiles and emits this slot.

Example from the description
Dim a As Currency, b As Currency, c As Currency
c = a + b
Slots sharing this handler

(1,0x93) AddCy

Description: draft, by claude-opus-4.7. Handler 0x6610AADD, dispatch slot 0x66106FC4, modOpcodes line 1321.

AddCy

(1,0x93)not emitteddup of (0,AC)handler #169Currencyconfirmed_handler
(alias) Pop two 64-bit scaled-integer Currency (×10^4) values; push their addition result.

Alias dispatch slot (1, 0x93) for the canonical AddCy at (0, 0xAC); semantics are identical.

Pops two 64-bit scaled-integer Currency (×10^4) operands b and a (top is b), computes a + b, pushes the 64-bit scaled-integer Currency (×10^4) result.

Stack: [..., a:Cy, b:Cy] -> [..., (a + b):Cy]

Currency arithmetic on the underlying scaled 64-bit integer (4 implicit decimal places). Overflow raises run-time error 6.

When the compiler emits it

Emitted when both operands of + are statically typed as Currency. Mixed-type expressions go through narrower or wider variants (AddR8 if Double appears; AddVar if Variant is involved).

VB6 source (from description, not verified)
Dim a As Currency, b As Currency, c As Currency
c = a + b
Encoding, evidence and notes
Encoding

Encoding: FB 93 (lead byte FB selects table 1), then 0 operand byte(s); total instruction length 2 byte(s).
Operands: none. All inputs come from the evaluation stack or the frame.

Evidence and notes

Emitted by VB6 SP6 (P-code): not observed in about 3,070 probe programs. The slot exists in the runtime's dispatch table, but no tested source construct makes the compiler emit it.

Handler: 0x6610AADD, shared by 2 dispatch slots (real opcode #169). This is a duplicate slot of (0,AC) AddCy. Other slots: (0,AC) AddCy.

Check of vb6_source_eq example: compiles, but emits a different slot of the same handler. emits (0,AC) AddCy (same handler, different slot)

Slots sharing this handler

(0,0xAC) AddCy

Description: draft, by claude-opus-4.7. Handler 0x6610AADD, dispatch slot 0x66107360, modOpcodes line 1322.

AddI2

(0,0xA9)emittedprimary of 2handler #166Integerconfirmed_msdocs2 corpus hits
Pop two 16-bit signed integer (VB6 Integer) values; push their addition result.

Pops two 16-bit signed integer (VB6 Integer) operands b and a (top is b), computes a + b, pushes the 16-bit signed integer (VB6 Integer) result.

Stack: [..., a:I2, b:I2] -> [..., (a + b):I2]

Arithmetic is two's-complement on the native width. On addition overflow, VB6 raises run-time error 6 (Overflow). Handler-level wrap-vs-trap detail not yet verified.

When the compiler emits it

Emitted when both operands of + are statically typed as Integer. Mixed-type expressions go through narrower or wider variants (AddR8 if Double appears; AddVar if Variant is involved).

VB6 source (verified: compiles to this slot)
Public Sub Main()
  Dim a As Integer, b As Integer, c As Integer
  c = a + b
End Sub
Encoding, evidence and notes
Encoding

Encoding: A9, then 0 operand byte(s); total instruction length 1 byte(s).
Operands: none. All inputs come from the evaluation stack or the frame.
Observed: A9 AddI2

Examples
modEscapes.Proc_472E38 @ 0x472E38 | 4732EF    A9                    AddI2
modEscapes.Proc_4501DC @ 0x4501DC | 450299    A9                    AddI2

2 occurrence(s) in PDFStreamDumper.

Evidence and notes

Emitted by VB6 SP6 (P-code): yes. Minimal probe: probes\op\0_A9_AddI2.

Handler: 0x66105DC2, shared by 2 dispatch slots (real opcode #166). This is the primary slot. Other slots: (1,8F) AddI2.

Check of vb6_source_eq example: verified: compiles and emits this slot.

Corpus: 2 occurrence(s) in PDFStreamDumper_p.exe.

Example from the description
Dim a As Integer, b As Integer, c As Integer
c = a + b
Slots sharing this handler

(1,0x8F) AddI2

Description: draft, by claude-opus-4.7. Handler 0x66105DC2, dispatch slot 0x66106FB8, modOpcodes line 1317.

AddI2

(1,0x8F)not emitteddup of (0,A9)handler #166Integerconfirmed_handler
(alias) Pop two 16-bit signed integer (VB6 Integer) values; push their addition result.

Alias dispatch slot (1, 0x8F) for the canonical AddI2 at (0, 0xA9); semantics are identical.

Pops two 16-bit signed integer (VB6 Integer) operands b and a (top is b), computes a + b, pushes the 16-bit signed integer (VB6 Integer) result.

Stack: [..., a:I2, b:I2] -> [..., (a + b):I2]

Arithmetic is two's-complement on the native width. On addition overflow, VB6 raises run-time error 6 (Overflow). Handler-level wrap-vs-trap detail not yet verified.

When the compiler emits it

Emitted when both operands of + are statically typed as Integer. Mixed-type expressions go through narrower or wider variants (AddR8 if Double appears; AddVar if Variant is involved).

VB6 source (from description, not verified)
Dim a As Integer, b As Integer, c As Integer
c = a + b
Encoding, evidence and notes
Encoding

Encoding: FB 8F (lead byte FB selects table 1), then 0 operand byte(s); total instruction length 2 byte(s).
Operands: none. All inputs come from the evaluation stack or the frame.

Evidence and notes

Emitted by VB6 SP6 (P-code): not observed in about 3,070 probe programs. The slot exists in the runtime's dispatch table, but no tested source construct makes the compiler emit it.

Handler: 0x66105DC2, shared by 2 dispatch slots (real opcode #166). This is a duplicate slot of (0,A9) AddI2. Other slots: (0,A9) AddI2.

Check of vb6_source_eq example: compiles, but emits a different slot of the same handler. emits (0,A9) AddI2 (same handler, different slot)

Slots sharing this handler

(0,0xA9) AddI2

Description: draft, by claude-opus-4.7. Handler 0x66105DC2, dispatch slot 0x66107350, modOpcodes line 1318.

AddI4

(0,0xAA)emittedprimary of 2handler #167Integerconfirmed_msdocs137 corpus hits
Pop two 32-bit signed integer (VB6 Long) values; push their addition result.

Pops two 32-bit signed integer (VB6 Long) operands b and a (top is b), computes a + b, pushes the 32-bit signed integer (VB6 Long) result.

Stack: [..., a:I4, b:I4] -> [..., (a + b):I4]

Arithmetic is two's-complement on the native width. On addition overflow, VB6 raises run-time error 6 (Overflow). Handler-level wrap-vs-trap detail not yet verified.

When the compiler emits it

Emitted when both operands of + are statically typed as Long. Mixed-type expressions go through narrower or wider variants (AddR8 if Double appears; AddVar if Variant is involved).

VB6 source (verified: compiles to this slot)
Public Sub Main()
  Dim a As Long, b As Long, c As Long
  c = a + b
End Sub
Encoding, evidence and notes
Encoding

Encoding: AA, then 0 operand byte(s); total instruction length 1 byte(s).
Operands: none. All inputs come from the evaluation stack or the frame.
Observed: AA AddI4

Examples
Form1.mnuExtractURI_Click @ 0x45774C | 457810    AA                    AddI4
Form1.mnuHideDups_Click @ 0x4629E4 | 462B42    AA                    AddI4
Form1.mnuHideDups_Click @ 0x4629E4 | 462BCB    AA                    AddI4

137 occurrence(s) in PDFStreamDumper.

Evidence and notes

Emitted by VB6 SP6 (P-code): yes. Minimal probe: probes\op\0_AA_AddI4.

Handler: 0x66105DD9, shared by 2 dispatch slots (real opcode #167). This is the primary slot. Other slots: (1,90) AddI4.

Check of vb6_source_eq example: verified: compiles and emits this slot.

Corpus: 137 occurrence(s) in PDFStreamDumper_p.exe.

Example from the description
Dim a As Long, b As Long, c As Long
c = a + b
Slots sharing this handler

(1,0x90) AddI4

Description: draft, by claude-opus-4.7. Handler 0x66105DD9, dispatch slot 0x66106FBC, modOpcodes line 1319.

AddI4

(1,0x90)not emitteddup of (0,AA)handler #167Integerconfirmed_handler
(alias) Pop two 32-bit signed integer (VB6 Long) values; push their addition result.

Alias dispatch slot (1, 0x90) for the canonical AddI4 at (0, 0xAA); semantics are identical.

Pops two 32-bit signed integer (VB6 Long) operands b and a (top is b), computes a + b, pushes the 32-bit signed integer (VB6 Long) result.

Stack: [..., a:I4, b:I4] -> [..., (a + b):I4]

Arithmetic is two's-complement on the native width. On addition overflow, VB6 raises run-time error 6 (Overflow). Handler-level wrap-vs-trap detail not yet verified.

When the compiler emits it

Emitted when both operands of + are statically typed as Long. Mixed-type expressions go through narrower or wider variants (AddR8 if Double appears; AddVar if Variant is involved).

VB6 source (from description, not verified)
Dim a As Long, b As Long, c As Long
c = a + b
Encoding, evidence and notes
Encoding

Encoding: FB 90 (lead byte FB selects table 1), then 0 operand byte(s); total instruction length 2 byte(s).
Operands: none. All inputs come from the evaluation stack or the frame.

Evidence and notes

Emitted by VB6 SP6 (P-code): not observed in about 3,070 probe programs. The slot exists in the runtime's dispatch table, but no tested source construct makes the compiler emit it.

Handler: 0x66105DD9, shared by 2 dispatch slots (real opcode #167). This is a duplicate slot of (0,AA) AddI4. Other slots: (0,AA) AddI4.

Check of vb6_source_eq example: compiles, but emits a different slot of the same handler. emits (0,AA) AddI4 (same handler, different slot)

Slots sharing this handler

(0,0xAA) AddI4

Description: draft, by claude-opus-4.7. Handler 0x66105DD9, dispatch slot 0x66107354, modOpcodes line 1320.

AddR4

(1,0x91)not emitteddup of (0,AB)handler #168Floating pointconfirmed_msdocs
Pop two 32-bit IEEE 754 float (VB6 Single) values; push their addition result.

Pops two 32-bit IEEE 754 float (VB6 Single) operands b and a (top is b), computes a + b, pushes the 32-bit IEEE 754 float (VB6 Single) result.

Stack: [..., a:R4, b:R4] -> [..., (a + b):R4]

IEEE 754 single-precision arithmetic. NaN and infinity propagate per the standard; overflow yields +/-Inf (which the runtime then maps to runtime error 6 in normal expression contexts).

When the compiler emits it

Emitted when both operands of + are statically typed as Single. Mixed-type expressions go through narrower or wider variants (AddR8 if Double appears; AddVar if Variant is involved).

VB6 source (from description, not verified)
Dim a As Single, b As Single, c As Single
c = a + b
Encoding, evidence and notes
Encoding

Encoding: FB 91 (lead byte FB selects table 1), then 0 operand byte(s); total instruction length 2 byte(s).
Operands: none. All inputs come from the evaluation stack or the frame.

Evidence and notes

Emitted by VB6 SP6 (P-code): not observed in about 3,070 probe programs. The slot exists in the runtime's dispatch table, but no tested source construct makes the compiler emit it.

Handler: 0x66105DEF, shared by 3 dispatch slots (real opcode #168). This is a duplicate slot of (0,AB) AddR8. Other slots: (0,AB) AddR8, (1,92) AddR4.

Finding: Phase 4: Single arithmetic and comparisons compile to the R8 FPU opcodes (AddR8, LtR8, and so on). Operands are loaded with FLdFPR4 and stored with FStFPR4. This *R4 slot was never emitted.

Check of vb6_source_eq example: compiles, but emits a different slot of the same handler. emits (0,AB) AddR8 (same handler, different slot)

Slots sharing this handler

(0,0xAB) AddR8, (1,0x92) AddR4

Description: draft, by claude-opus-4.7. Handler 0x66105DEF, dispatch slot 0x66107358, modOpcodes line 1324.

AddR4

(1,0x92)not emitteddup of (0,AB)handler #168Floating pointconfirmed_handler
(alias) Pop two 32-bit IEEE 754 float (VB6 Single) values; push their addition result.

Alias dispatch slot (1, 0x92) for the canonical AddR4 at (1, 0x91); semantics are identical.

Pops two 32-bit IEEE 754 float (VB6 Single) operands b and a (top is b), computes a + b, pushes the 32-bit IEEE 754 float (VB6 Single) result.

Stack: [..., a:R4, b:R4] -> [..., (a + b):R4]

IEEE 754 single-precision arithmetic. NaN and infinity propagate per the standard; overflow yields +/-Inf (which the runtime then maps to runtime error 6 in normal expression contexts).

When the compiler emits it

Emitted when both operands of + are statically typed as Single. Mixed-type expressions go through narrower or wider variants (AddR8 if Double appears; AddVar if Variant is involved).

VB6 source (from description, not verified)
Dim a As Single, b As Single, c As Single
c = a + b
Encoding, evidence and notes
Encoding

Encoding: FB 92 (lead byte FB selects table 1), then 0 operand byte(s); total instruction length 2 byte(s).
Operands: none. All inputs come from the evaluation stack or the frame.

Evidence and notes

Emitted by VB6 SP6 (P-code): not observed in about 3,070 probe programs. The slot exists in the runtime's dispatch table, but no tested source construct makes the compiler emit it.

Handler: 0x66105DEF, shared by 3 dispatch slots (real opcode #168). This is a duplicate slot of (0,AB) AddR8. Other slots: (0,AB) AddR8, (1,91) AddR4.

Finding: Phase 4: Single arithmetic and comparisons compile to the R8 FPU opcodes (AddR8, LtR8, and so on). Operands are loaded with FLdFPR4 and stored with FStFPR4. This *R4 slot was never emitted.

Check of vb6_source_eq example: compiles, but emits a different slot of the same handler. emits (0,AB) AddR8 (same handler, different slot)

Slots sharing this handler

(0,0xAB) AddR8, (1,0x91) AddR4

Description: draft, by claude-opus-4.7. Handler 0x66105DEF, dispatch slot 0x6610735C, modOpcodes line 1325.

AddR8

(0,0xAB)emittedprimary of 3handler #168Floating pointconfirmed_msdocs8 corpus hits
Pop two 64-bit IEEE 754 float (VB6 Double) values; push their addition result.

Pops two 64-bit IEEE 754 float (VB6 Double) operands b and a (top is b), computes a + b, pushes the 64-bit IEEE 754 float (VB6 Double) result.

Stack: [..., a:R8, b:R8] -> [..., (a + b):R8]

IEEE 754 double-precision arithmetic. NaN and infinity propagate per the standard; overflow yields +/-Inf (which the runtime then maps to runtime error 6 in normal expression contexts).

When the compiler emits it

Emitted when both operands of + are statically typed as Double. Mixed-type expressions go through narrower or wider variants (AddR8 if Double appears; AddVar if Variant is involved).

VB6 source (verified: compiles to this slot)
Public Sub Main()
  Dim a As Single, b As Single, c As Single
  c = a + b
End Sub
Encoding, evidence and notes
Encoding

Encoding: AB, then 0 operand byte(s); total instruction length 1 byte(s).
Operands: none. All inputs come from the evaluation stack or the frame.
Observed: AB AddR8

Examples
Form1.Form_Resize @ 0x474F3C | 4751F7    AB                    AddR8
Form1.Proc_440DC4 @ 0x440DC4 | 440DE3    AB                    AddR8
Form2.splitter_MouseMove (Button As Integer, Shift As Integer, X As Single, Y As Single) @ 0x4458E0 | 445949    AB                    AddR8

8 occurrence(s) in PDFStreamDumper.

Evidence and notes

Emitted by VB6 SP6 (P-code): yes. Minimal probe: probes\op\0_AB_AddR8.

Handler: 0x66105DEF, shared by 3 dispatch slots (real opcode #168). This is the primary slot. Other slots: (1,91) AddR4, (1,92) AddR4.

Check of vb6_source_eq example: verified: compiles and emits this slot.

Corpus: 8 occurrence(s) in PDFStreamDumper_p.exe.

Example from the description
Dim a As Double, b As Double, c As Double
c = a + b
Slots sharing this handler

(1,0x91) AddR4, (1,0x92) AddR4

Description: draft, by claude-opus-4.7. Handler 0x66105DEF, dispatch slot 0x66106FC0, modOpcodes line 1326.

AddUI1

(1,0x8E)emittedhandler #318Integerconfirmed_msdocs
Pop two 8-bit unsigned integer (VB6 Byte) values; push their addition result.

Pops two 8-bit unsigned integer (VB6 Byte) operands b and a (top is b), computes a + b, pushes the 8-bit unsigned integer (VB6 Byte) result.

Stack: [..., a:UI1, b:UI1] -> [..., (a + b):UI1]

When the compiler emits it

Emitted when both operands of + are statically typed as Byte. Mixed-type expressions go through narrower or wider variants (AddR8 if Double appears; AddVar if Variant is involved).

VB6 source (verified: compiles to this slot)
Public Sub Main()
  Dim a As Byte, b As Byte, c As Byte
  c = a + b
End Sub
Encoding, evidence and notes
Encoding

Encoding: FB 8E (lead byte FB selects table 1), then 0 operand byte(s); total instruction length 2 byte(s).
Operands: none. All inputs come from the evaluation stack or the frame.
Observed: FB8E AddUI1

Evidence and notes

Emitted by VB6 SP6 (P-code): yes. Minimal probe: probes\op\1_8E_AddUI1.

Handler: 0x6610AAC7, unique to this slot (real opcode #318).

Check of vb6_source_eq example: verified: compiles and emits this slot.

Example from the description
Dim a As Byte, b As Byte, c As Byte
c = a + b

Description: draft, by claude-opus-4.7. Handler 0x6610AAC7, dispatch slot 0x6610734C, modOpcodes line 1323.

AddVar

(1,0x94)emittedhandler #319Variantinferred_corpus94 corpus hits
Pop two VBA Variant values; push their addition result.

Pops two VBA Variant operands b and a (top is b), computes a + b, pushes the VBA Variant result.

Stack: [..., a:Var, b:Var] -> [..., (a + b):Var]

Variant operands are coerced and the result type promoted per VB6 rules (Integer -> Long -> Double; presence of Currency forces Currency; presence of String triggers numeric parsing). Type-mismatch raises run-time error 13; arithmetic overflow raises error 6.

When the compiler emits it

Emitted when at least one operand of + is a Variant. Same-typed primitive operands instead emit AddI2/AddI4/AddR4/AddR8/AddCy.

VB6 source (verified: compiles to this slot)
Public Sub Main()
  Dim v As Variant, w As Variant, x As Variant
  x = v + w
End Sub
Encoding, evidence and notes
Encoding

Encoding: FB 94 (lead byte FB selects table 1), then 2 operand byte(s); total instruction length 4 byte(s).
vbdec template: %a
Operands:

  1. %a: local_var_ref, 2 byte(s). signed 16-bit offset from the procedure frame pointer (EBP). Negative = local/temporary (vbdec var_XX, XX = -offset), positive = argument (arg_XX).

Observed: FB94 3CFF AddVar var_C4

Examples
CPDFStream.Proc_45998C @ 0x45998C | 4599A3    FB94 34FF             AddVar var_CC
Form2.ExtractFunction @ 0x45FB40 | 45FD39    FB94 0CFF             AddVar var_F4
Form2.mnuHex2Unicode_Click @ 0x45D160 | 45D2BF    FB94 68FF             AddVar var_98

94 occurrence(s) in PDFStreamDumper.

Evidence and notes

Emitted by VB6 SP6 (P-code): yes. Minimal probe: probes\op\1_94_AddVar.

Handler: 0x66105F6C, unique to this slot (real opcode #319).

Check of vb6_source_eq example: verified: compiles and emits this slot.

Corpus: 94 occurrence(s) in PDFStreamDumper_p.exe.

Example from the description
Dim a As Variant, b As Variant, c As Variant
c = a + b

Description: draft, by claude-opus-4.7. Handler 0x66105F6C, dispatch slot 0x66107364, modOpcodes line 1327.

Math_Div

FP division

DivR8

(0,0xB6)emittedprimary of 3handler #179Floating pointconfirmed_msdocs30 corpus hits
Pop two 64-bit IEEE 754 float (VB6 Double) values; push their floating-point division result.

Pops two 64-bit IEEE 754 float (VB6 Double) operands b and a (top is b), computes a / b, pushes the 64-bit IEEE 754 float (VB6 Double) result.

Stack: [..., a:R8, b:R8] -> [..., (a / b):R8]

IEEE 754 double-precision arithmetic. NaN and infinity propagate per the standard; overflow yields +/-Inf (which the runtime then maps to runtime error 6 in normal expression contexts).

When the compiler emits it

Emitted when both operands of / are statically typed as Double. Mixed-type expressions go through narrower or wider variants (DivR8 if Double appears; DivVar if Variant is involved).

VB6 source (verified: compiles to this slot)
Public Sub Main()
  Dim a As Single, b As Single, c As Single
  c = a / b
End Sub
Encoding, evidence and notes
Encoding

Encoding: B6, then 0 operand byte(s); total instruction length 1 byte(s).
Operands: none. All inputs come from the evaluation stack or the frame.
Observed: B6 DivR8

Examples
Form1.cmdDecode_Click @ 0x4775C0 | 477E88    B6                    DivR8
Form1.cmdDecode_Click @ 0x4775C0 | 477EAF    B6                    DivR8
Form1.cmdDecode_Click @ 0x4775C0 | 477EE8    B6                    DivR8

30 occurrence(s) in PDFStreamDumper.

Evidence and notes

Emitted by VB6 SP6 (P-code): yes. Minimal probe: probes\op\0_B6_DivR8.

Handler: 0x66105E86, shared by 3 dispatch slots (real opcode #179). This is the primary slot. Other slots: (1,B9) DivR8, (1,BA) DivR8.

Check of vb6_source_eq example: verified: compiles and emits this slot.

Corpus: 30 occurrence(s) in PDFStreamDumper_p.exe.

Example from the description
Dim a As Double, b As Double, c As Double
c = a / b
Slots sharing this handler

(1,0xB9) DivR8, (1,0xBA) DivR8

Description: draft, by claude-opus-4.7. Handler 0x66105E86, dispatch slot 0x66106FEC, modOpcodes line 1355.

DivR8

(1,0xB9)not emitteddup of (0,B6)handler #179Floating pointconfirmed_handler
(alias) Pop two 64-bit IEEE 754 float (VB6 Double) values; push their floating-point division result.

Alias dispatch slot (1, 0xB9) for the canonical DivR8 at (0, 0xB6); semantics are identical.

Pops two 64-bit IEEE 754 float (VB6 Double) operands b and a (top is b), computes a / b, pushes the 64-bit IEEE 754 float (VB6 Double) result.

Stack: [..., a:R8, b:R8] -> [..., (a / b):R8]

IEEE 754 double-precision arithmetic. NaN and infinity propagate per the standard; overflow yields +/-Inf (which the runtime then maps to runtime error 6 in normal expression contexts).

When the compiler emits it

Emitted when both operands of / are statically typed as Double. Mixed-type expressions go through narrower or wider variants (DivR8 if Double appears; DivVar if Variant is involved).

VB6 source (from description, not verified)
Dim a As Double, b As Double, c As Double
c = a / b
Encoding, evidence and notes
Encoding

Encoding: FB B9 (lead byte FB selects table 1), then 0 operand byte(s); total instruction length 2 byte(s).
Operands: none. All inputs come from the evaluation stack or the frame.

Evidence and notes

Emitted by VB6 SP6 (P-code): not observed in about 3,070 probe programs. The slot exists in the runtime's dispatch table, but no tested source construct makes the compiler emit it.

Handler: 0x66105E86, shared by 3 dispatch slots (real opcode #179). This is a duplicate slot of (0,B6) DivR8. Other slots: (0,B6) DivR8, (1,BA) DivR8.

Check of vb6_source_eq example: compiles, but emits a different slot of the same handler. emits (0,B6) DivR8 (same handler, different slot)

Slots sharing this handler

(0,0xB6) DivR8, (1,0xBA) DivR8

Description: draft, by claude-opus-4.7. Handler 0x66105E86, dispatch slot 0x661073F8, modOpcodes line 1356.

DivR8

(1,0xBA)not emitteddup of (0,B6)handler #179Floating pointconfirmed_handler
(alias) Pop two 64-bit IEEE 754 float (VB6 Double) values; push their floating-point division result.

Alias dispatch slot (1, 0xBA) for the canonical DivR8 at (0, 0xB6); semantics are identical.

Pops two 64-bit IEEE 754 float (VB6 Double) operands b and a (top is b), computes a / b, pushes the 64-bit IEEE 754 float (VB6 Double) result.

Stack: [..., a:R8, b:R8] -> [..., (a / b):R8]

IEEE 754 double-precision arithmetic. NaN and infinity propagate per the standard; overflow yields +/-Inf (which the runtime then maps to runtime error 6 in normal expression contexts).

When the compiler emits it

Emitted when both operands of / are statically typed as Double. Mixed-type expressions go through narrower or wider variants (DivR8 if Double appears; DivVar if Variant is involved).

VB6 source (from description, not verified)
Dim a As Double, b As Double, c As Double
c = a / b
Encoding, evidence and notes
Encoding

Encoding: FB BA (lead byte FB selects table 1), then 0 operand byte(s); total instruction length 2 byte(s).
Operands: none. All inputs come from the evaluation stack or the frame.

Evidence and notes

Emitted by VB6 SP6 (P-code): not observed in about 3,070 probe programs. The slot exists in the runtime's dispatch table, but no tested source construct makes the compiler emit it.

Handler: 0x66105E86, shared by 3 dispatch slots (real opcode #179). This is a duplicate slot of (0,B6) DivR8. Other slots: (0,B6) DivR8, (1,B9) DivR8.

Check of vb6_source_eq example: compiles, but emits a different slot of the same handler. emits (0,B6) DivR8 (same handler, different slot)

Slots sharing this handler

(0,0xB6) DivR8, (1,0xB9) DivR8

Description: draft, by claude-opus-4.7. Handler 0x66105E86, dispatch slot 0x661073FC, modOpcodes line 1357.

DivVar

(1,0xBC)emittedhandler #328Variantinferred_corpus2 corpus hits
Pop two VBA Variant values; push their floating-point division result.

Pops two VBA Variant operands b and a (top is b), computes a / b, pushes the VBA Variant result.

Stack: [..., a:Var, b:Var] -> [..., (a / b):Var]

Variant operands are coerced and the result type promoted per VB6 rules (Integer -> Long -> Double; presence of Currency forces Currency; presence of String triggers numeric parsing). Type-mismatch raises run-time error 13; arithmetic overflow raises error 6.

When the compiler emits it

Emitted when at least one operand of / is a Variant. Same-typed primitive operands instead emit DivI2/DivI4/DivR4/DivR8/DivCy.

VB6 source (verified: compiles to this slot)
Public Sub Main()
  Dim a As Variant, b As Variant, c As Variant
  c = a / b
End Sub
Encoding, evidence and notes
Encoding

Encoding: FB BC (lead byte FB selects table 1), then 2 operand byte(s); total instruction length 4 byte(s).
vbdec template: %a
Operands:

  1. %a: local_var_ref, 2 byte(s). signed 16-bit offset from the procedure frame pointer (EBP). Negative = local/temporary (vbdec var_XX, XX = -offset), positive = argument (arg_XX).

Observed: FBBC 3CFF DivVar var_C4

Examples
b64.Proc_469B0C @ 0x469B0C | 469C09    FBBC 40FF             DivVar var_C0
frmBruteZLib.setPB @ 0x4444FC | 444511    FBBC 4CFF             DivVar var_B4

2 occurrence(s) in PDFStreamDumper.

Evidence and notes

Emitted by VB6 SP6 (P-code): yes. Minimal probe: probes\op\1_BC_DivVar.

Handler: 0x66105F5C, unique to this slot (real opcode #328).

Check of vb6_source_eq example: verified: compiles and emits this slot.

Corpus: 2 occurrence(s) in PDFStreamDumper_p.exe.

Example from the description
Dim a As Variant, b As Variant, c As Variant
c = a / b

Description: draft, by claude-opus-4.7. Handler 0x66105F5C, dispatch slot 0x66107404, modOpcodes line 1363.

Math_IDiv

Integer division

IDvI2

(0,0xBF)emittedprimary of 2handler #188Integerconfirmed_msdocs13 corpus hits
Pop two 16-bit signed integer (VB6 Integer) values; push their integer division (truncated) result.

Pops two 16-bit signed integer (VB6 Integer) operands b and a (top is b), computes a \ b, pushes the 16-bit signed integer (VB6 Integer) result.

Stack: [..., a:I2, b:I2] -> [..., (a \ b):I2]

Arithmetic is two's-complement on the native width. On integer division (truncated) overflow, VB6 raises run-time error 6 (Overflow). Handler-level wrap-vs-trap detail not yet verified.

When the compiler emits it

Emitted when both operands of \ are statically typed as Integer. Mixed-type expressions go through narrower or wider variants (IDvR8 if Double appears; IDvVar if Variant is involved).

VB6 source (verified: compiles to this slot)
Public Sub Main()
  Dim a As Integer, b As Integer, c As Integer
  c = a \ b
End Sub
Encoding, evidence and notes
Encoding

Encoding: BF, then 0 operand byte(s); total instruction length 1 byte(s).
Operands: none. All inputs come from the evaluation stack or the frame.
Observed: BF IDvI2

Examples
b64.Proc_464C2C @ 0x464C2C | 464CD3    BF                    IDvI2
b64.Proc_464C2C @ 0x464C2C | 464D09    BF                    IDvI2
b64.Proc_464C2C @ 0x464C2C | 464D4C    BF                    IDvI2

13 occurrence(s) in PDFStreamDumper.

Evidence and notes

Emitted by VB6 SP6 (P-code): yes. Minimal probe: probes\op\0_BF_IDvI2.

Handler: 0x66105E5E, shared by 2 dispatch slots (real opcode #188). This is the primary slot. Other slots: (1,A7) IDvI2.

Check of vb6_source_eq example: verified: compiles and emits this slot.

Corpus: 13 occurrence(s) in PDFStreamDumper_p.exe.

Example from the description
Dim a As Integer, b As Integer, c As Integer
c = a \ b
Slots sharing this handler

(1,0xA7) IDvI2

Description: draft, by claude-opus-4.7. Handler 0x66105E5E, dispatch slot 0x66107010, modOpcodes line 1358.

IDvI2

(1,0xA7)not emitteddup of (0,BF)handler #188Integerconfirmed_handler
(alias) Pop two 16-bit signed integer (VB6 Integer) values; push their integer division (truncated) result.

Alias dispatch slot (1, 0xA7) for the canonical IDvI2 at (0, 0xBF); semantics are identical.

Pops two 16-bit signed integer (VB6 Integer) operands b and a (top is b), computes a \ b, pushes the 16-bit signed integer (VB6 Integer) result.

Stack: [..., a:I2, b:I2] -> [..., (a \ b):I2]

Arithmetic is two's-complement on the native width. On integer division (truncated) overflow, VB6 raises run-time error 6 (Overflow). Handler-level wrap-vs-trap detail not yet verified.

When the compiler emits it

Emitted when both operands of \ are statically typed as Integer. Mixed-type expressions go through narrower or wider variants (IDvR8 if Double appears; IDvVar if Variant is involved).

VB6 source (from description, not verified)
Dim a As Integer, b As Integer, c As Integer
c = a \ b
Encoding, evidence and notes
Encoding

Encoding: FB A7 (lead byte FB selects table 1), then 0 operand byte(s); total instruction length 2 byte(s).
Operands: none. All inputs come from the evaluation stack or the frame.

Evidence and notes

Emitted by VB6 SP6 (P-code): not observed in about 3,070 probe programs. The slot exists in the runtime's dispatch table, but no tested source construct makes the compiler emit it.

Handler: 0x66105E5E, shared by 2 dispatch slots (real opcode #188). This is a duplicate slot of (0,BF) IDvI2. Other slots: (0,BF) IDvI2.

Check of vb6_source_eq example: compiles, but emits a different slot of the same handler. emits (0,BF) IDvI2 (same handler, different slot)

Slots sharing this handler

(0,0xBF) IDvI2

Description: draft, by claude-opus-4.7. Handler 0x66105E5E, dispatch slot 0x661073B0, modOpcodes line 1361.

IDvI4

(0,0xC0)emittedprimary of 2handler #189Integerconfirmed_msdocs6 corpus hits
Pop two 32-bit signed integer (VB6 Long) values; push their integer division (truncated) result.

Pops two 32-bit signed integer (VB6 Long) operands b and a (top is b), computes a \ b, pushes the 32-bit signed integer (VB6 Long) result.

Stack: [..., a:I4, b:I4] -> [..., (a \ b):I4]

Arithmetic is two's-complement on the native width. On integer division (truncated) overflow, VB6 raises run-time error 6 (Overflow). Handler-level wrap-vs-trap detail not yet verified.

When the compiler emits it

Emitted when both operands of \ are statically typed as Long. Mixed-type expressions go through narrower or wider variants (IDvR8 if Double appears; IDvVar if Variant is involved).

VB6 source (verified: compiles to this slot)
Public Sub Main()
  Dim a As Long, b As Long, c As Long
  c = a \ b
End Sub
Encoding, evidence and notes
Encoding

Encoding: C0, then 0 operand byte(s); total instruction length 1 byte(s).
Operands: none. All inputs come from the evaluation stack or the frame.
Observed: C0 IDvI4

Examples
CPdfParser.Proc_457140 @ 0x457140 | 4571FF    C0                    IDvI4
modCrc.Proc_446CFC @ 0x446CFC | 446D5D    C0                    IDvI4
modCrc.Proc_446CFC @ 0x446CFC | 446D83    C0                    IDvI4

6 occurrence(s) in PDFStreamDumper.

Evidence and notes

Emitted by VB6 SP6 (P-code): yes. Minimal probe: probes\op\0_C0_IDvI4.

Handler: 0x6610ABC3, shared by 2 dispatch slots (real opcode #189). This is the primary slot. Other slots: (1,A8) IDvI4.

Check of vb6_source_eq example: verified: compiles and emits this slot.

Corpus: 6 occurrence(s) in PDFStreamDumper_p.exe.

Example from the description
Dim a As Long, b As Long, c As Long
c = a \ b
Slots sharing this handler

(1,0xA8) IDvI4

Description: draft, by claude-opus-4.7. Handler 0x6610ABC3, dispatch slot 0x66107014, modOpcodes line 1359.

IDvI4

(1,0xA8)not emitteddup of (0,C0)handler #189Integerconfirmed_handler
(alias) Pop two 32-bit signed integer (VB6 Long) values; push their integer division (truncated) result.

Alias dispatch slot (1, 0xA8) for the canonical IDvI4 at (0, 0xC0); semantics are identical.

Pops two 32-bit signed integer (VB6 Long) operands b and a (top is b), computes a \ b, pushes the 32-bit signed integer (VB6 Long) result.

Stack: [..., a:I4, b:I4] -> [..., (a \ b):I4]

Arithmetic is two's-complement on the native width. On integer division (truncated) overflow, VB6 raises run-time error 6 (Overflow). Handler-level wrap-vs-trap detail not yet verified.

When the compiler emits it

Emitted when both operands of \ are statically typed as Long. Mixed-type expressions go through narrower or wider variants (IDvR8 if Double appears; IDvVar if Variant is involved).

VB6 source (from description, not verified)
Dim a As Long, b As Long, c As Long
c = a \ b
Encoding, evidence and notes
Encoding

Encoding: FB A8 (lead byte FB selects table 1), then 0 operand byte(s); total instruction length 2 byte(s).
Operands: none. All inputs come from the evaluation stack or the frame.

Evidence and notes

Emitted by VB6 SP6 (P-code): not observed in about 3,070 probe programs. The slot exists in the runtime's dispatch table, but no tested source construct makes the compiler emit it.

Handler: 0x6610ABC3, shared by 2 dispatch slots (real opcode #189). This is a duplicate slot of (0,C0) IDvI4. Other slots: (0,C0) IDvI4.

Check of vb6_source_eq example: compiles, but emits a different slot of the same handler. emits (0,C0) IDvI4 (same handler, different slot)

Slots sharing this handler

(0,0xC0) IDvI4

Description: draft, by claude-opus-4.7. Handler 0x6610ABC3, dispatch slot 0x661073B4, modOpcodes line 1362.

IDvUI1

(1,0xA6)emittedhandler #324Integerconfirmed_msdocs
Pop two 8-bit unsigned integer (VB6 Byte) values; push their integer division (truncated) result.

Pops two 8-bit unsigned integer (VB6 Byte) operands b and a (top is b), computes a \ b, pushes the 8-bit unsigned integer (VB6 Byte) result.

Stack: [..., a:UI1, b:UI1] -> [..., (a \ b):UI1]

When the compiler emits it

Emitted when both operands of \ are statically typed as Byte. Mixed-type expressions go through narrower or wider variants (IDvR8 if Double appears; IDvVar if Variant is involved).

VB6 source (verified: compiles to this slot)
Public Sub Main()
  Dim a As Byte, b As Byte, c As Byte
  c = a \ b
End Sub
Encoding, evidence and notes
Encoding

Encoding: FB A6 (lead byte FB selects table 1), then 0 operand byte(s); total instruction length 2 byte(s).
Operands: none. All inputs come from the evaluation stack or the frame.
Observed: FBA6 IDvUI1

Evidence and notes

Emitted by VB6 SP6 (P-code): yes. Minimal probe: probes\op\1_A6_IDvUI1.

Handler: 0x6610AB9B, unique to this slot (real opcode #324).

Check of vb6_source_eq example: verified: compiles and emits this slot.

Example from the description
Dim a As Byte, b As Byte, c As Byte
c = a \ b

Description: draft, by claude-opus-4.7. Handler 0x6610AB9B, dispatch slot 0x661073AC, modOpcodes line 1360.

IDvVar

(1,0xAC)emittedhandler #325Variantinferred_corpus
Variant integer division (\); result Variant in a temporary.

Pops two Variants, applies integer division (\) with VB's Variant coercion and Null-propagation rules, and writes the result Variant to the temporary %a, whose address is pushed.

Stack: [..., a:Var, b:Var] -> [..., r:Var]

When the compiler emits it

Emitted when either operand of integer division (\) is a Variant.

VB6 source (verified: compiles to this slot)
Public Sub Main()
  Dim a As Variant, b As Variant, c As Variant
  c = a \ b
End Sub
Encoding, evidence and notes
Encoding

Encoding: FB AC (lead byte FB selects table 1), then 2 operand byte(s); total instruction length 4 byte(s).
vbdec template: %a
Operands:

  1. %a: local_var_ref, 2 byte(s). signed 16-bit offset from the procedure frame pointer (EBP). Negative = local/temporary (vbdec var_XX, XX = -offset), positive = argument (arg_XX).

Observed: FBAC 3CFF IDvVar var_C4

Examples
FBAC 3CFF  IDvVar var_C4

From the Phase 4 probe (VB6 SP6, P-code).

Evidence and notes

Emitted by VB6 SP6 (P-code): yes. Minimal probe: probes\op\1_AC_IDvVar.

Handler: 0x66105F64, unique to this slot (real opcode #325).

Check of vb6_source_eq example: verified: compiles and emits this slot.

Example from the description
Public Sub Main()
  Dim a As Variant, b As Variant, c As Variant
  c = a \ b
End Sub

Description: draft, by claude-opus-5-5. Handler 0x66105F64, dispatch slot 0x661073C4, modOpcodes line 1364.

Math_Mod

Modulo

ModI2

(0,0xC1)emittedprimary of 2handler #190Integerconfirmed_msdocs
Pop two 16-bit signed integer (VB6 Integer) values; push their modulo result.

Pops two 16-bit signed integer (VB6 Integer) operands b and a (top is b), computes a Mod b, pushes the 16-bit signed integer (VB6 Integer) result.

Stack: [..., a:I2, b:I2] -> [..., (a Mod b):I2]

Arithmetic is two's-complement on the native width. On modulo overflow, VB6 raises run-time error 6 (Overflow). Handler-level wrap-vs-trap detail not yet verified.

When the compiler emits it

Emitted when both operands of Mod are statically typed as Integer. Mixed-type expressions go through narrower or wider variants (ModR8 if Double appears; ModVar if Variant is involved).

VB6 source (verified: compiles to this slot)
Public Sub Main()
  Dim a As Integer, b As Integer, c As Integer
  c = a Mod b
End Sub
Encoding, evidence and notes
Encoding

Encoding: C1, then 0 operand byte(s); total instruction length 1 byte(s).
Operands: none. All inputs come from the evaluation stack or the frame.
Observed: C1 ModI2

Evidence and notes

Emitted by VB6 SP6 (P-code): yes. Minimal probe: probes\op\0_C1_ModI2.

Handler: 0x66105E72, shared by 2 dispatch slots (real opcode #190). This is the primary slot. Other slots: (1,9F) ModI2.

Check of vb6_source_eq example: verified: compiles and emits this slot.

Example from the description
Dim a As Integer, b As Integer, c As Integer
c = a Mod b
Slots sharing this handler

(1,0x9F) ModI2

Description: draft, by claude-opus-4.7. Handler 0x66105E72, dispatch slot 0x66107018, modOpcodes line 1382.

ModI2

(1,0x9F)not emitteddup of (0,C1)handler #190Integerconfirmed_handler
(alias) Pop two 16-bit signed integer (VB6 Integer) values; push their modulo result.

Alias dispatch slot (1, 0x9F) for the canonical ModI2 at (0, 0xC1); semantics are identical.

Pops two 16-bit signed integer (VB6 Integer) operands b and a (top is b), computes a Mod b, pushes the 16-bit signed integer (VB6 Integer) result.

Stack: [..., a:I2, b:I2] -> [..., (a Mod b):I2]

Arithmetic is two's-complement on the native width. On modulo overflow, VB6 raises run-time error 6 (Overflow). Handler-level wrap-vs-trap detail not yet verified.

When the compiler emits it

Emitted when both operands of Mod are statically typed as Integer. Mixed-type expressions go through narrower or wider variants (ModR8 if Double appears; ModVar if Variant is involved).

VB6 source (from description, not verified)
Dim a As Integer, b As Integer, c As Integer
c = a Mod b
Encoding, evidence and notes
Encoding

Encoding: FB 9F (lead byte FB selects table 1), then 0 operand byte(s); total instruction length 2 byte(s).
Operands: none. All inputs come from the evaluation stack or the frame.

Evidence and notes

Emitted by VB6 SP6 (P-code): not observed in about 3,070 probe programs. The slot exists in the runtime's dispatch table, but no tested source construct makes the compiler emit it.

Handler: 0x66105E72, shared by 2 dispatch slots (real opcode #190). This is a duplicate slot of (0,C1) ModI2. Other slots: (0,C1) ModI2.

Check of vb6_source_eq example: compiles, but emits a different slot of the same handler. emits (0,C1) ModI2 (same handler, different slot)

Slots sharing this handler

(0,0xC1) ModI2

Description: draft, by claude-opus-4.7. Handler 0x66105E72, dispatch slot 0x66107390, modOpcodes line 1383.

ModI4

(0,0xC2)emittedprimary of 2handler #191Integerconfirmed_msdocs4 corpus hits
Pop two 32-bit signed integer (VB6 Long) values; push their modulo result.

Pops two 32-bit signed integer (VB6 Long) operands b and a (top is b), computes a Mod b, pushes the 32-bit signed integer (VB6 Long) result.

Stack: [..., a:I4, b:I4] -> [..., (a Mod b):I4]

Arithmetic is two's-complement on the native width. On modulo overflow, VB6 raises run-time error 6 (Overflow). Handler-level wrap-vs-trap detail not yet verified.

When the compiler emits it

Emitted when both operands of Mod are statically typed as Long. Mixed-type expressions go through narrower or wider variants (ModR8 if Double appears; ModVar if Variant is involved).

VB6 source (verified: compiles to this slot)
Public Sub Main()
  Dim a As Long, b As Long, c As Long
  c = a Mod b
End Sub
Encoding, evidence and notes
Encoding

Encoding: C2, then 0 operand byte(s); total instruction length 1 byte(s).
Operands: none. All inputs come from the evaluation stack or the frame.
Observed: C2 ModI4

Examples
modZLIB.Proc_4666C0 @ 0x4666C0 | 46696F    C2                    ModI4
modZLIB.Proc_4666C0 @ 0x4666C0 | 466985    C2                    ModI4
b64.Proc_464C2C @ 0x464C2C | 464C52    C2                    ModI4

4 occurrence(s) in PDFStreamDumper.

Evidence and notes

Emitted by VB6 SP6 (P-code): yes. Minimal probe: probes\op\0_C2_ModI4.

Handler: 0x6610ABD5, shared by 2 dispatch slots (real opcode #191). This is the primary slot. Other slots: (1,A0) ModI4.

Check of vb6_source_eq example: verified: compiles and emits this slot.

Corpus: 4 occurrence(s) in PDFStreamDumper_p.exe.

Example from the description
Dim a As Long, b As Long, c As Long
c = a Mod b
Slots sharing this handler

(1,0xA0) ModI4

Description: draft, by claude-opus-4.7. Handler 0x6610ABD5, dispatch slot 0x6610701C, modOpcodes line 1384.

ModI4

(1,0xA0)not emitteddup of (0,C2)handler #191Integerconfirmed_handler
(alias) Pop two 32-bit signed integer (VB6 Long) values; push their modulo result.

Alias dispatch slot (1, 0xA0) for the canonical ModI4 at (0, 0xC2); semantics are identical.

Pops two 32-bit signed integer (VB6 Long) operands b and a (top is b), computes a Mod b, pushes the 32-bit signed integer (VB6 Long) result.

Stack: [..., a:I4, b:I4] -> [..., (a Mod b):I4]

Arithmetic is two's-complement on the native width. On modulo overflow, VB6 raises run-time error 6 (Overflow). Handler-level wrap-vs-trap detail not yet verified.

When the compiler emits it

Emitted when both operands of Mod are statically typed as Long. Mixed-type expressions go through narrower or wider variants (ModR8 if Double appears; ModVar if Variant is involved).

VB6 source (from description, not verified)
Dim a As Long, b As Long, c As Long
c = a Mod b
Encoding, evidence and notes
Encoding

Encoding: FB A0 (lead byte FB selects table 1), then 0 operand byte(s); total instruction length 2 byte(s).
Operands: none. All inputs come from the evaluation stack or the frame.

Evidence and notes

Emitted by VB6 SP6 (P-code): not observed in about 3,070 probe programs. The slot exists in the runtime's dispatch table, but no tested source construct makes the compiler emit it.

Handler: 0x6610ABD5, shared by 2 dispatch slots (real opcode #191). This is a duplicate slot of (0,C2) ModI4. Other slots: (0,C2) ModI4.

Check of vb6_source_eq example: compiles, but emits a different slot of the same handler. emits (0,C2) ModI4 (same handler, different slot)

Slots sharing this handler

(0,0xC2) ModI4

Description: draft, by claude-opus-4.7. Handler 0x6610ABD5, dispatch slot 0x66107394, modOpcodes line 1385.

ModUI1

(1,0x9E)emittedhandler #322Integerconfirmed_msdocs
Pop two 8-bit unsigned integer (VB6 Byte) values; push their modulo result.

Pops two 8-bit unsigned integer (VB6 Byte) operands b and a (top is b), computes a Mod b, pushes the 8-bit unsigned integer (VB6 Byte) result.

Stack: [..., a:UI1, b:UI1] -> [..., (a Mod b):UI1]

When the compiler emits it

Emitted when both operands of Mod are statically typed as Byte. Mixed-type expressions go through narrower or wider variants (ModR8 if Double appears; ModVar if Variant is involved).

VB6 source (verified: compiles to this slot)
Public Sub Main()
  Dim a As Byte, b As Byte, c As Byte
  c = a Mod b
End Sub
Encoding, evidence and notes
Encoding

Encoding: FB 9E (lead byte FB selects table 1), then 0 operand byte(s); total instruction length 2 byte(s).
Operands: none. All inputs come from the evaluation stack or the frame.
Observed: FB9E ModUI1

Evidence and notes

Emitted by VB6 SP6 (P-code): yes. Minimal probe: probes\op\1_9E_ModUI1.

Handler: 0x6610ABAE, unique to this slot (real opcode #322).

Check of vb6_source_eq example: verified: compiles and emits this slot.

Example from the description
Dim a As Byte, b As Byte, c As Byte
c = a Mod b

Description: draft, by claude-opus-4.7. Handler 0x6610ABAE, dispatch slot 0x6610738C, modOpcodes line 1386.

ModVar

(1,0xA4)emittedhandler #323Variantinferred_corpus2 corpus hits
Pop two VBA Variant values; push their modulo result.

Pops two VBA Variant operands b and a (top is b), computes a Mod b, pushes the VBA Variant result.

Stack: [..., a:Var, b:Var] -> [..., (a Mod b):Var]

Variant operands are coerced and the result type promoted per VB6 rules (Integer -> Long -> Double; presence of Currency forces Currency; presence of String triggers numeric parsing). Type-mismatch raises run-time error 13; arithmetic overflow raises error 6.

When the compiler emits it

Emitted when at least one operand of Mod is a Variant. Same-typed primitive operands instead emit ModI2/ModI4/ModR4/ModR8/ModCy.

VB6 source (verified: compiles to this slot)
Public Sub Main()
  Dim a As Variant, b As Variant, c As Variant
  c = a Mod b
End Sub
Encoding, evidence and notes
Encoding

Encoding: FB A4 (lead byte FB selects table 1), then 2 operand byte(s); total instruction length 4 byte(s).
vbdec template: %a
Operands:

  1. %a: local_var_ref, 2 byte(s). signed 16-bit offset from the procedure frame pointer (EBP). Negative = local/temporary (vbdec var_XX, XX = -offset), positive = argument (arg_XX).

Observed: FBA4 3CFF ModVar var_C4

Examples
fso.Proc_467FC4 @ 0x467FC4 | 46813A    FBA4 BCFE             ModVar var_144
Form2.mnuHex2Unicode_Click @ 0x45D160 | 45D24D    FBA4 30FF             ModVar var_D0

2 occurrence(s) in PDFStreamDumper.

Evidence and notes

Emitted by VB6 SP6 (P-code): yes. Minimal probe: probes\op\1_A4_ModVar.

Handler: 0x6610AE14, unique to this slot (real opcode #323).

Check of vb6_source_eq example: verified: compiles and emits this slot.

Corpus: 2 occurrence(s) in PDFStreamDumper_p.exe.

Example from the description
Dim a As Variant, b As Variant, c As Variant
c = a Mod b

Description: draft, by claude-opus-4.7. Handler 0x6610AE14, dispatch slot 0x661073A4, modOpcodes line 1387.

Math_Mul

Multiplication

MulCy

(0,0xB4)emittedprimary of 2handler #177Currencyconfirmed_msdocs
Pop two 64-bit scaled-integer Currency (×10^4) values; push their multiplication result.

Pops two 64-bit scaled-integer Currency (×10^4) operands b and a (top is b), computes a * b, pushes the 64-bit scaled-integer Currency (×10^4) result.

Stack: [..., a:Cy, b:Cy] -> [..., (a * b):Cy]

Currency arithmetic on the underlying scaled 64-bit integer (4 implicit decimal places). Overflow raises run-time error 6.

When the compiler emits it

Emitted when both operands of * are statically typed as Currency. Mixed-type expressions go through narrower or wider variants (MulR8 if Double appears; MulVar if Variant is involved).

VB6 source (verified: compiles to this slot)
Public Sub Main()
  Dim a As Currency, c As Currency
  c = a * 70000
End Sub
Encoding, evidence and notes
Encoding

Encoding: B4, then 0 operand byte(s); total instruction length 1 byte(s).
Operands: none. All inputs come from the evaluation stack or the frame.
Observed: B4 MulCy

Evidence and notes

Emitted by VB6 SP6 (P-code): yes. Minimal probe: probes\op\0_B4_MulCy.

Handler: 0x6610AB57, shared by 2 dispatch slots (real opcode #177). This is the primary slot. Other slots: (1,B3) MulCy.

Check of vb6_source_eq example: verified: compiles and emits this slot.

Example from the description
Dim a As Currency, b As Currency, c As Currency
c = a * b
Slots sharing this handler

(1,0xB3) MulCy

Description: draft, by claude-opus-4.7. Handler 0x6610AB57, dispatch slot 0x66106FE4, modOpcodes line 1346.

MulCy

(1,0xB3)not emitteddup of (0,B4)handler #177Currencyconfirmed_handler
(alias) Pop two 64-bit scaled-integer Currency (×10^4) values; push their multiplication result.

Alias dispatch slot (1, 0xB3) for the canonical MulCy at (0, 0xB4); semantics are identical.

Pops two 64-bit scaled-integer Currency (×10^4) operands b and a (top is b), computes a * b, pushes the 64-bit scaled-integer Currency (×10^4) result.

Stack: [..., a:Cy, b:Cy] -> [..., (a * b):Cy]

Currency arithmetic on the underlying scaled 64-bit integer (4 implicit decimal places). Overflow raises run-time error 6.

When the compiler emits it

Emitted when both operands of * are statically typed as Currency. Mixed-type expressions go through narrower or wider variants (MulR8 if Double appears; MulVar if Variant is involved).

VB6 source (from description, not verified)
Dim a As Currency, b As Currency, c As Currency
c = a * b
Encoding, evidence and notes
Encoding

Encoding: FB B3 (lead byte FB selects table 1), then 0 operand byte(s); total instruction length 2 byte(s).
Operands: none. All inputs come from the evaluation stack or the frame.

Evidence and notes

Emitted by VB6 SP6 (P-code): not observed in about 3,070 probe programs. The slot exists in the runtime's dispatch table, but no tested source construct makes the compiler emit it.

Handler: 0x6610AB57, shared by 2 dispatch slots (real opcode #177). This is a duplicate slot of (0,B4) MulCy. Other slots: (0,B4) MulCy.

Check of vb6_source_eq example: compiles, but emits a different slot of the same handler. emits (0,B4) MulCy (same handler, different slot)

Slots sharing this handler

(0,0xB4) MulCy

Description: draft, by claude-opus-4.7. Handler 0x6610AB57, dispatch slot 0x661073E0, modOpcodes line 1349.

MulCyI2

(0,0xB5)emittedprimary of 2handler #178Currencyconfirmed_msdocs
Multiply a Currency by an Integer; push Currency.

Pops a 16-bit Integer and a Currency and pushes their product as Currency (64-bit scaled integer). Overflow raises error 6.

Stack: [..., c:Cy, n:I2] -> [..., (c*n):Cy]

When the compiler emits it

Emitted for between Currency and an Integer or a small integer literal, in either order. Currency Currency uses MulCy (0,B4); Currency * Single/Double goes through the FPU (CR8Cy + MulR8).

VB6 source (verified: compiles to this slot)
Public Sub Main()
  Dim a As Currency, c As Currency
  c = a * 2
End Sub
Encoding, evidence and notes
Encoding

Encoding: B5, then 0 operand byte(s); total instruction length 1 byte(s).
Operands: none. All inputs come from the evaluation stack or the frame.
Observed: B5 MulCyI2

Evidence and notes

Emitted by VB6 SP6 (P-code): yes. Minimal probe: probes\op\0_B5_MulCyI2.

Handler: 0x6610AB88, shared by 2 dispatch slots (real opcode #178). This is the primary slot. Other slots: (1,D1) MulCyI2.

Check of vb6_source_eq example: verified: compiles and emits this slot.

Example from the description
Dim c As Currency, n As Integer, r As Currency
c = 1.5@: n = 3
r = c * n
Slots sharing this handler

(1,0xD1) MulCyI2

Description: draft, by claude-opus-5-5. Handler 0x6610AB88, dispatch slot 0x66106FE8, modOpcodes line 1347.

MulCyI2

(1,0xD1)not emitteddup of (0,B5)handler #178Currencyconfirmed_handler
(duplicate slot of (0,B5) MulCyI2) Multiply a Currency by an Integer; push Currency.

Dispatch slot (1, 0xD1) runs the same MSVBVM60 handler as (0,B5) MulCyI2; runtime behaviour is identical.

Pops a 16-bit Integer and a Currency and pushes their product as Currency (64-bit scaled integer). Overflow raises error 6.

Stack: [..., c:Cy, n:I2] -> [..., (c*n):Cy]

When the compiler emits it

Not emitted by VB6 SP6 in Phase 4 probes. Source that performs this operation (Currency * Integer) compiles to (0,B5) MulCyI2 instead. The slot is reachable only by hand-crafted or non-VB6-compiled p-code.

Encoding, evidence and notes
Encoding

Encoding: FB D1 (lead byte FB selects table 1), then 0 operand byte(s); total instruction length 2 byte(s).
Operands: none. All inputs come from the evaluation stack or the frame.

Evidence and notes

Emitted by VB6 SP6 (P-code): not observed in about 3,070 probe programs. The slot exists in the runtime's dispatch table, but no tested source construct makes the compiler emit it.

Handler: 0x6610AB88, shared by 2 dispatch slots (real opcode #178). This is a duplicate slot of (0,B5) MulCyI2. Other slots: (0,B5) MulCyI2.

Slots sharing this handler

(0,0xB5) MulCyI2

Description: draft, by claude-opus-5-5. Handler 0x6610AB88, dispatch slot 0x66107458, modOpcodes line 1348.

MulI2

(0,0xB1)emittedprimary of 2handler #174Integerconfirmed_msdocs27 corpus hits
Pop two 16-bit signed integer (VB6 Integer) values; push their multiplication result.

Pops two 16-bit signed integer (VB6 Integer) operands b and a (top is b), computes a * b, pushes the 16-bit signed integer (VB6 Integer) result.

Stack: [..., a:I2, b:I2] -> [..., (a * b):I2]

Arithmetic is two's-complement on the native width. On multiplication overflow, VB6 raises run-time error 6 (Overflow). Handler-level wrap-vs-trap detail not yet verified.

When the compiler emits it

Emitted when both operands of * are statically typed as Integer. Mixed-type expressions go through narrower or wider variants (MulR8 if Double appears; MulVar if Variant is involved).

VB6 source (verified: compiles to this slot)
Public Sub Main()
  Dim a As Integer, c As Integer
  c = a * 2
End Sub
Encoding, evidence and notes
Encoding

Encoding: B1, then 0 operand byte(s); total instruction length 1 byte(s).
Operands: none. All inputs come from the evaluation stack or the frame.
Observed: B1 MulI2

Examples
Form1.Form_Resize @ 0x474F3C | 47501F    B1                    MulI2
Form1.Form_Resize @ 0x474F3C | 475109    B1                    MulI2
Form1.Form_Resize @ 0x474F3C | 4751FD    B1                    MulI2

27 occurrence(s) in PDFStreamDumper.

Evidence and notes

Emitted by VB6 SP6 (P-code): yes. Minimal probe: probes\op\0_B1_MulI2.

Handler: 0x66105E38, shared by 2 dispatch slots (real opcode #174). This is the primary slot. Other slots: (1,AF) MulI2.

Check of vb6_source_eq example: verified: compiles and emits this slot.

Corpus: 27 occurrence(s) in PDFStreamDumper_p.exe.

Example from the description
Dim a As Integer, b As Integer, c As Integer
c = a * b
Slots sharing this handler

(1,0xAF) MulI2

Description: draft, by claude-opus-4.7. Handler 0x66105E38, dispatch slot 0x66106FD8, modOpcodes line 1341.

MulI2

(1,0xAF)not emitteddup of (0,B1)handler #174Integerconfirmed_handler
(alias) Pop two 16-bit signed integer (VB6 Integer) values; push their multiplication result.

Alias dispatch slot (1, 0xAF) for the canonical MulI2 at (0, 0xB1); semantics are identical.

Pops two 16-bit signed integer (VB6 Integer) operands b and a (top is b), computes a * b, pushes the 16-bit signed integer (VB6 Integer) result.

Stack: [..., a:I2, b:I2] -> [..., (a * b):I2]

Arithmetic is two's-complement on the native width. On multiplication overflow, VB6 raises run-time error 6 (Overflow). Handler-level wrap-vs-trap detail not yet verified.

When the compiler emits it

Emitted when both operands of * are statically typed as Integer. Mixed-type expressions go through narrower or wider variants (MulR8 if Double appears; MulVar if Variant is involved).

VB6 source (from description, not verified)
Dim a As Integer, b As Integer, c As Integer
c = a * b
Encoding, evidence and notes
Encoding

Encoding: FB AF (lead byte FB selects table 1), then 0 operand byte(s); total instruction length 2 byte(s).
Operands: none. All inputs come from the evaluation stack or the frame.

Evidence and notes

Emitted by VB6 SP6 (P-code): not observed in about 3,070 probe programs. The slot exists in the runtime's dispatch table, but no tested source construct makes the compiler emit it.

Handler: 0x66105E38, shared by 2 dispatch slots (real opcode #174). This is a duplicate slot of (0,B1) MulI2. Other slots: (0,B1) MulI2.

Check of vb6_source_eq example: compiles, but emits a different slot of the same handler. emits (0,B1) MulI2 (same handler, different slot)

Slots sharing this handler

(0,0xB1) MulI2

Description: draft, by claude-opus-4.7. Handler 0x66105E38, dispatch slot 0x661073D0, modOpcodes line 1342.

MulI4

(0,0xB2)emittedprimary of 2handler #175Integerconfirmed_msdocs4 corpus hits
Pop two 32-bit signed integer (VB6 Long) values; push their multiplication result.

Pops two 32-bit signed integer (VB6 Long) operands b and a (top is b), computes a * b, pushes the 32-bit signed integer (VB6 Long) result.

Stack: [..., a:I4, b:I4] -> [..., (a * b):I4]

Arithmetic is two's-complement on the native width. On multiplication overflow, VB6 raises run-time error 6 (Overflow). Handler-level wrap-vs-trap detail not yet verified.

When the compiler emits it

Emitted when both operands of * are statically typed as Long. Mixed-type expressions go through narrower or wider variants (MulR8 if Double appears; MulVar if Variant is involved).

VB6 source (verified: compiles to this slot)
Public Sub Main()
  Dim a As Long, c As Long
  c = a * 2
End Sub
Encoding, evidence and notes
Encoding

Encoding: B2, then 0 operand byte(s); total instruction length 1 byte(s).
Operands: none. All inputs come from the evaluation stack or the frame.
Observed: B2 MulI4

Examples
modZLIB.Proc_4666C0 @ 0x4666C0 | 46689E    B2                    MulI4
CPdfParser.Proc_457140 @ 0x457140 | 45720C    B2                    MulI4
frmRefactor.ScrollIncremental @ 0x440728 | 440731    B2                    MulI4

4 occurrence(s) in PDFStreamDumper.

Evidence and notes

Emitted by VB6 SP6 (P-code): yes. Minimal probe: probes\op\0_B2_MulI4.

Handler: 0x6610AB40, shared by 2 dispatch slots (real opcode #175). This is the primary slot. Other slots: (1,B0) MulI4.

Check of vb6_source_eq example: verified: compiles and emits this slot.

Corpus: 4 occurrence(s) in PDFStreamDumper_p.exe.

Example from the description
Dim a As Long, b As Long, c As Long
c = a * b
Slots sharing this handler

(1,0xB0) MulI4

Description: draft, by claude-opus-4.7. Handler 0x6610AB40, dispatch slot 0x66106FDC, modOpcodes line 1343.

MulI4

(1,0xB0)not emitteddup of (0,B2)handler #175Integerconfirmed_handler
(alias) Pop two 32-bit signed integer (VB6 Long) values; push their multiplication result.

Alias dispatch slot (1, 0xB0) for the canonical MulI4 at (0, 0xB2); semantics are identical.

Pops two 32-bit signed integer (VB6 Long) operands b and a (top is b), computes a * b, pushes the 32-bit signed integer (VB6 Long) result.

Stack: [..., a:I4, b:I4] -> [..., (a * b):I4]

Arithmetic is two's-complement on the native width. On multiplication overflow, VB6 raises run-time error 6 (Overflow). Handler-level wrap-vs-trap detail not yet verified.

When the compiler emits it

Emitted when both operands of * are statically typed as Long. Mixed-type expressions go through narrower or wider variants (MulR8 if Double appears; MulVar if Variant is involved).

VB6 source (from description, not verified)
Dim a As Long, b As Long, c As Long
c = a * b
Encoding, evidence and notes
Encoding

Encoding: FB B0 (lead byte FB selects table 1), then 0 operand byte(s); total instruction length 2 byte(s).
Operands: none. All inputs come from the evaluation stack or the frame.

Evidence and notes

Emitted by VB6 SP6 (P-code): not observed in about 3,070 probe programs. The slot exists in the runtime's dispatch table, but no tested source construct makes the compiler emit it.

Handler: 0x6610AB40, shared by 2 dispatch slots (real opcode #175). This is a duplicate slot of (0,B2) MulI4. Other slots: (0,B2) MulI4.

Check of vb6_source_eq example: compiles, but emits a different slot of the same handler. emits (0,B2) MulI4 (same handler, different slot)

Slots sharing this handler

(0,0xB2) MulI4

Description: draft, by claude-opus-4.7. Handler 0x6610AB40, dispatch slot 0x661073D4, modOpcodes line 1344.

MulR4

(1,0xB1)not emitteddup of (0,B3)handler #176Floating pointconfirmed_msdocs
Pop two 32-bit IEEE 754 float (VB6 Single) values; push their multiplication result.

Pops two 32-bit IEEE 754 float (VB6 Single) operands b and a (top is b), computes a * b, pushes the 32-bit IEEE 754 float (VB6 Single) result.

Stack: [..., a:R4, b:R4] -> [..., (a * b):R4]

IEEE 754 single-precision arithmetic. NaN and infinity propagate per the standard; overflow yields +/-Inf (which the runtime then maps to runtime error 6 in normal expression contexts).

When the compiler emits it

Emitted when both operands of * are statically typed as Single. Mixed-type expressions go through narrower or wider variants (MulR8 if Double appears; MulVar if Variant is involved).

VB6 source (from description, not verified)
Dim a As Single, b As Single, c As Single
c = a * b
Encoding, evidence and notes
Encoding

Encoding: FB B1 (lead byte FB selects table 1), then 0 operand byte(s); total instruction length 2 byte(s).
Operands: none. All inputs come from the evaluation stack or the frame.

Evidence and notes

Emitted by VB6 SP6 (P-code): not observed in about 3,070 probe programs. The slot exists in the runtime's dispatch table, but no tested source construct makes the compiler emit it.

Handler: 0x66105E50, shared by 3 dispatch slots (real opcode #176). This is a duplicate slot of (0,B3) MulR8. Other slots: (0,B3) MulR8, (1,B2) MulR4.

Finding: Phase 4: Single arithmetic and comparisons compile to the R8 FPU opcodes (AddR8, LtR8, and so on). Operands are loaded with FLdFPR4 and stored with FStFPR4. This *R4 slot was never emitted.

Check of vb6_source_eq example: compiles, but emits a different slot of the same handler. emits (0,B3) MulR8 (same handler, different slot)

Slots sharing this handler

(0,0xB3) MulR8, (1,0xB2) MulR4

Description: draft, by claude-opus-4.7. Handler 0x66105E50, dispatch slot 0x661073D8, modOpcodes line 1351.

MulR4

(1,0xB2)not emitteddup of (0,B3)handler #176Floating pointconfirmed_handler
(alias) Pop two 32-bit IEEE 754 float (VB6 Single) values; push their multiplication result.

Alias dispatch slot (1, 0xB2) for the canonical MulR4 at (1, 0xB1); semantics are identical.

Pops two 32-bit IEEE 754 float (VB6 Single) operands b and a (top is b), computes a * b, pushes the 32-bit IEEE 754 float (VB6 Single) result.

Stack: [..., a:R4, b:R4] -> [..., (a * b):R4]

IEEE 754 single-precision arithmetic. NaN and infinity propagate per the standard; overflow yields +/-Inf (which the runtime then maps to runtime error 6 in normal expression contexts).

When the compiler emits it

Emitted when both operands of * are statically typed as Single. Mixed-type expressions go through narrower or wider variants (MulR8 if Double appears; MulVar if Variant is involved).

VB6 source (from description, not verified)
Dim a As Single, b As Single, c As Single
c = a * b
Encoding, evidence and notes
Encoding

Encoding: FB B2 (lead byte FB selects table 1), then 0 operand byte(s); total instruction length 2 byte(s).
Operands: none. All inputs come from the evaluation stack or the frame.

Evidence and notes

Emitted by VB6 SP6 (P-code): not observed in about 3,070 probe programs. The slot exists in the runtime's dispatch table, but no tested source construct makes the compiler emit it.

Handler: 0x66105E50, shared by 3 dispatch slots (real opcode #176). This is a duplicate slot of (0,B3) MulR8. Other slots: (0,B3) MulR8, (1,B1) MulR4.

Finding: Phase 4: Single arithmetic and comparisons compile to the R8 FPU opcodes (AddR8, LtR8, and so on). Operands are loaded with FLdFPR4 and stored with FStFPR4. This *R4 slot was never emitted.

Check of vb6_source_eq example: compiles, but emits a different slot of the same handler. emits (0,B3) MulR8 (same handler, different slot)

Slots sharing this handler

(0,0xB3) MulR8, (1,0xB1) MulR4

Description: draft, by claude-opus-4.7. Handler 0x66105E50, dispatch slot 0x661073DC, modOpcodes line 1352.

MulR8

(0,0xB3)emittedprimary of 3handler #176Floating pointconfirmed_msdocs12 corpus hits
Pop two 64-bit IEEE 754 float (VB6 Double) values; push their multiplication result.

Pops two 64-bit IEEE 754 float (VB6 Double) operands b and a (top is b), computes a * b, pushes the 64-bit IEEE 754 float (VB6 Double) result.

Stack: [..., a:R8, b:R8] -> [..., (a * b):R8]

IEEE 754 double-precision arithmetic. NaN and infinity propagate per the standard; overflow yields +/-Inf (which the runtime then maps to runtime error 6 in normal expression contexts).

When the compiler emits it

Emitted when both operands of * are statically typed as Double. Mixed-type expressions go through narrower or wider variants (MulR8 if Double appears; MulVar if Variant is involved).

VB6 source (verified: compiles to this slot)
Public Sub Main()
  Dim a As Single, c As Single
  c = a * 2.5
End Sub
Encoding, evidence and notes
Encoding

Encoding: B3, then 0 operand byte(s); total instruction length 1 byte(s).
Operands: none. All inputs come from the evaluation stack or the frame.
Observed: B3 MulR8

Examples
Form2.LongHex @ 0x441B00 | 441B17    B3                    MulR8
Form2.Proc_4429BC @ 0x4429BC | 4429FA    B3                    MulR8
Form2.Proc_4429BC @ 0x4429BC | 442A0A    B3                    MulR8

12 occurrence(s) in PDFStreamDumper.

Evidence and notes

Emitted by VB6 SP6 (P-code): yes. Minimal probe: probes\op\0_B3_MulR8.

Handler: 0x66105E50, shared by 3 dispatch slots (real opcode #176). This is the primary slot. Other slots: (1,B1) MulR4, (1,B2) MulR4.

Check of vb6_source_eq example: verified: compiles and emits this slot.

Corpus: 12 occurrence(s) in PDFStreamDumper_p.exe.

Example from the description
Dim a As Double, b As Double, c As Double
c = a * b
Slots sharing this handler

(1,0xB1) MulR4, (1,0xB2) MulR4

Description: draft, by claude-opus-4.7. Handler 0x66105E50, dispatch slot 0x66106FE0, modOpcodes line 1345.

MulUI1

(1,0xAE)emittedhandler #326Integerconfirmed_msdocs
Pop two 8-bit unsigned integer (VB6 Byte) values; push their multiplication result.

Pops two 8-bit unsigned integer (VB6 Byte) operands b and a (top is b), computes a * b, pushes the 8-bit unsigned integer (VB6 Byte) result.

Stack: [..., a:UI1, b:UI1] -> [..., (a * b):UI1]

When the compiler emits it

Emitted when both operands of * are statically typed as Byte. Mixed-type expressions go through narrower or wider variants (MulR8 if Double appears; MulVar if Variant is involved).

VB6 source (verified: compiles to this slot)
Public Sub Main()
  Dim a As Byte, b As Byte, c As Byte
  c = a * b
End Sub
Encoding, evidence and notes
Encoding

Encoding: FB AE (lead byte FB selects table 1), then 0 operand byte(s); total instruction length 2 byte(s).
Operands: none. All inputs come from the evaluation stack or the frame.
Observed: FBAE MulUI1

Evidence and notes

Emitted by VB6 SP6 (P-code): yes. Minimal probe: probes\op\1_AE_MulUI1.

Handler: 0x6610AB29, unique to this slot (real opcode #326).

Check of vb6_source_eq example: verified: compiles and emits this slot.

Example from the description
Dim a As Byte, b As Byte, c As Byte
c = a * b

Description: draft, by claude-opus-4.7. Handler 0x6610AB29, dispatch slot 0x661073CC, modOpcodes line 1350.

MulVar

(1,0xB4)emittedhandler #327Variantinferred_corpus4 corpus hits
Pop two VBA Variant values; push their multiplication result.

Pops two VBA Variant operands b and a (top is b), computes a * b, pushes the VBA Variant result.

Stack: [..., a:Var, b:Var] -> [..., (a * b):Var]

Variant operands are coerced and the result type promoted per VB6 rules (Integer -> Long -> Double; presence of Currency forces Currency; presence of String triggers numeric parsing). Type-mismatch raises run-time error 13; arithmetic overflow raises error 6.

When the compiler emits it

Emitted when at least one operand of * is a Variant. Same-typed primitive operands instead emit MulI2/MulI4/MulR4/MulR8/MulCy.

VB6 source (verified: compiles to this slot)
Public Sub Main()
  Dim a As Variant, b As Variant, c As Variant
  c = a * b
End Sub
Encoding, evidence and notes
Encoding

Encoding: FB B4 (lead byte FB selects table 1), then 2 operand byte(s); total instruction length 4 byte(s).
vbdec template: %a
Operands:

  1. %a: local_var_ref, 2 byte(s). signed 16-bit offset from the procedure frame pointer (EBP). Negative = local/temporary (vbdec var_XX, XX = -offset), positive = argument (arg_XX).

Observed: FBB4 3CFF MulVar var_C4

Examples
fso.Proc_44D3E8 @ 0x44D3E8 | 44D442    FBB4 3CFF             MulVar var_C4
fso.Proc_44D3E8 @ 0x44D3E8 | 44D44D    FBB4 FCFE             MulVar var_104
b64.Proc_469B0C @ 0x469B0C | 469C12    FBB4 20FF             MulVar var_E0

4 occurrence(s) in PDFStreamDumper.

Evidence and notes

Emitted by VB6 SP6 (P-code): yes. Minimal probe: probes\op\1_B4_MulVar.

Handler: 0x66105F54, unique to this slot (real opcode #327).

Check of vb6_source_eq example: verified: compiles and emits this slot.

Corpus: 4 occurrence(s) in PDFStreamDumper_p.exe.

Example from the description
Dim a As Variant, b As Variant, c As Variant
c = a * b

Description: draft, by claude-opus-4.7. Handler 0x66105F54, dispatch slot 0x661073E4, modOpcodes line 1353.

Math_Pwr

Power

PwrR8I2

(1,0xD0)not emittedhandler #334Floating pointconfirmed_msdocs
Raise a Double to an Integer power; never emitted.

Pops a 16-bit signed integer (VB6 Integer) operand b (top) and a 64-bit IEEE 754 float (VB6 Double) operand a, computes a ^ b at R8 precision (the 16-bit signed integer (VB6 Integer) b is widened or coerced as needed), pushes the 64-bit IEEE 754 float (VB6 Double) result.

Stack: [..., a:R8, b:I2] -> [..., (a ^ b):R8]

Double-precision arithmetic per IEEE 754. NaN and infinity propagate per the standard; out-of-range numeric values raise run-time error 6 in normal expression contexts.

When the compiler emits it

Not emitted by VB6 SP6: d ^ n with n As Integer (and Integer literals) compiles to PwrR8R8 (1,CF) after converting the exponent to floating point.

Encoding, evidence and notes
Encoding

Encoding: FB D0 (lead byte FB selects table 1), then 0 operand byte(s); total instruction length 2 byte(s).
Operands: none. All inputs come from the evaluation stack or the frame.

Evidence and notes

Emitted by VB6 SP6 (P-code): not observed in about 3,070 probe programs. The slot exists in the runtime's dispatch table, but no tested source construct makes the compiler emit it.

Handler: 0x6610ADDB, unique to this slot (real opcode #334).

Description: draft, by claude-opus-5-5. Handler 0x6610ADDB, dispatch slot 0x66107454, modOpcodes line 1413.

PwrR8R8

(1,0xCF)emittedhandler #333Floating pointconfirmed_msdocs
Pop two 64-bit IEEE 754 float (VB6 Double) values; push their exponentiation result.

Pops two 64-bit IEEE 754 float (VB6 Double) operands b and a (top is b), computes a ^ b, pushes the 64-bit IEEE 754 float (VB6 Double) result.

Stack: [..., a:R8, b:R8] -> [..., (a ^ b):R8]

Double-precision arithmetic per IEEE 754. NaN and infinity propagate per the standard; out-of-range numeric values raise run-time error 6 in normal expression contexts.

When the compiler emits it

Emitted when both operands of ^ are statically typed as Double. Mixed-type expressions go through narrower or wider variants (PwrR8 if Double appears; PwrVar if Variant is involved).

VB6 source (verified: compiles to this slot)
Public Sub Main()
  Dim a As Single, c As Single
  c = a ^ 2.5
End Sub
Encoding, evidence and notes
Encoding

Encoding: FB CF (lead byte FB selects table 1), then 0 operand byte(s); total instruction length 2 byte(s).
Operands: none. All inputs come from the evaluation stack or the frame.
Observed: FBCF PwrR8R8

Evidence and notes

Emitted by VB6 SP6 (P-code): yes. Minimal probe: probes\op\1_CF_PwrR8R8.

Handler: 0x66105F01, unique to this slot (real opcode #333).

Check of vb6_source_eq example: verified: compiles and emits this slot.

Example from the description
Dim a As Double, b As Double, c As Double
c = a ^ b

Description: draft, by claude-opus-4.7. Handler 0x66105F01, dispatch slot 0x66107450, modOpcodes line 1412.

PwrVar

(1,0xCE)emittedhandler #332Variantinferred_corpus
Variant exponentiation (^); result Variant in a temporary.

Pops two Variants, applies exponentiation (^) with VB's Variant coercion and Null-propagation rules, and writes the result Variant to the temporary %a, whose address is pushed.

Stack: [..., a:Var, b:Var] -> [..., r:Var]

When the compiler emits it

Emitted when either operand of exponentiation (^) is a Variant.

VB6 source (verified: compiles to this slot)
Public Sub Main()
  Dim a As Variant, b As Variant, c As Variant
  c = a ^ b
End Sub
Encoding, evidence and notes
Encoding

Encoding: FB CE (lead byte FB selects table 1), then 2 operand byte(s); total instruction length 4 byte(s).
vbdec template: %a
Operands:

  1. %a: local_var_ref, 2 byte(s). signed 16-bit offset from the procedure frame pointer (EBP). Negative = local/temporary (vbdec var_XX, XX = -offset), positive = argument (arg_XX).

Observed: FBCE 3CFF PwrVar var_C4

Examples
FBCE 3CFF  PwrVar var_C4

From the Phase 4 probe (VB6 SP6, P-code).

Evidence and notes

Emitted by VB6 SP6 (P-code): yes. Minimal probe: probes\op\1_CE_PwrVar.

Handler: 0x6610AE09, unique to this slot (real opcode #332).

Check of vb6_source_eq example: verified: compiles and emits this slot.

Example from the description
Public Sub Main()
  Dim a As Variant, b As Variant, c As Variant
  c = a ^ b
End Sub

Description: draft, by claude-opus-5-5. Handler 0x6610AE09, dispatch slot 0x6610744C, modOpcodes line 1414.

Math_Sub

Subtraction

SubCy

(0,0xB0)emittedprimary of 2handler #173Currencyconfirmed_msdocs
Pop two 64-bit scaled-integer Currency (×10^4) values; push their subtraction result.

Pops two 64-bit scaled-integer Currency (×10^4) operands b and a (top is b), computes a - b, pushes the 64-bit scaled-integer Currency (×10^4) result.

Stack: [..., a:Cy, b:Cy] -> [..., (a - b):Cy]

Currency arithmetic on the underlying scaled 64-bit integer (4 implicit decimal places). Overflow raises run-time error 6.

When the compiler emits it

Emitted when both operands of - are statically typed as Currency. Mixed-type expressions go through narrower or wider variants (SubR8 if Double appears; SubVar if Variant is involved).

VB6 source (verified: compiles to this slot)
Public Sub Main()
  Dim a As Currency, b As Currency, c As Currency
  c = a - b
End Sub
Encoding, evidence and notes
Encoding

Encoding: B0, then 0 operand byte(s); total instruction length 1 byte(s).
Operands: none. All inputs come from the evaluation stack or the frame.
Observed: B0 SubCy

Evidence and notes

Emitted by VB6 SP6 (P-code): yes. Minimal probe: probes\op\0_B0_SubCy.

Handler: 0x6610AB0E, shared by 2 dispatch slots (real opcode #173). This is the primary slot. Other slots: (1,9B) SubCy.

Check of vb6_source_eq example: verified: compiles and emits this slot.

Example from the description
Dim a As Currency, b As Currency, c As Currency
c = a - b
Slots sharing this handler

(1,0x9B) SubCy

Description: draft, by claude-opus-4.7. Handler 0x6610AB0E, dispatch slot 0x66106FD4, modOpcodes line 1333.

SubCy

(1,0x9B)not emitteddup of (0,B0)handler #173Currencyconfirmed_handler
(alias) Pop two 64-bit scaled-integer Currency (×10^4) values; push their subtraction result.

Alias dispatch slot (1, 0x9B) for the canonical SubCy at (0, 0xB0); semantics are identical.

Pops two 64-bit scaled-integer Currency (×10^4) operands b and a (top is b), computes a - b, pushes the 64-bit scaled-integer Currency (×10^4) result.

Stack: [..., a:Cy, b:Cy] -> [..., (a - b):Cy]

Currency arithmetic on the underlying scaled 64-bit integer (4 implicit decimal places). Overflow raises run-time error 6.

When the compiler emits it

Emitted when both operands of - are statically typed as Currency. Mixed-type expressions go through narrower or wider variants (SubR8 if Double appears; SubVar if Variant is involved).

VB6 source (from description, not verified)
Dim a As Currency, b As Currency, c As Currency
c = a - b
Encoding, evidence and notes
Encoding

Encoding: FB 9B (lead byte FB selects table 1), then 0 operand byte(s); total instruction length 2 byte(s).
Operands: none. All inputs come from the evaluation stack or the frame.

Evidence and notes

Emitted by VB6 SP6 (P-code): not observed in about 3,070 probe programs. The slot exists in the runtime's dispatch table, but no tested source construct makes the compiler emit it.

Handler: 0x6610AB0E, shared by 2 dispatch slots (real opcode #173). This is a duplicate slot of (0,B0) SubCy. Other slots: (0,B0) SubCy.

Check of vb6_source_eq example: compiles, but emits a different slot of the same handler. emits (0,B0) SubCy (same handler, different slot)

Slots sharing this handler

(0,0xB0) SubCy

Description: draft, by claude-opus-4.7. Handler 0x6610AB0E, dispatch slot 0x66107380, modOpcodes line 1334.

SubI2

(0,0xAD)emittedprimary of 2handler #170Integerconfirmed_msdocs3 corpus hits
Pop two 16-bit signed integer (VB6 Integer) values; push their subtraction result.

Pops two 16-bit signed integer (VB6 Integer) operands b and a (top is b), computes a - b, pushes the 16-bit signed integer (VB6 Integer) result.

Stack: [..., a:I2, b:I2] -> [..., (a - b):I2]

Arithmetic is two's-complement on the native width. On subtraction overflow, VB6 raises run-time error 6 (Overflow). Handler-level wrap-vs-trap detail not yet verified.

When the compiler emits it

Emitted when both operands of - are statically typed as Integer. Mixed-type expressions go through narrower or wider variants (SubR8 if Double appears; SubVar if Variant is involved).

VB6 source (verified: compiles to this slot)
Public Sub Main()
  Dim a As Integer, b As Integer, c As Integer
  c = a - b
End Sub
Encoding, evidence and notes
Encoding

Encoding: AD, then 0 operand byte(s); total instruction length 1 byte(s).
Operands: none. All inputs come from the evaluation stack or the frame.
Observed: AD SubI2

Examples
frmRefactor.Proc_4442D0 @ 0x4442D0 | 44432B    AD                    SubI2
modEscapes.Proc_450068 @ 0x450068 | 450109    AD                    SubI2
frmManualFilters.Form_Load @ 0x454580 | 45462C    AD                    SubI2

3 occurrence(s) in PDFStreamDumper.

Evidence and notes

Emitted by VB6 SP6 (P-code): yes. Minimal probe: probes\op\0_AD_SubI2.

Handler: 0x66105DFD, shared by 2 dispatch slots (real opcode #170). This is the primary slot. Other slots: (1,97) SubI2.

Check of vb6_source_eq example: verified: compiles and emits this slot.

Corpus: 3 occurrence(s) in PDFStreamDumper_p.exe.

Example from the description
Dim a As Integer, b As Integer, c As Integer
c = a - b
Slots sharing this handler

(1,0x97) SubI2

Description: draft, by claude-opus-4.7. Handler 0x66105DFD, dispatch slot 0x66106FC8, modOpcodes line 1329.

SubI2

(1,0x97)not emitteddup of (0,AD)handler #170Integerconfirmed_handler
(alias) Pop two 16-bit signed integer (VB6 Integer) values; push their subtraction result.

Alias dispatch slot (1, 0x97) for the canonical SubI2 at (0, 0xAD); semantics are identical.

Pops two 16-bit signed integer (VB6 Integer) operands b and a (top is b), computes a - b, pushes the 16-bit signed integer (VB6 Integer) result.

Stack: [..., a:I2, b:I2] -> [..., (a - b):I2]

Arithmetic is two's-complement on the native width. On subtraction overflow, VB6 raises run-time error 6 (Overflow). Handler-level wrap-vs-trap detail not yet verified.

When the compiler emits it

Emitted when both operands of - are statically typed as Integer. Mixed-type expressions go through narrower or wider variants (SubR8 if Double appears; SubVar if Variant is involved).

VB6 source (from description, not verified)
Dim a As Integer, b As Integer, c As Integer
c = a - b
Encoding, evidence and notes
Encoding

Encoding: FB 97 (lead byte FB selects table 1), then 0 operand byte(s); total instruction length 2 byte(s).
Operands: none. All inputs come from the evaluation stack or the frame.

Evidence and notes

Emitted by VB6 SP6 (P-code): not observed in about 3,070 probe programs. The slot exists in the runtime's dispatch table, but no tested source construct makes the compiler emit it.

Handler: 0x66105DFD, shared by 2 dispatch slots (real opcode #170). This is a duplicate slot of (0,AD) SubI2. Other slots: (0,AD) SubI2.

Check of vb6_source_eq example: compiles, but emits a different slot of the same handler. emits (0,AD) SubI2 (same handler, different slot)

Slots sharing this handler

(0,0xAD) SubI2

Description: draft, by claude-opus-4.7. Handler 0x66105DFD, dispatch slot 0x66107370, modOpcodes line 1330.

SubI4

(0,0xAE)emittedprimary of 2handler #171Integerconfirmed_msdocs120 corpus hits
Pop two 32-bit signed integer (VB6 Long) values; push their subtraction result.

Pops two 32-bit signed integer (VB6 Long) operands b and a (top is b), computes a - b, pushes the 32-bit signed integer (VB6 Long) result.

Stack: [..., a:I4, b:I4] -> [..., (a - b):I4]

Arithmetic is two's-complement on the native width. On subtraction overflow, VB6 raises run-time error 6 (Overflow). Handler-level wrap-vs-trap detail not yet verified.

When the compiler emits it

Emitted when both operands of - are statically typed as Long. Mixed-type expressions go through narrower or wider variants (SubR8 if Double appears; SubVar if Variant is involved).

VB6 source (verified: compiles to this slot)
Public Sub Main()
  Dim a As Long, b As Long, c As Long
  c = a - b
End Sub
Encoding, evidence and notes
Encoding

Encoding: AE, then 0 operand byte(s); total instruction length 1 byte(s).
Operands: none. All inputs come from the evaluation stack or the frame.
Observed: AE SubI4

Examples
Form1.mnuDecompressSWC_Click @ 0x45E9E4 | 45EB1F    AE                    SubI4
Form1.mnuExtractURI_Click @ 0x45774C | 457850    AE                    SubI4
Form1.mnuSecureDownload_Click @ 0x456570 | 4565F7    AE                    SubI4

120 occurrence(s) in PDFStreamDumper.

Evidence and notes

Emitted by VB6 SP6 (P-code): yes. Minimal probe: probes\op\0_AE_SubI4.

Handler: 0x66105E14, shared by 2 dispatch slots (real opcode #171). This is the primary slot. Other slots: (1,98) SubI4.

Check of vb6_source_eq example: verified: compiles and emits this slot.

Corpus: 120 occurrence(s) in PDFStreamDumper_p.exe.

Example from the description
Dim a As Long, b As Long, c As Long
c = a - b
Slots sharing this handler

(1,0x98) SubI4

Description: draft, by claude-opus-4.7. Handler 0x66105E14, dispatch slot 0x66106FCC, modOpcodes line 1331.

SubI4

(1,0x98)not emitteddup of (0,AE)handler #171Integerconfirmed_handler
(alias) Pop two 32-bit signed integer (VB6 Long) values; push their subtraction result.

Alias dispatch slot (1, 0x98) for the canonical SubI4 at (0, 0xAE); semantics are identical.

Pops two 32-bit signed integer (VB6 Long) operands b and a (top is b), computes a - b, pushes the 32-bit signed integer (VB6 Long) result.

Stack: [..., a:I4, b:I4] -> [..., (a - b):I4]

Arithmetic is two's-complement on the native width. On subtraction overflow, VB6 raises run-time error 6 (Overflow). Handler-level wrap-vs-trap detail not yet verified.

When the compiler emits it

Emitted when both operands of - are statically typed as Long. Mixed-type expressions go through narrower or wider variants (SubR8 if Double appears; SubVar if Variant is involved).

VB6 source (from description, not verified)
Dim a As Long, b As Long, c As Long
c = a - b
Encoding, evidence and notes
Encoding

Encoding: FB 98 (lead byte FB selects table 1), then 0 operand byte(s); total instruction length 2 byte(s).
Operands: none. All inputs come from the evaluation stack or the frame.

Evidence and notes

Emitted by VB6 SP6 (P-code): not observed in about 3,070 probe programs. The slot exists in the runtime's dispatch table, but no tested source construct makes the compiler emit it.

Handler: 0x66105E14, shared by 2 dispatch slots (real opcode #171). This is a duplicate slot of (0,AE) SubI4. Other slots: (0,AE) SubI4.

Check of vb6_source_eq example: compiles, but emits a different slot of the same handler. emits (0,AE) SubI4 (same handler, different slot)

Slots sharing this handler

(0,0xAE) SubI4

Description: draft, by claude-opus-4.7. Handler 0x66105E14, dispatch slot 0x66107374, modOpcodes line 1332.

SubR8

(0,0xAF)emittedprimary of 3handler #172Floating pointconfirmed_msdocs100 corpus hits
Pop two 64-bit IEEE 754 float (VB6 Double) values; push their subtraction result.

Pops two 64-bit IEEE 754 float (VB6 Double) operands b and a (top is b), computes a - b, pushes the 64-bit IEEE 754 float (VB6 Double) result.

Stack: [..., a:R8, b:R8] -> [..., (a - b):R8]

IEEE 754 double-precision arithmetic. NaN and infinity propagate per the standard; overflow yields +/-Inf (which the runtime then maps to runtime error 6 in normal expression contexts).

When the compiler emits it

Emitted when both operands of - are statically typed as Double. Mixed-type expressions go through narrower or wider variants (SubR8 if Double appears; SubVar if Variant is involved).

VB6 source (verified: compiles to this slot)
Public Sub Main()
  Dim a As Single, b As Single, c As Single
  c = a - b
End Sub
Encoding, evidence and notes
Encoding

Encoding: AF, then 0 operand byte(s); total instruction length 1 byte(s).
Operands: none. All inputs come from the evaluation stack or the frame.
Observed: AF SubR8

Examples
Form1.Form_Resize @ 0x474F3C | 475013    AF                    SubR8
Form1.Form_Resize @ 0x474F3C | 475019    AF                    SubR8
Form1.Form_Resize @ 0x474F3C | 475021    AF                    SubR8

100 occurrence(s) in PDFStreamDumper.

Evidence and notes

Emitted by VB6 SP6 (P-code): yes. Minimal probe: probes\op\0_AF_SubR8.

Handler: 0x66105E2A, shared by 3 dispatch slots (real opcode #172). This is the primary slot. Other slots: (1,99) SubR8, (1,9A) SubR8.

Check of vb6_source_eq example: verified: compiles and emits this slot.

Corpus: 100 occurrence(s) in PDFStreamDumper_p.exe.

Example from the description
Dim a As Double, b As Double, c As Double
c = a - b
Slots sharing this handler

(1,0x99) SubR8, (1,0x9A) SubR8

Description: draft, by claude-opus-4.7. Handler 0x66105E2A, dispatch slot 0x66106FD0, modOpcodes line 1336.

SubR8

(1,0x99)not emitteddup of (0,AF)handler #172Floating pointconfirmed_handler
(alias) Pop two 64-bit IEEE 754 float (VB6 Double) values; push their subtraction result.

Alias dispatch slot (1, 0x99) for the canonical SubR8 at (0, 0xAF); semantics are identical.

Pops two 64-bit IEEE 754 float (VB6 Double) operands b and a (top is b), computes a - b, pushes the 64-bit IEEE 754 float (VB6 Double) result.

Stack: [..., a:R8, b:R8] -> [..., (a - b):R8]

IEEE 754 double-precision arithmetic. NaN and infinity propagate per the standard; overflow yields +/-Inf (which the runtime then maps to runtime error 6 in normal expression contexts).

When the compiler emits it

Emitted when both operands of - are statically typed as Double. Mixed-type expressions go through narrower or wider variants (SubR8 if Double appears; SubVar if Variant is involved).

VB6 source (from description, not verified)
Dim a As Double, b As Double, c As Double
c = a - b
Encoding, evidence and notes
Encoding

Encoding: FB 99 (lead byte FB selects table 1), then 0 operand byte(s); total instruction length 2 byte(s).
Operands: none. All inputs come from the evaluation stack or the frame.

Evidence and notes

Emitted by VB6 SP6 (P-code): not observed in about 3,070 probe programs. The slot exists in the runtime's dispatch table, but no tested source construct makes the compiler emit it.

Handler: 0x66105E2A, shared by 3 dispatch slots (real opcode #172). This is a duplicate slot of (0,AF) SubR8. Other slots: (0,AF) SubR8, (1,9A) SubR8.

Check of vb6_source_eq example: compiles, but emits a different slot of the same handler. emits (0,AF) SubR8 (same handler, different slot)

Slots sharing this handler

(0,0xAF) SubR8, (1,0x9A) SubR8

Description: draft, by claude-opus-4.7. Handler 0x66105E2A, dispatch slot 0x66107378, modOpcodes line 1337.

SubR8

(1,0x9A)not emitteddup of (0,AF)handler #172Floating pointconfirmed_handler
(alias) Pop two 64-bit IEEE 754 float (VB6 Double) values; push their subtraction result.

Alias dispatch slot (1, 0x9A) for the canonical SubR8 at (0, 0xAF); semantics are identical.

Pops two 64-bit IEEE 754 float (VB6 Double) operands b and a (top is b), computes a - b, pushes the 64-bit IEEE 754 float (VB6 Double) result.

Stack: [..., a:R8, b:R8] -> [..., (a - b):R8]

IEEE 754 double-precision arithmetic. NaN and infinity propagate per the standard; overflow yields +/-Inf (which the runtime then maps to runtime error 6 in normal expression contexts).

When the compiler emits it

Emitted when both operands of - are statically typed as Double. Mixed-type expressions go through narrower or wider variants (SubR8 if Double appears; SubVar if Variant is involved).

VB6 source (from description, not verified)
Dim a As Double, b As Double, c As Double
c = a - b
Encoding, evidence and notes
Encoding

Encoding: FB 9A (lead byte FB selects table 1), then 0 operand byte(s); total instruction length 2 byte(s).
Operands: none. All inputs come from the evaluation stack or the frame.

Evidence and notes

Emitted by VB6 SP6 (P-code): not observed in about 3,070 probe programs. The slot exists in the runtime's dispatch table, but no tested source construct makes the compiler emit it.

Handler: 0x66105E2A, shared by 3 dispatch slots (real opcode #172). This is a duplicate slot of (0,AF) SubR8. Other slots: (0,AF) SubR8, (1,99) SubR8.

Check of vb6_source_eq example: compiles, but emits a different slot of the same handler. emits (0,AF) SubR8 (same handler, different slot)

Slots sharing this handler

(0,0xAF) SubR8, (1,0x99) SubR8

Description: draft, by claude-opus-4.7. Handler 0x66105E2A, dispatch slot 0x6610737C, modOpcodes line 1338.

SubUI1

(1,0x96)emittedhandler #320Integerconfirmed_msdocs
Pop two 8-bit unsigned integer (VB6 Byte) values; push their subtraction result.

Pops two 8-bit unsigned integer (VB6 Byte) operands b and a (top is b), computes a - b, pushes the 8-bit unsigned integer (VB6 Byte) result.

Stack: [..., a:UI1, b:UI1] -> [..., (a - b):UI1]

When the compiler emits it

Emitted when both operands of - are statically typed as Byte. Mixed-type expressions go through narrower or wider variants (SubR8 if Double appears; SubVar if Variant is involved).

VB6 source (verified: compiles to this slot)
Public Sub Main()
  Dim a As Byte, b As Byte, c As Byte
  c = a - b
End Sub
Encoding, evidence and notes
Encoding

Encoding: FB 96 (lead byte FB selects table 1), then 0 operand byte(s); total instruction length 2 byte(s).
Operands: none. All inputs come from the evaluation stack or the frame.
Observed: FB96 SubUI1

Evidence and notes

Emitted by VB6 SP6 (P-code): yes. Minimal probe: probes\op\1_96_SubUI1.

Handler: 0x6610AAF8, unique to this slot (real opcode #320).

Check of vb6_source_eq example: verified: compiles and emits this slot.

Example from the description
Dim a As Byte, b As Byte, c As Byte
c = a - b

Description: draft, by claude-opus-4.7. Handler 0x6610AAF8, dispatch slot 0x6610736C, modOpcodes line 1335.

SubVar

(1,0x9C)emittedhandler #321Variantinferred_corpus47 corpus hits
Pop two VBA Variant values; push their subtraction result.

Pops two VBA Variant operands b and a (top is b), computes a - b, pushes the VBA Variant result.

Stack: [..., a:Var, b:Var] -> [..., (a - b):Var]

Variant operands are coerced and the result type promoted per VB6 rules (Integer -> Long -> Double; presence of Currency forces Currency; presence of String triggers numeric parsing). Type-mismatch raises run-time error 13; arithmetic overflow raises error 6.

When the compiler emits it

Emitted when at least one operand of - is a Variant. Same-typed primitive operands instead emit SubI2/SubI4/SubR4/SubR8/SubCy.

VB6 source (verified: compiles to this slot)
Public Sub Main()
  Dim a As Variant, b As Variant, c As Variant
  c = a - b
End Sub
Encoding, evidence and notes
Encoding

Encoding: FB 9C (lead byte FB selects table 1), then 2 operand byte(s); total instruction length 4 byte(s).
vbdec template: %a
Operands:

  1. %a: local_var_ref, 2 byte(s). signed 16-bit offset from the procedure frame pointer (EBP). Negative = local/temporary (vbdec var_XX, XX = -offset), positive = argument (arg_XX).

Observed: FB9C 3CFF SubVar var_C4

Examples
fso.Proc_44BA68 @ 0x44BA68 | 44BB05    FB9C 3CFF             SubVar var_C4
CPDFStream.Proc_45998C @ 0x45998C | 4599EB    FB9C 34FF             SubVar var_CC
CPDFStream.Proc_45998C @ 0x45998C | 459A48    FB9C 34FF             SubVar var_CC

47 occurrence(s) in PDFStreamDumper.

Evidence and notes

Emitted by VB6 SP6 (P-code): yes. Minimal probe: probes\op\1_9C_SubVar.

Handler: 0x66105F4C, unique to this slot (real opcode #321).

Check of vb6_source_eq example: verified: compiles and emits this slot.

Corpus: 47 occurrence(s) in PDFStreamDumper_p.exe.

Example from the description
Dim a As Variant, b As Variant, c As Variant
c = a - b

Description: draft, by claude-opus-4.7. Handler 0x66105F4C, dispatch slot 0x66107384, modOpcodes line 1339.

Math_UnaryMinus

Unary minus

UMiCy

(0,0xBA)emittedprimary of 2handler #183Currencyconfirmed_msdocs
Pop one 64-bit scaled-integer Currency (×10^4); push its arithmetic negation.

Pops a of type 64-bit scaled-integer Currency (×10^4), pushes -a of the same type.

Stack: [..., a:Cy] -> [..., (-a):Cy]

For integer types, two's-complement negation; -MinValue raises overflow (error 6). For floating types, sign-bit flip per IEEE 754. Variant variant respects subtype.

When the compiler emits it

Emitted for unary - against Currency-typed operand.

VB6 source (verified: compiles to this slot)
Public Sub Main()
  Dim a As Currency, c As Currency
  c = -a
End Sub
Encoding, evidence and notes
Encoding

Encoding: BA, then 0 operand byte(s); total instruction length 1 byte(s).
Operands: none. All inputs come from the evaluation stack or the frame.
Observed: BA UMiCy

Evidence and notes

Emitted by VB6 SP6 (P-code): yes. Minimal probe: probes\op\0_BA_UMiCy.

Handler: 0x6610AC8C, shared by 2 dispatch slots (real opcode #183). This is the primary slot. Other slots: (1,CB) UMiCy.

Check of vb6_source_eq example: verified: compiles and emits this slot.

Example from the description
Dim a As Currency, c As Currency
c = -a
Slots sharing this handler

(1,0xCB) UMiCy

Description: draft, by claude-opus-4.7. Handler 0x6610AC8C, dispatch slot 0x66106FFC, modOpcodes line 1371.

UMiCy

(1,0xCB)not emitteddup of (0,BA)handler #183Currencyconfirmed_handler
(alias) Pop one 64-bit scaled-integer Currency (×10^4); push its arithmetic negation.

Alias dispatch slot (1, 0xCB) for the canonical UMiCy at (0, 0xBA); semantics are identical.

Pops a of type 64-bit scaled-integer Currency (×10^4), pushes -a of the same type.

Stack: [..., a:Cy] -> [..., (-a):Cy]

For integer types, two's-complement negation; -MinValue raises overflow (error 6). For floating types, sign-bit flip per IEEE 754. Variant variant respects subtype.

When the compiler emits it

Emitted for unary - against Currency-typed operand.

VB6 source (from description, not verified)
Dim a As Currency, c As Currency
c = -a
Encoding, evidence and notes
Encoding

Encoding: FB CB (lead byte FB selects table 1), then 0 operand byte(s); total instruction length 2 byte(s).
Operands: none. All inputs come from the evaluation stack or the frame.

Evidence and notes

Emitted by VB6 SP6 (P-code): not observed in about 3,070 probe programs. The slot exists in the runtime's dispatch table, but no tested source construct makes the compiler emit it.

Handler: 0x6610AC8C, shared by 2 dispatch slots (real opcode #183). This is a duplicate slot of (0,BA) UMiCy. Other slots: (0,BA) UMiCy.

Check of vb6_source_eq example: compiles, but emits a different slot of the same handler. emits (0,BA) UMiCy (same handler, different slot)

Slots sharing this handler

(0,0xBA) UMiCy

Description: draft, by claude-opus-4.7. Handler 0x6610AC8C, dispatch slot 0x66107440, modOpcodes line 1372.

UMiI2

(0,0xB7)emittedprimary of 2handler #180Integerconfirmed_msdocs
Pop one 16-bit signed integer (VB6 Integer); push its arithmetic negation.

Pops a of type 16-bit signed integer (VB6 Integer), pushes -a of the same type.

Stack: [..., a:I2] -> [..., (-a):I2]

For integer types, two's-complement negation; -MinValue raises overflow (error 6). For floating types, sign-bit flip per IEEE 754. Variant variant respects subtype.

When the compiler emits it

Emitted for unary - against Integer-typed operand.

VB6 source (verified: compiles to this slot)
Public Sub Main()
  Dim a As Integer, c As Integer
  c = -a
End Sub
Encoding, evidence and notes
Encoding

Encoding: B7, then 0 operand byte(s); total instruction length 1 byte(s).
Operands: none. All inputs come from the evaluation stack or the frame.
Observed: B7 UMiI2

Evidence and notes

Emitted by VB6 SP6 (P-code): yes. Minimal probe: probes\op\0_B7_UMiI2.

Handler: 0x6610AC53, shared by 2 dispatch slots (real opcode #180). This is the primary slot. Other slots: (1,C7) UMiI2.

Check of vb6_source_eq example: verified: compiles and emits this slot.

Example from the description
Dim a As Integer, c As Integer
c = -a
Slots sharing this handler

(1,0xC7) UMiI2

Description: draft, by claude-opus-4.7. Handler 0x6610AC53, dispatch slot 0x66106FF0, modOpcodes line 1366.

UMiI2

(1,0xC7)not emitteddup of (0,B7)handler #180Integerconfirmed_handler
(alias) Pop one 16-bit signed integer (VB6 Integer); push its arithmetic negation.

Alias dispatch slot (1, 0xC7) for the canonical UMiI2 at (0, 0xB7); semantics are identical.

Pops a of type 16-bit signed integer (VB6 Integer), pushes -a of the same type.

Stack: [..., a:I2] -> [..., (-a):I2]

For integer types, two's-complement negation; -MinValue raises overflow (error 6). For floating types, sign-bit flip per IEEE 754. Variant variant respects subtype.

When the compiler emits it

Emitted for unary - against Integer-typed operand.

VB6 source (from description, not verified)
Dim a As Integer, c As Integer
c = -a
Encoding, evidence and notes
Encoding

Encoding: FB C7 (lead byte FB selects table 1), then 0 operand byte(s); total instruction length 2 byte(s).
Operands: none. All inputs come from the evaluation stack or the frame.

Evidence and notes

Emitted by VB6 SP6 (P-code): not observed in about 3,070 probe programs. The slot exists in the runtime's dispatch table, but no tested source construct makes the compiler emit it.

Handler: 0x6610AC53, shared by 2 dispatch slots (real opcode #180). This is a duplicate slot of (0,B7) UMiI2. Other slots: (0,B7) UMiI2.

Check of vb6_source_eq example: compiles, but emits a different slot of the same handler. emits (0,B7) UMiI2 (same handler, different slot)

Slots sharing this handler

(0,0xB7) UMiI2

Description: draft, by claude-opus-4.7. Handler 0x6610AC53, dispatch slot 0x66107430, modOpcodes line 1367.

UMiI2

(1,0xC8)not emitteddup of (0,B8)handler #181Integerconfirmed_msdocs
Negate a 32-bit value (handler behaves as UMiI4 despite the UMiI2 name); never emitted.

Negates the 32-bit value on top of the stack in place (neg dword ptr [esp]).

Stack: [..., a:I4] -> [..., -a:I4]

When the compiler emits it

Not emitted by VB6 SP6. Phase 3b found this slot's handler negates a dword (UMiI4 behaviour), unlike UMiI2 (0,B7). -n with Integer uses (0,B7) and with Long (0,B8).

Encoding, evidence and notes
Encoding

Encoding: FB C8 (lead byte FB selects table 1), then 0 operand byte(s); total instruction length 2 byte(s).
Operands: none. All inputs come from the evaluation stack or the frame.

Evidence and notes

Emitted by VB6 SP6 (P-code): not observed in about 3,070 probe programs. The slot exists in the runtime's dispatch table, but no tested source construct makes the compiler emit it.

Handler: 0x6610AC69, shared by 2 dispatch slots (real opcode #181). This is a duplicate slot of (0,B8) UMiI4. Other slots: (0,B8) UMiI4.

Slots sharing this handler

(0,0xB8) UMiI4

Description: draft, by claude-opus-5-5. Handler 0x6610AC69, dispatch slot 0x66107434, modOpcodes line 1368.

UMiI4

(0,0xB8)emittedprimary of 2handler #181Integerconfirmed_msdocs2 corpus hits
Pop one 32-bit signed integer (VB6 Long); push its arithmetic negation.

Pops a of type 32-bit signed integer (VB6 Long), pushes -a of the same type.

Stack: [..., a:I4] -> [..., (-a):I4]

For integer types, two's-complement negation; -MinValue raises overflow (error 6). For floating types, sign-bit flip per IEEE 754. Variant variant respects subtype.

When the compiler emits it

Emitted for unary - against Long-typed operand.

VB6 source (verified: compiles to this slot)
Public Sub Main()
  Dim a As Long, c As Long
  c = -a
End Sub
Encoding, evidence and notes
Encoding

Encoding: B8, then 0 operand byte(s); total instruction length 1 byte(s).
Operands: none. All inputs come from the evaluation stack or the frame.
Observed: B8 UMiI4

Examples
frmRefactor.ScrollPage @ 0x4488F4 | 448937    B8                    UMiI4
frmRefactor.ScrollPage @ 0x4488F4 | 44897A    B8                    UMiI4

2 occurrence(s) in PDFStreamDumper.

Evidence and notes

Emitted by VB6 SP6 (P-code): yes. Minimal probe: probes\op\0_B8_UMiI4.

Handler: 0x6610AC69, shared by 2 dispatch slots (real opcode #181). This is the primary slot. Other slots: (1,C8) UMiI2.

Check of vb6_source_eq example: verified: compiles and emits this slot.

Corpus: 2 occurrence(s) in PDFStreamDumper_p.exe.

Example from the description
Dim a As Long, c As Long
c = -a
Slots sharing this handler

(1,0xC8) UMiI2

Description: draft, by claude-opus-4.7. Handler 0x6610AC69, dispatch slot 0x66106FF4, modOpcodes line 1369.

UMiR4

(1,0xC9)not emitteddup of (0,B9)handler #182Floating pointconfirmed_msdocs
Pop one 32-bit IEEE 754 float (VB6 Single); push its arithmetic negation.

Pops a of type 32-bit IEEE 754 float (VB6 Single), pushes -a of the same type.

Stack: [..., a:R4] -> [..., (-a):R4]

For integer types, two's-complement negation; -MinValue raises overflow (error 6). For floating types, sign-bit flip per IEEE 754. Variant variant respects subtype.

When the compiler emits it

Emitted for unary - against Single-typed operand.

VB6 source (from description, not verified)
Dim a As Single, c As Single
c = -a
Encoding, evidence and notes
Encoding

Encoding: FB C9 (lead byte FB selects table 1), then 0 operand byte(s); total instruction length 2 byte(s).
Operands: none. All inputs come from the evaluation stack or the frame.

Evidence and notes

Emitted by VB6 SP6 (P-code): not observed in about 3,070 probe programs. The slot exists in the runtime's dispatch table, but no tested source construct makes the compiler emit it.

Handler: 0x6610AC7E, shared by 3 dispatch slots (real opcode #182). This is a duplicate slot of (0,B9) UMiR8. Other slots: (0,B9) UMiR8, (1,CA) UMiR4.

Finding: Phase 4: Single arithmetic and comparisons compile to the R8 FPU opcodes (AddR8, LtR8, and so on). Operands are loaded with FLdFPR4 and stored with FStFPR4. This *R4 slot was never emitted.

Check of vb6_source_eq example: compiles, but emits a different slot of the same handler. emits (0,B9) UMiR8 (same handler, different slot)

Slots sharing this handler

(0,0xB9) UMiR8, (1,0xCA) UMiR4

Description: draft, by claude-opus-4.7. Handler 0x6610AC7E, dispatch slot 0x66107438, modOpcodes line 1373.

UMiR4

(1,0xCA)not emitteddup of (0,B9)handler #182Floating pointconfirmed_handler
(alias) Pop one 32-bit IEEE 754 float (VB6 Single); push its arithmetic negation.

Alias dispatch slot (1, 0xCA) for the canonical UMiR4 at (1, 0xC9); semantics are identical.

Pops a of type 32-bit IEEE 754 float (VB6 Single), pushes -a of the same type.

Stack: [..., a:R4] -> [..., (-a):R4]

For integer types, two's-complement negation; -MinValue raises overflow (error 6). For floating types, sign-bit flip per IEEE 754. Variant variant respects subtype.

When the compiler emits it

Emitted for unary - against Single-typed operand.

VB6 source (from description, not verified)
Dim a As Single, c As Single
c = -a
Encoding, evidence and notes
Encoding

Encoding: FB CA (lead byte FB selects table 1), then 0 operand byte(s); total instruction length 2 byte(s).
Operands: none. All inputs come from the evaluation stack or the frame.

Evidence and notes

Emitted by VB6 SP6 (P-code): not observed in about 3,070 probe programs. The slot exists in the runtime's dispatch table, but no tested source construct makes the compiler emit it.

Handler: 0x6610AC7E, shared by 3 dispatch slots (real opcode #182). This is a duplicate slot of (0,B9) UMiR8. Other slots: (0,B9) UMiR8, (1,C9) UMiR4.

Finding: Phase 4: Single arithmetic and comparisons compile to the R8 FPU opcodes (AddR8, LtR8, and so on). Operands are loaded with FLdFPR4 and stored with FStFPR4. This *R4 slot was never emitted.

Check of vb6_source_eq example: compiles, but emits a different slot of the same handler. emits (0,B9) UMiR8 (same handler, different slot)

Slots sharing this handler

(0,0xB9) UMiR8, (1,0xC9) UMiR4

Description: draft, by claude-opus-4.7. Handler 0x6610AC7E, dispatch slot 0x6610743C, modOpcodes line 1374.

UMiR8

(0,0xB9)emittedprimary of 3handler #182Floating pointconfirmed_msdocs2 corpus hits
Pop one 64-bit IEEE 754 float (VB6 Double); push its arithmetic negation.

Pops a of type 64-bit IEEE 754 float (VB6 Double), pushes -a of the same type.

Stack: [..., a:R8] -> [..., (-a):R8]

For integer types, two's-complement negation; -MinValue raises overflow (error 6). For floating types, sign-bit flip per IEEE 754. Variant variant respects subtype.

When the compiler emits it

Emitted for unary - against Double-typed operand.

VB6 source (verified: compiles to this slot)
Public Sub Main()
  Dim a As Single, c As Single
  c = -a
End Sub
Encoding, evidence and notes
Encoding

Encoding: B9, then 0 operand byte(s); total instruction length 1 byte(s).
Operands: none. All inputs come from the evaluation stack or the frame.
Observed: B9 UMiR8

Examples
frmFuncGraph.Proc_443640 @ 0x443640 | 4436A2    B9                    UMiR8
frmFuncGraph.Proc_4439B0 @ 0x4439B0 | 443A12    B9                    UMiR8

2 occurrence(s) in PDFStreamDumper.

Evidence and notes

Emitted by VB6 SP6 (P-code): yes. Minimal probe: probes\op\0_B9_UMiR8.

Handler: 0x6610AC7E, shared by 3 dispatch slots (real opcode #182). This is the primary slot. Other slots: (1,C9) UMiR4, (1,CA) UMiR4.

Check of vb6_source_eq example: verified: compiles and emits this slot.

Corpus: 2 occurrence(s) in PDFStreamDumper_p.exe.

Example from the description
Dim a As Double, c As Double
c = -a
Slots sharing this handler

(1,0xC9) UMiR4, (1,0xCA) UMiR4

Description: draft, by claude-opus-4.7. Handler 0x6610AC7E, dispatch slot 0x66106FF8, modOpcodes line 1370.

UMiVar

(1,0xCC)emittedhandler #331Variantinferred_corpus
Variant unary minus; result Variant in a temporary.

Pops a Variant, applies unary minus (Null propagates) and writes the result Variant to the temporary %a.

Stack: [..., a:Var] -> [..., r:Var]

When the compiler emits it

Emitted for unary minus applied to a Variant.

VB6 source (verified: compiles to this slot)
Public Sub Main()
  Dim a As Variant, c As Variant
  c = -a
End Sub
Encoding, evidence and notes
Encoding

Encoding: FB CC (lead byte FB selects table 1), then 2 operand byte(s); total instruction length 4 byte(s).
vbdec template: %a
Operands:

  1. %a: local_var_ref, 2 byte(s). signed 16-bit offset from the procedure frame pointer (EBP). Negative = local/temporary (vbdec var_XX, XX = -offset), positive = argument (arg_XX).

Observed: FBCC 4CFF UMiVar var_B4

Examples
FBCC 4CFF  UMiVar var_B4

From the Phase 4 probe (VB6 SP6, P-code).

Evidence and notes

Emitted by VB6 SP6 (P-code): yes. Minimal probe: probes\op\1_CC_UMiVar.

Handler: 0x66105F26, unique to this slot (real opcode #331).

Check of vb6_source_eq example: verified: compiles and emits this slot.

Example from the description
Public Sub Main()
  Dim a As Variant, c As Variant
  c = -a
End Sub

Description: draft, by claude-opus-5-5. Handler 0x66105F26, dispatch slot 0x66107444, modOpcodes line 1375.

Mem_PR_Load

Member load via PR register Prefix: PR

MemLdFPR4

(0,0x8C)emittedprimary of 2handler #137Floating pointconfirmed_handler
Load Single from a field at an offset from the cached object pointer pr.

Reads a Single, moved through the FPU (fld/fstp dword), and pushes it from a field at an offset from the cached object pointer pr.

Stack: [...] -> [..., v:FPR4]

Operands: %2: byte offset from pr ([ebp-4Ch], set by a preceding FLdPr/FLdPrThis/AryLdPr/LdPrVar/NewIfNull*).

Class/form member variables (pr = Me), procedure Static variables (pr = the static block), and elements of multi-dimensional arrays (pr = element address from AryLdPr).

When the compiler emits it

Emitted for reads of a field at an offset from the cached object pointer pr when the value is a Single. The storage class selects the prefix (Mem); the value class selects the suffix (FPR4).

VB6 source (verified: compiles to this slot)
Public Sub Main()
  Static a As Single
  Dim b As Single
  b = a
End Sub
Encoding, evidence and notes
Encoding

Encoding: 8C, then 2 operand byte(s); total instruction length 3 byte(s).
vbdec template: [pr + %2]
Operands:

  1. %2 (pr +): immediate_word, 2 byte(s). 16-bit immediate.

Observed: 8C 0000 MemLdFPR4 [pr + 0x0]

Examples
8C 0000  MemLdFPR4 [pr + 0x0]

From the Phase 4 probe (VB6 SP6, P-code).

Evidence and notes

Emitted by VB6 SP6 (P-code): yes. Minimal probe: probes\op\0_8C_MemLdFPR4.

Handler: 0x6610AE76, shared by 2 dispatch slots (real opcode #137). This is the primary slot. Other slots: (3,79) MemLdFPR4.

Check of vb6_source_eq example: verified: compiles and emits this slot.

Example from the description
Public Sub Main()
  Static a As Single
  Dim b As Single
  b = a
End Sub
Slots sharing this handler

(3,0x79) MemLdFPR4

Description: draft, by claude-opus-5-5. Handler 0x6610AE76, dispatch slot 0x66106F44, modOpcodes line 1029.

MemLdFPR4

(3,0x79)not emitteddup of (0,8C)handler #137Floating pointinferred_corpus
Same handler as (0,0x8C) MemLdFPR4: Load Single from a field at an offset from the cached object pointer pr.
Encoding, evidence and notes
Encoding

Encoding: FD 79 (lead byte FD selects table 3), then 2 operand byte(s); total instruction length 4 byte(s).
vbdec template: [pr + %2]
Operands:

  1. %2 (pr +): immediate_word, 2 byte(s). 16-bit immediate.
Evidence and notes

Emitted by VB6 SP6 (P-code): not observed in about 3,070 probe programs. The slot exists in the runtime's dispatch table, but no tested source construct makes the compiler emit it.

Handler: 0x6610AE76, shared by 2 dispatch slots (real opcode #137). This is a duplicate slot of (0,8C) MemLdFPR4. Other slots: (0,8C) MemLdFPR4.

Slots sharing this handler

(0,0x8C) MemLdFPR4

Description: none. Handler 0x6610AE76, dispatch slot 0x66107AF8, modOpcodes line 1003.

MemLdFPR8

(0,0x8D)emittedprimary of 2handler #138Floating pointconfirmed_handler
Load Double/Date from a field at an offset from the cached object pointer pr.

Reads a Double or Date, moved through the FPU (fld/fstp qword), and pushes it from a field at an offset from the cached object pointer pr.

Stack: [...] -> [..., v:FPR8]

Operands: %2: byte offset from pr ([ebp-4Ch], set by a preceding FLdPr/FLdPrThis/AryLdPr/LdPrVar/NewIfNull*).

Class/form member variables (pr = Me), procedure Static variables (pr = the static block), and elements of multi-dimensional arrays (pr = element address from AryLdPr).

When the compiler emits it

Emitted for reads of a field at an offset from the cached object pointer pr when the value is a Double/Date. The storage class selects the prefix (Mem); the value class selects the suffix (FPR8).

VB6 source (verified: compiles to this slot)
Public Sub Main()
  Static a As Date
  Dim b As Date
  b = a
End Sub
Encoding, evidence and notes
Encoding

Encoding: 8D, then 2 operand byte(s); total instruction length 3 byte(s).
vbdec template: [pr + %2]
Operands:

  1. %2 (pr +): immediate_word, 2 byte(s). 16-bit immediate.

Observed: 8D 0000 MemLdFPR8 [pr + 0x0]

Examples
8D 0000  MemLdFPR8 [pr + 0x0]

From the Phase 4 probe (VB6 SP6, P-code).

Evidence and notes

Emitted by VB6 SP6 (P-code): yes. Minimal probe: probes\op\0_8D_MemLdFPR8.

Handler: 0x6610AE8E, shared by 2 dispatch slots (real opcode #138). This is the primary slot. Other slots: (3,7A) MemLdFPR8.

Check of vb6_source_eq example: verified: compiles and emits this slot.

Example from the description
Public Sub Main()
  Static a As Date
  Dim b As Date
  b = a
End Sub
Slots sharing this handler

(3,0x7A) MemLdFPR8

Description: draft, by claude-opus-5-5. Handler 0x6610AE8E, dispatch slot 0x66106F48, modOpcodes line 1030.

MemLdFPR8

(3,0x7A)not emitteddup of (0,8D)handler #138Floating pointinferred_corpus
Same handler as (0,0x8D) MemLdFPR8: Load Double/Date from a field at an offset from the cached object pointer pr.
Encoding, evidence and notes
Encoding

Encoding: FD 7A (lead byte FD selects table 3), then 2 operand byte(s); total instruction length 4 byte(s).
vbdec template: [pr + %2]
Operands:

  1. %2 (pr +): immediate_word, 2 byte(s). 16-bit immediate.
Evidence and notes

Emitted by VB6 SP6 (P-code): not observed in about 3,070 probe programs. The slot exists in the runtime's dispatch table, but no tested source construct makes the compiler emit it.

Handler: 0x6610AE8E, shared by 2 dispatch slots (real opcode #138). This is a duplicate slot of (0,8D) MemLdFPR8. Other slots: (0,8D) MemLdFPR8.

Slots sharing this handler

(0,0x8D) MemLdFPR8

Description: none. Handler 0x6610AE8E, dispatch slot 0x66107AFC, modOpcodes line 1004.

MemLdI2

(0,0x89)emittedprimary of 2handler #134Integerconfirmed_handler46 corpus hits
(alias) Load a 16-bit signed integer (VB6 Integer) from [pr + offset] where pr is on the stack.

Alias dispatch slot (0, 0x89) for the canonical MemLdI2 at (3, 0x71); semantics are identical.

Pops an object pointer pr from the stack, reads a member at compile-time-known offset (operand %2), and pushes the value.

Stack: [..., pr:Pr] -> [..., (*(pr+offset)):I2]

Used by VB6 to access fields of Me, class instances, and module-level structures via their object descriptor.

When the compiler emits it

Emitted when reading a I2-typed field through an object pointer already on the stack.

VB6 source (verified: compiles to this slot)
Public Sub Main()
  Static a As Boolean
  Dim b As Boolean
  b = a
End Sub
Encoding, evidence and notes
Encoding

Encoding: 89, then 2 operand byte(s); total instruction length 3 byte(s).
vbdec template: [pr + %2]
Operands:

  1. %2 (pr +): immediate_word, 2 byte(s). 16-bit immediate.

Observed: 89 0000 MemLdI2 [pr + 0x0]

Examples
Form1.mnuEnableJBIG2_Click @ 0x4490FC | 4490FF    89 8600               MemLdI2  [pr + 0x86]
Form1.mnuHideDups_Click @ 0x4629E4 | 4629E7    89 8400               MemLdI2  [pr + 0x84]
Form1.mnuHideDups_Click @ 0x4629E4 | 462BFE    89 8400               MemLdI2  [pr + 0x84]

46 occurrence(s) in PDFStreamDumper.

Evidence and notes

Emitted by VB6 SP6 (P-code): yes. Minimal probe: probes\op\0_89_MemLdI2.

Handler: 0x66105F9A, shared by 2 dispatch slots (real opcode #134). This is the primary slot. Other slots: (3,71) MemLdI2.

Corpus: 46 occurrence(s) in PDFStreamDumper_p.exe.

Slots sharing this handler

(3,0x71) MemLdI2

Description: draft, by claude-opus-4.7. Handler 0x66105F9A, dispatch slot 0x66106F38, modOpcodes line 1026.

MemLdI2

(3,0x71)not emitteddup of (0,89)handler #134Integerinferred_corpus
Same handler as (0,0x89) MemLdI2: (alias) Load a 16-bit signed integer (VB6 Integer) from [pr + offset] where pr is on the stack.
Encoding, evidence and notes
Encoding

Encoding: FD 71 (lead byte FD selects table 3), then 2 operand byte(s); total instruction length 4 byte(s).
vbdec template: [pr + %2]
Operands:

  1. %2 (pr +): immediate_word, 2 byte(s). 16-bit immediate.
Evidence and notes

Emitted by VB6 SP6 (P-code): not observed in about 3,070 probe programs. The slot exists in the runtime's dispatch table, but no tested source construct makes the compiler emit it.

Handler: 0x66105F9A, shared by 2 dispatch slots (real opcode #134). This is a duplicate slot of (0,89) MemLdI2. Other slots: (0,89) MemLdI2.

Slots sharing this handler

(0,0x89) MemLdI2

Description: none. Handler 0x66105F9A, dispatch slot 0x66107AD8, modOpcodes line 995.

MemLdPr

(0,0x58)emittedprimary of 2handler #86Object / COMconfirmed_handler120 corpus hits
(alias) Load a object pointer from [pr + offset] where pr is on the stack.

Alias dispatch slot (0, 0x58) for the canonical MemLdPr at (3, 0x7B); semantics are identical.

Pops an object pointer pr from the stack, reads a member at compile-time-known offset (operand %2), and pushes the value.

Stack: [..., pr:Pr] -> [..., (*(pr+offset)):Pr]

Used by VB6 to access fields of Me, class instances, and module-level structures via their object descriptor.

When the compiler emits it

Emitted when reading a Pr-typed field through an object pointer already on the stack.

VB6 source (verified: compiles to this slot)
Public Sub Main()
  Dim o As Object
End Sub
' ---- UC1.ctl
Private Sub UserControl_Resize()
  Dim x As Single
  x = UserControl.Width
End Sub
Encoding, evidence and notes
Encoding

Encoding: 58, then 2 operand byte(s); total instruction length 3 byte(s).
vbdec template: [pr + %2]
Operands:

  1. %2 (pr +): immediate_word, 2 byte(s). 16-bit immediate.

Observed: 58 1000 MemLdPr [pr + 0x10]

Examples
Form1.LoadPlugins @ 0x4644FC | 464794    58 0000               MemLdPr [pr + 0x0]
Form1.mnuDecompileFlash_Click @ 0x4613A8 | 46149F    58 3400               MemLdPr [pr + 0x34]
Form1.mnuDecompileFlashTools_Click @ 0x45A770 | 45A838    58 3400               MemLdPr [pr + 0x34]

120 occurrence(s) in PDFStreamDumper.

Evidence and notes

Emitted by VB6 SP6 (P-code): yes. Minimal probe: probes\op\0_58_MemLdPr.

Handler: 0x661062CA, shared by 2 dispatch slots (real opcode #86). This is the primary slot. Other slots: (3,7B) MemLdPr.

Finding: Probe: a UserControl/UserDocument/PropertyPage reading its own base object (UserControl.Width) loads it from [pr+0x10] with this opcode. Not emitted by Exe/DLL classes or forms.

Corpus: 120 occurrence(s) in PDFStreamDumper_p.exe.

Slots sharing this handler

(3,0x7B) MemLdPr

Description: draft, by claude-opus-4.7. Handler 0x661062CA, dispatch slot 0x66106E74, modOpcodes line 1036.

MemLdPr

(3,0x7B)not emitteddup of (0,58)handler #86Object / COMinferred_corpus
Same handler as (0,0x58) MemLdPr: (alias) Load a object pointer from [pr + offset] where pr is on the stack.
Encoding, evidence and notes
Encoding

Encoding: FD 7B (lead byte FD selects table 3), then 2 operand byte(s); total instruction length 4 byte(s).
vbdec template: [pr + %2]
Operands:

  1. %2 (pr +): immediate_word, 2 byte(s). 16-bit immediate.
Evidence and notes

Emitted by VB6 SP6 (P-code): not observed in about 3,070 probe programs. The slot exists in the runtime's dispatch table, but no tested source construct makes the compiler emit it.

Handler: 0x661062CA, shared by 2 dispatch slots (real opcode #86). This is a duplicate slot of (0,58) MemLdPr. Other slots: (0,58) MemLdPr.

Slots sharing this handler

(0,0x58) MemLdPr

Description: none. Handler 0x661062CA, dispatch slot 0x66107B00, modOpcodes line 1005.

MemLdR4

(3,0x72)not emitteddup of (0,8A)handler #135Integerinferred_corpus
Same handler as (0,0x8A) MemLdStr: Load a BSTR (VB6 String) from [pr + offset] where pr is on the stack.
Encoding, evidence and notes
Encoding

Encoding: FD 72 (lead byte FD selects table 3), then 2 operand byte(s); total instruction length 4 byte(s).
vbdec template: [pr + %2]
Operands:

  1. %2 (pr +): immediate_word, 2 byte(s). 16-bit immediate.
Evidence and notes

Emitted by VB6 SP6 (P-code): not observed in about 3,070 probe programs. The slot exists in the runtime's dispatch table, but no tested source construct makes the compiler emit it.

Handler: 0x66105FB4, shared by 5 dispatch slots (real opcode #135). This is a duplicate slot of (0,8A) MemLdStr. Other slots: (0,8A) MemLdStr, (3,73) MemLdR4, (3,77) MemLdR4, (3,78) MemLdR4.

Slots sharing this handler

(0,0x8A) MemLdStr, (3,0x73) MemLdR4, (3,0x77) MemLdR4, (3,0x78) MemLdR4

Description: none. Handler 0x66105FB4, dispatch slot 0x66107ADC, modOpcodes line 996.

MemLdR4

(3,0x73)not emitteddup of (0,8A)handler #135Integerconfirmed_handler
Same handler as (0,0x8A) MemLdStr: Load a BSTR (VB6 String) from [pr + offset] where pr is on the stack.
Encoding, evidence and notes
Encoding

Encoding: FD 73 (lead byte FD selects table 3), then 2 operand byte(s); total instruction length 4 byte(s).
vbdec template: [pr + %2]
Operands:

  1. %2 (pr +): immediate_word, 2 byte(s). 16-bit immediate.
Evidence and notes

Emitted by VB6 SP6 (P-code): not observed in about 3,070 probe programs. The slot exists in the runtime's dispatch table, but no tested source construct makes the compiler emit it.

Handler: 0x66105FB4, shared by 5 dispatch slots (real opcode #135). This is a duplicate slot of (0,8A) MemLdStr. Other slots: (0,8A) MemLdStr, (3,72) MemLdR4, (3,77) MemLdR4, (3,78) MemLdR4.

Slots sharing this handler

(0,0x8A) MemLdStr, (3,0x72) MemLdR4, (3,0x77) MemLdR4, (3,0x78) MemLdR4

Description: none. Handler 0x66105FB4, dispatch slot 0x66107AE0, modOpcodes line 997.

MemLdR4

(3,0x77)not emitteddup of (0,8A)handler #135Integerconfirmed_handler
Same handler as (0,0x8A) MemLdStr: Load a BSTR (VB6 String) from [pr + offset] where pr is on the stack.
Encoding, evidence and notes
Encoding

Encoding: FD 77 (lead byte FD selects table 3), then 2 operand byte(s); total instruction length 4 byte(s).
vbdec template: [pr + %2]
Operands:

  1. %2 (pr +): immediate_word, 2 byte(s). 16-bit immediate.
Evidence and notes

Emitted by VB6 SP6 (P-code): not observed in about 3,070 probe programs. The slot exists in the runtime's dispatch table, but no tested source construct makes the compiler emit it.

Handler: 0x66105FB4, shared by 5 dispatch slots (real opcode #135). This is a duplicate slot of (0,8A) MemLdStr. Other slots: (0,8A) MemLdStr, (3,72) MemLdR4, (3,73) MemLdR4, (3,78) MemLdR4.

Slots sharing this handler

(0,0x8A) MemLdStr, (3,0x72) MemLdR4, (3,0x73) MemLdR4, (3,0x78) MemLdR4

Description: none. Handler 0x66105FB4, dispatch slot 0x66107AF0, modOpcodes line 1001.

MemLdR4

(3,0x78)not emitteddup of (0,8A)handler #135Integerconfirmed_handler
Same handler as (0,0x8A) MemLdStr: Load a BSTR (VB6 String) from [pr + offset] where pr is on the stack.
Encoding, evidence and notes
Encoding

Encoding: FD 78 (lead byte FD selects table 3), then 2 operand byte(s); total instruction length 4 byte(s).
vbdec template: [pr + %2]
Operands:

  1. %2 (pr +): immediate_word, 2 byte(s). 16-bit immediate.
Evidence and notes

Emitted by VB6 SP6 (P-code): not observed in about 3,070 probe programs. The slot exists in the runtime's dispatch table, but no tested source construct makes the compiler emit it.

Handler: 0x66105FB4, shared by 5 dispatch slots (real opcode #135). This is a duplicate slot of (0,8A) MemLdStr. Other slots: (0,8A) MemLdStr, (3,72) MemLdR4, (3,73) MemLdR4, (3,77) MemLdR4.

Slots sharing this handler

(0,0x8A) MemLdStr, (3,0x72) MemLdR4, (3,0x73) MemLdR4, (3,0x77) MemLdR4

Description: none. Handler 0x66105FB4, dispatch slot 0x66107AF4, modOpcodes line 1002.

MemLdR8

(0,0x8B)emittedprimary of 3handler #136Currencyconfirmed_handler
Load 8-byte value from a field at an offset from the cached object pointer pr.

Reads a raw 64-bit value (in practice a Currency; Double/Date use the FPR8 forms), and pushes it from a field at an offset from the cached object pointer pr.

Stack: [...] -> [..., v:R8]

Operands: %2: byte offset from pr ([ebp-4Ch], set by a preceding FLdPr/FLdPrThis/AryLdPr/LdPrVar/NewIfNull*).

Class/form member variables (pr = Me), procedure Static variables (pr = the static block), and elements of multi-dimensional arrays (pr = element address from AryLdPr).

The R8 suffix denotes a raw 8-byte move, not a floating-point type. Phase 4 probes show it used for Currency values. Single/Double values use the FPR4/FPR8 forms.

When the compiler emits it

Emitted for reads of a field at an offset from the cached object pointer pr when the value is a 8-byte value. The storage class selects the prefix (Mem); the value class selects the suffix (R8).

VB6 source (verified: compiles to this slot)
Public Sub Main()
  Static a As Currency
  Dim b As Currency
  b = a
End Sub
Encoding, evidence and notes
Encoding

Encoding: 8B, then 2 operand byte(s); total instruction length 3 byte(s).
vbdec template: [pr + %2]
Operands:

  1. %2 (pr +): immediate_word, 2 byte(s). 16-bit immediate.

Observed: 8B 0000 MemLdR8 [pr + 0x0]

Examples
8B 0000  MemLdR8 [pr + 0x0]

From the Phase 4 probe (VB6 SP6, P-code).

Evidence and notes

Emitted by VB6 SP6 (P-code): yes. Minimal probe: probes\op\0_8B_MemLdR8.

Handler: 0x6610AE5A, shared by 3 dispatch slots (real opcode #136). This is the primary slot. Other slots: (3,74) MemLdR8, (3,75) MemLdR8.

Check of vb6_source_eq example: verified: compiles and emits this slot.

Example from the description
Public Sub Main()
  Static a As Currency
  Dim b As Currency
  b = a
End Sub
Slots sharing this handler

(3,0x74) MemLdR8, (3,0x75) MemLdR8

Description: draft, by claude-opus-5-5. Handler 0x6610AE5A, dispatch slot 0x66106F40, modOpcodes line 1028.

MemLdR8

(3,0x74)not emitteddup of (0,8B)handler #136Currencyinferred_corpus
Same handler as (0,0x8B) MemLdR8: Load 8-byte value from a field at an offset from the cached object pointer pr.
Encoding, evidence and notes
Encoding

Encoding: FD 74 (lead byte FD selects table 3), then 2 operand byte(s); total instruction length 4 byte(s).
vbdec template: [pr + %2]
Operands:

  1. %2 (pr +): immediate_word, 2 byte(s). 16-bit immediate.
Evidence and notes

Emitted by VB6 SP6 (P-code): not observed in about 3,070 probe programs. The slot exists in the runtime's dispatch table, but no tested source construct makes the compiler emit it.

Handler: 0x6610AE5A, shared by 3 dispatch slots (real opcode #136). This is a duplicate slot of (0,8B) MemLdR8. Other slots: (0,8B) MemLdR8, (3,75) MemLdR8.

Slots sharing this handler

(0,0x8B) MemLdR8, (3,0x75) MemLdR8

Description: none. Handler 0x6610AE5A, dispatch slot 0x66107AE4, modOpcodes line 998.

MemLdR8

(3,0x75)not emitteddup of (0,8B)handler #136Currencyconfirmed_handler
Same handler as (0,0x8B) MemLdR8: Load 8-byte value from a field at an offset from the cached object pointer pr.
Encoding, evidence and notes
Encoding

Encoding: FD 75 (lead byte FD selects table 3), then 2 operand byte(s); total instruction length 4 byte(s).
vbdec template: [pr + %2]
Operands:

  1. %2 (pr +): immediate_word, 2 byte(s). 16-bit immediate.
Evidence and notes

Emitted by VB6 SP6 (P-code): not observed in about 3,070 probe programs. The slot exists in the runtime's dispatch table, but no tested source construct makes the compiler emit it.

Handler: 0x6610AE5A, shared by 3 dispatch slots (real opcode #136). This is a duplicate slot of (0,8B) MemLdR8. Other slots: (0,8B) MemLdR8, (3,74) MemLdR8.

Slots sharing this handler

(0,0x8B) MemLdR8, (3,0x74) MemLdR8

Description: none. Handler 0x6610AE5A, dispatch slot 0x66107AE8, modOpcodes line 999.

MemLdRfVar

(0,0x06)emittedprimary of 3handler #5Stack & frameinferred_corpus197 corpus hits
Load a ByRef Variant slot from [pr + offset] where pr is on the stack.

Pops an object pointer pr from the stack, reads a member at compile-time-known offset (operand %2), and pushes the value.

Stack: [..., pr:Pr] -> [..., (*(pr+offset)):RfVar]

Used by VB6 to access fields of Me, class instances, and module-level structures via their object descriptor.

When the compiler emits it

Emitted when reading a RfVar-typed field through an object pointer already on the stack.

VB6 source (verified: compiles to this slot)
Public Sub Main()
  Static a As Variant
  Dim b As Variant
  b = a
End Sub
Encoding, evidence and notes
Encoding

Encoding: 06, then 2 operand byte(s); total instruction length 3 byte(s).
vbdec template: [pr + %2]
Operands:

  1. %2 (pr +): immediate_word, 2 byte(s). 16-bit immediate.

Observed: 06 0000 MemLdRfVar [pr + 0x0]

Examples
Form1.LoadPlugins @ 0x4644FC | 464607    06 4C00               MemLdRfVar [pr + 0x4C]
Form1.LoadPlugins @ 0x4644FC | 464637    06 4C00               MemLdRfVar [pr + 0x4C]
Form1.mnub64decode_Click @ 0x451280 | 4512AC    06 3800               MemLdRfVar [pr + 0x38]

197 occurrence(s) in PDFStreamDumper.

Evidence and notes

Emitted by VB6 SP6 (P-code): yes. Minimal probe: probes\op\0_06_MemLdRfVar.

Handler: 0x66105FCC, shared by 3 dispatch slots (real opcode #5). This is the primary slot. Other slots: (3,76) MemLdRfVar, (3,7C) MemLdRfVar.

Corpus: 197 occurrence(s) in PDFStreamDumper_p.exe.

Slots sharing this handler

(3,0x76) MemLdRfVar, (3,0x7C) MemLdRfVar

Description: draft, by claude-opus-4.7. Handler 0x66105FCC, dispatch slot 0x66106D2C, modOpcodes line 993.

MemLdRfVar

(3,0x76)not emitteddup of (0,06)handler #5Stack & frameconfirmed_handler
Same handler as (0,0x06) MemLdRfVar: Load a ByRef Variant slot from [pr + offset] where pr is on the stack.
Encoding, evidence and notes
Encoding

Encoding: FD 76 (lead byte FD selects table 3), then 2 operand byte(s); total instruction length 4 byte(s).
vbdec template: [pr + %2]
Operands:

  1. %2 (pr +): immediate_word, 2 byte(s). 16-bit immediate.
Evidence and notes

Emitted by VB6 SP6 (P-code): not observed in about 3,070 probe programs. The slot exists in the runtime's dispatch table, but no tested source construct makes the compiler emit it.

Handler: 0x66105FCC, shared by 3 dispatch slots (real opcode #5). This is a duplicate slot of (0,06) MemLdRfVar. Other slots: (0,06) MemLdRfVar, (3,7C) MemLdRfVar.

Slots sharing this handler

(0,0x06) MemLdRfVar, (3,0x7C) MemLdRfVar

Description: none. Handler 0x66105FCC, dispatch slot 0x66107AEC, modOpcodes line 1000.

MemLdRfVar

(3,0x7C)not emitteddup of (0,06)handler #5Stack & frameconfirmed_handler
Same handler as (0,0x06) MemLdRfVar: Load a ByRef Variant slot from [pr + offset] where pr is on the stack.
Encoding, evidence and notes
Encoding

Encoding: FD 7C (lead byte FD selects table 3), then 2 operand byte(s); total instruction length 4 byte(s).
vbdec template: [pr + %2]
Operands:

  1. %2 (pr +): immediate_word, 2 byte(s). 16-bit immediate.
Evidence and notes

Emitted by VB6 SP6 (P-code): not observed in about 3,070 probe programs. The slot exists in the runtime's dispatch table, but no tested source construct makes the compiler emit it.

Handler: 0x66105FCC, shared by 3 dispatch slots (real opcode #5). This is a duplicate slot of (0,06) MemLdRfVar. Other slots: (0,06) MemLdRfVar, (3,76) MemLdRfVar.

Slots sharing this handler

(0,0x06) MemLdRfVar, (3,0x76) MemLdRfVar

Description: none. Handler 0x66105FCC, dispatch slot 0x66107B04, modOpcodes line 1006.

MemLdStr

(0,0x8A)emittedprimary of 5handler #135Stringinferred_corpus177 corpus hits
Load a BSTR (VB6 String) from [pr + offset] where pr is on the stack.

Pops an object pointer pr from the stack, reads a member at compile-time-known offset (operand %2), and pushes the value.

Stack: [..., pr:Pr] -> [..., (*(pr+offset)):Str]

Used by VB6 to access fields of Me, class instances, and module-level structures via their object descriptor.

When the compiler emits it

Emitted when reading a Str-typed field through an object pointer already on the stack.

VB6 source (verified: compiles to this slot)
Public Sub Main()
  Static a As Long
  Dim b As Long
  b = a
End Sub
Encoding, evidence and notes
Encoding

Encoding: 8A, then 2 operand byte(s); total instruction length 3 byte(s).
vbdec template: [pr + %2]
Operands:

  1. %2 (pr +): immediate_word, 2 byte(s). 16-bit immediate.

Observed: 8A 0000 MemLdStr [pr + 0x0]

Examples
Form1.LoadPlugins @ 0x4644FC | 46468C    8A 4C00               MemLdStr [pr + 0x4C]
Form1.LoadPlugins @ 0x4644FC | 464777    8A 4C00               MemLdStr [pr + 0x4C]
Form1.LoadPlugins @ 0x4644FC | 464790    8A 4C00               MemLdStr [pr + 0x4C]

177 occurrence(s) in PDFStreamDumper.

Evidence and notes

Emitted by VB6 SP6 (P-code): yes. Minimal probe: probes\op\0_8A_MemLdStr.

Handler: 0x66105FB4, shared by 5 dispatch slots (real opcode #135). This is the primary slot. Other slots: (3,72) MemLdR4, (3,73) MemLdR4, (3,77) MemLdR4, (3,78) MemLdR4.

Corpus: 177 occurrence(s) in PDFStreamDumper_p.exe.

Slots sharing this handler

(3,0x72) MemLdR4, (3,0x73) MemLdR4, (3,0x77) MemLdR4, (3,0x78) MemLdR4

Description: draft, by claude-opus-4.7. Handler 0x66105FB4, dispatch slot 0x66106F3C, modOpcodes line 1027.

MemLdUI1

(3,0x70)emittedhandler #535Integerinferred_corpus2 corpus hits
Load a 8-bit unsigned integer (VB6 Byte) from [pr + offset] where pr is on the stack.

Pops an object pointer pr from the stack, reads a member at compile-time-known offset (operand %2), and pushes the value.

Stack: [..., pr:Pr] -> [..., (*(pr+offset)):UI1]

Used by VB6 to access fields of Me, class instances, and module-level structures via their object descriptor.

When the compiler emits it

Emitted when reading a UI1-typed field through an object pointer already on the stack.

VB6 source (verified: compiles to this slot)
Public Sub Main()
  Static a As Byte
  Dim b As Byte
  b = a
End Sub
Encoding, evidence and notes
Encoding

Encoding: FD 70 (lead byte FD selects table 3), then 2 operand byte(s); total instruction length 4 byte(s).
vbdec template: [pr + %2]
Operands:

  1. %2 (pr +): immediate_word, 2 byte(s). 16-bit immediate.

Observed: FD70 0000 MemLdUI1 [pr + 0x0]

Examples
lzma.Proc_46E084 @ 0x46E084 | 46E190    FD70 0000             MemLdUI1 [pr + 0x0]
lzma.Proc_46E084 @ 0x46E084 | 46E241    FD70 0000             MemLdUI1 [pr + 0x0]

2 occurrence(s) in PDFStreamDumper.

Evidence and notes

Emitted by VB6 SP6 (P-code): yes. Minimal probe: probes\op\3_70_MemLdUI1.

Handler: 0x6610AE40, unique to this slot (real opcode #535).

Corpus: 2 occurrence(s) in PDFStreamDumper_p.exe.

Description: draft, by claude-opus-4.7. Handler 0x6610AE40, dispatch slot 0x66107AD4, modOpcodes line 994.

MemLdVar

(3,0x7D)not emittedhandler #536Variantinferred_corpus
No description yet.
Encoding, evidence and notes
Encoding

Encoding: FD 7D (lead byte FD selects table 3), then 2 operand byte(s); total instruction length 4 byte(s).
vbdec template: [pr + %2]
Operands:

  1. %2 (pr +): immediate_word, 2 byte(s). 16-bit immediate.
Evidence and notes

Emitted by VB6 SP6 (P-code): not observed in about 3,070 probe programs. The slot exists in the runtime's dispatch table, but no tested source construct makes the compiler emit it.

Handler: 0x6610B141, unique to this slot (real opcode #536).

Description: none. Handler 0x6610B141, dispatch slot 0x66107B08, modOpcodes line 1007.

Mem_PR_Store

Member store via PR register Prefix: PR

MemStAd

(3,0x88)emittedhandler #540Object / COMinferred_corpus30 corpus hits
Store a raw 32-bit address (pointer) into [pr + offset] (pr on the stack).

Pops the value and an object pointer, writes value at pr+offset (operand %2).

Stack: [..., pr:Pr, v:Ad] -> [...]

Mirror of MemLd* family. Copy variants take a copy semantically appropriate to the type (BSTR SysAllocString, Variant VariantCopy).

When the compiler emits it

Emitted when writing a Ad-typed field through an object pointer.

VB6 source (verified: compiles to this slot)
Public Sub Main()
  Static a As Object
  Dim b As Object
  Set a = New Collection
End Sub
Encoding, evidence and notes
Encoding

Encoding: FD 88 (lead byte FD selects table 3), then 2 operand byte(s); total instruction length 4 byte(s).
vbdec template: [pr + %2]
Operands:

  1. %2 (pr +): immediate_word, 2 byte(s). 16-bit immediate.

Observed: FD88 0000 MemStAd [pr + 0x0]

Examples
Form1.lv_ItemClick @ 0x445424 | 445470    FD88 3400             MemStAd [pr + 0x34]
Form1.lv2_ItemClick @ 0x445104 | 445150    FD88 3400             MemStAd [pr + 0x34]
Form1.lvSearch_ItemClick(ByVal Item As ListItem) @ 0x44F68C | 44F6CD    FD88 3400             MemStAd [pr + 0x34]

30 occurrence(s) in PDFStreamDumper.

Evidence and notes

Emitted by VB6 SP6 (P-code): yes. Minimal probe: probes\op\3_88_MemStAd.

Handler: 0x661063B1, unique to this slot (real opcode #540).

Corpus: 30 occurrence(s) in PDFStreamDumper_p.exe.

Description: draft, by claude-opus-4.7. Handler 0x661063B1, dispatch slot 0x66107B34, modOpcodes line 1016.

MemStAdFunc

(3,0x8F)not emittedhandler #545Object / COMinferred_corpus
No description yet.
Encoding, evidence and notes
Encoding

Encoding: FD 8F (lead byte FD selects table 3), then 2 operand byte(s); total instruction length 4 byte(s).
vbdec template: [pr + %2]
Operands:

  1. %2 (pr +): immediate_word, 2 byte(s). 16-bit immediate.
Evidence and notes

Emitted by VB6 SP6 (P-code): not observed in about 3,070 probe programs. The slot exists in the runtime's dispatch table, but no tested source construct makes the compiler emit it.

Handler: 0x6610B3CA, unique to this slot (real opcode #545).

Description: none. Handler 0x6610B3CA, dispatch slot 0x66107B50, modOpcodes line 1023.

MemStCy

(3,0x84)not emitteddup of (0,90)handler #141Currencyinferred_corpus
Same handler as (0,0x90) MemStR8: Store 8-byte value into a field at an offset from the cached object pointer pr.
Encoding, evidence and notes
Encoding

Encoding: FD 84 (lead byte FD selects table 3), then 2 operand byte(s); total instruction length 4 byte(s).
vbdec template: [pr + %2]
Operands:

  1. %2 (pr +): immediate_word, 2 byte(s). 16-bit immediate.
Evidence and notes

Emitted by VB6 SP6 (P-code): not observed in about 3,070 probe programs. The slot exists in the runtime's dispatch table, but no tested source construct makes the compiler emit it.

Handler: 0x6610AEBF, shared by 3 dispatch slots (real opcode #141). This is a duplicate slot of (0,90) MemStR8. Other slots: (0,90) MemStR8, (3,85) MemStCy.

Slots sharing this handler

(0,0x90) MemStR8, (3,0x85) MemStCy

Description: none. Handler 0x6610AEBF, dispatch slot 0x66107B24, modOpcodes line 1012.

MemStCy

(3,0x85)not emitteddup of (0,90)handler #141Currencyconfirmed_handler
Same handler as (0,0x90) MemStR8: Store 8-byte value into a field at an offset from the cached object pointer pr.
Encoding, evidence and notes
Encoding

Encoding: FD 85 (lead byte FD selects table 3), then 2 operand byte(s); total instruction length 4 byte(s).
vbdec template: [pr + %2]
Operands:

  1. %2 (pr +): immediate_word, 2 byte(s). 16-bit immediate.
Evidence and notes

Emitted by VB6 SP6 (P-code): not observed in about 3,070 probe programs. The slot exists in the runtime's dispatch table, but no tested source construct makes the compiler emit it.

Handler: 0x6610AEBF, shared by 3 dispatch slots (real opcode #141). This is a duplicate slot of (0,90) MemStR8. Other slots: (0,90) MemStR8, (3,84) MemStCy.

Slots sharing this handler

(0,0x90) MemStR8, (3,0x84) MemStCy

Description: none. Handler 0x6610AEBF, dispatch slot 0x66107B28, modOpcodes line 1013.

MemStFPR4

(0,0x91)emittedprimary of 2handler #142Floating pointconfirmed_handler
Store Single into a field at an offset from the cached object pointer pr.

Pops a Single, moved through the FPU (fld/fstp dword), and writes it to a field at an offset from the cached object pointer pr.

Stack: [..., v:FPR4] -> [...]

Operands: %2: byte offset from pr ([ebp-4Ch], set by a preceding FLdPr/FLdPrThis/AryLdPr/LdPrVar/NewIfNull*).

Class/form member variables (pr = Me), procedure Static variables (pr = the static block), and elements of multi-dimensional arrays (pr = element address from AryLdPr).

When the compiler emits it

Emitted for assignments to a field at an offset from the cached object pointer pr when the value is a Single. The storage class selects the prefix (Mem); the value class selects the suffix (FPR4).

VB6 source (verified: compiles to this slot)
Public Sub Main()
  Static a As Single
  Dim b As Single
  a = 1.5!
End Sub
Encoding, evidence and notes
Encoding

Encoding: 91, then 2 operand byte(s); total instruction length 3 byte(s).
vbdec template: [pr + %2]
Operands:

  1. %2 (pr +): immediate_word, 2 byte(s). 16-bit immediate.

Observed: 91 0000 MemStFPR4 [pr + 0x0]

Examples
91 0000  MemStFPR4 [pr + 0x0]

From the Phase 4 probe (VB6 SP6, P-code).

Evidence and notes

Emitted by VB6 SP6 (P-code): yes. Minimal probe: probes\op\0_91_MemStFPR4.

Handler: 0x6610AEDB, shared by 2 dispatch slots (real opcode #142). This is the primary slot. Other slots: (3,89) MemStFPR4.

Check of vb6_source_eq example: verified: compiles and emits this slot.

Example from the description
Public Sub Main()
  Static a As Single
  Dim b As Single
  a = 1.5!
End Sub
Slots sharing this handler

(3,0x89) MemStFPR4

Description: draft, by claude-opus-5-5. Handler 0x6610AEDB, dispatch slot 0x66106F58, modOpcodes line 1034.

MemStFPR4

(3,0x89)not emitteddup of (0,91)handler #142Floating pointinferred_corpus
Same handler as (0,0x91) MemStFPR4: Store Single into a field at an offset from the cached object pointer pr.
Encoding, evidence and notes
Encoding

Encoding: FD 89 (lead byte FD selects table 3), then 2 operand byte(s); total instruction length 4 byte(s).
vbdec template: [pr + %2]
Operands:

  1. %2 (pr +): immediate_word, 2 byte(s). 16-bit immediate.
Evidence and notes

Emitted by VB6 SP6 (P-code): not observed in about 3,070 probe programs. The slot exists in the runtime's dispatch table, but no tested source construct makes the compiler emit it.

Handler: 0x6610AEDB, shared by 2 dispatch slots (real opcode #142). This is a duplicate slot of (0,91) MemStFPR4. Other slots: (0,91) MemStFPR4.

Slots sharing this handler

(0,0x91) MemStFPR4

Description: none. Handler 0x6610AEDB, dispatch slot 0x66107B38, modOpcodes line 1017.

MemStFPR8

(0,0x92)emittedprimary of 2handler #143Floating pointconfirmed_handler
Store Double/Date into a field at an offset from the cached object pointer pr.

Pops a Double or Date, moved through the FPU (fld/fstp qword), and writes it to a field at an offset from the cached object pointer pr.

Stack: [..., v:FPR8] -> [...]

Operands: %2: byte offset from pr ([ebp-4Ch], set by a preceding FLdPr/FLdPrThis/AryLdPr/LdPrVar/NewIfNull*).

Class/form member variables (pr = Me), procedure Static variables (pr = the static block), and elements of multi-dimensional arrays (pr = element address from AryLdPr).

When the compiler emits it

Emitted for assignments to a field at an offset from the cached object pointer pr when the value is a Double/Date. The storage class selects the prefix (Mem); the value class selects the suffix (FPR8).

VB6 source (verified: compiles to this slot)
Public Sub Main()
  Static a As Date
  Dim b As Date
  a = #1/1/2000#
End Sub
Encoding, evidence and notes
Encoding

Encoding: 92, then 2 operand byte(s); total instruction length 3 byte(s).
vbdec template: [pr + %2]
Operands:

  1. %2 (pr +): immediate_word, 2 byte(s). 16-bit immediate.

Observed: 92 0000 MemStFPR8 [pr + 0x0]

Examples
92 0000  MemStFPR8 [pr + 0x0]

From the Phase 4 probe (VB6 SP6, P-code).

Evidence and notes

Emitted by VB6 SP6 (P-code): yes. Minimal probe: probes\op\0_92_MemStFPR8.

Handler: 0x6610AEFD, shared by 2 dispatch slots (real opcode #143). This is the primary slot. Other slots: (3,8A) MemStFPR8.

Check of vb6_source_eq example: verified: compiles and emits this slot.

Example from the description
Public Sub Main()
  Static a As Date
  Dim b As Date
  a = #1/1/2000#
End Sub
Slots sharing this handler

(3,0x8A) MemStFPR8

Description: draft, by claude-opus-5-5. Handler 0x6610AEFD, dispatch slot 0x66106F5C, modOpcodes line 1035.

MemStFPR8

(3,0x8A)not emitteddup of (0,92)handler #143Floating pointinferred_corpus
Same handler as (0,0x92) MemStFPR8: Store Double/Date into a field at an offset from the cached object pointer pr.
Encoding, evidence and notes
Encoding

Encoding: FD 8A (lead byte FD selects table 3), then 2 operand byte(s); total instruction length 4 byte(s).
vbdec template: [pr + %2]
Operands:

  1. %2 (pr +): immediate_word, 2 byte(s). 16-bit immediate.
Evidence and notes

Emitted by VB6 SP6 (P-code): not observed in about 3,070 probe programs. The slot exists in the runtime's dispatch table, but no tested source construct makes the compiler emit it.

Handler: 0x6610AEFD, shared by 2 dispatch slots (real opcode #143). This is a duplicate slot of (0,92) MemStFPR8. Other slots: (0,92) MemStFPR8.

Slots sharing this handler

(0,0x92) MemStFPR8

Description: none. Handler 0x6610AEFD, dispatch slot 0x66107B3C, modOpcodes line 1018.

MemStI2

(0,0x8E)emittedprimary of 2handler #139Integerconfirmed_handler48 corpus hits
(alias) Store a 16-bit signed integer (VB6 Integer) into [pr + offset] (pr on the stack).

Alias dispatch slot (0, 0x8E) for the canonical MemStI2 at (3, 0x81); semantics are identical.

Pops the value and an object pointer, writes value at pr+offset (operand %2).

Stack: [..., pr:Pr, v:I2] -> [...]

Mirror of MemLd* family. Copy variants take a copy semantically appropriate to the type (BSTR SysAllocString, Variant VariantCopy).

When the compiler emits it

Emitted when writing a I2-typed field through an object pointer.

VB6 source (verified: compiles to this slot)
Public Sub Main()
  Static a As Boolean
  Dim b As Boolean
  a = True
End Sub
Encoding, evidence and notes
Encoding

Encoding: 8E, then 2 operand byte(s); total instruction length 3 byte(s).
vbdec template: [pr + %2]
Operands:

  1. %2 (pr +): immediate_word, 2 byte(s). 16-bit immediate.

Observed: 8E 0000 MemStI2 [pr + 0x0]

Examples
Form1.cmdBrowse_Click @ 0x445294 | 445299    8E 3C00               MemStI2 [pr + 0x3C]
Form1.cmdDecode_Click @ 0x4775C0 | 477D05    8E 8400               MemStI2 [pr + 0x84]
Form1.cmdDecode_Click @ 0x4775C0 | 477D5A    8E 8400               MemStI2 [pr + 0x84]

48 occurrence(s) in PDFStreamDumper.

Evidence and notes

Emitted by VB6 SP6 (P-code): yes. Minimal probe: probes\op\0_8E_MemStI2.

Handler: 0x66105FE4, shared by 2 dispatch slots (real opcode #139). This is the primary slot. Other slots: (3,81) MemStI2.

Corpus: 48 occurrence(s) in PDFStreamDumper_p.exe.

Slots sharing this handler

(3,0x81) MemStI2

Description: draft, by claude-opus-4.7. Handler 0x66105FE4, dispatch slot 0x66106F4C, modOpcodes line 1031.

MemStI2

(3,0x81)not emitteddup of (0,8E)handler #139Integerinferred_corpus
Same handler as (0,0x8E) MemStI2: (alias) Store a 16-bit signed integer (VB6 Integer) into [pr + offset] (pr on the stack).
Encoding, evidence and notes
Encoding

Encoding: FD 81 (lead byte FD selects table 3), then 2 operand byte(s); total instruction length 4 byte(s).
vbdec template: [pr + %2]
Operands:

  1. %2 (pr +): immediate_word, 2 byte(s). 16-bit immediate.
Evidence and notes

Emitted by VB6 SP6 (P-code): not observed in about 3,070 probe programs. The slot exists in the runtime's dispatch table, but no tested source construct makes the compiler emit it.

Handler: 0x66105FE4, shared by 2 dispatch slots (real opcode #139). This is a duplicate slot of (0,8E) MemStI2. Other slots: (0,8E) MemStI2.

Slots sharing this handler

(0,0x8E) MemStI2

Description: none. Handler 0x66105FE4, dispatch slot 0x66107B18, modOpcodes line 1009.

MemStI4

(0,0x8F)emittedprimary of 3handler #140Integerinferred_corpus57 corpus hits
Store a 32-bit signed integer (VB6 Long) into [pr + offset] (pr on the stack).

Pops the value and an object pointer, writes value at pr+offset (operand %2).

Stack: [..., pr:Pr, v:I4] -> [...]

Mirror of MemLd* family. Copy variants take a copy semantically appropriate to the type (BSTR SysAllocString, Variant VariantCopy).

When the compiler emits it

Emitted when writing a I4-typed field through an object pointer.

VB6 source (verified: compiles to this slot)
Public Sub Main()
  Static a As Long
  Dim b As Long
  a = 70000
End Sub
Encoding, evidence and notes
Encoding

Encoding: 8F, then 2 operand byte(s); total instruction length 3 byte(s).
vbdec template: [pr + %2]
Operands:

  1. %2 (pr +): immediate_word, 2 byte(s). 16-bit immediate.

Observed: 8F 0000 MemStI4 [pr + 0x0]

Examples
Form1.parser_NewStream @ 0x472690 | 472A75    8F 6800               MemStI4 [pr + 0x68]
Form1.parser_NewStream @ 0x472690 | 472A9E    8F 7400               MemStI4 [pr + 0x74]
Form1.parser_NewStream @ 0x472690 | 472AC7    8F 6C00               MemStI4 [pr + 0x6C]

57 occurrence(s) in PDFStreamDumper.

Evidence and notes

Emitted by VB6 SP6 (P-code): yes. Minimal probe: probes\op\0_8F_MemStI4.

Handler: 0x66105FFE, shared by 3 dispatch slots (real opcode #140). This is the primary slot. Other slots: (3,82) MemStR4, (3,83) MemStR4.

Corpus: 57 occurrence(s) in PDFStreamDumper_p.exe.

Slots sharing this handler

(3,0x82) MemStR4, (3,0x83) MemStR4

Description: draft, by claude-opus-4.7. Handler 0x66105FFE, dispatch slot 0x66106F50, modOpcodes line 1032.

MemStR4

(3,0x82)not emitteddup of (0,8F)handler #140Integerinferred_corpus
Same handler as (0,0x8F) MemStI4: Store a 32-bit signed integer (VB6 Long) into [pr + offset] (pr on the stack).
Encoding, evidence and notes
Encoding

Encoding: FD 82 (lead byte FD selects table 3), then 2 operand byte(s); total instruction length 4 byte(s).
vbdec template: [pr + %2]
Operands:

  1. %2 (pr +): immediate_word, 2 byte(s). 16-bit immediate.
Evidence and notes

Emitted by VB6 SP6 (P-code): not observed in about 3,070 probe programs. The slot exists in the runtime's dispatch table, but no tested source construct makes the compiler emit it.

Handler: 0x66105FFE, shared by 3 dispatch slots (real opcode #140). This is a duplicate slot of (0,8F) MemStI4. Other slots: (0,8F) MemStI4, (3,83) MemStR4.

Slots sharing this handler

(0,0x8F) MemStI4, (3,0x83) MemStR4

Description: none. Handler 0x66105FFE, dispatch slot 0x66107B1C, modOpcodes line 1010.

MemStR4

(3,0x83)not emitteddup of (0,8F)handler #140Integerconfirmed_handler
Same handler as (0,0x8F) MemStI4: Store a 32-bit signed integer (VB6 Long) into [pr + offset] (pr on the stack).
Encoding, evidence and notes
Encoding

Encoding: FD 83 (lead byte FD selects table 3), then 2 operand byte(s); total instruction length 4 byte(s).
vbdec template: [pr + %2]
Operands:

  1. %2 (pr +): immediate_word, 2 byte(s). 16-bit immediate.
Evidence and notes

Emitted by VB6 SP6 (P-code): not observed in about 3,070 probe programs. The slot exists in the runtime's dispatch table, but no tested source construct makes the compiler emit it.

Handler: 0x66105FFE, shared by 3 dispatch slots (real opcode #140). This is a duplicate slot of (0,8F) MemStI4. Other slots: (0,8F) MemStI4, (3,82) MemStR4.

Slots sharing this handler

(0,0x8F) MemStI4, (3,0x82) MemStR4

Description: none. Handler 0x66105FFE, dispatch slot 0x66107B20, modOpcodes line 1011.

MemStR8

(0,0x90)emittedprimary of 3handler #141Currencyinferred_corpus
Store 8-byte value into a field at an offset from the cached object pointer pr.

Pops a raw 64-bit value (in practice a Currency; Double/Date use the FPR8 forms), and writes it to a field at an offset from the cached object pointer pr.

Stack: [..., v:R8] -> [...]

Operands: %2: byte offset from pr ([ebp-4Ch], set by a preceding FLdPr/FLdPrThis/AryLdPr/LdPrVar/NewIfNull*).

Class/form member variables (pr = Me), procedure Static variables (pr = the static block), and elements of multi-dimensional arrays (pr = element address from AryLdPr).

The R8 suffix denotes a raw 8-byte move, not a floating-point type. Phase 4 probes show it used for Currency values. Single/Double values use the FPR4/FPR8 forms.

When the compiler emits it

Emitted for assignments to a field at an offset from the cached object pointer pr when the value is a 8-byte value. The storage class selects the prefix (Mem); the value class selects the suffix (R8).

VB6 source (verified: compiles to this slot)
Public Sub Main()
  Static a As Currency
  Dim b As Currency
  a = 1.5@
End Sub
Encoding, evidence and notes
Encoding

Encoding: 90, then 2 operand byte(s); total instruction length 3 byte(s).
vbdec template: [pr + %2]
Operands:

  1. %2 (pr +): immediate_word, 2 byte(s). 16-bit immediate.

Observed: 90 0000 MemStR8 [pr + 0x0]

Examples
90 0000  MemStR8 [pr + 0x0]

From the Phase 4 probe (VB6 SP6, P-code).

Evidence and notes

Emitted by VB6 SP6 (P-code): yes. Minimal probe: probes\op\0_90_MemStR8.

Handler: 0x6610AEBF, shared by 3 dispatch slots (real opcode #141). This is the primary slot. Other slots: (3,84) MemStCy, (3,85) MemStCy.

Check of vb6_source_eq example: verified: compiles and emits this slot.

Example from the description
Public Sub Main()
  Static a As Currency
  Dim b As Currency
  a = 1.5@
End Sub
Slots sharing this handler

(3,0x84) MemStCy, (3,0x85) MemStCy

Description: draft, by claude-opus-5-5. Handler 0x6610AEBF, dispatch slot 0x66106F54, modOpcodes line 1033.

MemStStr

(3,0x87)not emittedhandler #539Stringinferred_corpus
No description yet.
Encoding, evidence and notes
Encoding

Encoding: FD 87 (lead byte FD selects table 3), then 2 operand byte(s); total instruction length 4 byte(s).
vbdec template: [pr + %2]
Operands:

  1. %2 (pr +): immediate_word, 2 byte(s). 16-bit immediate.
Evidence and notes

Emitted by VB6 SP6 (P-code): not observed in about 3,070 probe programs. The slot exists in the runtime's dispatch table, but no tested source construct makes the compiler emit it.

Handler: 0x6610B2D0, unique to this slot (real opcode #539).

Description: none. Handler 0x6610B2D0, dispatch slot 0x66107B30, modOpcodes line 1015.

MemStStrCopy

(3,0x91)emittedhandler #547Stringinferred_corpus102 corpus hits
Store a value of suffix ` into [pr + offset]` (pr on the stack).

Pops the value and an object pointer, writes value at pr+offset (operand %2).

Stack: [..., pr:Pr, v:] -> [...]

Mirror of MemLd* family. Copy variants take a copy semantically appropriate to the type (BSTR SysAllocString, Variant VariantCopy).

When the compiler emits it

Emitted when writing a -typed field through an object pointer.

VB6 source (verified: compiles to this slot)
Private Type TRec
  a As Long
  s As String
  v As Variant
  o As Object
End Type
Private Type TPlain
  a As Long
  b As Integer
End Type

Public Sub Main()
  
End Sub

Private Sub P()
  Static r As TRec
  r.s = "x"
End Sub
Encoding, evidence and notes
Encoding

Encoding: FD 91 (lead byte FD selects table 3), then 2 operand byte(s); total instruction length 4 byte(s).
vbdec template: [pr + %2]
Operands:

  1. %2 (pr +): immediate_word, 2 byte(s). 16-bit immediate.

Observed: FD91 0400 MemStStrCopy [pr + 0x4]

Examples
Form1.mnuSecureDownload_Click @ 0x456570 | 4566D4    FD91 8C00             MemStStrCopy [pr + 0x8C]
Form1.Form_Load @ 0x479DC0 | 47B372    FD91 9000             MemStStrCopy [pr + 0x90]
clsCmnDlg.OpenDialog @ 0x457B6C | 457BA3    FD91 4000             MemStStrCopy [pr + 0x40]

102 occurrence(s) in PDFStreamDumper.

Evidence and notes

Emitted by VB6 SP6 (P-code): yes. Minimal probe: probes\op\3_91_MemStStrCopy.

Handler: 0x6610635E, unique to this slot (real opcode #547).

Corpus: 102 occurrence(s) in PDFStreamDumper_p.exe.

Description: draft, by claude-opus-4.7. Handler 0x6610635E, dispatch slot 0x66107B58, modOpcodes line 1025.

MemStUI1

(3,0x80)emittedhandler #537Integerinferred_corpus1 corpus hits
Store a 8-bit unsigned integer (VB6 Byte) into [pr + offset] (pr on the stack).

Pops the value and an object pointer, writes value at pr+offset (operand %2).

Stack: [..., pr:Pr, v:UI1] -> [...]

Mirror of MemLd* family. Copy variants take a copy semantically appropriate to the type (BSTR SysAllocString, Variant VariantCopy).

When the compiler emits it

Emitted when writing a UI1-typed field through an object pointer.

VB6 source (verified: compiles to this slot)
Public Sub Main()
  Static a As Byte
  Dim b As Byte
  a = 7
End Sub
Encoding, evidence and notes
Encoding

Encoding: FD 80 (lead byte FD selects table 3), then 2 operand byte(s); total instruction length 4 byte(s).
vbdec template: [pr + %2]
Operands:

  1. %2 (pr +): immediate_word, 2 byte(s). 16-bit immediate.

Observed: FD80 0000 MemStUI1 [pr + 0x0]

Examples
lzma.Proc_46E084 @ 0x46E084 | 46E253    FD80 0000             MemStUI1 [pr + 0x0]

1 occurrence(s) in PDFStreamDumper.

Evidence and notes

Emitted by VB6 SP6 (P-code): yes. Minimal probe: probes\op\3_80_MemStUI1.

Handler: 0x6610AEA6, unique to this slot (real opcode #537).

Corpus: 1 occurrence(s) in PDFStreamDumper_p.exe.

Description: draft, by claude-opus-4.7. Handler 0x6610AEA6, dispatch slot 0x66107B14, modOpcodes line 1008.

MemStVar

(3,0x86)emittedhandler #538Variantinferred_corpus
Store Variant into a field at an offset from the cached object pointer pr.

Pops a Variant (16 bytes); the source Variant is moved and the old destination value is cleared, and writes it to a field at an offset from the cached object pointer pr.

Stack: [..., v:Var] -> [...]

Operands: %2: byte offset from pr ([ebp-4Ch], set by a preceding FLdPr/FLdPrThis/AryLdPr/LdPrVar/NewIfNull*).

Class/form member variables (pr = Me), procedure Static variables (pr = the static block), and elements of multi-dimensional arrays (pr = element address from AryLdPr).

When the compiler emits it

Emitted for assignments to a field at an offset from the cached object pointer pr when the value is a Variant. The storage class selects the prefix (Mem); the value class selects the suffix (Var).

VB6 source (verified: compiles to this slot)
Public Sub Main()
  Static a As Variant
  Dim b As Variant
  a = 5
End Sub
Encoding, evidence and notes
Encoding

Encoding: FD 86 (lead byte FD selects table 3), then 2 operand byte(s); total instruction length 4 byte(s).
vbdec template: [pr + %2]
Operands:

  1. %2 (pr +): immediate_word, 2 byte(s). 16-bit immediate.

Observed: FD86 0000 MemStVar [pr + 0x0]

Examples
FD86 0000  MemStVar [pr + 0x0]

From the Phase 4 probe (VB6 SP6, P-code).

Evidence and notes

Emitted by VB6 SP6 (P-code): yes. Minimal probe: probes\op\3_86_MemStVar.

Handler: 0x6610B747, unique to this slot (real opcode #538).

Check of vb6_source_eq example: verified: compiles and emits this slot.

Example from the description
Public Sub Main()
  Static a As Variant
  Dim b As Variant
  a = 5
End Sub

Description: draft, by claude-opus-5-5. Handler 0x6610B747, dispatch slot 0x66107B2C, modOpcodes line 1014.

MemStVarAd

(3,0x8B)emittedhandler #541Variantinferred_corpus
Store object into a Variant into a field at an offset from the cached object pointer pr.

Pops an object pointer stored into a Variant as VT_DISPATCH (Set v = obj), AddRef'd, and writes it to a field at an offset from the cached object pointer pr.

Stack: [..., v:Var] -> [...]

Operands: %2: byte offset from pr ([ebp-4Ch], set by a preceding FLdPr/FLdPrThis/AryLdPr/LdPrVar/NewIfNull*).

Class/form member variables (pr = Me), procedure Static variables (pr = the static block), and elements of multi-dimensional arrays (pr = element address from AryLdPr).

When the compiler emits it

Emitted for assignments to a field at an offset from the cached object pointer pr when the value is a object into a Variant. The storage class selects the prefix (Mem); the value class selects the suffix (VarAd).

VB6 source (verified: compiles to this slot)
Public Sub Main()
  Dim o As Object
  Static so As Object, su As IUnknown, sv As Variant
  Set sv = F()
End Sub

Function F() As Object
End Function
Encoding, evidence and notes
Encoding

Encoding: FD 8B (lead byte FD selects table 3), then 2 operand byte(s); total instruction length 4 byte(s).
vbdec template: [pr + %2]
Operands:

  1. %2 (pr +): immediate_word, 2 byte(s). 16-bit immediate.

Observed: FD8B 0800 MemStVarAd [pr + 0x8]

Examples
FD8B 0800  MemStVarAd [pr + 0x8]

From the Phase 4 probe (VB6 SP6, P-code).

Evidence and notes

Emitted by VB6 SP6 (P-code): yes. Minimal probe: probes\op\3_8B_MemStVarAd.

Handler: 0x6610B48C, unique to this slot (real opcode #541).

Check of vb6_source_eq example: verified: compiles and emits this slot.

Example from the description
Public Sub Main()
  Dim o As Object
  Static so As Object, su As IUnknown, sv As Variant
  Set sv = F()
End Sub

Function F() As Object
End Function

Description: draft, by claude-opus-5-5. Handler 0x6610B48C, dispatch slot 0x66107B40, modOpcodes line 1019.

MemStVarAdFunc

(3,0x8C)not emittedhandler #542Variantinferred_corpus
No description yet.
Encoding, evidence and notes
Encoding

Encoding: FD 8C (lead byte FD selects table 3), then 2 operand byte(s); total instruction length 4 byte(s).
vbdec template: [pr + %2]
Operands:

  1. %2 (pr +): immediate_word, 2 byte(s). 16-bit immediate.
Evidence and notes

Emitted by VB6 SP6 (P-code): not observed in about 3,070 probe programs. The slot exists in the runtime's dispatch table, but no tested source construct makes the compiler emit it.

Handler: 0x6610B477, unique to this slot (real opcode #542).

Description: none. Handler 0x6610B477, dispatch slot 0x66107B44, modOpcodes line 1020.

MemStVarCopy

(3,0x90)emittedhandler #546Variantinferred_corpus
Store Variant (copied) into a field at an offset from the cached object pointer pr.

Pops a Variant, deep-copied with VariantCopy semantics; the old destination value is cleared, and writes it to a field at an offset from the cached object pointer pr.

Stack: [..., v:Var] -> [...]

Operands: %2: byte offset from pr ([ebp-4Ch], set by a preceding FLdPr/FLdPrThis/AryLdPr/LdPrVar/NewIfNull*).

Class/form member variables (pr = Me), procedure Static variables (pr = the static block), and elements of multi-dimensional arrays (pr = element address from AryLdPr).

When the compiler emits it

Emitted for assignments to a field at an offset from the cached object pointer pr when the value is a Variant (copied). The storage class selects the prefix (Mem); the value class selects the suffix (VarCopy).

VB6 source (verified: compiles to this slot)
Public Sub Main()
  
End Sub

Static Sub Work()
  Dim a As Variant, b As Variant
  a = b
  b = a
End Sub
Encoding, evidence and notes
Encoding

Encoding: FD 90 (lead byte FD selects table 3), then 2 operand byte(s); total instruction length 4 byte(s).
vbdec template: [pr + %2]
Operands:

  1. %2 (pr +): immediate_word, 2 byte(s). 16-bit immediate.

Observed: FD90 0000 MemStVarCopy [pr + 0x0]

Examples
FD90 0000  MemStVarCopy [pr + 0x0]

From the Phase 4 probe (VB6 SP6, P-code).

Evidence and notes

Emitted by VB6 SP6 (P-code): yes. Minimal probe: probes\op\3_90_MemStVarCopy.

Handler: 0x6610B6E6, unique to this slot (real opcode #546).

Check of vb6_source_eq example: verified: compiles and emits this slot.

Example from the description
Public Sub Main()
  
End Sub

Static Sub Work()
  Dim a As Variant, b As Variant
  a = b
  b = a
End Sub

Description: draft, by claude-opus-5-5. Handler 0x6610B6E6, dispatch slot 0x66107B54, modOpcodes line 1024.

MemStVarUnk

(3,0x8D)emittedhandler #543Variantinferred_corpus
Store IUnknown into a Variant into a field at an offset from the cached object pointer pr.

Pops an IUnknown pointer stored into a Variant as VT_UNKNOWN (Set v = unk), AddRef'd, and writes it to a field at an offset from the cached object pointer pr.

Stack: [..., v:Var] -> [...]

Operands: %2: byte offset from pr ([ebp-4Ch], set by a preceding FLdPr/FLdPrThis/AryLdPr/LdPrVar/NewIfNull*).

Class/form member variables (pr = Me), procedure Static variables (pr = the static block), and elements of multi-dimensional arrays (pr = element address from AryLdPr).

When the compiler emits it

Emitted for assignments to a field at an offset from the cached object pointer pr when the value is a IUnknown into a Variant. The storage class selects the prefix (Mem); the value class selects the suffix (VarUnk).

VB6 source (verified: compiles to this slot)
Public Sub Main()
  Dim u As IUnknown
  Static sv As Variant
  Set sv = u
End Sub

Function FU() As IUnknown
End Function
Function FO() As Object
End Function
Function FC() As Collection
End Function
Encoding, evidence and notes
Encoding

Encoding: FD 8D (lead byte FD selects table 3), then 2 operand byte(s); total instruction length 4 byte(s).
vbdec template: [pr + %2]
Operands:

  1. %2 (pr +): immediate_word, 2 byte(s). 16-bit immediate.

Observed: FD8D 0000 MemStVarUnk [pr + 0x0]

Examples
FD8D 0000  MemStVarUnk [pr + 0x0]

From the Phase 4 probe (VB6 SP6, P-code).

Evidence and notes

Emitted by VB6 SP6 (P-code): yes. Minimal probe: probes\op\3_8D_MemStVarUnk.

Handler: 0x6610B528, unique to this slot (real opcode #543).

Check of vb6_source_eq example: verified: compiles and emits this slot.

Example from the description
Public Sub Main()
  Dim u As IUnknown
  Static sv As Variant
  Set sv = u
End Sub

Function FU() As IUnknown
End Function
Function FO() As Object
End Function
Function FC() As Collection
End Function

Description: draft, by claude-opus-5-5. Handler 0x6610B528, dispatch slot 0x66107B48, modOpcodes line 1021.

MemStVarUnkFunc

(3,0x8E)not emittedhandler #544Variantinferred_corpus
No description yet.
Encoding, evidence and notes
Encoding

Encoding: FD 8E (lead byte FD selects table 3), then 2 operand byte(s); total instruction length 4 byte(s).
vbdec template: [pr + %2]
Operands:

  1. %2 (pr +): immediate_word, 2 byte(s). 16-bit immediate.
Evidence and notes

Emitted by VB6 SP6 (P-code): not observed in about 3,070 probe programs. The slot exists in the runtime's dispatch table, but no tested source construct makes the compiler emit it.

Handler: 0x6610B50F, unique to this slot (real opcode #544).

Description: none. Handler 0x6610B50F, dispatch slot 0x66107B4C, modOpcodes line 1022.

Memory

CopyBytes / CopyBytesZero

CopyBytes

(0,0x38)emittedprimary of 2handler #55UDT / recordinferred_corpus
Copy a fixed number of bytes from one address to another (plain-data UDT assignment).

Pops source and destination addresses and copies sz bytes (memcpy).

Stack: [..., src:Rf, dst:Rf] -> [...]

Operand %2: byte count (observed 0x14 for a 20-byte UDT, 0x8 for an 8-byte one).

When the compiler emits it

Emitted for assignment between UDTs that contain no reference-counted members, and to copy small UDT function results.

VB6 source (verified: compiles to this slot)
Private Type TB
  x(15) As Byte
  y As Long
End Type

Public Sub Main()
  Dim a As TB, b As TB
  a = b
End Sub
Encoding, evidence and notes
Encoding

Encoding: 38, then 2 operand byte(s); total instruction length 3 byte(s).
vbdec template: sz:%2
Operands:

  1. %2 (sz): immediate_word, 2 byte(s). 16-bit immediate.

Observed: 38 1400 CopyBytes sz:0x14

Examples
38 1400  CopyBytes sz:0x14

From the Phase 4 probe (VB6 SP6, P-code).

Evidence and notes

Emitted by VB6 SP6 (P-code): yes. Minimal probe: probes\op\0_38_CopyBytes.

Handler: 0x661099E7, shared by 2 dispatch slots (real opcode #55). This is the primary slot. Other slots: (3,CA) CopyBytes.

Check of vb6_source_eq example: verified: compiles and emits this slot.

Example from the description
Private Type TB
  x(15) As Byte
  y As Long
End Type

Public Sub Main()
  Dim a As TB, b As TB
  a = b
End Sub
Slots sharing this handler

(3,0xCA) CopyBytes

Description: draft, by claude-opus-5-5. Handler 0x661099E7, dispatch slot 0x66106DF4, modOpcodes line 439.

CopyBytes

(3,0xCA)not emitteddup of (0,38)handler #55UDT / recordconfirmed_handler
Same handler as (0,0x38) CopyBytes: Copy a fixed number of bytes from one address to another (plain-data UDT assignment).
Encoding, evidence and notes
Encoding

Encoding: FD CA (lead byte FD selects table 3), then 2 operand byte(s); total instruction length 4 byte(s).
vbdec template: sz:%2
Operands:

  1. %2 (sz): immediate_word, 2 byte(s). 16-bit immediate.
Evidence and notes

Emitted by VB6 SP6 (P-code): not observed in about 3,070 probe programs. The slot exists in the runtime's dispatch table, but no tested source construct makes the compiler emit it.

Handler: 0x661099E7, shared by 2 dispatch slots (real opcode #55). This is a duplicate slot of (0,38) CopyBytes. Other slots: (0,38) CopyBytes.

Slots sharing this handler

(0,0x38) CopyBytes

Description: none. Handler 0x661099E7, dispatch slot 0x66107C3C, modOpcodes line 440.

CopyBytesZero

(5,0x37)not emittedhandler #764UDT / recordinferred_corpus
No description yet.
Encoding, evidence and notes
Encoding

Encoding: FF 37 (lead byte FF selects table 5), then 2 operand byte(s); total instruction length 4 byte(s).
No printf operands are declared, but the instruction still consumes operand bytes; see the size above and the observed bytes below. (Phase 3a: flag=0 does not mean 'no operands'.)

Evidence and notes

Emitted by VB6 SP6 (P-code): not observed in about 3,070 probe programs. The slot exists in the runtime's dispatch table, but no tested source construct makes the compiler emit it.

Handler: 0x66109A0D, unique to this slot (real opcode #764).

Description: none. Handler 0x66109A0D, dispatch slot 0x661081F0, modOpcodes line 441.

New

New / NewIfNull (object instantiation)

New

(3,0xF4)emittedhandler #586Object / COMinferred_corpus20 corpus hits
Create a new object instance (New Class).

Creates an instance of the class identified by %t (CoCreateInstance for external classes, the VB class factory for private classes) and pushes the new reference.

Stack: [...] -> [..., o:Ad]

When the compiler emits it

Emitted for an explicit New expression: Set x = New Class, New Class passed as an argument, With New Class. The %t operand identifies the class. As New variables use the NewIfNull* forms on first use instead.

VB6 source (verified: compiles to this slot)
Public Sub Main()
  Dim v As Variant
  Set v = New Collection
End Sub
Encoding, evidence and notes
Encoding

Encoding: FD F4 (lead byte FD selects table 3), then 2 operand byte(s); total instruction length 4 byte(s).
vbdec template: %t
Operands:

  1. %t: code_object_ref, 2 byte(s). 16-bit constant-pool index of a class/object descriptor (the type to instantiate or check).

Observed: FDF4 0000 New Collection

Examples
Form1.mnuB64Clipboard_Click @ 0x44E37C | 44E43D    FDF4 2700             New {0047D11C-4256-3641-2E44-4C4C00000000}
Form1.mnuNewHexEditorWin_Click @ 0x45AC2C | 45AC52    FDF4 2700             New {0047D11C-4256-3641-2E44-4C4C00000000}
Form1.mnuHexEditor_Click @ 0x462D24 | 462E07    FDF4 2700             New {0047D11C-4256-3641-2E44-4C4C00000000}

20 occurrence(s) in PDFStreamDumper.

Evidence and notes

Emitted by VB6 SP6 (P-code): yes. Minimal probe: probes\op\3_F4_New.

Handler: 0x661060D3, unique to this slot (real opcode #586).

Check of vb6_source_eq example: verified: compiles and emits this slot.

Corpus: 20 occurrence(s) in PDFStreamDumper_p.exe.

Example from the description
Dim c As Collection
Set c = New Collection

Description: draft, by claude-opus-5-5. Handler 0x661060D3, dispatch slot 0x66107CE4, modOpcodes line 249.

NewIfNullAd

(0,0x56)emittedprimary of 2handler #84Object / COMinferred_corpus27 corpus hits
As New auto-instancing: create the object if Nothing, then push the reference.

If the slot holding the As New variable is Nothing, instantiates class %t. Then pushes the object reference.

Stack: [...] -> [..., o:Ad]

When the compiler emits it

Emitted when an As New variable is used as a value rather than a call receiver: For Each x In c, With c, Set y = c.

VB6 source (verified: compiles to this slot)
Public Sub Main()
  Dim c As New Collection, x As Variant
  For Each x In c
  Next
out:
End Sub
Encoding, evidence and notes
Encoding

Encoding: 56, then 2 operand byte(s); total instruction length 3 byte(s).
vbdec template: %t
Operands:

  1. %t: code_object_ref, 2 byte(s). 16-bit constant-pool index of a class/object descriptor (the type to instantiate or check).

Observed: 56 0000 NewIfNullAd Collection

Examples
Form1.Proc_458C58 @ 0x458C58 | 458D23    56 0000               NewIfNullAd clsCmnDlg
Form2.cmdRun_Click @ 0x469FCC | 46A14F    56 0000               NewIfNullAd CScriptFunctions
Form2.cmdRun_Click @ 0x469FCC | 46A17A    56 0000               NewIfNullAd CScriptFunctions

27 occurrence(s) in PDFStreamDumper.

Evidence and notes

Emitted by VB6 SP6 (P-code): yes. Minimal probe: probes\op\0_56_NewIfNullAd.

Handler: 0x66106101, shared by 2 dispatch slots (real opcode #84). This is the primary slot. Other slots: (3,F6) NewIfNullAd.

Check of vb6_source_eq example: verified: compiles and emits this slot.

Corpus: 27 occurrence(s) in PDFStreamDumper_p.exe.

Example from the description
Dim c As New Collection, d As Collection
Set d = c
Slots sharing this handler

(3,0xF6) NewIfNullAd

Description: draft, by claude-opus-5-5. Handler 0x66106101, dispatch slot 0x66106E6C, modOpcodes line 251.

NewIfNullAd

(3,0xF6)not emitteddup of (0,56)handler #84Object / COMconfirmed_handler
Same handler as (0,0x56) NewIfNullAd: As New auto-instancing: create the object if Nothing, then push the reference.
Encoding, evidence and notes
Encoding

Encoding: FD F6 (lead byte FD selects table 3), then 2 operand byte(s); total instruction length 4 byte(s).
vbdec template: %t
Operands:

  1. %t: code_object_ref, 2 byte(s). 16-bit constant-pool index of a class/object descriptor (the type to instantiate or check).
Evidence and notes

Emitted by VB6 SP6 (P-code): not observed in about 3,070 probe programs. The slot exists in the runtime's dispatch table, but no tested source construct makes the compiler emit it.

Handler: 0x66106101, shared by 2 dispatch slots (real opcode #84). This is a duplicate slot of (0,56) NewIfNullAd. Other slots: (0,56) NewIfNullAd.

Slots sharing this handler

(0,0x56) NewIfNullAd

Description: none. Handler 0x66106101, dispatch slot 0x66107CEC, modOpcodes line 252.

NewIfNullPr

(0,0x24)emittedprimary of 2handler #35Object / COMinferred_corpus371 corpus hits
As New auto-instancing: create the object if the variable is Nothing, then load it into pr.

If the slot holding the As New variable is Nothing, instantiates class %t and stores it there. Then loads the reference into the cached object register pr.

When the compiler emits it

Emitted at every use of an As New variable as a method/property receiver (c.Count with Dim c As New Collection). This is where the deferred creation happens.

VB6 source (verified: compiles to this slot)
Public Sub Main()
  Dim a(3) As New Collection, n As Long
  n = a(1).Count
End Sub
Encoding, evidence and notes
Encoding

Encoding: 24, then 2 operand byte(s); total instruction length 3 byte(s).
vbdec template: %t
Operands:

  1. %t: code_object_ref, 2 byte(s). 16-bit constant-pool index of a class/object descriptor (the type to instantiate or check).

Observed: 24 0000 NewIfNullPr Collection

Examples
Form1.LoadPlugins @ 0x4644FC | 46450E    24 0200               NewIfNullPr VBGlobal
Form1.LoadPlugins @ 0x4644FC | 46459E    24 0200               NewIfNullPr VBGlobal
Form1.LoadPlugins @ 0x4644FC | 4646F6    24 0200               NewIfNullPr VBGlobal

371 occurrence(s) in PDFStreamDumper.

Evidence and notes

Emitted by VB6 SP6 (P-code): yes. Minimal probe: probes\op\0_24_NewIfNullPr.

Handler: 0x661060F3, shared by 2 dispatch slots (real opcode #35). This is the primary slot. Other slots: (3,F7) NewIfNullPr.

Check of vb6_source_eq example: verified: compiles and emits this slot.

Corpus: 371 occurrence(s) in PDFStreamDumper_p.exe.

Example from the description
Dim c As New Collection, n As Long
n = c.Count
Slots sharing this handler

(3,0xF7) NewIfNullPr

Description: draft, by claude-opus-5-5. Handler 0x661060F3, dispatch slot 0x66106DA4, modOpcodes line 253.

NewIfNullPr

(3,0xF7)not emitteddup of (0,24)handler #35Object / COMconfirmed_handler
Same handler as (0,0x24) NewIfNullPr: As New auto-instancing: create the object if the variable is Nothing, then load it into pr.
Encoding, evidence and notes
Encoding

Encoding: FD F7 (lead byte FD selects table 3), then 2 operand byte(s); total instruction length 4 byte(s).
vbdec template: %t
Operands:

  1. %t: code_object_ref, 2 byte(s). 16-bit constant-pool index of a class/object descriptor (the type to instantiate or check).
Evidence and notes

Emitted by VB6 SP6 (P-code): not observed in about 3,070 probe programs. The slot exists in the runtime's dispatch table, but no tested source construct makes the compiler emit it.

Handler: 0x661060F3, shared by 2 dispatch slots (real opcode #35). This is a duplicate slot of (0,24) NewIfNullPr. Other slots: (0,24) NewIfNullPr.

Slots sharing this handler

(0,0x24) NewIfNullPr

Description: none. Handler 0x661060F3, dispatch slot 0x66107CF0, modOpcodes line 254.

NewIfNullRf

(3,0xF5)emittedhandler #587Object / COMinferred_corpus4 corpus hits
As New auto-instancing: create the object if Nothing, then push the variable's address (ByRef).

If the variable is Nothing, instantiates class %t into it. Then pushes the variable's address.

Stack: [...] -> [..., &o:Rf]

When the compiler emits it

Emitted when an As New variable is passed ByRef to an object parameter (P c with Sub P(x As Collection)).

VB6 source (verified: compiles to this slot)
Dim gc As New Collection
Dim a(3) As New Collection

Public Sub Main()
  P a(1)
End Sub

Sub P(x As Collection)
End Sub
Encoding, evidence and notes
Encoding

Encoding: FD F5 (lead byte FD selects table 3), then 2 operand byte(s); total instruction length 4 byte(s).
vbdec template: %t
Operands:

  1. %t: code_object_ref, 2 byte(s). 16-bit constant-pool index of a class/object descriptor (the type to instantiate or check).

Observed: FDF5 0000 NewIfNullRf Collection

Examples
Form1.mnuHideDups_Click @ 0x4629E4 | 462AF2    FDF5 D200             NewIfNullRf Collection
Form1.mnuHideDups_Click @ 0x4629E4 | 462B57    FDF5 D200             NewIfNullRf Collection
Form1.mnuHideDups_Click @ 0x4629E4 | 462B7B    FDF5 D200             NewIfNullRf Collection

4 occurrence(s) in PDFStreamDumper.

Evidence and notes

Emitted by VB6 SP6 (P-code): yes. Minimal probe: probes\op\3_F5_NewIfNullRf.

Handler: 0x6610B050, unique to this slot (real opcode #587).

Check of vb6_source_eq example: verified: compiles and emits this slot.

Corpus: 4 occurrence(s) in PDFStreamDumper_p.exe.

Example from the description
Sub P(x As Collection)
End Sub
Sub Main()
  Dim c As New Collection
  P c
End Sub

Description: draft, by claude-opus-5-5. Handler 0x6610B050, dispatch slot 0x66107CE8, modOpcodes line 250.

Pop

Pop value from stack

PopAd

(2,0x8B)emittedhandler #429Stack & frameconfirmed_msdocs72 corpus hits
Discard the top raw 32-bit address (pointer) from the stack.

Pops and discards. Used after expression-statements whose result is unused.

Stack: [..., a:T] -> [...]

When the compiler emits it

Emitted for statement-level expressions whose value is not assigned.

VB6 source (verified: compiles to this slot)
Public Sub Main()
  Dim o As Object
  Debug.Print o.Count, o.Item("a")
End Sub
Encoding, evidence and notes
Encoding

Encoding: FC 8B (lead byte FC selects table 2), then 0 operand byte(s); total instruction length 2 byte(s).
Operands: none. All inputs come from the evaluation stack or the frame.
Observed: FC8B PopAd

Examples
Form1.Form_Resize @ 0x474F3C | 475000    FC8B                  PopAd
Form1.Form_Resize @ 0x474F3C | 475097    FC8B                  PopAd
Form1.Form_Resize @ 0x474F3C | 4750E7    FC8B                  PopAd

72 occurrence(s) in PDFStreamDumper.

Evidence and notes

Emitted by VB6 SP6 (P-code): yes. Minimal probe: probes\op\2_8B_PopAd.

Handler: 0x66106898, unique to this slot (real opcode #429).

Corpus: 72 occurrence(s) in PDFStreamDumper_p.exe.

Description: draft, by claude-opus-4.7. Handler 0x66106898, dispatch slot 0x66107740, modOpcodes line 954.

PopAdLd4

(0,0x49)emittedprimary of 2handler #72Stack & frameconfirmed_msdocs57 corpus hits
Discard the top value from the stack.

Pops and discards. Used after expression-statements whose result is unused.

Stack: [..., a:T] -> [...]

When the compiler emits it

Emitted for statement-level expressions whose value is not assigned.

VB6 source (verified: compiles to this slot)
Public Sub Main()
  Dim v As Variant, n As Long
  n = UBound(v) + LBound(v)
End Sub
Encoding, evidence and notes
Encoding

Encoding: 49, then 0 operand byte(s); total instruction length 1 byte(s).
Operands: none. All inputs come from the evaluation stack or the frame.
Observed: 49 PopAdLd4

Examples
Form1.AryIsEmpty @ 0x43F208 | 43F210    49                    PopAdLd4
fso.Proc_45ECB4 @ 0x45ECB4 | 45EE05    49                    PopAdLd4
fso.Proc_448314 @ 0x448314 | 44834D    49                    PopAdLd4

57 occurrence(s) in PDFStreamDumper.

Evidence and notes

Emitted by VB6 SP6 (P-code): yes. Minimal probe: probes\op\0_49_PopAdLd4.

Handler: 0x661068DF, shared by 2 dispatch slots (real opcode #72). This is the primary slot. Other slots: (2,5C) PopAdLd4.

Corpus: 57 occurrence(s) in PDFStreamDumper_p.exe.

Slots sharing this handler

(2,0x5C) PopAdLd4

Description: draft, by claude-opus-4.7. Handler 0x661068DF, dispatch slot 0x66106E38, modOpcodes line 959.

PopAdLd4

(2,0x5C)not emitteddup of (0,49)handler #72Stack & frameconfirmed_handler
(alias) Discard the top value from the stack.

Alias dispatch slot (2, 0x5C) for the canonical PopAdLd4 at (0, 0x49); semantics are identical.

Pops and discards. Used after expression-statements whose result is unused.

Stack: [..., a:T] -> [...]

When the compiler emits it

Emitted for statement-level expressions whose value is not assigned.

Encoding, evidence and notes
Encoding

Encoding: FC 5C (lead byte FC selects table 2), then 0 operand byte(s); total instruction length 2 byte(s).
Operands: none. All inputs come from the evaluation stack or the frame.

Evidence and notes

Emitted by VB6 SP6 (P-code): not observed in about 3,070 probe programs. The slot exists in the runtime's dispatch table, but no tested source construct makes the compiler emit it.

Handler: 0x661068DF, shared by 2 dispatch slots (real opcode #72). This is a duplicate slot of (0,49) PopAdLd4. Other slots: (0,49) PopAdLd4.

Slots sharing this handler

(0,0x49) PopAdLd4

Description: draft, by claude-opus-4.7. Handler 0x661068DF, dispatch slot 0x66107684, modOpcodes line 960.

PopAdLdVar

(0,0x25)emittedprimary of 2handler #36Stack & frameconfirmed_msdocs567 corpus hits
Discard the top VBA Variant from the stack.

Pops and discards. Used after expression-statements whose result is unused.

Stack: [..., a:T] -> [...]

When the compiler emits it

Emitted for statement-level expressions whose value is not assigned.

VB6 source (verified: compiles to this slot)
Public Sub Main()
  Dim o As Object
  o.Prop = 5
End Sub
Encoding, evidence and notes
Encoding

Encoding: 25, then 0 operand byte(s); total instruction length 1 byte(s).
Operands: none. All inputs come from the evaluation stack or the frame.
Observed: 25 PopAdLdVar

Examples
Form1.LoadPlugins @ 0x4644FC | 464788    25                    PopAdLdVar
Form1.cmdAbortProcessing_Click @ 0x441954 | 441995    25                    PopAdLdVar
Form1.lvSearch_MouseUp(ByVal Button As Integer, ByVal Shift As Integer, ByVal x As Long, ByVal y As Long) @ 0x43F1A8 | 43F1B4    25                    PopAdLdVar

567 occurrence(s) in PDFStreamDumper.

Evidence and notes

Emitted by VB6 SP6 (P-code): yes. Minimal probe: probes\op\0_25_PopAdLdVar.

Handler: 0x661068EE, shared by 2 dispatch slots (real opcode #36). This is the primary slot. Other slots: (2,8C) PopAdLdVar.

Corpus: 567 occurrence(s) in PDFStreamDumper_p.exe.

Slots sharing this handler

(2,0x8C) PopAdLdVar

Description: draft, by claude-opus-4.7. Handler 0x661068EE, dispatch slot 0x66106DA8, modOpcodes line 961.

PopAdLdVar

(2,0x8C)not emitteddup of (0,25)handler #36Stack & frameconfirmed_handler
(alias) Discard the top VBA Variant from the stack.

Alias dispatch slot (2, 0x8C) for the canonical PopAdLdVar at (0, 0x25); semantics are identical.

Pops and discards. Used after expression-statements whose result is unused.

Stack: [..., a:T] -> [...]

When the compiler emits it

Emitted for statement-level expressions whose value is not assigned.

Encoding, evidence and notes
Encoding

Encoding: FC 8C (lead byte FC selects table 2), then 0 operand byte(s); total instruction length 2 byte(s).
Operands: none. All inputs come from the evaluation stack or the frame.

Evidence and notes

Emitted by VB6 SP6 (P-code): not observed in about 3,070 probe programs. The slot exists in the runtime's dispatch table, but no tested source construct makes the compiler emit it.

Handler: 0x661068EE, shared by 2 dispatch slots (real opcode #36). This is a duplicate slot of (0,25) PopAdLdVar. Other slots: (0,25) PopAdLdVar.

Slots sharing this handler

(0,0x25) PopAdLdVar

Description: draft, by claude-opus-4.7. Handler 0x661068EE, dispatch slot 0x66107744, modOpcodes line 962.

PopFPR4

(0,0x37)emittedprimary of 2handler #54Stack & frameconfirmed_msdocs50 corpus hits
Discard the top Single on the x87 FPU stack from the stack.

Pops and discards. Used after expression-statements whose result is unused.

Stack: [..., a:T] -> [...]

When the compiler emits it

Emitted for statement-level expressions whose value is not assigned.

VB6 source (verified: compiles to this slot)
Public Sub Main()
  Form1.CurrentX = 1
End Sub
' ---- Form1.frm
Encoding, evidence and notes
Encoding

Encoding: 37, then 0 operand byte(s); total instruction length 1 byte(s).
Operands: none. All inputs come from the evaluation stack or the frame.
Observed: 37 PopFPR4

Examples
Form1.Form_Resize @ 0x474F3C | 474FAB    37                    PopFPR4
Form1.Form_Resize @ 0x474F3C | 474FD2    37                    PopFPR4
Form1.Form_Resize @ 0x474F3C | 475022    37                    PopFPR4

50 occurrence(s) in PDFStreamDumper.

Evidence and notes

Emitted by VB6 SP6 (P-code): yes. Minimal probe: probes\op\0_37_PopFPR4.

Handler: 0x661068A7, shared by 2 dispatch slots (real opcode #54). This is the primary slot. Other slots: (2,89) PopFPR4.

Corpus: 50 occurrence(s) in PDFStreamDumper_p.exe.

Slots sharing this handler

(2,0x89) PopFPR4

Description: draft, by claude-opus-4.7. Handler 0x661068A7, dispatch slot 0x66106DF0, modOpcodes line 955.

PopFPR4

(2,0x89)not emitteddup of (0,37)handler #54Stack & frameconfirmed_handler
(alias) Discard the top Single on the x87 FPU stack from the stack.

Alias dispatch slot (2, 0x89) for the canonical PopFPR4 at (0, 0x37); semantics are identical.

Pops and discards. Used after expression-statements whose result is unused.

Stack: [..., a:T] -> [...]

When the compiler emits it

Emitted for statement-level expressions whose value is not assigned.

Encoding, evidence and notes
Encoding

Encoding: FC 89 (lead byte FC selects table 2), then 0 operand byte(s); total instruction length 2 byte(s).
Operands: none. All inputs come from the evaluation stack or the frame.

Evidence and notes

Emitted by VB6 SP6 (P-code): not observed in about 3,070 probe programs. The slot exists in the runtime's dispatch table, but no tested source construct makes the compiler emit it.

Handler: 0x661068A7, shared by 2 dispatch slots (real opcode #54). This is a duplicate slot of (0,37) PopFPR4. Other slots: (0,37) PopFPR4.

Slots sharing this handler

(0,0x37) PopFPR4

Description: draft, by claude-opus-4.7. Handler 0x661068A7, dispatch slot 0x66107738, modOpcodes line 956.

PopFPR8

(0,0x39)emittedprimary of 2handler #56Stack & frameconfirmed_msdocs1 corpus hits
Discard the top Double on the x87 FPU stack from the stack.

Pops and discards. Used after expression-statements whose result is unused.

Stack: [..., a:T] -> [...]

When the compiler emits it

Emitted for statement-level expressions whose value is not assigned.

VB6 source (verified: compiles to this slot)
Public Sub Main()
  Dim v As Variant, s As String
  v = DateAdd("d", 1, Now)
End Sub
Encoding, evidence and notes
Encoding

Encoding: 39, then 0 operand byte(s); total instruction length 1 byte(s).
Operands: none. All inputs come from the evaluation stack or the frame.
Observed: 39 PopFPR8

Examples
Form2.mnuMain_Event_0 @ 0x45F55C | 45F76E    39                    PopFPR8

1 occurrence(s) in PDFStreamDumper.

Evidence and notes

Emitted by VB6 SP6 (P-code): yes. Minimal probe: probes\op\0_39_PopFPR8.

Handler: 0x661068C3, shared by 2 dispatch slots (real opcode #56). This is the primary slot. Other slots: (2,8A) PopFPR8.

Corpus: 1 occurrence(s) in PDFStreamDumper_p.exe.

Slots sharing this handler

(2,0x8A) PopFPR8

Description: draft, by claude-opus-4.7. Handler 0x661068C3, dispatch slot 0x66106DF8, modOpcodes line 957.

PopFPR8

(2,0x8A)not emitteddup of (0,39)handler #56Stack & frameconfirmed_handler
(alias) Discard the top Double on the x87 FPU stack from the stack.

Alias dispatch slot (2, 0x8A) for the canonical PopFPR8 at (0, 0x39); semantics are identical.

Pops and discards. Used after expression-statements whose result is unused.

Stack: [..., a:T] -> [...]

When the compiler emits it

Emitted for statement-level expressions whose value is not assigned.

Encoding, evidence and notes
Encoding

Encoding: FC 8A (lead byte FC selects table 2), then 0 operand byte(s); total instruction length 2 byte(s).
Operands: none. All inputs come from the evaluation stack or the frame.

Evidence and notes

Emitted by VB6 SP6 (P-code): not observed in about 3,070 probe programs. The slot exists in the runtime's dispatch table, but no tested source construct makes the compiler emit it.

Handler: 0x661068C3, shared by 2 dispatch slots (real opcode #56). This is a duplicate slot of (0,39) PopFPR8. Other slots: (0,39) PopFPR8.

Slots sharing this handler

(0,0x39) PopFPR8

Description: draft, by claude-opus-4.7. Handler 0x661068C3, dispatch slot 0x6610773C, modOpcodes line 958.

PopTmpLd

Pop, store to temp, reload as address

PopTmpLdAd1

(3,0xC2)emittedhandler #566Stack & frameinferred_corpus6 corpus hits
Pop temporary and reload value (PopTmpLdAd1).

Combined pop+load pattern used by the compiler for expression-temporary lifetime management. Pops a temporary slot reference (often a freshly-allocated string or address), then reloads its current value onto the stack. The PopTmpLdAdStr/PopTmpLdAd* variants encode the storage class of the temp.

When the compiler emits it

Emitted in expression code where an intermediate result must persist briefly past its allocation.

VB6 source (verified: compiles to this slot)
Public Sub Main()
  PB 5
End Sub

Sub PB(x As Byte)
End Sub
Sub PI(x As Integer)
End Sub
Sub PL(x As Long)
End Sub
Sub PS(x As Single)
End Sub
Sub PD(x As Double)
End Sub
Sub PC(x As Currency)
End Sub
Sub PV(x As Variant)
End Sub
Sub PT(x As String)
End Sub
Encoding, evidence and notes
Encoding

Encoding: FD C2 (lead byte FD selects table 3), then 2 operand byte(s); total instruction length 4 byte(s).
vbdec template: %a
Operands:

  1. %a: local_var_ref, 2 byte(s). signed 16-bit offset from the procedure frame pointer (EBP). Negative = local/temporary (vbdec var_XX, XX = -offset), positive = argument (arg_XX).

Observed: FDC2 7AFF PopTmpLdAd1 var_86

Examples
modEscapes.Proc_464894 @ 0x464894 | 4649F4    FDC2 7AFE             PopTmpLdAd1 var_186
modEscapes.Proc_464894 @ 0x464894 | 464A02    FDC2 78FE             PopTmpLdAd1 var_188
modEscapes.Proc_459E1C @ 0x459E1C | 459ED0    FDC2 D6FE             PopTmpLdAd1 var_12A

6 occurrence(s) in PDFStreamDumper.

Evidence and notes

Emitted by VB6 SP6 (P-code): yes. Minimal probe: probes\op\3_C2_PopTmpLdAd1.

Handler: 0x6610BFC9, unique to this slot (real opcode #566).

Corpus: 6 occurrence(s) in PDFStreamDumper_p.exe.

Description: draft, by claude-opus-4.7. Handler 0x6610BFC9, dispatch slot 0x66107C1C, modOpcodes line 964.

PopTmpLdAd2

(0,0x2B)emittedprimary of 2handler #42Stack & frameinferred_corpus152 corpus hits
Pop temporary and reload value (PopTmpLdAd2).

Combined pop+load pattern used by the compiler for expression-temporary lifetime management. Pops a temporary slot reference (often a freshly-allocated string or address), then reloads its current value onto the stack. The PopTmpLdAdStr/PopTmpLdAd* variants encode the storage class of the temp.

When the compiler emits it

Emitted in expression code where an intermediate result must persist briefly past its allocation.

VB6 source (verified: compiles to this slot)
Public Sub Main()
  PI 5
End Sub

Sub PB(x As Byte)
End Sub
Sub PI(x As Integer)
End Sub
Sub PL(x As Long)
End Sub
Sub PS(x As Single)
End Sub
Sub PD(x As Double)
End Sub
Sub PC(x As Currency)
End Sub
Sub PV(x As Variant)
End Sub
Sub PT(x As String)
End Sub
Encoding, evidence and notes
Encoding

Encoding: 2B, then 2 operand byte(s); total instruction length 3 byte(s).
vbdec template: %a
Operands:

  1. %a: local_var_ref, 2 byte(s). signed 16-bit offset from the procedure frame pointer (EBP). Negative = local/temporary (vbdec var_XX, XX = -offset), positive = argument (arg_XX).

Observed: 2B 7AFF PopTmpLdAd2 var_86

Examples
Form1.mnuDecompressZWS_Click @ 0x447F34 | 447F99    2B 52FF               PopTmpLdAd2 var_AE
Form1.mnuErrorSaveRawAll_Click @ 0x45D950 | 45DA1F    2B C6FE               PopTmpLdAd2 var_13A
Form1.mnuErrorSaveRaw_Click @ 0x45C9BC | 45CA48    2B DEFE               PopTmpLdAd2 var_122

152 occurrence(s) in PDFStreamDumper.

Evidence and notes

Emitted by VB6 SP6 (P-code): yes. Minimal probe: probes\op\0_2B_PopTmpLdAd2.

Handler: 0x66106906, shared by 2 dispatch slots (real opcode #42). This is the primary slot. Other slots: (3,C3) PopTmpLdAd2.

Corpus: 152 occurrence(s) in PDFStreamDumper_p.exe.

Slots sharing this handler

(3,0xC3) PopTmpLdAd2

Description: draft, by claude-opus-4.7. Handler 0x66106906, dispatch slot 0x66106DC0, modOpcodes line 965.

PopTmpLdAd2

(3,0xC3)not emitteddup of (0,2B)handler #42Stack & frameconfirmed_handler
Same handler as (0,0x2B) PopTmpLdAd2: Pop temporary and reload value (PopTmpLdAd2).
Encoding, evidence and notes
Encoding

Encoding: FD C3 (lead byte FD selects table 3), then 2 operand byte(s); total instruction length 4 byte(s).
vbdec template: %a
Operands:

  1. %a: local_var_ref, 2 byte(s). signed 16-bit offset from the procedure frame pointer (EBP). Negative = local/temporary (vbdec var_XX, XX = -offset), positive = argument (arg_XX).
Evidence and notes

Emitted by VB6 SP6 (P-code): not observed in about 3,070 probe programs. The slot exists in the runtime's dispatch table, but no tested source construct makes the compiler emit it.

Handler: 0x66106906, shared by 2 dispatch slots (real opcode #42). This is a duplicate slot of (0,2B) PopTmpLdAd2. Other slots: (0,2B) PopTmpLdAd2.

Slots sharing this handler

(0,0x2B) PopTmpLdAd2

Description: none. Handler 0x66106906, dispatch slot 0x66107C20, modOpcodes line 966.

PopTmpLdAd8

(0,0x30)emittedprimary of 2handler #47Stack & frameinferred_corpus
Pop an 8-byte value into a temporary and push the temporary's address (ByRef temp for Currency).

Stores the 8-byte value on top of the stack into the temporary %a and pushes its address, so an expression can be passed ByRef.

Stack: [..., v:R8] -> [..., &tmp:Rf]

When the compiler emits it

Emitted for passing a Currency expression or literal to a ByRef Currency parameter (PC 1.5 with Sub PC(x As Currency)).

VB6 source (verified: compiles to this slot)
Public Sub Main()
  PC 1.5
End Sub

Sub PB(x As Byte)
End Sub
Sub PI(x As Integer)
End Sub
Sub PL(x As Long)
End Sub
Sub PS(x As Single)
End Sub
Sub PD(x As Double)
End Sub
Sub PC(x As Currency)
End Sub
Sub PV(x As Variant)
End Sub
Sub PT(x As String)
End Sub
Encoding, evidence and notes
Encoding

Encoding: 30, then 2 operand byte(s); total instruction length 3 byte(s).
vbdec template: %a
Operands:

  1. %a: local_var_ref, 2 byte(s). signed 16-bit offset from the procedure frame pointer (EBP). Negative = local/temporary (vbdec var_XX, XX = -offset), positive = argument (arg_XX).

Observed: 30 74FF PopTmpLdAd8 var_8C

Examples
30 74FF  PopTmpLdAd8 var_8C

From the Phase 4 probe (VB6 SP6, P-code).

Evidence and notes

Emitted by VB6 SP6 (P-code): yes. Minimal probe: probes\op\0_30_PopTmpLdAd8.

Handler: 0x6610BFE1, shared by 2 dispatch slots (real opcode #47). This is the primary slot. Other slots: (3,C5) PopTmpLdAd8.

Check of vb6_source_eq example: verified: compiles and emits this slot.

Example from the description
Public Sub Main()
  PC 1.5
End Sub

Sub PB(x As Byte)
End Sub
Sub PI(x As Integer)
End Sub
Sub PL(x As Long)
End Sub
Sub PS(x As Single)
End Sub
Sub PD(x As Double)
End Sub
Sub PC(x As Currency)
End Sub
Sub PV(x As Variant)
End Sub
Sub PT(x As String)
End Sub
Slots sharing this handler

(3,0xC5) PopTmpLdAd8

Description: draft, by claude-opus-5-5. Handler 0x6610BFE1, dispatch slot 0x66106DD4, modOpcodes line 968.

PopTmpLdAd8

(3,0xC5)not emitteddup of (0,30)handler #47Stack & frameconfirmed_handler
Same handler as (0,0x30) PopTmpLdAd8: Pop an 8-byte value into a temporary and push the temporary's address (ByRef temp for Currency).
Encoding, evidence and notes
Encoding

Encoding: FD C5 (lead byte FD selects table 3), then 2 operand byte(s); total instruction length 4 byte(s).
vbdec template: %a
Operands:

  1. %a: local_var_ref, 2 byte(s). signed 16-bit offset from the procedure frame pointer (EBP). Negative = local/temporary (vbdec var_XX, XX = -offset), positive = argument (arg_XX).
Evidence and notes

Emitted by VB6 SP6 (P-code): not observed in about 3,070 probe programs. The slot exists in the runtime's dispatch table, but no tested source construct makes the compiler emit it.

Handler: 0x6610BFE1, shared by 2 dispatch slots (real opcode #47). This is a duplicate slot of (0,30) PopTmpLdAd8. Other slots: (0,30) PopTmpLdAd8.

Slots sharing this handler

(0,0x30) PopTmpLdAd8

Description: none. Handler 0x6610BFE1, dispatch slot 0x66107C28, modOpcodes line 969.

PopTmpLdAdFPR4

(3,0xC8)emittedhandler #568Stack & frameinferred_corpus
Pop a Single from the FPU into a temporary and push its address (ByRef temp).

Stores ST0 as a 4-byte single into the temporary %a and pushes the address.

When the compiler emits it

Emitted for passing a Single expression or literal to a ByRef Single parameter.

VB6 source (verified: compiles to this slot)
Public Sub Main()
  PS 1.5
End Sub

Sub PB(x As Byte)
End Sub
Sub PI(x As Integer)
End Sub
Sub PL(x As Long)
End Sub
Sub PS(x As Single)
End Sub
Sub PD(x As Double)
End Sub
Sub PC(x As Currency)
End Sub
Sub PV(x As Variant)
End Sub
Sub PT(x As String)
End Sub
Encoding, evidence and notes
Encoding

Encoding: FD C8 (lead byte FD selects table 3), then 2 operand byte(s); total instruction length 4 byte(s).
vbdec template: %a
Operands:

  1. %a: local_var_ref, 2 byte(s). signed 16-bit offset from the procedure frame pointer (EBP). Negative = local/temporary (vbdec var_XX, XX = -offset), positive = argument (arg_XX).

Observed: FDC8 78FF PopTmpLdAdFPR4 var_88

Examples
FDC8 78FF  PopTmpLdAdFPR4 var_88

From the Phase 4 probe (VB6 SP6, P-code).

Evidence and notes

Emitted by VB6 SP6 (P-code): yes. Minimal probe: probes\op\3_C8_PopTmpLdAdFPR4.

Handler: 0x6610C01B, unique to this slot (real opcode #568).

Check of vb6_source_eq example: verified: compiles and emits this slot.

Example from the description
Public Sub Main()
  PS 1.5
End Sub

Sub PB(x As Byte)
End Sub
Sub PI(x As Integer)
End Sub
Sub PL(x As Long)
End Sub
Sub PS(x As Single)
End Sub
Sub PD(x As Double)
End Sub
Sub PC(x As Currency)
End Sub
Sub PV(x As Variant)
End Sub
Sub PT(x As String)
End Sub

Description: draft, by claude-opus-5-5. Handler 0x6610C01B, dispatch slot 0x66107C34, modOpcodes line 973.

PopTmpLdAdFPR8

(3,0xC9)emittedhandler #569Stack & frameinferred_corpus
Pop a Double from the FPU into a temporary and push its address (ByRef temp).

Stores ST0 as an 8-byte double into the temporary %a and pushes the address.

When the compiler emits it

Observed for Put #1, 2, 1.5, where the record number is passed by reference.

VB6 source (verified: compiles to this slot)
Public Sub Main()
  Put #1, 2, 1.5
End Sub
Encoding, evidence and notes
Encoding

Encoding: FD C9 (lead byte FD selects table 3), then 2 operand byte(s); total instruction length 4 byte(s).
vbdec template: %a
Operands:

  1. %a: local_var_ref, 2 byte(s). signed 16-bit offset from the procedure frame pointer (EBP). Negative = local/temporary (vbdec var_XX, XX = -offset), positive = argument (arg_XX).

Observed: FDC9 74FF PopTmpLdAdFPR8 var_8C

Examples
FDC9 74FF  PopTmpLdAdFPR8 var_8C

From the Phase 4 probe (VB6 SP6, P-code).

Evidence and notes

Emitted by VB6 SP6 (P-code): yes. Minimal probe: probes\op\3_C9_PopTmpLdAdFPR8.

Handler: 0x6610C03C, unique to this slot (real opcode #569).

Check of vb6_source_eq example: verified: compiles and emits this slot.

Example from the description
Public Sub Main()
  Put #1, 2, 1.5
End Sub

Description: draft, by claude-opus-5-5. Handler 0x6610C03C, dispatch slot 0x66107C38, modOpcodes line 974.

PopTmpLdAdStr

(0,0x59)emittedprimary of 3handler #87Stack & frameconfirmed_handler190 corpus hits
(alias) Pop temporary and reload value (PopTmpLdAdStr).

Alias dispatch slot (0, 0x59) for the canonical PopTmpLdAdStr at (3, 0xC4); semantics are identical.

Combined pop+load pattern used by the compiler for expression-temporary lifetime management. Pops a temporary slot reference (often a freshly-allocated string or address), then reloads its current value onto the stack. The PopTmpLdAdStr/PopTmpLdAd* variants encode the storage class of the temp.

When the compiler emits it

Emitted in expression code where an intermediate result must persist briefly past its allocation.

VB6 source (verified: compiles to this slot)
Public Sub Main()
  Dim a(5) As Boolean
  Erase a
End Sub
Encoding, evidence and notes
Encoding

Encoding: 59, then 2 operand byte(s); total instruction length 3 byte(s).
vbdec template: %a
Operands:

  1. %a: local_var_ref, 2 byte(s). signed 16-bit offset from the procedure frame pointer (EBP). Negative = local/temporary (vbdec var_XX, XX = -offset), positive = argument (arg_XX).

Observed: 59 5CFF PopTmpLdAdStr var_A4

Examples
Form1.LoadPlugins @ 0x4644FC | 4645C8    59 A4FE               PopTmpLdAdStr var_15C
Form1.mnub64decode_Click @ 0x451280 | 451288    59 64FF               PopTmpLdAdStr var_9C
Form1.mnub64decode_Click @ 0x451280 | 4512A6    59 70FF               PopTmpLdAdStr var_90

190 occurrence(s) in PDFStreamDumper.

Evidence and notes

Emitted by VB6 SP6 (P-code): yes. Minimal probe: probes\op\0_59_PopTmpLdAdStr.

Handler: 0x6610691F, shared by 3 dispatch slots (real opcode #87). This is the primary slot. Other slots: (3,C4) PopTmpLdAdStr, (3,C7) PopTmpLdAdStr.

Compile-time slot selection: the compiler picks different slots of this handler for different source types:

  • (0,59): Dim a(5) As Boolean : Erase a
  • (3,C7): Dim f As String * 8 : P f

Corpus: 190 occurrence(s) in PDFStreamDumper_p.exe.

Slots sharing this handler

(3,0xC4) PopTmpLdAdStr, (3,0xC7) PopTmpLdAdStr

Description: draft, by claude-opus-4.7. Handler 0x6610691F, dispatch slot 0x66106E78, modOpcodes line 971.

PopTmpLdAdStr

(3,0xC4)not emitteddup of (0,59)handler #87Stack & frameinferred_corpus
Same handler as (0,0x59) PopTmpLdAdStr: (alias) Pop temporary and reload value (PopTmpLdAdStr).
Encoding, evidence and notes
Encoding

Encoding: FD C4 (lead byte FD selects table 3), then 2 operand byte(s); total instruction length 4 byte(s).
vbdec template: %a
Operands:

  1. %a: local_var_ref, 2 byte(s). signed 16-bit offset from the procedure frame pointer (EBP). Negative = local/temporary (vbdec var_XX, XX = -offset), positive = argument (arg_XX).
Evidence and notes

Emitted by VB6 SP6 (P-code): not observed in about 3,070 probe programs. The slot exists in the runtime's dispatch table, but no tested source construct makes the compiler emit it.

Handler: 0x6610691F, shared by 3 dispatch slots (real opcode #87). This is a duplicate slot of (0,59) PopTmpLdAdStr. Other slots: (0,59) PopTmpLdAdStr, (3,C7) PopTmpLdAdStr.

Compile-time slot selection: the compiler picks different slots of this handler for different source types:

  • (0,59): Dim a(5) As Boolean : Erase a
  • (3,C7): Dim f As String * 8 : P f
Slots sharing this handler

(0,0x59) PopTmpLdAdStr, (3,0xC7) PopTmpLdAdStr

Description: none. Handler 0x6610691F, dispatch slot 0x66107C24, modOpcodes line 967.

PopTmpLdAdStr

(3,0xC7)emitteddup of (0,59)handler #87Stack & frameconfirmed_handler91 corpus hits
(alias) Pop temporary and reload value (PopTmpLdAdStr).

Alias dispatch slot (3, 0xC7) for the canonical PopTmpLdAdStr at (3, 0xC4); semantics are identical.

Combined pop+load pattern used by the compiler for expression-temporary lifetime management. Pops a temporary slot reference (often a freshly-allocated string or address), then reloads its current value onto the stack. The PopTmpLdAdStr/PopTmpLdAd* variants encode the storage class of the temp.

When the compiler emits it

Emitted in expression code where an intermediate result must persist briefly past its allocation.

VB6 source (verified: compiles to this slot)
Public Sub Main()
  Dim f As String * 8
  P f
End Sub

Sub P(s As String)
End Sub
Encoding, evidence and notes
Encoding

Encoding: FD C7 (lead byte FD selects table 3), then 2 operand byte(s); total instruction length 4 byte(s).
vbdec template: %a
Operands:

  1. %a: local_var_ref, 2 byte(s). signed 16-bit offset from the procedure frame pointer (EBP). Negative = local/temporary (vbdec var_XX, XX = -offset), positive = argument (arg_XX).

Observed: FDC7 68FF PopTmpLdAdStr var_98

Examples
Form1.mnuErrorSaveRaw_Click @ 0x45C9BC | 45CAE1    FDC7 C0FE             PopTmpLdAdStr var_140
Form1.Proc_448AF0 @ 0x448AF0 | 448B55    FDC7 44FF             PopTmpLdAdStr var_BC
Form1.mnuDecrypt_Click @ 0x449D84 | 449DA8    FDC7 6CFF             PopTmpLdAdStr var_94

91 occurrence(s) in PDFStreamDumper.

Evidence and notes

Emitted by VB6 SP6 (P-code): yes. Minimal probe: probes\op\3_C7_PopTmpLdAdStr.

Handler: 0x6610691F, shared by 3 dispatch slots (real opcode #87). This is a duplicate slot of (0,59) PopTmpLdAdStr. Other slots: (0,59) PopTmpLdAdStr, (3,C4) PopTmpLdAdStr.

Compile-time slot selection: the compiler picks different slots of this handler for different source types:

  • (0,59): Dim a(5) As Boolean : Erase a
  • (3,C7): Dim f As String * 8 : P f

Corpus: 91 occurrence(s) in PDFStreamDumper_p.exe.

Slots sharing this handler

(0,0x59) PopTmpLdAdStr, (3,0xC4) PopTmpLdAdStr

Description: draft, by claude-opus-4.7. Handler 0x6610691F, dispatch slot 0x66107C30, modOpcodes line 972.

PopTmpLdAdVar

(3,0xC6)not emittedhandler #567Stack & frameinferred_corpus
No description yet.
Encoding, evidence and notes
Encoding

Encoding: FD C6 (lead byte FD selects table 3), then 2 operand byte(s); total instruction length 4 byte(s).
vbdec template: %a
Operands:

  1. %a: local_var_ref, 2 byte(s). signed 16-bit offset from the procedure frame pointer (EBP). Negative = local/temporary (vbdec var_XX, XX = -offset), positive = argument (arg_XX).
Evidence and notes

Emitted by VB6 SP6 (P-code): not observed in about 3,070 probe programs. The slot exists in the runtime's dispatch table, but no tested source construct makes the compiler emit it.

Handler: 0x6610BFFB, unique to this slot (real opcode #567).

Description: none. Handler 0x6610BFFB, dispatch slot 0x66107C2C, modOpcodes line 970.

Print

Print # / Debug.Print formatting

PrintChan

(3,0x32)not emittedhandler #490File I/O & Printconfirmed_msdocs
Legacy per-item Print opcode (selects the output channel (file number)); never emitted by VB6 SP6.

One step of an item-by-item Print encoding: selects the output channel (file number). The runtime still dispatches the slot, but VB6 SP6 compiles each whole Print statement into a single descriptor-driven PrintFile (5,0E) or PrintObject (5,0D) instead.

When the compiler emits it

Not emitted by VB6 SP6: no Print #, form Print or Printer.Print variant tested produced it (see Phase 4). Expect it only in p-code from other compiler versions or hand-crafted p-code.

Encoding, evidence and notes
Encoding

Encoding: FD 32 (lead byte FD selects table 3), then 0 operand byte(s); total instruction length 2 byte(s).
Operands: none. All inputs come from the evaluation stack or the frame.

Evidence and notes

Emitted by VB6 SP6 (P-code): not observed in about 3,070 probe programs. The slot exists in the runtime's dispatch table, but no tested source construct makes the compiler emit it.

Handler: 0x66109A5B, unique to this slot (real opcode #490).

Family note: Phase 4: VB6 SP6 compiles every Print/Print # statement to a single PrintFile (5,0E) or PrintObject (5,0D). The per-item Print opcodes in this family were never emitted. They appear to be a legacy encoding still supported by the runtime.

Description: draft, by claude-opus-5-5. Handler 0x66109A5B, dispatch slot 0x661079DC, modOpcodes line 525.

PrintComma

(3,0x34)not emittedhandler #492File I/O & Printconfirmed_msdocs
Legacy per-item Print opcode (advances to the next print zone (,)); never emitted by VB6 SP6.

One step of an item-by-item Print encoding: advances to the next print zone (,). The runtime still dispatches the slot, but VB6 SP6 compiles each whole Print statement into a single descriptor-driven PrintFile (5,0E) or PrintObject (5,0D) instead.

When the compiler emits it

Not emitted by VB6 SP6: no Print #, form Print or Printer.Print variant tested produced it (see Phase 4). Expect it only in p-code from other compiler versions or hand-crafted p-code.

Encoding, evidence and notes
Encoding

Encoding: FD 34 (lead byte FD selects table 3), then 0 operand byte(s); total instruction length 2 byte(s).
Operands: none. All inputs come from the evaluation stack or the frame.

Evidence and notes

Emitted by VB6 SP6 (P-code): not observed in about 3,070 probe programs. The slot exists in the runtime's dispatch table, but no tested source construct makes the compiler emit it.

Handler: 0x6610B894, unique to this slot (real opcode #492).

Family note: Phase 4: VB6 SP6 compiles every Print/Print # statement to a single PrintFile (5,0E) or PrintObject (5,0D). The per-item Print opcodes in this family were never emitted. They appear to be a legacy encoding still supported by the runtime.

Description: draft, by claude-opus-5-5. Handler 0x6610B894, dispatch slot 0x661079E4, modOpcodes line 526.

PrintEos

(3,0x35)not emittedhandler #493File I/O & Printconfirmed_msdocs
Legacy per-item Print opcode (ends the statement (flushes, no newline)); never emitted by VB6 SP6.

One step of an item-by-item Print encoding: ends the statement (flushes, no newline). The runtime still dispatches the slot, but VB6 SP6 compiles each whole Print statement into a single descriptor-driven PrintFile (5,0E) or PrintObject (5,0D) instead.

When the compiler emits it

Not emitted by VB6 SP6: no Print #, form Print or Printer.Print variant tested produced it (see Phase 4). Expect it only in p-code from other compiler versions or hand-crafted p-code.

Encoding, evidence and notes
Encoding

Encoding: FD 35 (lead byte FD selects table 3), then 0 operand byte(s); total instruction length 2 byte(s).
Operands: none. All inputs come from the evaluation stack or the frame.

Evidence and notes

Emitted by VB6 SP6 (P-code): not observed in about 3,070 probe programs. The slot exists in the runtime's dispatch table, but no tested source construct makes the compiler emit it.

Handler: 0x6610B861, unique to this slot (real opcode #493).

Family note: Phase 4: VB6 SP6 compiles every Print/Print # statement to a single PrintFile (5,0E) or PrintObject (5,0D). The per-item Print opcodes in this family were never emitted. They appear to be a legacy encoding still supported by the runtime.

Description: draft, by claude-opus-5-5. Handler 0x6610B861, dispatch slot 0x661079E8, modOpcodes line 527.

PrintFile

(5,0x0E)emittedhandler #740File I/O & Printinferred_corpus1 corpus hits
Write a value to a #-numbered file or to the immediate window.

Implements Print #N, ... / Debug.Print element emission for the suffix-indicated type. Pops the file number and the value; formats and writes per VB6 Print rules.

When the compiler emits it

Emitted per argument of a Print / Debug.Print statement, dispatched by the static type of each argument.

VB6 source (verified: compiles to this slot)
Public Sub Main()
  Dim n As Long, s As String
  Print #1, "x";
End Sub
Encoding, evidence and notes
Encoding

Encoding: FF 0E (lead byte FF selects table 5), then 4 operand byte(s); total instruction length 6 byte(s).
No printf operands are declared, but the instruction still consumes operand bytes; see the size above and the observed bytes below. (Phase 3a: flag=0 does not mean 'no operands'.)
Observed: FF0E 01000C00 PrintFile

Examples
fso.Proc_440D44 @ 0x440D44 | 440D78    FF0E 54000C00         PrintFile

1 occurrence(s) in PDFStreamDumper.

Evidence and notes

Emitted by VB6 SP6 (P-code): yes. Minimal probe: probes\op\5_0E_PrintFile.

Handler: 0x6610662A, unique to this slot (real opcode #740).

Finding: Probe: an entire Print #n, ... statement (items, ;, ,, Spc, Tab) compiles to one PrintFile with a descriptor. The legacy per-item Print* opcodes (3,32..3,3C) are never emitted.

Family note: Phase 4: VB6 SP6 compiles every Print/Print # statement to a single PrintFile (5,0E) or PrintObject (5,0D). The per-item Print opcodes in this family were never emitted. They appear to be a legacy encoding still supported by the runtime.

Check of vb6_source_eq example: verified: compiles and emits this slot.

Corpus: 1 occurrence(s) in PDFStreamDumper_p.exe.

Example from the description
Print #1, value

Description: draft, by claude-opus-4.7. Handler 0x6610662A, dispatch slot 0x6610814C, modOpcodes line 524.

PrintItemComma

(3,0x37)not emittedhandler #495File I/O & Printconfirmed_msdocs
Legacy per-item Print opcode (prints one item followed by ,); never emitted by VB6 SP6.

One step of an item-by-item Print encoding: prints one item followed by ,. The runtime still dispatches the slot, but VB6 SP6 compiles each whole Print statement into a single descriptor-driven PrintFile (5,0E) or PrintObject (5,0D) instead.

When the compiler emits it

Not emitted by VB6 SP6: no Print #, form Print or Printer.Print variant tested produced it (see Phase 4). Expect it only in p-code from other compiler versions or hand-crafted p-code.

Encoding, evidence and notes
Encoding

Encoding: FD 37 (lead byte FD selects table 3), then 0 operand byte(s); total instruction length 2 byte(s).
Operands: none. All inputs come from the evaluation stack or the frame.

Evidence and notes

Emitted by VB6 SP6 (P-code): not observed in about 3,070 probe programs. The slot exists in the runtime's dispatch table, but no tested source construct makes the compiler emit it.

Handler: 0x6610B82E, unique to this slot (real opcode #495).

Family note: Phase 4: VB6 SP6 compiles every Print/Print # statement to a single PrintFile (5,0E) or PrintObject (5,0D). The per-item Print opcodes in this family were never emitted. They appear to be a legacy encoding still supported by the runtime.

Description: draft, by claude-opus-5-5. Handler 0x6610B82E, dispatch slot 0x661079F0, modOpcodes line 529.

PrintItemNL

(3,0x39)not emittedhandler #497File I/O & Printconfirmed_msdocs
Legacy per-item Print opcode (prints one item followed by a newline); never emitted by VB6 SP6.

One step of an item-by-item Print encoding: prints one item followed by a newline. The runtime still dispatches the slot, but VB6 SP6 compiles each whole Print statement into a single descriptor-driven PrintFile (5,0E) or PrintObject (5,0D) instead.

When the compiler emits it

Not emitted by VB6 SP6: no Print #, form Print or Printer.Print variant tested produced it (see Phase 4). Expect it only in p-code from other compiler versions or hand-crafted p-code.

Encoding, evidence and notes
Encoding

Encoding: FD 39 (lead byte FD selects table 3), then 0 operand byte(s); total instruction length 2 byte(s).
Operands: none. All inputs come from the evaluation stack or the frame.

Evidence and notes

Emitted by VB6 SP6 (P-code): not observed in about 3,070 probe programs. The slot exists in the runtime's dispatch table, but no tested source construct makes the compiler emit it.

Handler: 0x6610B83F, unique to this slot (real opcode #497).

Family note: Phase 4: VB6 SP6 compiles every Print/Print # statement to a single PrintFile (5,0E) or PrintObject (5,0D). The per-item Print opcodes in this family were never emitted. They appear to be a legacy encoding still supported by the runtime.

Description: draft, by claude-opus-5-5. Handler 0x6610B83F, dispatch slot 0x661079F8, modOpcodes line 531.

PrintItemSemi

(3,0x38)not emittedhandler #496File I/O & Printconfirmed_msdocs
Legacy per-item Print opcode (prints one item followed by ;); never emitted by VB6 SP6.

One step of an item-by-item Print encoding: prints one item followed by ;. The runtime still dispatches the slot, but VB6 SP6 compiles each whole Print statement into a single descriptor-driven PrintFile (5,0E) or PrintObject (5,0D) instead.

When the compiler emits it

Not emitted by VB6 SP6: no Print #, form Print or Printer.Print variant tested produced it (see Phase 4). Expect it only in p-code from other compiler versions or hand-crafted p-code.

Encoding, evidence and notes
Encoding

Encoding: FD 38 (lead byte FD selects table 3), then 0 operand byte(s); total instruction length 2 byte(s).
Operands: none. All inputs come from the evaluation stack or the frame.

Evidence and notes

Emitted by VB6 SP6 (P-code): not observed in about 3,070 probe programs. The slot exists in the runtime's dispatch table, but no tested source construct makes the compiler emit it.

Handler: 0x6610B850, unique to this slot (real opcode #496).

Family note: Phase 4: VB6 SP6 compiles every Print/Print # statement to a single PrintFile (5,0E) or PrintObject (5,0D). The per-item Print opcodes in this family were never emitted. They appear to be a legacy encoding still supported by the runtime.

Description: draft, by claude-opus-5-5. Handler 0x6610B850, dispatch slot 0x661079F4, modOpcodes line 530.

PrintNL

(3,0x36)not emittedhandler #494File I/O & Printconfirmed_msdocs
Legacy per-item Print opcode (writes a newline); never emitted by VB6 SP6.

One step of an item-by-item Print encoding: writes a newline. The runtime still dispatches the slot, but VB6 SP6 compiles each whole Print statement into a single descriptor-driven PrintFile (5,0E) or PrintObject (5,0D) instead.

When the compiler emits it

Not emitted by VB6 SP6: no Print #, form Print or Printer.Print variant tested produced it (see Phase 4). Expect it only in p-code from other compiler versions or hand-crafted p-code.

Encoding, evidence and notes
Encoding

Encoding: FD 36 (lead byte FD selects table 3), then 0 operand byte(s); total instruction length 2 byte(s).
Operands: none. All inputs come from the evaluation stack or the frame.

Evidence and notes

Emitted by VB6 SP6 (P-code): not observed in about 3,070 probe programs. The slot exists in the runtime's dispatch table, but no tested source construct makes the compiler emit it.

Handler: 0x6610B8B1, unique to this slot (real opcode #494).

Family note: Phase 4: VB6 SP6 compiles every Print/Print # statement to a single PrintFile (5,0E) or PrintObject (5,0D). The per-item Print opcodes in this family were never emitted. They appear to be a legacy encoding still supported by the runtime.

Description: draft, by claude-opus-5-5. Handler 0x6610B8B1, dispatch slot 0x661079EC, modOpcodes line 528.

PrintObj

(3,0x3A)not emittedhandler #498File I/O & Printinferred_corpus
No description yet.
Encoding, evidence and notes
Encoding

Encoding: FD 3A (lead byte FD selects table 3), then 2 operand byte(s); total instruction length 4 byte(s).
No printf operands are declared, but the instruction still consumes operand bytes; see the size above and the observed bytes below. (Phase 3a: flag=0 does not mean 'no operands'.)

Evidence and notes

Emitted by VB6 SP6 (P-code): not observed in about 3,070 probe programs. The slot exists in the runtime's dispatch table, but no tested source construct makes the compiler emit it.

Handler: 0x6610B8B9, unique to this slot (real opcode #498).

Family note: Phase 4: VB6 SP6 compiles every Print/Print # statement to a single PrintFile (5,0E) or PrintObject (5,0D). The per-item Print opcodes in this family were never emitted. They appear to be a legacy encoding still supported by the runtime.

Description: none. Handler 0x6610B8B9, dispatch slot 0x661079FC, modOpcodes line 522.

PrintObject

(5,0x0D)emittedhandler #739File I/O & Printinferred_corpus1 corpus hits
Print method on an object (form, picture box, Printer): one descriptor-driven call for the whole item list.

Pops the target object and the items, and prints them through the object's Print support according to a descriptor that encodes each item's type and separator (;, ,, Spc, Tab).

When the compiler emits it

Emitted for object.Print ... and unqualified Print inside a form: Printer.Print "x", Me.Print a; b, Picture1.Print. Debug.Print is removed at compile time and Print #n uses PrintFile (5,0E).

VB6 source (verified: compiles to this slot)
Public Sub Main()
  Dim o As Object
  o.Print "x"
End Sub
Encoding, evidence and notes
Encoding

Encoding: FF 0D (lead byte FF selects table 5), then 4 operand byte(s); total instruction length 6 byte(s).
No printf operands are declared, but the instruction still consumes operand bytes; see the size above and the observed bytes below. (Phase 3a: flag=0 does not mean 'no operands'.)
Observed: FF0D 01000C00 PrintObject

Examples
Form1.mnuLoadAsImage_Click @ 0x45B0F4 | 45B2D0    FF0D 86000C00         PrintObject

1 occurrence(s) in PDFStreamDumper.

Evidence and notes

Emitted by VB6 SP6 (P-code): yes. Minimal probe: probes\op\5_0D_PrintObject.

Handler: 0x66106606, unique to this slot (real opcode #739).

Finding: Probe: form/object Print (e.g. Me.Print, Print inside a form, Printer.Print) compiles to a single PrintObject with a descriptor.

Family note: Phase 4: VB6 SP6 compiles every Print/Print # statement to a single PrintFile (5,0E) or PrintObject (5,0D). The per-item Print opcodes in this family were never emitted. They appear to be a legacy encoding still supported by the runtime.

Check of vb6_source_eq example: verified: compiles and emits this slot.

Corpus: 1 occurrence(s) in PDFStreamDumper_p.exe.

Example from the description
Printer.Print "hello"

Description: draft, by claude-opus-5-5. Handler 0x66106606, dispatch slot 0x66108148, modOpcodes line 523.

PrintSpc

(3,0x3B)not emittedhandler #499File I/O & Printconfirmed_msdocs
Legacy per-item Print opcode (writes Spc(n) spaces); never emitted by VB6 SP6.

One step of an item-by-item Print encoding: writes Spc(n) spaces. The runtime still dispatches the slot, but VB6 SP6 compiles each whole Print statement into a single descriptor-driven PrintFile (5,0E) or PrintObject (5,0D) instead.

When the compiler emits it

Not emitted by VB6 SP6: no Print #, form Print or Printer.Print variant tested produced it (see Phase 4). Expect it only in p-code from other compiler versions or hand-crafted p-code.

Encoding, evidence and notes
Encoding

Encoding: FD 3B (lead byte FD selects table 3), then 0 operand byte(s); total instruction length 2 byte(s).
Operands: none. All inputs come from the evaluation stack or the frame.

Evidence and notes

Emitted by VB6 SP6 (P-code): not observed in about 3,070 probe programs. The slot exists in the runtime's dispatch table, but no tested source construct makes the compiler emit it.

Handler: 0x6610B872, unique to this slot (real opcode #499).

Family note: Phase 4: VB6 SP6 compiles every Print/Print # statement to a single PrintFile (5,0E) or PrintObject (5,0D). The per-item Print opcodes in this family were never emitted. They appear to be a legacy encoding still supported by the runtime.

Description: draft, by claude-opus-5-5. Handler 0x6610B872, dispatch slot 0x66107A00, modOpcodes line 532.

PrintTab

(3,0x3C)not emittedhandler #500File I/O & Printconfirmed_msdocs
Legacy per-item Print opcode (moves to Tab(n) column); never emitted by VB6 SP6.

One step of an item-by-item Print encoding: moves to Tab(n) column. The runtime still dispatches the slot, but VB6 SP6 compiles each whole Print statement into a single descriptor-driven PrintFile (5,0E) or PrintObject (5,0D) instead.

When the compiler emits it

Not emitted by VB6 SP6: no Print #, form Print or Printer.Print variant tested produced it (see Phase 4). Expect it only in p-code from other compiler versions or hand-crafted p-code.

Encoding, evidence and notes
Encoding

Encoding: FD 3C (lead byte FD selects table 3), then 0 operand byte(s); total instruction length 2 byte(s).
Operands: none. All inputs come from the evaluation stack or the frame.

Evidence and notes

Emitted by VB6 SP6 (P-code): not observed in about 3,070 probe programs. The slot exists in the runtime's dispatch table, but no tested source construct makes the compiler emit it.

Handler: 0x6610B883, unique to this slot (real opcode #500).

Family note: Phase 4: VB6 SP6 compiles every Print/Print # statement to a single PrintFile (5,0E) or PrintObject (5,0D). The per-item Print opcodes in this family were never emitted. They appear to be a legacy encoding still supported by the runtime.

Description: draft, by claude-opus-5-5. Handler 0x6610B883, dispatch slot 0x66107A04, modOpcodes line 533.

Record

UDT/record copy/destruct

AssignRecord

(4,0xF5)emittedhandler #717UDT / recordinferred_corpus
Assign one UDT to another (deep copy honouring String/Variant/Object members).

Pops destination and source addresses and copies the record field by field, using the UDT descriptor udtPool:%2 to AddRef/copy reference members and release the destination's old values.

Stack: [..., src:Rf, dst:Rf] -> [...] (observed push order: source, then destination)

When the compiler emits it

Emitted for q = r when the UDT contains reference-counted members. Plain-data UDTs use CopyBytes instead.

VB6 source (verified: compiles to this slot)
Private Type TRec
  a As Long
  s As String
  v As Variant
  o As Object
End Type
Private Type TPlain
  a As Long
  b As Integer
End Type

Public Sub Main()
  Dim r As TRec, q As TRec
  q = r
End Sub
Encoding, evidence and notes
Encoding

Encoding: FE F5 (lead byte FE selects table 4), then 2 operand byte(s); total instruction length 4 byte(s).
vbdec template: udtPool:%2
Operands:

  1. %2 (udtPool): immediate_word, 2 byte(s). 16-bit immediate.

Observed: FEF5 0000 AssignRecord udtPool:0x0

Examples
FEF5 0000  AssignRecord udtPool:0x0

From the Phase 4 probe (VB6 SP6, P-code).

Evidence and notes

Emitted by VB6 SP6 (P-code): yes. Minimal probe: probes\op\4_F5_AssignRecord.

Handler: 0x6610C0C5, unique to this slot (real opcode #717).

Check of vb6_source_eq example: verified: compiles and emits this slot.

Example from the description
Private Type TRec
  a As Long
  s As String
  v As Variant
  o As Object
End Type
Private Type TPlain
  a As Long
  b As Integer
End Type

Public Sub Main()
  Dim r As TRec, q As TRec
  q = r
End Sub

Description: draft, by claude-opus-5-5. Handler 0x6610C0C5, dispatch slot 0x661080E8, modOpcodes line 629.

DestructRecord

(5,0x2A)emittedhandler #753UDT / recordinferred_corpus
Release the reference-counted members of a UDT (destruct before overwrite).

Pops a UDT address and frees its String/Variant/Object members according to the descriptor udtPool:%2.

When the compiler emits it

Observed before Get #n, rec, r overwrites a UDT that contains Strings.

VB6 source (verified: compiles to this slot)
Private Type TR
  a As Long
  s As String * 4
End Type

Public Sub Main()
  Dim r As TR
  Get #1, 2, r
End Sub
Encoding, evidence and notes
Encoding

Encoding: FF 2A (lead byte FF selects table 5), then 2 operand byte(s); total instruction length 4 byte(s).
vbdec template: udtPool:%2
Operands:

  1. %2 (udtPool): immediate_word, 2 byte(s). 16-bit immediate.

Observed: FF2A 0000 DestructRecord udtPool:0x0

Examples
FF2A 0000  DestructRecord udtPool:0x0

From the Phase 4 probe (VB6 SP6, P-code).

Evidence and notes

Emitted by VB6 SP6 (P-code): yes. Minimal probe: probes\op\5_2A_DestructRecord.

Handler: 0x6610C05D, unique to this slot (real opcode #753).

Check of vb6_source_eq example: verified: compiles and emits this slot.

Example from the description
Private Type TR
  a As Long
  s As String * 4
End Type

Public Sub Main()
  Dim r As TR
  Get #1, 2, r
End Sub

Description: draft, by claude-opus-5-5. Handler 0x6610C05D, dispatch slot 0x661081BC, modOpcodes line 630.

EraseDestruct

(4,0x60)emittedhandler #619UDT / recordinferred_corpus
Erase a fixed-size array of UDTs: destruct every element's reference members.

Pops the array descriptor and releases the String/Variant/Object members of every element (descriptor udtPool:%2). The fixed array itself keeps its storage.

When the compiler emits it

Emitted for Erase r where r is a fixed-size array of a UDT with reference members.

VB6 source (verified: compiles to this slot)
Private Type TRec
  a As Long
  s As String
  v As Variant
  o As Object
End Type
Private Type TPlain
  a As Long
  b As Integer
End Type

Public Sub Main()
  Dim r(3) As TRec
  Erase r
End Sub
Encoding, evidence and notes
Encoding

Encoding: FE 60 (lead byte FE selects table 4), then 2 operand byte(s); total instruction length 4 byte(s).
vbdec template: udtPool:%2
Operands:

  1. %2 (udtPool): immediate_word, 2 byte(s). 16-bit immediate.

Observed: FE60 0000 EraseDestruct udtPool:0x0

Examples
FE60 0000  EraseDestruct udtPool:0x0

From the Phase 4 probe (VB6 SP6, P-code).

Evidence and notes

Emitted by VB6 SP6 (P-code): yes. Minimal probe: probes\op\4_60_EraseDestruct.

Handler: 0x66109147, unique to this slot (real opcode #619).

Check of vb6_source_eq example: verified: compiles and emits this slot.

Example from the description
Private Type TRec
  a As Long
  s As String
  v As Variant
  o As Object
End Type
Private Type TPlain
  a As Long
  b As Integer
End Type

Public Sub Main()
  Dim r(3) As TRec
  Erase r
End Sub

Description: draft, by claude-opus-5-5. Handler 0x66109147, dispatch slot 0x66107E94, modOpcodes line 628.

Special

NOP / invalid / undefined

InvalidExcode

(0,0x03)structuraldup of (0,01)handler #2Structuralundefined
No description yet.
Encoding, evidence and notes
Encoding

Encoding: 03, then 0 operand byte(s); total instruction length 1 byte(s).
Operands: none. All inputs come from the evaluation stack or the frame.

Evidence and notes

Emitted by VB6 SP6: structural slot (dispatch trampoline or invalid opcode), not an instruction the compiler generates.

Handler: 0x6610C423, shared by 2 dispatch slots (real opcode #2). This is a duplicate slot of (0,01) vbDecNop. Other slots: (0,01) vbDecNop.

Slots sharing this handler

(0,0x01) vbDecNop

Description: none. Handler 0x6610C423, dispatch slot 0x66106D20, modOpcodes line 169.

vbDecNop

(0,0x01)structuralprimary of 2handler #2Structuralundefined
No description yet.
Encoding, evidence and notes
Encoding

Encoding: 01, then 0 operand byte(s); total instruction length 1 byte(s).
Operands: none. All inputs come from the evaluation stack or the frame.

Evidence and notes

Emitted by VB6 SP6: structural slot (dispatch trampoline or invalid opcode), not an instruction the compiler generates.

Handler: 0x6610C423, shared by 2 dispatch slots (real opcode #2). This is the primary slot. Other slots: (0,03) InvalidExcode.

Slots sharing this handler

(0,0x03) InvalidExcode

Description: none. Handler 0x6610C423, dispatch slot 0x66106D18, modOpcodes line 168.

String_Concat

String concatenation

ConcatStr

(0,0x2A)emittedprimary of 2handler #41Stringconfirmed_msdocs797 corpus hits
Concatenate the top two BSTR (VB6 String)s; push the result.

Pops b and a, pushes a & b.

Stack: [..., a:Str, b:Str] -> [..., (a & b):Str]

ConcatStr operates on BSTRs directly; ConcatVar coerces Variants to strings before joining (VB6 conversion rules apply; Null operand produces Null).

When the compiler emits it

Emitted for the & operator. String operands -> ConcatStr; any Variant -> ConcatVar.

VB6 source (verified: compiles to this slot)
Public Sub Main()
  Dim a As String, b As String, c As String
  c = a + b
End Sub
Encoding, evidence and notes
Encoding

Encoding: 2A, then 0 operand byte(s); total instruction length 1 byte(s).
Operands: none. All inputs come from the evaluation stack or the frame.
Observed: 2A ConcatStr

Examples
Form1.LoadPlugins @ 0x4644FC | 464524    2A                    ConcatStr
Form1.LoadPlugins @ 0x4644FC | 4645BF    2A                    ConcatStr
Form1.LoadPlugins @ 0x4644FC | 464667    2A                    ConcatStr

797 occurrence(s) in PDFStreamDumper.

Evidence and notes

Emitted by VB6 SP6 (P-code): yes. Minimal probe: probes\op\0_2A_ConcatStr.

Handler: 0x66106B99, shared by 2 dispatch slots (real opcode #41). This is the primary slot. Other slots: (1,F0) ConcatStr.

Check of vb6_source_eq example: verified: compiles and emits this slot.

Corpus: 797 occurrence(s) in PDFStreamDumper_p.exe.

Example from the description
Dim a As String, b As String, c As String
c = a & b
Slots sharing this handler

(1,0xF0) ConcatStr

Description: draft, by claude-opus-4.7. Handler 0x66106B99, dispatch slot 0x66106DBC, modOpcodes line 374.

ConcatStr

(1,0xF0)not emitteddup of (0,2A)handler #41Stringconfirmed_handler
(alias) Concatenate the top two BSTR (VB6 String)s; push the result.

Alias dispatch slot (1, 0xF0) for the canonical ConcatStr at (0, 0x2A); semantics are identical.

Pops b and a, pushes a & b.

Stack: [..., a:Str, b:Str] -> [..., (a & b):Str]

ConcatStr operates on BSTRs directly; ConcatVar coerces Variants to strings before joining (VB6 conversion rules apply; Null operand produces Null).

When the compiler emits it

Emitted for the & operator. String operands -> ConcatStr; any Variant -> ConcatVar.

VB6 source (from description, not verified)
Dim a As String, b As String, c As String
c = a & b
Encoding, evidence and notes
Encoding

Encoding: FB F0 (lead byte FB selects table 1), then 0 operand byte(s); total instruction length 2 byte(s).
Operands: none. All inputs come from the evaluation stack or the frame.

Evidence and notes

Emitted by VB6 SP6 (P-code): not observed in about 3,070 probe programs. The slot exists in the runtime's dispatch table, but no tested source construct makes the compiler emit it.

Handler: 0x66106B99, shared by 2 dispatch slots (real opcode #41). This is a duplicate slot of (0,2A) ConcatStr. Other slots: (0,2A) ConcatStr.

Check of vb6_source_eq example: compiles, but emits a different slot of the same handler. emits (0,2A) ConcatStr (same handler, different slot)

Slots sharing this handler

(0,0x2A) ConcatStr

Description: draft, by claude-opus-4.7. Handler 0x66106B99, dispatch slot 0x661074D4, modOpcodes line 375.

ConcatVar

(1,0xEF)emittedhandler #346Stringinferred_corpus429 corpus hits
Concatenate (&) where at least one operand is a Variant; result Variant in a temporary.

Pops b and a, pushes a & b.

Stack: [..., a:Var, b:Var] -> [..., (a & b):Var]

ConcatStr operates on BSTRs directly; ConcatVar coerces Variants to strings before joining (VB6 conversion rules apply; Null operand produces Null).

When the compiler emits it

Emitted for & when either operand is a Variant (String & String uses ConcatStr (0,2A)). Null & x yields x (Null is treated as empty).

VB6 source (verified: compiles to this slot)
Public Sub Main()
  Dim a As Variant, b As Variant, c As Variant
  c = a & b
End Sub
Encoding, evidence and notes
Encoding

Encoding: FB EF (lead byte FB selects table 1), then 2 operand byte(s); total instruction length 4 byte(s).
vbdec template: %a
Operands:

  1. %a: local_var_ref, 2 byte(s). signed 16-bit offset from the procedure frame pointer (EBP). Negative = local/temporary (vbdec var_XX, XX = -offset), positive = argument (arg_XX).

Observed: FBEF 3CFF ConcatVar var_C4

Examples
Form1.mnub64decode_Click @ 0x451280 | 45135E    FBEF 0CFF             ConcatVar var_F4
Form1.mnub64decode_Click @ 0x451280 | 451367    FBEF ECFE             ConcatVar var_114
Form1.mnub64decode_Click @ 0x451280 | 451370    FBEF CCFE             ConcatVar var_134

429 occurrence(s) in PDFStreamDumper.

Evidence and notes

Emitted by VB6 SP6 (P-code): yes. Minimal probe: probes\op\1_EF_ConcatVar.

Handler: 0x66106BAB, unique to this slot (real opcode #346).

Check of vb6_source_eq example: verified: compiles and emits this slot.

Corpus: 429 occurrence(s) in PDFStreamDumper_p.exe.

Example from the description
Dim a As Variant, b As Variant, c As Variant
a = "x": b = 1
c = a & b

Description: draft, by claude-opus-5-5. Handler 0x66106BAB, dispatch slot 0x661074D0, modOpcodes line 376.

String_FixedLen

Fixed-length string ops

LdFixedStr

(0,0x33)emittedprimary of 2handler #50Stringinferred_corpus2 corpus hits
Load a fixed-length String as a normal (variable-length) String.

Reads sz characters from the fixed buffer whose address is on the stack and pushes a new BSTR of that length (trailing pad spaces kept).

Stack: [..., &fx:Rf] -> [..., s:Str]

When the compiler emits it

Emitted wherever a fixed-length String (As String * n) is read as a String value: assignment to a String, passing to a String parameter or API, comparison, Select Case. The operand gives the fixed length in characters.

VB6 source (verified: compiles to this slot)
Dim gf As String * 8

Public Sub Main()
  Dim s As String
  s = gf
End Sub
Encoding, evidence and notes
Encoding

Encoding: 33, then 2 operand byte(s); total instruction length 3 byte(s).
vbdec template: sz:%2
Operands:

  1. %2 (sz): immediate_word, 2 byte(s). 16-bit immediate.

Observed: 33 0800 LdFixedStr sz:0x8

Examples
CDisassembler.DisasmBytes @ 0x4585E4 | 45866A    33 0001               LdFixedStr sz:0x100
CDisassembler.DisasmBytes @ 0x4585E4 | 458673    33 0001               LdFixedStr sz:0x100

2 occurrence(s) in PDFStreamDumper.

Evidence and notes

Emitted by VB6 SP6 (P-code): yes. Minimal probe: probes\op\0_33_LdFixedStr.

Handler: 0x6610B253, shared by 2 dispatch slots (real opcode #50). This is the primary slot. Other slots: (4,61) LdFixedStr.

Check of vb6_source_eq example: verified: compiles and emits this slot.

Corpus: 2 occurrence(s) in PDFStreamDumper_p.exe.

Example from the description
Dim f As String * 8, s As String
f = "abc"
s = f
Slots sharing this handler

(4,0x61) LdFixedStr

Description: draft, by claude-opus-5-5. Handler 0x6610B253, dispatch slot 0x66106DE0, modOpcodes line 989.

LdFixedStr

(4,0x61)not emitteddup of (0,33)handler #50Stringconfirmed_handler
Same handler as (0,0x33) LdFixedStr: Load a fixed-length String as a normal (variable-length) String.
Encoding, evidence and notes
Encoding

Encoding: FE 61 (lead byte FE selects table 4), then 2 operand byte(s); total instruction length 4 byte(s).
vbdec template: sz:%2
Operands:

  1. %2 (sz): immediate_word, 2 byte(s). 16-bit immediate.
Evidence and notes

Emitted by VB6 SP6 (P-code): not observed in about 3,070 probe programs. The slot exists in the runtime's dispatch table, but no tested source construct makes the compiler emit it.

Handler: 0x6610B253, shared by 2 dispatch slots (real opcode #50). This is a duplicate slot of (0,33) LdFixedStr. Other slots: (0,33) LdFixedStr.

Slots sharing this handler

(0,0x33) LdFixedStr

Description: none. Handler 0x6610B253, dispatch slot 0x66107E98, modOpcodes line 990.

StFixedStr

(0,0x47)emittedprimary of 2handler #70Stringinferred_corpus6 corpus hits
Fixed-length string operation (StFixedStr).

Operates on a fixed-length VB6 String (Dim s As String * N). Fixed-length strings are stored in-place as Unicode buffers (not BSTRs); assignment requires explicit load/store-fixed-str opcodes.

When the compiler emits it

Emitted at reads/writes of fixed-length string variables.

VB6 source (verified: compiles to this slot)
Dim gf As String * 8

Public Sub Main()
  Dim s As String
  gf = "abc"
End Sub
Encoding, evidence and notes
Encoding

Encoding: 47, then 2 operand byte(s); total instruction length 3 byte(s).
vbdec template: sz:%2
Operands:

  1. %2 (sz): immediate_word, 2 byte(s). 16-bit immediate.

Observed: 47 0800 StFixedStr sz:0x8

Examples
fso.Proc_448BF0 @ 0x448BF0 | 448C53    47 0000               StFixedStr sz:0x0
fso.Proc_448BF0 @ 0x448BF0 | 448C7F    47 0000               StFixedStr sz:0x0
frmSclog.GetShortName @ 0x44ADCC | 44AE36    47 0000               StFixedStr sz:0x0

6 occurrence(s) in PDFStreamDumper.

Evidence and notes

Emitted by VB6 SP6 (P-code): yes. Minimal probe: probes\op\0_47_StFixedStr.

Handler: 0x6610B37B, shared by 2 dispatch slots (real opcode #70). This is the primary slot. Other slots: (4,0E) StLsetFixStr.

Check of vb6_source_eq example: verified: compiles and emits this slot.

Corpus: 6 occurrence(s) in PDFStreamDumper_p.exe.

Example from the description
Dim s As String * 16
s = "hello"
Slots sharing this handler

(4,0x0E) StLsetFixStr

Description: draft, by claude-opus-4.7. Handler 0x6610B37B, dispatch slot 0x66106E30, modOpcodes line 991.

StFixedStrFree

(4,0x0F)emittedhandler #600Stringinferred_corpus
Store a String temporary into a fixed-length String and free the temporary.

Pops the destination address and the source BSTR, copies/pads/truncates into the fixed buffer (length = operand), then frees the source BSTR.

Operand (16-bit): fixed length in characters (observed 5).

When the compiler emits it

Emitted for fx = <string expression> with fx As String * n.

VB6 source (verified: compiles to this slot)
Public Sub Main()
  Dim fx As String * 5
  fx = Fs() & "a"
End Sub

Function Fs() As String
End Function
Encoding, evidence and notes
Encoding

Encoding: FE 0F (lead byte FE selects table 4), then 2 operand byte(s); total instruction length 4 byte(s).
No printf operands are declared, but the instruction still consumes operand bytes; see the size above and the observed bytes below. (Phase 3a: flag=0 does not mean 'no operands'.)
Observed: FE0F 0500 StFixedStrFree

Examples
FE0F 0500  StFixedStrFree

From the Phase 4 probe (VB6 SP6, P-code).

Evidence and notes

Emitted by VB6 SP6 (P-code): yes. Minimal probe: probes\op\4_0F_StFixedStrFree.

Handler: 0x6610B363, unique to this slot (real opcode #600).

Check of vb6_source_eq example: verified: compiles and emits this slot.

Example from the description
Public Sub Main()
  Dim fx As String * 5
  fx = Fs() & "a"
End Sub

Function Fs() As String
End Function

Description: draft, by claude-opus-5-5. Handler 0x6610B363, dispatch slot 0x66107D50, modOpcodes line 986.

StFixedStrR

(4,0x1E)emittedhandler #606Stringinferred_corpus
RSet into a fixed-length String.

Right-aligns the source string in the fixed buffer, padding on the left with spaces. Operand: fixed length (observed 8).

When the compiler emits it

Emitted for RSet f = s with f As String * n and a literal or variable source.

VB6 source (verified: compiles to this slot)
Public Sub Main()
  Dim f As String * 8
  RSet f = "cd"
End Sub
Encoding, evidence and notes
Encoding

Encoding: FE 1E (lead byte FE selects table 4), then 2 operand byte(s); total instruction length 4 byte(s).
No printf operands are declared, but the instruction still consumes operand bytes; see the size above and the observed bytes below. (Phase 3a: flag=0 does not mean 'no operands'.)
Observed: FE1E 0800 StFixedStrR

Examples
FE1E 0800  StFixedStrR

From the Phase 4 probe (VB6 SP6, P-code).

Evidence and notes

Emitted by VB6 SP6 (P-code): yes. Minimal probe: probes\op\4_1E_StFixedStrR.

Handler: 0x6610B34B, unique to this slot (real opcode #606).

Check of vb6_source_eq example: verified: compiles and emits this slot.

Example from the description
Public Sub Main()
  Dim f As String * 8
  RSet f = "cd"
End Sub

Description: draft, by claude-opus-5-5. Handler 0x6610B34B, dispatch slot 0x66107D8C, modOpcodes line 987.

StFixedStrRFree

(4,0x1F)emittedhandler #607Stringinferred_corpus
RSet into a fixed-length String from a temporary, then free the temporary.

As StFixedStrR, freeing the temporary source afterwards. Operand: fixed length.

When the compiler emits it

Emitted for RSet f = v where the source must be converted (e.g. a Variant).

VB6 source (verified: compiles to this slot)
Public Sub Main()
  Dim f As String * 4, v As Variant
  RSet f = v
End Sub
Encoding, evidence and notes
Encoding

Encoding: FE 1F (lead byte FE selects table 4), then 2 operand byte(s); total instruction length 4 byte(s).
No printf operands are declared, but the instruction still consumes operand bytes; see the size above and the observed bytes below. (Phase 3a: flag=0 does not mean 'no operands'.)
Observed: FE1F 0400 StFixedStrRFree

Examples
FE1F 0400  StFixedStrRFree

From the Phase 4 probe (VB6 SP6, P-code).

Evidence and notes

Emitted by VB6 SP6 (P-code): yes. Minimal probe: probes\op\4_1F_StFixedStrRFree.

Handler: 0x6610B333, unique to this slot (real opcode #607).

Check of vb6_source_eq example: verified: compiles and emits this slot.

Example from the description
Public Sub Main()
  Dim f As String * 4, v As Variant
  RSet f = v
End Sub

Description: draft, by claude-opus-5-5. Handler 0x6610B333, dispatch slot 0x66107D90, modOpcodes line 988.

StLsetFixStr

(4,0x0E)not emitteddup of (0,47)handler #70Stringinferred_corpus
Same handler as (0,0x47) StFixedStr: Fixed-length string operation (StFixedStr).
Encoding, evidence and notes
Encoding

Encoding: FE 0E (lead byte FE selects table 4), then 2 operand byte(s); total instruction length 4 byte(s).
No printf operands are declared, but the instruction still consumes operand bytes; see the size above and the observed bytes below. (Phase 3a: flag=0 does not mean 'no operands'.)

Evidence and notes

Emitted by VB6 SP6 (P-code): not observed in about 3,070 probe programs. The slot exists in the runtime's dispatch table, but no tested source construct makes the compiler emit it.

Handler: 0x6610B37B, shared by 2 dispatch slots (real opcode #70). This is a duplicate slot of (0,47) StFixedStr. Other slots: (0,47) StFixedStr.

Slots sharing this handler

(0,0x47) StFixedStr

Description: none. Handler 0x6610B37B, dispatch slot 0x66107D4C, modOpcodes line 985.

String_Fn

String built-in (Len, InStr, Mid, StrComp)

FnInStr4

(4,0xFD)emittedhandler #724Stringconfirmed_msdocs53 corpus hits
String built-in: FnInStr4.

Pops the operand(s) needed by FnInStr4 and pushes the result. See VB6 documentation for the exact built-in this implements (e.g. FnLenStr = Len(string), FnInStr4 = 4-argument InStr, FnCStrVar = CStr on Variant). Behavior matches the corresponding VB6 intrinsic.

When the compiler emits it

Emitted at calls to the VB6 intrinsic corresponding to FnInStr4.

VB6 source (verified: compiles to this slot)
Public Sub Main()
  Dim s As String, r As Variant
  r = InStr(2, s, "b", vbTextCompare)
End Sub
Encoding, evidence and notes
Encoding

Encoding: FE FD (lead byte FE selects table 4), then 0 operand byte(s); total instruction length 2 byte(s).
Operands: none. All inputs come from the evaluation stack or the frame.
Observed: FEFD FnInStr4

Examples
Form1.mnuExtractURI_Click @ 0x45774C | 4577B5    FEFD                  FnInStr4
Form1.mnuExtractURI_Click @ 0x45774C | 4577E6    FEFD                  FnInStr4
Form1.mnuExtractURI_Click @ 0x45774C | 457809    FEFD                  FnInStr4

53 occurrence(s) in PDFStreamDumper.

Evidence and notes

Emitted by VB6 SP6 (P-code): yes. Minimal probe: probes\op\4_FD_FnInStr4.

Handler: 0x66106BF3, unique to this slot (real opcode #724).

Corpus: 53 occurrence(s) in PDFStreamDumper_p.exe.

Description: draft, by claude-opus-4.7. Handler 0x66106BF3, dispatch slot 0x66108108, modOpcodes line 379.

FnInStr4Var

(4,0xFE)emittedhandler #725Stringinferred_corpus110 corpus hits
String built-in: FnInStr4Var.

Pops the operand(s) needed by FnInStr4Var and pushes the result. See VB6 documentation for the exact built-in this implements (e.g. FnLenStr = Len(string), FnInStr4 = 4-argument InStr, FnCStrVar = CStr on Variant). Behavior matches the corresponding VB6 intrinsic.

When the compiler emits it

Emitted at calls to the VB6 intrinsic corresponding to FnInStr4Var.

VB6 source (verified: compiles to this slot)
Public Sub Main()
  Dim s As Variant, r As Variant
  r = InStr(2, s, "b", vbTextCompare)
End Sub
Encoding, evidence and notes
Encoding

Encoding: FE FE (lead byte FE selects table 4), then 2 operand byte(s); total instruction length 4 byte(s).
vbdec template: %a
Operands:

  1. %a: local_var_ref, 2 byte(s). signed 16-bit offset from the procedure frame pointer (EBP). Negative = local/temporary (vbdec var_XX, XX = -offset), positive = argument (arg_XX).

Observed: FEFE 3CFF FnInStr4Var var_C4

Examples
Form1.mnuUnescape_Click @ 0x45DEC4 | 45DF9D    FEFE 2CFF             FnInStr4Var var_D4
Form1.mnuUnescape_Click @ 0x45DEC4 | 45DFEF    FEFE 2CFF             FnInStr4Var var_D4
Form1.mnuUnescape_Click @ 0x45DEC4 | 45E044    FEFE 2CFF             FnInStr4Var var_D4

110 occurrence(s) in PDFStreamDumper.

Evidence and notes

Emitted by VB6 SP6 (P-code): yes. Minimal probe: probes\op\4_FE_FnInStr4Var.

Handler: 0x6610C3DB, unique to this slot (real opcode #725).

Corpus: 110 occurrence(s) in PDFStreamDumper_p.exe.

Description: draft, by claude-opus-4.7. Handler 0x6610C3DB, dispatch slot 0x6610810C, modOpcodes line 380.

FnInStrB4

(4,0xFB)emittedhandler #722Stringconfirmed_msdocs
String built-in: FnInStrB4.

Pops the operand(s) needed by FnInStrB4 and pushes the result. See VB6 documentation for the exact built-in this implements (e.g. FnLenStr = Len(string), FnInStr4 = 4-argument InStr, FnCStrVar = CStr on Variant). Behavior matches the corresponding VB6 intrinsic.

When the compiler emits it

Emitted at calls to the VB6 intrinsic corresponding to FnInStrB4.

VB6 source (verified: compiles to this slot)
Public Sub Main()
  Dim s As String, r As Variant
  r = InStrB(s, "b")
End Sub
Encoding, evidence and notes
Encoding

Encoding: FE FB (lead byte FE selects table 4), then 0 operand byte(s); total instruction length 2 byte(s).
Operands: none. All inputs come from the evaluation stack or the frame.
Observed: FEFB FnInStrB4

Evidence and notes

Emitted by VB6 SP6 (P-code): yes. Minimal probe: probes\op\4_FB_FnInStrB4.

Handler: 0x6610C3AE, unique to this slot (real opcode #722).

Description: draft, by claude-opus-4.7. Handler 0x6610C3AE, dispatch slot 0x66108100, modOpcodes line 378.

FnInStrB4Var

(4,0xFC)emittedhandler #723Stringinferred_corpus
InStrB with Variant operands; push the Variant result.

Pops the start position and the two Variant strings, performs a byte-wise search and writes the result Variant to a temporary.

When the compiler emits it

Emitted for r = InStrB(s, "b") with s As Variant.

VB6 source (verified: compiles to this slot)
Public Sub Main()
  Dim s As Variant, r As Variant
  r = InStrB(s, "b")
End Sub
Encoding, evidence and notes
Encoding

Encoding: FE FC (lead byte FE selects table 4), then 2 operand byte(s); total instruction length 4 byte(s).
No printf operands are declared, but the instruction still consumes operand bytes; see the size above and the observed bytes below. (Phase 3a: flag=0 does not mean 'no operands'.)
Observed: FEFC 3CFF FnInStrB4Var

Examples
FEFC 3CFF  FnInStrB4Var

From the Phase 4 probe (VB6 SP6, P-code).

Evidence and notes

Emitted by VB6 SP6 (P-code): yes. Minimal probe: probes\op\4_FC_FnInStrB4Var.

Handler: 0x6610C3C0, unique to this slot (real opcode #723).

Check of vb6_source_eq example: verified: compiles and emits this slot.

Example from the description
Public Sub Main()
  Dim s As Variant, r As Variant
  r = InStrB(s, "b")
End Sub

Description: draft, by claude-opus-5-5. Handler 0x6610C3C0, dispatch slot 0x66108104, modOpcodes line 381.

FnLenBStr

(1,0xEE)emittedhandler #345Stringconfirmed_msdocs1 corpus hits
String built-in: FnLenBStr.

Pops the operand(s) needed by FnLenBStr and pushes the result. See VB6 documentation for the exact built-in this implements (e.g. FnLenStr = Len(string), FnInStr4 = 4-argument InStr, FnCStrVar = CStr on Variant). Behavior matches the corresponding VB6 intrinsic.

When the compiler emits it

Emitted at calls to the VB6 intrinsic corresponding to FnLenBStr.

VB6 source (verified: compiles to this slot)
Public Sub Main()
  Dim a As String, c As Variant
  c = LenB(a)
End Sub
Encoding, evidence and notes
Encoding

Encoding: FB EE (lead byte FB selects table 1), then 0 operand byte(s); total instruction length 2 byte(s).
Operands: none. All inputs come from the evaluation stack or the frame.
Observed: FBEE FnLenBStr

Examples
modZLIB.Proc_43E804 @ 0x43E804 | 43E809    FBEE                  FnLenBStr

1 occurrence(s) in PDFStreamDumper.

Evidence and notes

Emitted by VB6 SP6 (P-code): yes. Minimal probe: probes\op\1_EE_FnLenBStr.

Handler: 0x6610C321, unique to this slot (real opcode #345).

Corpus: 1 occurrence(s) in PDFStreamDumper_p.exe.

Description: draft, by claude-opus-4.7. Handler 0x6610C321, dispatch slot 0x661074CC, modOpcodes line 364.

FnLenBVar

(1,0xED)emittedhandler #344Stringinferred_corpus
LenB() of a Variant; push the Variant result.

Pops a Variant and writes its length in bytes (or Null) to the temporary %a.

When the compiler emits it

Emitted for LenB(v) with v As Variant.

VB6 source (verified: compiles to this slot)
Public Sub Main()
  Dim a As Variant, c As Variant
  c = LenB(a)
End Sub
Encoding, evidence and notes
Encoding

Encoding: FB ED (lead byte FB selects table 1), then 2 operand byte(s); total instruction length 4 byte(s).
vbdec template: %a
Operands:

  1. %a: local_var_ref, 2 byte(s). signed 16-bit offset from the procedure frame pointer (EBP). Negative = local/temporary (vbdec var_XX, XX = -offset), positive = argument (arg_XX).

Observed: FBED 4CFF FnLenBVar var_B4

Examples
FBED 4CFF  FnLenBVar var_B4

From the Phase 4 probe (VB6 SP6, P-code).

Evidence and notes

Emitted by VB6 SP6 (P-code): yes. Minimal probe: probes\op\1_ED_FnLenBVar.

Handler: 0x6610C336, unique to this slot (real opcode #344).

Check of vb6_source_eq example: verified: compiles and emits this slot.

Example from the description
Public Sub Main()
  Dim a As Variant, c As Variant
  c = LenB(a)
End Sub

Description: draft, by claude-opus-5-5. Handler 0x6610C336, dispatch slot 0x661074C8, modOpcodes line 366.

FnLenStr

(0,0x4A)emittedprimary of 2handler #73Stringconfirmed_msdocs191 corpus hits
String built-in: FnLenStr.

Pops the operand(s) needed by FnLenStr and pushes the result. See VB6 documentation for the exact built-in this implements (e.g. FnLenStr = Len(string), FnInStr4 = 4-argument InStr, FnCStrVar = CStr on Variant). Behavior matches the corresponding VB6 intrinsic.

When the compiler emits it

Emitted at calls to the VB6 intrinsic corresponding to FnLenStr.

VB6 source (verified: compiles to this slot)
Public Sub Main()
  Dim a As String, c As Variant
  c = Len(a)
End Sub
Encoding, evidence and notes
Encoding

Encoding: 4A, then 0 operand byte(s); total instruction length 1 byte(s).
Operands: none. All inputs come from the evaluation stack or the frame.
Observed: 4A FnLenStr

Examples
Form1.mnuB64Clipboard_Click @ 0x44E37C | 44E3B0    4A                    FnLenStr
Form1.mnuB64Clipboard_Click @ 0x44E37C | 44E401    4A                    FnLenStr
Form1.mnub64decode_Click @ 0x451280 | 4512C7    4A                    FnLenStr

191 occurrence(s) in PDFStreamDumper.

Evidence and notes

Emitted by VB6 SP6 (P-code): yes. Minimal probe: probes\op\0_4A_FnLenStr.

Handler: 0x66106BC6, shared by 2 dispatch slots (real opcode #73). This is the primary slot. Other slots: (1,EC) FnLenStr.

Corpus: 191 occurrence(s) in PDFStreamDumper_p.exe.

Slots sharing this handler

(1,0xEC) FnLenStr

Description: draft, by claude-opus-4.7. Handler 0x66106BC6, dispatch slot 0x66106E3C, modOpcodes line 362.

FnLenStr

(1,0xEC)not emitteddup of (0,4A)handler #73Stringconfirmed_handler
(alias) String built-in: FnLenStr.

Alias dispatch slot (1, 0xEC) for the canonical FnLenStr at (0, 0x4A); semantics are identical.

Pops the operand(s) needed by FnLenStr and pushes the result. See VB6 documentation for the exact built-in this implements (e.g. FnLenStr = Len(string), FnInStr4 = 4-argument InStr, FnCStrVar = CStr on Variant). Behavior matches the corresponding VB6 intrinsic.

When the compiler emits it

Emitted at calls to the VB6 intrinsic corresponding to FnLenStr.

Encoding, evidence and notes
Encoding

Encoding: FB EC (lead byte FB selects table 1), then 0 operand byte(s); total instruction length 2 byte(s).
Operands: none. All inputs come from the evaluation stack or the frame.

Evidence and notes

Emitted by VB6 SP6 (P-code): not observed in about 3,070 probe programs. The slot exists in the runtime's dispatch table, but no tested source construct makes the compiler emit it.

Handler: 0x66106BC6, shared by 2 dispatch slots (real opcode #73). This is a duplicate slot of (0,4A) FnLenStr. Other slots: (0,4A) FnLenStr.

Slots sharing this handler

(0,0x4A) FnLenStr

Description: draft, by claude-opus-4.7. Handler 0x66106BC6, dispatch slot 0x661074C4, modOpcodes line 363.

FnLenVar

(1,0xEB)emittedhandler #343Stringinferred_corpus111 corpus hits
String built-in: FnLenVar.

Pops the operand(s) needed by FnLenVar and pushes the result. See VB6 documentation for the exact built-in this implements (e.g. FnLenStr = Len(string), FnInStr4 = 4-argument InStr, FnCStrVar = CStr on Variant). Behavior matches the corresponding VB6 intrinsic.

When the compiler emits it

Emitted at calls to the VB6 intrinsic corresponding to FnLenVar.

VB6 source (verified: compiles to this slot)
Public Sub Main()
  Dim a As Variant, c As Variant
  c = Len(a)
End Sub
Encoding, evidence and notes
Encoding

Encoding: FB EB (lead byte FB selects table 1), then 2 operand byte(s); total instruction length 4 byte(s).
vbdec template: %a
Operands:

  1. %a: local_var_ref, 2 byte(s). signed 16-bit offset from the procedure frame pointer (EBP). Negative = local/temporary (vbdec var_XX, XX = -offset), positive = argument (arg_XX).

Observed: FBEB 4CFF FnLenVar var_B4

Examples
Form1.mnuHelp_Event_0 @ 0x45A2C0 | 45A2FF    FBEB 50FF             FnLenVar var_B0
Form1.mnuGotoObject_Click @ 0x44D160 | 44D19D    FBEB 44FF             FnLenVar var_BC
Form1.mnuSearch_Click @ 0x46E648 | 46E75C    FBEB 4CFF             FnLenVar var_B4

111 occurrence(s) in PDFStreamDumper.

Evidence and notes

Emitted by VB6 SP6 (P-code): yes. Minimal probe: probes\op\1_EB_FnLenVar.

Handler: 0x66106BD8, unique to this slot (real opcode #343).

Corpus: 111 occurrence(s) in PDFStreamDumper_p.exe.

Description: draft, by claude-opus-4.7. Handler 0x66106BD8, dispatch slot 0x661074C0, modOpcodes line 365.

FnStrComp3

(4,0xFF)emittedhandler #726Stringconfirmed_msdocs
String built-in: FnStrComp3.

Pops the operand(s) needed by FnStrComp3 and pushes the result. See VB6 documentation for the exact built-in this implements (e.g. FnLenStr = Len(string), FnInStr4 = 4-argument InStr, FnCStrVar = CStr on Variant). Behavior matches the corresponding VB6 intrinsic.

When the compiler emits it

Emitted at calls to the VB6 intrinsic corresponding to FnStrComp3.

VB6 source (verified: compiles to this slot)
Public Sub Main()
  Dim s As String, r As Variant
  r = StrComp(s, "b")
End Sub
Encoding, evidence and notes
Encoding

Encoding: FE FF (lead byte FE selects table 4), then 0 operand byte(s); total instruction length 2 byte(s).
Operands: none. All inputs come from the evaluation stack or the frame.
Observed: FEFF FnStrComp3

Evidence and notes

Emitted by VB6 SP6 (P-code): yes. Minimal probe: probes\op\4_FF_FnStrComp3.

Handler: 0x6610C3F6, unique to this slot (real opcode #726).

Description: draft, by claude-opus-4.7. Handler 0x6610C3F6, dispatch slot 0x66108110, modOpcodes line 383.

FnStrComp3Var

(5,0x00)emittedhandler #727Stringinferred_corpus
StrComp(a, b, compare) with Variant operands; push the Variant result.

Pops the compare mode and the two Variant strings and writes -1/0/1 (or Null) to the temporary %a.

When the compiler emits it

Emitted for StrComp(v, "y", 1) with a Variant argument.

VB6 source (verified: compiles to this slot)
Public Sub Main()
  Dim a As Variant, n As Variant
  n = StrComp(a, "y", 1)
End Sub
Encoding, evidence and notes
Encoding

Encoding: FF 00 (lead byte FF selects table 5), then 2 operand byte(s); total instruction length 4 byte(s).
vbdec template: %a
Operands:

  1. %a: local_var_ref, 2 byte(s). signed 16-bit offset from the procedure frame pointer (EBP). Negative = local/temporary (vbdec var_XX, XX = -offset), positive = argument (arg_XX).

Observed: FF00 3CFF FnStrComp3Var var_C4

Examples
FF00 3CFF  FnStrComp3Var var_C4

From the Phase 4 probe (VB6 SP6, P-code).

Evidence and notes

Emitted by VB6 SP6 (P-code): yes. Minimal probe: probes\op\5_00_FnStrComp3Var.

Handler: 0x6610C408, unique to this slot (real opcode #727).

Check of vb6_source_eq example: verified: compiles and emits this slot.

Example from the description
Public Sub Main()
  Dim a As Variant, n As Variant
  n = StrComp(a, "y", 1)
End Sub

Description: draft, by claude-opus-5-5. Handler 0x6610C408, dispatch slot 0x66108114, modOpcodes line 384.

MidBStr

(2,0xBC)not emitteddup of (0,4F)handler #78Stringinferred_corpus
Same handler as (0,0x4F) MidStr: Mid statement: replace characters inside a String variable.
Encoding, evidence and notes
Encoding

Encoding: FC BC (lead byte FC selects table 2), then 2 operand byte(s); total instruction length 4 byte(s).
vbdec template: %s
Operands:

  1. %s: pool_string, 2 byte(s). 16-bit constant-pool index of a string literal (BSTR).
Evidence and notes

Emitted by VB6 SP6 (P-code): not observed in about 3,070 probe programs. The slot exists in the runtime's dispatch table, but no tested source construct makes the compiler emit it.

Handler: 0x6610C2CF, shared by 2 dispatch slots (real opcode #78). This is a duplicate slot of (0,4F) MidStr. Other slots: (0,4F) MidStr.

Slots sharing this handler

(0,0x4F) MidStr

Description: none. Handler 0x6610C2CF, dispatch slot 0x66107804, modOpcodes line 372.

MidBStrB

(2,0xBE)emittedhandler #454Stringinferred_corpus
MidB statement: replace bytes inside a String variable.

Pops the replacement, the start and the target String reference, and overwrites bytes in place. The operand is a string-pool index (the replacement literal in the probe).

When the compiler emits it

Emitted for MidB(s, 1) = "w" / MidB$(s, i, n) = x.

VB6 source (verified: compiles to this slot)
Public Sub Main()
  Dim s As String
  MidB(s, 1) = "w"
End Sub
Encoding, evidence and notes
Encoding

Encoding: FC BE (lead byte FC selects table 2), then 2 operand byte(s); total instruction length 4 byte(s).
vbdec template: %s
Operands:

  1. %s: pool_string, 2 byte(s). 16-bit constant-pool index of a string literal (BSTR).

Observed: FCBE 0000 MidBStrB str_4011EC='w'

Examples
FCBE 0000  MidBStrB str_4011EC='w'

From the Phase 4 probe (VB6 SP6, P-code).

Evidence and notes

Emitted by VB6 SP6 (P-code): yes. Minimal probe: probes\op\2_BE_MidBStrB.

Handler: 0x6610C2E7, unique to this slot (real opcode #454).

Check of vb6_source_eq example: verified: compiles and emits this slot.

Example from the description
Public Sub Main()
  Dim s As String
  MidB(s, 1) = "w"
End Sub

Description: draft, by claude-opus-5-5. Handler 0x6610C2E7, dispatch slot 0x6610780C, modOpcodes line 371.

MidBVar

(2,0xBD)emittedhandler #453Stringconfirmed_msdocs
String built-in: MidBVar.

Pops the operand(s) needed by MidBVar and pushes the result. See VB6 documentation for the exact built-in this implements (e.g. FnLenStr = Len(string), FnInStr4 = 4-argument InStr, FnCStrVar = CStr on Variant). Behavior matches the corresponding VB6 intrinsic.

When the compiler emits it

Emitted at calls to the VB6 intrinsic corresponding to MidBVar.

VB6 source (verified: compiles to this slot)
Public Sub Main()
  Dim s As Variant
  MidB(s, 1) = "w"
End Sub
Encoding, evidence and notes
Encoding

Encoding: FC BD (lead byte FC selects table 2), then 0 operand byte(s); total instruction length 2 byte(s).
Operands: none. All inputs come from the evaluation stack or the frame.
Observed: FCBD MidBVar

Evidence and notes

Emitted by VB6 SP6 (P-code): yes. Minimal probe: probes\op\2_BD_MidBVar.

Handler: 0x6610C310, unique to this slot (real opcode #453).

Description: draft, by claude-opus-4.7. Handler 0x6610C310, dispatch slot 0x66107808, modOpcodes line 370.

MidStr

(0,0x4F)emittedprimary of 2handler #78Stringinferred_corpus
Mid statement: replace characters inside a String variable.

Pops the replacement, the length (or Missing), the start and the target String reference, and overwrites characters in place without reallocating.

When the compiler emits it

Emitted for Mid$(s, i, n) = x / Mid(s, i) = x. MidBStr (2,BC) shares this handler but is not emitted.

VB6 source (verified: compiles to this slot)
Public Sub Main()
  Dim v As Variant, s As String
  Mid(s, 1, 1) = "x"
End Sub
Encoding, evidence and notes
Encoding

Encoding: 4F, then 2 operand byte(s); total instruction length 3 byte(s).
vbdec template: %s
Operands:

  1. %s: pool_string, 2 byte(s). 16-bit constant-pool index of a string literal (BSTR).

Observed: 4F 0000 MidStr str_4011EC='x'

Examples
4F 0000  MidStr str_4011EC='x'

From the Phase 4 probe (VB6 SP6, P-code).

Evidence and notes

Emitted by VB6 SP6 (P-code): yes. Minimal probe: probes\op\0_4F_MidStr.

Handler: 0x6610C2CF, shared by 2 dispatch slots (real opcode #78). This is the primary slot. Other slots: (2,BC) MidBStr.

Check of vb6_source_eq example: verified: compiles and emits this slot.

Example from the description
Public Sub Main()
  Dim v As Variant, s As String
  Mid(s, 1, 1) = "x"
End Sub
Slots sharing this handler

(2,0xBC) MidBStr

Description: draft, by claude-opus-5-5. Handler 0x6610C2CF, dispatch slot 0x66106E50, modOpcodes line 368.

MidVar

(2,0xBB)emittedhandler #452Stringconfirmed_msdocs
String built-in: MidVar.

Pops the operand(s) needed by MidVar and pushes the result. See VB6 documentation for the exact built-in this implements (e.g. FnLenStr = Len(string), FnInStr4 = 4-argument InStr, FnCStrVar = CStr on Variant). Behavior matches the corresponding VB6 intrinsic.

When the compiler emits it

Emitted at calls to the VB6 intrinsic corresponding to MidVar.

VB6 source (verified: compiles to this slot)
Public Sub Main()
  Dim s As Variant
  Mid(s, 1) = "y"
End Sub
Encoding, evidence and notes
Encoding

Encoding: FC BB (lead byte FC selects table 2), then 0 operand byte(s); total instruction length 2 byte(s).
Operands: none. All inputs come from the evaluation stack or the frame.
Observed: FCBB MidVar

Evidence and notes

Emitted by VB6 SP6 (P-code): yes. Minimal probe: probes\op\2_BB_MidVar.

Handler: 0x6610C2FF, unique to this slot (real opcode #452).

Description: draft, by claude-opus-4.7. Handler 0x6610C2FF, dispatch slot 0x66107800, modOpcodes line 369.

ThisVCall

Virtual call on This (self) object Prefix: This = current object pointer

ThisVCallAd

(0,0x12)not emittedprimary of 5handler #17Object / COMinferred_corpus
No description yet.
Encoding, evidence and notes
Encoding

Encoding: 12, then 2 operand byte(s); total instruction length 3 byte(s).
No printf operands are declared, but the instruction still consumes operand bytes; see the size above and the observed bytes below. (Phase 3a: flag=0 does not mean 'no operands'.)

Evidence and notes

Emitted by VB6 SP6 (P-code): not observed in about 3,070 probe programs. The slot exists in the runtime's dispatch table, but no tested source construct makes the compiler emit it.

Handler: 0x6610BCF2, shared by 5 dispatch slots (real opcode #17). This is the primary slot. Other slots: (4,01) ThisVCallI2, (4,02) ThisVCallI2, (4,07) ThisVCallI2, (4,08) ThisVCallI2.

Slots sharing this handler

(4,0x01) ThisVCallI2, (4,0x02) ThisVCallI2, (4,0x07) ThisVCallI2, (4,0x08) ThisVCallI2

Description: none. Handler 0x6610BCF2, dispatch slot 0x66106D5C, modOpcodes line 281.

ThisVCallCbFrame

(4,0x0D)not emittedhandler #599Object / COMinferred_corpus
No description yet.
Encoding, evidence and notes
Encoding

Encoding: FE 0D (lead byte FE selects table 4), then 4 operand byte(s); total instruction length 6 byte(s).
No printf operands are declared, but the instruction still consumes operand bytes; see the size above and the observed bytes below. (Phase 3a: flag=0 does not mean 'no operands'.)

Evidence and notes

Emitted by VB6 SP6 (P-code): not observed in about 3,070 probe programs. The slot exists in the runtime's dispatch table, but no tested source construct makes the compiler emit it.

Handler: 0x6610BBC8, unique to this slot (real opcode #599).

Description: none. Handler 0x6610BBC8, dispatch slot 0x66107D48, modOpcodes line 296.

ThisVCallCy

(4,0x05)not emittedhandler #598Object / COMinferred_corpus
No description yet.
Encoding, evidence and notes
Encoding

Encoding: FE 05 (lead byte FE selects table 4), then 2 operand byte(s); total instruction length 4 byte(s).
No printf operands are declared, but the instruction still consumes operand bytes; see the size above and the observed bytes below. (Phase 3a: flag=0 does not mean 'no operands'.)

Evidence and notes

Emitted by VB6 SP6 (P-code): not observed in about 3,070 probe programs. The slot exists in the runtime's dispatch table, but no tested source construct makes the compiler emit it.

Handler: 0x6610BC07, unique to this slot (real opcode #598).

Description: none. Handler 0x6610BC07, dispatch slot 0x66107D28, modOpcodes line 290.

ThisVCallFPR8

(0,0x11)not emittedprimary of 5handler #16Object / COMinferred_corpus
No description yet.
Encoding, evidence and notes
Encoding

Encoding: 11, then 2 operand byte(s); total instruction length 3 byte(s).
No printf operands are declared, but the instruction still consumes operand bytes; see the size above and the observed bytes below. (Phase 3a: flag=0 does not mean 'no operands'.)

Evidence and notes

Emitted by VB6 SP6 (P-code): not observed in about 3,070 probe programs. The slot exists in the runtime's dispatch table, but no tested source construct makes the compiler emit it.

Handler: 0x6610BD7C, shared by 5 dispatch slots (real opcode #16). This is the primary slot. Other slots: (4,09) ThisVCallHidden, (4,0A) ThisVCallHidden, (4,0C) ThisVCallHidden, (5,2C) ThisVCallHidden.

Slots sharing this handler

(4,0x09) ThisVCallHidden, (4,0x0A) ThisVCallHidden, (4,0x0C) ThisVCallHidden, (5,0x2C) ThisVCallHidden

Description: none. Handler 0x6610BD7C, dispatch slot 0x66106D58, modOpcodes line 280.

ThisVCallHidden

(4,0x09)not emitteddup of (0,11)handler #16Object / COMinferred_corpus
No description yet.
Encoding, evidence and notes
Encoding

Encoding: FE 09 (lead byte FE selects table 4), then 2 operand byte(s); total instruction length 4 byte(s).
No printf operands are declared, but the instruction still consumes operand bytes; see the size above and the observed bytes below. (Phase 3a: flag=0 does not mean 'no operands'.)

Evidence and notes

Emitted by VB6 SP6 (P-code): not observed in about 3,070 probe programs. The slot exists in the runtime's dispatch table, but no tested source construct makes the compiler emit it.

Handler: 0x6610BD7C, shared by 5 dispatch slots (real opcode #16). This is a duplicate slot of (0,11) ThisVCallFPR8. Other slots: (0,11) ThisVCallFPR8, (4,0A) ThisVCallHidden, (4,0C) ThisVCallHidden, (5,2C) ThisVCallHidden.

Slots sharing this handler

(0,0x11) ThisVCallFPR8, (4,0x0A) ThisVCallHidden, (4,0x0C) ThisVCallHidden, (5,0x2C) ThisVCallHidden

Description: none. Handler 0x6610BD7C, dispatch slot 0x66107D38, modOpcodes line 292.

ThisVCallHidden

(4,0x0A)not emitteddup of (0,11)handler #16Object / COMconfirmed_handler
No description yet.
Encoding, evidence and notes
Encoding

Encoding: FE 0A (lead byte FE selects table 4), then 2 operand byte(s); total instruction length 4 byte(s).
No printf operands are declared, but the instruction still consumes operand bytes; see the size above and the observed bytes below. (Phase 3a: flag=0 does not mean 'no operands'.)

Evidence and notes

Emitted by VB6 SP6 (P-code): not observed in about 3,070 probe programs. The slot exists in the runtime's dispatch table, but no tested source construct makes the compiler emit it.

Handler: 0x6610BD7C, shared by 5 dispatch slots (real opcode #16). This is a duplicate slot of (0,11) ThisVCallFPR8. Other slots: (0,11) ThisVCallFPR8, (4,09) ThisVCallHidden, (4,0C) ThisVCallHidden, (5,2C) ThisVCallHidden.

Slots sharing this handler

(0,0x11) ThisVCallFPR8, (4,0x09) ThisVCallHidden, (4,0x0C) ThisVCallHidden, (5,0x2C) ThisVCallHidden

Description: none. Handler 0x6610BD7C, dispatch slot 0x66107D3C, modOpcodes line 293.

ThisVCallHidden

(4,0x0C)not emitteddup of (0,11)handler #16Object / COMconfirmed_handler
No description yet.
Encoding, evidence and notes
Encoding

Encoding: FE 0C (lead byte FE selects table 4), then 2 operand byte(s); total instruction length 4 byte(s).
No printf operands are declared, but the instruction still consumes operand bytes; see the size above and the observed bytes below. (Phase 3a: flag=0 does not mean 'no operands'.)

Evidence and notes

Emitted by VB6 SP6 (P-code): not observed in about 3,070 probe programs. The slot exists in the runtime's dispatch table, but no tested source construct makes the compiler emit it.

Handler: 0x6610BD7C, shared by 5 dispatch slots (real opcode #16). This is a duplicate slot of (0,11) ThisVCallFPR8. Other slots: (0,11) ThisVCallFPR8, (4,09) ThisVCallHidden, (4,0A) ThisVCallHidden, (5,2C) ThisVCallHidden.

Slots sharing this handler

(0,0x11) ThisVCallFPR8, (4,0x09) ThisVCallHidden, (4,0x0A) ThisVCallHidden, (5,0x2C) ThisVCallHidden

Description: none. Handler 0x6610BD7C, dispatch slot 0x66107D44, modOpcodes line 294.

ThisVCallHidden

(5,0x2C)not emitteddup of (0,11)handler #16Object / COMconfirmed_handler
No description yet.
Encoding, evidence and notes
Encoding

Encoding: FF 2C (lead byte FF selects table 5), then 2 operand byte(s); total instruction length 4 byte(s).
No printf operands are declared, but the instruction still consumes operand bytes; see the size above and the observed bytes below. (Phase 3a: flag=0 does not mean 'no operands'.)

Evidence and notes

Emitted by VB6 SP6 (P-code): not observed in about 3,070 probe programs. The slot exists in the runtime's dispatch table, but no tested source construct makes the compiler emit it.

Handler: 0x6610BD7C, shared by 5 dispatch slots (real opcode #16). This is a duplicate slot of (0,11) ThisVCallFPR8. Other slots: (0,11) ThisVCallFPR8, (4,09) ThisVCallHidden, (4,0A) ThisVCallHidden, (4,0C) ThisVCallHidden.

Slots sharing this handler

(0,0x11) ThisVCallFPR8, (4,0x09) ThisVCallHidden, (4,0x0A) ThisVCallHidden, (4,0x0C) ThisVCallHidden

Description: none. Handler 0x6610BD7C, dispatch slot 0x661081C4, modOpcodes line 295.

ThisVCallHresult

(0,0x10)emittedprimary of 2handler #15Object / COMinferred_corpus330 corpus hits
vtable call of one of the current object's own methods, written without Me.; check the HRESULT.

Calls the method at the given vtable offset on the current instance (the procedure's this argument), without loading a receiver from the stack. A failed HRESULT raises the corresponding error.

When the compiler emits it

Emitted when code inside a class, form or control calls one of that module's own procedures unqualified (Helper, x = Fn()). An explicit Me.Helper compiles to FLdPr this + VCallHresult instead. Operands: vtable offset and constant-pool index.

VB6 source (verified: compiles to this slot)
Public Sub Main()
  Dim o As New CR2
End Sub
' ---- CR2.cls
Private Type TR
  a As Long
End Type
Private Function F() As TR
End Function
Public Sub Work()
  Dim r As TR
  r = F()
End Sub
Encoding, evidence and notes
Encoding

Encoding: 10, then 4 operand byte(s); total instruction length 5 byte(s).
vbdec template: %2 %c
Operands:

  1. %2: immediate_word, 2 byte(s). 16-bit immediate.
  2. %c: pool_proc_or_global, 2 byte(s). 16-bit constant-pool index; the pool slot holds an address (a global variable, a procedure, or an object-table entry).

Observed: 10 20000000 ThisVCallHresult CR2.Proc_401708

Examples
Form1.LoadPlugins @ 0x4644FC | 4645EA    10 60070B00           ThisVCallHresult Form1.AryIsEmpty
Form1.mnuDecompileFlash_Click @ 0x4613A8 | 4613F6    10 38070B00           ThisVCallHresult Form1.isAS3Sorcerer_Installed
Form1.mnuDecompileFlashTools_Click @ 0x45A770 | 45A77F    10 38070B00           ThisVCallHresult Form1.isAS3Sorcerer_Installed

330 occurrence(s) in PDFStreamDumper.

Evidence and notes

Emitted by VB6 SP6 (P-code): yes. Minimal probe: probes\op\0_10_ThisVCallHresult.

Handler: 0x661066CB, shared by 2 dispatch slots (real opcode #15). This is the primary slot. Other slots: (2,6A) ThisVCallHresult.

Check of vb6_source_eq example: verified: compiles and emits this slot.

Corpus: 330 occurrence(s) in PDFStreamDumper_p.exe.

Example from the description
Dim o As CThing
Set o = New CThing
o.Work
' ---- CThing.cls
Public Sub Helper()
End Sub
Public Sub Work()
  Helper
End Sub
Slots sharing this handler

(2,0x6A) ThisVCallHresult

Description: draft, by claude-opus-5-5. Handler 0x661066CB, dispatch slot 0x66106D54, modOpcodes line 278.

ThisVCallHresult

(2,0x6A)not emitteddup of (0,10)handler #15Object / COMconfirmed_handler
Same handler as (0,0x10) ThisVCallHresult: vtable call of one of the current object's own methods, written without Me.; check the HRESULT.
Encoding, evidence and notes
Encoding

Encoding: FC 6A (lead byte FC selects table 2), then 4 operand byte(s); total instruction length 6 byte(s).
vbdec template: %2 %c
Operands:

  1. %2: immediate_word, 2 byte(s). 16-bit immediate.
  2. %c: pool_proc_or_global, 2 byte(s). 16-bit constant-pool index; the pool slot holds an address (a global variable, a procedure, or an object-table entry).
Evidence and notes

Emitted by VB6 SP6 (P-code): not observed in about 3,070 probe programs. The slot exists in the runtime's dispatch table, but no tested source construct makes the compiler emit it.

Handler: 0x661066CB, shared by 2 dispatch slots (real opcode #15). This is a duplicate slot of (0,10) ThisVCallHresult. Other slots: (0,10) ThisVCallHresult.

Slots sharing this handler

(0,0x10) ThisVCallHresult

Description: none. Handler 0x661066CB, dispatch slot 0x661076BC, modOpcodes line 279.

ThisVCallI2

(4,0x01)not emitteddup of (0,12)handler #17Object / COMinferred_corpus
No description yet.
Encoding, evidence and notes
Encoding

Encoding: FE 01 (lead byte FE selects table 4), then 2 operand byte(s); total instruction length 4 byte(s).
No printf operands are declared, but the instruction still consumes operand bytes; see the size above and the observed bytes below. (Phase 3a: flag=0 does not mean 'no operands'.)

Evidence and notes

Emitted by VB6 SP6 (P-code): not observed in about 3,070 probe programs. The slot exists in the runtime's dispatch table, but no tested source construct makes the compiler emit it.

Handler: 0x6610BCF2, shared by 5 dispatch slots (real opcode #17). This is a duplicate slot of (0,12) ThisVCallAd. Other slots: (0,12) ThisVCallAd, (4,02) ThisVCallI2, (4,07) ThisVCallI2, (4,08) ThisVCallI2.

Slots sharing this handler

(0,0x12) ThisVCallAd, (4,0x02) ThisVCallI2, (4,0x07) ThisVCallI2, (4,0x08) ThisVCallI2

Description: none. Handler 0x6610BCF2, dispatch slot 0x66107D18, modOpcodes line 284.

ThisVCallI2

(4,0x02)not emitteddup of (0,12)handler #17Object / COMconfirmed_handler
No description yet.
Encoding, evidence and notes
Encoding

Encoding: FE 02 (lead byte FE selects table 4), then 2 operand byte(s); total instruction length 4 byte(s).
No printf operands are declared, but the instruction still consumes operand bytes; see the size above and the observed bytes below. (Phase 3a: flag=0 does not mean 'no operands'.)

Evidence and notes

Emitted by VB6 SP6 (P-code): not observed in about 3,070 probe programs. The slot exists in the runtime's dispatch table, but no tested source construct makes the compiler emit it.

Handler: 0x6610BCF2, shared by 5 dispatch slots (real opcode #17). This is a duplicate slot of (0,12) ThisVCallAd. Other slots: (0,12) ThisVCallAd, (4,01) ThisVCallI2, (4,07) ThisVCallI2, (4,08) ThisVCallI2.

Slots sharing this handler

(0,0x12) ThisVCallAd, (4,0x01) ThisVCallI2, (4,0x07) ThisVCallI2, (4,0x08) ThisVCallI2

Description: none. Handler 0x6610BCF2, dispatch slot 0x66107D1C, modOpcodes line 285.

ThisVCallI2

(4,0x07)not emitteddup of (0,12)handler #17Object / COMconfirmed_handler
No description yet.
Encoding, evidence and notes
Encoding

Encoding: FE 07 (lead byte FE selects table 4), then 2 operand byte(s); total instruction length 4 byte(s).
No printf operands are declared, but the instruction still consumes operand bytes; see the size above and the observed bytes below. (Phase 3a: flag=0 does not mean 'no operands'.)

Evidence and notes

Emitted by VB6 SP6 (P-code): not observed in about 3,070 probe programs. The slot exists in the runtime's dispatch table, but no tested source construct makes the compiler emit it.

Handler: 0x6610BCF2, shared by 5 dispatch slots (real opcode #17). This is a duplicate slot of (0,12) ThisVCallAd. Other slots: (0,12) ThisVCallAd, (4,01) ThisVCallI2, (4,02) ThisVCallI2, (4,08) ThisVCallI2.

Slots sharing this handler

(0,0x12) ThisVCallAd, (4,0x01) ThisVCallI2, (4,0x02) ThisVCallI2, (4,0x08) ThisVCallI2

Description: none. Handler 0x6610BCF2, dispatch slot 0x66107D30, modOpcodes line 286.

ThisVCallI2

(4,0x08)not emitteddup of (0,12)handler #17Object / COMconfirmed_handler
No description yet.
Encoding, evidence and notes
Encoding

Encoding: FE 08 (lead byte FE selects table 4), then 2 operand byte(s); total instruction length 4 byte(s).
No printf operands are declared, but the instruction still consumes operand bytes; see the size above and the observed bytes below. (Phase 3a: flag=0 does not mean 'no operands'.)

Evidence and notes

Emitted by VB6 SP6 (P-code): not observed in about 3,070 probe programs. The slot exists in the runtime's dispatch table, but no tested source construct makes the compiler emit it.

Handler: 0x6610BCF2, shared by 5 dispatch slots (real opcode #17). This is a duplicate slot of (0,12) ThisVCallAd. Other slots: (0,12) ThisVCallAd, (4,01) ThisVCallI2, (4,02) ThisVCallI2, (4,07) ThisVCallI2.

Slots sharing this handler

(0,0x12) ThisVCallAd, (4,0x01) ThisVCallI2, (4,0x02) ThisVCallI2, (4,0x07) ThisVCallI2

Description: none. Handler 0x6610BCF2, dispatch slot 0x66107D34, modOpcodes line 287.

ThisVCallR4

(4,0x03)not emittedhandler #596Object / COMinferred_corpus
No description yet.
Encoding, evidence and notes
Encoding

Encoding: FE 03 (lead byte FE selects table 4), then 2 operand byte(s); total instruction length 4 byte(s).
No printf operands are declared, but the instruction still consumes operand bytes; see the size above and the observed bytes below. (Phase 3a: flag=0 does not mean 'no operands'.)

Evidence and notes

Emitted by VB6 SP6 (P-code): not observed in about 3,070 probe programs. The slot exists in the runtime's dispatch table, but no tested source construct makes the compiler emit it.

Handler: 0x6610BC4C, unique to this slot (real opcode #596).

Description: none. Handler 0x6610BC4C, dispatch slot 0x66107D20, modOpcodes line 288.

ThisVCallR8

(4,0x04)not emittedhandler #597Object / COMinferred_corpus
No description yet.
Encoding, evidence and notes
Encoding

Encoding: FE 04 (lead byte FE selects table 4), then 2 operand byte(s); total instruction length 4 byte(s).
No printf operands are declared, but the instruction still consumes operand bytes; see the size above and the observed bytes below. (Phase 3a: flag=0 does not mean 'no operands'.)

Evidence and notes

Emitted by VB6 SP6 (P-code): not observed in about 3,070 probe programs. The slot exists in the runtime's dispatch table, but no tested source construct makes the compiler emit it.

Handler: 0x6610BC9F, unique to this slot (real opcode #597).

Description: none. Handler 0x6610BC9F, dispatch slot 0x66107D24, modOpcodes line 289.

ThisVCallUI1

(4,0x00)not emittedhandler #595Object / COMinferred_corpus
No description yet.
Encoding, evidence and notes
Encoding

Encoding: FE 00 (lead byte FE selects table 4), then 2 operand byte(s); total instruction length 4 byte(s).
No printf operands are declared, but the instruction still consumes operand bytes; see the size above and the observed bytes below. (Phase 3a: flag=0 does not mean 'no operands'.)

Evidence and notes

Emitted by VB6 SP6 (P-code): not observed in about 3,070 probe programs. The slot exists in the runtime's dispatch table, but no tested source construct makes the compiler emit it.

Handler: 0x6610BD36, unique to this slot (real opcode #595).

Description: none. Handler 0x6610BD36, dispatch slot 0x66107D14, modOpcodes line 283.

Trampoline

Lead byte trampoline (FB..FF → alt tables)

Lead0

(0,0xFB)structuralhandler #248Structuraltrampoline
No description yet.
Encoding, evidence and notes
Encoding

Encoding: FB, then 0 operand byte(s); total instruction length 1 byte(s).
Operands: none. All inputs come from the evaluation stack or the frame.

Evidence and notes

Emitted by VB6 SP6: structural slot (dispatch trampoline or invalid opcode), not an instruction the compiler generates.

Handler: 0x66106C05, unique to this slot (real opcode #248).

Description: none. Handler 0x66106C05, dispatch slot 0x66107100, modOpcodes line 1578.

Lead1

(0,0xFC)structuralhandler #249Structuraltrampoline
No description yet.
Encoding, evidence and notes
Encoding

Encoding: FC, then 0 operand byte(s); total instruction length 1 byte(s).
Operands: none. All inputs come from the evaluation stack or the frame.

Evidence and notes

Emitted by VB6 SP6: structural slot (dispatch trampoline or invalid opcode), not an instruction the compiler generates.

Handler: 0x66106C11, unique to this slot (real opcode #249).

Description: none. Handler 0x66106C11, dispatch slot 0x66107104, modOpcodes line 1579.

Lead2

(0,0xFD)structuralhandler #250Structuraltrampoline
No description yet.
Encoding, evidence and notes
Encoding

Encoding: FD, then 0 operand byte(s); total instruction length 1 byte(s).
Operands: none. All inputs come from the evaluation stack or the frame.

Evidence and notes

Emitted by VB6 SP6: structural slot (dispatch trampoline or invalid opcode), not an instruction the compiler generates.

Handler: 0x66106C1D, unique to this slot (real opcode #250).

Description: none. Handler 0x66106C1D, dispatch slot 0x66107108, modOpcodes line 1580.

Lead3

(0,0xFE)structuralhandler #251Structuraltrampoline
No description yet.
Encoding, evidence and notes
Encoding

Encoding: FE, then 0 operand byte(s); total instruction length 1 byte(s).
Operands: none. All inputs come from the evaluation stack or the frame.

Evidence and notes

Emitted by VB6 SP6: structural slot (dispatch trampoline or invalid opcode), not an instruction the compiler generates.

Handler: 0x66106C29, unique to this slot (real opcode #251).

Description: none. Handler 0x66106C29, dispatch slot 0x6610710C, modOpcodes line 1581.

Lead4

(0,0xFF)structuralhandler #252Structuraltrampoline
No description yet.
Encoding, evidence and notes
Encoding

Encoding: FF, then 0 operand byte(s); total instruction length 1 byte(s).
Operands: none. All inputs come from the evaluation stack or the frame.

Evidence and notes

Emitted by VB6 SP6: structural slot (dispatch trampoline or invalid opcode), not an instruction the compiler generates.

Handler: 0x66106C35, unique to this slot (real opcode #252).

Description: none. Handler 0x66106C35, dispatch slot 0x66107110, modOpcodes line 1582.

TypeCheck

TypeOf / VerifyObj

CheckType

(4,0x8D)emittedhandler #647Object / COMinferred_corpus
TypeOf obj Is Class: test an object reference against an interface.

Pops an object reference, calls QueryInterface for the IID from the constant pool (%z), releases any obtained pointer and pushes a Boolean result.

Stack: [..., o:Ad] -> [..., b:Bool]

When the compiler emits it

Emitted for If TypeOf o Is Collection Then with o As Object/class.

VB6 source (verified: compiles to this slot)
Public Sub Main()
  Dim a As Object, n As Long
  If TypeOf a Is Collection Then n = 1
End Sub
Encoding, evidence and notes
Encoding

Encoding: FE 8D (lead byte FE selects table 4), then 2 operand byte(s); total instruction length 4 byte(s).
vbdec template: %z
Operands:

  1. %z: guid_property_lookup, 2 byte(s). 16-bit constant-pool index of a GUID used for a type check.

Observed: FE8D 0000 CheckType Collection ;{A4C46780-499F-101B-BB78-00AA00383CBB}

Examples
FE8D 0000  CheckType Collection ;{A4C46780-499F-101B-BB78-00AA00383CBB}

From the Phase 4 probe (VB6 SP6, P-code).

Evidence and notes

Emitted by VB6 SP6 (P-code): yes. Minimal probe: probes\op\4_8D_CheckType.

Handler: 0x6610617F, unique to this slot (real opcode #647).

Check of vb6_source_eq example: verified: compiles and emits this slot.

Example from the description
Public Sub Main()
  Dim a As Object, n As Long
  If TypeOf a Is Collection Then n = 1
End Sub

Description: draft, by claude-opus-5-5. Handler 0x6610617F, dispatch slot 0x66107F48, modOpcodes line 443.

CheckTypeVar

(2,0x6F)emittedhandler #404Object / COMinferred_corpus
TypeOf v Is Class where the operand is a Variant.

Pops a Variant; if it holds an object, it performs the QueryInterface test for the IID given by the operand. Pushes a Boolean.

When the compiler emits it

Emitted for TypeOf v Is Collection with v As Variant.

VB6 source (verified: compiles to this slot)
Public Sub Main()
  Dim a As Variant, n As Long
  If TypeOf a Is Collection Then n = 1
End Sub
Encoding, evidence and notes
Encoding

Encoding: FC 6F (lead byte FC selects table 2), then 2 operand byte(s); total instruction length 4 byte(s).
No printf operands are declared, but the instruction still consumes operand bytes; see the size above and the observed bytes below. (Phase 3a: flag=0 does not mean 'no operands'.)
Observed: FC6F 0000 CheckTypeVar

Examples
FC6F 0000  CheckTypeVar

From the Phase 4 probe (VB6 SP6, P-code).

Evidence and notes

Emitted by VB6 SP6 (P-code): yes. Minimal probe: probes\op\2_6F_CheckTypeVar.

Handler: 0x6610B074, unique to this slot (real opcode #404).

Check of vb6_source_eq example: verified: compiles and emits this slot.

Example from the description
Public Sub Main()
  Dim a As Variant, n As Long
  If TypeOf a Is Collection Then n = 1
End Sub

Description: draft, by claude-opus-5-5. Handler 0x6610B074, dispatch slot 0x661076D0, modOpcodes line 444.

VerifyPVarObj

(4,0xFA)not emittedhandler #721Object / COMconfirmed_msdocs
Type check / verify (VerifyPVarObj).

Validates a runtime type assertion. HardType enforces that a Variant has a specific subtype (emitted at the entry of statically-typed receivers); VerifyVarObj ensures a Variant currently holds an Object/IDispatch.

When the compiler emits it

Emitted at receiver-type boundaries (assignment into a typed slot, ByVal narrowing).

Encoding, evidence and notes
Encoding

Encoding: FE FA (lead byte FE selects table 4), then 0 operand byte(s); total instruction length 2 byte(s).
Operands: none. All inputs come from the evaluation stack or the frame.

Evidence and notes

Emitted by VB6 SP6 (P-code): not observed in about 3,070 probe programs. The slot exists in the runtime's dispatch table, but no tested source construct makes the compiler emit it.

Handler: 0x66109DF8, unique to this slot (real opcode #721).

Description: draft, by claude-opus-4.7. Handler 0x66109DF8, dispatch slot 0x661080FC, modOpcodes line 457.

VerifyVarObj

(4,0xF9)emittedhandler #720Object / COMconfirmed_msdocs13 corpus hits
Type check / verify (VerifyVarObj).

Validates a runtime type assertion. HardType enforces that a Variant has a specific subtype (emitted at the entry of statically-typed receivers); VerifyVarObj ensures a Variant currently holds an Object/IDispatch.

When the compiler emits it

Emitted at receiver-type boundaries (assignment into a typed slot, ByVal narrowing).

VB6 source (verified: compiles to this slot)
' references probes\_tlb\probetlb.tlb
Public Sub Main()
  Dim o As DOnly, c As Object
  Set o.Obj = c
End Sub
Encoding, evidence and notes
Encoding

Encoding: FE F9 (lead byte FE selects table 4), then 0 operand byte(s); total instruction length 2 byte(s).
Operands: none. All inputs come from the evaluation stack or the frame.
Observed: FEF9 VerifyVarObj

Examples
Form1.mnuSearchFilter_Event_0 @ 0x473E0C | 4741C0    FEF9                  VerifyVarObj
Form1.mnuSearchFilter_Event_0 @ 0x473E0C | 474493    FEF9                  VerifyVarObj
Form1.parser_NewStream @ 0x472690 | 472A16    FEF9                  VerifyVarObj

13 occurrence(s) in PDFStreamDumper.

Evidence and notes

Emitted by VB6 SP6 (P-code): yes. Minimal probe: probes\op\4_F9_VerifyVarObj.

Handler: 0x6610570C, unique to this slot (real opcode #720).

Corpus: 13 occurrence(s) in PDFStreamDumper_p.exe.

Description: draft, by claude-opus-4.7. Handler 0x6610570C, dispatch slot 0x661080F8, modOpcodes line 456.

VCall

Virtual COM call via vtable offset Prefix: V = virtual; receiver from stack

VCallAd

(0,0x0F)emittedprimary of 5handler #14Object / COMcontextual1335 corpus hits
vtable call returning a 32-bit value in EAX (non-HRESULT method); push the result.

Calls a method through the vtable at the byte offset in the operand and pushes the value returned in EAX.

Operand (16-bit): vtable byte offset (vbdec shows var.ID_n).

When the compiler emits it

Probe (typelib ITyped): non-HRESULT methods returning Integer, Long, Boolean or String all compile to this slot. It is also used for VB intrinsic-object calls that return pointers. The typed VCallI2/VCallStr slots, which share this handler, are never emitted.

VB6 source (verified: compiles to this slot)
' references probes\_tlb\probetlb.tlb
Public Sub Main()
  Dim o As ITyped, b As Boolean, v As Variant
  If o.GetBool(4) = b Then b = o.GetBool(5)
End Sub
Encoding, evidence and notes
Encoding

Encoding: 0F, then 2 operand byte(s); total instruction length 3 byte(s).
No printf operands are declared, but the instruction still consumes operand bytes; see the size above and the observed bytes below. (Phase 3a: flag=0 does not mean 'no operands'.)
Observed: 0F 2800 VCallAd var_88.ID_0

Examples
0F 2800  VCallAd var_88.ID_0

From the Phase 4 probe (VB6 SP6, P-code).

Evidence and notes

Emitted by VB6 SP6 (P-code): yes. Minimal probe: probes\op\0_0F_VCallAd.

Handler: 0x66106788, shared by 5 dispatch slots (real opcode #14). This is the primary slot. Other slots: (4,11) VCallStr, (4,12) VCallStr, (4,17) VCallStr, (4,18) VCallStr.

Finding: Probe (typelib ITyped): non-HRESULT vtable calls returning Integer, Long, Boolean or String all compile to this slot (return value taken from EAX). The typed VCallI2/VCallStr/... slots were never emitted.

Check of vb6_source_eq example: verified: compiles and emits this slot.

Corpus: 1335 occurrence(s) in PDFStreamDumper_p.exe.

Example from the description
' references probes\_tlb\probetlb.tlb
Public Sub Main()
  Dim o As ITyped, b As Boolean, v As Variant
  If o.GetBool(4) = b Then b = o.GetBool(5)
End Sub
Slots sharing this handler

(4,0x11) VCallStr, (4,0x12) VCallStr, (4,0x17) VCallStr, (4,0x18) VCallStr

Description: draft, by claude-opus-5-5. Handler 0x66106788, dispatch slot 0x66106D50, modOpcodes line 267.

VCallCbFrame

(4,0x1D)not emittedhandler #605Object / COMinferred_corpus
No description yet.
Encoding, evidence and notes
Encoding

Encoding: FE 1D (lead byte FE selects table 4), then 4 operand byte(s); total instruction length 6 byte(s).
No printf operands are declared, but the instruction still consumes operand bytes; see the size above and the observed bytes below. (Phase 3a: flag=0 does not mean 'no operands'.)

Evidence and notes

Emitted by VB6 SP6 (P-code): not observed in about 3,070 probe programs. The slot exists in the runtime's dispatch table, but no tested source construct makes the compiler emit it.

Handler: 0x6610BE20, unique to this slot (real opcode #605).

Description: none. Handler 0x6610BE20, dispatch slot 0x66107D88, modOpcodes line 276.

VCallCy

(4,0x15)not emittedhandler #604Object / COMinferred_corpus
No description yet.
Encoding, evidence and notes
Encoding

Encoding: FE 15 (lead byte FE selects table 4), then 2 operand byte(s); total instruction length 4 byte(s).
No printf operands are declared, but the instruction still consumes operand bytes; see the size above and the observed bytes below. (Phase 3a: flag=0 does not mean 'no operands'.)

Evidence and notes

Emitted by VB6 SP6 (P-code): not observed in about 3,070 probe programs. The slot exists in the runtime's dispatch table, but no tested source construct makes the compiler emit it.

Handler: 0x6610BE28, unique to this slot (real opcode #604).

Description: none. Handler 0x6610BE28, dispatch slot 0x66107D68, modOpcodes line 275.

VCallFPR8

(0,0x0E)emittedprimary of 5handler #13Object / COMcontextual7 corpus hits
vtable call whose return value comes back on the FPU (Single/Double), or whose result is discarded.

Calls a method through the vtable at the byte offset given by the operand (on the object pointer pushed before it).

Operand (16-bit): vtable byte offset.

When the compiler emits it

Probe (typelib ITyped): emitted for non-HRESULT methods returning Single/Double, and for typed calls whose result is discarded. Also seen for ErrObject.Clear. The second slot (5,2B) is used for Currency returns.

VB6 source (verified: compiles to this slot)
Public Sub Main()
  Dim e As ErrObject, n As Long
  e.Clear
End Sub
Encoding, evidence and notes
Encoding

Encoding: 0E, then 2 operand byte(s); total instruction length 3 byte(s).
No printf operands are declared, but the instruction still consumes operand bytes; see the size above and the observed bytes below. (Phase 3a: flag=0 does not mean 'no operands'.)
Observed: 0E 4800 VCallFPR8

Examples
0E 4800  VCallFPR8

From the Phase 4 probe (VB6 SP6, P-code).

Evidence and notes

Emitted by VB6 SP6 (P-code): yes. Minimal probe: probes\op\0_0E_VCallFPR8.

Handler: 0x66106761, shared by 5 dispatch slots (real opcode #13). This is the primary slot. Other slots: (4,19) VCallFPR8, (4,1A) VCallFPR8, (4,1C) VCallFPR8, (5,2B) VCallFPR8.

Compile-time slot selection: the compiler picks different slots of this handler for different source types:

  • (0,0E): Dim e As ErrObject, n As Long : e.Clear
  • (5,2B): Dim o As ITyped, b As Currency, v As Variant : If o.GetCy(4) = b Then b = o.GetCy(5)

Finding: Probe (typelib ITyped): emitted for vtable calls returning Single or Double directly (non-HRESULT), and also for typed calls whose result is discarded (o.GetI2 3). Currency returns use the (5,2B) slot.

Check of vb6_source_eq example: verified: compiles and emits this slot.

Corpus: 7 occurrence(s) in PDFStreamDumper_p.exe.

Example from the description
Public Sub Main()
  Dim e As ErrObject, n As Long
  e.Clear
End Sub
Slots sharing this handler

(4,0x19) VCallFPR8, (4,0x1A) VCallFPR8, (4,0x1C) VCallFPR8, (5,0x2B) VCallFPR8

Description: draft, by claude-opus-5-5. Handler 0x66106761, dispatch slot 0x66106D4C, modOpcodes line 262.

VCallFPR8

(4,0x19)not emitteddup of (0,0E)handler #13Object / COMconfirmed_handler
Same handler as (0,0x0E) VCallFPR8: vtable call whose return value comes back on the FPU (Single/Double), or whose result is discarded.
Encoding, evidence and notes
Encoding

Encoding: FE 19 (lead byte FE selects table 4), then 2 operand byte(s); total instruction length 4 byte(s).
No printf operands are declared, but the instruction still consumes operand bytes; see the size above and the observed bytes below. (Phase 3a: flag=0 does not mean 'no operands'.)

Evidence and notes

Emitted by VB6 SP6 (P-code): not observed in about 3,070 probe programs. The slot exists in the runtime's dispatch table, but no tested source construct makes the compiler emit it.

Handler: 0x66106761, shared by 5 dispatch slots (real opcode #13). This is a duplicate slot of (0,0E) VCallFPR8. Other slots: (0,0E) VCallFPR8, (4,1A) VCallFPR8, (4,1C) VCallFPR8, (5,2B) VCallFPR8.

Compile-time slot selection: the compiler picks different slots of this handler for different source types:

  • (0,0E): Dim e As ErrObject, n As Long : e.Clear
  • (5,2B): Dim o As ITyped, b As Currency, v As Variant : If o.GetCy(4) = b Then b = o.GetCy(5)
Slots sharing this handler

(0,0x0E) VCallFPR8, (4,0x1A) VCallFPR8, (4,0x1C) VCallFPR8, (5,0x2B) VCallFPR8

Description: none. Handler 0x66106761, dispatch slot 0x66107D78, modOpcodes line 263.

VCallFPR8

(4,0x1A)not emitteddup of (0,0E)handler #13Object / COMconfirmed_handler
Same handler as (0,0x0E) VCallFPR8: vtable call whose return value comes back on the FPU (Single/Double), or whose result is discarded.
Encoding, evidence and notes
Encoding

Encoding: FE 1A (lead byte FE selects table 4), then 2 operand byte(s); total instruction length 4 byte(s).
No printf operands are declared, but the instruction still consumes operand bytes; see the size above and the observed bytes below. (Phase 3a: flag=0 does not mean 'no operands'.)

Evidence and notes

Emitted by VB6 SP6 (P-code): not observed in about 3,070 probe programs. The slot exists in the runtime's dispatch table, but no tested source construct makes the compiler emit it.

Handler: 0x66106761, shared by 5 dispatch slots (real opcode #13). This is a duplicate slot of (0,0E) VCallFPR8. Other slots: (0,0E) VCallFPR8, (4,19) VCallFPR8, (4,1C) VCallFPR8, (5,2B) VCallFPR8.

Compile-time slot selection: the compiler picks different slots of this handler for different source types:

  • (0,0E): Dim e As ErrObject, n As Long : e.Clear
  • (5,2B): Dim o As ITyped, b As Currency, v As Variant : If o.GetCy(4) = b Then b = o.GetCy(5)
Slots sharing this handler

(0,0x0E) VCallFPR8, (4,0x19) VCallFPR8, (4,0x1C) VCallFPR8, (5,0x2B) VCallFPR8

Description: none. Handler 0x66106761, dispatch slot 0x66107D7C, modOpcodes line 264.

VCallFPR8

(4,0x1C)not emitteddup of (0,0E)handler #13Object / COMconfirmed_handler
Same handler as (0,0x0E) VCallFPR8: vtable call whose return value comes back on the FPU (Single/Double), or whose result is discarded.
Encoding, evidence and notes
Encoding

Encoding: FE 1C (lead byte FE selects table 4), then 2 operand byte(s); total instruction length 4 byte(s).
No printf operands are declared, but the instruction still consumes operand bytes; see the size above and the observed bytes below. (Phase 3a: flag=0 does not mean 'no operands'.)

Evidence and notes

Emitted by VB6 SP6 (P-code): not observed in about 3,070 probe programs. The slot exists in the runtime's dispatch table, but no tested source construct makes the compiler emit it.

Handler: 0x66106761, shared by 5 dispatch slots (real opcode #13). This is a duplicate slot of (0,0E) VCallFPR8. Other slots: (0,0E) VCallFPR8, (4,19) VCallFPR8, (4,1A) VCallFPR8, (5,2B) VCallFPR8.

Compile-time slot selection: the compiler picks different slots of this handler for different source types:

  • (0,0E): Dim e As ErrObject, n As Long : e.Clear
  • (5,2B): Dim o As ITyped, b As Currency, v As Variant : If o.GetCy(4) = b Then b = o.GetCy(5)
Slots sharing this handler

(0,0x0E) VCallFPR8, (4,0x19) VCallFPR8, (4,0x1A) VCallFPR8, (5,0x2B) VCallFPR8

Description: none. Handler 0x66106761, dispatch slot 0x66107D84, modOpcodes line 265.

VCallFPR8

(5,0x2B)emitteddup of (0,0E)handler #13Object / COMconfirmed_handler
vtable call whose return value comes back on the FPU (Single/Double), or whose result is discarded.

Calls a method through the vtable at the byte offset given by the operand (on the object pointer pushed before it).

Operand (16-bit): vtable byte offset.

When the compiler emits it

Probe (typelib ITyped): emitted for non-HRESULT methods returning Single/Double, and for typed calls whose result is discarded. Also seen for ErrObject.Clear. The second slot (5,2B) is used for Currency returns.

VB6 source (verified: compiles to this slot)
' references probes\_tlb\probetlb.tlb
Public Sub Main()
  Dim o As ITyped, b As Currency, v As Variant
  If o.GetCy(4) = b Then b = o.GetCy(5)
End Sub
Encoding, evidence and notes
Encoding

Encoding: FF 2B (lead byte FF selects table 5), then 2 operand byte(s); total instruction length 4 byte(s).
No printf operands are declared, but the instruction still consumes operand bytes; see the size above and the observed bytes below. (Phase 3a: flag=0 does not mean 'no operands'.)
Observed: FF2B 2000 VCallFPR8

Examples
FF2B 2000  VCallFPR8

From the Phase 4 probe (VB6 SP6, P-code).

Evidence and notes

Emitted by VB6 SP6 (P-code): yes. Minimal probe: probes\op\5_2B_VCallFPR8.

Handler: 0x66106761, shared by 5 dispatch slots (real opcode #13). This is a duplicate slot of (0,0E) VCallFPR8. Other slots: (0,0E) VCallFPR8, (4,19) VCallFPR8, (4,1A) VCallFPR8, (4,1C) VCallFPR8.

Compile-time slot selection: the compiler picks different slots of this handler for different source types:

  • (0,0E): Dim e As ErrObject, n As Long : e.Clear
  • (5,2B): Dim o As ITyped, b As Currency, v As Variant : If o.GetCy(4) = b Then b = o.GetCy(5)

Finding: Probe: emitted for a non-HRESULT vtable call returning Currency (ITyped.GetCy). Same handler as (0,0E).

Check of vb6_source_eq example: verified: compiles and emits this slot.

Example from the description
' references probes\_tlb\probetlb.tlb
Public Sub Main()
  Dim o As ITyped, b As Currency, v As Variant
  If o.GetCy(4) = b Then b = o.GetCy(5)
End Sub
Slots sharing this handler

(0,0x0E) VCallFPR8, (4,0x19) VCallFPR8, (4,0x1A) VCallFPR8, (4,0x1C) VCallFPR8

Description: draft, by claude-opus-5-5. Handler 0x66106761, dispatch slot 0x661081C0, modOpcodes line 266.

VCallHresult

(0,0x0D)emittedprimary of 2handler #12Object / COMinferred_corpus2124 corpus hits
vtable call of an early-bound COM method or property; check the HRESULT.

Performs a virtual call through an object's vtable. The 5-byte operand %v is a packed pair: a 2-byte vtable offset (the slot relative to the object's vtable start) and a 2-byte const-pool index used for the interface IID. The runtime issues QueryInterface for that IID first if the cached this pointer isn't already the requested interface.

Stack: [..., this:Pr, arg1, ..., argN] -> [..., result]

The receiver and pushed arguments are passed via stdcall to the resolved function pointer. Return is an HRESULT; on failure (FAILED(hr)) the runtime maps the HRESULT to a VB6 error number and raises (entering the active On Error handler).

VCallHresult is the standard form for Sub-style calls, Let-style property puts, and Set-style property accesses on typed COM/class references. Siblings: VCallAd returns an address (property-get by-reference), VCallFPR8 returns a Double via the FPU, ThisVCallHresult is the same opcode but with the receiver supplied implicitly from FLdPrThis.

When the compiler emits it

Emitted for method and property calls on variables typed as a specific class or interface (VB classes, Collection, typelib interfaces). The %v operand gives the vtable offset and the interface. Late-bound Object calls use LateMem*/LateId* instead.

VB6 source (verified: compiles to this slot)
Private Type TR
  c As Collection
End Type
Dim gr As TR

Public Sub Main()
  Dim n As Long
  n = gr.c.Count
End Sub
Encoding, evidence and notes
Encoding

Encoding: 0D, then 4 operand byte(s); total instruction length 5 byte(s).
vbdec template: %v
Operands:

  1. %v: vtable_call, 4 byte(s). 16-bit vtable byte offset followed by a 16-bit constant-pool index of the interface (IID) the call goes through.

Observed: 0D 24000000 VCallHresult Collection.Count()

Examples
Form1.LoadPlugins @ 0x4644FC | 464511    0D 14000300           VCallHresult VBGlobal Get App
Form1.LoadPlugins @ 0x4644FC | 464519    0D 50000400           VCallHresult _App Get Path
Form1.LoadPlugins @ 0x4644FC | 464571    0D 28000800           VCallHresult ListItems.Add([ByRef Index As Variant], [ByRef Key As Variant], [ByRef Text As Variant], [ByRef Icon As Variant], [ByRef SmallIcon As Variant]) As IListItem

2124 occurrence(s) in PDFStreamDumper.

Evidence and notes

Emitted by VB6 SP6 (P-code): yes. Minimal probe: probes\op\0_0D_VCallHresult.

Handler: 0x661066FA, shared by 2 dispatch slots (real opcode #12). This is the primary slot. Other slots: (2,69) VCallHresult.

Check of vb6_source_eq example: verified: compiles and emits this slot.

Corpus: 2124 occurrence(s) in PDFStreamDumper_p.exe.

Example from the description
Dim c As Collection, n As Long
Set c = New Collection
n = c.Count
Slots sharing this handler

(2,0x69) VCallHresult

Description: draft, by claude-opus-5-5. Handler 0x661066FA, dispatch slot 0x66106D48, modOpcodes line 259.

VCallHresult

(2,0x69)not emitteddup of (0,0D)handler #12Object / COMconfirmed_handler
Same handler as (0,0x0D) VCallHresult: vtable call of an early-bound COM method or property; check the HRESULT.
Encoding, evidence and notes
Encoding

Encoding: FC 69 (lead byte FC selects table 2), then 4 operand byte(s); total instruction length 6 byte(s).
vbdec template: %v
Operands:

  1. %v: vtable_call, 4 byte(s). 16-bit vtable byte offset followed by a 16-bit constant-pool index of the interface (IID) the call goes through.
Evidence and notes

Emitted by VB6 SP6 (P-code): not observed in about 3,070 probe programs. The slot exists in the runtime's dispatch table, but no tested source construct makes the compiler emit it.

Handler: 0x661066FA, shared by 2 dispatch slots (real opcode #12). This is a duplicate slot of (0,0D) VCallHresult. Other slots: (0,0D) VCallHresult.

Slots sharing this handler

(0,0x0D) VCallHresult

Description: none. Handler 0x661066FA, dispatch slot 0x661076B8, modOpcodes line 260.

VCallR4

(4,0x13)not emittedhandler #602Object / COMinferred_corpus
No description yet.
Encoding, evidence and notes
Encoding

Encoding: FE 13 (lead byte FE selects table 4), then 2 operand byte(s); total instruction length 4 byte(s).
No printf operands are declared, but the instruction still consumes operand bytes; see the size above and the observed bytes below. (Phase 3a: flag=0 does not mean 'no operands'.)

Evidence and notes

Emitted by VB6 SP6 (P-code): not observed in about 3,070 probe programs. The slot exists in the runtime's dispatch table, but no tested source construct makes the compiler emit it.

Handler: 0x6610BE30, unique to this slot (real opcode #602).

Description: none. Handler 0x6610BE30, dispatch slot 0x66107D60, modOpcodes line 273.

VCallR8

(4,0x14)not emittedhandler #603Object / COMinferred_corpus
No description yet.
Encoding, evidence and notes
Encoding

Encoding: FE 14 (lead byte FE selects table 4), then 2 operand byte(s); total instruction length 4 byte(s).
No printf operands are declared, but the instruction still consumes operand bytes; see the size above and the observed bytes below. (Phase 3a: flag=0 does not mean 'no operands'.)

Evidence and notes

Emitted by VB6 SP6 (P-code): not observed in about 3,070 probe programs. The slot exists in the runtime's dispatch table, but no tested source construct makes the compiler emit it.

Handler: 0x6610BE38, unique to this slot (real opcode #603).

Description: none. Handler 0x6610BE38, dispatch slot 0x66107D64, modOpcodes line 274.

VCallStr

(4,0x11)not emitteddup of (0,0F)handler #14Object / COMinferred_corpus
Same handler as (0,0x0F) VCallAd: vtable call returning a 32-bit value in EAX (non-HRESULT method); push the result.
Encoding, evidence and notes
Encoding

Encoding: FE 11 (lead byte FE selects table 4), then 2 operand byte(s); total instruction length 4 byte(s).
No printf operands are declared, but the instruction still consumes operand bytes; see the size above and the observed bytes below. (Phase 3a: flag=0 does not mean 'no operands'.)

Evidence and notes

Emitted by VB6 SP6 (P-code): not observed in about 3,070 probe programs. The slot exists in the runtime's dispatch table, but no tested source construct makes the compiler emit it.

Handler: 0x66106788, shared by 5 dispatch slots (real opcode #14). This is a duplicate slot of (0,0F) VCallAd. Other slots: (0,0F) VCallAd, (4,12) VCallStr, (4,17) VCallStr, (4,18) VCallStr.

Slots sharing this handler

(0,0x0F) VCallAd, (4,0x12) VCallStr, (4,0x17) VCallStr, (4,0x18) VCallStr

Description: none. Handler 0x66106788, dispatch slot 0x66107D58, modOpcodes line 269.

VCallStr

(4,0x12)not emitteddup of (0,0F)handler #14Object / COMconfirmed_handler
Same handler as (0,0x0F) VCallAd: vtable call returning a 32-bit value in EAX (non-HRESULT method); push the result.
Encoding, evidence and notes
Encoding

Encoding: FE 12 (lead byte FE selects table 4), then 2 operand byte(s); total instruction length 4 byte(s).
No printf operands are declared, but the instruction still consumes operand bytes; see the size above and the observed bytes below. (Phase 3a: flag=0 does not mean 'no operands'.)

Evidence and notes

Emitted by VB6 SP6 (P-code): not observed in about 3,070 probe programs. The slot exists in the runtime's dispatch table, but no tested source construct makes the compiler emit it.

Handler: 0x66106788, shared by 5 dispatch slots (real opcode #14). This is a duplicate slot of (0,0F) VCallAd. Other slots: (0,0F) VCallAd, (4,11) VCallStr, (4,17) VCallStr, (4,18) VCallStr.

Slots sharing this handler

(0,0x0F) VCallAd, (4,0x11) VCallStr, (4,0x17) VCallStr, (4,0x18) VCallStr

Description: none. Handler 0x66106788, dispatch slot 0x66107D5C, modOpcodes line 270.

VCallStr

(4,0x17)not emitteddup of (0,0F)handler #14Object / COMconfirmed_handler
Same handler as (0,0x0F) VCallAd: vtable call returning a 32-bit value in EAX (non-HRESULT method); push the result.
Encoding, evidence and notes
Encoding

Encoding: FE 17 (lead byte FE selects table 4), then 2 operand byte(s); total instruction length 4 byte(s).
No printf operands are declared, but the instruction still consumes operand bytes; see the size above and the observed bytes below. (Phase 3a: flag=0 does not mean 'no operands'.)

Evidence and notes

Emitted by VB6 SP6 (P-code): not observed in about 3,070 probe programs. The slot exists in the runtime's dispatch table, but no tested source construct makes the compiler emit it.

Handler: 0x66106788, shared by 5 dispatch slots (real opcode #14). This is a duplicate slot of (0,0F) VCallAd. Other slots: (0,0F) VCallAd, (4,11) VCallStr, (4,12) VCallStr, (4,18) VCallStr.

Slots sharing this handler

(0,0x0F) VCallAd, (4,0x11) VCallStr, (4,0x12) VCallStr, (4,0x18) VCallStr

Description: none. Handler 0x66106788, dispatch slot 0x66107D70, modOpcodes line 271.

VCallStr

(4,0x18)not emitteddup of (0,0F)handler #14Object / COMconfirmed_handler
Same handler as (0,0x0F) VCallAd: vtable call returning a 32-bit value in EAX (non-HRESULT method); push the result.
Encoding, evidence and notes
Encoding

Encoding: FE 18 (lead byte FE selects table 4), then 2 operand byte(s); total instruction length 4 byte(s).
No printf operands are declared, but the instruction still consumes operand bytes; see the size above and the observed bytes below. (Phase 3a: flag=0 does not mean 'no operands'.)

Evidence and notes

Emitted by VB6 SP6 (P-code): not observed in about 3,070 probe programs. The slot exists in the runtime's dispatch table, but no tested source construct makes the compiler emit it.

Handler: 0x66106788, shared by 5 dispatch slots (real opcode #14). This is a duplicate slot of (0,0F) VCallAd. Other slots: (0,0F) VCallAd, (4,11) VCallStr, (4,12) VCallStr, (4,17) VCallStr.

Slots sharing this handler

(0,0x0F) VCallAd, (4,0x11) VCallStr, (4,0x12) VCallStr, (4,0x17) VCallStr

Description: none. Handler 0x66106788, dispatch slot 0x66107D74, modOpcodes line 272.

VCallUI1

(4,0x10)emittedhandler #601Object / COMinferred_corpus
vtable call returning a Byte in AL (non-HRESULT method); push the result.

Calls a method through the vtable at the byte offset in the operand and pushes the Byte returned in AL.

Operand (16-bit): vtable byte offset.

When the compiler emits it

Probe: emitted for a non-HRESULT typelib method declared unsigned char (ITyped.GetUI1).

VB6 source (verified: compiles to this slot)
' references probes\_tlb\probetlb.tlb
Public Sub Main()
  Dim o As ITyped, b As Byte, v As Variant
  If o.GetUI1(4) = b Then b = o.GetUI1(5)
End Sub
Encoding, evidence and notes
Encoding

Encoding: FE 10 (lead byte FE selects table 4), then 2 operand byte(s); total instruction length 4 byte(s).
No printf operands are declared, but the instruction still consumes operand bytes; see the size above and the observed bytes below. (Phase 3a: flag=0 does not mean 'no operands'.)
Observed: FE10 0C00 VCallUI1

Examples
FE10 0C00  VCallUI1

From the Phase 4 probe (VB6 SP6, P-code).

Evidence and notes

Emitted by VB6 SP6 (P-code): yes. Minimal probe: probes\op\4_10_VCallUI1.

Handler: 0x6610BE40, unique to this slot (real opcode #601).

Finding: Probe: the only typed-return VCall slot besides VCallAd/VCallFPR8 that the compiler emits. Used for a non-HRESULT vtable call returning Byte.

Check of vb6_source_eq example: verified: compiles and emits this slot.

Example from the description
' references probes\_tlb\probetlb.tlb
Public Sub Main()
  Dim o As ITyped, b As Byte, v As Variant
  If o.GetUI1(4) = b Then b = o.GetUI1(5)
End Sub

Description: draft, by claude-opus-5-5. Handler 0x6610BE40, dispatch slot 0x66107D54, modOpcodes line 268.

VarLateMem

Late-bound member on variant receiver Prefix: Receiver is variant

VarLateMemCallLdRfVar

(5,0x3E)emittedhandler #770Object / COMinferred_corpus3 corpus hits
Late-bound method call with arguments on a Variant-held object; result passed on by reference.

Resolves the name, invokes the method with args:%2 arguments and pushes the address of the result temporary %a.

When the compiler emits it

Emitted for P v.F(1), where a Variant receiver's method result with arguments is passed ByRef. Operands: result temporary, member name, argument count.

VB6 source (verified: compiles to this slot)
Public Sub Main()
  Dim v As Variant
  P v.Y(1)
End Sub

Sub P(x As Variant)
End Sub
Sub Q(ByRef x As Long)
End Sub
Encoding, evidence and notes
Encoding

Encoding: FF 3E (lead byte FF selects table 5), then 6 operand byte(s); total instruction length 8 byte(s).
vbdec template: %a %s args:%2
Operands:

  1. %a: local_var_ref, 2 byte(s). signed 16-bit offset from the procedure frame pointer (EBP). Negative = local/temporary (vbdec var_XX, XX = -offset), positive = argument (arg_XX).
  2. %s: pool_string, 2 byte(s). 16-bit constant-pool index of a string literal (BSTR).
  3. %2 (args): immediate_word, 2 byte(s). 16-bit immediate.

Observed: FF3E 3CFF00000100 VarLateMemCallLdRfVar var_C4 str_40120C='Y' args:0x1

Examples
frmReplace.Form_Resize @ 0x449E94 | 449F19    FF3E 48FF1C000100     VarLateMemCallLdRfVar var_B8 str_4271F8='ColumnHeaders'  args:0x1
frmReplace.Form_Resize @ 0x449E94 | 449F3E    FF3E A8FE1C000100     VarLateMemCallLdRfVar var_158 str_4271F8='ColumnHeaders'  args:0x1
frmInlineDecoderCalls.mnuCopyList_Click @ 0x449948 | 449978    FF3E 54FF3F000100     VarLateMemCallLdRfVar var_AC str_42E35C='SubItems'  args:0x1

3 occurrence(s) in PDFStreamDumper.

Evidence and notes

Emitted by VB6 SP6 (P-code): yes. Minimal probe: probes\op\5_3E_VarLateMemCallLdRfVar.

Handler: 0x6610A91B, unique to this slot (real opcode #770).

Check of vb6_source_eq example: verified: compiles and emits this slot.

Corpus: 3 occurrence(s) in PDFStreamDumper_p.exe.

Example from the description
Sub P(x As Variant)
End Sub
Sub Main()
  Dim v As Variant
  P v.Y(1)
End Sub

Description: draft, by claude-opus-5-5. Handler 0x6610A91B, dispatch slot 0x6610820C, modOpcodes line 354.

VarLateMemCallLdVar

(5,0x42)emittedhandler #772Object / COMinferred_corpus
Late-bound function call by name on an object held in a Variant; push the result.

The receiver is a Variant (VT_DISPATCH) rather than an Object variable. Resolves the name, invokes the method and stores the result in a temporary. Operands: temporary slot, member-name index, argument count.

When the compiler emits it

Emitted for w = v.DoIt(1) with v As Variant.

VB6 source (verified: compiles to this slot)
Public Sub Main()
  Dim v As Variant, w As Variant, n As Long
  w = v.DoIt(1)
End Sub

Sub P(x As Variant)
End Sub
Encoding, evidence and notes
Encoding

Encoding: FF 42 (lead byte FF selects table 5), then 6 operand byte(s); total instruction length 8 byte(s).
No printf operands are declared, but the instruction still consumes operand bytes; see the size above and the observed bytes below. (Phase 3a: flag=0 does not mean 'no operands'.)
Observed: FF42 28FF00000100 VarLateMemCallLdVar

Examples
FF42 28FF00000100  VarLateMemCallLdVar

From the Phase 4 probe (VB6 SP6, P-code).

Evidence and notes

Emitted by VB6 SP6 (P-code): yes. Minimal probe: probes\op\5_42_VarLateMemCallLdVar.

Handler: 0x6610A935, unique to this slot (real opcode #772).

Check of vb6_source_eq example: verified: compiles and emits this slot.

Example from the description
Public Sub Main()
  Dim v As Variant, w As Variant, n As Long
  w = v.DoIt(1)
End Sub

Sub P(x As Variant)
End Sub

Description: draft, by claude-opus-5-5. Handler 0x6610A935, dispatch slot 0x6610821C, modOpcodes line 353.

VarLateMemCallSt

(5,0x44)emittedhandler #774Object / COMinferred_corpus
Late-bound indexed property-put by name on an object held in a Variant.

As LateMemCallSt, with a Variant receiver.

When the compiler emits it

Emitted for v.Prop(1) = 2 with v As Variant.

VB6 source (verified: compiles to this slot)
Public Sub Main()
  Dim v As Variant, w As Variant, n As Long
  v.Prop(1) = 2
End Sub

Sub P(x As Variant)
End Sub
Encoding, evidence and notes
Encoding

Encoding: FF 44 (lead byte FF selects table 5), then 4 operand byte(s); total instruction length 6 byte(s).
No printf operands are declared, but the instruction still consumes operand bytes; see the size above and the observed bytes below. (Phase 3a: flag=0 does not mean 'no operands'.)
Observed: FF44 00000100 VarLateMemCallSt

Examples
FF44 00000100  VarLateMemCallSt

From the Phase 4 probe (VB6 SP6, P-code).

Evidence and notes

Emitted by VB6 SP6 (P-code): yes. Minimal probe: probes\op\5_44_VarLateMemCallSt.

Handler: 0x6610A952, unique to this slot (real opcode #774).

Check of vb6_source_eq example: verified: compiles and emits this slot.

Example from the description
Public Sub Main()
  Dim v As Variant, w As Variant, n As Long
  v.Prop(1) = 2
End Sub

Sub P(x As Variant)
End Sub

Description: draft, by claude-opus-5-5. Handler 0x6610A952, dispatch slot 0x66108224, modOpcodes line 352.

VarLateMemLdRfVar

(5,0x3D)emittedhandler #769Object / COMinferred_corpus1 corpus hits
Late-bound property get by name on a Variant-held object, passed on by reference.

As VarLateMemLdVar, but pushes the address of the result temporary %a for ByRef use.

When the compiler emits it

Emitted when the result of v.Prop is passed ByRef (to a Variant parameter) or used as the receiver of a further member access (v.A.B).

VB6 source (verified: compiles to this slot)
Public Sub Main()
  Dim v As Variant, w As Variant, n As Long
  P v.Prop
End Sub

Sub P(x As Variant)
End Sub
Encoding, evidence and notes
Encoding

Encoding: FF 3D (lead byte FF selects table 5), then 4 operand byte(s); total instruction length 6 byte(s).
vbdec template: %a %s
Operands:

  1. %a: local_var_ref, 2 byte(s). signed 16-bit offset from the procedure frame pointer (EBP). Negative = local/temporary (vbdec var_XX, XX = -offset), positive = argument (arg_XX).
  2. %s: pool_string, 2 byte(s). 16-bit constant-pool index of a string literal (BSTR).

Observed: FF3D 48FF0000 VarLateMemLdRfVar var_B8 str_4011FC='Prop'

Examples
Form2.Form_Unload (Cancel As Integer) @ 0x460A60 | 460BB1    FF3D 50FFCB00         VarLateMemLdRfVar var_B0 str_42560C='Checked'

1 occurrence(s) in PDFStreamDumper.

Evidence and notes

Emitted by VB6 SP6 (P-code): yes. Minimal probe: probes\op\5_3D_VarLateMemLdRfVar.

Handler: 0x66105C35, unique to this slot (real opcode #769).

Check of vb6_source_eq example: verified: compiles and emits this slot.

Corpus: 1 occurrence(s) in PDFStreamDumper_p.exe.

Example from the description
Sub P(x As Variant)
End Sub
Sub Main()
  Dim v As Variant
  P v.Prop
End Sub

Description: draft, by claude-opus-5-5. Handler 0x66105C35, dispatch slot 0x66108208, modOpcodes line 356.

VarLateMemLdVar

(5,0x41)emittedhandler #771Object / COMinferred_corpus8 corpus hits
Late-bound property get by name on an object held in a Variant; push the result Variant.

Resolves the member name (%s) with GetIDsOfNames on the Variant's IDispatch and calls Invoke(PROPERTYGET|METHOD); the result goes to temporary %a.

When the compiler emits it

Emitted for x = v.Prop (or v.F(args) used as a value) where v is a Variant containing an object. An Object receiver uses LateMemLdVar.

VB6 source (verified: compiles to this slot)
Public Sub Main()
  Dim v As Variant, w As Variant, n As Long
  w = v.Prop
End Sub

Sub P(x As Variant)
End Sub
Encoding, evidence and notes
Encoding

Encoding: FF 41 (lead byte FF selects table 5), then 4 operand byte(s); total instruction length 6 byte(s).
vbdec template: %a %s
Operands:

  1. %a: local_var_ref, 2 byte(s). signed 16-bit offset from the procedure frame pointer (EBP). Negative = local/temporary (vbdec var_XX, XX = -offset), positive = argument (arg_XX).
  2. %s: pool_string, 2 byte(s). 16-bit constant-pool index of a string literal (BSTR).

Observed: FF41 48FF0000 VarLateMemLdVar var_B8 str_4011F8='Prop'

Examples
Form2.mnuRenameFunc_Click @ 0x471130 | 47127C    FF41 64FF6600         VarLateMemLdVar var_9C str_41F73C='Text'
CScriptFunctions.GetListviewData @ 0x44080C | 44082C    FF41 3CFF0400         VarLateMemLdVar var_C4 str_426A24='tag'
frmReplace.Form_Resize @ 0x449E94 | 449EB2    FF41 48FF1800         VarLateMemLdVar var_B8 str_4271C8='left'

8 occurrence(s) in PDFStreamDumper.

Evidence and notes

Emitted by VB6 SP6 (P-code): yes. Minimal probe: probes\op\5_41_VarLateMemLdVar.

Handler: 0x66105C3C, unique to this slot (real opcode #771).

Check of vb6_source_eq example: verified: compiles and emits this slot.

Corpus: 8 occurrence(s) in PDFStreamDumper_p.exe.

Example from the description
Dim v As Variant, w As Variant
w = v.Prop

Description: draft, by claude-opus-5-5. Handler 0x66105C3C, dispatch slot 0x66108218, modOpcodes line 355.

VarLateMemSt

(5,0x43)emittedhandler #773Object / COMinferred_corpus4 corpus hits
Late-bound property put by name on an object held in a Variant.

Pops the value, resolves the member name (%s) and calls Invoke(DISPATCH_PROPERTYPUT) on the Variant's object.

When the compiler emits it

Emitted for v.Prop = x where v is a Variant containing an object. An Object receiver uses LateMemSt.

VB6 source (verified: compiles to this slot)
Public Sub Main()
  Dim v As Variant, w As Variant, n As Long
  v.Prop = 1
End Sub

Sub P(x As Variant)
End Sub
Encoding, evidence and notes
Encoding

Encoding: FF 43 (lead byte FF selects table 5), then 2 operand byte(s); total instruction length 4 byte(s).
vbdec template: %s
Operands:

  1. %s: pool_string, 2 byte(s). 16-bit constant-pool index of a string literal (BSTR).

Observed: FF43 0000 VarLateMemSt str_4011F8='Prop'

Examples
Form2.Form_Load @ 0x46C454 | 46C676    FF43 CB00             VarLateMemSt str_42560C='Checked'
frmReplace.Form_Resize @ 0x449E94 | 449EC9    FF43 1900             VarLateMemSt str_4271D4='Width'
frmReplace.Form_Resize @ 0x449E94 | 449EFE    FF43 1B00             VarLateMemSt str_4271E8='height'

4 occurrence(s) in PDFStreamDumper.

Evidence and notes

Emitted by VB6 SP6 (P-code): yes. Minimal probe: probes\op\5_43_VarLateMemSt.

Handler: 0x66105C87, unique to this slot (real opcode #773).

Check of vb6_source_eq example: verified: compiles and emits this slot.

Corpus: 4 occurrence(s) in PDFStreamDumper_p.exe.

Example from the description
Dim v As Variant
v.Prop = 1

Description: draft, by claude-opus-5-5. Handler 0x66105C87, dispatch slot 0x66108220, modOpcodes line 358.

VarLateMemStAd

(5,0x45)emittedhandler #775Object / COMinferred_corpus
Late-bound property-putref by name on an object held in a Variant.

As LateMemStAd, with a Variant receiver.

When the compiler emits it

Emitted for Set v.Prop = x with v As Variant.

VB6 source (verified: compiles to this slot)
Public Sub Main()
  Dim v As Variant, w As Variant, n As Long
  Set v.Prop = Nothing
End Sub

Sub P(x As Variant)
End Sub
Encoding, evidence and notes
Encoding

Encoding: FF 45 (lead byte FF selects table 5), then 4 operand byte(s); total instruction length 6 byte(s).
No printf operands are declared, but the instruction still consumes operand bytes; see the size above and the observed bytes below. (Phase 3a: flag=0 does not mean 'no operands'.)
Observed: FF45 00000000 VarLateMemStAd

Examples
FF45 00000000  VarLateMemStAd

From the Phase 4 probe (VB6 SP6, P-code).

Evidence and notes

Emitted by VB6 SP6 (P-code): yes. Minimal probe: probes\op\5_45_VarLateMemStAd.

Handler: 0x6610A93C, unique to this slot (real opcode #775).

Check of vb6_source_eq example: verified: compiles and emits this slot.

Example from the description
Public Sub Main()
  Dim v As Variant, w As Variant, n As Long
  Set v.Prop = Nothing
End Sub

Sub P(x As Variant)
End Sub

Description: draft, by claude-opus-5-5. Handler 0x6610A93C, dispatch slot 0x66108228, modOpcodes line 359.

WMem_Load

WMem loads: read at [W-base + offset]. Prefix: W + Mem + Ld (Phase 3a).

WMemLdCy

(4,0xD4)not emittedprimary of 2handler #695Currencycontextual
LOAD a Currency (64-bit scaled int) at [W-base+offset] via the procedure's secondary-object pointer [ebp+10h] (W-base) (8-byte).

Handler analysis (idalib, MSVBVM60.dll build 6.00.8268). Reads a 2-byte signed offset from the instruction stream and adds it to the pointer held at the fixed frame slot [ebp+10h]. That slot is set once by the procedure's caller ([ebp+10h] is procedure-invocation argument 3) and is never written by any handler in the ENGINE segment -- it is stable for the lifetime of the procedure.

This is a WMem variant: it accesses [ebp+10h] + offset directly. The slot is treated as a Currency (64-bit scaled int) value.

Stack: [...] -> [..., (*([ebp+10h] + offset)):Cy]

**Distinction from the corresponding Mem* opcode (non-W counterpart):** the regular Mem* family uses the runtime cache at [ebp-4Ch], which is updated by every preceding FLdPr, FLdPrThis, NewIfNullAd, Ary1LdPr, or LdPrVar instruction. The W-family bypasses that cache and uses the stable [ebp+10h] pointer instead -- so the W-base does not require a preceding object-load opcode to be set.

Identity of [ebp+10h] is not yet pinned. Handler analysis establishes the mechanical behavior; the source-language construct that establishes this secondary object pointer (parent scope, procedure descriptor, outer-class pointer, etc.) is not yet verified. PDFStreamDumper's corpus has zero occurrences of this family, suggesting the construct is rare in typical VB6 code. A targeted probe in Phase 4 should resolve which language-level construct emits these opcodes.

When the compiler emits it

Emitted when the compiler accesses a member through a STABLE, caller-supplied object pointer (the secondary slot at [ebp+10h]) rather than through the runtime object-load cache that Mem* uses. The specific source-language construct that establishes the W-base has not yet been pinned by handler analysis alone -- PDFStreamDumper's corpus has zero occurrences of the entire IWMem/WMem family, suggesting the construct is uncommon in typical VB6 code. Candidate emit triggers worth probing in Phase 4: nested-class member access, parent-scope references from inside an event handler, or compiler-synthesized accessors that have access to a known-stable secondary pointer.

Handler analysis

Handler label: label near 0x6610a5f9 at 0x6610a5f9 in MSVBVM60.dll (build 6.00.8268).

Canonical 8-instruction body:

movsx eax, word ptr [esi]        ; 2-byte signed offset
add   eax, [ebp+10h]              ; eax = W-base + offset
push  dword ptr [eax]             ; push value at *eax
xor   eax, eax
mov   al,  [esi+2]                ; next opcode byte
add   esi, 3                      ; advance pcode pointer
jmp   [_tblByteDisp + eax*4]      ; dispatch next

Variations across suffixes (FPR4/FPR8/Var/Cy/Str/Darg) replace the central push/pop dword [eax] with the appropriate width-specific helper (fld/fst for FPU types, __vbaCopyBytes/__vbaStrCopy for BSTRs, the 16-byte Variant copy routine for Var, etc.). The base-computation step (add eax, [ebp+10h]) is identical across all 50 distinct handlers analyzed in the IWMem/WMem set.

Encoding, evidence and notes
Encoding

Encoding: FE D4 (lead byte FE selects table 4), then 2 operand byte(s); total instruction length 4 byte(s).
No printf operands are declared, but the instruction still consumes operand bytes; see the size above and the observed bytes below. (Phase 3a: flag=0 does not mean 'no operands'.)

Evidence and notes

Emitted by VB6 SP6 (P-code): not observed in about 3,070 probe programs. The slot exists in the runtime's dispatch table, but no tested source construct makes the compiler emit it.

Handler: 0x6610A5F9, shared by 2 dispatch slots (real opcode #695). This is the primary slot. Other slots: (4,D5) WMemLdCy.

Family note: Phase 4: never emitted by VB6 SP6. Contexts tried include class/form/module statics, member UDTs with With, WithEvents, Implements, ActiveX DLL/EXE globals (these compile to FMem*), UserControl, PropertyPage, ActiveX Document, Add-in, DHTML and DataReport projects. Handler base [ebp+10h] (dispatcher arg 3) has no known source construct. IIS WebClass projects are untested.

Slots sharing this handler

(4,0xD5) WMemLdCy

Description: draft, by claude-opus-4.7. Handler 0x6610A5F9, dispatch slot 0x66108064, modOpcodes line 1287.

WMemLdCy

(4,0xD5)not emitteddup of (4,D4)handler #695Currencyconfirmed_handler
LOAD a Currency (64-bit scaled int) at [W-base+offset] via the procedure's secondary-object pointer [ebp+10h] (W-base) (8-byte).

Handler analysis (idalib, MSVBVM60.dll build 6.00.8268). Reads a 2-byte signed offset from the instruction stream and adds it to the pointer held at the fixed frame slot [ebp+10h]. That slot is set once by the procedure's caller ([ebp+10h] is procedure-invocation argument 3) and is never written by any handler in the ENGINE segment -- it is stable for the lifetime of the procedure.

This is a WMem variant: it accesses [ebp+10h] + offset directly. The slot is treated as a Currency (64-bit scaled int) value.

Stack: [...] -> [..., (*([ebp+10h] + offset)):Cy]

**Distinction from the corresponding Mem* opcode (non-W counterpart):** the regular Mem* family uses the runtime cache at [ebp-4Ch], which is updated by every preceding FLdPr, FLdPrThis, NewIfNullAd, Ary1LdPr, or LdPrVar instruction. The W-family bypasses that cache and uses the stable [ebp+10h] pointer instead -- so the W-base does not require a preceding object-load opcode to be set.

Identity of [ebp+10h] is not yet pinned. Handler analysis establishes the mechanical behavior; the source-language construct that establishes this secondary object pointer (parent scope, procedure descriptor, outer-class pointer, etc.) is not yet verified. PDFStreamDumper's corpus has zero occurrences of this family, suggesting the construct is rare in typical VB6 code. A targeted probe in Phase 4 should resolve which language-level construct emits these opcodes.

When the compiler emits it

Emitted when the compiler accesses a member through a STABLE, caller-supplied object pointer (the secondary slot at [ebp+10h]) rather than through the runtime object-load cache that Mem* uses. The specific source-language construct that establishes the W-base has not yet been pinned by handler analysis alone -- PDFStreamDumper's corpus has zero occurrences of the entire IWMem/WMem family, suggesting the construct is uncommon in typical VB6 code. Candidate emit triggers worth probing in Phase 4: nested-class member access, parent-scope references from inside an event handler, or compiler-synthesized accessors that have access to a known-stable secondary pointer.

Handler analysis

Handler label: label near 0x6610a5f9 at 0x6610a5f9 in MSVBVM60.dll (build 6.00.8268).

Canonical 8-instruction body:

movsx eax, word ptr [esi]        ; 2-byte signed offset
add   eax, [ebp+10h]              ; eax = W-base + offset
push  dword ptr [eax]             ; push value at *eax
xor   eax, eax
mov   al,  [esi+2]                ; next opcode byte
add   esi, 3                      ; advance pcode pointer
jmp   [_tblByteDisp + eax*4]      ; dispatch next

Variations across suffixes (FPR4/FPR8/Var/Cy/Str/Darg) replace the central push/pop dword [eax] with the appropriate width-specific helper (fld/fst for FPU types, __vbaCopyBytes/__vbaStrCopy for BSTRs, the 16-byte Variant copy routine for Var, etc.). The base-computation step (add eax, [ebp+10h]) is identical across all 50 distinct handlers analyzed in the IWMem/WMem set.

Encoding, evidence and notes
Encoding

Encoding: FE D5 (lead byte FE selects table 4), then 2 operand byte(s); total instruction length 4 byte(s).
No printf operands are declared, but the instruction still consumes operand bytes; see the size above and the observed bytes below. (Phase 3a: flag=0 does not mean 'no operands'.)

Evidence and notes

Emitted by VB6 SP6 (P-code): not observed in about 3,070 probe programs. The slot exists in the runtime's dispatch table, but no tested source construct makes the compiler emit it.

Handler: 0x6610A5F9, shared by 2 dispatch slots (real opcode #695). This is a duplicate slot of (4,D4) WMemLdCy. Other slots: (4,D4) WMemLdCy.

Family note: Phase 4: never emitted by VB6 SP6. Contexts tried include class/form/module statics, member UDTs with With, WithEvents, Implements, ActiveX DLL/EXE globals (these compile to FMem*), UserControl, PropertyPage, ActiveX Document, Add-in, DHTML and DataReport projects. Handler base [ebp+10h] (dispatcher arg 3) has no known source construct. IIS WebClass projects are untested.

Slots sharing this handler

(4,0xD4) WMemLdCy

Description: draft, by claude-opus-4.7. Handler 0x6610A5F9, dispatch slot 0x66108068, modOpcodes line 1288.

WMemLdFPR4

(4,0xD9)not emittedhandler #697Floating pointcontextual
LOAD a Single via x87 FPU at [W-base+offset] via the procedure's secondary-object pointer [ebp+10h] (W-base) (4-byte (FPU)).

Handler analysis (idalib, MSVBVM60.dll build 6.00.8268). Reads a 2-byte signed offset from the instruction stream and adds it to the pointer held at the fixed frame slot [ebp+10h]. That slot is set once by the procedure's caller ([ebp+10h] is procedure-invocation argument 3) and is never written by any handler in the ENGINE segment -- it is stable for the lifetime of the procedure.

This is a WMem variant: it accesses [ebp+10h] + offset directly. The slot is treated as a Single via x87 FPU value.

Stack: [...] -> [..., (*([ebp+10h] + offset)):FPR4]

**Distinction from the corresponding Mem* opcode (non-W counterpart):** the regular Mem* family uses the runtime cache at [ebp-4Ch], which is updated by every preceding FLdPr, FLdPrThis, NewIfNullAd, Ary1LdPr, or LdPrVar instruction. The W-family bypasses that cache and uses the stable [ebp+10h] pointer instead -- so the W-base does not require a preceding object-load opcode to be set.

Identity of [ebp+10h] is not yet pinned. Handler analysis establishes the mechanical behavior; the source-language construct that establishes this secondary object pointer (parent scope, procedure descriptor, outer-class pointer, etc.) is not yet verified. PDFStreamDumper's corpus has zero occurrences of this family, suggesting the construct is rare in typical VB6 code. A targeted probe in Phase 4 should resolve which language-level construct emits these opcodes.

When the compiler emits it

Emitted when the compiler accesses a member through a STABLE, caller-supplied object pointer (the secondary slot at [ebp+10h]) rather than through the runtime object-load cache that Mem* uses. The specific source-language construct that establishes the W-base has not yet been pinned by handler analysis alone -- PDFStreamDumper's corpus has zero occurrences of the entire IWMem/WMem family, suggesting the construct is uncommon in typical VB6 code. Candidate emit triggers worth probing in Phase 4: nested-class member access, parent-scope references from inside an event handler, or compiler-synthesized accessors that have access to a known-stable secondary pointer.

Handler analysis

Handler label: label near 0x6610a613 at 0x6610a613 in MSVBVM60.dll (build 6.00.8268).

Canonical 8-instruction body:

movsx eax, word ptr [esi]        ; 2-byte signed offset
add   eax, [ebp+10h]              ; eax = W-base + offset
push  dword ptr [eax]             ; push value at *eax
xor   eax, eax
mov   al,  [esi+2]                ; next opcode byte
add   esi, 3                      ; advance pcode pointer
jmp   [_tblByteDisp + eax*4]      ; dispatch next

Variations across suffixes (FPR4/FPR8/Var/Cy/Str/Darg) replace the central push/pop dword [eax] with the appropriate width-specific helper (fld/fst for FPU types, __vbaCopyBytes/__vbaStrCopy for BSTRs, the 16-byte Variant copy routine for Var, etc.). The base-computation step (add eax, [ebp+10h]) is identical across all 50 distinct handlers analyzed in the IWMem/WMem set.

Encoding, evidence and notes
Encoding

Encoding: FE D9 (lead byte FE selects table 4), then 2 operand byte(s); total instruction length 4 byte(s).
No printf operands are declared, but the instruction still consumes operand bytes; see the size above and the observed bytes below. (Phase 3a: flag=0 does not mean 'no operands'.)

Evidence and notes

Emitted by VB6 SP6 (P-code): not observed in about 3,070 probe programs. The slot exists in the runtime's dispatch table, but no tested source construct makes the compiler emit it.

Handler: 0x6610A613, unique to this slot (real opcode #697).

Family note: Phase 4: never emitted by VB6 SP6. Contexts tried include class/form/module statics, member UDTs with With, WithEvents, Implements, ActiveX DLL/EXE globals (these compile to FMem*), UserControl, PropertyPage, ActiveX Document, Add-in, DHTML and DataReport projects. Handler base [ebp+10h] (dispatcher arg 3) has no known source construct. IIS WebClass projects are untested.

Description: draft, by claude-opus-4.7. Handler 0x6610A613, dispatch slot 0x66108078, modOpcodes line 1292.

WMemLdFPR8

(4,0xDA)not emittedhandler #698Floating pointcontextual
LOAD a Double via x87 FPU at [W-base+offset] via the procedure's secondary-object pointer [ebp+10h] (W-base) (8-byte (FPU)).

Handler analysis (idalib, MSVBVM60.dll build 6.00.8268). Reads a 2-byte signed offset from the instruction stream and adds it to the pointer held at the fixed frame slot [ebp+10h]. That slot is set once by the procedure's caller ([ebp+10h] is procedure-invocation argument 3) and is never written by any handler in the ENGINE segment -- it is stable for the lifetime of the procedure.

This is a WMem variant: it accesses [ebp+10h] + offset directly. The slot is treated as a Double via x87 FPU value.

Stack: [...] -> [..., (*([ebp+10h] + offset)):FPR8]

**Distinction from the corresponding Mem* opcode (non-W counterpart):** the regular Mem* family uses the runtime cache at [ebp-4Ch], which is updated by every preceding FLdPr, FLdPrThis, NewIfNullAd, Ary1LdPr, or LdPrVar instruction. The W-family bypasses that cache and uses the stable [ebp+10h] pointer instead -- so the W-base does not require a preceding object-load opcode to be set.

Identity of [ebp+10h] is not yet pinned. Handler analysis establishes the mechanical behavior; the source-language construct that establishes this secondary object pointer (parent scope, procedure descriptor, outer-class pointer, etc.) is not yet verified. PDFStreamDumper's corpus has zero occurrences of this family, suggesting the construct is rare in typical VB6 code. A targeted probe in Phase 4 should resolve which language-level construct emits these opcodes.

When the compiler emits it

Emitted when the compiler accesses a member through a STABLE, caller-supplied object pointer (the secondary slot at [ebp+10h]) rather than through the runtime object-load cache that Mem* uses. The specific source-language construct that establishes the W-base has not yet been pinned by handler analysis alone -- PDFStreamDumper's corpus has zero occurrences of the entire IWMem/WMem family, suggesting the construct is uncommon in typical VB6 code. Candidate emit triggers worth probing in Phase 4: nested-class member access, parent-scope references from inside an event handler, or compiler-synthesized accessors that have access to a known-stable secondary pointer.

Handler analysis

Handler label: label near 0x6610a62a at 0x6610a62a in MSVBVM60.dll (build 6.00.8268).

Canonical 8-instruction body:

movsx eax, word ptr [esi]        ; 2-byte signed offset
add   eax, [ebp+10h]              ; eax = W-base + offset
push  dword ptr [eax]             ; push value at *eax
xor   eax, eax
mov   al,  [esi+2]                ; next opcode byte
add   esi, 3                      ; advance pcode pointer
jmp   [_tblByteDisp + eax*4]      ; dispatch next

Variations across suffixes (FPR4/FPR8/Var/Cy/Str/Darg) replace the central push/pop dword [eax] with the appropriate width-specific helper (fld/fst for FPU types, __vbaCopyBytes/__vbaStrCopy for BSTRs, the 16-byte Variant copy routine for Var, etc.). The base-computation step (add eax, [ebp+10h]) is identical across all 50 distinct handlers analyzed in the IWMem/WMem set.

Encoding, evidence and notes
Encoding

Encoding: FE DA (lead byte FE selects table 4), then 2 operand byte(s); total instruction length 4 byte(s).
No printf operands are declared, but the instruction still consumes operand bytes; see the size above and the observed bytes below. (Phase 3a: flag=0 does not mean 'no operands'.)

Evidence and notes

Emitted by VB6 SP6 (P-code): not observed in about 3,070 probe programs. The slot exists in the runtime's dispatch table, but no tested source construct makes the compiler emit it.

Handler: 0x6610A62A, unique to this slot (real opcode #698).

Family note: Phase 4: never emitted by VB6 SP6. Contexts tried include class/form/module statics, member UDTs with With, WithEvents, Implements, ActiveX DLL/EXE globals (these compile to FMem*), UserControl, PropertyPage, ActiveX Document, Add-in, DHTML and DataReport projects. Handler base [ebp+10h] (dispatcher arg 3) has no known source construct. IIS WebClass projects are untested.

Description: draft, by claude-opus-4.7. Handler 0x6610A62A, dispatch slot 0x6610807C, modOpcodes line 1293.

WMemLdI2

(4,0xD1)not emittedhandler #693Integercontextual
LOAD a 16-bit signed integer (VB6 Integer) at [W-base+offset] via the procedure's secondary-object pointer [ebp+10h] (W-base) (2-byte).

Handler analysis (idalib, MSVBVM60.dll build 6.00.8268). Reads a 2-byte signed offset from the instruction stream and adds it to the pointer held at the fixed frame slot [ebp+10h]. That slot is set once by the procedure's caller ([ebp+10h] is procedure-invocation argument 3) and is never written by any handler in the ENGINE segment -- it is stable for the lifetime of the procedure.

This is a WMem variant: it accesses [ebp+10h] + offset directly. The slot is treated as a 16-bit signed integer (VB6 Integer) value.

Stack: [...] -> [..., (*([ebp+10h] + offset)):I2]

**Distinction from the corresponding Mem* opcode (non-W counterpart):** the regular Mem* family uses the runtime cache at [ebp-4Ch], which is updated by every preceding FLdPr, FLdPrThis, NewIfNullAd, Ary1LdPr, or LdPrVar instruction. The W-family bypasses that cache and uses the stable [ebp+10h] pointer instead -- so the W-base does not require a preceding object-load opcode to be set.

Identity of [ebp+10h] is not yet pinned. Handler analysis establishes the mechanical behavior; the source-language construct that establishes this secondary object pointer (parent scope, procedure descriptor, outer-class pointer, etc.) is not yet verified. PDFStreamDumper's corpus has zero occurrences of this family, suggesting the construct is rare in typical VB6 code. A targeted probe in Phase 4 should resolve which language-level construct emits these opcodes.

When the compiler emits it

Emitted when the compiler accesses a member through a STABLE, caller-supplied object pointer (the secondary slot at [ebp+10h]) rather than through the runtime object-load cache that Mem* uses. The specific source-language construct that establishes the W-base has not yet been pinned by handler analysis alone -- PDFStreamDumper's corpus has zero occurrences of the entire IWMem/WMem family, suggesting the construct is uncommon in typical VB6 code. Candidate emit triggers worth probing in Phase 4: nested-class member access, parent-scope references from inside an event handler, or compiler-synthesized accessors that have access to a known-stable secondary pointer.

Handler analysis

Handler label: label near 0x6610a5c9 at 0x6610a5c9 in MSVBVM60.dll (build 6.00.8268).

Canonical 8-instruction body:

movsx eax, word ptr [esi]        ; 2-byte signed offset
add   eax, [ebp+10h]              ; eax = W-base + offset
push  dword ptr [eax]             ; push value at *eax
xor   eax, eax
mov   al,  [esi+2]                ; next opcode byte
add   esi, 3                      ; advance pcode pointer
jmp   [_tblByteDisp + eax*4]      ; dispatch next

Variations across suffixes (FPR4/FPR8/Var/Cy/Str/Darg) replace the central push/pop dword [eax] with the appropriate width-specific helper (fld/fst for FPU types, __vbaCopyBytes/__vbaStrCopy for BSTRs, the 16-byte Variant copy routine for Var, etc.). The base-computation step (add eax, [ebp+10h]) is identical across all 50 distinct handlers analyzed in the IWMem/WMem set.

Encoding, evidence and notes
Encoding

Encoding: FE D1 (lead byte FE selects table 4), then 2 operand byte(s); total instruction length 4 byte(s).
No printf operands are declared, but the instruction still consumes operand bytes; see the size above and the observed bytes below. (Phase 3a: flag=0 does not mean 'no operands'.)

Evidence and notes

Emitted by VB6 SP6 (P-code): not observed in about 3,070 probe programs. The slot exists in the runtime's dispatch table, but no tested source construct makes the compiler emit it.

Handler: 0x6610A5C9, unique to this slot (real opcode #693).

Family note: Phase 4: never emitted by VB6 SP6. Contexts tried include class/form/module statics, member UDTs with With, WithEvents, Implements, ActiveX DLL/EXE globals (these compile to FMem*), UserControl, PropertyPage, ActiveX Document, Add-in, DHTML and DataReport projects. Handler base [ebp+10h] (dispatcher arg 3) has no known source construct. IIS WebClass projects are untested.

Description: draft, by claude-opus-4.7. Handler 0x6610A5C9, dispatch slot 0x66108058, modOpcodes line 1284.

WMemLdRfVar

(4,0xD6)not emittedprimary of 2handler #696Stack & framecontextual
LOAD a Variant ByRef reference at [W-base+offset] via the procedure's secondary-object pointer [ebp+10h] (W-base) (4-byte (reference)).

Handler analysis (idalib, MSVBVM60.dll build 6.00.8268). Reads a 2-byte signed offset from the instruction stream and adds it to the pointer held at the fixed frame slot [ebp+10h]. That slot is set once by the procedure's caller ([ebp+10h] is procedure-invocation argument 3) and is never written by any handler in the ENGINE segment -- it is stable for the lifetime of the procedure.

This is a WMem variant: it accesses [ebp+10h] + offset directly. The slot is treated as a Variant ByRef reference value.

Stack: [...] -> [..., (*([ebp+10h] + offset)):RfVar]

**Distinction from the corresponding Mem* opcode (non-W counterpart):** the regular Mem* family uses the runtime cache at [ebp-4Ch], which is updated by every preceding FLdPr, FLdPrThis, NewIfNullAd, Ary1LdPr, or LdPrVar instruction. The W-family bypasses that cache and uses the stable [ebp+10h] pointer instead -- so the W-base does not require a preceding object-load opcode to be set.

Identity of [ebp+10h] is not yet pinned. Handler analysis establishes the mechanical behavior; the source-language construct that establishes this secondary object pointer (parent scope, procedure descriptor, outer-class pointer, etc.) is not yet verified. PDFStreamDumper's corpus has zero occurrences of this family, suggesting the construct is rare in typical VB6 code. A targeted probe in Phase 4 should resolve which language-level construct emits these opcodes.

When the compiler emits it

Emitted when the compiler accesses a member through a STABLE, caller-supplied object pointer (the secondary slot at [ebp+10h]) rather than through the runtime object-load cache that Mem* uses. The specific source-language construct that establishes the W-base has not yet been pinned by handler analysis alone -- PDFStreamDumper's corpus has zero occurrences of the entire IWMem/WMem family, suggesting the construct is uncommon in typical VB6 code. Candidate emit triggers worth probing in Phase 4: nested-class member access, parent-scope references from inside an event handler, or compiler-synthesized accessors that have access to a known-stable secondary pointer.

Handler analysis

Handler label: label near 0x6610a641 at 0x6610a641 in MSVBVM60.dll (build 6.00.8268).

Canonical 8-instruction body:

movsx eax, word ptr [esi]        ; 2-byte signed offset
add   eax, [ebp+10h]              ; eax = W-base + offset
push  dword ptr [eax]             ; push value at *eax
xor   eax, eax
mov   al,  [esi+2]                ; next opcode byte
add   esi, 3                      ; advance pcode pointer
jmp   [_tblByteDisp + eax*4]      ; dispatch next

Variations across suffixes (FPR4/FPR8/Var/Cy/Str/Darg) replace the central push/pop dword [eax] with the appropriate width-specific helper (fld/fst for FPU types, __vbaCopyBytes/__vbaStrCopy for BSTRs, the 16-byte Variant copy routine for Var, etc.). The base-computation step (add eax, [ebp+10h]) is identical across all 50 distinct handlers analyzed in the IWMem/WMem set.

Encoding, evidence and notes
Encoding

Encoding: FE D6 (lead byte FE selects table 4), then 2 operand byte(s); total instruction length 4 byte(s).
No printf operands are declared, but the instruction still consumes operand bytes; see the size above and the observed bytes below. (Phase 3a: flag=0 does not mean 'no operands'.)

Evidence and notes

Emitted by VB6 SP6 (P-code): not observed in about 3,070 probe programs. The slot exists in the runtime's dispatch table, but no tested source construct makes the compiler emit it.

Handler: 0x6610A641, shared by 2 dispatch slots (real opcode #696). This is the primary slot. Other slots: (4,DC) WMemLdRfVar.

Family note: Phase 4: never emitted by VB6 SP6. Contexts tried include class/form/module statics, member UDTs with With, WithEvents, Implements, ActiveX DLL/EXE globals (these compile to FMem*), UserControl, PropertyPage, ActiveX Document, Add-in, DHTML and DataReport projects. Handler base [ebp+10h] (dispatcher arg 3) has no known source construct. IIS WebClass projects are untested.

Slots sharing this handler

(4,0xDC) WMemLdRfVar

Description: draft, by claude-opus-4.7. Handler 0x6610A641, dispatch slot 0x6610806C, modOpcodes line 1289.

WMemLdRfVar

(4,0xDC)not emitteddup of (4,D6)handler #696Stack & frameconfirmed_handler
LOAD a Variant ByRef reference at [W-base+offset] via the procedure's secondary-object pointer [ebp+10h] (W-base) (4-byte (reference)).

Handler analysis (idalib, MSVBVM60.dll build 6.00.8268). Reads a 2-byte signed offset from the instruction stream and adds it to the pointer held at the fixed frame slot [ebp+10h]. That slot is set once by the procedure's caller ([ebp+10h] is procedure-invocation argument 3) and is never written by any handler in the ENGINE segment -- it is stable for the lifetime of the procedure.

This is a WMem variant: it accesses [ebp+10h] + offset directly. The slot is treated as a Variant ByRef reference value.

Stack: [...] -> [..., (*([ebp+10h] + offset)):RfVar]

**Distinction from the corresponding Mem* opcode (non-W counterpart):** the regular Mem* family uses the runtime cache at [ebp-4Ch], which is updated by every preceding FLdPr, FLdPrThis, NewIfNullAd, Ary1LdPr, or LdPrVar instruction. The W-family bypasses that cache and uses the stable [ebp+10h] pointer instead -- so the W-base does not require a preceding object-load opcode to be set.

Identity of [ebp+10h] is not yet pinned. Handler analysis establishes the mechanical behavior; the source-language construct that establishes this secondary object pointer (parent scope, procedure descriptor, outer-class pointer, etc.) is not yet verified. PDFStreamDumper's corpus has zero occurrences of this family, suggesting the construct is rare in typical VB6 code. A targeted probe in Phase 4 should resolve which language-level construct emits these opcodes.

When the compiler emits it

Emitted when the compiler accesses a member through a STABLE, caller-supplied object pointer (the secondary slot at [ebp+10h]) rather than through the runtime object-load cache that Mem* uses. The specific source-language construct that establishes the W-base has not yet been pinned by handler analysis alone -- PDFStreamDumper's corpus has zero occurrences of the entire IWMem/WMem family, suggesting the construct is uncommon in typical VB6 code. Candidate emit triggers worth probing in Phase 4: nested-class member access, parent-scope references from inside an event handler, or compiler-synthesized accessors that have access to a known-stable secondary pointer.

Handler analysis

Handler label: label near 0x6610a641 at 0x6610a641 in MSVBVM60.dll (build 6.00.8268).

Canonical 8-instruction body:

movsx eax, word ptr [esi]        ; 2-byte signed offset
add   eax, [ebp+10h]              ; eax = W-base + offset
push  dword ptr [eax]             ; push value at *eax
xor   eax, eax
mov   al,  [esi+2]                ; next opcode byte
add   esi, 3                      ; advance pcode pointer
jmp   [_tblByteDisp + eax*4]      ; dispatch next

Variations across suffixes (FPR4/FPR8/Var/Cy/Str/Darg) replace the central push/pop dword [eax] with the appropriate width-specific helper (fld/fst for FPU types, __vbaCopyBytes/__vbaStrCopy for BSTRs, the 16-byte Variant copy routine for Var, etc.). The base-computation step (add eax, [ebp+10h]) is identical across all 50 distinct handlers analyzed in the IWMem/WMem set.

Encoding, evidence and notes
Encoding

Encoding: FE DC (lead byte FE selects table 4), then 2 operand byte(s); total instruction length 4 byte(s).
No printf operands are declared, but the instruction still consumes operand bytes; see the size above and the observed bytes below. (Phase 3a: flag=0 does not mean 'no operands'.)

Evidence and notes

Emitted by VB6 SP6 (P-code): not observed in about 3,070 probe programs. The slot exists in the runtime's dispatch table, but no tested source construct makes the compiler emit it.

Handler: 0x6610A641, shared by 2 dispatch slots (real opcode #696). This is a duplicate slot of (4,D6) WMemLdRfVar. Other slots: (4,D6) WMemLdRfVar.

Family note: Phase 4: never emitted by VB6 SP6. Contexts tried include class/form/module statics, member UDTs with With, WithEvents, Implements, ActiveX DLL/EXE globals (these compile to FMem*), UserControl, PropertyPage, ActiveX Document, Add-in, DHTML and DataReport projects. Handler base [ebp+10h] (dispatcher arg 3) has no known source construct. IIS WebClass projects are untested.

Slots sharing this handler

(4,0xD6) WMemLdRfVar

Description: draft, by claude-opus-4.7. Handler 0x6610A641, dispatch slot 0x66108084, modOpcodes line 1294.

WMemLdStr

(4,0xD2)not emittedprimary of 4handler #694Stringcontextual
LOAD a BSTR pointer (VB6 String) at [W-base+offset] via the procedure's secondary-object pointer [ebp+10h] (W-base) (4-byte (pointer)).

Handler analysis (idalib, MSVBVM60.dll build 6.00.8268). Reads a 2-byte signed offset from the instruction stream and adds it to the pointer held at the fixed frame slot [ebp+10h]. That slot is set once by the procedure's caller ([ebp+10h] is procedure-invocation argument 3) and is never written by any handler in the ENGINE segment -- it is stable for the lifetime of the procedure.

This is a WMem variant: it accesses [ebp+10h] + offset directly. The slot is treated as a BSTR pointer (VB6 String) value.

Stack: [...] -> [..., (*([ebp+10h] + offset)):Str]

**Distinction from the corresponding Mem* opcode (non-W counterpart):** the regular Mem* family uses the runtime cache at [ebp-4Ch], which is updated by every preceding FLdPr, FLdPrThis, NewIfNullAd, Ary1LdPr, or LdPrVar instruction. The W-family bypasses that cache and uses the stable [ebp+10h] pointer instead -- so the W-base does not require a preceding object-load opcode to be set.

Identity of [ebp+10h] is not yet pinned. Handler analysis establishes the mechanical behavior; the source-language construct that establishes this secondary object pointer (parent scope, procedure descriptor, outer-class pointer, etc.) is not yet verified. PDFStreamDumper's corpus has zero occurrences of this family, suggesting the construct is rare in typical VB6 code. A targeted probe in Phase 4 should resolve which language-level construct emits these opcodes.

When the compiler emits it

Emitted when the compiler accesses a member through a STABLE, caller-supplied object pointer (the secondary slot at [ebp+10h]) rather than through the runtime object-load cache that Mem* uses. The specific source-language construct that establishes the W-base has not yet been pinned by handler analysis alone -- PDFStreamDumper's corpus has zero occurrences of the entire IWMem/WMem family, suggesting the construct is uncommon in typical VB6 code. Candidate emit triggers worth probing in Phase 4: nested-class member access, parent-scope references from inside an event handler, or compiler-synthesized accessors that have access to a known-stable secondary pointer.

Handler analysis

Handler label: label near 0x6610a5e2 at 0x6610a5e2 in MSVBVM60.dll (build 6.00.8268).

Canonical 8-instruction body:

movsx eax, word ptr [esi]        ; 2-byte signed offset
add   eax, [ebp+10h]              ; eax = W-base + offset
push  dword ptr [eax]             ; push value at *eax
xor   eax, eax
mov   al,  [esi+2]                ; next opcode byte
add   esi, 3                      ; advance pcode pointer
jmp   [_tblByteDisp + eax*4]      ; dispatch next

Variations across suffixes (FPR4/FPR8/Var/Cy/Str/Darg) replace the central push/pop dword [eax] with the appropriate width-specific helper (fld/fst for FPU types, __vbaCopyBytes/__vbaStrCopy for BSTRs, the 16-byte Variant copy routine for Var, etc.). The base-computation step (add eax, [ebp+10h]) is identical across all 50 distinct handlers analyzed in the IWMem/WMem set.

Encoding, evidence and notes
Encoding

Encoding: FE D2 (lead byte FE selects table 4), then 2 operand byte(s); total instruction length 4 byte(s).
No printf operands are declared, but the instruction still consumes operand bytes; see the size above and the observed bytes below. (Phase 3a: flag=0 does not mean 'no operands'.)

Evidence and notes

Emitted by VB6 SP6 (P-code): not observed in about 3,070 probe programs. The slot exists in the runtime's dispatch table, but no tested source construct makes the compiler emit it.

Handler: 0x6610A5E2, shared by 4 dispatch slots (real opcode #694). This is the primary slot. Other slots: (4,D3) WMemLdStr, (4,D7) WMemLdStr, (4,D8) WMemLdStr.

Family note: Phase 4: never emitted by VB6 SP6. Contexts tried include class/form/module statics, member UDTs with With, WithEvents, Implements, ActiveX DLL/EXE globals (these compile to FMem*), UserControl, PropertyPage, ActiveX Document, Add-in, DHTML and DataReport projects. Handler base [ebp+10h] (dispatcher arg 3) has no known source construct. IIS WebClass projects are untested.

Slots sharing this handler

(4,0xD3) WMemLdStr, (4,0xD7) WMemLdStr, (4,0xD8) WMemLdStr

Description: draft, by claude-opus-4.7. Handler 0x6610A5E2, dispatch slot 0x6610805C, modOpcodes line 1285.

WMemLdStr

(4,0xD3)not emitteddup of (4,D2)handler #694Stringconfirmed_handler
LOAD a BSTR pointer (VB6 String) at [W-base+offset] via the procedure's secondary-object pointer [ebp+10h] (W-base) (4-byte (pointer)).

Handler analysis (idalib, MSVBVM60.dll build 6.00.8268). Reads a 2-byte signed offset from the instruction stream and adds it to the pointer held at the fixed frame slot [ebp+10h]. That slot is set once by the procedure's caller ([ebp+10h] is procedure-invocation argument 3) and is never written by any handler in the ENGINE segment -- it is stable for the lifetime of the procedure.

This is a WMem variant: it accesses [ebp+10h] + offset directly. The slot is treated as a BSTR pointer (VB6 String) value.

Stack: [...] -> [..., (*([ebp+10h] + offset)):Str]

**Distinction from the corresponding Mem* opcode (non-W counterpart):** the regular Mem* family uses the runtime cache at [ebp-4Ch], which is updated by every preceding FLdPr, FLdPrThis, NewIfNullAd, Ary1LdPr, or LdPrVar instruction. The W-family bypasses that cache and uses the stable [ebp+10h] pointer instead -- so the W-base does not require a preceding object-load opcode to be set.

Identity of [ebp+10h] is not yet pinned. Handler analysis establishes the mechanical behavior; the source-language construct that establishes this secondary object pointer (parent scope, procedure descriptor, outer-class pointer, etc.) is not yet verified. PDFStreamDumper's corpus has zero occurrences of this family, suggesting the construct is rare in typical VB6 code. A targeted probe in Phase 4 should resolve which language-level construct emits these opcodes.

When the compiler emits it

Emitted when the compiler accesses a member through a STABLE, caller-supplied object pointer (the secondary slot at [ebp+10h]) rather than through the runtime object-load cache that Mem* uses. The specific source-language construct that establishes the W-base has not yet been pinned by handler analysis alone -- PDFStreamDumper's corpus has zero occurrences of the entire IWMem/WMem family, suggesting the construct is uncommon in typical VB6 code. Candidate emit triggers worth probing in Phase 4: nested-class member access, parent-scope references from inside an event handler, or compiler-synthesized accessors that have access to a known-stable secondary pointer.

Handler analysis

Handler label: label near 0x6610a5e2 at 0x6610a5e2 in MSVBVM60.dll (build 6.00.8268).

Canonical 8-instruction body:

movsx eax, word ptr [esi]        ; 2-byte signed offset
add   eax, [ebp+10h]              ; eax = W-base + offset
push  dword ptr [eax]             ; push value at *eax
xor   eax, eax
mov   al,  [esi+2]                ; next opcode byte
add   esi, 3                      ; advance pcode pointer
jmp   [_tblByteDisp + eax*4]      ; dispatch next

Variations across suffixes (FPR4/FPR8/Var/Cy/Str/Darg) replace the central push/pop dword [eax] with the appropriate width-specific helper (fld/fst for FPU types, __vbaCopyBytes/__vbaStrCopy for BSTRs, the 16-byte Variant copy routine for Var, etc.). The base-computation step (add eax, [ebp+10h]) is identical across all 50 distinct handlers analyzed in the IWMem/WMem set.

Encoding, evidence and notes
Encoding

Encoding: FE D3 (lead byte FE selects table 4), then 2 operand byte(s); total instruction length 4 byte(s).
No printf operands are declared, but the instruction still consumes operand bytes; see the size above and the observed bytes below. (Phase 3a: flag=0 does not mean 'no operands'.)

Evidence and notes

Emitted by VB6 SP6 (P-code): not observed in about 3,070 probe programs. The slot exists in the runtime's dispatch table, but no tested source construct makes the compiler emit it.

Handler: 0x6610A5E2, shared by 4 dispatch slots (real opcode #694). This is a duplicate slot of (4,D2) WMemLdStr. Other slots: (4,D2) WMemLdStr, (4,D7) WMemLdStr, (4,D8) WMemLdStr.

Family note: Phase 4: never emitted by VB6 SP6. Contexts tried include class/form/module statics, member UDTs with With, WithEvents, Implements, ActiveX DLL/EXE globals (these compile to FMem*), UserControl, PropertyPage, ActiveX Document, Add-in, DHTML and DataReport projects. Handler base [ebp+10h] (dispatcher arg 3) has no known source construct. IIS WebClass projects are untested.

Slots sharing this handler

(4,0xD2) WMemLdStr, (4,0xD7) WMemLdStr, (4,0xD8) WMemLdStr

Description: draft, by claude-opus-4.7. Handler 0x6610A5E2, dispatch slot 0x66108060, modOpcodes line 1286.

WMemLdStr

(4,0xD7)not emitteddup of (4,D2)handler #694Stringconfirmed_handler
LOAD a BSTR pointer (VB6 String) at [W-base+offset] via the procedure's secondary-object pointer [ebp+10h] (W-base) (4-byte (pointer)).

Handler analysis (idalib, MSVBVM60.dll build 6.00.8268). Reads a 2-byte signed offset from the instruction stream and adds it to the pointer held at the fixed frame slot [ebp+10h]. That slot is set once by the procedure's caller ([ebp+10h] is procedure-invocation argument 3) and is never written by any handler in the ENGINE segment -- it is stable for the lifetime of the procedure.

This is a WMem variant: it accesses [ebp+10h] + offset directly. The slot is treated as a BSTR pointer (VB6 String) value.

Stack: [...] -> [..., (*([ebp+10h] + offset)):Str]

**Distinction from the corresponding Mem* opcode (non-W counterpart):** the regular Mem* family uses the runtime cache at [ebp-4Ch], which is updated by every preceding FLdPr, FLdPrThis, NewIfNullAd, Ary1LdPr, or LdPrVar instruction. The W-family bypasses that cache and uses the stable [ebp+10h] pointer instead -- so the W-base does not require a preceding object-load opcode to be set.

Identity of [ebp+10h] is not yet pinned. Handler analysis establishes the mechanical behavior; the source-language construct that establishes this secondary object pointer (parent scope, procedure descriptor, outer-class pointer, etc.) is not yet verified. PDFStreamDumper's corpus has zero occurrences of this family, suggesting the construct is rare in typical VB6 code. A targeted probe in Phase 4 should resolve which language-level construct emits these opcodes.

When the compiler emits it

Emitted when the compiler accesses a member through a STABLE, caller-supplied object pointer (the secondary slot at [ebp+10h]) rather than through the runtime object-load cache that Mem* uses. The specific source-language construct that establishes the W-base has not yet been pinned by handler analysis alone -- PDFStreamDumper's corpus has zero occurrences of the entire IWMem/WMem family, suggesting the construct is uncommon in typical VB6 code. Candidate emit triggers worth probing in Phase 4: nested-class member access, parent-scope references from inside an event handler, or compiler-synthesized accessors that have access to a known-stable secondary pointer.

Handler analysis

Handler label: label near 0x6610a5e2 at 0x6610a5e2 in MSVBVM60.dll (build 6.00.8268).

Canonical 8-instruction body:

movsx eax, word ptr [esi]        ; 2-byte signed offset
add   eax, [ebp+10h]              ; eax = W-base + offset
push  dword ptr [eax]             ; push value at *eax
xor   eax, eax
mov   al,  [esi+2]                ; next opcode byte
add   esi, 3                      ; advance pcode pointer
jmp   [_tblByteDisp + eax*4]      ; dispatch next

Variations across suffixes (FPR4/FPR8/Var/Cy/Str/Darg) replace the central push/pop dword [eax] with the appropriate width-specific helper (fld/fst for FPU types, __vbaCopyBytes/__vbaStrCopy for BSTRs, the 16-byte Variant copy routine for Var, etc.). The base-computation step (add eax, [ebp+10h]) is identical across all 50 distinct handlers analyzed in the IWMem/WMem set.

Encoding, evidence and notes
Encoding

Encoding: FE D7 (lead byte FE selects table 4), then 2 operand byte(s); total instruction length 4 byte(s).
No printf operands are declared, but the instruction still consumes operand bytes; see the size above and the observed bytes below. (Phase 3a: flag=0 does not mean 'no operands'.)

Evidence and notes

Emitted by VB6 SP6 (P-code): not observed in about 3,070 probe programs. The slot exists in the runtime's dispatch table, but no tested source construct makes the compiler emit it.

Handler: 0x6610A5E2, shared by 4 dispatch slots (real opcode #694). This is a duplicate slot of (4,D2) WMemLdStr. Other slots: (4,D2) WMemLdStr, (4,D3) WMemLdStr, (4,D8) WMemLdStr.

Family note: Phase 4: never emitted by VB6 SP6. Contexts tried include class/form/module statics, member UDTs with With, WithEvents, Implements, ActiveX DLL/EXE globals (these compile to FMem*), UserControl, PropertyPage, ActiveX Document, Add-in, DHTML and DataReport projects. Handler base [ebp+10h] (dispatcher arg 3) has no known source construct. IIS WebClass projects are untested.

Slots sharing this handler

(4,0xD2) WMemLdStr, (4,0xD3) WMemLdStr, (4,0xD8) WMemLdStr

Description: draft, by claude-opus-4.7. Handler 0x6610A5E2, dispatch slot 0x66108070, modOpcodes line 1290.

WMemLdStr

(4,0xD8)not emitteddup of (4,D2)handler #694Stringconfirmed_handler
LOAD a BSTR pointer (VB6 String) at [W-base+offset] via the procedure's secondary-object pointer [ebp+10h] (W-base) (4-byte (pointer)).

Handler analysis (idalib, MSVBVM60.dll build 6.00.8268). Reads a 2-byte signed offset from the instruction stream and adds it to the pointer held at the fixed frame slot [ebp+10h]. That slot is set once by the procedure's caller ([ebp+10h] is procedure-invocation argument 3) and is never written by any handler in the ENGINE segment -- it is stable for the lifetime of the procedure.

This is a WMem variant: it accesses [ebp+10h] + offset directly. The slot is treated as a BSTR pointer (VB6 String) value.

Stack: [...] -> [..., (*([ebp+10h] + offset)):Str]

**Distinction from the corresponding Mem* opcode (non-W counterpart):** the regular Mem* family uses the runtime cache at [ebp-4Ch], which is updated by every preceding FLdPr, FLdPrThis, NewIfNullAd, Ary1LdPr, or LdPrVar instruction. The W-family bypasses that cache and uses the stable [ebp+10h] pointer instead -- so the W-base does not require a preceding object-load opcode to be set.

Identity of [ebp+10h] is not yet pinned. Handler analysis establishes the mechanical behavior; the source-language construct that establishes this secondary object pointer (parent scope, procedure descriptor, outer-class pointer, etc.) is not yet verified. PDFStreamDumper's corpus has zero occurrences of this family, suggesting the construct is rare in typical VB6 code. A targeted probe in Phase 4 should resolve which language-level construct emits these opcodes.

When the compiler emits it

Emitted when the compiler accesses a member through a STABLE, caller-supplied object pointer (the secondary slot at [ebp+10h]) rather than through the runtime object-load cache that Mem* uses. The specific source-language construct that establishes the W-base has not yet been pinned by handler analysis alone -- PDFStreamDumper's corpus has zero occurrences of the entire IWMem/WMem family, suggesting the construct is uncommon in typical VB6 code. Candidate emit triggers worth probing in Phase 4: nested-class member access, parent-scope references from inside an event handler, or compiler-synthesized accessors that have access to a known-stable secondary pointer.

Handler analysis

Handler label: label near 0x6610a5e2 at 0x6610a5e2 in MSVBVM60.dll (build 6.00.8268).

Canonical 8-instruction body:

movsx eax, word ptr [esi]        ; 2-byte signed offset
add   eax, [ebp+10h]              ; eax = W-base + offset
push  dword ptr [eax]             ; push value at *eax
xor   eax, eax
mov   al,  [esi+2]                ; next opcode byte
add   esi, 3                      ; advance pcode pointer
jmp   [_tblByteDisp + eax*4]      ; dispatch next

Variations across suffixes (FPR4/FPR8/Var/Cy/Str/Darg) replace the central push/pop dword [eax] with the appropriate width-specific helper (fld/fst for FPU types, __vbaCopyBytes/__vbaStrCopy for BSTRs, the 16-byte Variant copy routine for Var, etc.). The base-computation step (add eax, [ebp+10h]) is identical across all 50 distinct handlers analyzed in the IWMem/WMem set.

Encoding, evidence and notes
Encoding

Encoding: FE D8 (lead byte FE selects table 4), then 2 operand byte(s); total instruction length 4 byte(s).
No printf operands are declared, but the instruction still consumes operand bytes; see the size above and the observed bytes below. (Phase 3a: flag=0 does not mean 'no operands'.)

Evidence and notes

Emitted by VB6 SP6 (P-code): not observed in about 3,070 probe programs. The slot exists in the runtime's dispatch table, but no tested source construct makes the compiler emit it.

Handler: 0x6610A5E2, shared by 4 dispatch slots (real opcode #694). This is a duplicate slot of (4,D2) WMemLdStr. Other slots: (4,D2) WMemLdStr, (4,D3) WMemLdStr, (4,D7) WMemLdStr.

Family note: Phase 4: never emitted by VB6 SP6. Contexts tried include class/form/module statics, member UDTs with With, WithEvents, Implements, ActiveX DLL/EXE globals (these compile to FMem*), UserControl, PropertyPage, ActiveX Document, Add-in, DHTML and DataReport projects. Handler base [ebp+10h] (dispatcher arg 3) has no known source construct. IIS WebClass projects are untested.

Slots sharing this handler

(4,0xD2) WMemLdStr, (4,0xD3) WMemLdStr, (4,0xD7) WMemLdStr

Description: draft, by claude-opus-4.7. Handler 0x6610A5E2, dispatch slot 0x66108074, modOpcodes line 1291.

WMemLdUI1

(4,0xD0)not emittedhandler #692Integercontextual
LOAD a 8-bit unsigned (VB6 Byte) at [W-base+offset] via the procedure's secondary-object pointer [ebp+10h] (W-base) (1-byte).

Handler analysis (idalib, MSVBVM60.dll build 6.00.8268). Reads a 2-byte signed offset from the instruction stream and adds it to the pointer held at the fixed frame slot [ebp+10h]. That slot is set once by the procedure's caller ([ebp+10h] is procedure-invocation argument 3) and is never written by any handler in the ENGINE segment -- it is stable for the lifetime of the procedure.

This is a WMem variant: it accesses [ebp+10h] + offset directly. The slot is treated as a 8-bit unsigned (VB6 Byte) value.

Stack: [...] -> [..., (*([ebp+10h] + offset)):UI1]

**Distinction from the corresponding Mem* opcode (non-W counterpart):** the regular Mem* family uses the runtime cache at [ebp-4Ch], which is updated by every preceding FLdPr, FLdPrThis, NewIfNullAd, Ary1LdPr, or LdPrVar instruction. The W-family bypasses that cache and uses the stable [ebp+10h] pointer instead -- so the W-base does not require a preceding object-load opcode to be set.

Identity of [ebp+10h] is not yet pinned. Handler analysis establishes the mechanical behavior; the source-language construct that establishes this secondary object pointer (parent scope, procedure descriptor, outer-class pointer, etc.) is not yet verified. PDFStreamDumper's corpus has zero occurrences of this family, suggesting the construct is rare in typical VB6 code. A targeted probe in Phase 4 should resolve which language-level construct emits these opcodes.

When the compiler emits it

Emitted when the compiler accesses a member through a STABLE, caller-supplied object pointer (the secondary slot at [ebp+10h]) rather than through the runtime object-load cache that Mem* uses. The specific source-language construct that establishes the W-base has not yet been pinned by handler analysis alone -- PDFStreamDumper's corpus has zero occurrences of the entire IWMem/WMem family, suggesting the construct is uncommon in typical VB6 code. Candidate emit triggers worth probing in Phase 4: nested-class member access, parent-scope references from inside an event handler, or compiler-synthesized accessors that have access to a known-stable secondary pointer.

Handler analysis

Handler label: label near 0x6610a5b0 at 0x6610a5b0 in MSVBVM60.dll (build 6.00.8268).

Canonical 8-instruction body:

movsx eax, word ptr [esi]        ; 2-byte signed offset
add   eax, [ebp+10h]              ; eax = W-base + offset
push  dword ptr [eax]             ; push value at *eax
xor   eax, eax
mov   al,  [esi+2]                ; next opcode byte
add   esi, 3                      ; advance pcode pointer
jmp   [_tblByteDisp + eax*4]      ; dispatch next

Variations across suffixes (FPR4/FPR8/Var/Cy/Str/Darg) replace the central push/pop dword [eax] with the appropriate width-specific helper (fld/fst for FPU types, __vbaCopyBytes/__vbaStrCopy for BSTRs, the 16-byte Variant copy routine for Var, etc.). The base-computation step (add eax, [ebp+10h]) is identical across all 50 distinct handlers analyzed in the IWMem/WMem set.

Encoding, evidence and notes
Encoding

Encoding: FE D0 (lead byte FE selects table 4), then 2 operand byte(s); total instruction length 4 byte(s).
No printf operands are declared, but the instruction still consumes operand bytes; see the size above and the observed bytes below. (Phase 3a: flag=0 does not mean 'no operands'.)

Evidence and notes

Emitted by VB6 SP6 (P-code): not observed in about 3,070 probe programs. The slot exists in the runtime's dispatch table, but no tested source construct makes the compiler emit it.

Handler: 0x6610A5B0, unique to this slot (real opcode #692).

Family note: Phase 4: never emitted by VB6 SP6. Contexts tried include class/form/module statics, member UDTs with With, WithEvents, Implements, ActiveX DLL/EXE globals (these compile to FMem*), UserControl, PropertyPage, ActiveX Document, Add-in, DHTML and DataReport projects. Handler base [ebp+10h] (dispatcher arg 3) has no known source construct. IIS WebClass projects are untested.

Description: draft, by claude-opus-4.7. Handler 0x6610A5B0, dispatch slot 0x66108054, modOpcodes line 1283.

WMemLdVar

(4,0xDD)not emittedhandler #699Variantcontextual
LOAD a Variant at [W-base+offset] via the procedure's secondary-object pointer [ebp+10h] (W-base) (16-byte).

Handler analysis (idalib, MSVBVM60.dll build 6.00.8268). Reads a 2-byte signed offset from the instruction stream and adds it to the pointer held at the fixed frame slot [ebp+10h]. That slot is set once by the procedure's caller ([ebp+10h] is procedure-invocation argument 3) and is never written by any handler in the ENGINE segment -- it is stable for the lifetime of the procedure.

This is a WMem variant: it accesses [ebp+10h] + offset directly. The slot is treated as a Variant value.

Stack: [...] -> [..., (*([ebp+10h] + offset)):Var]

**Distinction from the corresponding Mem* opcode (non-W counterpart):** the regular Mem* family uses the runtime cache at [ebp-4Ch], which is updated by every preceding FLdPr, FLdPrThis, NewIfNullAd, Ary1LdPr, or LdPrVar instruction. The W-family bypasses that cache and uses the stable [ebp+10h] pointer instead -- so the W-base does not require a preceding object-load opcode to be set.

Identity of [ebp+10h] is not yet pinned. Handler analysis establishes the mechanical behavior; the source-language construct that establishes this secondary object pointer (parent scope, procedure descriptor, outer-class pointer, etc.) is not yet verified. PDFStreamDumper's corpus has zero occurrences of this family, suggesting the construct is rare in typical VB6 code. A targeted probe in Phase 4 should resolve which language-level construct emits these opcodes.

When the compiler emits it

Emitted when the compiler accesses a member through a STABLE, caller-supplied object pointer (the secondary slot at [ebp+10h]) rather than through the runtime object-load cache that Mem* uses. The specific source-language construct that establishes the W-base has not yet been pinned by handler analysis alone -- PDFStreamDumper's corpus has zero occurrences of the entire IWMem/WMem family, suggesting the construct is uncommon in typical VB6 code. Candidate emit triggers worth probing in Phase 4: nested-class member access, parent-scope references from inside an event handler, or compiler-synthesized accessors that have access to a known-stable secondary pointer.

Handler analysis

Handler label: label near 0x6610b1ca at 0x6610b1ca in MSVBVM60.dll (build 6.00.8268).

Canonical 8-instruction body:

movsx eax, word ptr [esi]        ; 2-byte signed offset
add   eax, [ebp+10h]              ; eax = W-base + offset
push  dword ptr [eax]             ; push value at *eax
xor   eax, eax
mov   al,  [esi+2]                ; next opcode byte
add   esi, 3                      ; advance pcode pointer
jmp   [_tblByteDisp + eax*4]      ; dispatch next

Variations across suffixes (FPR4/FPR8/Var/Cy/Str/Darg) replace the central push/pop dword [eax] with the appropriate width-specific helper (fld/fst for FPU types, __vbaCopyBytes/__vbaStrCopy for BSTRs, the 16-byte Variant copy routine for Var, etc.). The base-computation step (add eax, [ebp+10h]) is identical across all 50 distinct handlers analyzed in the IWMem/WMem set.

Encoding, evidence and notes
Encoding

Encoding: FE DD (lead byte FE selects table 4), then 2 operand byte(s); total instruction length 4 byte(s).
No printf operands are declared, but the instruction still consumes operand bytes; see the size above and the observed bytes below. (Phase 3a: flag=0 does not mean 'no operands'.)

Evidence and notes

Emitted by VB6 SP6 (P-code): not observed in about 3,070 probe programs. The slot exists in the runtime's dispatch table, but no tested source construct makes the compiler emit it.

Handler: 0x6610B1CA, unique to this slot (real opcode #699).

Family note: Phase 4: never emitted by VB6 SP6. Contexts tried include class/form/module statics, member UDTs with With, WithEvents, Implements, ActiveX DLL/EXE globals (these compile to FMem*), UserControl, PropertyPage, ActiveX Document, Add-in, DHTML and DataReport projects. Handler base [ebp+10h] (dispatcher arg 3) has no known source construct. IIS WebClass projects are untested.

Description: draft, by claude-opus-4.7. Handler 0x6610B1CA, dispatch slot 0x66108088, modOpcodes line 1295.

WMem_Store

WMem stores: write at [W-base + offset]. Prefix: W + Mem + St (Phase 3a).

WMemStAd

(4,0xE8)not emittedhandler #706Object / COMcontextual
STORE a raw 32-bit address at [W-base+offset] via the procedure's secondary-object pointer [ebp+10h] (W-base) (4-byte (address)).

Handler analysis (idalib, MSVBVM60.dll build 6.00.8268). Reads a 2-byte signed offset from the instruction stream and adds it to the pointer held at the fixed frame slot [ebp+10h]. That slot is set once by the procedure's caller ([ebp+10h] is procedure-invocation argument 3) and is never written by any handler in the ENGINE segment -- it is stable for the lifetime of the procedure.

This is a WMem variant: it accesses [ebp+10h] + offset directly. The slot is treated as a raw 32-bit address value.

Stack: [..., v:Ad] -> [...] (*([ebp+10h] + offset) <- v)

**Distinction from the corresponding Mem* opcode (non-W counterpart):** the regular Mem* family uses the runtime cache at [ebp-4Ch], which is updated by every preceding FLdPr, FLdPrThis, NewIfNullAd, Ary1LdPr, or LdPrVar instruction. The W-family bypasses that cache and uses the stable [ebp+10h] pointer instead -- so the W-base does not require a preceding object-load opcode to be set.

Identity of [ebp+10h] is not yet pinned. Handler analysis establishes the mechanical behavior; the source-language construct that establishes this secondary object pointer (parent scope, procedure descriptor, outer-class pointer, etc.) is not yet verified. PDFStreamDumper's corpus has zero occurrences of this family, suggesting the construct is rare in typical VB6 code. A targeted probe in Phase 4 should resolve which language-level construct emits these opcodes.

When the compiler emits it

Emitted when the compiler accesses a member through a STABLE, caller-supplied object pointer (the secondary slot at [ebp+10h]) rather than through the runtime object-load cache that Mem* uses. The specific source-language construct that establishes the W-base has not yet been pinned by handler analysis alone -- PDFStreamDumper's corpus has zero occurrences of the entire IWMem/WMem family, suggesting the construct is uncommon in typical VB6 code. Candidate emit triggers worth probing in Phase 4: nested-class member access, parent-scope references from inside an event handler, or compiler-synthesized accessors that have access to a known-stable secondary pointer.

Handler analysis

Handler label: label near 0x6610b3c6 at 0x6610b3c6 in MSVBVM60.dll (build 6.00.8268).

Canonical 8-instruction body:

movsx eax, word ptr [esi]        ; 2-byte signed offset
add   eax, [ebp+10h]              ; eax = W-base + offset
pop   dword ptr [eax]             ; pop value, write to *eax
xor   eax, eax
mov   al,  [esi+2]                ; next opcode byte
add   esi, 3                      ; advance pcode pointer
jmp   [_tblByteDisp + eax*4]      ; dispatch next

Variations across suffixes (FPR4/FPR8/Var/Cy/Str/Darg) replace the central push/pop dword [eax] with the appropriate width-specific helper (fld/fst for FPU types, __vbaCopyBytes/__vbaStrCopy for BSTRs, the 16-byte Variant copy routine for Var, etc.). The base-computation step (add eax, [ebp+10h]) is identical across all 50 distinct handlers analyzed in the IWMem/WMem set.

Encoding, evidence and notes
Encoding

Encoding: FE E8 (lead byte FE selects table 4), then 2 operand byte(s); total instruction length 4 byte(s).
No printf operands are declared, but the instruction still consumes operand bytes; see the size above and the observed bytes below. (Phase 3a: flag=0 does not mean 'no operands'.)

Evidence and notes

Emitted by VB6 SP6 (P-code): not observed in about 3,070 probe programs. The slot exists in the runtime's dispatch table, but no tested source construct makes the compiler emit it.

Handler: 0x6610B3C6, unique to this slot (real opcode #706).

Family note: Phase 4: never emitted by VB6 SP6. Contexts tried include class/form/module statics, member UDTs with With, WithEvents, Implements, ActiveX DLL/EXE globals (these compile to FMem*), UserControl, PropertyPage, ActiveX Document, Add-in, DHTML and DataReport projects. Handler base [ebp+10h] (dispatcher arg 3) has no known source construct. IIS WebClass projects are untested.

Description: draft, by claude-opus-4.7. Handler 0x6610B3C6, dispatch slot 0x661080B4, modOpcodes line 1304.

WMemStAdFunc

(4,0xEF)not emittedhandler #713Object / COMcontextual
STORE a value of suffix `` at [W-base+offset] via the procedure's secondary-object pointer [ebp+10h] (W-base) (unknown-size).

Handler analysis (idalib, MSVBVM60.dll build 6.00.8268). Reads a 2-byte signed offset from the instruction stream and adds it to the pointer held at the fixed frame slot [ebp+10h]. That slot is set once by the procedure's caller ([ebp+10h] is procedure-invocation argument 3) and is never written by any handler in the ENGINE segment -- it is stable for the lifetime of the procedure.

This is a WMem variant: it accesses [ebp+10h] + offset directly. The slot is treated as a value of suffix `` value.

Stack: [..., v:] -> [...] (*([ebp+10h] + offset) <- v)

**Distinction from the corresponding Mem* opcode (non-W counterpart):** the regular Mem* family uses the runtime cache at [ebp-4Ch], which is updated by every preceding FLdPr, FLdPrThis, NewIfNullAd, Ary1LdPr, or LdPrVar instruction. The W-family bypasses that cache and uses the stable [ebp+10h] pointer instead -- so the W-base does not require a preceding object-load opcode to be set.

Identity of [ebp+10h] is not yet pinned. Handler analysis establishes the mechanical behavior; the source-language construct that establishes this secondary object pointer (parent scope, procedure descriptor, outer-class pointer, etc.) is not yet verified. PDFStreamDumper's corpus has zero occurrences of this family, suggesting the construct is rare in typical VB6 code. A targeted probe in Phase 4 should resolve which language-level construct emits these opcodes.

When the compiler emits it

Emitted when the compiler accesses a member through a STABLE, caller-supplied object pointer (the secondary slot at [ebp+10h]) rather than through the runtime object-load cache that Mem* uses. The specific source-language construct that establishes the W-base has not yet been pinned by handler analysis alone -- PDFStreamDumper's corpus has zero occurrences of the entire IWMem/WMem family, suggesting the construct is uncommon in typical VB6 code. Candidate emit triggers worth probing in Phase 4: nested-class member access, parent-scope references from inside an event handler, or compiler-synthesized accessors that have access to a known-stable secondary pointer.

Handler analysis

Handler label: label near 0x6610b3b3 at 0x6610b3b3 in MSVBVM60.dll (build 6.00.8268).

Canonical 8-instruction body:

movsx eax, word ptr [esi]        ; 2-byte signed offset
add   eax, [ebp+10h]              ; eax = W-base + offset
pop   dword ptr [eax]             ; pop value, write to *eax
xor   eax, eax
mov   al,  [esi+2]                ; next opcode byte
add   esi, 3                      ; advance pcode pointer
jmp   [_tblByteDisp + eax*4]      ; dispatch next

Variations across suffixes (FPR4/FPR8/Var/Cy/Str/Darg) replace the central push/pop dword [eax] with the appropriate width-specific helper (fld/fst for FPU types, __vbaCopyBytes/__vbaStrCopy for BSTRs, the 16-byte Variant copy routine for Var, etc.). The base-computation step (add eax, [ebp+10h]) is identical across all 50 distinct handlers analyzed in the IWMem/WMem set.

Encoding, evidence and notes
Encoding

Encoding: FE EF (lead byte FE selects table 4), then 2 operand byte(s); total instruction length 4 byte(s).
No printf operands are declared, but the instruction still consumes operand bytes; see the size above and the observed bytes below. (Phase 3a: flag=0 does not mean 'no operands'.)

Evidence and notes

Emitted by VB6 SP6 (P-code): not observed in about 3,070 probe programs. The slot exists in the runtime's dispatch table, but no tested source construct makes the compiler emit it.

Handler: 0x6610B3B3, unique to this slot (real opcode #713).

Family note: Phase 4: never emitted by VB6 SP6. Contexts tried include class/form/module statics, member UDTs with With, WithEvents, Implements, ActiveX DLL/EXE globals (these compile to FMem*), UserControl, PropertyPage, ActiveX Document, Add-in, DHTML and DataReport projects. Handler base [ebp+10h] (dispatcher arg 3) has no known source construct. IIS WebClass projects are untested.

Description: draft, by claude-opus-4.7. Handler 0x6610B3B3, dispatch slot 0x661080D0, modOpcodes line 1311.

WMemStFPR4

(4,0xE9)not emittedhandler #707Floating pointcontextual
STORE a Single via x87 FPU at [W-base+offset] via the procedure's secondary-object pointer [ebp+10h] (W-base) (4-byte (FPU)).

Handler analysis (idalib, MSVBVM60.dll build 6.00.8268). Reads a 2-byte signed offset from the instruction stream and adds it to the pointer held at the fixed frame slot [ebp+10h]. That slot is set once by the procedure's caller ([ebp+10h] is procedure-invocation argument 3) and is never written by any handler in the ENGINE segment -- it is stable for the lifetime of the procedure.

This is a WMem variant: it accesses [ebp+10h] + offset directly. The slot is treated as a Single via x87 FPU value.

Stack: [..., v:FPR4] -> [...] (*([ebp+10h] + offset) <- v)

**Distinction from the corresponding Mem* opcode (non-W counterpart):** the regular Mem* family uses the runtime cache at [ebp-4Ch], which is updated by every preceding FLdPr, FLdPrThis, NewIfNullAd, Ary1LdPr, or LdPrVar instruction. The W-family bypasses that cache and uses the stable [ebp+10h] pointer instead -- so the W-base does not require a preceding object-load opcode to be set.

Identity of [ebp+10h] is not yet pinned. Handler analysis establishes the mechanical behavior; the source-language construct that establishes this secondary object pointer (parent scope, procedure descriptor, outer-class pointer, etc.) is not yet verified. PDFStreamDumper's corpus has zero occurrences of this family, suggesting the construct is rare in typical VB6 code. A targeted probe in Phase 4 should resolve which language-level construct emits these opcodes.

When the compiler emits it

Emitted when the compiler accesses a member through a STABLE, caller-supplied object pointer (the secondary slot at [ebp+10h]) rather than through the runtime object-load cache that Mem* uses. The specific source-language construct that establishes the W-base has not yet been pinned by handler analysis alone -- PDFStreamDumper's corpus has zero occurrences of the entire IWMem/WMem family, suggesting the construct is uncommon in typical VB6 code. Candidate emit triggers worth probing in Phase 4: nested-class member access, parent-scope references from inside an event handler, or compiler-synthesized accessors that have access to a known-stable secondary pointer.

Handler analysis

Handler label: label near 0x6610a6b9 at 0x6610a6b9 in MSVBVM60.dll (build 6.00.8268).

Canonical 8-instruction body:

movsx eax, word ptr [esi]        ; 2-byte signed offset
add   eax, [ebp+10h]              ; eax = W-base + offset
pop   dword ptr [eax]             ; pop value, write to *eax
xor   eax, eax
mov   al,  [esi+2]                ; next opcode byte
add   esi, 3                      ; advance pcode pointer
jmp   [_tblByteDisp + eax*4]      ; dispatch next

Variations across suffixes (FPR4/FPR8/Var/Cy/Str/Darg) replace the central push/pop dword [eax] with the appropriate width-specific helper (fld/fst for FPU types, __vbaCopyBytes/__vbaStrCopy for BSTRs, the 16-byte Variant copy routine for Var, etc.). The base-computation step (add eax, [ebp+10h]) is identical across all 50 distinct handlers analyzed in the IWMem/WMem set.

Encoding, evidence and notes
Encoding

Encoding: FE E9 (lead byte FE selects table 4), then 2 operand byte(s); total instruction length 4 byte(s).
No printf operands are declared, but the instruction still consumes operand bytes; see the size above and the observed bytes below. (Phase 3a: flag=0 does not mean 'no operands'.)

Evidence and notes

Emitted by VB6 SP6 (P-code): not observed in about 3,070 probe programs. The slot exists in the runtime's dispatch table, but no tested source construct makes the compiler emit it.

Handler: 0x6610A6B9, unique to this slot (real opcode #707).

Family note: Phase 4: never emitted by VB6 SP6. Contexts tried include class/form/module statics, member UDTs with With, WithEvents, Implements, ActiveX DLL/EXE globals (these compile to FMem*), UserControl, PropertyPage, ActiveX Document, Add-in, DHTML and DataReport projects. Handler base [ebp+10h] (dispatcher arg 3) has no known source construct. IIS WebClass projects are untested.

Description: draft, by claude-opus-4.7. Handler 0x6610A6B9, dispatch slot 0x661080B8, modOpcodes line 1305.

WMemStFPR8

(4,0xEA)not emittedhandler #708Floating pointcontextual
STORE a Double via x87 FPU at [W-base+offset] via the procedure's secondary-object pointer [ebp+10h] (W-base) (8-byte (FPU)).

Handler analysis (idalib, MSVBVM60.dll build 6.00.8268). Reads a 2-byte signed offset from the instruction stream and adds it to the pointer held at the fixed frame slot [ebp+10h]. That slot is set once by the procedure's caller ([ebp+10h] is procedure-invocation argument 3) and is never written by any handler in the ENGINE segment -- it is stable for the lifetime of the procedure.

This is a WMem variant: it accesses [ebp+10h] + offset directly. The slot is treated as a Double via x87 FPU value.

Stack: [..., v:FPR8] -> [...] (*([ebp+10h] + offset) <- v)

**Distinction from the corresponding Mem* opcode (non-W counterpart):** the regular Mem* family uses the runtime cache at [ebp-4Ch], which is updated by every preceding FLdPr, FLdPrThis, NewIfNullAd, Ary1LdPr, or LdPrVar instruction. The W-family bypasses that cache and uses the stable [ebp+10h] pointer instead -- so the W-base does not require a preceding object-load opcode to be set.

Identity of [ebp+10h] is not yet pinned. Handler analysis establishes the mechanical behavior; the source-language construct that establishes this secondary object pointer (parent scope, procedure descriptor, outer-class pointer, etc.) is not yet verified. PDFStreamDumper's corpus has zero occurrences of this family, suggesting the construct is rare in typical VB6 code. A targeted probe in Phase 4 should resolve which language-level construct emits these opcodes.

When the compiler emits it

Emitted when the compiler accesses a member through a STABLE, caller-supplied object pointer (the secondary slot at [ebp+10h]) rather than through the runtime object-load cache that Mem* uses. The specific source-language construct that establishes the W-base has not yet been pinned by handler analysis alone -- PDFStreamDumper's corpus has zero occurrences of the entire IWMem/WMem family, suggesting the construct is uncommon in typical VB6 code. Candidate emit triggers worth probing in Phase 4: nested-class member access, parent-scope references from inside an event handler, or compiler-synthesized accessors that have access to a known-stable secondary pointer.

Handler analysis

Handler label: label near 0x6610a6da at 0x6610a6da in MSVBVM60.dll (build 6.00.8268).

Canonical 8-instruction body:

movsx eax, word ptr [esi]        ; 2-byte signed offset
add   eax, [ebp+10h]              ; eax = W-base + offset
pop   dword ptr [eax]             ; pop value, write to *eax
xor   eax, eax
mov   al,  [esi+2]                ; next opcode byte
add   esi, 3                      ; advance pcode pointer
jmp   [_tblByteDisp + eax*4]      ; dispatch next

Variations across suffixes (FPR4/FPR8/Var/Cy/Str/Darg) replace the central push/pop dword [eax] with the appropriate width-specific helper (fld/fst for FPU types, __vbaCopyBytes/__vbaStrCopy for BSTRs, the 16-byte Variant copy routine for Var, etc.). The base-computation step (add eax, [ebp+10h]) is identical across all 50 distinct handlers analyzed in the IWMem/WMem set.

Encoding, evidence and notes
Encoding

Encoding: FE EA (lead byte FE selects table 4), then 2 operand byte(s); total instruction length 4 byte(s).
No printf operands are declared, but the instruction still consumes operand bytes; see the size above and the observed bytes below. (Phase 3a: flag=0 does not mean 'no operands'.)

Evidence and notes

Emitted by VB6 SP6 (P-code): not observed in about 3,070 probe programs. The slot exists in the runtime's dispatch table, but no tested source construct makes the compiler emit it.

Handler: 0x6610A6DA, unique to this slot (real opcode #708).

Family note: Phase 4: never emitted by VB6 SP6. Contexts tried include class/form/module statics, member UDTs with With, WithEvents, Implements, ActiveX DLL/EXE globals (these compile to FMem*), UserControl, PropertyPage, ActiveX Document, Add-in, DHTML and DataReport projects. Handler base [ebp+10h] (dispatcher arg 3) has no known source construct. IIS WebClass projects are untested.

Description: draft, by claude-opus-4.7. Handler 0x6610A6DA, dispatch slot 0x661080BC, modOpcodes line 1306.

WMemStI2

(4,0xE1)not emittedhandler #701Integercontextual
STORE a 16-bit signed integer (VB6 Integer) at [W-base+offset] via the procedure's secondary-object pointer [ebp+10h] (W-base) (2-byte).

Handler analysis (idalib, MSVBVM60.dll build 6.00.8268). Reads a 2-byte signed offset from the instruction stream and adds it to the pointer held at the fixed frame slot [ebp+10h]. That slot is set once by the procedure's caller ([ebp+10h] is procedure-invocation argument 3) and is never written by any handler in the ENGINE segment -- it is stable for the lifetime of the procedure.

This is a WMem variant: it accesses [ebp+10h] + offset directly. The slot is treated as a 16-bit signed integer (VB6 Integer) value.

Stack: [..., v:I2] -> [...] (*([ebp+10h] + offset) <- v)

**Distinction from the corresponding Mem* opcode (non-W counterpart):** the regular Mem* family uses the runtime cache at [ebp-4Ch], which is updated by every preceding FLdPr, FLdPrThis, NewIfNullAd, Ary1LdPr, or LdPrVar instruction. The W-family bypasses that cache and uses the stable [ebp+10h] pointer instead -- so the W-base does not require a preceding object-load opcode to be set.

Identity of [ebp+10h] is not yet pinned. Handler analysis establishes the mechanical behavior; the source-language construct that establishes this secondary object pointer (parent scope, procedure descriptor, outer-class pointer, etc.) is not yet verified. PDFStreamDumper's corpus has zero occurrences of this family, suggesting the construct is rare in typical VB6 code. A targeted probe in Phase 4 should resolve which language-level construct emits these opcodes.

When the compiler emits it

Emitted when the compiler accesses a member through a STABLE, caller-supplied object pointer (the secondary slot at [ebp+10h]) rather than through the runtime object-load cache that Mem* uses. The specific source-language construct that establishes the W-base has not yet been pinned by handler analysis alone -- PDFStreamDumper's corpus has zero occurrences of the entire IWMem/WMem family, suggesting the construct is uncommon in typical VB6 code. Candidate emit triggers worth probing in Phase 4: nested-class member access, parent-scope references from inside an event handler, or compiler-synthesized accessors that have access to a known-stable secondary pointer.

Handler analysis

Handler label: label near 0x6610a66f at 0x6610a66f in MSVBVM60.dll (build 6.00.8268).

Canonical 8-instruction body:

movsx eax, word ptr [esi]        ; 2-byte signed offset
add   eax, [ebp+10h]              ; eax = W-base + offset
pop   dword ptr [eax]             ; pop value, write to *eax
xor   eax, eax
mov   al,  [esi+2]                ; next opcode byte
add   esi, 3                      ; advance pcode pointer
jmp   [_tblByteDisp + eax*4]      ; dispatch next

Variations across suffixes (FPR4/FPR8/Var/Cy/Str/Darg) replace the central push/pop dword [eax] with the appropriate width-specific helper (fld/fst for FPU types, __vbaCopyBytes/__vbaStrCopy for BSTRs, the 16-byte Variant copy routine for Var, etc.). The base-computation step (add eax, [ebp+10h]) is identical across all 50 distinct handlers analyzed in the IWMem/WMem set.

Encoding, evidence and notes
Encoding

Encoding: FE E1 (lead byte FE selects table 4), then 2 operand byte(s); total instruction length 4 byte(s).
No printf operands are declared, but the instruction still consumes operand bytes; see the size above and the observed bytes below. (Phase 3a: flag=0 does not mean 'no operands'.)

Evidence and notes

Emitted by VB6 SP6 (P-code): not observed in about 3,070 probe programs. The slot exists in the runtime's dispatch table, but no tested source construct makes the compiler emit it.

Handler: 0x6610A66F, unique to this slot (real opcode #701).

Family note: Phase 4: never emitted by VB6 SP6. Contexts tried include class/form/module statics, member UDTs with With, WithEvents, Implements, ActiveX DLL/EXE globals (these compile to FMem*), UserControl, PropertyPage, ActiveX Document, Add-in, DHTML and DataReport projects. Handler base [ebp+10h] (dispatcher arg 3) has no known source construct. IIS WebClass projects are untested.

Description: draft, by claude-opus-4.7. Handler 0x6610A66F, dispatch slot 0x66108098, modOpcodes line 1297.

WMemStR4

(4,0xE2)not emittedprimary of 2handler #702Integercontextual
Store a raw 4-byte value at [W-base + offset] (W-base = dispatcher argument [ebp+10h]); not a floating-point store.

Pops a 4-byte value and writes it to the address computed from the stable secondary pointer at [ebp+10h] plus the 16-bit offset operand. The R4 suffix means a raw 4-byte move (compare FStR4, used for Long); floating-point values have separate FPR forms.

Stack: [..., v:R4] -> [...]

When the compiler emits it

Not emitted by VB6 SP6 in any tested project type (see the W/IW family note). The source construct that uses the [ebp+10h] base is unknown.

Handler analysis

Handler label: label near 0x6610a688 at 0x6610a688 in MSVBVM60.dll (build 6.00.8268).

Canonical 8-instruction body:

movsx eax, word ptr [esi]        ; 2-byte signed offset
add   eax, [ebp+10h]              ; eax = W-base + offset
pop   dword ptr [eax]             ; pop value, write to *eax
xor   eax, eax
mov   al,  [esi+2]                ; next opcode byte
add   esi, 3                      ; advance pcode pointer
jmp   [_tblByteDisp + eax*4]      ; dispatch next

Variations across suffixes (FPR4/FPR8/Var/Cy/Str/Darg) replace the central push/pop dword [eax] with the appropriate width-specific helper (fld/fst for FPU types, __vbaCopyBytes/__vbaStrCopy for BSTRs, the 16-byte Variant copy routine for Var, etc.). The base-computation step (add eax, [ebp+10h]) is identical across all 50 distinct handlers analyzed in the IWMem/WMem set.

Encoding, evidence and notes
Encoding

Encoding: FE E2 (lead byte FE selects table 4), then 2 operand byte(s); total instruction length 4 byte(s).
No printf operands are declared, but the instruction still consumes operand bytes; see the size above and the observed bytes below. (Phase 3a: flag=0 does not mean 'no operands'.)

Evidence and notes

Emitted by VB6 SP6 (P-code): not observed in about 3,070 probe programs. The slot exists in the runtime's dispatch table, but no tested source construct makes the compiler emit it.

Handler: 0x6610A688, shared by 2 dispatch slots (real opcode #702). This is the primary slot. Other slots: (4,E3) WMemStR4.

Family note: Phase 4: never emitted by VB6 SP6. Contexts tried include class/form/module statics, member UDTs with With, WithEvents, Implements, ActiveX DLL/EXE globals (these compile to FMem*), UserControl, PropertyPage, ActiveX Document, Add-in, DHTML and DataReport projects. Handler base [ebp+10h] (dispatcher arg 3) has no known source construct. IIS WebClass projects are untested.

Slots sharing this handler

(4,0xE3) WMemStR4

Description: draft, by claude-opus-5-5. Handler 0x6610A688, dispatch slot 0x6610809C, modOpcodes line 1298.

WMemStR4

(4,0xE3)not emitteddup of (4,E2)handler #702Integerconfirmed_handler
Store a raw 4-byte value at [W-base + offset] (W-base = dispatcher argument [ebp+10h]); not a floating-point store.

Pops a 4-byte value and writes it to the address computed from the stable secondary pointer at [ebp+10h] plus the 16-bit offset operand. The R4 suffix means a raw 4-byte move (compare FStR4, used for Long); floating-point values have separate FPR forms.

Stack: [..., v:R4] -> [...]

When the compiler emits it

Not emitted by VB6 SP6 in any tested project type (see the W/IW family note). The source construct that uses the [ebp+10h] base is unknown.

Handler analysis

Handler label: label near 0x6610a688 at 0x6610a688 in MSVBVM60.dll (build 6.00.8268).

Canonical 8-instruction body:

movsx eax, word ptr [esi]        ; 2-byte signed offset
add   eax, [ebp+10h]              ; eax = W-base + offset
pop   dword ptr [eax]             ; pop value, write to *eax
xor   eax, eax
mov   al,  [esi+2]                ; next opcode byte
add   esi, 3                      ; advance pcode pointer
jmp   [_tblByteDisp + eax*4]      ; dispatch next

Variations across suffixes (FPR4/FPR8/Var/Cy/Str/Darg) replace the central push/pop dword [eax] with the appropriate width-specific helper (fld/fst for FPU types, __vbaCopyBytes/__vbaStrCopy for BSTRs, the 16-byte Variant copy routine for Var, etc.). The base-computation step (add eax, [ebp+10h]) is identical across all 50 distinct handlers analyzed in the IWMem/WMem set.

Encoding, evidence and notes
Encoding

Encoding: FE E3 (lead byte FE selects table 4), then 2 operand byte(s); total instruction length 4 byte(s).
No printf operands are declared, but the instruction still consumes operand bytes; see the size above and the observed bytes below. (Phase 3a: flag=0 does not mean 'no operands'.)

Evidence and notes

Emitted by VB6 SP6 (P-code): not observed in about 3,070 probe programs. The slot exists in the runtime's dispatch table, but no tested source construct makes the compiler emit it.

Handler: 0x6610A688, shared by 2 dispatch slots (real opcode #702). This is a duplicate slot of (4,E2) WMemStR4. Other slots: (4,E2) WMemStR4.

Family note: Phase 4: never emitted by VB6 SP6. Contexts tried include class/form/module statics, member UDTs with With, WithEvents, Implements, ActiveX DLL/EXE globals (these compile to FMem*), UserControl, PropertyPage, ActiveX Document, Add-in, DHTML and DataReport projects. Handler base [ebp+10h] (dispatcher arg 3) has no known source construct. IIS WebClass projects are untested.

Slots sharing this handler

(4,0xE2) WMemStR4

Description: draft, by claude-opus-5-5. Handler 0x6610A688, dispatch slot 0x661080A0, modOpcodes line 1299.

WMemStR8

(4,0xE4)not emittedprimary of 2handler #703Currencycontextual
Store a raw 8-byte value at [W-base + offset] (W-base = dispatcher argument [ebp+10h]); not a floating-point store.

Pops a 8-byte value and writes it to the address computed from the stable secondary pointer at [ebp+10h] plus the 16-bit offset operand. The R8 suffix means a raw 8-byte move (compare FStR4, used for Long); floating-point values have separate FPR forms.

Stack: [..., v:R8] -> [...]

When the compiler emits it

Not emitted by VB6 SP6 in any tested project type (see the W/IW family note). The source construct that uses the [ebp+10h] base is unknown.

Handler analysis

Handler label: label near 0x6610a69f at 0x6610a69f in MSVBVM60.dll (build 6.00.8268).

Canonical 8-instruction body:

movsx eax, word ptr [esi]        ; 2-byte signed offset
add   eax, [ebp+10h]              ; eax = W-base + offset
pop   dword ptr [eax]             ; pop value, write to *eax
xor   eax, eax
mov   al,  [esi+2]                ; next opcode byte
add   esi, 3                      ; advance pcode pointer
jmp   [_tblByteDisp + eax*4]      ; dispatch next

Variations across suffixes (FPR4/FPR8/Var/Cy/Str/Darg) replace the central push/pop dword [eax] with the appropriate width-specific helper (fld/fst for FPU types, __vbaCopyBytes/__vbaStrCopy for BSTRs, the 16-byte Variant copy routine for Var, etc.). The base-computation step (add eax, [ebp+10h]) is identical across all 50 distinct handlers analyzed in the IWMem/WMem set.

Encoding, evidence and notes
Encoding

Encoding: FE E4 (lead byte FE selects table 4), then 2 operand byte(s); total instruction length 4 byte(s).
No printf operands are declared, but the instruction still consumes operand bytes; see the size above and the observed bytes below. (Phase 3a: flag=0 does not mean 'no operands'.)

Evidence and notes

Emitted by VB6 SP6 (P-code): not observed in about 3,070 probe programs. The slot exists in the runtime's dispatch table, but no tested source construct makes the compiler emit it.

Handler: 0x6610A69F, shared by 2 dispatch slots (real opcode #703). This is the primary slot. Other slots: (4,E5) WMemStR8.

Family note: Phase 4: never emitted by VB6 SP6. Contexts tried include class/form/module statics, member UDTs with With, WithEvents, Implements, ActiveX DLL/EXE globals (these compile to FMem*), UserControl, PropertyPage, ActiveX Document, Add-in, DHTML and DataReport projects. Handler base [ebp+10h] (dispatcher arg 3) has no known source construct. IIS WebClass projects are untested.

Slots sharing this handler

(4,0xE5) WMemStR8

Description: draft, by claude-opus-5-5. Handler 0x6610A69F, dispatch slot 0x661080A4, modOpcodes line 1300.

WMemStR8

(4,0xE5)not emitteddup of (4,E4)handler #703Currencyconfirmed_handler
Store a raw 8-byte value at [W-base + offset] (W-base = dispatcher argument [ebp+10h]); not a floating-point store.

Pops a 8-byte value and writes it to the address computed from the stable secondary pointer at [ebp+10h] plus the 16-bit offset operand. The R8 suffix means a raw 8-byte move (compare FStR4, used for Long); floating-point values have separate FPR forms.

Stack: [..., v:R8] -> [...]

When the compiler emits it

Not emitted by VB6 SP6 in any tested project type (see the W/IW family note). The source construct that uses the [ebp+10h] base is unknown.

Handler analysis

Handler label: label near 0x6610a69f at 0x6610a69f in MSVBVM60.dll (build 6.00.8268).

Canonical 8-instruction body:

movsx eax, word ptr [esi]        ; 2-byte signed offset
add   eax, [ebp+10h]              ; eax = W-base + offset
pop   dword ptr [eax]             ; pop value, write to *eax
xor   eax, eax
mov   al,  [esi+2]                ; next opcode byte
add   esi, 3                      ; advance pcode pointer
jmp   [_tblByteDisp + eax*4]      ; dispatch next

Variations across suffixes (FPR4/FPR8/Var/Cy/Str/Darg) replace the central push/pop dword [eax] with the appropriate width-specific helper (fld/fst for FPU types, __vbaCopyBytes/__vbaStrCopy for BSTRs, the 16-byte Variant copy routine for Var, etc.). The base-computation step (add eax, [ebp+10h]) is identical across all 50 distinct handlers analyzed in the IWMem/WMem set.

Encoding, evidence and notes
Encoding

Encoding: FE E5 (lead byte FE selects table 4), then 2 operand byte(s); total instruction length 4 byte(s).
No printf operands are declared, but the instruction still consumes operand bytes; see the size above and the observed bytes below. (Phase 3a: flag=0 does not mean 'no operands'.)

Evidence and notes

Emitted by VB6 SP6 (P-code): not observed in about 3,070 probe programs. The slot exists in the runtime's dispatch table, but no tested source construct makes the compiler emit it.

Handler: 0x6610A69F, shared by 2 dispatch slots (real opcode #703). This is a duplicate slot of (4,E4) WMemStR8. Other slots: (4,E4) WMemStR8.

Family note: Phase 4: never emitted by VB6 SP6. Contexts tried include class/form/module statics, member UDTs with With, WithEvents, Implements, ActiveX DLL/EXE globals (these compile to FMem*), UserControl, PropertyPage, ActiveX Document, Add-in, DHTML and DataReport projects. Handler base [ebp+10h] (dispatcher arg 3) has no known source construct. IIS WebClass projects are untested.

Slots sharing this handler

(4,0xE4) WMemStR8

Description: draft, by claude-opus-5-5. Handler 0x6610A69F, dispatch slot 0x661080A8, modOpcodes line 1301.

WMemStStr

(4,0xE7)not emittedhandler #705Stringcontextual
STORE a BSTR pointer (VB6 String) at [W-base+offset] via the procedure's secondary-object pointer [ebp+10h] (W-base) (4-byte (pointer)).

Handler analysis (idalib, MSVBVM60.dll build 6.00.8268). Reads a 2-byte signed offset from the instruction stream and adds it to the pointer held at the fixed frame slot [ebp+10h]. That slot is set once by the procedure's caller ([ebp+10h] is procedure-invocation argument 3) and is never written by any handler in the ENGINE segment -- it is stable for the lifetime of the procedure.

This is a WMem variant: it accesses [ebp+10h] + offset directly. The slot is treated as a BSTR pointer (VB6 String) value.

Stack: [..., v:Str] -> [...] (*([ebp+10h] + offset) <- v)

**Distinction from the corresponding Mem* opcode (non-W counterpart):** the regular Mem* family uses the runtime cache at [ebp-4Ch], which is updated by every preceding FLdPr, FLdPrThis, NewIfNullAd, Ary1LdPr, or LdPrVar instruction. The W-family bypasses that cache and uses the stable [ebp+10h] pointer instead -- so the W-base does not require a preceding object-load opcode to be set.

Identity of [ebp+10h] is not yet pinned. Handler analysis establishes the mechanical behavior; the source-language construct that establishes this secondary object pointer (parent scope, procedure descriptor, outer-class pointer, etc.) is not yet verified. PDFStreamDumper's corpus has zero occurrences of this family, suggesting the construct is rare in typical VB6 code. A targeted probe in Phase 4 should resolve which language-level construct emits these opcodes.

When the compiler emits it

Emitted when the compiler accesses a member through a STABLE, caller-supplied object pointer (the secondary slot at [ebp+10h]) rather than through the runtime object-load cache that Mem* uses. The specific source-language construct that establishes the W-base has not yet been pinned by handler analysis alone -- PDFStreamDumper's corpus has zero occurrences of the entire IWMem/WMem family, suggesting the construct is uncommon in typical VB6 code. Candidate emit triggers worth probing in Phase 4: nested-class member access, parent-scope references from inside an event handler, or compiler-synthesized accessors that have access to a known-stable secondary pointer.

Handler analysis

Handler label: label near 0x6610b2a1 at 0x6610b2a1 in MSVBVM60.dll (build 6.00.8268).

Canonical 8-instruction body:

movsx eax, word ptr [esi]        ; 2-byte signed offset
add   eax, [ebp+10h]              ; eax = W-base + offset
pop   dword ptr [eax]             ; pop value, write to *eax
xor   eax, eax
mov   al,  [esi+2]                ; next opcode byte
add   esi, 3                      ; advance pcode pointer
jmp   [_tblByteDisp + eax*4]      ; dispatch next

Variations across suffixes (FPR4/FPR8/Var/Cy/Str/Darg) replace the central push/pop dword [eax] with the appropriate width-specific helper (fld/fst for FPU types, __vbaCopyBytes/__vbaStrCopy for BSTRs, the 16-byte Variant copy routine for Var, etc.). The base-computation step (add eax, [ebp+10h]) is identical across all 50 distinct handlers analyzed in the IWMem/WMem set.

Encoding, evidence and notes
Encoding

Encoding: FE E7 (lead byte FE selects table 4), then 2 operand byte(s); total instruction length 4 byte(s).
No printf operands are declared, but the instruction still consumes operand bytes; see the size above and the observed bytes below. (Phase 3a: flag=0 does not mean 'no operands'.)

Evidence and notes

Emitted by VB6 SP6 (P-code): not observed in about 3,070 probe programs. The slot exists in the runtime's dispatch table, but no tested source construct makes the compiler emit it.

Handler: 0x6610B2A1, unique to this slot (real opcode #705).

Family note: Phase 4: never emitted by VB6 SP6. Contexts tried include class/form/module statics, member UDTs with With, WithEvents, Implements, ActiveX DLL/EXE globals (these compile to FMem*), UserControl, PropertyPage, ActiveX Document, Add-in, DHTML and DataReport projects. Handler base [ebp+10h] (dispatcher arg 3) has no known source construct. IIS WebClass projects are untested.

Description: draft, by claude-opus-4.7. Handler 0x6610B2A1, dispatch slot 0x661080B0, modOpcodes line 1303.

WMemStStrCopy

(4,0xF1)not emittedhandler #715Stringcontextual
STORE a value of suffix `` at [W-base+offset] via the procedure's secondary-object pointer [ebp+10h] (W-base) (unknown-size).

Handler analysis (idalib, MSVBVM60.dll build 6.00.8268). Reads a 2-byte signed offset from the instruction stream and adds it to the pointer held at the fixed frame slot [ebp+10h]. That slot is set once by the procedure's caller ([ebp+10h] is procedure-invocation argument 3) and is never written by any handler in the ENGINE segment -- it is stable for the lifetime of the procedure.

This is a WMem variant: it accesses [ebp+10h] + offset directly. The slot is treated as a value of suffix `` value.

Stack: [..., v:] -> [...] (*([ebp+10h] + offset) <- v)

**Distinction from the corresponding Mem* opcode (non-W counterpart):** the regular Mem* family uses the runtime cache at [ebp-4Ch], which is updated by every preceding FLdPr, FLdPrThis, NewIfNullAd, Ary1LdPr, or LdPrVar instruction. The W-family bypasses that cache and uses the stable [ebp+10h] pointer instead -- so the W-base does not require a preceding object-load opcode to be set.

Identity of [ebp+10h] is not yet pinned. Handler analysis establishes the mechanical behavior; the source-language construct that establishes this secondary object pointer (parent scope, procedure descriptor, outer-class pointer, etc.) is not yet verified. PDFStreamDumper's corpus has zero occurrences of this family, suggesting the construct is rare in typical VB6 code. A targeted probe in Phase 4 should resolve which language-level construct emits these opcodes.

When the compiler emits it

Emitted when the compiler accesses a member through a STABLE, caller-supplied object pointer (the secondary slot at [ebp+10h]) rather than through the runtime object-load cache that Mem* uses. The specific source-language construct that establishes the W-base has not yet been pinned by handler analysis alone -- PDFStreamDumper's corpus has zero occurrences of the entire IWMem/WMem family, suggesting the construct is uncommon in typical VB6 code. Candidate emit triggers worth probing in Phase 4: nested-class member access, parent-scope references from inside an event handler, or compiler-synthesized accessors that have access to a known-stable secondary pointer.

Handler analysis

Handler label: label near 0x6610b2c1 at 0x6610b2c1 in MSVBVM60.dll (build 6.00.8268).

Canonical 8-instruction body:

movsx eax, word ptr [esi]        ; 2-byte signed offset
add   eax, [ebp+10h]              ; eax = W-base + offset
pop   dword ptr [eax]             ; pop value, write to *eax
xor   eax, eax
mov   al,  [esi+2]                ; next opcode byte
add   esi, 3                      ; advance pcode pointer
jmp   [_tblByteDisp + eax*4]      ; dispatch next

Variations across suffixes (FPR4/FPR8/Var/Cy/Str/Darg) replace the central push/pop dword [eax] with the appropriate width-specific helper (fld/fst for FPU types, __vbaCopyBytes/__vbaStrCopy for BSTRs, the 16-byte Variant copy routine for Var, etc.). The base-computation step (add eax, [ebp+10h]) is identical across all 50 distinct handlers analyzed in the IWMem/WMem set.

Encoding, evidence and notes
Encoding

Encoding: FE F1 (lead byte FE selects table 4), then 2 operand byte(s); total instruction length 4 byte(s).
No printf operands are declared, but the instruction still consumes operand bytes; see the size above and the observed bytes below. (Phase 3a: flag=0 does not mean 'no operands'.)

Evidence and notes

Emitted by VB6 SP6 (P-code): not observed in about 3,070 probe programs. The slot exists in the runtime's dispatch table, but no tested source construct makes the compiler emit it.

Handler: 0x6610B2C1, unique to this slot (real opcode #715).

Family note: Phase 4: never emitted by VB6 SP6. Contexts tried include class/form/module statics, member UDTs with With, WithEvents, Implements, ActiveX DLL/EXE globals (these compile to FMem*), UserControl, PropertyPage, ActiveX Document, Add-in, DHTML and DataReport projects. Handler base [ebp+10h] (dispatcher arg 3) has no known source construct. IIS WebClass projects are untested.

Description: draft, by claude-opus-4.7. Handler 0x6610B2C1, dispatch slot 0x661080D8, modOpcodes line 1313.

WMemStUI1

(4,0xE0)not emittedhandler #700Integercontextual
STORE a 8-bit unsigned (VB6 Byte) at [W-base+offset] via the procedure's secondary-object pointer [ebp+10h] (W-base) (1-byte).

Handler analysis (idalib, MSVBVM60.dll build 6.00.8268). Reads a 2-byte signed offset from the instruction stream and adds it to the pointer held at the fixed frame slot [ebp+10h]. That slot is set once by the procedure's caller ([ebp+10h] is procedure-invocation argument 3) and is never written by any handler in the ENGINE segment -- it is stable for the lifetime of the procedure.

This is a WMem variant: it accesses [ebp+10h] + offset directly. The slot is treated as a 8-bit unsigned (VB6 Byte) value.

Stack: [..., v:UI1] -> [...] (*([ebp+10h] + offset) <- v)

**Distinction from the corresponding Mem* opcode (non-W counterpart):** the regular Mem* family uses the runtime cache at [ebp-4Ch], which is updated by every preceding FLdPr, FLdPrThis, NewIfNullAd, Ary1LdPr, or LdPrVar instruction. The W-family bypasses that cache and uses the stable [ebp+10h] pointer instead -- so the W-base does not require a preceding object-load opcode to be set.

Identity of [ebp+10h] is not yet pinned. Handler analysis establishes the mechanical behavior; the source-language construct that establishes this secondary object pointer (parent scope, procedure descriptor, outer-class pointer, etc.) is not yet verified. PDFStreamDumper's corpus has zero occurrences of this family, suggesting the construct is rare in typical VB6 code. A targeted probe in Phase 4 should resolve which language-level construct emits these opcodes.

When the compiler emits it

Emitted when the compiler accesses a member through a STABLE, caller-supplied object pointer (the secondary slot at [ebp+10h]) rather than through the runtime object-load cache that Mem* uses. The specific source-language construct that establishes the W-base has not yet been pinned by handler analysis alone -- PDFStreamDumper's corpus has zero occurrences of the entire IWMem/WMem family, suggesting the construct is uncommon in typical VB6 code. Candidate emit triggers worth probing in Phase 4: nested-class member access, parent-scope references from inside an event handler, or compiler-synthesized accessors that have access to a known-stable secondary pointer.

Handler analysis

Handler label: label near 0x6610a657 at 0x6610a657 in MSVBVM60.dll (build 6.00.8268).

Canonical 8-instruction body:

movsx eax, word ptr [esi]        ; 2-byte signed offset
add   eax, [ebp+10h]              ; eax = W-base + offset
pop   dword ptr [eax]             ; pop value, write to *eax
xor   eax, eax
mov   al,  [esi+2]                ; next opcode byte
add   esi, 3                      ; advance pcode pointer
jmp   [_tblByteDisp + eax*4]      ; dispatch next

Variations across suffixes (FPR4/FPR8/Var/Cy/Str/Darg) replace the central push/pop dword [eax] with the appropriate width-specific helper (fld/fst for FPU types, __vbaCopyBytes/__vbaStrCopy for BSTRs, the 16-byte Variant copy routine for Var, etc.). The base-computation step (add eax, [ebp+10h]) is identical across all 50 distinct handlers analyzed in the IWMem/WMem set.

Encoding, evidence and notes
Encoding

Encoding: FE E0 (lead byte FE selects table 4), then 2 operand byte(s); total instruction length 4 byte(s).
No printf operands are declared, but the instruction still consumes operand bytes; see the size above and the observed bytes below. (Phase 3a: flag=0 does not mean 'no operands'.)

Evidence and notes

Emitted by VB6 SP6 (P-code): not observed in about 3,070 probe programs. The slot exists in the runtime's dispatch table, but no tested source construct makes the compiler emit it.

Handler: 0x6610A657, unique to this slot (real opcode #700).

Family note: Phase 4: never emitted by VB6 SP6. Contexts tried include class/form/module statics, member UDTs with With, WithEvents, Implements, ActiveX DLL/EXE globals (these compile to FMem*), UserControl, PropertyPage, ActiveX Document, Add-in, DHTML and DataReport projects. Handler base [ebp+10h] (dispatcher arg 3) has no known source construct. IIS WebClass projects are untested.

Description: draft, by claude-opus-4.7. Handler 0x6610A657, dispatch slot 0x66108094, modOpcodes line 1296.

WMemStVar

(4,0xE6)not emittedhandler #704Variantcontextual
STORE a Variant at [W-base+offset] via the procedure's secondary-object pointer [ebp+10h] (W-base) (16-byte).

Handler analysis (idalib, MSVBVM60.dll build 6.00.8268). Reads a 2-byte signed offset from the instruction stream and adds it to the pointer held at the fixed frame slot [ebp+10h]. That slot is set once by the procedure's caller ([ebp+10h] is procedure-invocation argument 3) and is never written by any handler in the ENGINE segment -- it is stable for the lifetime of the procedure.

This is a WMem variant: it accesses [ebp+10h] + offset directly. The slot is treated as a Variant value.

Stack: [..., v:Var] -> [...] (*([ebp+10h] + offset) <- v)

**Distinction from the corresponding Mem* opcode (non-W counterpart):** the regular Mem* family uses the runtime cache at [ebp-4Ch], which is updated by every preceding FLdPr, FLdPrThis, NewIfNullAd, Ary1LdPr, or LdPrVar instruction. The W-family bypasses that cache and uses the stable [ebp+10h] pointer instead -- so the W-base does not require a preceding object-load opcode to be set.

Identity of [ebp+10h] is not yet pinned. Handler analysis establishes the mechanical behavior; the source-language construct that establishes this secondary object pointer (parent scope, procedure descriptor, outer-class pointer, etc.) is not yet verified. PDFStreamDumper's corpus has zero occurrences of this family, suggesting the construct is rare in typical VB6 code. A targeted probe in Phase 4 should resolve which language-level construct emits these opcodes.

When the compiler emits it

Emitted when the compiler accesses a member through a STABLE, caller-supplied object pointer (the secondary slot at [ebp+10h]) rather than through the runtime object-load cache that Mem* uses. The specific source-language construct that establishes the W-base has not yet been pinned by handler analysis alone -- PDFStreamDumper's corpus has zero occurrences of the entire IWMem/WMem family, suggesting the construct is uncommon in typical VB6 code. Candidate emit triggers worth probing in Phase 4: nested-class member access, parent-scope references from inside an event handler, or compiler-synthesized accessors that have access to a known-stable secondary pointer.

Handler analysis

Handler label: label near 0x6610b70c at 0x6610b70c in MSVBVM60.dll (build 6.00.8268).

Canonical 8-instruction body:

movsx eax, word ptr [esi]        ; 2-byte signed offset
add   eax, [ebp+10h]              ; eax = W-base + offset
pop   dword ptr [eax]             ; pop value, write to *eax
xor   eax, eax
mov   al,  [esi+2]                ; next opcode byte
add   esi, 3                      ; advance pcode pointer
jmp   [_tblByteDisp + eax*4]      ; dispatch next

Variations across suffixes (FPR4/FPR8/Var/Cy/Str/Darg) replace the central push/pop dword [eax] with the appropriate width-specific helper (fld/fst for FPU types, __vbaCopyBytes/__vbaStrCopy for BSTRs, the 16-byte Variant copy routine for Var, etc.). The base-computation step (add eax, [ebp+10h]) is identical across all 50 distinct handlers analyzed in the IWMem/WMem set.

Encoding, evidence and notes
Encoding

Encoding: FE E6 (lead byte FE selects table 4), then 2 operand byte(s); total instruction length 4 byte(s).
No printf operands are declared, but the instruction still consumes operand bytes; see the size above and the observed bytes below. (Phase 3a: flag=0 does not mean 'no operands'.)

Evidence and notes

Emitted by VB6 SP6 (P-code): not observed in about 3,070 probe programs. The slot exists in the runtime's dispatch table, but no tested source construct makes the compiler emit it.

Handler: 0x6610B70C, unique to this slot (real opcode #704).

Family note: Phase 4: never emitted by VB6 SP6. Contexts tried include class/form/module statics, member UDTs with With, WithEvents, Implements, ActiveX DLL/EXE globals (these compile to FMem*), UserControl, PropertyPage, ActiveX Document, Add-in, DHTML and DataReport projects. Handler base [ebp+10h] (dispatcher arg 3) has no known source construct. IIS WebClass projects are untested.

Description: draft, by claude-opus-4.7. Handler 0x6610B70C, dispatch slot 0x661080AC, modOpcodes line 1302.

WMemStVarAd

(4,0xEB)not emittedhandler #709Variantcontextual
STORE a raw 32-bit address at [W-base+offset] via the procedure's secondary-object pointer [ebp+10h] (W-base) (4-byte (address)).

Handler analysis (idalib, MSVBVM60.dll build 6.00.8268). Reads a 2-byte signed offset from the instruction stream and adds it to the pointer held at the fixed frame slot [ebp+10h]. That slot is set once by the procedure's caller ([ebp+10h] is procedure-invocation argument 3) and is never written by any handler in the ENGINE segment -- it is stable for the lifetime of the procedure.

This is a WMem variant: it accesses [ebp+10h] + offset directly. The slot is treated as a raw 32-bit address value.

Stack: [..., v:Ad] -> [...] (*([ebp+10h] + offset) <- v)

**Distinction from the corresponding Mem* opcode (non-W counterpart):** the regular Mem* family uses the runtime cache at [ebp-4Ch], which is updated by every preceding FLdPr, FLdPrThis, NewIfNullAd, Ary1LdPr, or LdPrVar instruction. The W-family bypasses that cache and uses the stable [ebp+10h] pointer instead -- so the W-base does not require a preceding object-load opcode to be set.

Identity of [ebp+10h] is not yet pinned. Handler analysis establishes the mechanical behavior; the source-language construct that establishes this secondary object pointer (parent scope, procedure descriptor, outer-class pointer, etc.) is not yet verified. PDFStreamDumper's corpus has zero occurrences of this family, suggesting the construct is rare in typical VB6 code. A targeted probe in Phase 4 should resolve which language-level construct emits these opcodes.

When the compiler emits it

Emitted when the compiler accesses a member through a STABLE, caller-supplied object pointer (the secondary slot at [ebp+10h]) rather than through the runtime object-load cache that Mem* uses. The specific source-language construct that establishes the W-base has not yet been pinned by handler analysis alone -- PDFStreamDumper's corpus has zero occurrences of the entire IWMem/WMem family, suggesting the construct is uncommon in typical VB6 code. Candidate emit triggers worth probing in Phase 4: nested-class member access, parent-scope references from inside an event handler, or compiler-synthesized accessors that have access to a known-stable secondary pointer.

Handler analysis

Handler label: label near 0x6610b473 at 0x6610b473 in MSVBVM60.dll (build 6.00.8268).

Canonical 8-instruction body:

movsx eax, word ptr [esi]        ; 2-byte signed offset
add   eax, [ebp+10h]              ; eax = W-base + offset
pop   dword ptr [eax]             ; pop value, write to *eax
xor   eax, eax
mov   al,  [esi+2]                ; next opcode byte
add   esi, 3                      ; advance pcode pointer
jmp   [_tblByteDisp + eax*4]      ; dispatch next

Variations across suffixes (FPR4/FPR8/Var/Cy/Str/Darg) replace the central push/pop dword [eax] with the appropriate width-specific helper (fld/fst for FPU types, __vbaCopyBytes/__vbaStrCopy for BSTRs, the 16-byte Variant copy routine for Var, etc.). The base-computation step (add eax, [ebp+10h]) is identical across all 50 distinct handlers analyzed in the IWMem/WMem set.

Encoding, evidence and notes
Encoding

Encoding: FE EB (lead byte FE selects table 4), then 2 operand byte(s); total instruction length 4 byte(s).
No printf operands are declared, but the instruction still consumes operand bytes; see the size above and the observed bytes below. (Phase 3a: flag=0 does not mean 'no operands'.)

Evidence and notes

Emitted by VB6 SP6 (P-code): not observed in about 3,070 probe programs. The slot exists in the runtime's dispatch table, but no tested source construct makes the compiler emit it.

Handler: 0x6610B473, unique to this slot (real opcode #709).

Family note: Phase 4: never emitted by VB6 SP6. Contexts tried include class/form/module statics, member UDTs with With, WithEvents, Implements, ActiveX DLL/EXE globals (these compile to FMem*), UserControl, PropertyPage, ActiveX Document, Add-in, DHTML and DataReport projects. Handler base [ebp+10h] (dispatcher arg 3) has no known source construct. IIS WebClass projects are untested.

Description: draft, by claude-opus-4.7. Handler 0x6610B473, dispatch slot 0x661080C0, modOpcodes line 1307.

WMemStVarAdFunc

(4,0xEC)not emittedhandler #710Variantcontextual
STORE a value of suffix `` at [W-base+offset] via the procedure's secondary-object pointer [ebp+10h] (W-base) (unknown-size).

Handler analysis (idalib, MSVBVM60.dll build 6.00.8268). Reads a 2-byte signed offset from the instruction stream and adds it to the pointer held at the fixed frame slot [ebp+10h]. That slot is set once by the procedure's caller ([ebp+10h] is procedure-invocation argument 3) and is never written by any handler in the ENGINE segment -- it is stable for the lifetime of the procedure.

This is a WMem variant: it accesses [ebp+10h] + offset directly. The slot is treated as a value of suffix `` value.

Stack: [..., v:] -> [...] (*([ebp+10h] + offset) <- v)

**Distinction from the corresponding Mem* opcode (non-W counterpart):** the regular Mem* family uses the runtime cache at [ebp-4Ch], which is updated by every preceding FLdPr, FLdPrThis, NewIfNullAd, Ary1LdPr, or LdPrVar instruction. The W-family bypasses that cache and uses the stable [ebp+10h] pointer instead -- so the W-base does not require a preceding object-load opcode to be set.

Identity of [ebp+10h] is not yet pinned. Handler analysis establishes the mechanical behavior; the source-language construct that establishes this secondary object pointer (parent scope, procedure descriptor, outer-class pointer, etc.) is not yet verified. PDFStreamDumper's corpus has zero occurrences of this family, suggesting the construct is rare in typical VB6 code. A targeted probe in Phase 4 should resolve which language-level construct emits these opcodes.

When the compiler emits it

Emitted when the compiler accesses a member through a STABLE, caller-supplied object pointer (the secondary slot at [ebp+10h]) rather than through the runtime object-load cache that Mem* uses. The specific source-language construct that establishes the W-base has not yet been pinned by handler analysis alone -- PDFStreamDumper's corpus has zero occurrences of the entire IWMem/WMem family, suggesting the construct is uncommon in typical VB6 code. Candidate emit triggers worth probing in Phase 4: nested-class member access, parent-scope references from inside an event handler, or compiler-synthesized accessors that have access to a known-stable secondary pointer.

Handler analysis

Handler label: label near 0x6610b460 at 0x6610b460 in MSVBVM60.dll (build 6.00.8268).

Canonical 8-instruction body:

movsx eax, word ptr [esi]        ; 2-byte signed offset
add   eax, [ebp+10h]              ; eax = W-base + offset
pop   dword ptr [eax]             ; pop value, write to *eax
xor   eax, eax
mov   al,  [esi+2]                ; next opcode byte
add   esi, 3                      ; advance pcode pointer
jmp   [_tblByteDisp + eax*4]      ; dispatch next

Variations across suffixes (FPR4/FPR8/Var/Cy/Str/Darg) replace the central push/pop dword [eax] with the appropriate width-specific helper (fld/fst for FPU types, __vbaCopyBytes/__vbaStrCopy for BSTRs, the 16-byte Variant copy routine for Var, etc.). The base-computation step (add eax, [ebp+10h]) is identical across all 50 distinct handlers analyzed in the IWMem/WMem set.

Encoding, evidence and notes
Encoding

Encoding: FE EC (lead byte FE selects table 4), then 2 operand byte(s); total instruction length 4 byte(s).
No printf operands are declared, but the instruction still consumes operand bytes; see the size above and the observed bytes below. (Phase 3a: flag=0 does not mean 'no operands'.)

Evidence and notes

Emitted by VB6 SP6 (P-code): not observed in about 3,070 probe programs. The slot exists in the runtime's dispatch table, but no tested source construct makes the compiler emit it.

Handler: 0x6610B460, unique to this slot (real opcode #710).

Family note: Phase 4: never emitted by VB6 SP6. Contexts tried include class/form/module statics, member UDTs with With, WithEvents, Implements, ActiveX DLL/EXE globals (these compile to FMem*), UserControl, PropertyPage, ActiveX Document, Add-in, DHTML and DataReport projects. Handler base [ebp+10h] (dispatcher arg 3) has no known source construct. IIS WebClass projects are untested.

Description: draft, by claude-opus-4.7. Handler 0x6610B460, dispatch slot 0x661080C4, modOpcodes line 1308.

WMemStVarCopy

(4,0xF0)not emittedhandler #714Variantcontextual
STORE a value of suffix `` at [W-base+offset] via the procedure's secondary-object pointer [ebp+10h] (W-base) (unknown-size).

Handler analysis (idalib, MSVBVM60.dll build 6.00.8268). Reads a 2-byte signed offset from the instruction stream and adds it to the pointer held at the fixed frame slot [ebp+10h]. That slot is set once by the procedure's caller ([ebp+10h] is procedure-invocation argument 3) and is never written by any handler in the ENGINE segment -- it is stable for the lifetime of the procedure.

This is a WMem variant: it accesses [ebp+10h] + offset directly. The slot is treated as a value of suffix `` value.

Stack: [..., v:] -> [...] (*([ebp+10h] + offset) <- v)

**Distinction from the corresponding Mem* opcode (non-W counterpart):** the regular Mem* family uses the runtime cache at [ebp-4Ch], which is updated by every preceding FLdPr, FLdPrThis, NewIfNullAd, Ary1LdPr, or LdPrVar instruction. The W-family bypasses that cache and uses the stable [ebp+10h] pointer instead -- so the W-base does not require a preceding object-load opcode to be set.

Identity of [ebp+10h] is not yet pinned. Handler analysis establishes the mechanical behavior; the source-language construct that establishes this secondary object pointer (parent scope, procedure descriptor, outer-class pointer, etc.) is not yet verified. PDFStreamDumper's corpus has zero occurrences of this family, suggesting the construct is rare in typical VB6 code. A targeted probe in Phase 4 should resolve which language-level construct emits these opcodes.

When the compiler emits it

Emitted when the compiler accesses a member through a STABLE, caller-supplied object pointer (the secondary slot at [ebp+10h]) rather than through the runtime object-load cache that Mem* uses. The specific source-language construct that establishes the W-base has not yet been pinned by handler analysis alone -- PDFStreamDumper's corpus has zero occurrences of the entire IWMem/WMem family, suggesting the construct is uncommon in typical VB6 code. Candidate emit triggers worth probing in Phase 4: nested-class member access, parent-scope references from inside an event handler, or compiler-synthesized accessors that have access to a known-stable secondary pointer.

Handler analysis

Handler label: label near 0x6610b6b8 at 0x6610b6b8 in MSVBVM60.dll (build 6.00.8268).

Canonical 8-instruction body:

movsx eax, word ptr [esi]        ; 2-byte signed offset
add   eax, [ebp+10h]              ; eax = W-base + offset
pop   dword ptr [eax]             ; pop value, write to *eax
xor   eax, eax
mov   al,  [esi+2]                ; next opcode byte
add   esi, 3                      ; advance pcode pointer
jmp   [_tblByteDisp + eax*4]      ; dispatch next

Variations across suffixes (FPR4/FPR8/Var/Cy/Str/Darg) replace the central push/pop dword [eax] with the appropriate width-specific helper (fld/fst for FPU types, __vbaCopyBytes/__vbaStrCopy for BSTRs, the 16-byte Variant copy routine for Var, etc.). The base-computation step (add eax, [ebp+10h]) is identical across all 50 distinct handlers analyzed in the IWMem/WMem set.

Encoding, evidence and notes
Encoding

Encoding: FE F0 (lead byte FE selects table 4), then 2 operand byte(s); total instruction length 4 byte(s).
No printf operands are declared, but the instruction still consumes operand bytes; see the size above and the observed bytes below. (Phase 3a: flag=0 does not mean 'no operands'.)

Evidence and notes

Emitted by VB6 SP6 (P-code): not observed in about 3,070 probe programs. The slot exists in the runtime's dispatch table, but no tested source construct makes the compiler emit it.

Handler: 0x6610B6B8, unique to this slot (real opcode #714).

Family note: Phase 4: never emitted by VB6 SP6. Contexts tried include class/form/module statics, member UDTs with With, WithEvents, Implements, ActiveX DLL/EXE globals (these compile to FMem*), UserControl, PropertyPage, ActiveX Document, Add-in, DHTML and DataReport projects. Handler base [ebp+10h] (dispatcher arg 3) has no known source construct. IIS WebClass projects are untested.

Description: draft, by claude-opus-4.7. Handler 0x6610B6B8, dispatch slot 0x661080D4, modOpcodes line 1312.

WMemStVarUnk

(4,0xED)not emittedhandler #711Variantcontextual
STORE a value of suffix `` at [W-base+offset] via the procedure's secondary-object pointer [ebp+10h] (W-base) (unknown-size).

Handler analysis (idalib, MSVBVM60.dll build 6.00.8268). Reads a 2-byte signed offset from the instruction stream and adds it to the pointer held at the fixed frame slot [ebp+10h]. That slot is set once by the procedure's caller ([ebp+10h] is procedure-invocation argument 3) and is never written by any handler in the ENGINE segment -- it is stable for the lifetime of the procedure.

This is a WMem variant: it accesses [ebp+10h] + offset directly. The slot is treated as a value of suffix `` value.

Stack: [..., v:] -> [...] (*([ebp+10h] + offset) <- v)

**Distinction from the corresponding Mem* opcode (non-W counterpart):** the regular Mem* family uses the runtime cache at [ebp-4Ch], which is updated by every preceding FLdPr, FLdPrThis, NewIfNullAd, Ary1LdPr, or LdPrVar instruction. The W-family bypasses that cache and uses the stable [ebp+10h] pointer instead -- so the W-base does not require a preceding object-load opcode to be set.

Identity of [ebp+10h] is not yet pinned. Handler analysis establishes the mechanical behavior; the source-language construct that establishes this secondary object pointer (parent scope, procedure descriptor, outer-class pointer, etc.) is not yet verified. PDFStreamDumper's corpus has zero occurrences of this family, suggesting the construct is rare in typical VB6 code. A targeted probe in Phase 4 should resolve which language-level construct emits these opcodes.

When the compiler emits it

Emitted when the compiler accesses a member through a STABLE, caller-supplied object pointer (the secondary slot at [ebp+10h]) rather than through the runtime object-load cache that Mem* uses. The specific source-language construct that establishes the W-base has not yet been pinned by handler analysis alone -- PDFStreamDumper's corpus has zero occurrences of the entire IWMem/WMem family, suggesting the construct is uncommon in typical VB6 code. Candidate emit triggers worth probing in Phase 4: nested-class member access, parent-scope references from inside an event handler, or compiler-synthesized accessors that have access to a known-stable secondary pointer.

Handler analysis

Handler label: label near 0x6610b629 at 0x6610b629 in MSVBVM60.dll (build 6.00.8268).

Canonical 8-instruction body:

movsx eax, word ptr [esi]        ; 2-byte signed offset
add   eax, [ebp+10h]              ; eax = W-base + offset
pop   dword ptr [eax]             ; pop value, write to *eax
xor   eax, eax
mov   al,  [esi+2]                ; next opcode byte
add   esi, 3                      ; advance pcode pointer
jmp   [_tblByteDisp + eax*4]      ; dispatch next

Variations across suffixes (FPR4/FPR8/Var/Cy/Str/Darg) replace the central push/pop dword [eax] with the appropriate width-specific helper (fld/fst for FPU types, __vbaCopyBytes/__vbaStrCopy for BSTRs, the 16-byte Variant copy routine for Var, etc.). The base-computation step (add eax, [ebp+10h]) is identical across all 50 distinct handlers analyzed in the IWMem/WMem set.

Encoding, evidence and notes
Encoding

Encoding: FE ED (lead byte FE selects table 4), then 2 operand byte(s); total instruction length 4 byte(s).
No printf operands are declared, but the instruction still consumes operand bytes; see the size above and the observed bytes below. (Phase 3a: flag=0 does not mean 'no operands'.)

Evidence and notes

Emitted by VB6 SP6 (P-code): not observed in about 3,070 probe programs. The slot exists in the runtime's dispatch table, but no tested source construct makes the compiler emit it.

Handler: 0x6610B629, unique to this slot (real opcode #711).

Family note: Phase 4: never emitted by VB6 SP6. Contexts tried include class/form/module statics, member UDTs with With, WithEvents, Implements, ActiveX DLL/EXE globals (these compile to FMem*), UserControl, PropertyPage, ActiveX Document, Add-in, DHTML and DataReport projects. Handler base [ebp+10h] (dispatcher arg 3) has no known source construct. IIS WebClass projects are untested.

Description: draft, by claude-opus-4.7. Handler 0x6610B629, dispatch slot 0x661080C8, modOpcodes line 1309.

WMemStVarUnkFunc

(4,0xEE)not emittedhandler #712Variantcontextual
STORE a value of suffix `` at [W-base+offset] via the procedure's secondary-object pointer [ebp+10h] (W-base) (unknown-size).

Handler analysis (idalib, MSVBVM60.dll build 6.00.8268). Reads a 2-byte signed offset from the instruction stream and adds it to the pointer held at the fixed frame slot [ebp+10h]. That slot is set once by the procedure's caller ([ebp+10h] is procedure-invocation argument 3) and is never written by any handler in the ENGINE segment -- it is stable for the lifetime of the procedure.

This is a WMem variant: it accesses [ebp+10h] + offset directly. The slot is treated as a value of suffix `` value.

Stack: [..., v:] -> [...] (*([ebp+10h] + offset) <- v)

**Distinction from the corresponding Mem* opcode (non-W counterpart):** the regular Mem* family uses the runtime cache at [ebp-4Ch], which is updated by every preceding FLdPr, FLdPrThis, NewIfNullAd, Ary1LdPr, or LdPrVar instruction. The W-family bypasses that cache and uses the stable [ebp+10h] pointer instead -- so the W-base does not require a preceding object-load opcode to be set.

Identity of [ebp+10h] is not yet pinned. Handler analysis establishes the mechanical behavior; the source-language construct that establishes this secondary object pointer (parent scope, procedure descriptor, outer-class pointer, etc.) is not yet verified. PDFStreamDumper's corpus has zero occurrences of this family, suggesting the construct is rare in typical VB6 code. A targeted probe in Phase 4 should resolve which language-level construct emits these opcodes.

When the compiler emits it

Emitted when the compiler accesses a member through a STABLE, caller-supplied object pointer (the secondary slot at [ebp+10h]) rather than through the runtime object-load cache that Mem* uses. The specific source-language construct that establishes the W-base has not yet been pinned by handler analysis alone -- PDFStreamDumper's corpus has zero occurrences of the entire IWMem/WMem family, suggesting the construct is uncommon in typical VB6 code. Candidate emit triggers worth probing in Phase 4: nested-class member access, parent-scope references from inside an event handler, or compiler-synthesized accessors that have access to a known-stable secondary pointer.

Handler analysis

Handler label: label near 0x6610b612 at 0x6610b612 in MSVBVM60.dll (build 6.00.8268).

Canonical 8-instruction body:

movsx eax, word ptr [esi]        ; 2-byte signed offset
add   eax, [ebp+10h]              ; eax = W-base + offset
pop   dword ptr [eax]             ; pop value, write to *eax
xor   eax, eax
mov   al,  [esi+2]                ; next opcode byte
add   esi, 3                      ; advance pcode pointer
jmp   [_tblByteDisp + eax*4]      ; dispatch next

Variations across suffixes (FPR4/FPR8/Var/Cy/Str/Darg) replace the central push/pop dword [eax] with the appropriate width-specific helper (fld/fst for FPU types, __vbaCopyBytes/__vbaStrCopy for BSTRs, the 16-byte Variant copy routine for Var, etc.). The base-computation step (add eax, [ebp+10h]) is identical across all 50 distinct handlers analyzed in the IWMem/WMem set.

Encoding, evidence and notes
Encoding

Encoding: FE EE (lead byte FE selects table 4), then 2 operand byte(s); total instruction length 4 byte(s).
No printf operands are declared, but the instruction still consumes operand bytes; see the size above and the observed bytes below. (Phase 3a: flag=0 does not mean 'no operands'.)

Evidence and notes

Emitted by VB6 SP6 (P-code): not observed in about 3,070 probe programs. The slot exists in the runtime's dispatch table, but no tested source construct makes the compiler emit it.

Handler: 0x6610B612, unique to this slot (real opcode #712).

Family note: Phase 4: never emitted by VB6 SP6. Contexts tried include class/form/module statics, member UDTs with With, WithEvents, Implements, ActiveX DLL/EXE globals (these compile to FMem*), UserControl, PropertyPage, ActiveX Document, Add-in, DHTML and DataReport projects. Handler base [ebp+10h] (dispatcher arg 3) has no known source construct. IIS WebClass projects are untested.

Description: draft, by claude-opus-4.7. Handler 0x6610B612, dispatch slot 0x661080CC, modOpcodes line 1310.