From 9195104131f4c168635c13104d6b1e8cda0a48a9 Mon Sep 17 00:00:00 2001 From: oliveiraallex Date: Tue, 11 Aug 2026 02:31:27 +0200 Subject: [PATCH 1/4] Fixed baselibe to compatiblity to Pharo 13 --- .../BaselineOfTostSerializer.class.st | 13 +++++++------ BaselineOfTostSerializer/package.st | 2 +- 2 files changed, 8 insertions(+), 7 deletions(-) diff --git a/BaselineOfTostSerializer/BaselineOfTostSerializer.class.st b/BaselineOfTostSerializer/BaselineOfTostSerializer.class.st index 2b82a39..96ffdea 100644 --- a/BaselineOfTostSerializer/BaselineOfTostSerializer.class.st +++ b/BaselineOfTostSerializer/BaselineOfTostSerializer.class.st @@ -1,16 +1,17 @@ Class { - #name : #BaselineOfTostSerializer, - #superclass : #BaselineOf, - #category : 'BaselineOfTostSerializer' + #name : 'BaselineOfTostSerializer', + #superclass : 'BaselineOf', + #category : 'BaselineOfTostSerializer', + #package : 'BaselineOfTostSerializer' } -{ #category : #baselines } +{ #category : 'baselines' } BaselineOfTostSerializer >> baseline: spec [ spec for: #'common' do: [ spec baseline: 'StateSpecs' with: [ - spec repository: 'github://dionisiydk/StateSpecs:v5.0.2']; + spec repository: 'github://oliveiraallex/StateSpecs:dev13']; baseline: 'ObjectTravel' with: [ spec repository: 'github://pharo-ide/ObjectTravel:v1.0.4'; @@ -27,7 +28,7 @@ BaselineOfTostSerializer >> baseline: spec [ ] -{ #category : #accessing } +{ #category : 'accessing' } BaselineOfTostSerializer >> projectClass [ ^ [ self class environment at: #MetacelloCypressBaselineProject ] on: NotFound diff --git a/BaselineOfTostSerializer/package.st b/BaselineOfTostSerializer/package.st index b035751..ba98d34 100644 --- a/BaselineOfTostSerializer/package.st +++ b/BaselineOfTostSerializer/package.st @@ -1 +1 @@ -Package { #name : #BaselineOfTostSerializer } +Package { #name : 'BaselineOfTostSerializer' } From 6ac17dfef6b2f81dd2d296e0a85ce5ab98278d93 Mon Sep 17 00:00:00 2001 From: oliveiraallex Date: Tue, 11 Aug 2026 02:46:25 +0200 Subject: [PATCH 2/4] Fixed baseline to compatibility to Pharo 13 --- BaselineOfTostSerializer/BaselineOfTostSerializer.class.st | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/BaselineOfTostSerializer/BaselineOfTostSerializer.class.st b/BaselineOfTostSerializer/BaselineOfTostSerializer.class.st index 96ffdea..c7cd029 100644 --- a/BaselineOfTostSerializer/BaselineOfTostSerializer.class.st +++ b/BaselineOfTostSerializer/BaselineOfTostSerializer.class.st @@ -14,7 +14,7 @@ BaselineOfTostSerializer >> baseline: spec [ spec repository: 'github://oliveiraallex/StateSpecs:dev13']; baseline: 'ObjectTravel' with: [ spec - repository: 'github://pharo-ide/ObjectTravel:v1.0.4'; + repository: 'github://oliveiraallex/ObjectTravel:vdev13'; loads: 'Core' ]; project: 'ObjectTravelTests' copyFrom: 'ObjectTravel' with: [ spec loads: 'Tests']. From df98b40a16c2436e24e22cade901240df9991f80 Mon Sep 17 00:00:00 2001 From: oliveiraallex Date: Tue, 11 Aug 2026 02:50:51 +0200 Subject: [PATCH 3/4] Fixed baseline typo --- BaselineOfTostSerializer/BaselineOfTostSerializer.class.st | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/BaselineOfTostSerializer/BaselineOfTostSerializer.class.st b/BaselineOfTostSerializer/BaselineOfTostSerializer.class.st index c7cd029..d2b7427 100644 --- a/BaselineOfTostSerializer/BaselineOfTostSerializer.class.st +++ b/BaselineOfTostSerializer/BaselineOfTostSerializer.class.st @@ -14,7 +14,7 @@ BaselineOfTostSerializer >> baseline: spec [ spec repository: 'github://oliveiraallex/StateSpecs:dev13']; baseline: 'ObjectTravel' with: [ spec - repository: 'github://oliveiraallex/ObjectTravel:vdev13'; + repository: 'github://oliveiraallex/ObjectTravel:dev13'; loads: 'Core' ]; project: 'ObjectTravelTests' copyFrom: 'ObjectTravel' with: [ spec loads: 'Tests']. From ddc45c134d7e4851821782436e77b6cde719cb9f Mon Sep 17 00:00:00 2001 From: oliveiraallex Date: Thu, 13 Aug 2026 00:50:36 +0200 Subject: [PATCH 4/4] Fix CleanBlockClosure/ConstantBlockClosure Tost materialization (dead startpc reference) TostSerializer's BlockClosure>>correctTostMaterializationWith: shifts a `startpc` instance variable to correct for word-size differences when materializing a block transferred by value. That variable belonged to the pre-Pharo-11 block representation, where a BlockClosure embedded its own bytecode inline in its instance-variable-adjacent storage. Since Pharo 11's FullBlockClosure redesign, BlockClosure no longer holds bytecode at all -- it's split into outerContext/compiledBlock/ numArgs, with compiledBlock a separate CompiledBlock object owning its own bytecode and literals. `startpc` is a stale reference: reading it now raises UndeclaredVariableRead, since the compiler resolves it to an unbound global rather than a real instance variable. FullBlockClosure already had a no-op override for this (someone already handled that half of the hierarchy). CleanBlockClosure and its subclass ConstantBlockClosure -- the other concrete block classes from the same redesign, used for blocks needing no/only-constant outer state (e.g. `[12]`, `[42]`) -- did not, and fell back to BlockClosure's broken implementation, crashing on materialization with "Attempt to read undeclared variable startpc". Added mirrored no-op overrides on CleanBlockClosure: - correctTostMaterializationWith: (no-op, nothing to correct) - class>>createTostInstanceWith: (simplified to Object's basicNew:-based instantiation, matching FullBlockClosure's approach) - writeTostBodyWith: (simplified to Object's size-based serialization) Confirmed via local Pharo 9 vs Pharo 11+ source comparison and Pharo 11 release notes ("Extended Full Blocks and Constant Clock closures support") that this representation change landed in Pharo 11. Checked the repo's other branches for an existing fix -- none found, including origin/pharo9-deprecation-methods, which still carries the same broken startpc code. Verified live: `peer evaluate: [12]` -> 12, `peer evaluate: [1 + 2]` -> 3, both clean, no debuggers --- TostSerializer/Bitmap.extension.st | 6 +- TostSerializer/BlockClosure.extension.st | 8 +- TostSerializer/Boolean.extension.st | 4 +- TostSerializer/ByteArray.extension.st | 6 +- TostSerializer/Character.extension.st | 8 +- TostSerializer/ClassDescription.extension.st | 4 +- TostSerializer/CleanBlockClosure.extension.st | 25 +++++ TostSerializer/CompiledCode.extension.st | 6 +- TostSerializer/Context.extension.st | 8 +- TostSerializer/False.extension.st | 4 +- TostSerializer/Float.extension.st | 6 +- TostSerializer/Fraction.extension.st | 6 +- TostSerializer/FullBlockClosure.extension.st | 8 +- TostSerializer/HashedCollection.extension.st | 4 +- TostSerializer/Integer.extension.st | 10 +- TostSerializer/Number.extension.st | 4 +- TostSerializer/Object.extension.st | 6 +- TostSerializer/SmallFloat64.extension.st | 4 +- TostSerializer/String.extension.st | 6 +- TostSerializer/Symbol.extension.st | 4 +- .../TostDuplicatedObjectFormat.class.st | 11 ++- TostSerializer/TostFormat.class.st | 15 +-- .../TostIndexedObjectFormat.class.st | 15 +-- ...tNewObjectOfDuplicatedClassFormat.class.st | 11 ++- .../TostNewObjectOfNewClassFormat.class.st | 11 ++- ...stNewObjectOfWellKnownClassFormat.class.st | 11 ++- ...stObjectDynamicSubstitutionFormat.class.st | 19 ++-- ...ostObjectStaticSubstitutionFormat.class.st | 15 +-- .../TostObjectSubstitutionFormat.class.st | 9 +- TostSerializer/TostStreamlineFormat.class.st | 7 +- TostSerializer/TostTransport.class.st | 31 ++++--- TostSerializer/TostTransporter.class.st | 91 ++++++++++--------- .../TostWellKnownObjectFormat.class.st | 13 +-- TostSerializer/True.extension.st | 4 +- TostSerializer/UndefinedObject.extension.st | 6 +- TostSerializer/package.st | 2 +- 36 files changed, 223 insertions(+), 185 deletions(-) create mode 100644 TostSerializer/CleanBlockClosure.extension.st diff --git a/TostSerializer/Bitmap.extension.st b/TostSerializer/Bitmap.extension.st index 9118209..f15d67a 100644 --- a/TostSerializer/Bitmap.extension.st +++ b/TostSerializer/Bitmap.extension.st @@ -1,13 +1,13 @@ -Extension { #name : #Bitmap } +Extension { #name : 'Bitmap' } -{ #category : #'*TostSerializer' } +{ #category : '*TostSerializer' } Bitmap class >> createTostInstanceWith: aTostTransporter [ | bytes | bytes := ByteArray createTostInstanceWith: aTostTransporter. ^Bitmap decompressFromByteArray: bytes ] -{ #category : #'*TostSerializer' } +{ #category : '*TostSerializer' } Bitmap >> writeTostBodyWith: aTostTransporter [ self compressToByteArray writeTostBodyWith: aTostTransporter ] diff --git a/TostSerializer/BlockClosure.extension.st b/TostSerializer/BlockClosure.extension.st index 8624c7c..7caa33e 100644 --- a/TostSerializer/BlockClosure.extension.st +++ b/TostSerializer/BlockClosure.extension.st @@ -1,6 +1,6 @@ -Extension { #name : #BlockClosure } +Extension { #name : 'BlockClosure' } -{ #category : #'*TostSerializer' } +{ #category : '*TostSerializer' } BlockClosure >> correctTostMaterializationWith: materializedWordSize [ | numLiterals originalLiteralSize newLiteralSize | @@ -12,7 +12,7 @@ BlockClosure >> correctTostMaterializationWith: materializedWordSize [ startpc := startpc - (originalLiteralSize - newLiteralSize) ] -{ #category : #'*TostSerializer' } +{ #category : '*TostSerializer' } BlockClosure class >> createTostInstanceWith: aTostTransporter [ | block wordSize | block := super createTostInstanceWith: aTostTransporter. @@ -22,7 +22,7 @@ BlockClosure class >> createTostInstanceWith: aTostTransporter [ ^block ] -{ #category : #'*TostSerializer' } +{ #category : '*TostSerializer' } BlockClosure >> writeTostBodyWith: aTostTransporter [ super writeTostBodyWith: aTostTransporter. diff --git a/TostSerializer/Boolean.extension.st b/TostSerializer/Boolean.extension.st index 065617c..f7fb680 100644 --- a/TostSerializer/Boolean.extension.st +++ b/TostSerializer/Boolean.extension.st @@ -1,6 +1,6 @@ -Extension { #name : #Boolean } +Extension { #name : 'Boolean' } -{ #category : #'*TostSerializer' } +{ #category : '*TostSerializer' } Boolean >> isTostValueObject [ ^true ] diff --git a/TostSerializer/ByteArray.extension.st b/TostSerializer/ByteArray.extension.st index 52387e5..04de31c 100644 --- a/TostSerializer/ByteArray.extension.st +++ b/TostSerializer/ByteArray.extension.st @@ -1,13 +1,13 @@ -Extension { #name : #ByteArray } +Extension { #name : 'ByteArray' } -{ #category : #'*TostSerializer' } +{ #category : '*TostSerializer' } ByteArray class >> createTostInstanceWith: aTostTransporter [ | size | size := aTostTransporter readPositiveInteger. ^aTostTransporter readBytes: size as: self ] -{ #category : #'*TostSerializer' } +{ #category : '*TostSerializer' } ByteArray >> writeTostBodyWith: aTostTransporter [ super writeTostBodyWith: aTostTransporter. aTostTransporter writeBytes: self diff --git a/TostSerializer/Character.extension.st b/TostSerializer/Character.extension.st index 2298fa7..e171467 100644 --- a/TostSerializer/Character.extension.st +++ b/TostSerializer/Character.extension.st @@ -1,17 +1,17 @@ -Extension { #name : #Character } +Extension { #name : 'Character' } -{ #category : #'*TostSerializer' } +{ #category : '*TostSerializer' } Character class >> createTostInstanceWith: aTostTransporter [ ^self value: aTostTransporter readPositiveInteger ] -{ #category : #'*TostSerializer' } +{ #category : '*TostSerializer' } Character >> isTostValueObject [ ^true ] -{ #category : #'*TostSerializer' } +{ #category : '*TostSerializer' } Character >> writeTostBodyWith: aTostTransporter [ aTostTransporter writePositiveInteger: self asInteger diff --git a/TostSerializer/ClassDescription.extension.st b/TostSerializer/ClassDescription.extension.st index 03092ff..ec770b1 100644 --- a/TostSerializer/ClassDescription.extension.st +++ b/TostSerializer/ClassDescription.extension.st @@ -1,6 +1,6 @@ -Extension { #name : #ClassDescription } +Extension { #name : 'ClassDescription' } -{ #category : #'*TostSerializer' } +{ #category : '*TostSerializer' } ClassDescription >> createTostInstanceWith: aTostTransporter [ ^self isVariable ifTrue: [ self basicNew: aTostTransporter readPositiveInteger ] diff --git a/TostSerializer/CleanBlockClosure.extension.st b/TostSerializer/CleanBlockClosure.extension.st new file mode 100644 index 0000000..83b0efa --- /dev/null +++ b/TostSerializer/CleanBlockClosure.extension.st @@ -0,0 +1,25 @@ +Extension { #name : 'CleanBlockClosure' } + +{ #category : '*TostSerializer' } +CleanBlockClosure >> correctTostMaterializationWith: materializedWordSize [ + "CleanBlockClosure (and its subclass ConstantBlockClosure) has no difference in binary presentation in 32 and 64 bit images. + Therefore nothing to do here" + + +] + +{ #category : '*TostSerializer' } +CleanBlockClosure class >> createTostInstanceWith: aTostTransporter [ + "CleanBlockClosure has no difference in binary presentation in 32 and 64 bit images. + Therefore the instantiation method here is simplified to Object version" + + ^ self basicNew: aTostTransporter readPositiveInteger +] + +{ #category : '*TostSerializer' } +CleanBlockClosure >> writeTostBodyWith: aTostTransporter [ + "CleanBlockClosure has no difference in binary presentation in 32 and 64 bit images. + Therefore the serialization method here is simplified to Object version" + + aTostTransporter writePositiveInteger: self size +] diff --git a/TostSerializer/CompiledCode.extension.st b/TostSerializer/CompiledCode.extension.st index a07b9a9..6dc2211 100644 --- a/TostSerializer/CompiledCode.extension.st +++ b/TostSerializer/CompiledCode.extension.st @@ -1,6 +1,6 @@ -Extension { #name : #CompiledCode } +Extension { #name : 'CompiledCode' } -{ #category : #'*TostSerializer' } +{ #category : '*TostSerializer' } CompiledCode class >> createTostInstanceWith: aTostTransporter [ | size bytecodes method header numLiterals wordSize literalSize newLiteralSize | @@ -22,7 +22,7 @@ CompiledCode class >> createTostInstanceWith: aTostTransporter [ ^method ] -{ #category : #'*TostSerializer' } +{ #category : '*TostSerializer' } CompiledCode >> writeTostBodyWith: aTostTransporter [ | bytecodes initialPC | initialPC := self initialPC. diff --git a/TostSerializer/Context.extension.st b/TostSerializer/Context.extension.st index e6c0051..e793943 100644 --- a/TostSerializer/Context.extension.st +++ b/TostSerializer/Context.extension.st @@ -1,6 +1,6 @@ -Extension { #name : #Context } +Extension { #name : 'Context' } -{ #category : #'*TostSerializer' } +{ #category : '*TostSerializer' } Context >> correctTostMaterializationWith: materializedWordSize [ | numLiterals originalLiteralSize newLiteralSize | @@ -13,7 +13,7 @@ Context >> correctTostMaterializationWith: materializedWordSize [ pc := pc - (originalLiteralSize - newLiteralSize) ] -{ #category : #'*TostSerializer' } +{ #category : '*TostSerializer' } Context class >> createTostInstanceWith: aTostTransporter [ | frameSize wordSize context | @@ -25,7 +25,7 @@ Context class >> createTostInstanceWith: aTostTransporter [ ^context ] -{ #category : #'*TostSerializer' } +{ #category : '*TostSerializer' } Context >> writeTostBodyWith: aTostTransporter [ aTostTransporter writeByte: Smalltalk wordSize. diff --git a/TostSerializer/False.extension.st b/TostSerializer/False.extension.st index 8fdfb35..7e9f851 100644 --- a/TostSerializer/False.extension.st +++ b/TostSerializer/False.extension.st @@ -1,6 +1,6 @@ -Extension { #name : #False } +Extension { #name : 'False' } -{ #category : #'*TostSerializer' } +{ #category : '*TostSerializer' } False class >> createTostInstanceWith: aTostTransporter [ ^false diff --git a/TostSerializer/Float.extension.st b/TostSerializer/Float.extension.st index c6df7e1..c86aa8e 100644 --- a/TostSerializer/Float.extension.st +++ b/TostSerializer/Float.extension.st @@ -1,6 +1,6 @@ -Extension { #name : #Float } +Extension { #name : 'Float' } -{ #category : #'*TostSerializer' } +{ #category : '*TostSerializer' } Float class >> createTostInstanceWith: aTostTransporter [ ^ (self new: 2) at: 1 put: aTostTransporter readPositiveInteger; @@ -9,7 +9,7 @@ Float class >> createTostInstanceWith: aTostTransporter [ ] -{ #category : #'*TostSerializer' } +{ #category : '*TostSerializer' } Float >> writeTostBodyWith: aTostTransporter [ aTostTransporter diff --git a/TostSerializer/Fraction.extension.st b/TostSerializer/Fraction.extension.st index c4a406a..fc791b9 100644 --- a/TostSerializer/Fraction.extension.st +++ b/TostSerializer/Fraction.extension.st @@ -1,6 +1,6 @@ -Extension { #name : #Fraction } +Extension { #name : 'Fraction' } -{ #category : #'*TostSerializer' } +{ #category : '*TostSerializer' } Fraction class >> createTostInstanceWith: aTostTransporter [ | denominator numerator | @@ -10,7 +10,7 @@ Fraction class >> createTostInstanceWith: aTostTransporter [ ^numerator / denominator ] -{ #category : #'*TostSerializer' } +{ #category : '*TostSerializer' } Fraction >> writeTostBodyWith: aTostTransporter [ aTostTransporter writePositiveInteger: denominator. diff --git a/TostSerializer/FullBlockClosure.extension.st b/TostSerializer/FullBlockClosure.extension.st index bfbea6a..0a3c7c1 100644 --- a/TostSerializer/FullBlockClosure.extension.st +++ b/TostSerializer/FullBlockClosure.extension.st @@ -1,12 +1,12 @@ -Extension { #name : #FullBlockClosure } +Extension { #name : 'FullBlockClosure' } -{ #category : #'*TostSerializer' } +{ #category : '*TostSerializer' } FullBlockClosure >> correctTostMaterializationWith: materializedWordSize [ "FullBlockClosure has no difference in binary presentation in 32 and 64 bit images. Therefore nothing to do here" ] -{ #category : #'*TostSerializer' } +{ #category : '*TostSerializer' } FullBlockClosure class >> createTostInstanceWith: aTostTransporter [ "FullBlockClosure has no difference in binary presentation in 32 and 64 bit images. Therefore the instantiation method here is simplified to Object version" @@ -14,7 +14,7 @@ FullBlockClosure class >> createTostInstanceWith: aTostTransporter [ ^self basicNew: aTostTransporter readPositiveInteger ] -{ #category : #'*TostSerializer' } +{ #category : '*TostSerializer' } FullBlockClosure >> writeTostBodyWith: aTostTransporter [ "FullBlockClosure has no difference in binary presentation in 32 and 64 bit images. Therefore the serialization method here is simplified to Object version" diff --git a/TostSerializer/HashedCollection.extension.st b/TostSerializer/HashedCollection.extension.st index 062bb12..27688c3 100644 --- a/TostSerializer/HashedCollection.extension.st +++ b/TostSerializer/HashedCollection.extension.st @@ -1,6 +1,6 @@ -Extension { #name : #HashedCollection } +Extension { #name : 'HashedCollection' } -{ #category : #'*TostSerializer' } +{ #category : '*TostSerializer' } HashedCollection class >> createTostInstanceWith: aTostTransporter [ | instance | diff --git a/TostSerializer/Integer.extension.st b/TostSerializer/Integer.extension.st index 953535c..7b33f3e 100644 --- a/TostSerializer/Integer.extension.st +++ b/TostSerializer/Integer.extension.st @@ -1,23 +1,23 @@ -Extension { #name : #Integer } +Extension { #name : 'Integer' } -{ #category : #'*TostSerializer' } +{ #category : '*TostSerializer' } Integer >> byteAt: anInteger [ "Compatibility with Pharo7. In Pharo8/9 #digitAt: was changed to #byteAt:" ^ self digitAt: anInteger ] -{ #category : #'*TostSerializer' } +{ #category : '*TostSerializer' } Integer >> bytesCount [ "Compatibility with Pharo7. In Pharo8/9 #digitLength was changed to #bytesCount" ^ self digitLength ] -{ #category : #'*TostSerializer' } +{ #category : '*TostSerializer' } Integer class >> createTostInstanceWith: aTostTransporter [ ^aTostTransporter readInteger ] -{ #category : #'*TostSerializer' } +{ #category : '*TostSerializer' } Integer >> writeTostBodyWith: aTostTransporter [ aTostTransporter writeInteger: self diff --git a/TostSerializer/Number.extension.st b/TostSerializer/Number.extension.st index da3a8e6..3646726 100644 --- a/TostSerializer/Number.extension.st +++ b/TostSerializer/Number.extension.st @@ -1,6 +1,6 @@ -Extension { #name : #Number } +Extension { #name : 'Number' } -{ #category : #'*TostSerializer' } +{ #category : '*TostSerializer' } Number >> isTostValueObject [ ^true ] diff --git a/TostSerializer/Object.extension.st b/TostSerializer/Object.extension.st index c0424fd..421be56 100644 --- a/TostSerializer/Object.extension.st +++ b/TostSerializer/Object.extension.st @@ -1,11 +1,11 @@ -Extension { #name : #Object } +Extension { #name : 'Object' } -{ #category : #'*TostSerializer' } +{ #category : '*TostSerializer' } Object >> isTostValueObject [ ^false ] -{ #category : #'*TostSerializer' } +{ #category : '*TostSerializer' } Object >> writeTostBodyWith: aTostTransporter [ self class isVariable ifTrue: [ aTostTransporter writePositiveInteger: self size] diff --git a/TostSerializer/SmallFloat64.extension.st b/TostSerializer/SmallFloat64.extension.st index 934f788..c6c0794 100644 --- a/TostSerializer/SmallFloat64.extension.st +++ b/TostSerializer/SmallFloat64.extension.st @@ -1,6 +1,6 @@ -Extension { #name : #SmallFloat64 } +Extension { #name : 'SmallFloat64' } -{ #category : #'*TostSerializer' } +{ #category : '*TostSerializer' } SmallFloat64 class >> createTostInstanceWith: aTostTransporter [ ^ (BoxedFloat64 createTostInstanceWith: aTostTransporter) * 1.0 ] diff --git a/TostSerializer/String.extension.st b/TostSerializer/String.extension.st index c97c6c4..14272b8 100644 --- a/TostSerializer/String.extension.st +++ b/TostSerializer/String.extension.st @@ -1,12 +1,12 @@ -Extension { #name : #String } +Extension { #name : 'String' } -{ #category : #'*TostSerializer' } +{ #category : '*TostSerializer' } String class >> createTostInstanceWith: aTostTransporter [ ^aTostTransporter readString: self ] -{ #category : #'*TostSerializer' } +{ #category : '*TostSerializer' } String >> writeTostBodyWith: aTostTransporter [ aTostTransporter writeString: self diff --git a/TostSerializer/Symbol.extension.st b/TostSerializer/Symbol.extension.st index 90250df..6772f7e 100644 --- a/TostSerializer/Symbol.extension.st +++ b/TostSerializer/Symbol.extension.st @@ -1,6 +1,6 @@ -Extension { #name : #Symbol } +Extension { #name : 'Symbol' } -{ #category : #'*TostSerializer' } +{ #category : '*TostSerializer' } Symbol class >> createTostInstanceWith: aTostTransporter [ | string | diff --git a/TostSerializer/TostDuplicatedObjectFormat.class.st b/TostSerializer/TostDuplicatedObjectFormat.class.st index 6d28889..6fb7a35 100644 --- a/TostSerializer/TostDuplicatedObjectFormat.class.st +++ b/TostSerializer/TostDuplicatedObjectFormat.class.st @@ -3,12 +3,13 @@ I am a format which specifies how to encode duplicated objects which was already I encode them by a stream position where they was already written " Class { - #name : #TostDuplicatedObjectFormat, - #superclass : #TostStreamlineFormat, - #category : #TostSerializer + #name : 'TostDuplicatedObjectFormat', + #superclass : 'TostStreamlineFormat', + #category : 'TostSerializer', + #package : 'TostSerializer' } -{ #category : #operations } +{ #category : 'operations' } TostDuplicatedObjectFormat >> readObjectWith: aTostTransporter [ | objectIndex | objectIndex := aTostTransporter readPositiveInteger. @@ -16,7 +17,7 @@ TostDuplicatedObjectFormat >> readObjectWith: aTostTransporter [ ^aTostTransporter processedObjectAt: objectIndex ] -{ #category : #operations } +{ #category : 'operations' } TostDuplicatedObjectFormat >> tryWriteObject: anObject with: aTostTransporter [ ^aTostTransporter writeDuplicatedObject: anObject format: id diff --git a/TostSerializer/TostFormat.class.st b/TostSerializer/TostFormat.class.st index b6b9615..945a717 100644 --- a/TostSerializer/TostFormat.class.st +++ b/TostSerializer/TostFormat.class.st @@ -19,30 +19,31 @@ Internal Representation and Key Implementation Points. id: ""byte"" " Class { - #name : #TostFormat, - #superclass : #Object, + #name : 'TostFormat', + #superclass : 'Object', #instVars : [ 'id' ], - #category : #TostSerializer + #category : 'TostSerializer', + #package : 'TostSerializer' } -{ #category : #accessing } +{ #category : 'accessing' } TostFormat >> id [ ^id ] -{ #category : #accessing } +{ #category : 'accessing' } TostFormat >> id: aByte [ id := aByte ] -{ #category : #operations } +{ #category : 'operations' } TostFormat >> readObjectWith: aTostTransporter [ self subclassResponsibility ] -{ #category : #operations } +{ #category : 'operations' } TostFormat >> tryWriteObject: anObject with: aTostTransporter [ self subclassResponsibility ] diff --git a/TostSerializer/TostIndexedObjectFormat.class.st b/TostSerializer/TostIndexedObjectFormat.class.st index 1369164..d99f48b 100644 --- a/TostSerializer/TostIndexedObjectFormat.class.st +++ b/TostSerializer/TostIndexedObjectFormat.class.st @@ -14,23 +14,24 @@ Internal Representation and Key Implementation Points. objects: " Class { - #name : #TostIndexedObjectFormat, - #superclass : #TostFormat, + #name : 'TostIndexedObjectFormat', + #superclass : 'TostFormat', #instVars : [ 'objects', 'indexes' ], - #category : 'TostSerializer' + #category : 'TostSerializer', + #package : 'TostSerializer' } -{ #category : #'instance creation' } +{ #category : 'instance creation' } TostIndexedObjectFormat class >> on: anArray [ ^self new buildIndexesFor: anArray ] -{ #category : #accessing } +{ #category : 'accessing' } TostIndexedObjectFormat >> buildIndexesFor: anArray [ anArray size > 255 ifTrue: [ self error: 'Indexed object format supports up to 255 objects' ]. @@ -39,12 +40,12 @@ TostIndexedObjectFormat >> buildIndexesFor: anArray [ objects withIndexDo: [ :each :i | indexes at: each put: i ] ] -{ #category : #accessing } +{ #category : 'accessing' } TostIndexedObjectFormat >> objects [ ^objects ] -{ #category : #operations } +{ #category : 'operations' } TostIndexedObjectFormat >> tryWriteObject: anObject with: aTostTransporter [ indexes diff --git a/TostSerializer/TostNewObjectOfDuplicatedClassFormat.class.st b/TostSerializer/TostNewObjectOfDuplicatedClassFormat.class.st index 03f985a..eb73f9e 100644 --- a/TostSerializer/TostNewObjectOfDuplicatedClassFormat.class.st +++ b/TostSerializer/TostNewObjectOfDuplicatedClassFormat.class.st @@ -3,12 +3,13 @@ I am a format which specifies how to encode objects of classes which was already Initialy the class of object is encoded by full name string. But if new instance of object is going to be written I will use original stream position to encode its class instead of a name. " Class { - #name : #TostNewObjectOfDuplicatedClassFormat, - #superclass : #TostStreamlineFormat, - #category : #TostSerializer + #name : 'TostNewObjectOfDuplicatedClassFormat', + #superclass : 'TostStreamlineFormat', + #category : 'TostSerializer', + #package : 'TostSerializer' } -{ #category : #operations } +{ #category : 'operations' } TostNewObjectOfDuplicatedClassFormat >> readObjectWith: aTostTransporter [ | classIndex class | classIndex := aTostTransporter readPositiveInteger. @@ -17,7 +18,7 @@ TostNewObjectOfDuplicatedClassFormat >> readObjectWith: aTostTransporter [ ^aTostTransporter readNewObjectOf: class ] -{ #category : #operations } +{ #category : 'operations' } TostNewObjectOfDuplicatedClassFormat >> tryWriteObject: anObject with: aTostTransporter [ | written | diff --git a/TostSerializer/TostNewObjectOfNewClassFormat.class.st b/TostSerializer/TostNewObjectOfNewClassFormat.class.st index 2f3d4ef..3bc1f97 100644 --- a/TostSerializer/TostNewObjectOfNewClassFormat.class.st +++ b/TostSerializer/TostNewObjectOfNewClassFormat.class.st @@ -3,18 +3,19 @@ I am most general object format. I encode objects by writing full class name on stream at begining and the rest of bytes at the end. Rest of bytes are binary representation of object body according to there logic. Objects implement it in method ""writeTostBodyWith: aTostTransporter"" " Class { - #name : #TostNewObjectOfNewClassFormat, - #superclass : #TostFormat, - #category : #TostSerializer + #name : 'TostNewObjectOfNewClassFormat', + #superclass : 'TostFormat', + #category : 'TostSerializer', + #package : 'TostSerializer' } -{ #category : #operations } +{ #category : 'operations' } TostNewObjectOfNewClassFormat >> readObjectWith: aTostTransporter [ ^aTostTransporter readNewClassAndObject ] -{ #category : #operations } +{ #category : 'operations' } TostNewObjectOfNewClassFormat >> tryWriteObject: anObject with: aTostTransporter [ aTostTransporter writeObjectClass: anObject class format: id. diff --git a/TostSerializer/TostNewObjectOfWellKnownClassFormat.class.st b/TostSerializer/TostNewObjectOfWellKnownClassFormat.class.st index e62e5df..7e79bea 100644 --- a/TostSerializer/TostNewObjectOfWellKnownClassFormat.class.st +++ b/TostSerializer/TostNewObjectOfWellKnownClassFormat.class.st @@ -8,12 +8,13 @@ For example you could create compact format for nil, true and false: Number of well known classes is restricted to 255 " Class { - #name : #TostNewObjectOfWellKnownClassFormat, - #superclass : #TostIndexedObjectFormat, - #category : 'TostSerializer' + #name : 'TostNewObjectOfWellKnownClassFormat', + #superclass : 'TostIndexedObjectFormat', + #category : 'TostSerializer', + #package : 'TostSerializer' } -{ #category : #operations } +{ #category : 'operations' } TostNewObjectOfWellKnownClassFormat >> readObjectWith: aTostTransporter [ | class classIndex | classIndex := aTostTransporter readByte. @@ -22,7 +23,7 @@ TostNewObjectOfWellKnownClassFormat >> readObjectWith: aTostTransporter [ ^aTostTransporter readNewObjectOf: class ] -{ #category : #operations } +{ #category : 'operations' } TostNewObjectOfWellKnownClassFormat >> tryWriteObject: anObject with: aTostTransporter [ | written | diff --git a/TostSerializer/TostObjectDynamicSubstitutionFormat.class.st b/TostSerializer/TostObjectDynamicSubstitutionFormat.class.st index 38e36c1..99e44e6 100644 --- a/TostSerializer/TostObjectDynamicSubstitutionFormat.class.st +++ b/TostSerializer/TostObjectDynamicSubstitutionFormat.class.st @@ -11,43 +11,44 @@ Internal Representation and Key Implementation Points. substitutionBlock: " Class { - #name : #TostObjectDynamicSubstitutionFormat, - #superclass : #TostObjectSubstitutionFormat, + #name : 'TostObjectDynamicSubstitutionFormat', + #superclass : 'TostObjectSubstitutionFormat', #instVars : [ 'substitutionBlock', 'conditionBlock' ], - #category : 'TostSerializer' + #category : 'TostSerializer', + #package : 'TostSerializer' } -{ #category : #'instance creation' } +{ #category : 'instance creation' } TostObjectDynamicSubstitutionFormat class >> for: conditionBlock by: substitutionBlock [ ^self new conditionBlock: conditionBlock; substitutionBlock: substitutionBlock ] -{ #category : #accessing } +{ #category : 'accessing' } TostObjectDynamicSubstitutionFormat >> conditionBlock [ ^ conditionBlock ] -{ #category : #accessing } +{ #category : 'accessing' } TostObjectDynamicSubstitutionFormat >> conditionBlock: anObject [ conditionBlock := anObject ] -{ #category : #accessing } +{ #category : 'accessing' } TostObjectDynamicSubstitutionFormat >> substitutionBlock [ ^ substitutionBlock ] -{ #category : #accessing } +{ #category : 'accessing' } TostObjectDynamicSubstitutionFormat >> substitutionBlock: anObject [ substitutionBlock := anObject ] -{ #category : #operations } +{ #category : 'operations' } TostObjectDynamicSubstitutionFormat >> tryWriteObject: anObject with: aTostTransporter [ | substitution | (conditionBlock value: anObject) ifFalse: [ ^false ]. diff --git a/TostSerializer/TostObjectStaticSubstitutionFormat.class.st b/TostSerializer/TostObjectStaticSubstitutionFormat.class.st index a3cb76a..449b092 100644 --- a/TostSerializer/TostObjectStaticSubstitutionFormat.class.st +++ b/TostSerializer/TostObjectStaticSubstitutionFormat.class.st @@ -10,31 +10,32 @@ Internal Representation and Key Implementation Points. substitutions: " Class { - #name : #TostObjectStaticSubstitutionFormat, - #superclass : #TostObjectSubstitutionFormat, + #name : 'TostObjectStaticSubstitutionFormat', + #superclass : 'TostObjectSubstitutionFormat', #instVars : [ 'substitutions' ], - #category : 'TostSerializer' + #category : 'TostSerializer', + #package : 'TostSerializer' } -{ #category : #'as yet unclassified' } +{ #category : 'as yet unclassified' } TostObjectStaticSubstitutionFormat class >> substitutions: aDictionary [ ^self new substitutions: (aDictionary as: IdentityDictionary) ] -{ #category : #accessing } +{ #category : 'accessing' } TostObjectStaticSubstitutionFormat >> substitutions [ ^ substitutions ] -{ #category : #accessing } +{ #category : 'accessing' } TostObjectStaticSubstitutionFormat >> substitutions: anObject [ substitutions := anObject ] -{ #category : #operations } +{ #category : 'operations' } TostObjectStaticSubstitutionFormat >> tryWriteObject: anObject with: aTostTransporter [ | substitution | substitution := substitutions at: anObject ifAbsent: [ ^false ]. diff --git a/TostSerializer/TostObjectSubstitutionFormat.class.st b/TostSerializer/TostObjectSubstitutionFormat.class.st index 7582235..ddbfdef 100644 --- a/TostSerializer/TostObjectSubstitutionFormat.class.st +++ b/TostSerializer/TostObjectSubstitutionFormat.class.st @@ -12,12 +12,13 @@ According to this I implement general reading methods which are same for any my Reading just reads the next object from the stream but then it commands the transporter to change the traversal direction according to the serialization logic " Class { - #name : #TostObjectSubstitutionFormat, - #superclass : #TostFormat, - #category : #TostSerializer + #name : 'TostObjectSubstitutionFormat', + #superclass : 'TostFormat', + #category : 'TostSerializer', + #package : 'TostSerializer' } -{ #category : #operations } +{ #category : 'operations' } TostObjectSubstitutionFormat >> readObjectWith: aTostTransporter [ | object | object := aTostTransporter readObject. diff --git a/TostSerializer/TostStreamlineFormat.class.st b/TostSerializer/TostStreamlineFormat.class.st index 3521f9c..29c1139 100644 --- a/TostSerializer/TostStreamlineFormat.class.st +++ b/TostSerializer/TostStreamlineFormat.class.st @@ -3,7 +3,8 @@ I am a root of formats hierarchy which encode objects which are already written My subclasses use a stream position of original objects for encoding and decoding. " Class { - #name : #TostStreamlineFormat, - #superclass : #TostFormat, - #category : #TostSerializer + #name : 'TostStreamlineFormat', + #superclass : 'TostFormat', + #category : 'TostSerializer', + #package : 'TostSerializer' } diff --git a/TostSerializer/TostTransport.class.st b/TostSerializer/TostTransport.class.st index f262f28..367e839 100644 --- a/TostSerializer/TostTransport.class.st +++ b/TostSerializer/TostTransport.class.st @@ -55,26 +55,27 @@ Internal Representation and Key Implementation Points. formats: > " Class { - #name : #TostTransport, - #superclass : #Object, + #name : 'TostTransport', + #superclass : 'Object', #instVars : [ 'formats' ], - #category : #TostSerializer + #category : 'TostSerializer', + #package : 'TostSerializer' } -{ #category : #'instance creation' } +{ #category : 'instance creation' } TostTransport class >> formats: formatsArray [ ^self new formats: formatsArray ] -{ #category : #accessing } +{ #category : 'accessing' } TostTransport >> addFirstFormat: aTostBinaryFormat [ self formats: { aTostBinaryFormat }, formats ] -{ #category : #accessing } +{ #category : 'accessing' } TostTransport >> addFormat: aTostBinaryFormat before: formatClass [ | existingFormatIndex newFormats | existingFormatIndex := self formatIdFor: formatClass. @@ -85,7 +86,7 @@ TostTransport >> addFormat: aTostBinaryFormat before: formatClass [ self formats: newFormats asArray ] -{ #category : #accessing } +{ #category : 'accessing' } TostTransport >> formatIdFor: aTostFormatClass [ formats doWithIndex: [ :each :id | @@ -94,29 +95,29 @@ TostTransport >> formatIdFor: aTostFormatClass [ self error: 'Format is not defined' ] -{ #category : #accessing } +{ #category : 'accessing' } TostTransport >> formats [ ^ formats ] -{ #category : #accessing } +{ #category : 'accessing' } TostTransport >> formats: formatsArray [ formatsArray doWithIndex: [ :each :index | each id: index ]. self preparedFormats: formatsArray ] -{ #category : #api } +{ #category : 'api' } TostTransport >> newTransporterOn: transportStream [ ^TostTransporter using: self on: transportStream ] -{ #category : #accessing } +{ #category : 'accessing' } TostTransport >> preparedFormats: formatsArray [ formats := formatsArray ] -{ #category : #operations } +{ #category : 'operations' } TostTransport >> readObjectWith: aTostTransporter [ | objectFormatType currentFormat | @@ -127,7 +128,7 @@ TostTransport >> readObjectWith: aTostTransporter [ ^currentFormat readObjectWith: aTostTransporter ] -{ #category : #api } +{ #category : 'api' } TostTransport >> receiveObjectFrom: transportStream [ | transporter | @@ -135,7 +136,7 @@ TostTransport >> receiveObjectFrom: transportStream [ ^transporter materializeObject ] -{ #category : #api } +{ #category : 'api' } TostTransport >> sendObject: anObject to: transportStream [ | transporter | @@ -143,7 +144,7 @@ TostTransport >> sendObject: anObject to: transportStream [ transporter serializeObject: anObject ] -{ #category : #operations } +{ #category : 'operations' } TostTransport >> writeObject: anObject with: aTostTransporter [ | success | formats do: [ :each | diff --git a/TostSerializer/TostTransporter.class.st b/TostSerializer/TostTransporter.class.st index 4e8d6d8..8ec55bc 100644 --- a/TostSerializer/TostTransporter.class.st +++ b/TostSerializer/TostTransporter.class.st @@ -47,8 +47,8 @@ Internal Representation and Key Implementation Points. " Class { - #name : #TostTransporter, - #superclass : #Object, + #name : 'TostTransporter', + #superclass : 'Object', #instVars : [ 'transportStream', 'traveler', @@ -58,22 +58,23 @@ Class { 'finalMaterializationActions', 'transport' ], - #category : #TostSerializer + #category : 'TostSerializer', + #package : 'TostSerializer' } -{ #category : #'instance creation' } +{ #category : 'instance creation' } TostTransporter class >> using: aTostTransport on: transportStream [ ^self new transport: aTostTransport; transportStream: transportStream ] -{ #category : #controlling } +{ #category : 'controlling' } TostTransporter >> atNextStepProcess: anObject [ traveler atNextStepVisit: anObject ] -{ #category : #'reading-objects' } +{ #category : 'reading-objects' } TostTransporter >> completeMaterializationOf: anObject [ | action | finalMaterializationActions isEmptyOrNil ifTrue: [ ^self ]. "For optimization we never initialize post actions with empty array because in many cases post processing is not required" @@ -82,7 +83,7 @@ TostTransporter >> completeMaterializationOf: anObject [ action value ] -{ #category : #initialization } +{ #category : 'initialization' } TostTransporter >> initialize [ super initialize. @@ -90,7 +91,7 @@ TostTransporter >> initialize [ processedClasses := IdentityDictionary new. ] -{ #category : #api } +{ #category : 'api' } TostTransporter >> materializeObject [ | newObject object | traveler := ObjectTraveler new. @@ -112,27 +113,27 @@ TostTransporter >> materializeObject [ ^object ] -{ #category : #accessing } +{ #category : 'accessing' } TostTransporter >> objectIndex [ ^ objectIndex ] -{ #category : #accessing } +{ #category : 'accessing' } TostTransporter >> objectIndex: anObject [ objectIndex := anObject ] -{ #category : #accessing } +{ #category : 'accessing' } TostTransporter >> processedClassAt: index [ ^processedClasses at: index ] -{ #category : #accessing } +{ #category : 'accessing' } TostTransporter >> processedObjectAt: index [ ^processedObjects at: index ] -{ #category : #testing } +{ #category : 'testing' } TostTransporter >> processesObject: anObject asNodeAt: pathNodesIndex [ | actualNode | @@ -140,19 +141,19 @@ TostTransporter >> processesObject: anObject asNodeAt: pathNodesIndex [ ^anObject == actualNode ] -{ #category : #'reading-primitive data' } +{ #category : 'reading-primitive data' } TostTransporter >> readByte [ ^transportStream next ] -{ #category : #'reading-primitive data' } +{ #category : 'reading-primitive data' } TostTransporter >> readBytes: count [ ^transportStream next: count. ] -{ #category : #'reading-primitive data' } +{ #category : 'reading-primitive data' } TostTransporter >> readBytes: count as: aByteArrayClass [ | bytes | bytes := self readBytes: count. @@ -163,7 +164,7 @@ TostTransporter >> readBytes: count as: aByteArrayClass [ ^bytes ] -{ #category : #'reading-primitive data' } +{ #category : 'reading-primitive data' } TostTransporter >> readInteger [ | bytesSize bytes signByte | @@ -173,7 +174,7 @@ TostTransporter >> readInteger [ ^signByte = 0 ifTrue: [bytes asInteger] ifFalse: [ bytes asInteger negated ] ] -{ #category : #'reading-objects' } +{ #category : 'reading-objects' } TostTransporter >> readNewClassAndObject [ | className class | @@ -184,7 +185,7 @@ TostTransporter >> readNewClassAndObject [ ^self readNewObjectOf: class ] -{ #category : #'reading-objects' } +{ #category : 'reading-objects' } TostTransporter >> readNewObjectOf: aClass [ | newObject | @@ -194,19 +195,19 @@ TostTransporter >> readNewObjectOf: aClass [ ^newObject ] -{ #category : #'reading-objects' } +{ #category : 'reading-objects' } TostTransporter >> readNextObject [ objectIndex := transportStream position. ^transport readObjectWith: self ] -{ #category : #'reading-objects' } +{ #category : 'reading-objects' } TostTransporter >> readObject [ ^transport readObjectWith: self ] -{ #category : #'reading-primitive data' } +{ #category : 'reading-primitive data' } TostTransporter >> readPositiveInteger [ | bytesSize bytes | @@ -215,7 +216,7 @@ TostTransporter >> readPositiveInteger [ ^bytes asInteger ] -{ #category : #'reading-primitive data' } +{ #category : 'reading-primitive data' } TostTransporter >> readString: stringClass [ | bytesSize bytes | @@ -224,7 +225,7 @@ TostTransporter >> readString: stringClass [ ^stringClass fromByteArray: bytes ] -{ #category : #api } +{ #category : 'api' } TostTransporter >> serializeObject: anObject [ traveler := ObjectTraveler new. @@ -239,42 +240,42 @@ TostTransporter >> serializeObject: anObject [ self writeNextObject: each ] ] -{ #category : #controlling } +{ #category : 'controlling' } TostTransporter >> skip: anObject [ traveler skip: anObject ] -{ #category : #accessing } +{ #category : 'accessing' } TostTransporter >> transport [ ^ transport ] -{ #category : #accessing } +{ #category : 'accessing' } TostTransporter >> transport: anObject [ transport := anObject ] -{ #category : #accessing } +{ #category : 'accessing' } TostTransporter >> transportStream [ ^ transportStream ] -{ #category : #accessing } +{ #category : 'accessing' } TostTransporter >> transportStream: anObject [ transportStream := anObject ] -{ #category : #accessing } +{ #category : 'accessing' } TostTransporter >> traveler [ ^traveler ] -{ #category : #accessing } +{ #category : 'accessing' } TostTransporter >> traveler: anObject [ traveler := anObject ] -{ #category : #controlling } +{ #category : 'controlling' } TostTransporter >> whenMaterializationDoneFor: anObject do: actionBlock [ "When anObject created from stream it can require post processing action. I execute them when traveler left given object @@ -284,19 +285,19 @@ TostTransporter >> whenMaterializationDoneFor: anObject do: actionBlock [ finalMaterializationActions at: anObject put: actionBlock ] -{ #category : #'writing-primitive data' } +{ #category : 'writing-primitive data' } TostTransporter >> writeByte: aByte [ transportStream nextPut: aByte ] -{ #category : #'writing-primitive data' } +{ #category : 'writing-primitive data' } TostTransporter >> writeBytes: aByteArray [ transportStream nextPutAll: aByteArray ] -{ #category : #'writing-objects' } +{ #category : 'writing-objects' } TostTransporter >> writeDuplicatedClass: aClass format: formatId [ processedClasses @@ -308,7 +309,7 @@ TostTransporter >> writeDuplicatedClass: aClass format: formatId [ ^false ] -{ #category : #'writing-objects' } +{ #category : 'writing-objects' } TostTransporter >> writeDuplicatedObject: anObject format: formatId [ anObject isTostValueObject ifTrue: [ ^false ]. @@ -322,7 +323,7 @@ TostTransporter >> writeDuplicatedObject: anObject format: formatId [ ^false ] -{ #category : #'writing-primitive data' } +{ #category : 'writing-primitive data' } TostTransporter >> writeInteger: anInteger [ | bytesSize | bytesSize := anInteger bytesCount. @@ -332,19 +333,19 @@ TostTransporter >> writeInteger: anInteger [ bytesSize to: 1 by: -1 do: [ :i | transportStream nextPut: (anInteger byteAt: i) ] ] -{ #category : #'writing-objects' } +{ #category : 'writing-objects' } TostTransporter >> writeNextObject: anObject [ objectIndex := transportStream position. self writeObject: anObject ] -{ #category : #'writing-objects' } +{ #category : 'writing-objects' } TostTransporter >> writeObject: anObject [ ^transport writeObject: anObject with: self ] -{ #category : #'writing-objects' } +{ #category : 'writing-objects' } TostTransporter >> writeObjectClass: aClass format: binaryType [ transportStream nextPut: binaryType. @@ -354,14 +355,14 @@ TostTransporter >> writeObjectClass: aClass format: binaryType [ self writeString: aClass name ] -{ #category : #'writing-objects' } +{ #category : 'writing-objects' } TostTransporter >> writeObjectIndex: objectIdInteger format: binaryTypeByte [ transportStream nextPut: binaryTypeByte. self writePositiveInteger: objectIdInteger ] -{ #category : #'writing-primitive data' } +{ #category : 'writing-primitive data' } TostTransporter >> writePositiveInteger: anInteger [ | bytesSize | anInteger < 0 ifTrue: [ self error: 'Given int should be positive' ]. @@ -371,14 +372,14 @@ TostTransporter >> writePositiveInteger: anInteger [ bytesSize to: 1 by: -1 do: [ :i | transportStream nextPut: (anInteger byteAt: i) ] ] -{ #category : #'writing-objects' } +{ #category : 'writing-objects' } TostTransporter >> writeSmallObjectIndex: objectIdByte format: binaryTypeByte [ transportStream nextPut: binaryTypeByte. transportStream nextPut: objectIdByte ] -{ #category : #'writing-primitive data' } +{ #category : 'writing-primitive data' } TostTransporter >> writeString: aString [ | bytes | @@ -387,7 +388,7 @@ TostTransporter >> writeString: aString [ transportStream nextPutAll: bytes ] -{ #category : #'writing-objects' } +{ #category : 'writing-objects' } TostTransporter >> writeSubstitution: substitutionObject for: anObject format: formatId [ self writeByte: formatId. diff --git a/TostSerializer/TostWellKnownObjectFormat.class.st b/TostSerializer/TostWellKnownObjectFormat.class.st index 960b0e6..713faee 100644 --- a/TostSerializer/TostWellKnownObjectFormat.class.st +++ b/TostSerializer/TostWellKnownObjectFormat.class.st @@ -9,20 +9,21 @@ There is similar default instance on class side. Number of well known objects is restricted to 255 " Class { - #name : #TostWellKnownObjectFormat, - #superclass : #TostIndexedObjectFormat, + #name : 'TostWellKnownObjectFormat', + #superclass : 'TostIndexedObjectFormat', #classInstVars : [ 'default' ], - #category : 'TostSerializer' + #category : 'TostSerializer', + #package : 'TostSerializer' } -{ #category : #accessing } +{ #category : 'accessing' } TostWellKnownObjectFormat class >> default [ ^default ifNil: [ default := TostWellKnownObjectFormat on: { nil. true. false. 0. 1 }] ] -{ #category : #operations } +{ #category : 'operations' } TostWellKnownObjectFormat >> readObjectWith: aTostTransporter [ | objectIndex foundObject | objectIndex := aTostTransporter readByte. @@ -31,7 +32,7 @@ TostWellKnownObjectFormat >> readObjectWith: aTostTransporter [ ^foundObject ] -{ #category : #operations } +{ #category : 'operations' } TostWellKnownObjectFormat >> tryWriteObject: anObject with: aTostTransporter [ | written | diff --git a/TostSerializer/True.extension.st b/TostSerializer/True.extension.st index e11d27c..e52786b 100644 --- a/TostSerializer/True.extension.st +++ b/TostSerializer/True.extension.st @@ -1,6 +1,6 @@ -Extension { #name : #True } +Extension { #name : 'True' } -{ #category : #'*TostSerializer' } +{ #category : '*TostSerializer' } True class >> createTostInstanceWith: aTostTransporter [ ^true diff --git a/TostSerializer/UndefinedObject.extension.st b/TostSerializer/UndefinedObject.extension.st index e2b6084..dce2e96 100644 --- a/TostSerializer/UndefinedObject.extension.st +++ b/TostSerializer/UndefinedObject.extension.st @@ -1,12 +1,12 @@ -Extension { #name : #UndefinedObject } +Extension { #name : 'UndefinedObject' } -{ #category : #'*TostSerializer' } +{ #category : '*TostSerializer' } UndefinedObject class >> createTostInstanceWith: aTostTransporter [ ^nil ] -{ #category : #'*TostSerializer' } +{ #category : '*TostSerializer' } UndefinedObject >> isTostValueObject [ ^true ] diff --git a/TostSerializer/package.st b/TostSerializer/package.st index 06ffd15..b1690af 100644 --- a/TostSerializer/package.st +++ b/TostSerializer/package.st @@ -1 +1 @@ -Package { #name : #TostSerializer } +Package { #name : 'TostSerializer' }