Eliot Miranda uploaded a new version of VMMaker to project VM Maker: http://source.squeak.org/VMMaker/VMMaker.oscog-eem.1068.mcz
==================== Summary ====================
Name: VMMaker.oscog-eem.1068 Author: eem Time: 16 February 2015, 11:53:51.24 am UUID: 3aeb252a-64eb-45a8-a5ad-c4daf88f87b8 Ancestors: VMMaker.oscog-eem.1067
...and add type inference support for at: rto rescue inlining in the Klatt plugin.
Mark SpurSegmentManager>>initializeFromFreeChunks: as doNotGenerate to avoid a type inferrence error.
=============== Diff against VMMaker.oscog-eem.1067 ===============
Item was changed: ----- Method: CCodeGenerator>>returnTypeForSend:in: (in category 'type inference') ----- returnTypeForSend: sendNode in: aTMethod "Answer the return type for a send. Absent sends default to #sqInt. The bitwise operators answer unsigned versions of their argument types, at least in gcc although this author can't find that in the C99 spec. If you can find this, please let me know." | sel | ^(self anyMethodNamed: (sel := sendNode selector)) ifNil: [kernelReturnTypes at: sel ifAbsent: [^sel caseOf: { [#+] -> [self typeForArithmetic: sendNode in: aTMethod]. [#-] -> [self typeForArithmetic: sendNode in: aTMethod]. [#*] -> [self typeForArithmetic: sendNode in: aTMethod]. [#/] -> [self typeForArithmetic: sendNode in: aTMethod]. + [#at:] -> [self typeForDereference: sendNode in: aTMethod]. [#bitAnd:] -> [self unsignedTypeForBitwiseSend: sendNode in: aTMethod]. [#bitOr:] -> [self unsignedTypeForBitwiseSend: sendNode in: aTMethod]. [#bitXor:] -> [self unsignedTypeForBitwiseSend: sendNode in: aTMethod]. [#asVoidPointer] -> [#'void *']. [#asVoidPointer] -> [#'void *']. [#asUnsignedInteger] -> [#usqInt]. [#asLong] -> [#long]. [#asUnsignedLong] -> [#'unsigned long']. [#signedIntToLong] -> [#usqInt]. "c.f. generateSignedIntToLong:on:indent:" [#signedIntToShort] -> [#usqInt]. "c.f. generateSignedIntToShort:on:indent:" [#cCoerce:to:] -> [sendNode args last value]. [#cCoerceSimple:to:] -> [sendNode args last value] } otherwise: [#sqInt]]] ifNotNil: [:m| m returnType ifNotNil: [:type| "map fields to #usqInt" ((type beginsWith: 'unsigned') and: [(type includes: $:) and: [type last isDigit]]) ifTrue: [#usqInt] ifFalse: [type]]]!
Item was added: + ----- Method: CCodeGenerator>>typeForDereference:in: (in category 'type inference') ----- + typeForDereference: sendNode in: aTMethod + | type | + type := self typeFor: sendNode receiver in: aTMethod. + type last = $* ifTrue: + [^type allButLast withBlanksTrimmed]. + self error: 'cannot determine type'. + ^nil!
Item was changed: ----- Method: SpurSegmentManager>>initializeFromFreeChunks: (in category 'simulation only') ----- initializeFromFreeChunks: freeChunks + <doNotGenerate> "For testing, create a set of segments using the freeChunks as bridges." self assert: (freeChunks allSatisfy: [:f| manager hasOverflowHeader: f]). numSegments := freeChunks size. freeChunks do: [:f| manager initSegmentBridgeWithBytes: (manager bytesInObject: f) at: (manager startOfObject: f). self assert: (manager isSegmentBridge: f)]. segments := (1 to: numSegments) collect: [:i| | bridge start size | bridge := freeChunks at: i. start := i = 1 ifTrue: [manager newSpaceLimit] ifFalse: [manager addressAfter: (freeChunks at: i - 1)]. size := bridge + manager baseHeaderSize - start. SpurSegmentInfo new segStart: start; segSize: size; yourself]. manager setEndOfMemory: segments last segLimit. segments := CArrayAccessor on: segments. freeChunks with: segments object do: [:bridge :segment| self assert: (self isValidSegmentBridge: bridge). self assert: bridge = (self bridgeFor: segment)]!
vm-dev@lists.squeakfoundation.org