VM Maker: VMMaker.oscog-eem.2524.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-eem.2524.mcz

commits-2
 
Eliot Miranda uploaded a new version of VMMaker to project VM Maker:
http://source.squeak.org/VMMaker/VMMaker.oscog-eem.2524.mcz

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

Name: VMMaker.oscog-eem.2524
Author: eem
Time: 6 March 2019, 7:16:15.760905 am
UUID: 0ebcb871-1196-4c0f-bbcb-45e8280e3737
Ancestors: VMMaker.oscog-eem.2523

Plugins:

ThreadedFFIPlugin: Make sure the ARM identifyingPredefinedMacros do not confuse 32 & 64 bits (& change the 32-bit CogARMCompiler to match).

FilePluginSimulator:
Avoid using MultiByteFileStream, cutting back to the minimal StandardFileStream.  Obey writeFlag properly on opening a file (some platforms, e.g. Pharo6 use primitiveFileOpen/fileOpenName:size:write:secure: to check for existence (!!).
Have the simulator halt before deleting a file (to avoid the simulator doing damage).

=============== Diff against VMMaker.oscog-eem.2523 ===============

Item was changed:
  ----- Method: CogARMCompiler class>>identifyingPredefinedMacros (in category 'translation') -----
  identifyingPredefinedMacros
+ ^#('__ARM_ARCH_5__' '__ARM_ARCH_6__' '__ARM_ARCH_7__' '__arm__' '__arm32__' 'ARM32' '_M_ARM')!
- ^#('__ARM_ARCH__' '__arm__' '__arm32__' 'ARM32' '_M_ARM')!

Item was changed:
  ----- Method: FilePluginSimulator>>fileOpenName:size:write:secure: (in category 'file primitives') -----
  fileOpenName: nameIndex size: nameSize write: writeFlag secure: secureFlag
  "Open the named file, possibly checking security. Answer the file oop."
  | path f index |
  openFiles size >= maxOpenFiles ifTrue:
  [^interpreterProxy primitiveFailFor: PrimErrLimitExceeded].
  path := (interpreterProxy asByteArray: nameIndex size: nameSize) utf8Decoded.
+ (writeFlag
+ or: [StandardFileStream isAFileNamed: path]) ifFalse:
+ [^interpreterProxy primitiveFail].
+ f := StandardFileStream new open: path forWrite: writeFlag.
- f := writeFlag
- ifTrue: [FileStream fileNamed: path]
- ifFalse:
- [(StandardFileStream isAFileNamed: path) ifTrue:
- [FileStream readOnlyFileNamed: path]].
  f ifNil: [^interpreterProxy primitiveFail].
  f binary.
+ self assert: f isReadOnly = writeFlag not.
  index := (3 to: openFiles size + 1) detect: [:n| (openFiles includesKey: n) not].
  openFiles at: index put: f.
  ^interpreterProxy integerObjectOf: index!

Item was changed:
  ----- Method: FilePluginSimulator>>fileOpenNewName:size:secure: (in category 'file primitives') -----
  fileOpenNewName: nameIndex size: nameSize secure: secureFlag
  "Open the new named file, possibly checking security. Answer the file oop."
  | path f index |
  openFiles size >= maxOpenFiles ifTrue:
  [^interpreterProxy primitiveFailFor: PrimErrLimitExceeded].
  path := (interpreterProxy interpreter asByteArray: nameIndex size: nameSize) utf8Decoded.
  "the #defaultAction for FileExistsException creates a dialog,
  so it is caught and resignaled as a generic Error"
+ [f := StandardFileStream newFileNamed: path]
- [f := FileStream newFileNamed: nameIndex]
  on: FileExistsException
  do: [:error | ^ interpreterProxy primitiveFailFor: PrimErrInappropriate].
  f ifNil: [^interpreterProxy primitiveFail].
+ self deny: f isReadOnly.
  f binary.
  index := (3 to: openFiles size + 1) detect: [:n| (openFiles includesKey: n) not].
  openFiles at: index put: f.
  ^interpreterProxy integerObjectOf: index!

Item was added:
+ ----- Method: FilePluginSimulator>>primitiveFileGetPosition (in category 'file primitives') -----
+ primitiveFileGetPosition
+ super primitiveFileGetPosition.
+ interpreterProxy failed ifTrue:
+ [self halt]!

Item was changed:
  ----- Method: FilePluginSimulator>>sqFileDeleteName:Size: (in category 'simulation') -----
  sqFileDeleteName: nameIndex Size: nameSize
  | path |
-
  path := (interpreterProxy asString: nameIndex size: nameSize) asByteArray utf8Decoded.
  (StandardFileStream isAFileNamed: path) ifFalse:
  [^interpreterProxy primitiveFail].
+ self halt: 'Deleting ', (path contractTo: 64).
  [FileDirectory deleteFilePath: path]
  on: Error
  do: [:ex| interpreterProxy primitiveFail]!

Item was changed:
  ----- Method: ThreadedARM32FFIPlugin class>>identifyingPredefinedMacros (in category 'translation') -----
  identifyingPredefinedMacros
+ ^#('__ARM_ARCH_5__' '__ARM_ARCH_6__' '__ARM_ARCH_7__' '__arm32__' 'ARM32')!
- ^#('__ARM_ARCH__' '__arm__' '__arm32__' 'ARM32')!

Item was removed:
- ----- Method: ThreadedX64FFIPlugin class>>identifyingPredefinedMacros (in category 'translation') -----
- identifyingPredefinedMacros
- "Answer the predefined macros that identify the platforms a subclass handles, if any.
- If the subclass isn't yet ready for production (a work in progress) simply answer nil.
- Override to filter-out this abstract class."
- ^nil!