python-pickle 0.1.0
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +7 -0
- data/.document +3 -0
- data/.github/workflows/ruby.yml +27 -0
- data/.gitignore +5 -0
- data/.rspec +1 -0
- data/.yardopts +1 -0
- data/ChangeLog.md +14 -0
- data/Gemfile +15 -0
- data/LICENSE.txt +20 -0
- data/README.md +149 -0
- data/Rakefile +13 -0
- data/gemspec.yml +25 -0
- data/lib/python/pickle/byte_array.rb +40 -0
- data/lib/python/pickle/deserializer.rb +595 -0
- data/lib/python/pickle/exceptions.rb +12 -0
- data/lib/python/pickle/instruction.rb +52 -0
- data/lib/python/pickle/instructions/add_items.rb +26 -0
- data/lib/python/pickle/instructions/append.rb +24 -0
- data/lib/python/pickle/instructions/appends.rb +26 -0
- data/lib/python/pickle/instructions/bin_bytes.rb +32 -0
- data/lib/python/pickle/instructions/bin_bytes8.rb +32 -0
- data/lib/python/pickle/instructions/bin_float.rb +29 -0
- data/lib/python/pickle/instructions/bin_get.rb +27 -0
- data/lib/python/pickle/instructions/bin_int1.rb +29 -0
- data/lib/python/pickle/instructions/bin_put.rb +29 -0
- data/lib/python/pickle/instructions/bin_string.rb +32 -0
- data/lib/python/pickle/instructions/bin_unicode.rb +32 -0
- data/lib/python/pickle/instructions/bin_unicode8.rb +32 -0
- data/lib/python/pickle/instructions/build.rb +24 -0
- data/lib/python/pickle/instructions/byte_array8.rb +32 -0
- data/lib/python/pickle/instructions/dict.rb +17 -0
- data/lib/python/pickle/instructions/dup.rb +24 -0
- data/lib/python/pickle/instructions/empty_dict.rb +26 -0
- data/lib/python/pickle/instructions/empty_list.rb +26 -0
- data/lib/python/pickle/instructions/empty_set.rb +26 -0
- data/lib/python/pickle/instructions/empty_tuple.rb +26 -0
- data/lib/python/pickle/instructions/ext1.rb +29 -0
- data/lib/python/pickle/instructions/ext2.rb +29 -0
- data/lib/python/pickle/instructions/ext4.rb +29 -0
- data/lib/python/pickle/instructions/float.rb +24 -0
- data/lib/python/pickle/instructions/frame.rb +29 -0
- data/lib/python/pickle/instructions/frozen_set.rb +26 -0
- data/lib/python/pickle/instructions/get.rb +27 -0
- data/lib/python/pickle/instructions/global.rb +62 -0
- data/lib/python/pickle/instructions/has_length_and_value.rb +58 -0
- data/lib/python/pickle/instructions/has_value.rb +50 -0
- data/lib/python/pickle/instructions/int.rb +24 -0
- data/lib/python/pickle/instructions/list.rb +24 -0
- data/lib/python/pickle/instructions/long.rb +24 -0
- data/lib/python/pickle/instructions/long1.rb +32 -0
- data/lib/python/pickle/instructions/long4.rb +32 -0
- data/lib/python/pickle/instructions/long_bin_get.rb +27 -0
- data/lib/python/pickle/instructions/mark.rb +24 -0
- data/lib/python/pickle/instructions/memoize.rb +26 -0
- data/lib/python/pickle/instructions/new_false.rb +24 -0
- data/lib/python/pickle/instructions/new_obj.rb +26 -0
- data/lib/python/pickle/instructions/new_obj_ex.rb +26 -0
- data/lib/python/pickle/instructions/new_true.rb +24 -0
- data/lib/python/pickle/instructions/next_buffer.rb +26 -0
- data/lib/python/pickle/instructions/none.rb +24 -0
- data/lib/python/pickle/instructions/pop.rb +24 -0
- data/lib/python/pickle/instructions/pop_mark.rb +24 -0
- data/lib/python/pickle/instructions/proto.rb +29 -0
- data/lib/python/pickle/instructions/put.rb +24 -0
- data/lib/python/pickle/instructions/readonly_buffer.rb +26 -0
- data/lib/python/pickle/instructions/reduce.rb +24 -0
- data/lib/python/pickle/instructions/set_item.rb +24 -0
- data/lib/python/pickle/instructions/set_items.rb +26 -0
- data/lib/python/pickle/instructions/short_bin_bytes.rb +32 -0
- data/lib/python/pickle/instructions/short_bin_string.rb +32 -0
- data/lib/python/pickle/instructions/short_bin_unicode.rb +32 -0
- data/lib/python/pickle/instructions/stack_global.rb +26 -0
- data/lib/python/pickle/instructions/stop.rb +24 -0
- data/lib/python/pickle/instructions/string.rb +24 -0
- data/lib/python/pickle/instructions/tuple.rb +24 -0
- data/lib/python/pickle/instructions/tuple1.rb +24 -0
- data/lib/python/pickle/instructions/tuple2.rb +24 -0
- data/lib/python/pickle/instructions/tuple3.rb +24 -0
- data/lib/python/pickle/protocol.rb +56 -0
- data/lib/python/pickle/protocol0.rb +399 -0
- data/lib/python/pickle/protocol1.rb +183 -0
- data/lib/python/pickle/protocol2.rb +229 -0
- data/lib/python/pickle/protocol3.rb +163 -0
- data/lib/python/pickle/protocol4.rb +285 -0
- data/lib/python/pickle/protocol5.rb +218 -0
- data/lib/python/pickle/py_class.rb +75 -0
- data/lib/python/pickle/py_object.rb +141 -0
- data/lib/python/pickle/tuple.rb +19 -0
- data/lib/python/pickle/version.rb +6 -0
- data/lib/python/pickle.rb +226 -0
- data/python-pickle.gemspec +62 -0
- data/spec/byte_array_spec.rb +54 -0
- data/spec/deserializer_spec.rb +1201 -0
- data/spec/fixtures/ascii_str_v3.pkl +0 -0
- data/spec/fixtures/ascii_str_v4.pkl +0 -0
- data/spec/fixtures/ascii_str_v5.pkl +0 -0
- data/spec/fixtures/bin_str_v0.pkl +3 -0
- data/spec/fixtures/bin_str_v1.pkl +0 -0
- data/spec/fixtures/bin_str_v2.pkl +0 -0
- data/spec/fixtures/bin_str_v3.pkl +0 -0
- data/spec/fixtures/bin_str_v4.pkl +0 -0
- data/spec/fixtures/bin_str_v5.pkl +0 -0
- data/spec/fixtures/bytearray_v0.pkl +10 -0
- data/spec/fixtures/bytearray_v1.pkl +0 -0
- data/spec/fixtures/bytearray_v2.pkl +0 -0
- data/spec/fixtures/bytearray_v3.pkl +0 -0
- data/spec/fixtures/bytearray_v4.pkl +0 -0
- data/spec/fixtures/bytearray_v5.pkl +0 -0
- data/spec/fixtures/class_v0.pkl +4 -0
- data/spec/fixtures/class_v1.pkl +0 -0
- data/spec/fixtures/class_v2.pkl +0 -0
- data/spec/fixtures/class_v3.pkl +0 -0
- data/spec/fixtures/class_v4.pkl +0 -0
- data/spec/fixtures/class_v5.pkl +0 -0
- data/spec/fixtures/dict_v0.pkl +6 -0
- data/spec/fixtures/dict_v1.pkl +0 -0
- data/spec/fixtures/dict_v2.pkl +0 -0
- data/spec/fixtures/dict_v3.pkl +0 -0
- data/spec/fixtures/dict_v4.pkl +0 -0
- data/spec/fixtures/dict_v5.pkl +0 -0
- data/spec/fixtures/escaped_str_v0.pkl +3 -0
- data/spec/fixtures/escaped_str_v1.pkl +0 -0
- data/spec/fixtures/escaped_str_v2.pkl +0 -0
- data/spec/fixtures/false_v0.pkl +2 -0
- data/spec/fixtures/false_v1.pkl +2 -0
- data/spec/fixtures/false_v2.pkl +1 -0
- data/spec/fixtures/false_v3.pkl +1 -0
- data/spec/fixtures/false_v4.pkl +1 -0
- data/spec/fixtures/false_v5.pkl +1 -0
- data/spec/fixtures/float_v0.pkl +2 -0
- data/spec/fixtures/float_v1.pkl +1 -0
- data/spec/fixtures/float_v2.pkl +1 -0
- data/spec/fixtures/float_v3.pkl +1 -0
- data/spec/fixtures/float_v4.pkl +0 -0
- data/spec/fixtures/float_v5.pkl +0 -0
- data/spec/fixtures/function_v0.pkl +4 -0
- data/spec/fixtures/function_v1.pkl +0 -0
- data/spec/fixtures/function_v2.pkl +0 -0
- data/spec/fixtures/function_v3.pkl +0 -0
- data/spec/fixtures/function_v4.pkl +0 -0
- data/spec/fixtures/function_v5.pkl +0 -0
- data/spec/fixtures/hex_str_v0.pkl +3 -0
- data/spec/fixtures/hex_str_v1.pkl +0 -0
- data/spec/fixtures/hex_str_v2.pkl +0 -0
- data/spec/fixtures/int_v0.pkl +2 -0
- data/spec/fixtures/int_v1.pkl +1 -0
- data/spec/fixtures/int_v2.pkl +1 -0
- data/spec/fixtures/int_v3.pkl +1 -0
- data/spec/fixtures/int_v4.pkl +1 -0
- data/spec/fixtures/int_v5.pkl +1 -0
- data/spec/fixtures/list_v0.pkl +7 -0
- data/spec/fixtures/list_v1.pkl +0 -0
- data/spec/fixtures/list_v2.pkl +0 -0
- data/spec/fixtures/list_v3.pkl +0 -0
- data/spec/fixtures/list_v4.pkl +0 -0
- data/spec/fixtures/list_v5.pkl +0 -0
- data/spec/fixtures/long_v0.pkl +2 -0
- data/spec/fixtures/long_v1.pkl +2 -0
- data/spec/fixtures/long_v2.pkl +0 -0
- data/spec/fixtures/long_v3.pkl +0 -0
- data/spec/fixtures/long_v4.pkl +0 -0
- data/spec/fixtures/long_v5.pkl +0 -0
- data/spec/fixtures/nested_dict_v0.pkl +12 -0
- data/spec/fixtures/nested_dict_v1.pkl +0 -0
- data/spec/fixtures/nested_dict_v2.pkl +0 -0
- data/spec/fixtures/nested_dict_v3.pkl +0 -0
- data/spec/fixtures/nested_dict_v4.pkl +0 -0
- data/spec/fixtures/nested_dict_v5.pkl +0 -0
- data/spec/fixtures/nested_list_v0.pkl +9 -0
- data/spec/fixtures/nested_list_v1.pkl +0 -0
- data/spec/fixtures/nested_list_v2.pkl +0 -0
- data/spec/fixtures/nested_list_v3.pkl +0 -0
- data/spec/fixtures/nested_list_v4.pkl +0 -0
- data/spec/fixtures/nested_list_v5.pkl +0 -0
- data/spec/fixtures/none_v0.pkl +1 -0
- data/spec/fixtures/none_v1.pkl +1 -0
- data/spec/fixtures/none_v2.pkl +1 -0
- data/spec/fixtures/none_v3.pkl +1 -0
- data/spec/fixtures/none_v4.pkl +1 -0
- data/spec/fixtures/none_v5.pkl +1 -0
- data/spec/fixtures/object_v0.pkl +19 -0
- data/spec/fixtures/object_v1.pkl +0 -0
- data/spec/fixtures/object_v2.pkl +0 -0
- data/spec/fixtures/object_v3.pkl +0 -0
- data/spec/fixtures/object_v4.pkl +0 -0
- data/spec/fixtures/object_v5.pkl +0 -0
- data/spec/fixtures/str_v0.pkl +3 -0
- data/spec/fixtures/str_v1.pkl +0 -0
- data/spec/fixtures/str_v2.pkl +0 -0
- data/spec/fixtures/str_v3.pkl +0 -0
- data/spec/fixtures/str_v4.pkl +0 -0
- data/spec/fixtures/str_v5.pkl +0 -0
- data/spec/fixtures/true_v0.pkl +2 -0
- data/spec/fixtures/true_v1.pkl +2 -0
- data/spec/fixtures/true_v2.pkl +1 -0
- data/spec/fixtures/true_v3.pkl +1 -0
- data/spec/fixtures/true_v4.pkl +1 -0
- data/spec/fixtures/true_v5.pkl +1 -0
- data/spec/fixtures/unicode_str_v0.pkl +3 -0
- data/spec/fixtures/unicode_str_v1.pkl +0 -0
- data/spec/fixtures/unicode_str_v2.pkl +0 -0
- data/spec/fixtures/unicode_str_v3.pkl +0 -0
- data/spec/fixtures/unicode_str_v4.pkl +0 -0
- data/spec/fixtures/unicode_str_v5.pkl +0 -0
- data/spec/generate_pickles2.py +41 -0
- data/spec/generate_pickles3.py +40 -0
- data/spec/integration/load/protocol0_spec.rb +258 -0
- data/spec/integration/load/protocol1_spec.rb +258 -0
- data/spec/integration/load/protocol2_spec.rb +258 -0
- data/spec/integration/load/protocol3_spec.rb +258 -0
- data/spec/integration/load/protocol4_spec.rb +258 -0
- data/spec/integration/load/protocol5_spec.rb +258 -0
- data/spec/integration/parse/protocol0_spec.rb +467 -0
- data/spec/integration/parse/protocol1_spec.rb +459 -0
- data/spec/integration/parse/protocol2_spec.rb +471 -0
- data/spec/integration/parse/protocol3_spec.rb +407 -0
- data/spec/integration/parse/protocol4_spec.rb +439 -0
- data/spec/integration/parse/protocol5_spec.rb +419 -0
- data/spec/pickle_spec.rb +163 -0
- data/spec/protocol0_read_instruction_examples.rb +211 -0
- data/spec/protocol0_spec.rb +445 -0
- data/spec/protocol1_read_instruction_examples.rb +156 -0
- data/spec/protocol1_spec.rb +59 -0
- data/spec/protocol2_read_instruction_examples.rb +135 -0
- data/spec/protocol2_spec.rb +128 -0
- data/spec/protocol3_read_instruction_examples.rb +29 -0
- data/spec/protocol3_spec.rb +32 -0
- data/spec/protocol4_read_instruction_examples.rb +142 -0
- data/spec/protocol4_spec.rb +58 -0
- data/spec/protocol5_spec.rb +68 -0
- data/spec/py_class_spec.rb +62 -0
- data/spec/py_object_spec.rb +149 -0
- data/spec/spec_helper.rb +3 -0
- data/spec/tuple_spec.rb +18 -0
- metadata +325 -0
@@ -0,0 +1,27 @@
|
|
1
|
+
require 'python/pickle/instruction'
|
2
|
+
require 'python/pickle/instructions/has_value'
|
3
|
+
|
4
|
+
module Python
|
5
|
+
module Pickle
|
6
|
+
module Instructions
|
7
|
+
#
|
8
|
+
# Represents the `GET` instruction.
|
9
|
+
#
|
10
|
+
class Get < Instruction
|
11
|
+
|
12
|
+
include HasValue
|
13
|
+
|
14
|
+
#
|
15
|
+
# Initializes the `GET` instruction.
|
16
|
+
#
|
17
|
+
# @param [Integer] value
|
18
|
+
# The `GET` instruction's value.
|
19
|
+
#
|
20
|
+
def initialize(value)
|
21
|
+
super(:GET,value)
|
22
|
+
end
|
23
|
+
|
24
|
+
end
|
25
|
+
end
|
26
|
+
end
|
27
|
+
end
|
@@ -0,0 +1,62 @@
|
|
1
|
+
require 'python/pickle/instruction'
|
2
|
+
require 'python/pickle/instructions/has_value'
|
3
|
+
|
4
|
+
module Python
|
5
|
+
module Pickle
|
6
|
+
module Instructions
|
7
|
+
class Global < Instruction
|
8
|
+
|
9
|
+
# The global object namespace.
|
10
|
+
#
|
11
|
+
# @return [String]
|
12
|
+
attr_reader :namespace
|
13
|
+
|
14
|
+
# The global object name.
|
15
|
+
#
|
16
|
+
# @return [String]
|
17
|
+
attr_reader :name
|
18
|
+
|
19
|
+
#
|
20
|
+
# Initializes the `GLOBAL` instruction.
|
21
|
+
#
|
22
|
+
# @param [String] namespace
|
23
|
+
# The namespace name for the global object.
|
24
|
+
#
|
25
|
+
# @param [String] name
|
26
|
+
# The name of the global object.
|
27
|
+
#
|
28
|
+
def initialize(namespace,name)
|
29
|
+
super(:GLOBAL)
|
30
|
+
|
31
|
+
@namespace = namespace
|
32
|
+
@name = name
|
33
|
+
end
|
34
|
+
|
35
|
+
#
|
36
|
+
# Compares the `GLOBAL` instruction to another instruction.
|
37
|
+
#
|
38
|
+
# @param [Instruction] other
|
39
|
+
# The other instruction to compare against.
|
40
|
+
#
|
41
|
+
# @return [Boolean]
|
42
|
+
# Indicates whether the other instruction matches this one.
|
43
|
+
#
|
44
|
+
def ==(other)
|
45
|
+
super(other) && \
|
46
|
+
(@namespace == other.namespace) && \
|
47
|
+
(@name == other.name)
|
48
|
+
end
|
49
|
+
|
50
|
+
#
|
51
|
+
# Converts the `GLOBAL` instructions to a String.
|
52
|
+
#
|
53
|
+
# @return [String]
|
54
|
+
#
|
55
|
+
def to_s
|
56
|
+
"#{super} #{@namespace}.#{@name}"
|
57
|
+
end
|
58
|
+
|
59
|
+
end
|
60
|
+
end
|
61
|
+
end
|
62
|
+
end
|
@@ -0,0 +1,58 @@
|
|
1
|
+
module Python
|
2
|
+
module Pickle
|
3
|
+
module Instructions
|
4
|
+
#
|
5
|
+
# A mixin which adds a length and a value to an instruction class.
|
6
|
+
#
|
7
|
+
module HasLengthAndValue
|
8
|
+
# The length of the value associated with the instruction.
|
9
|
+
#
|
10
|
+
# @return [Integer]
|
11
|
+
attr_reader :length
|
12
|
+
|
13
|
+
# The value associated with the instruction.
|
14
|
+
#
|
15
|
+
# @return [Object]
|
16
|
+
attr_reader :value
|
17
|
+
|
18
|
+
#
|
19
|
+
# Initializes the instruction.
|
20
|
+
#
|
21
|
+
# @param [Symbol] opcode
|
22
|
+
#
|
23
|
+
# @param [Object] value
|
24
|
+
#
|
25
|
+
def initialize(opcode,length,value)
|
26
|
+
super(opcode)
|
27
|
+
|
28
|
+
@value = value
|
29
|
+
@length = length
|
30
|
+
end
|
31
|
+
|
32
|
+
#
|
33
|
+
# Compares the instruction to another instruction.
|
34
|
+
#
|
35
|
+
# @param [Instruction] other
|
36
|
+
# The other instruction to compare against.
|
37
|
+
#
|
38
|
+
# @return [Boolean]
|
39
|
+
# Indicates whether the other instruction matches this one.
|
40
|
+
#
|
41
|
+
def ==(other)
|
42
|
+
super(other) &&
|
43
|
+
other.kind_of?(HasLengthAndValue) &&
|
44
|
+
(@length == other.length && @value == other.value)
|
45
|
+
end
|
46
|
+
|
47
|
+
#
|
48
|
+
# Converts the instruction to a String.
|
49
|
+
#
|
50
|
+
# @return [String]
|
51
|
+
#
|
52
|
+
def to_s
|
53
|
+
"#{super} #{@length.inspect} #{@value.inspect}"
|
54
|
+
end
|
55
|
+
end
|
56
|
+
end
|
57
|
+
end
|
58
|
+
end
|
@@ -0,0 +1,50 @@
|
|
1
|
+
module Python
|
2
|
+
module Pickle
|
3
|
+
module Instructions
|
4
|
+
#
|
5
|
+
# A mixin which adds a value to an instruction class.
|
6
|
+
#
|
7
|
+
module HasValue
|
8
|
+
# The value associated with the instruction.
|
9
|
+
#
|
10
|
+
# @return [Object]
|
11
|
+
attr_reader :value
|
12
|
+
|
13
|
+
#
|
14
|
+
# Initializes the instruction.
|
15
|
+
#
|
16
|
+
# @param [Symbol] opcode
|
17
|
+
#
|
18
|
+
# @param [Object] value
|
19
|
+
#
|
20
|
+
def initialize(opcode,value)
|
21
|
+
super(opcode)
|
22
|
+
|
23
|
+
@value = value
|
24
|
+
end
|
25
|
+
|
26
|
+
#
|
27
|
+
# Compares the instruction to another instruction.
|
28
|
+
#
|
29
|
+
# @param [Instruction] other
|
30
|
+
# The other instruction to compare against.
|
31
|
+
#
|
32
|
+
# @return [Boolean]
|
33
|
+
# Indicates whether the other instruction matches this one.
|
34
|
+
#
|
35
|
+
def ==(other)
|
36
|
+
super(other) && other.kind_of?(HasValue) && (@value == other.value)
|
37
|
+
end
|
38
|
+
|
39
|
+
#
|
40
|
+
# Converts the instruction to a String.
|
41
|
+
#
|
42
|
+
# @return [String]
|
43
|
+
#
|
44
|
+
def to_s
|
45
|
+
"#{super} #{@value.inspect}"
|
46
|
+
end
|
47
|
+
end
|
48
|
+
end
|
49
|
+
end
|
50
|
+
end
|
@@ -0,0 +1,24 @@
|
|
1
|
+
require 'python/pickle/instruction'
|
2
|
+
require 'python/pickle/instructions/has_value'
|
3
|
+
|
4
|
+
module Python
|
5
|
+
module Pickle
|
6
|
+
module Instructions
|
7
|
+
class Int < Instruction
|
8
|
+
|
9
|
+
include HasValue
|
10
|
+
|
11
|
+
#
|
12
|
+
# Initializes the `INT` instruction.
|
13
|
+
#
|
14
|
+
# @param [Integer] value
|
15
|
+
# The `INT` instruction's value.
|
16
|
+
#
|
17
|
+
def initialize(value)
|
18
|
+
super(:INT,value)
|
19
|
+
end
|
20
|
+
|
21
|
+
end
|
22
|
+
end
|
23
|
+
end
|
24
|
+
end
|
@@ -0,0 +1,24 @@
|
|
1
|
+
require 'python/pickle/instruction'
|
2
|
+
|
3
|
+
module Python
|
4
|
+
module Pickle
|
5
|
+
module Instructions
|
6
|
+
#
|
7
|
+
# Represents a pickle `LIST` instruction.
|
8
|
+
#
|
9
|
+
class List < Instruction
|
10
|
+
|
11
|
+
#
|
12
|
+
# Initializes the `LIST` instruction.
|
13
|
+
#
|
14
|
+
def initialize
|
15
|
+
super(:LIST)
|
16
|
+
end
|
17
|
+
|
18
|
+
end
|
19
|
+
|
20
|
+
# The `LIST` instruction.
|
21
|
+
LIST = List.new
|
22
|
+
end
|
23
|
+
end
|
24
|
+
end
|
@@ -0,0 +1,24 @@
|
|
1
|
+
require 'python/pickle/instruction'
|
2
|
+
require 'python/pickle/instructions/has_value'
|
3
|
+
|
4
|
+
module Python
|
5
|
+
module Pickle
|
6
|
+
module Instructions
|
7
|
+
class Long < Instruction
|
8
|
+
|
9
|
+
include HasValue
|
10
|
+
|
11
|
+
#
|
12
|
+
# Initializes the `LONG` instruction.
|
13
|
+
#
|
14
|
+
# @param [Integer] value
|
15
|
+
# The `LONG` instruction's value.
|
16
|
+
#
|
17
|
+
def initialize(value)
|
18
|
+
super(:LONG,value)
|
19
|
+
end
|
20
|
+
|
21
|
+
end
|
22
|
+
end
|
23
|
+
end
|
24
|
+
end
|
@@ -0,0 +1,32 @@
|
|
1
|
+
require 'python/pickle/instruction'
|
2
|
+
require 'python/pickle/instructions/has_length_and_value'
|
3
|
+
|
4
|
+
module Python
|
5
|
+
module Pickle
|
6
|
+
module Instructions
|
7
|
+
#
|
8
|
+
# Represents the `LONG1` instruction.
|
9
|
+
#
|
10
|
+
# @note introduces in protocol 1.
|
11
|
+
#
|
12
|
+
class Long1 < Instruction
|
13
|
+
|
14
|
+
include HasLengthAndValue
|
15
|
+
|
16
|
+
#
|
17
|
+
# Initializes the `LONG1` instruction.
|
18
|
+
#
|
19
|
+
# @param [Integer] length
|
20
|
+
# The length of the `LONG1` value in bytes.
|
21
|
+
#
|
22
|
+
# @param [Long1] value
|
23
|
+
# The `LONG1` instruction's value.
|
24
|
+
#
|
25
|
+
def initialize(length,value)
|
26
|
+
super(:LONG1,length,value)
|
27
|
+
end
|
28
|
+
|
29
|
+
end
|
30
|
+
end
|
31
|
+
end
|
32
|
+
end
|
@@ -0,0 +1,32 @@
|
|
1
|
+
require 'python/pickle/instruction'
|
2
|
+
require 'python/pickle/instructions/has_length_and_value'
|
3
|
+
|
4
|
+
module Python
|
5
|
+
module Pickle
|
6
|
+
module Instructions
|
7
|
+
#
|
8
|
+
# Represents the `LONG4` instruction.
|
9
|
+
#
|
10
|
+
# @note introduces in protocol 1.
|
11
|
+
#
|
12
|
+
class Long4 < Instruction
|
13
|
+
|
14
|
+
include HasLengthAndValue
|
15
|
+
|
16
|
+
#
|
17
|
+
# Initializes the `LONG4` instruction.
|
18
|
+
#
|
19
|
+
# @param [Integer] length
|
20
|
+
# The length of the `LONG4` value in bytes.
|
21
|
+
#
|
22
|
+
# @param [Long4] value
|
23
|
+
# The `LONG4` instruction's value.
|
24
|
+
#
|
25
|
+
def initialize(length,value)
|
26
|
+
super(:LONG4,length,value)
|
27
|
+
end
|
28
|
+
|
29
|
+
end
|
30
|
+
end
|
31
|
+
end
|
32
|
+
end
|
@@ -0,0 +1,27 @@
|
|
1
|
+
require 'python/pickle/instruction'
|
2
|
+
require 'python/pickle/instructions/has_value'
|
3
|
+
|
4
|
+
module Python
|
5
|
+
module Pickle
|
6
|
+
module Instructions
|
7
|
+
#
|
8
|
+
# Represents the `LONG_BINGET` instruction.
|
9
|
+
#
|
10
|
+
class LongBinGet < Instruction
|
11
|
+
|
12
|
+
include HasValue
|
13
|
+
|
14
|
+
#
|
15
|
+
# Initializes the `LONG_BINGET` instruction.
|
16
|
+
#
|
17
|
+
# @param [Integer] value
|
18
|
+
# The `LONG_BINGET` instruction's value.
|
19
|
+
#
|
20
|
+
def initialize(value)
|
21
|
+
super(:LONG_BINGET,value)
|
22
|
+
end
|
23
|
+
|
24
|
+
end
|
25
|
+
end
|
26
|
+
end
|
27
|
+
end
|
@@ -0,0 +1,24 @@
|
|
1
|
+
require 'python/pickle/instruction'
|
2
|
+
|
3
|
+
module Python
|
4
|
+
module Pickle
|
5
|
+
module Instructions
|
6
|
+
#
|
7
|
+
# Represents a pickle `MARK` instruction.
|
8
|
+
#
|
9
|
+
class Mark < Instruction
|
10
|
+
|
11
|
+
#
|
12
|
+
# Initializes the `MARK` instruction.
|
13
|
+
#
|
14
|
+
def initialize
|
15
|
+
super(:MARK)
|
16
|
+
end
|
17
|
+
|
18
|
+
end
|
19
|
+
|
20
|
+
# The `MARK` instruction.
|
21
|
+
MARK = Mark.new
|
22
|
+
end
|
23
|
+
end
|
24
|
+
end
|
@@ -0,0 +1,26 @@
|
|
1
|
+
require 'python/pickle/instruction'
|
2
|
+
|
3
|
+
module Python
|
4
|
+
module Pickle
|
5
|
+
module Instructions
|
6
|
+
#
|
7
|
+
# Represents a pickle `MEMOIZE` instruction.
|
8
|
+
#
|
9
|
+
# @note introduced in protocol 4.
|
10
|
+
#
|
11
|
+
class Memoize < Instruction
|
12
|
+
|
13
|
+
#
|
14
|
+
# Initializes the `MEMOIZE` instruction.
|
15
|
+
#
|
16
|
+
def initialize
|
17
|
+
super(:MEMOIZE)
|
18
|
+
end
|
19
|
+
|
20
|
+
end
|
21
|
+
|
22
|
+
# The `MEMOIZE` instruction.
|
23
|
+
MEMOIZE = Memoize.new
|
24
|
+
end
|
25
|
+
end
|
26
|
+
end
|
@@ -0,0 +1,24 @@
|
|
1
|
+
require 'python/pickle/instruction'
|
2
|
+
|
3
|
+
module Python
|
4
|
+
module Pickle
|
5
|
+
module Instructions
|
6
|
+
#
|
7
|
+
# Represents a pickle `NEWFALSE` instruction.
|
8
|
+
#
|
9
|
+
class NewFalse < Instruction
|
10
|
+
|
11
|
+
#
|
12
|
+
# Initializes the `NEWFALSE` instruction.
|
13
|
+
#
|
14
|
+
def initialize
|
15
|
+
super(:NEWFALSE)
|
16
|
+
end
|
17
|
+
|
18
|
+
end
|
19
|
+
|
20
|
+
# The `NEWFALSE` instruction.
|
21
|
+
NEWFALSE = NewFalse.new
|
22
|
+
end
|
23
|
+
end
|
24
|
+
end
|
@@ -0,0 +1,26 @@
|
|
1
|
+
require 'python/pickle/instruction'
|
2
|
+
|
3
|
+
module Python
|
4
|
+
module Pickle
|
5
|
+
module Instructions
|
6
|
+
#
|
7
|
+
# Represents a pickle `NEWOBJ` instruction.
|
8
|
+
#
|
9
|
+
# @note introduced in protocol 2.
|
10
|
+
#
|
11
|
+
class NewObj < Instruction
|
12
|
+
|
13
|
+
#
|
14
|
+
# Initializes the `NEWOBJ` instruction.
|
15
|
+
#
|
16
|
+
def initialize
|
17
|
+
super(:NEWOBJ)
|
18
|
+
end
|
19
|
+
|
20
|
+
end
|
21
|
+
|
22
|
+
# The `NEWOBJ` instruction.
|
23
|
+
NEWOBJ = NewObj.new
|
24
|
+
end
|
25
|
+
end
|
26
|
+
end
|
@@ -0,0 +1,26 @@
|
|
1
|
+
require 'python/pickle/instruction'
|
2
|
+
|
3
|
+
module Python
|
4
|
+
module Pickle
|
5
|
+
module Instructions
|
6
|
+
#
|
7
|
+
# Represents a pickle `NEWOBJ_EX` instruction.
|
8
|
+
#
|
9
|
+
# @note introduced in protocol 3.
|
10
|
+
#
|
11
|
+
class NewObjEx < Instruction
|
12
|
+
|
13
|
+
#
|
14
|
+
# Initializes the `NEWOBJ_EX` instruction.
|
15
|
+
#
|
16
|
+
def initialize
|
17
|
+
super(:NEWOBJ_EX)
|
18
|
+
end
|
19
|
+
|
20
|
+
end
|
21
|
+
|
22
|
+
# The `NEWOBJ_EX` instruction.
|
23
|
+
NEWOBJ_EX = NewObjEx.new
|
24
|
+
end
|
25
|
+
end
|
26
|
+
end
|
@@ -0,0 +1,24 @@
|
|
1
|
+
require 'python/pickle/instruction'
|
2
|
+
|
3
|
+
module Python
|
4
|
+
module Pickle
|
5
|
+
module Instructions
|
6
|
+
#
|
7
|
+
# Represents a pickle `NEWTRUE` instruction.
|
8
|
+
#
|
9
|
+
class NewTrue < Instruction
|
10
|
+
|
11
|
+
#
|
12
|
+
# Initializes the `NEWTRUE` instruction.
|
13
|
+
#
|
14
|
+
def initialize
|
15
|
+
super(:NEWTRUE)
|
16
|
+
end
|
17
|
+
|
18
|
+
end
|
19
|
+
|
20
|
+
# The `NEWTRUE` instruction.
|
21
|
+
NEWTRUE = NewTrue.new
|
22
|
+
end
|
23
|
+
end
|
24
|
+
end
|
@@ -0,0 +1,26 @@
|
|
1
|
+
require 'python/pickle/instruction'
|
2
|
+
|
3
|
+
module Python
|
4
|
+
module Pickle
|
5
|
+
module Instructions
|
6
|
+
#
|
7
|
+
# Represents a pickle `NEXT_BUFFER` instruction.
|
8
|
+
#
|
9
|
+
# @note introduced in protocol 4.
|
10
|
+
#
|
11
|
+
class NextBuffer < Instruction
|
12
|
+
|
13
|
+
#
|
14
|
+
# Initializes the `NEXT_BUFFER` instruction.
|
15
|
+
#
|
16
|
+
def initialize
|
17
|
+
super(:NEXT_BUFFER)
|
18
|
+
end
|
19
|
+
|
20
|
+
end
|
21
|
+
|
22
|
+
# The `NEXT_BUFFER` instruction.
|
23
|
+
NEXT_BUFFER = NextBuffer.new
|
24
|
+
end
|
25
|
+
end
|
26
|
+
end
|
@@ -0,0 +1,24 @@
|
|
1
|
+
require 'python/pickle/instruction'
|
2
|
+
|
3
|
+
module Python
|
4
|
+
module Pickle
|
5
|
+
module Instructions
|
6
|
+
#
|
7
|
+
# Represents a pickle `NONE` instruction.
|
8
|
+
#
|
9
|
+
class None < Instruction
|
10
|
+
|
11
|
+
#
|
12
|
+
# Initializes the `NONE` instruction.
|
13
|
+
#
|
14
|
+
def initialize
|
15
|
+
super(:NONE)
|
16
|
+
end
|
17
|
+
|
18
|
+
end
|
19
|
+
|
20
|
+
# The `NONE` instruction.
|
21
|
+
NONE = None.new
|
22
|
+
end
|
23
|
+
end
|
24
|
+
end
|
@@ -0,0 +1,24 @@
|
|
1
|
+
require 'python/pickle/instruction'
|
2
|
+
|
3
|
+
module Python
|
4
|
+
module Pickle
|
5
|
+
module Instructions
|
6
|
+
#
|
7
|
+
# Represents a pickle `POP` instruction.
|
8
|
+
#
|
9
|
+
class Pop < Instruction
|
10
|
+
|
11
|
+
#
|
12
|
+
# Initializes the `POP` instruction.
|
13
|
+
#
|
14
|
+
def initialize
|
15
|
+
super(:POP)
|
16
|
+
end
|
17
|
+
|
18
|
+
end
|
19
|
+
|
20
|
+
# The `POP` instruction.
|
21
|
+
POP = Pop.new
|
22
|
+
end
|
23
|
+
end
|
24
|
+
end
|
@@ -0,0 +1,24 @@
|
|
1
|
+
require 'python/pickle/instruction'
|
2
|
+
|
3
|
+
module Python
|
4
|
+
module Pickle
|
5
|
+
module Instructions
|
6
|
+
#
|
7
|
+
# Represents a pickle `POP_MARK` instruction.
|
8
|
+
#
|
9
|
+
class PopMark < Instruction
|
10
|
+
|
11
|
+
#
|
12
|
+
# Initializes the `POP_MARK` instruction.
|
13
|
+
#
|
14
|
+
def initialize
|
15
|
+
super(:POP_MARK)
|
16
|
+
end
|
17
|
+
|
18
|
+
end
|
19
|
+
|
20
|
+
# The `POP_MARK` instruction.
|
21
|
+
POP_MARK = PopMark.new
|
22
|
+
end
|
23
|
+
end
|
24
|
+
end
|
@@ -0,0 +1,29 @@
|
|
1
|
+
require 'python/pickle/instruction'
|
2
|
+
require 'python/pickle/instructions/has_value'
|
3
|
+
|
4
|
+
module Python
|
5
|
+
module Pickle
|
6
|
+
module Instructions
|
7
|
+
#
|
8
|
+
# Represents the `PROTO` instruction.
|
9
|
+
#
|
10
|
+
# @note introduces in protocol 2.
|
11
|
+
#
|
12
|
+
class Proto < Instruction
|
13
|
+
|
14
|
+
include HasValue
|
15
|
+
|
16
|
+
#
|
17
|
+
# Initializes the `PROTO` instruction.
|
18
|
+
#
|
19
|
+
# @param [Proto] value
|
20
|
+
# The `PROTO` instruction's value.
|
21
|
+
#
|
22
|
+
def initialize(value)
|
23
|
+
super(:PROTO,value)
|
24
|
+
end
|
25
|
+
|
26
|
+
end
|
27
|
+
end
|
28
|
+
end
|
29
|
+
end
|
@@ -0,0 +1,24 @@
|
|
1
|
+
require 'python/pickle/instruction'
|
2
|
+
require 'python/pickle/instructions/has_value'
|
3
|
+
|
4
|
+
module Python
|
5
|
+
module Pickle
|
6
|
+
module Instructions
|
7
|
+
class Put < Instruction
|
8
|
+
|
9
|
+
include HasValue
|
10
|
+
|
11
|
+
#
|
12
|
+
# Initializes the `PUT` instruction.
|
13
|
+
#
|
14
|
+
# @param [Integer] value
|
15
|
+
# The `PUT` instruction's value.
|
16
|
+
#
|
17
|
+
def initialize(value)
|
18
|
+
super(:PUT,value)
|
19
|
+
end
|
20
|
+
|
21
|
+
end
|
22
|
+
end
|
23
|
+
end
|
24
|
+
end
|