[Vm-dev] VM Maker: VMMaker-oscog-IgorStasenko.162.mcz

commits at source.squeak.org commits at source.squeak.org
Thu Jul 26 13:58:39 UTC 2012


Igor Stasenko uploaded a new version of VMMaker to project VM Maker:
http://source.squeak.org/VMMaker/VMMaker-oscog-IgorStasenko.162.mcz

==================== Summary ====================

Name: VMMaker-oscog-IgorStasenko.162
Author: IgorStasenko
Time: 26 July 2012, 3:56:10 pm
UUID: e4554f9a-cc90-4826-a807-ac282b782fe4
Ancestors: VMMaker-oscog-EstebanLorenzano.161

- changed the 
readImageFromFile: f HeapSize: desiredHeapSize StartingAt: imageOffset
to use sqImageFileReadEntireImage() function


=============== Diff against VMMaker-oscog-EstebanLorenzano.161 ===============

Item was changed:
  ----- Method: CoInterpreter>>readImageFromFile:HeapSize:StartingAt: (in category 'image save/restore') -----
  readImageFromFile: f HeapSize: desiredHeapSize StartingAt: imageOffset
  	"Read an image from the given file stream, allocating the given amount of memory to its object heap. Fail if the image has an unknown format or requires more than the given amount of memory."
  	"Details: This method detects when the image was stored on a machine with the opposite byte ordering from this machine and swaps the bytes automatically. Furthermore, it allows the header information to start 512 bytes into the file, since some file transfer programs for the Macintosh apparently prepend a Mac-specific header of this size. Note that this same 512 bytes of prefix area could also be used to store an exec command on Unix systems, allowing one to launch Smalltalk by invoking the image name as a command."
  	"This code is based on C code by Ian Piumarta and Smalltalk code by Tim Rowledge. Many thanks to both of you!!!!"
  
  	| swapBytes headerStart headerSize dataSize oldBaseAddr
  	  minimumMemory heapSize bytesRead bytesToShift
  	  hdrNumStackPages hdrEdenBytes hdrCogCodeSize headerFlags hdrMaxExtSemTabSize |
  	<var: #f type: 'sqImageFile '>
  	<var: #memStart type: 'usqInt'>
  	<var: #desiredHeapSize type: 'usqInt'>
  	<var: #headerStart type: 'squeakFileOffsetType '>
  	<var: #dataSize type: 'size_t '>
  	<var: #imageOffset type: 'squeakFileOffsetType '>
  
  	metaclassSizeBytes := 6 * BytesPerWord.	"guess (Metaclass instSize * BPW)"
  	swapBytes := self checkImageVersionFrom: f startingAt: imageOffset.
  	headerStart := (self sqImageFilePosition: f) - BytesPerWord.  "record header start position"
  
  	headerSize			:= self getLongFromFile: f swap: swapBytes.
  	dataSize			:= self getLongFromFile: f swap: swapBytes.
  	oldBaseAddr		:= self getLongFromFile: f swap: swapBytes.
  	objectMemory specialObjectsOop: (self getLongFromFile: f swap: swapBytes).
  	objectMemory lastHash: (self getLongFromFile: f swap: swapBytes). "N.B.  not used."
  	savedWindowSize	:= self getLongFromFile: f swap: swapBytes.
  	headerFlags			:= self getLongFromFile: f swap: swapBytes.
  	self setImageHeaderFlagsFrom: headerFlags.
  	extraVMMemory		:= self getLongFromFile: f swap: swapBytes. "N.B.  not used."
  	hdrNumStackPages	:= self getShortFromFile: f swap: swapBytes.
  	"4 stack pages is small.  Should be able to run with as few as
  	 three. 4 should be comfortable but slow.  8 is a reasonable
  	 default.  Can be changed via vmParameterAt: 43 put: n.
  	 Can be set as a preference (Info.plist, VM.ini, command line etc).
  	 If desiredNumStackPages is already non-zero then it has been
  	 set as a preference.  Ignore (but preserve) the header's default."
  	numStackPages := desiredNumStackPages ~= 0
  						ifTrue: [desiredNumStackPages]
  						ifFalse: [hdrNumStackPages = 0
  									ifTrue: [self defaultNumStackPages]
  									ifFalse: [hdrNumStackPages]].
  	desiredNumStackPages := hdrNumStackPages.
  	"This slot holds the size of the native method zone in 1k units. (pad to word boundary)."
  	hdrCogCodeSize := (self getShortFromFile: f swap: swapBytes) * 1024.
  	cogCodeSize := desiredCogCodeSize ~= 0
  						ifTrue: [desiredCogCodeSize]
  						ifFalse:
  							[hdrCogCodeSize = 0
  									ifTrue: [self defaultCogCodeSize]
  									ifFalse: [hdrCogCodeSize]].
  	hdrEdenBytes		:= self getLongFromFile: f swap: swapBytes.
  	objectMemory edenBytes: (desiredEdenBytes ~= 0
  						ifTrue: [desiredEdenBytes]
  						ifFalse:
  							[hdrEdenBytes = 0
  									ifTrue: [objectMemory defaultEdenBytes]
  									ifFalse: [hdrEdenBytes]]).
  	desiredEdenBytes := hdrEdenBytes.
  	hdrMaxExtSemTabSize := self getShortFromFile: f swap: swapBytes.
  	hdrMaxExtSemTabSize ~= 0 ifTrue:
  		[self setMaxExtSemSizeTo: hdrMaxExtSemTabSize].
  
  	"compare memory requirements with availability"
  	minimumMemory := cogCodeSize "no need to include the stackZone; this is alloca'ed"
  						+ dataSize
  						+ objectMemory edenBytes
  						+ self interpreterAllocationReserveBytes.
  	heapSize             :=  cogCodeSize "no need to include the stackZone; this is alloca'ed"
  						+ desiredHeapSize
  						"+ edenBytes" "don't include edenBytes; this is part of the heap and so part of desiredHeapSize"
  						+ self interpreterAllocationReserveBytes.
  	heapSize < minimumMemory ifTrue:
  		[self insufficientMemorySpecifiedError].
  
  	"allocate a contiguous block of memory for the Squeak heap and ancilliary data structures"
  	"N.B. If the platform needs to it will redefine this macro to make heapSize
  	 an in/out parameter and assign the ammount actually allocated into heapSize.
  	 See e.g. platforms/Mac OS/vm/sqPlatformSpecific.h.  (I *hate* this. eem 7/23/2009)"
  	"objectMemory memory: (self cCode: 'sqAllocateMemory(minimumMemory, heapSize)').  "
  	objectMemory memory: (self
  								allocateMemory: heapSize
  								minimum: minimumMemory
  								imageFile: f
  								headerSize: headerSize).	
  	
  	objectMemory memory = nil ifTrue: [self insufficientMemoryAvailableError].
  	heapBase := objectMemory memory + cogCodeSize.
  	self assert: objectMemory startOfMemory = heapBase.
  	objectMemory setMemoryLimit: objectMemory memory + heapSize - 24.  "decrease memoryLimit a tad for safety"
  	objectMemory setEndOfMemory: heapBase + dataSize.
  
  	"position file after the header"
  	self sqImageFile: f Seek: headerStart + headerSize.
  
  	"read in the image in bulk, then swap the bytes if necessary"
+ 	bytesRead := self cCode: 'sqImageFileReadEntireImage(pointerForOop(heapBase), sizeof(unsigned char), dataSize, f)'.
+ 
- 	bytesRead := self cCode: 'sqImageFileRead(pointerForOop(heapBase), sizeof(unsigned char), dataSize, f)'.
  	bytesRead ~= dataSize ifTrue: [self unableToReadImageError].
  
  	self ensureImageFormatIsUpToDate: swapBytes.
  
  	"compute difference between old and new memory base addresses"
  	bytesToShift := heapBase - oldBaseAddr.
  	self initializeInterpreter: bytesToShift.  "adjusts all oops to new location"
  	self initializeCodeGenerator.
  	^dataSize!

Item was changed:
  ----- Method: CogVMSimulator>>makeDirEntryName:size:createDate:modDate:isDir:fileSize:posixPermissions: (in category 'as yet unclassified') -----
  makeDirEntryName: entryName 
  	size: entryNameSize
  	createDate: createDate 
  	modDate: modifiedDate
  	isDir: dirFlag 
  	fileSize: posixPermissions
  	posixPermissions: fileSize
  
  	| modDateOop createDateOop nameString results |
  	<var: 'entryName' type: 'char *'>
  
  	results			:= objectMemory instantiateClass: (objectMemory splObj: ClassArray) indexableSize: 5.
  	nameString		:= objectMemory instantiateClass: (objectMemory splObj: ClassString) indexableSize: entryNameSize.
  	createDateOop	:= self positive32BitIntegerFor: createDate.
  	modDateOop	:= self positive32BitIntegerFor: modifiedDate.
  
  	1 to: entryNameSize do:
  		[ :i |
  		objectMemory storeByte: i-1 ofObject: nameString withValue: (entryName at: i) asciiValue].
  
  	objectMemory storePointerUnchecked: 0 ofObject: results withValue: nameString.
  	objectMemory storePointerUnchecked: 1 ofObject: results withValue: createDateOop.
  	objectMemory storePointerUnchecked: 2 ofObject: results withValue: modDateOop.
  	dirFlag
  		ifTrue: [ objectMemory storePointerUnchecked: 3 ofObject: results withValue: objectMemory trueObject ]
  		ifFalse: [ objectMemory storePointerUnchecked: 3 ofObject: results withValue: objectMemory falseObject ].
  	objectMemory storePointerUnchecked: 4 ofObject: results withValue: (objectMemory integerObjectOf: fileSize).
  	objectMemory storePointerUnchecked: 5 ofObject: results withValue: (objectMemory integerObjectOf: posixPermissions).
  	^ results!

Item was changed:
  ----- Method: FilePlugin>>makeDirEntryName:size:createDate:modDate:isDir:fileSize:posixPermissions: (in category 'directory primitives') -----
  makeDirEntryName: entryName 
  	size: entryNameSize
  	createDate: createDate 
  	modDate: modifiedDate
  	isDir: dirFlag 
  	fileSize: fileSize
  	posixPermissions: posixPermissions
  
  	| modDateOop createDateOop nameString results stringPtr posixPermissionsOop fileSizeOop |
  	<var: 'entryName' type: 'char *'>
  	<var: 'stringPtr' type: 'char *'>
  	<var: 'fileSize' type: 'squeakFileOffsetType '>
  
  	"allocate storage for results, remapping newly allocated
  	 oops in case GC happens during allocation"
  	interpreterProxy pushRemappableOop:
  		(interpreterProxy instantiateClass: (interpreterProxy classArray) indexableSize: 6).
  	interpreterProxy pushRemappableOop:
  		(interpreterProxy instantiateClass: (interpreterProxy classString) indexableSize: entryNameSize)..
  	interpreterProxy pushRemappableOop: 
  		(interpreterProxy positive32BitIntegerFor: createDate).
  	interpreterProxy pushRemappableOop: 
  		(interpreterProxy positive32BitIntegerFor: modifiedDate).
  	interpreterProxy pushRemappableOop:
  		(interpreterProxy positive64BitIntegerFor: fileSize).
  	interpreterProxy pushRemappableOop: 
  		(interpreterProxy positive32BitIntegerFor: posixPermissions).
  
  	posixPermissionsOop := interpreterProxy popRemappableOop.
  	fileSizeOop := interpreterProxy popRemappableOop.
  	modDateOop := interpreterProxy popRemappableOop.
  	createDateOop := interpreterProxy popRemappableOop.
  	nameString  := interpreterProxy popRemappableOop.
  	results := interpreterProxy popRemappableOop.
  
  	"copy name into Smalltalk string"
  	stringPtr := interpreterProxy firstIndexableField: nameString.
  	0 to: entryNameSize - 1 do: [ :i |
  		stringPtr at: i put: (entryName at: i).
  	].
  
  	interpreterProxy storePointer: 0 ofObject: results withValue: nameString.
  	interpreterProxy storePointer: 1 ofObject: results withValue: createDateOop.
  	interpreterProxy storePointer: 2 ofObject: results withValue: modDateOop.
  	dirFlag
  		ifTrue: [ interpreterProxy storePointer: 3 ofObject: results withValue: interpreterProxy trueObject ]
  		ifFalse: [ interpreterProxy storePointer: 3 ofObject: results withValue: interpreterProxy falseObject ].
  	interpreterProxy storePointer: 4 ofObject: results withValue: fileSizeOop.
  	interpreterProxy storePointer: 5 ofObject: results withValue: posixPermissionsOop.
  	^ results!

Item was changed:
  ----- Method: FilePluginSimulator>>makeDirEntryName:size:createDate:modDate:isDir:fileSize:posixPermissions: (in category 'as yet unclassified') -----
  makeDirEntryName: entryName size: entryNameSize
  	createDate: createDate modDate: modifiedDate
  	isDir: dirFlag 
  	fileSize: fileSize 
  	posixPermissions: posixPermissions
  
  	^interpreterProxy
  		makeDirEntryName: entryName 
  		size: entryNameSize
  		createDate: createDate 
  		modDate: modifiedDate
  		isDir: dirFlag 
  		fileSize: fileSize
  		posixPermissions: posixPermissions
  !

Item was changed:
  ----- Method: InterpreterSimulator>>makeDirEntryName:size:createDate:modDate:isDir:fileSize:posixPermissions: (in category 'as yet unclassified') -----
  makeDirEntryName: entryName 
  	size: entryNameSize
  	createDate: createDate 
  	modDate: modifiedDate
  	isDir: dirFlag 
  	fileSize: posixPermissions
  	posixPermissions: fileSize
  
  	| modDateOop createDateOop nameString results |
  	<var: 'entryName' type: 'char *'>
  
  	"allocate storage for results, remapping newly allocated
  	 oops in case GC happens during allocation"
  	self pushRemappableOop:
  		(self instantiateClass: (self splObj: ClassArray) indexableSize: 5).
  	self pushRemappableOop:
  		(self instantiateClass: (self splObj: ClassString) indexableSize: entryNameSize)..
  	self pushRemappableOop: (self positive32BitIntegerFor: createDate).
  	self pushRemappableOop: (self positive32BitIntegerFor: modifiedDate).
  
  	modDateOop   := self popRemappableOop.
  	createDateOop := self popRemappableOop.
  	nameString    := self popRemappableOop.
  	results         := self popRemappableOop.
  
  	1 to: entryNameSize do: [ :i |
  		self storeByte: i-1 ofObject: nameString withValue: (entryName at: i) asciiValue.
  	].
  
  	self storePointer: 0 ofObject: results withValue: nameString.
  	self storePointer: 1 ofObject: results withValue: createDateOop.
  	self storePointer: 2 ofObject: results withValue: modDateOop.
  	dirFlag
  		ifTrue: [ self storePointer: 3 ofObject: results withValue: trueObj ]
  		ifFalse: [ self storePointer: 3 ofObject: results withValue: falseObj ].
  	self storePointer: 4 
  		ofObject: results
  		withValue: (self integerObjectOf: fileSize).
  	self storePointer: 5 
  		ofObject: results
  		withValue: (self integerObjectOf: posixPermissions).
  
  	^ results
  !

Item was changed:
  ----- Method: NewspeakInterpreterSimulator>>makeDirEntryName:size:createDate:modDate:isDir:fileSize:posixPermissions: (in category 'as yet unclassified') -----
  makeDirEntryName: entryName 
  	size: entryNameSize
  	createDate: createDate 
  	modDate: modifiedDate
  	isDir: dirFlag 
  	fileSize: posixPermissions 
  	posixPermissions: fileSize
  
  	| modDateOop createDateOop nameString results |
  	<var: 'entryName' type: 'char *'>
  
  	"allocate storage for results, remapping newly allocated
  	 oops in case GC happens during allocation"
  	self pushRemappableOop:
  		(self instantiateClass: (self splObj: ClassArray) indexableSize: 5).
  	self pushRemappableOop:
  		(self instantiateClass: (self splObj: ClassString) indexableSize: entryNameSize).
  	self pushRemappableOop: (self positive32BitIntegerFor: createDate).
  	self pushRemappableOop: (self positive32BitIntegerFor: modifiedDate).
  
  	modDateOop   := self popRemappableOop.
  	createDateOop := self popRemappableOop.
  	nameString    := self popRemappableOop.
  	results         := self popRemappableOop.
  
  	1 to: entryNameSize do: [ :i |
  		self storeByte: i-1 ofObject: nameString withValue: (entryName at: i) asciiValue.
  	].
  
  	self storePointer: 0 ofObject: results withValue: nameString.
  	self storePointer: 1 ofObject: results withValue: createDateOop.
  	self storePointer: 2 ofObject: results withValue: modDateOop.
  	dirFlag
  		ifTrue: [ self storePointer: 3 ofObject: results withValue: trueObj ]
  		ifFalse: [ self storePointer: 3 ofObject: results withValue: falseObj ].
  	self storePointer: 4 ofObject: results
  		withValue: (self integerObjectOf: fileSize).
  	self storePointer: 5 ofObject: results
  		withValue: (self integerObjectOf: posixPermissions).
  	^ results
  !

Item was changed:
  ----- Method: SocketPlugin>>primitiveResolverGetAddressInfoFamily (in category 'ipv6 primitives') -----
  primitiveResolverGetAddressInfoFamily
  
  	| family |
  	self primitive: 'primitiveResolverGetAddressInfoFamily'
  		parameters: #().
  	interpreterProxy failed
  		ifFalse:
  			[family := self sqResolverGetAddressInfoFamily.
  			 ^family asSmallIntegerObj]!

Item was changed:
  ----- Method: SocketPlugin>>primitiveResolverGetAddressInfoHost:service:flags:family:type:protocol: (in category 'ipv6 primitives') -----
  primitiveResolverGetAddressInfoHost: hostName service: servName flags: flags family: family type: type protocol: protocol
  
  	| hostSize servSize |
  	self primitive: 'primitiveResolverGetAddressInfo'
  		parameters: #(String String SmallInteger SmallInteger SmallInteger SmallInteger).
  	interpreterProxy failed
  		ifFalse:
  			[hostSize := interpreterProxy byteSizeOf: hostName cPtrAsOop.
  			 servSize := interpreterProxy byteSizeOf: servName cPtrAsOop.
  			 self
  			 	sqResolverGetAddressInfoHost: hostName Size: hostSize Service: servName Size: servSize
  					Flags: flags Family: family Type: type Protocol: protocol]!

Item was changed:
  ----- Method: SocketPlugin>>primitiveResolverGetAddressInfoNext (in category 'ipv6 primitives') -----
  primitiveResolverGetAddressInfoNext
  
  	| more |
  	self primitive: 'primitiveResolverGetAddressInfoNext'
  		parameters: #().
  	more := self sqResolverGetAddressInfoNext.
  	interpreterProxy failed ifTrue: [^nil].
  	^more asBooleanObj!

Item was changed:
  ----- Method: SocketPlugin>>primitiveResolverGetAddressInfoProtocol (in category 'ipv6 primitives') -----
  primitiveResolverGetAddressInfoProtocol
  
  	| protocol |
  	self primitive: 'primitiveResolverGetAddressInfoProtocol'
  		parameters: #().
  	interpreterProxy failed
  		ifFalse:
  			[protocol := self sqResolverGetAddressInfoProtocol.
  			 ^protocol asSmallIntegerObj]!

Item was changed:
  ----- Method: SocketPlugin>>primitiveResolverGetAddressInfoResult: (in category 'ipv6 primitives') -----
  primitiveResolverGetAddressInfoResult: socketAddress
  
  	| addrSize |
  	self primitive: 'primitiveResolverGetAddressInfoResult'
  		parameters: #(ByteArray).
  	interpreterProxy failed
  		ifFalse:
  			[addrSize := interpreterProxy byteSizeOf: socketAddress cPtrAsOop.
  			 self sqResolverGetAddressInfoResult: socketAddress Size: addrSize]!

Item was changed:
  ----- Method: SocketPlugin>>primitiveResolverGetAddressInfoSize (in category 'ipv6 primitives') -----
  primitiveResolverGetAddressInfoSize
  
  	| size |
  	self primitive: 'primitiveResolverGetAddressInfoSize'
  		parameters: #().
  	interpreterProxy failed
  		ifFalse:
  			[size := self sqResolverGetAddressInfoSize.
  			 ^size asSmallIntegerObj]!

Item was changed:
  ----- Method: SocketPlugin>>primitiveResolverGetAddressInfoType (in category 'ipv6 primitives') -----
  primitiveResolverGetAddressInfoType
  
  	| type |
  	self primitive: 'primitiveResolverGetAddressInfoType'
  		parameters: #().
  	interpreterProxy failed
  		ifFalse:
  			[type := self sqResolverGetAddressInfoType.
  			 ^type asSmallIntegerObj]!

Item was changed:
  ----- Method: SocketPlugin>>primitiveResolverGetNameInfo:flags: (in category 'ipv6 primitives') -----
  primitiveResolverGetNameInfo: socketAddress flags: flags
  
  	| addrSize addrBase |
  	<var: #addrBase type: 'char *'>
  	self primitive: 'primitiveResolverGetNameInfo'
  		parameters: #(Oop SmallInteger).
  	interpreterProxy failed
  		ifFalse:
  			[addrSize := interpreterProxy byteSizeOf: socketAddress.
  			 addrBase := self cCoerce: (interpreterProxy firstIndexableField: socketAddress) to: 'char *'.
  			 self sqResolverGetNameInfo: addrBase Size: addrSize Flags: flags]!

Item was changed:
  ----- Method: SocketPlugin>>primitiveResolverGetNameInfoHostResult: (in category 'ipv6 primitives') -----
  primitiveResolverGetNameInfoHostResult: socketName
  
  	| addrSize |
  	self primitive: 'primitiveResolverGetNameInfoHostResult'
  		parameters: #(String).
  	interpreterProxy failed
  		ifFalse:
  			[addrSize := interpreterProxy byteSizeOf: socketName cPtrAsOop.
  			 self sqResolverGetNameInfoHostResult: socketName Size: addrSize]!

Item was changed:
  ----- Method: SocketPlugin>>primitiveResolverGetNameInfoHostSize (in category 'ipv6 primitives') -----
  primitiveResolverGetNameInfoHostSize
  
  	| size |
  	self primitive: 'primitiveResolverGetNameInfoHostSize'
  		parameters: #().
  	interpreterProxy failed
  		ifFalse:
  			[size := self sqResolverGetNameInfoHostSize.
  			 ^size asSmallIntegerObj]!

Item was changed:
  ----- Method: SocketPlugin>>primitiveResolverGetNameInfoServiceResult: (in category 'ipv6 primitives') -----
  primitiveResolverGetNameInfoServiceResult: socketName
  
  	| addrSize |
  	self primitive: 'primitiveResolverGetNameInfoServiceResult'
  		parameters: #(String).
  	interpreterProxy failed
  		ifFalse:
  			[addrSize := interpreterProxy byteSizeOf: socketName cPtrAsOop.
  			 self sqResolverGetNameInfoServiceResult: socketName Size: addrSize]!

Item was changed:
  ----- Method: SocketPlugin>>primitiveResolverGetNameInfoServiceSize (in category 'ipv6 primitives') -----
  primitiveResolverGetNameInfoServiceSize
  
  	| size |
  	self primitive: 'primitiveResolverGetNameInfoServiceSize'
  		parameters: #().
  	interpreterProxy failed
  		ifFalse:
  			[size := self sqResolverGetNameInfoServiceSize.
  			 ^size asSmallIntegerObj]!

Item was changed:
  ----- Method: SocketPlugin>>primitiveResolverHostNameResult: (in category 'ipv6 primitives') -----
  primitiveResolverHostNameResult: nameString
  
  	| nameSize |
  	self primitive: 'primitiveResolverHostNameResult'
  		parameters: #(String).
  	interpreterProxy failed
  		ifFalse:
  			[nameSize := interpreterProxy byteSizeOf: nameString cPtrAsOop.
  			 self sqResolverHostNameResult: nameString Size: nameSize]!

Item was changed:
  ----- Method: SocketPlugin>>primitiveResolverHostNameSize (in category 'ipv6 primitives') -----
  primitiveResolverHostNameSize
  
  	| size |
  	self primitive: 'primitiveResolverHostNameSize'
  		parameters: #().
  	interpreterProxy failed
  		ifFalse:
  			[size := self sqResolverHostNameSize.
  			 interpreterProxy failed ifFalse: [^size asSmallIntegerObj]]!

Item was changed:
  ----- Method: SocketPlugin>>primitiveSocket:bindTo: (in category 'ipv6 primitives') -----
  primitiveSocket: socket bindTo: socketAddress
  
  	| addrSize addrBase s  |
  	<var: #addrBase type: 'char *'>
  	<var: #s type: 'SocketPtr'>
  	self primitive: 'primitiveSocketBindTo' parameters: #(#Oop #Oop).
  	s := self socketValueOf: socket.
  	addrSize := interpreterProxy byteSizeOf: socketAddress.
  	addrBase := self cCoerce: (interpreterProxy firstIndexableField: socketAddress) to: 'char *'.
  	interpreterProxy failed ifFalse: [self sqSocket: s BindToAddress: addrBase Size: addrSize]!

Item was changed:
  ----- Method: SocketPlugin>>primitiveSocket:connectTo: (in category 'ipv6 primitives') -----
  primitiveSocket: socket connectTo: socketAddress
  
  	| addrSize addrBase s  |
  	<var: #addrBase type: 'char *'>
  	<var: #s type: 'SocketPtr'>
  	self primitive: 'primitiveSocketConnectTo' parameters: #(#Oop #Oop).
  	s := self socketValueOf: socket.
  	addrSize := interpreterProxy byteSizeOf: socketAddress.
  	addrBase := self cCoerce: (interpreterProxy firstIndexableField: socketAddress) to: 'char *'.
  	interpreterProxy failed ifFalse: [self sqSocket: s ConnectToAddress: addrBase Size: addrSize]!

Item was changed:
  ----- Method: SocketPlugin>>primitiveSocket:listenWithBacklog: (in category 'ipv6 primitives') -----
  primitiveSocket: socket listenWithBacklog: backlogSize
  
  	| s  |
  	<var: #s type: 'SocketPtr'>
  	self primitive: 'primitiveSocketListenWithBacklog' parameters: #(#Oop #SmallInteger).
  	s := self socketValueOf: socket.
  	interpreterProxy failed ifFalse: [self sqSocket: s ListenBacklog: backlogSize]!

Item was changed:
  ----- Method: SocketPlugin>>primitiveSocket:localAddressResult: (in category 'ipv6 primitives') -----
  primitiveSocket: socket localAddressResult: socketAddress
  
  	| addrSize addrBase s  |
  	<var: #addrBase type: 'char *'>
  	<var: #s type: 'SocketPtr'>
  	self primitive: 'primitiveSocketLocalAddressResult' parameters: #(#Oop #Oop).
  	s := self socketValueOf: socket.
  	addrSize := interpreterProxy byteSizeOf: socketAddress.
  	addrBase := self cCoerce: (interpreterProxy firstIndexableField: socketAddress) to: 'char *'.
  	interpreterProxy failed ifFalse: [self sqSocket: s LocalAddressResult: addrBase Size: addrSize]!

Item was changed:
  ----- Method: SocketPlugin>>primitiveSocket:remoteAddressResult: (in category 'ipv6 primitives') -----
  primitiveSocket: socket remoteAddressResult: socketAddress
  
  	| addrSize addrBase s  |
  	<var: #addrBase type: 'char *'>
  	<var: #s type: 'SocketPtr'>
  	self primitive: 'primitiveSocketRemoteAddressResult' parameters: #(#Oop #Oop).
  	s := self socketValueOf: socket.
  	addrSize := interpreterProxy byteSizeOf: socketAddress.
  	addrBase := self cCoerce: (interpreterProxy firstIndexableField: socketAddress) to: 'char *'.
  	interpreterProxy failed ifFalse: [self sqSocket: s RemoteAddressResult: addrBase Size: addrSize]!

Item was changed:
  ----- Method: SocketPlugin>>primitiveSocketAddressGetPort (in category 'ipv6 primitives') -----
  primitiveSocketAddressGetPort
  
  	| addr addrSize addrBase port |
  	<var: #addrBase type: 'char *'>
  	addr := self primitive: 'primitiveSocketAddressGetPort' parameters: #() receiver: #Oop.
  	addrSize := interpreterProxy byteSizeOf: addr.
  	addrBase := self cCoerce: (interpreterProxy firstIndexableField: addr) to: 'char *'.
  	interpreterProxy failed
  		ifFalse:
  			[port := self sqSocketAddress: addrBase SizeGetPort: addrSize.
  			 interpreterProxy failed ifFalse: [^port asSmallIntegerObj]]!

Item was changed:
  ----- Method: SocketPlugin>>primitiveSocketAddressSetPort: (in category 'ipv6 primitives') -----
  primitiveSocketAddressSetPort: portNumber
  
  	| addr addrSize addrBase |
  	<var: #addrBase type: 'char *'>
  	addr := self primitive: 'primitiveSocketAddressSetPort' parameters: #(SmallInteger) receiver: #Oop.
  	addrSize := interpreterProxy byteSizeOf: addr.
  	addrBase := self cCoerce: (interpreterProxy firstIndexableField: addr) to: 'char *'.
  	interpreterProxy failed ifFalse: [self sqSocketAddress: addrBase Size: addrSize SetPort: portNumber]!

Item was changed:
  ----- Method: SocketPlugin>>primitiveSocketLocalAddressSize: (in category 'ipv6 primitives') -----
  primitiveSocketLocalAddressSize: socket
  
  	| s size |
  	<var: #s type: 'SocketPtr'>
  	self primitive: 'primitiveSocketLocalAddressSize' parameters: #(#Oop).
  	s := self socketValueOf: socket.
  	interpreterProxy failed ifTrue: [^nil].
  	size := self sqSocketLocalAddressSize: s.
  	interpreterProxy failed ifTrue: [^nil].
  	^size asSmallIntegerObj!

Item was changed:
  ----- Method: SocketPlugin>>primitiveSocketRemoteAddressSize: (in category 'ipv6 primitives') -----
  primitiveSocketRemoteAddressSize: socket
  
  	| s size |
  	<var: #s type: 'SocketPtr'>
  	self primitive: 'primitiveSocketRemoteAddressSize' parameters: #(#Oop).
  	s := self socketValueOf: socket.
  	interpreterProxy failed ifTrue: [^nil].
  	size := self sqSocketRemoteAddressSize: s.
  	interpreterProxy failed ifTrue: [^nil].
  	^size asSmallIntegerObj!

Item was changed:
  ----- Method: StackInterpreterSimulator>>makeDirEntryName:size:createDate:modDate:isDir:fileSize:posixPermissions: (in category 'as yet unclassified') -----
  makeDirEntryName: entryName 
  	size: entryNameSize
  	createDate: createDate 
  	modDate: modifiedDate
  	isDir: dirFlag 
  	fileSize: posixPermissions
  	posixPermissions: fileSize
  
  	| modDateOop createDateOop nameString results |
  	<var: 'entryName' type: 'char *'>
  
  	results			:= objectMemory instantiateClass: (objectMemory splObj: ClassArray) indexableSize: 5.
  	nameString		:= objectMemory instantiateClass: (objectMemory splObj: ClassString) indexableSize: entryNameSize.
  	createDateOop	:= self positive32BitIntegerFor: createDate.
  	modDateOop	:= self positive32BitIntegerFor: modifiedDate.
  
  	1 to: entryNameSize do:
  		[ :i |
  		objectMemory storeByte: i-1 ofObject: nameString withValue: (entryName at: i) asciiValue].
  
  	objectMemory storePointerUnchecked: 0 ofObject: results withValue: nameString.
  	objectMemory storePointerUnchecked: 1 ofObject: results withValue: createDateOop.
  	objectMemory storePointerUnchecked: 2 ofObject: results withValue: modDateOop.
  	dirFlag
  		ifTrue: [ objectMemory storePointerUnchecked: 3 ofObject: results withValue: objectMemory trueObject ]
  		ifFalse: [ objectMemory storePointerUnchecked: 3 ofObject: results withValue: objectMemory falseObject ].
  	objectMemory storePointerUnchecked: 4 ofObject: results withValue: (objectMemory integerObjectOf: fileSize).
  	objectMemory storePointerUnchecked: 5 ofObject: results withValue: (objectMemory integerObjectOf: posixPermissions).
  	^ results!



More information about the Vm-dev mailing list