Skip to content

Commit e13af02

Browse files
andrykonchineregon
authored andcommitted
Use Primitive.string_binary_append
1 parent 272e69f commit e13af02

File tree

1 file changed

+75
-71
lines changed

1 file changed

+75
-71
lines changed

src/main/ruby/truffleruby/core/marshal.rb

Lines changed: 75 additions & 71 deletions
Original file line numberDiff line numberDiff line change
@@ -37,16 +37,16 @@
3737
class BasicObject
3838
private def __marshal__(ms)
3939
out = ms.serialize_extended_object self
40-
out << 'o'
40+
Primitive.string_binary_append out, 'o'
4141
cls = Primitive.object_class self
4242

4343
if Primitive.module_anonymous?(cls)
4444
raise ::TypeError, "can't dump anonymous class #{cls}"
4545
end
4646

4747
name = Primitive.module_name cls
48-
out << ms.serialize(name.to_sym)
49-
out << ms.serialize_instance_variables_suffix(self, true)
48+
Primitive.string_binary_append out, ms.serialize(name.to_sym)
49+
Primitive.string_binary_append out, ms.serialize_instance_variables_suffix(self, true)
5050
end
5151
end
5252

@@ -59,15 +59,15 @@ class Class
5959
end
6060

6161
name = Primitive.module_name self
62-
"c#{ms.serialize_integer(name.bytesize)}#{name.b}"
62+
Truffle::Type.binary_string("c#{ms.serialize_integer(name.bytesize)}#{name.b}")
6363
end
6464
end
6565

6666
class Module
6767
private def __marshal__(ms)
6868
raise TypeError, "can't dump anonymous module #{self}" if Primitive.module_anonymous?(self)
6969
name = Primitive.module_name self
70-
"m#{ms.serialize_integer(name.bytesize)}#{name.b}"
70+
Truffle::Type.binary_string("m#{ms.serialize_integer(name.bytesize)}#{name.b}")
7171
end
7272
end
7373

@@ -111,29 +111,29 @@ class Exception
111111
# identical.
112112
private def __marshal__(ms)
113113
out = ms.serialize_extended_object self
114-
out << 'o'
114+
Primitive.string_binary_append out, 'o'
115115
cls = Primitive.object_class self
116116

117117
if Primitive.module_anonymous?(cls)
118118
raise TypeError, "can't dump anonymous class #{cls}"
119119
end
120120

121121
name = Primitive.module_name cls
122-
out << ms.serialize(name.to_sym)
122+
Primitive.string_binary_append out, ms.serialize(name.to_sym)
123123

124124
ivars = Primitive.object_ivars(self)
125125
number_of_ivars = ivars.size + 2
126126
cause = self.cause
127-
out << ms.serialize_fixnum(cause ? number_of_ivars + 1 : number_of_ivars)
128-
out << ms.serialize(:mesg)
129-
out << ms.serialize(Truffle::ExceptionOperations.compute_message(self))
130-
out << ms.serialize(:bt)
131-
out << ms.serialize(self.backtrace)
127+
Primitive.string_binary_append out, ms.serialize_fixnum(cause ? number_of_ivars + 1 : number_of_ivars)
128+
Primitive.string_binary_append out, ms.serialize(:mesg)
129+
Primitive.string_binary_append out, ms.serialize(Truffle::ExceptionOperations.compute_message(self))
130+
Primitive.string_binary_append out, ms.serialize(:bt)
131+
Primitive.string_binary_append out, ms.serialize(self.backtrace)
132132
if cause
133-
out << ms.serialize(:cause)
134-
out << ms.serialize(cause)
133+
Primitive.string_binary_append out, ms.serialize(:cause)
134+
Primitive.string_binary_append out, ms.serialize(cause)
135135
end
136-
out << Truffle::Type.binary_string(ms.serialize_instance_variables(self, ivars))
136+
Primitive.string_binary_append out, Truffle::Type.binary_string(ms.serialize_instance_variables(self, ivars))
137137

138138
out
139139
end
@@ -325,26 +325,26 @@ class Range
325325
# values so we generate the correct dump data.
326326
private def __marshal__(ms)
327327
out = ms.serialize_extended_object self
328-
out << 'o'
328+
Primitive.string_binary_append out, 'o'
329329
cls = Primitive.object_class self
330330
name = Primitive.module_name cls
331331
if Primitive.module_anonymous?(cls)
332332
raise TypeError, "can't dump anonymous class #{cls}"
333333
end
334-
out << ms.serialize(name.to_sym)
334+
Primitive.string_binary_append out, ms.serialize(name.to_sym)
335335

336336
ivars = self.instance_variables
337-
out << ms.serialize_integer(3 + ivars.size)
338-
out << ms.serialize(:begin)
339-
out << ms.serialize(self.begin)
340-
out << ms.serialize(:end)
341-
out << ms.serialize(self.end)
342-
out << ms.serialize(:excl)
343-
out << ms.serialize(self.exclude_end?)
337+
Primitive.string_binary_append out, ms.serialize_integer(3 + ivars.size)
338+
Primitive.string_binary_append out, ms.serialize(:begin)
339+
Primitive.string_binary_append out, ms.serialize(self.begin)
340+
Primitive.string_binary_append out, ms.serialize(:end)
341+
Primitive.string_binary_append out, ms.serialize(self.end)
342+
Primitive.string_binary_append out, ms.serialize(:excl)
343+
Primitive.string_binary_append out, ms.serialize(self.exclude_end?)
344344
ivars.each do |ivar|
345345
val = Primitive.object_ivar_get self, ivar
346-
out << ms.serialize(ivar)
347-
out << ms.serialize(val)
346+
Primitive.string_binary_append out, ms.serialize(ivar)
347+
Primitive.string_binary_append out, ms.serialize(val)
348348
end
349349
out
350350
end
@@ -382,10 +382,10 @@ class Symbol
382382
class String
383383
private def __marshal__(ms)
384384
out = ms.serialize_instance_variables_prefix(self)
385-
out << ms.serialize_extended_object(self)
386-
out << ms.serialize_user_class(self, String)
387-
out << ms.serialize_string(self)
388-
out << ms.serialize_instance_variables_suffix(self)
385+
Primitive.string_binary_append out, ms.serialize_extended_object(self)
386+
Primitive.string_binary_append out, ms.serialize_user_class(self, String)
387+
Primitive.string_binary_append out, ms.serialize_string(self)
388+
Primitive.string_binary_append out, ms.serialize_instance_variables_suffix(self)
389389
out
390390
end
391391
end
@@ -400,12 +400,12 @@ class Regexp
400400
private def __marshal__(ms)
401401
str = self.source
402402
out = ms.serialize_instance_variables_prefix(self)
403-
out << ms.serialize_extended_object(self)
404-
out << ms.serialize_user_class(self, Regexp)
405-
out << '/'
406-
out << ms.serialize_integer(str.bytesize) + str.b
407-
out << (options & Regexp::OPTION_MASK).chr
408-
out << ms.serialize_instance_variables_suffix(self)
403+
Primitive.string_binary_append out, ms.serialize_extended_object(self)
404+
Primitive.string_binary_append out, ms.serialize_user_class(self, Regexp)
405+
Primitive.string_binary_append out, '/'
406+
Primitive.string_binary_append out, ms.serialize_integer(str.bytesize) + str.b
407+
Primitive.string_binary_append out, (options & Regexp::OPTION_MASK).chr
408+
Primitive.string_binary_append out, ms.serialize_instance_variables_suffix(self)
409409

410410
out
411411
end
@@ -414,24 +414,24 @@ class Regexp
414414
class Struct
415415
private def __marshal__(ms)
416416
out = ms.serialize_instance_variables_prefix(self)
417-
out << ms.serialize_extended_object(self)
417+
Primitive.string_binary_append out, ms.serialize_extended_object(self)
418418

419-
out << 'S'
419+
Primitive.string_binary_append out, 'S'
420420

421421
cls = Primitive.object_class self
422422
if Primitive.module_anonymous?(cls)
423423
raise TypeError, "can't dump anonymous class #{cls}"
424424
end
425425
class_name = Primitive.module_name cls
426-
out << ms.serialize(class_name.to_sym)
427-
out << ms.serialize_integer(self.length)
426+
Primitive.string_binary_append out, ms.serialize(class_name.to_sym)
427+
Primitive.string_binary_append out, ms.serialize_integer(self.length)
428428

429429
self.each_pair do |name, value|
430-
out << ms.serialize(name)
431-
out << ms.serialize(value)
430+
Primitive.string_binary_append out, ms.serialize(name)
431+
Primitive.string_binary_append out, ms.serialize(value)
432432
end
433433

434-
out << ms.serialize_instance_variables_suffix(self)
434+
Primitive.string_binary_append out, ms.serialize_instance_variables_suffix(self)
435435

436436
out
437437
end
@@ -440,16 +440,16 @@ class Struct
440440
class Array
441441
private def __marshal__(ms)
442442
out = ms.serialize_instance_variables_prefix(self)
443-
out << ms.serialize_extended_object(self)
444-
out << ms.serialize_user_class(self, Array)
445-
out << '['
446-
out << ms.serialize_integer(self.length)
443+
Primitive.string_binary_append out, ms.serialize_extended_object(self)
444+
Primitive.string_binary_append out, ms.serialize_user_class(self, Array)
445+
Primitive.string_binary_append out, '['
446+
Primitive.string_binary_append out, ms.serialize_integer(self.length)
447447
unless empty?
448448
each do |element|
449-
out << ms.serialize(element)
449+
Primitive.string_binary_append out, ms.serialize(element)
450450
end
451451
end
452-
out << ms.serialize_instance_variables_suffix(self)
452+
Primitive.string_binary_append out, ms.serialize_instance_variables_suffix(self)
453453

454454
out
455455
end
@@ -460,22 +460,24 @@ class Hash
460460
raise TypeError, "can't dump hash with default proc" if default_proc
461461

462462
out = ms.serialize_instance_variables_prefix(self)
463-
out << ms.serialize_extended_object(self)
464-
out << ms.serialize_user_class(self, Hash)
463+
Primitive.string_binary_append out, ms.serialize_extended_object(self)
464+
Primitive.string_binary_append out, ms.serialize_user_class(self, Hash)
465465

466466
# A boolean property of Hash - whether it has compare_by_identity behaviour - is serialized as user class marker
467-
out << ms.serialize_user_class!(Hash) if compare_by_identity?
467+
if compare_by_identity?
468+
Primitive.string_binary_append out, ms.serialize_user_class!(Hash)
469+
end
468470

469-
out << (self.default ? '}' : '{')
470-
out << ms.serialize_integer(length)
471+
Primitive.string_binary_append out, (self.default ? '}' : '{')
472+
Primitive.string_binary_append out, ms.serialize_integer(length)
471473
unless empty?
472474
each_pair do |key, val|
473-
out << ms.serialize(key)
474-
out << ms.serialize(val)
475+
Primitive.string_binary_append out, ms.serialize(key)
476+
Primitive.string_binary_append out, ms.serialize(val)
475477
end
476478
end
477-
out << (self.default ? ms.serialize(self.default) : '')
478-
out << ms.serialize_instance_variables_suffix(self)
479+
Primitive.string_binary_append out, (self.default ? ms.serialize(self.default) : '')
480+
Primitive.string_binary_append out, ms.serialize_instance_variables_suffix(self)
479481

480482
out
481483
end
@@ -1122,16 +1124,16 @@ def serialize_extended_object(obj)
11221124
raise TypeError, "singleton can't be dumped"
11231125
end
11241126

1125-
str = +''
1127+
str = ''.b
11261128
Primitive.vm_extended_modules obj, -> mod do
11271129
if Primitive.module_anonymous?(mod)
11281130
raise TypeError, "can't dump anonymous class #{mod}"
11291131
end
11301132

11311133
name = Primitive.module_name(mod)
1132-
str << "e#{serialize(name.to_sym)}"
1134+
Primitive.string_binary_append str, "e#{serialize(name.to_sym)}"
11331135
end
1134-
Truffle::Type.binary_string(str)
1136+
str
11351137
end
11361138

11371139
def serialize_instance_variables_prefix(obj)
@@ -1150,26 +1152,26 @@ def serialize_instance_variables_suffix(obj, force = false)
11501152

11511153
if serialize_encoding?(obj)
11521154
str = serialize_integer(count + 1)
1153-
str << serialize_encoding(obj)
1155+
Primitive.string_binary_append str, serialize_encoding(obj)
11541156
else
11551157
str = serialize_integer(count)
11561158
end
11571159

1158-
str << serialize_instance_variables(obj, ivars)
1160+
Primitive.string_binary_append str, serialize_instance_variables(obj, ivars)
11591161

1160-
Truffle::Type.binary_string(str)
1162+
str
11611163
end
11621164

11631165
def serialize_instance_variables(obj, ivars)
1164-
str = ''.b
1166+
out = ''.b
11651167

11661168
ivars.each do |ivar|
11671169
val = Primitive.object_ivar_get obj, ivar
1168-
str << serialize(ivar)
1169-
str << serialize(val)
1170+
Primitive.string_binary_append out, serialize(ivar)
1171+
Primitive.string_binary_append out, serialize(val)
11701172
end
11711173

1172-
str
1174+
out
11731175
end
11741176

11751177
def serialize_integer(n, prefix = nil)
@@ -1274,9 +1276,11 @@ def serialize_user_defined(obj)
12741276
name = Primitive.module_name cls
12751277

12761278
out = serialize_instance_variables_prefix(str)
1277-
out << Truffle::Type.binary_string("u#{serialize(name.to_sym)}")
1278-
out << serialize_integer(str.bytesize) + str.b
1279-
out << serialize_instance_variables_suffix(str)
1279+
Primitive.string_binary_append out, 'u'
1280+
Primitive.string_binary_append out, serialize(name.to_sym)
1281+
Primitive.string_binary_append out, serialize_integer(str.bytesize)
1282+
Primitive.string_binary_append out, str
1283+
Primitive.string_binary_append out, serialize_instance_variables_suffix(str)
12801284

12811285
out
12821286
end

0 commit comments

Comments
 (0)