lib/prism/serialize.rb in prism-0.13.0 vs lib/prism/serialize.rb in prism-0.14.0
- old
+ new
@@ -19,11 +19,11 @@
end
module Prism
module Serialize
MAJOR_VERSION = 0
- MINOR_VERSION = 13
+ MINOR_VERSION = 14
PATCH_VERSION = 0
def self.load(input, serialized)
input = input.dup
source = Source.new(input)
@@ -60,13 +60,14 @@
Encoding.find(io.read(load_varint))
end
def load_metadata
comments = load_varint.times.map { Comment.new(Comment::TYPES.fetch(load_varint), load_location) }
+ magic_comments = load_varint.times.map { MagicComment.new(load_location, load_location) }
errors = load_varint.times.map { ParseError.new(load_embedded_string, load_location) }
warnings = load_varint.times.map { ParseWarning.new(load_embedded_string, load_location) }
- [comments, errors, warnings]
+ [comments, magic_comments, errors, warnings]
end
def load_tokens
tokens = []
while type = TOKEN_TYPES.fetch(load_varint)
@@ -81,18 +82,18 @@
end
def load_tokens_result
tokens = load_tokens
encoding = load_encoding
- comments, errors, warnings = load_metadata
+ comments, magic_comments, errors, warnings = load_metadata
if encoding != @encoding
tokens.each { |token,| token.value.force_encoding(encoding) }
end
raise "Expected to consume all bytes while deserializing" unless @io.eof?
- Prism::ParseResult.new(tokens, comments, errors, warnings, @source)
+ Prism::ParseResult.new(tokens, comments, magic_comments, errors, warnings, @source)
end
def load_nodes
raise "Invalid serialization" if io.read(5) != "PRISM"
raise "Invalid serialization" if io.read(3).unpack("C3") != [MAJOR_VERSION, MINOR_VERSION, PATCH_VERSION]
@@ -102,21 +103,21 @@
end
@encoding = load_encoding
@input = input.force_encoding(@encoding).freeze
- comments, errors, warnings = load_metadata
+ comments, magic_comments, errors, warnings = load_metadata
@constant_pool_offset = io.read(4).unpack1("L")
@constant_pool = Array.new(load_varint, nil)
- [load_node, comments, errors, warnings]
+ [load_node, comments, magic_comments, errors, warnings]
end
def load_result
- node, comments, errors, warnings = load_nodes
- Prism::ParseResult.new(node, comments, errors, warnings, @source)
+ node, comments, magic_comments, errors, warnings = load_nodes
+ Prism::ParseResult.new(node, comments, magic_comments, errors, warnings, @source)
end
private
# variable-length integer using https://en.wikipedia.org/wiki/LEB128
@@ -149,17 +150,18 @@
def load_embedded_string
io.read(load_varint).force_encoding(encoding)
end
def load_string
- case io.getbyte
+ type = io.getbyte
+ case type
when 1
input.byteslice(load_varint, load_varint).force_encoding(encoding)
when 2
load_embedded_string
else
- raise
+ raise "Unknown serialized string type: #{type}"
end
end
def load_location
Location.new(source, load_varint, load_varint)
@@ -237,16 +239,16 @@
when 16 then
BlockParametersNode.new(load_optional_node, Array.new(load_varint) { load_node }, load_optional_location, load_optional_location, location)
when 17 then
BreakNode.new(load_optional_node, load_location, location)
when 18 then
- CallAndWriteNode.new(load_optional_node, load_optional_location, load_optional_location, load_optional_location, load_optional_node, load_optional_location, load_varint, load_string, load_string, load_location, load_node, location)
+ CallAndWriteNode.new(load_optional_node, load_optional_location, load_optional_location, load_optional_location, load_optional_node, load_optional_location, load_varint, load_required_constant, load_required_constant, load_location, load_node, location)
when 19 then
- CallNode.new(load_optional_node, load_optional_location, load_optional_location, load_optional_location, load_optional_node, load_optional_location, load_optional_node, load_varint, load_string, location)
+ CallNode.new(load_optional_node, load_optional_location, load_optional_location, load_optional_location, load_optional_node, load_optional_location, load_optional_node, load_varint, load_required_constant, location)
when 20 then
- CallOperatorWriteNode.new(load_optional_node, load_optional_location, load_optional_location, load_optional_location, load_optional_node, load_optional_location, load_varint, load_string, load_string, load_required_constant, load_location, load_node, location)
+ CallOperatorWriteNode.new(load_optional_node, load_optional_location, load_optional_location, load_optional_location, load_optional_node, load_optional_location, load_varint, load_required_constant, load_required_constant, load_required_constant, load_location, load_node, location)
when 21 then
- CallOrWriteNode.new(load_optional_node, load_optional_location, load_optional_location, load_optional_location, load_optional_node, load_optional_location, load_varint, load_string, load_string, load_location, load_node, location)
+ CallOrWriteNode.new(load_optional_node, load_optional_location, load_optional_location, load_optional_location, load_optional_node, load_optional_location, load_varint, load_required_constant, load_required_constant, load_location, load_node, location)
when 22 then
CapturePatternNode.new(load_node, load_node, load_location, location)
when 23 then
CaseNode.new(load_optional_node, Array.new(load_varint) { load_node }, load_optional_node, load_location, load_location, location)
when 24 then