VM Maker: VMMaker-oscog-IgorStasenko.162.mcz

Previous Topic Next Topic
 
classic Classic list List threaded Threaded
1 message Options
Reply | Threaded
Open this post in threaded view
|

VM Maker: VMMaker-oscog-IgorStasenko.162.mcz

commits-2
 
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!