Python interpreter runs .py files in 2 step process: first, it produces bytecode, which it then executes. Translation of .py source into bytecode is time-consuming, so Python dumps compiled bytecode into .pyc files, to be reused from cache at later time if possible.
.pyc file is essentially a raw dump of py_object
(see body
) with
a simple header prepended.
This page hosts a formal specification of .pyc file format of Python using Kaitai Struct. This specification can be automatically translated into a variety of programming languages to get a parsing library.
// Code generated by kaitai-struct-compiler from a .ksy source file. DO NOT EDIT.
import (
"github.com/kaitai-io/kaitai_struct_go_runtime/kaitai"
"bytes"
)
/**
* Python interpreter runs .py files in 2 step process: first, it
* produces bytecode, which it then executes. Translation of .py source
* into bytecode is time-consuming, so Python dumps compiled bytecode
* into .pyc files, to be reused from cache at later time if possible.
*
* .pyc file is essentially a raw dump of `py_object` (see `body`) with
* a simple header prepended.
*/
type PythonPyc27_Version int
const (
PythonPyc27_Version__V15 PythonPyc27_Version = 20121
PythonPyc27_Version__V16 PythonPyc27_Version = 50428
PythonPyc27_Version__V20 PythonPyc27_Version = 50823
PythonPyc27_Version__V21 PythonPyc27_Version = 60202
PythonPyc27_Version__V22 PythonPyc27_Version = 60717
PythonPyc27_Version__V23A0 PythonPyc27_Version = 62011
PythonPyc27_Version__V23A0b PythonPyc27_Version = 62021
PythonPyc27_Version__V24A0 PythonPyc27_Version = 62041
PythonPyc27_Version__V24A3 PythonPyc27_Version = 62051
PythonPyc27_Version__V24B1 PythonPyc27_Version = 62061
PythonPyc27_Version__V25A0 PythonPyc27_Version = 62071
PythonPyc27_Version__V25A0b PythonPyc27_Version = 62081
PythonPyc27_Version__V25A0c PythonPyc27_Version = 62091
PythonPyc27_Version__V25A0d PythonPyc27_Version = 62092
PythonPyc27_Version__V25B3 PythonPyc27_Version = 62101
PythonPyc27_Version__V25B3b PythonPyc27_Version = 62111
PythonPyc27_Version__V25C1 PythonPyc27_Version = 62121
PythonPyc27_Version__V25C2 PythonPyc27_Version = 62131
PythonPyc27_Version__V26A0 PythonPyc27_Version = 62151
PythonPyc27_Version__V26A1 PythonPyc27_Version = 62161
PythonPyc27_Version__V27A0 PythonPyc27_Version = 62171
PythonPyc27_Version__V27A0b PythonPyc27_Version = 62181
PythonPyc27_Version__V27A0c PythonPyc27_Version = 62191
PythonPyc27_Version__V27A0d PythonPyc27_Version = 62201
PythonPyc27_Version__V27A0e PythonPyc27_Version = 62211
)
var values_PythonPyc27_Version = map[PythonPyc27_Version]struct{}{20121: {}, 50428: {}, 50823: {}, 60202: {}, 60717: {}, 62011: {}, 62021: {}, 62041: {}, 62051: {}, 62061: {}, 62071: {}, 62081: {}, 62091: {}, 62092: {}, 62101: {}, 62111: {}, 62121: {}, 62131: {}, 62151: {}, 62161: {}, 62171: {}, 62181: {}, 62191: {}, 62201: {}, 62211: {}}
func (v PythonPyc27_Version) isDefined() bool {
_, ok := values_PythonPyc27_Version[v]
return ok
}
type PythonPyc27 struct {
VersionMagic PythonPyc27_Version
Crlf uint16
ModificationTimestamp uint32
Body *PythonPyc27_PyObject
_io *kaitai.Stream
_root *PythonPyc27
_parent kaitai.Struct
}
func NewPythonPyc27() *PythonPyc27 {
return &PythonPyc27{
}
}
func (this PythonPyc27) IO_() *kaitai.Stream {
return this._io
}
func (this *PythonPyc27) Read(io *kaitai.Stream, parent kaitai.Struct, root *PythonPyc27) (err error) {
this._io = io
this._parent = parent
this._root = root
tmp1, err := this._io.ReadU2le()
if err != nil {
return err
}
this.VersionMagic = PythonPyc27_Version(tmp1)
tmp2, err := this._io.ReadU2le()
if err != nil {
return err
}
this.Crlf = uint16(tmp2)
tmp3, err := this._io.ReadU4le()
if err != nil {
return err
}
this.ModificationTimestamp = uint32(tmp3)
tmp4 := NewPythonPyc27_PyObject()
err = tmp4.Read(this._io, this, this._root)
if err != nil {
return err
}
this.Body = tmp4
return err
}
type PythonPyc27_Assembly struct {
StringMagic []byte
Length uint32
Items *PythonPyc27_OpArgs
_io *kaitai.Stream
_root *PythonPyc27
_parent *PythonPyc27_CodeObject
_raw_Items []byte
}
func NewPythonPyc27_Assembly() *PythonPyc27_Assembly {
return &PythonPyc27_Assembly{
}
}
func (this PythonPyc27_Assembly) IO_() *kaitai.Stream {
return this._io
}
func (this *PythonPyc27_Assembly) Read(io *kaitai.Stream, parent *PythonPyc27_CodeObject, root *PythonPyc27) (err error) {
this._io = io
this._parent = parent
this._root = root
tmp5, err := this._io.ReadBytes(int(1))
if err != nil {
return err
}
tmp5 = tmp5
this.StringMagic = tmp5
if !(bytes.Equal(this.StringMagic, []uint8{115})) {
return kaitai.NewValidationNotEqualError([]uint8{115}, this.StringMagic, this._io, "/types/assembly/seq/0")
}
tmp6, err := this._io.ReadU4le()
if err != nil {
return err
}
this.Length = uint32(tmp6)
tmp7, err := this._io.ReadBytes(int(this.Length))
if err != nil {
return err
}
tmp7 = tmp7
this._raw_Items = tmp7
_io__raw_Items := kaitai.NewStream(bytes.NewReader(this._raw_Items))
tmp8 := NewPythonPyc27_OpArgs()
err = tmp8.Read(_io__raw_Items, this, this._root)
if err != nil {
return err
}
this.Items = tmp8
return err
}
type PythonPyc27_CodeObject_FlagsEnum int
const (
PythonPyc27_CodeObject_FlagsEnum__HasArgs PythonPyc27_CodeObject_FlagsEnum = 4
PythonPyc27_CodeObject_FlagsEnum__HasKwargs PythonPyc27_CodeObject_FlagsEnum = 8
PythonPyc27_CodeObject_FlagsEnum__Generator PythonPyc27_CodeObject_FlagsEnum = 32
)
var values_PythonPyc27_CodeObject_FlagsEnum = map[PythonPyc27_CodeObject_FlagsEnum]struct{}{4: {}, 8: {}, 32: {}}
func (v PythonPyc27_CodeObject_FlagsEnum) isDefined() bool {
_, ok := values_PythonPyc27_CodeObject_FlagsEnum[v]
return ok
}
type PythonPyc27_CodeObject struct {
ArgCount uint32
LocalCount uint32
StackSize uint32
Flags PythonPyc27_CodeObject_FlagsEnum
Code *PythonPyc27_Assembly
Consts *PythonPyc27_PyObject
Names *PythonPyc27_PyObject
VarNames *PythonPyc27_PyObject
FreeVars *PythonPyc27_PyObject
CellVars *PythonPyc27_PyObject
Filename *PythonPyc27_PyObject
Name *PythonPyc27_PyObject
FirstLineNo uint32
Lnotab *PythonPyc27_PyObject
_io *kaitai.Stream
_root *PythonPyc27
_parent *PythonPyc27_PyObject
}
func NewPythonPyc27_CodeObject() *PythonPyc27_CodeObject {
return &PythonPyc27_CodeObject{
}
}
func (this PythonPyc27_CodeObject) IO_() *kaitai.Stream {
return this._io
}
func (this *PythonPyc27_CodeObject) Read(io *kaitai.Stream, parent *PythonPyc27_PyObject, root *PythonPyc27) (err error) {
this._io = io
this._parent = parent
this._root = root
tmp9, err := this._io.ReadU4le()
if err != nil {
return err
}
this.ArgCount = uint32(tmp9)
tmp10, err := this._io.ReadU4le()
if err != nil {
return err
}
this.LocalCount = uint32(tmp10)
tmp11, err := this._io.ReadU4le()
if err != nil {
return err
}
this.StackSize = uint32(tmp11)
tmp12, err := this._io.ReadU4le()
if err != nil {
return err
}
this.Flags = PythonPyc27_CodeObject_FlagsEnum(tmp12)
tmp13 := NewPythonPyc27_Assembly()
err = tmp13.Read(this._io, this, this._root)
if err != nil {
return err
}
this.Code = tmp13
tmp14 := NewPythonPyc27_PyObject()
err = tmp14.Read(this._io, this, this._root)
if err != nil {
return err
}
this.Consts = tmp14
tmp15 := NewPythonPyc27_PyObject()
err = tmp15.Read(this._io, this, this._root)
if err != nil {
return err
}
this.Names = tmp15
tmp16 := NewPythonPyc27_PyObject()
err = tmp16.Read(this._io, this, this._root)
if err != nil {
return err
}
this.VarNames = tmp16
tmp17 := NewPythonPyc27_PyObject()
err = tmp17.Read(this._io, this, this._root)
if err != nil {
return err
}
this.FreeVars = tmp17
tmp18 := NewPythonPyc27_PyObject()
err = tmp18.Read(this._io, this, this._root)
if err != nil {
return err
}
this.CellVars = tmp18
tmp19 := NewPythonPyc27_PyObject()
err = tmp19.Read(this._io, this, this._root)
if err != nil {
return err
}
this.Filename = tmp19
tmp20 := NewPythonPyc27_PyObject()
err = tmp20.Read(this._io, this, this._root)
if err != nil {
return err
}
this.Name = tmp20
tmp21, err := this._io.ReadU4le()
if err != nil {
return err
}
this.FirstLineNo = uint32(tmp21)
tmp22 := NewPythonPyc27_PyObject()
err = tmp22.Read(this._io, this, this._root)
if err != nil {
return err
}
this.Lnotab = tmp22
return err
}
type PythonPyc27_OpArg_OpCodeEnum int
const (
PythonPyc27_OpArg_OpCodeEnum__StopCode PythonPyc27_OpArg_OpCodeEnum = 0
PythonPyc27_OpArg_OpCodeEnum__PopTop PythonPyc27_OpArg_OpCodeEnum = 1
PythonPyc27_OpArg_OpCodeEnum__RotTwo PythonPyc27_OpArg_OpCodeEnum = 2
PythonPyc27_OpArg_OpCodeEnum__RotThree PythonPyc27_OpArg_OpCodeEnum = 3
PythonPyc27_OpArg_OpCodeEnum__DupTop PythonPyc27_OpArg_OpCodeEnum = 4
PythonPyc27_OpArg_OpCodeEnum__RotFour PythonPyc27_OpArg_OpCodeEnum = 5
PythonPyc27_OpArg_OpCodeEnum__Nop PythonPyc27_OpArg_OpCodeEnum = 9
PythonPyc27_OpArg_OpCodeEnum__UnaryPositive PythonPyc27_OpArg_OpCodeEnum = 10
PythonPyc27_OpArg_OpCodeEnum__UnaryNegative PythonPyc27_OpArg_OpCodeEnum = 11
PythonPyc27_OpArg_OpCodeEnum__UnaryNot PythonPyc27_OpArg_OpCodeEnum = 12
PythonPyc27_OpArg_OpCodeEnum__UnaryConvert PythonPyc27_OpArg_OpCodeEnum = 13
PythonPyc27_OpArg_OpCodeEnum__UnaryInvert PythonPyc27_OpArg_OpCodeEnum = 15
PythonPyc27_OpArg_OpCodeEnum__BinaryPower PythonPyc27_OpArg_OpCodeEnum = 19
PythonPyc27_OpArg_OpCodeEnum__BinaryMultiply PythonPyc27_OpArg_OpCodeEnum = 20
PythonPyc27_OpArg_OpCodeEnum__BinaryDivide PythonPyc27_OpArg_OpCodeEnum = 21
PythonPyc27_OpArg_OpCodeEnum__BinaryModulo PythonPyc27_OpArg_OpCodeEnum = 22
PythonPyc27_OpArg_OpCodeEnum__BinaryAdd PythonPyc27_OpArg_OpCodeEnum = 23
PythonPyc27_OpArg_OpCodeEnum__BinarySubtract PythonPyc27_OpArg_OpCodeEnum = 24
PythonPyc27_OpArg_OpCodeEnum__BinarySubscr PythonPyc27_OpArg_OpCodeEnum = 25
PythonPyc27_OpArg_OpCodeEnum__BinaryFloorDivide PythonPyc27_OpArg_OpCodeEnum = 26
PythonPyc27_OpArg_OpCodeEnum__BinaryTrueDivide PythonPyc27_OpArg_OpCodeEnum = 27
PythonPyc27_OpArg_OpCodeEnum__InplaceFloorDivide PythonPyc27_OpArg_OpCodeEnum = 28
PythonPyc27_OpArg_OpCodeEnum__InplaceTrueDivide PythonPyc27_OpArg_OpCodeEnum = 29
PythonPyc27_OpArg_OpCodeEnum__Slice0 PythonPyc27_OpArg_OpCodeEnum = 30
PythonPyc27_OpArg_OpCodeEnum__Slice1 PythonPyc27_OpArg_OpCodeEnum = 31
PythonPyc27_OpArg_OpCodeEnum__Slice2 PythonPyc27_OpArg_OpCodeEnum = 32
PythonPyc27_OpArg_OpCodeEnum__Slice3 PythonPyc27_OpArg_OpCodeEnum = 33
PythonPyc27_OpArg_OpCodeEnum__StoreSlice0 PythonPyc27_OpArg_OpCodeEnum = 40
PythonPyc27_OpArg_OpCodeEnum__StoreSlice1 PythonPyc27_OpArg_OpCodeEnum = 41
PythonPyc27_OpArg_OpCodeEnum__StoreSlice2 PythonPyc27_OpArg_OpCodeEnum = 42
PythonPyc27_OpArg_OpCodeEnum__StoreSlice3 PythonPyc27_OpArg_OpCodeEnum = 43
PythonPyc27_OpArg_OpCodeEnum__DeleteSlice0 PythonPyc27_OpArg_OpCodeEnum = 50
PythonPyc27_OpArg_OpCodeEnum__DeleteSlice1 PythonPyc27_OpArg_OpCodeEnum = 51
PythonPyc27_OpArg_OpCodeEnum__DeleteSlice2 PythonPyc27_OpArg_OpCodeEnum = 52
PythonPyc27_OpArg_OpCodeEnum__DeleteSlice3 PythonPyc27_OpArg_OpCodeEnum = 53
PythonPyc27_OpArg_OpCodeEnum__StoreMap PythonPyc27_OpArg_OpCodeEnum = 54
PythonPyc27_OpArg_OpCodeEnum__InplaceAdd PythonPyc27_OpArg_OpCodeEnum = 55
PythonPyc27_OpArg_OpCodeEnum__InplaceSubtract PythonPyc27_OpArg_OpCodeEnum = 56
PythonPyc27_OpArg_OpCodeEnum__InplaceMultiply PythonPyc27_OpArg_OpCodeEnum = 57
PythonPyc27_OpArg_OpCodeEnum__InplaceDivide PythonPyc27_OpArg_OpCodeEnum = 58
PythonPyc27_OpArg_OpCodeEnum__InplaceModulo PythonPyc27_OpArg_OpCodeEnum = 59
PythonPyc27_OpArg_OpCodeEnum__StoreSubscr PythonPyc27_OpArg_OpCodeEnum = 60
PythonPyc27_OpArg_OpCodeEnum__DeleteSubscr PythonPyc27_OpArg_OpCodeEnum = 61
PythonPyc27_OpArg_OpCodeEnum__BinaryLshift PythonPyc27_OpArg_OpCodeEnum = 62
PythonPyc27_OpArg_OpCodeEnum__BinaryRshift PythonPyc27_OpArg_OpCodeEnum = 63
PythonPyc27_OpArg_OpCodeEnum__BinaryAnd PythonPyc27_OpArg_OpCodeEnum = 64
PythonPyc27_OpArg_OpCodeEnum__BinaryXor PythonPyc27_OpArg_OpCodeEnum = 65
PythonPyc27_OpArg_OpCodeEnum__BinaryOr PythonPyc27_OpArg_OpCodeEnum = 66
PythonPyc27_OpArg_OpCodeEnum__InplacePower PythonPyc27_OpArg_OpCodeEnum = 67
PythonPyc27_OpArg_OpCodeEnum__GetIter PythonPyc27_OpArg_OpCodeEnum = 68
PythonPyc27_OpArg_OpCodeEnum__PrintExpr PythonPyc27_OpArg_OpCodeEnum = 70
PythonPyc27_OpArg_OpCodeEnum__PrintItem PythonPyc27_OpArg_OpCodeEnum = 71
PythonPyc27_OpArg_OpCodeEnum__PrintNewline PythonPyc27_OpArg_OpCodeEnum = 72
PythonPyc27_OpArg_OpCodeEnum__PrintItemTo PythonPyc27_OpArg_OpCodeEnum = 73
PythonPyc27_OpArg_OpCodeEnum__PrintNewlineTo PythonPyc27_OpArg_OpCodeEnum = 74
PythonPyc27_OpArg_OpCodeEnum__InplaceLshift PythonPyc27_OpArg_OpCodeEnum = 75
PythonPyc27_OpArg_OpCodeEnum__InplaceRshift PythonPyc27_OpArg_OpCodeEnum = 76
PythonPyc27_OpArg_OpCodeEnum__InplaceAnd PythonPyc27_OpArg_OpCodeEnum = 77
PythonPyc27_OpArg_OpCodeEnum__InplaceXor PythonPyc27_OpArg_OpCodeEnum = 78
PythonPyc27_OpArg_OpCodeEnum__InplaceOr PythonPyc27_OpArg_OpCodeEnum = 79
PythonPyc27_OpArg_OpCodeEnum__BreakLoop PythonPyc27_OpArg_OpCodeEnum = 80
PythonPyc27_OpArg_OpCodeEnum__WithCleanup PythonPyc27_OpArg_OpCodeEnum = 81
PythonPyc27_OpArg_OpCodeEnum__LoadLocals PythonPyc27_OpArg_OpCodeEnum = 82
PythonPyc27_OpArg_OpCodeEnum__ReturnValue PythonPyc27_OpArg_OpCodeEnum = 83
PythonPyc27_OpArg_OpCodeEnum__ImportStar PythonPyc27_OpArg_OpCodeEnum = 84
PythonPyc27_OpArg_OpCodeEnum__ExecStmt PythonPyc27_OpArg_OpCodeEnum = 85
PythonPyc27_OpArg_OpCodeEnum__YieldValue PythonPyc27_OpArg_OpCodeEnum = 86
PythonPyc27_OpArg_OpCodeEnum__PopBlock PythonPyc27_OpArg_OpCodeEnum = 87
PythonPyc27_OpArg_OpCodeEnum__EndFinally PythonPyc27_OpArg_OpCodeEnum = 88
PythonPyc27_OpArg_OpCodeEnum__BuildClass PythonPyc27_OpArg_OpCodeEnum = 89
PythonPyc27_OpArg_OpCodeEnum__StoreName PythonPyc27_OpArg_OpCodeEnum = 90
PythonPyc27_OpArg_OpCodeEnum__DeleteName PythonPyc27_OpArg_OpCodeEnum = 91
PythonPyc27_OpArg_OpCodeEnum__UnpackSequence PythonPyc27_OpArg_OpCodeEnum = 92
PythonPyc27_OpArg_OpCodeEnum__ForIter PythonPyc27_OpArg_OpCodeEnum = 93
PythonPyc27_OpArg_OpCodeEnum__ListAppend PythonPyc27_OpArg_OpCodeEnum = 94
PythonPyc27_OpArg_OpCodeEnum__StoreAttr PythonPyc27_OpArg_OpCodeEnum = 95
PythonPyc27_OpArg_OpCodeEnum__DeleteAttr PythonPyc27_OpArg_OpCodeEnum = 96
PythonPyc27_OpArg_OpCodeEnum__StoreGlobal PythonPyc27_OpArg_OpCodeEnum = 97
PythonPyc27_OpArg_OpCodeEnum__DeleteGlobal PythonPyc27_OpArg_OpCodeEnum = 98
PythonPyc27_OpArg_OpCodeEnum__DupTopx PythonPyc27_OpArg_OpCodeEnum = 99
PythonPyc27_OpArg_OpCodeEnum__LoadConst PythonPyc27_OpArg_OpCodeEnum = 100
PythonPyc27_OpArg_OpCodeEnum__LoadName PythonPyc27_OpArg_OpCodeEnum = 101
PythonPyc27_OpArg_OpCodeEnum__BuildTuple PythonPyc27_OpArg_OpCodeEnum = 102
PythonPyc27_OpArg_OpCodeEnum__BuildList PythonPyc27_OpArg_OpCodeEnum = 103
PythonPyc27_OpArg_OpCodeEnum__BuildSet PythonPyc27_OpArg_OpCodeEnum = 104
PythonPyc27_OpArg_OpCodeEnum__BuildMap PythonPyc27_OpArg_OpCodeEnum = 105
PythonPyc27_OpArg_OpCodeEnum__LoadAttr PythonPyc27_OpArg_OpCodeEnum = 106
PythonPyc27_OpArg_OpCodeEnum__CompareOp PythonPyc27_OpArg_OpCodeEnum = 107
PythonPyc27_OpArg_OpCodeEnum__ImportName PythonPyc27_OpArg_OpCodeEnum = 108
PythonPyc27_OpArg_OpCodeEnum__ImportFrom PythonPyc27_OpArg_OpCodeEnum = 109
PythonPyc27_OpArg_OpCodeEnum__JumpForward PythonPyc27_OpArg_OpCodeEnum = 110
PythonPyc27_OpArg_OpCodeEnum__JumpIfFalseOrPop PythonPyc27_OpArg_OpCodeEnum = 111
PythonPyc27_OpArg_OpCodeEnum__JumpIfTrueOrPop PythonPyc27_OpArg_OpCodeEnum = 112
PythonPyc27_OpArg_OpCodeEnum__JumpAbsolute PythonPyc27_OpArg_OpCodeEnum = 113
PythonPyc27_OpArg_OpCodeEnum__PopJumpIfFalse PythonPyc27_OpArg_OpCodeEnum = 114
PythonPyc27_OpArg_OpCodeEnum__PopJumpIfTrue PythonPyc27_OpArg_OpCodeEnum = 115
PythonPyc27_OpArg_OpCodeEnum__LoadGlobal PythonPyc27_OpArg_OpCodeEnum = 116
PythonPyc27_OpArg_OpCodeEnum__ContinueLoop PythonPyc27_OpArg_OpCodeEnum = 119
PythonPyc27_OpArg_OpCodeEnum__SetupLoop PythonPyc27_OpArg_OpCodeEnum = 120
PythonPyc27_OpArg_OpCodeEnum__SetupExcept PythonPyc27_OpArg_OpCodeEnum = 121
PythonPyc27_OpArg_OpCodeEnum__SetupFinally PythonPyc27_OpArg_OpCodeEnum = 122
PythonPyc27_OpArg_OpCodeEnum__LoadFast PythonPyc27_OpArg_OpCodeEnum = 124
PythonPyc27_OpArg_OpCodeEnum__StoreFast PythonPyc27_OpArg_OpCodeEnum = 125
PythonPyc27_OpArg_OpCodeEnum__DeleteFast PythonPyc27_OpArg_OpCodeEnum = 126
PythonPyc27_OpArg_OpCodeEnum__RaiseVarargs PythonPyc27_OpArg_OpCodeEnum = 130
PythonPyc27_OpArg_OpCodeEnum__CallFunction PythonPyc27_OpArg_OpCodeEnum = 131
PythonPyc27_OpArg_OpCodeEnum__MakeFunction PythonPyc27_OpArg_OpCodeEnum = 132
PythonPyc27_OpArg_OpCodeEnum__BuildSlice PythonPyc27_OpArg_OpCodeEnum = 133
PythonPyc27_OpArg_OpCodeEnum__MakeClosure PythonPyc27_OpArg_OpCodeEnum = 134
PythonPyc27_OpArg_OpCodeEnum__LoadClosure PythonPyc27_OpArg_OpCodeEnum = 135
PythonPyc27_OpArg_OpCodeEnum__LoadDeref PythonPyc27_OpArg_OpCodeEnum = 136
PythonPyc27_OpArg_OpCodeEnum__StoreDeref PythonPyc27_OpArg_OpCodeEnum = 137
PythonPyc27_OpArg_OpCodeEnum__CallFunctionVar PythonPyc27_OpArg_OpCodeEnum = 140
PythonPyc27_OpArg_OpCodeEnum__CallFunctionKw PythonPyc27_OpArg_OpCodeEnum = 141
PythonPyc27_OpArg_OpCodeEnum__CallFunctionVarKw PythonPyc27_OpArg_OpCodeEnum = 142
PythonPyc27_OpArg_OpCodeEnum__SetupWith PythonPyc27_OpArg_OpCodeEnum = 143
PythonPyc27_OpArg_OpCodeEnum__ExtendedArg PythonPyc27_OpArg_OpCodeEnum = 145
PythonPyc27_OpArg_OpCodeEnum__SetAdd PythonPyc27_OpArg_OpCodeEnum = 146
PythonPyc27_OpArg_OpCodeEnum__MapAdd PythonPyc27_OpArg_OpCodeEnum = 147
)
var values_PythonPyc27_OpArg_OpCodeEnum = map[PythonPyc27_OpArg_OpCodeEnum]struct{}{0: {}, 1: {}, 2: {}, 3: {}, 4: {}, 5: {}, 9: {}, 10: {}, 11: {}, 12: {}, 13: {}, 15: {}, 19: {}, 20: {}, 21: {}, 22: {}, 23: {}, 24: {}, 25: {}, 26: {}, 27: {}, 28: {}, 29: {}, 30: {}, 31: {}, 32: {}, 33: {}, 40: {}, 41: {}, 42: {}, 43: {}, 50: {}, 51: {}, 52: {}, 53: {}, 54: {}, 55: {}, 56: {}, 57: {}, 58: {}, 59: {}, 60: {}, 61: {}, 62: {}, 63: {}, 64: {}, 65: {}, 66: {}, 67: {}, 68: {}, 70: {}, 71: {}, 72: {}, 73: {}, 74: {}, 75: {}, 76: {}, 77: {}, 78: {}, 79: {}, 80: {}, 81: {}, 82: {}, 83: {}, 84: {}, 85: {}, 86: {}, 87: {}, 88: {}, 89: {}, 90: {}, 91: {}, 92: {}, 93: {}, 94: {}, 95: {}, 96: {}, 97: {}, 98: {}, 99: {}, 100: {}, 101: {}, 102: {}, 103: {}, 104: {}, 105: {}, 106: {}, 107: {}, 108: {}, 109: {}, 110: {}, 111: {}, 112: {}, 113: {}, 114: {}, 115: {}, 116: {}, 119: {}, 120: {}, 121: {}, 122: {}, 124: {}, 125: {}, 126: {}, 130: {}, 131: {}, 132: {}, 133: {}, 134: {}, 135: {}, 136: {}, 137: {}, 140: {}, 141: {}, 142: {}, 143: {}, 145: {}, 146: {}, 147: {}}
func (v PythonPyc27_OpArg_OpCodeEnum) isDefined() bool {
_, ok := values_PythonPyc27_OpArg_OpCodeEnum[v]
return ok
}
type PythonPyc27_OpArg struct {
OpCode PythonPyc27_OpArg_OpCodeEnum
Arg uint16
_io *kaitai.Stream
_root *PythonPyc27
_parent *PythonPyc27_OpArgs
}
func NewPythonPyc27_OpArg() *PythonPyc27_OpArg {
return &PythonPyc27_OpArg{
}
}
func (this PythonPyc27_OpArg) IO_() *kaitai.Stream {
return this._io
}
func (this *PythonPyc27_OpArg) Read(io *kaitai.Stream, parent *PythonPyc27_OpArgs, root *PythonPyc27) (err error) {
this._io = io
this._parent = parent
this._root = root
tmp23, err := this._io.ReadU1()
if err != nil {
return err
}
this.OpCode = PythonPyc27_OpArg_OpCodeEnum(tmp23)
if (this.OpCode >= PythonPyc27_OpArg_OpCodeEnum__StoreName) {
tmp24, err := this._io.ReadU2le()
if err != nil {
return err
}
this.Arg = uint16(tmp24)
}
return err
}
type PythonPyc27_OpArgs struct {
Items []*PythonPyc27_OpArg
_io *kaitai.Stream
_root *PythonPyc27
_parent *PythonPyc27_Assembly
}
func NewPythonPyc27_OpArgs() *PythonPyc27_OpArgs {
return &PythonPyc27_OpArgs{
}
}
func (this PythonPyc27_OpArgs) IO_() *kaitai.Stream {
return this._io
}
func (this *PythonPyc27_OpArgs) Read(io *kaitai.Stream, parent *PythonPyc27_Assembly, root *PythonPyc27) (err error) {
this._io = io
this._parent = parent
this._root = root
for i := 0;; i++ {
tmp25, err := this._io.EOF()
if err != nil {
return err
}
if tmp25 {
break
}
tmp26 := NewPythonPyc27_OpArg()
err = tmp26.Read(this._io, this, this._root)
if err != nil {
return err
}
this.Items = append(this.Items, tmp26)
}
return err
}
type PythonPyc27_PyObject_ObjectType int
const (
PythonPyc27_PyObject_ObjectType__Tuple PythonPyc27_PyObject_ObjectType = 40
PythonPyc27_PyObject_ObjectType__PyFalse PythonPyc27_PyObject_ObjectType = 70
PythonPyc27_PyObject_ObjectType__None PythonPyc27_PyObject_ObjectType = 78
PythonPyc27_PyObject_ObjectType__StringRef PythonPyc27_PyObject_ObjectType = 82
PythonPyc27_PyObject_ObjectType__PyTrue PythonPyc27_PyObject_ObjectType = 84
PythonPyc27_PyObject_ObjectType__CodeObject PythonPyc27_PyObject_ObjectType = 99
PythonPyc27_PyObject_ObjectType__Int PythonPyc27_PyObject_ObjectType = 105
PythonPyc27_PyObject_ObjectType__String PythonPyc27_PyObject_ObjectType = 115
PythonPyc27_PyObject_ObjectType__Interned PythonPyc27_PyObject_ObjectType = 116
PythonPyc27_PyObject_ObjectType__UnicodeString PythonPyc27_PyObject_ObjectType = 117
)
var values_PythonPyc27_PyObject_ObjectType = map[PythonPyc27_PyObject_ObjectType]struct{}{40: {}, 70: {}, 78: {}, 82: {}, 84: {}, 99: {}, 105: {}, 115: {}, 116: {}, 117: {}}
func (v PythonPyc27_PyObject_ObjectType) isDefined() bool {
_, ok := values_PythonPyc27_PyObject_ObjectType[v]
return ok
}
type PythonPyc27_PyObject struct {
Type PythonPyc27_PyObject_ObjectType
Value interface{}
_io *kaitai.Stream
_root *PythonPyc27
_parent kaitai.Struct
}
func NewPythonPyc27_PyObject() *PythonPyc27_PyObject {
return &PythonPyc27_PyObject{
}
}
func (this PythonPyc27_PyObject) IO_() *kaitai.Stream {
return this._io
}
func (this *PythonPyc27_PyObject) Read(io *kaitai.Stream, parent kaitai.Struct, root *PythonPyc27) (err error) {
this._io = io
this._parent = parent
this._root = root
tmp27, err := this._io.ReadU1()
if err != nil {
return err
}
this.Type = PythonPyc27_PyObject_ObjectType(tmp27)
switch (this.Type) {
case PythonPyc27_PyObject_ObjectType__CodeObject:
tmp28 := NewPythonPyc27_CodeObject()
err = tmp28.Read(this._io, this, this._root)
if err != nil {
return err
}
this.Value = tmp28
case PythonPyc27_PyObject_ObjectType__Int:
tmp29, err := this._io.ReadU4le()
if err != nil {
return err
}
this.Value = tmp29
case PythonPyc27_PyObject_ObjectType__Interned:
tmp30 := NewPythonPyc27_PyObject_InternedString()
err = tmp30.Read(this._io, this, this._root)
if err != nil {
return err
}
this.Value = tmp30
case PythonPyc27_PyObject_ObjectType__None:
tmp31 := NewPythonPyc27_PyObject_PyNone()
err = tmp31.Read(this._io, this, this._root)
if err != nil {
return err
}
this.Value = tmp31
case PythonPyc27_PyObject_ObjectType__PyFalse:
tmp32 := NewPythonPyc27_PyObject_PyFalse()
err = tmp32.Read(this._io, this, this._root)
if err != nil {
return err
}
this.Value = tmp32
case PythonPyc27_PyObject_ObjectType__PyTrue:
tmp33 := NewPythonPyc27_PyObject_PyTrue()
err = tmp33.Read(this._io, this, this._root)
if err != nil {
return err
}
this.Value = tmp33
case PythonPyc27_PyObject_ObjectType__String:
tmp34 := NewPythonPyc27_PyObject_PyString()
err = tmp34.Read(this._io, this, this._root)
if err != nil {
return err
}
this.Value = tmp34
case PythonPyc27_PyObject_ObjectType__StringRef:
tmp35 := NewPythonPyc27_PyObject_StringRef()
err = tmp35.Read(this._io, this, this._root)
if err != nil {
return err
}
this.Value = tmp35
case PythonPyc27_PyObject_ObjectType__Tuple:
tmp36 := NewPythonPyc27_PyObject_Tuple()
err = tmp36.Read(this._io, this, this._root)
if err != nil {
return err
}
this.Value = tmp36
}
return err
}
type PythonPyc27_PyObject_InternedString struct {
Length uint32
Data string
_io *kaitai.Stream
_root *PythonPyc27
_parent *PythonPyc27_PyObject
}
func NewPythonPyc27_PyObject_InternedString() *PythonPyc27_PyObject_InternedString {
return &PythonPyc27_PyObject_InternedString{
}
}
func (this PythonPyc27_PyObject_InternedString) IO_() *kaitai.Stream {
return this._io
}
func (this *PythonPyc27_PyObject_InternedString) Read(io *kaitai.Stream, parent *PythonPyc27_PyObject, root *PythonPyc27) (err error) {
this._io = io
this._parent = parent
this._root = root
tmp37, err := this._io.ReadU4le()
if err != nil {
return err
}
this.Length = uint32(tmp37)
tmp38, err := this._io.ReadBytes(int(this.Length))
if err != nil {
return err
}
tmp38 = tmp38
this.Data = string(tmp38)
return err
}
type PythonPyc27_PyObject_PyFalse struct {
_io *kaitai.Stream
_root *PythonPyc27
_parent *PythonPyc27_PyObject
}
func NewPythonPyc27_PyObject_PyFalse() *PythonPyc27_PyObject_PyFalse {
return &PythonPyc27_PyObject_PyFalse{
}
}
func (this PythonPyc27_PyObject_PyFalse) IO_() *kaitai.Stream {
return this._io
}
func (this *PythonPyc27_PyObject_PyFalse) Read(io *kaitai.Stream, parent *PythonPyc27_PyObject, root *PythonPyc27) (err error) {
this._io = io
this._parent = parent
this._root = root
return err
}
type PythonPyc27_PyObject_PyNone struct {
_io *kaitai.Stream
_root *PythonPyc27
_parent *PythonPyc27_PyObject
}
func NewPythonPyc27_PyObject_PyNone() *PythonPyc27_PyObject_PyNone {
return &PythonPyc27_PyObject_PyNone{
}
}
func (this PythonPyc27_PyObject_PyNone) IO_() *kaitai.Stream {
return this._io
}
func (this *PythonPyc27_PyObject_PyNone) Read(io *kaitai.Stream, parent *PythonPyc27_PyObject, root *PythonPyc27) (err error) {
this._io = io
this._parent = parent
this._root = root
return err
}
type PythonPyc27_PyObject_PyString struct {
Length uint32
Data []byte
_io *kaitai.Stream
_root *PythonPyc27
_parent *PythonPyc27_PyObject
}
func NewPythonPyc27_PyObject_PyString() *PythonPyc27_PyObject_PyString {
return &PythonPyc27_PyObject_PyString{
}
}
func (this PythonPyc27_PyObject_PyString) IO_() *kaitai.Stream {
return this._io
}
func (this *PythonPyc27_PyObject_PyString) Read(io *kaitai.Stream, parent *PythonPyc27_PyObject, root *PythonPyc27) (err error) {
this._io = io
this._parent = parent
this._root = root
tmp39, err := this._io.ReadU4le()
if err != nil {
return err
}
this.Length = uint32(tmp39)
tmp40, err := this._io.ReadBytes(int(this.Length))
if err != nil {
return err
}
tmp40 = tmp40
this.Data = tmp40
return err
}
type PythonPyc27_PyObject_PyTrue struct {
_io *kaitai.Stream
_root *PythonPyc27
_parent *PythonPyc27_PyObject
}
func NewPythonPyc27_PyObject_PyTrue() *PythonPyc27_PyObject_PyTrue {
return &PythonPyc27_PyObject_PyTrue{
}
}
func (this PythonPyc27_PyObject_PyTrue) IO_() *kaitai.Stream {
return this._io
}
func (this *PythonPyc27_PyObject_PyTrue) Read(io *kaitai.Stream, parent *PythonPyc27_PyObject, root *PythonPyc27) (err error) {
this._io = io
this._parent = parent
this._root = root
return err
}
type PythonPyc27_PyObject_StringRef struct {
InternedListIndex uint32
_io *kaitai.Stream
_root *PythonPyc27
_parent *PythonPyc27_PyObject
}
func NewPythonPyc27_PyObject_StringRef() *PythonPyc27_PyObject_StringRef {
return &PythonPyc27_PyObject_StringRef{
}
}
func (this PythonPyc27_PyObject_StringRef) IO_() *kaitai.Stream {
return this._io
}
func (this *PythonPyc27_PyObject_StringRef) Read(io *kaitai.Stream, parent *PythonPyc27_PyObject, root *PythonPyc27) (err error) {
this._io = io
this._parent = parent
this._root = root
tmp41, err := this._io.ReadU4le()
if err != nil {
return err
}
this.InternedListIndex = uint32(tmp41)
return err
}
type PythonPyc27_PyObject_Tuple struct {
Count uint32
Items []*PythonPyc27_PyObject
_io *kaitai.Stream
_root *PythonPyc27
_parent *PythonPyc27_PyObject
}
func NewPythonPyc27_PyObject_Tuple() *PythonPyc27_PyObject_Tuple {
return &PythonPyc27_PyObject_Tuple{
}
}
func (this PythonPyc27_PyObject_Tuple) IO_() *kaitai.Stream {
return this._io
}
func (this *PythonPyc27_PyObject_Tuple) Read(io *kaitai.Stream, parent *PythonPyc27_PyObject, root *PythonPyc27) (err error) {
this._io = io
this._parent = parent
this._root = root
tmp42, err := this._io.ReadU4le()
if err != nil {
return err
}
this.Count = uint32(tmp42)
for i := 0; i < int(this.Count); i++ {
_ = i
tmp43 := NewPythonPyc27_PyObject()
err = tmp43.Read(this._io, this, this._root)
if err != nil {
return err
}
this.Items = append(this.Items, tmp43)
}
return err
}
type PythonPyc27_PyObject_UnicodeString struct {
Length uint32
Data string
_io *kaitai.Stream
_root *PythonPyc27
_parent kaitai.Struct
}
func NewPythonPyc27_PyObject_UnicodeString() *PythonPyc27_PyObject_UnicodeString {
return &PythonPyc27_PyObject_UnicodeString{
}
}
func (this PythonPyc27_PyObject_UnicodeString) IO_() *kaitai.Stream {
return this._io
}
func (this *PythonPyc27_PyObject_UnicodeString) Read(io *kaitai.Stream, parent kaitai.Struct, root *PythonPyc27) (err error) {
this._io = io
this._parent = parent
this._root = root
tmp44, err := this._io.ReadU4le()
if err != nil {
return err
}
this.Length = uint32(tmp44)
tmp45, err := this._io.ReadBytes(int(this.Length))
if err != nil {
return err
}
tmp45 = tmp45
this.Data = string(tmp45)
return err
}