[Vm-dev] VM Maker: VMMaker.oscog-eem.2797.mcz
commits at source.squeak.org
commits at source.squeak.org
Mon Aug 31 01:18:09 UTC 2020
Eliot Miranda uploaded a new version of VMMaker to project VM Maker:
http://source.squeak.org/VMMaker/VMMaker.oscog-eem.2797.mcz
==================== Summary ====================
Name: VMMaker.oscog-eem.2797
Author: eem
Time: 30 August 2020, 6:17:59.909283 pm
UUID: 84f54ca7-0a17-408a-9fc5-fb30a1ac6c6f
Ancestors: VMMaker.oscog-eem.2796
Plugins: Squash a few C compiler warnings
=============== Diff against VMMaker.oscog-eem.2796 ===============
Item was changed:
----- Method: DeflatePlugin>>sendBlock:with:with:with: (in category 'encoding') -----
sendBlock: literalStream with: distanceStream with: litTree with: distTree
"Require:
zipCollection, zipCollectionSize, zipPosition,
zipBitBuf, zipBitPos.
"
| oop litPos litLimit litArray distArray lit dist sum llBitLengths llCodes distBitLengths distCodes code extra litBlCount distBlCount |
+ <var: #dist type: #sqInt> "must be signed"
<var: #litArray type: #'unsigned char *'>
<var: #distArray type: #'unsigned int *'>
<var: #llBitLengths type: #'unsigned int *'>
<var: #llCodes type: #'unsigned int *'>
<var: #distBitLengths type: #'unsigned int *'>
<var: #distCodes type: #'unsigned int *'>
oop := interpreterProxy fetchPointer: 0 ofObject: literalStream.
litPos := interpreterProxy fetchInteger: 1 ofObject: literalStream.
litLimit := interpreterProxy fetchInteger: 2 ofObject: literalStream.
(litPos <= litLimit
and: [(interpreterProxy isBytes: oop)
and: [litLimit <= (interpreterProxy byteSizeOf: oop)]]) ifFalse:
[^interpreterProxy primitiveFail].
litArray := interpreterProxy firstIndexableField: oop.
oop := interpreterProxy fetchPointer: 0 ofObject: distanceStream.
((interpreterProxy isWords: oop)
and: [litLimit <= (interpreterProxy slotSizeOf: oop)
and: [(interpreterProxy fetchInteger: 1 ofObject: distanceStream) = litPos
and: [(interpreterProxy fetchInteger: 2 ofObject: distanceStream) = litLimit]]]) ifFalse:
[^interpreterProxy primitiveFail].
distArray := interpreterProxy firstIndexableField: oop.
oop := interpreterProxy fetchPointer: 0 ofObject: litTree.
(interpreterProxy isWords: oop) ifFalse:
[^interpreterProxy primitiveFail].
litBlCount := interpreterProxy slotSizeOf: oop.
llBitLengths := interpreterProxy firstIndexableField: oop.
oop := interpreterProxy fetchPointer: 1 ofObject: litTree.
((interpreterProxy isWords: oop)
and: [litBlCount = (interpreterProxy slotSizeOf: oop)]) ifFalse:
[^interpreterProxy primitiveFail].
llCodes := interpreterProxy firstIndexableField: oop.
oop := interpreterProxy fetchPointer: 0 ofObject: distTree.
(interpreterProxy isWords: oop) ifFalse:
[^interpreterProxy primitiveFail].
distBlCount := interpreterProxy slotSizeOf: oop.
distBitLengths := interpreterProxy firstIndexableField: oop.
oop := interpreterProxy fetchPointer: 1 ofObject: distTree.
((interpreterProxy isWords: oop)
and: [distBlCount = (interpreterProxy slotSizeOf: oop)]) ifFalse:
[^interpreterProxy primitiveFail].
distCodes := interpreterProxy firstIndexableField: oop.
self nextZipBits: 0 put: 0. "Flush pending bits if necessary"
sum := 0.
[litPos < litLimit and:[zipPosition + 4 < zipCollectionSize]] whileTrue:[
lit := litArray at: litPos.
dist := distArray at: litPos.
litPos := litPos + 1.
dist = 0 ifTrue:["literal"
sum := sum + 1.
lit < litBlCount ifFalse:[^interpreterProxy primitiveFail].
self nextZipBits: (llBitLengths at: lit) put: (llCodes at: lit).
] ifFalse:["match"
sum := sum + lit + DeflateMinMatch.
+ "eem 8/30/2020 Can't happen; litArray has type unsigned char *, lit unsigned char. Leaving this in causes a C compiler warning."
+ false ifTrue: [lit < 256 ifFalse:[^interpreterProxy primitiveFail]].
- lit < 256 ifFalse:[^interpreterProxy primitiveFail].
code := zipMatchLengthCodes at: lit.
code < litBlCount ifFalse:[^interpreterProxy primitiveFail].
self nextZipBits: (llBitLengths at: code) put: (llCodes at: code).
extra := zipExtraLengthBits at: code - 257.
extra = 0 ifFalse:[
lit := lit - (zipBaseLength at: code - 257).
self nextZipBits: extra put: lit].
dist := dist - 1.
dist < 16r8000 ifFalse:[^interpreterProxy primitiveFail].
dist < 256
ifTrue:[code := zipDistanceCodes at: dist]
ifFalse:[code := zipDistanceCodes at: 256 + (dist >> 7)].
code < distBlCount ifFalse:[^interpreterProxy primitiveFail].
self nextZipBits: (distBitLengths at: code) put: (distCodes at: code).
extra := zipExtraDistanceBits at: code.
extra = 0 ifFalse:[
dist := dist - (zipBaseDistance at: code).
self nextZipBits: extra put: dist].
].
].
interpreterProxy failed ifTrue:[^nil].
interpreterProxy storeInteger: 1 ofObject: literalStream withValue: litPos.
interpreterProxy storeInteger: 1 ofObject: distanceStream withValue: litPos.
^sum!
Item was changed:
----- Method: SocketPlugin>>netAddressToInt: (in category 'primitives') -----
netAddressToInt: ptrToByteArray
"Convert the given internet network address (represented as a four-byte ByteArray) into a 32-bit integer. Fail if the given ptrToByteArray does not appear to point to a four-byte ByteArray."
+ <var: #ptrToByteArray type: #'unsigned char *'>
| sz |
+ <inline: #always>
- <var: #ptrToByteArray type: 'unsigned char * '>
sz := interpreterProxy byteSizeOf: ptrToByteArray cPtrAsOop.
+ sz = 4 ifFalse: [^interpreterProxy primitiveFail].
- sz = 4 ifFalse: [^ interpreterProxy primitiveFail].
^ (ptrToByteArray at: 3 ) +
((ptrToByteArray at: 2) <<8) +
((ptrToByteArray at: 1) <<16) +
((ptrToByteArray at: 0) <<24)!
Item was changed:
----- Method: SocketPlugin>>socketRecordSize (in category 'primitives') -----
socketRecordSize
+ "Answer the size of a Smalltalk socket record in bytes."
+ <inline: #always>
+ ^self sizeof: #SQSocket!
- "Return the size of a Smalltalk socket record in bytes."
- <inline: true>
- ^ self sizeof: #SQSocket!
Item was changed:
----- Method: SocketPlugin>>socketValueOf: (in category 'primitives') -----
socketValueOf: socketOop
"Answer a pointer to the first byte of of the socket record within the
given Smalltalk object, or nil if socketOop is not a socket record."
<returnTypeC: #SocketPtr>
+ <inline: #always>
^((interpreterProxy isBytes: socketOop)
and: [(interpreterProxy byteSizeOf: socketOop) = self socketRecordSize])
ifTrue: [self cCoerce: (interpreterProxy firstIndexableField: socketOop) to: #SocketPtr]
ifFalse: [interpreterProxy primitiveFailFor: PrimErrBadArgument. nil]!
More information about the Vm-dev
mailing list