Eliot Miranda uploaded a new version of FileAttributesPlugin to project VM Maker: http://source.squeak.org/VMMaker/FileAttributesPlugin.oscog-eem.55.mcz ==================== Summary ==================== Name: FileAttributesPlugin.oscog-eem.55 Author: eem Time: 1 April 2020, 4:44:32.832779 pm UUID: 21ffb1fc-12ba-4363-ab53-4f2168cb7450 Ancestors: FileAttributesPlugin.oscog-eem.54 Make primitiveFileMasks compile under MSVC and streamline the implementation by using a word array (new InterpreterProxy protocol). =============== Diff against FileAttributesPlugin.oscog-eem.54 =============== Item was changed: ----- Method: FileAttributesPlugin>>primitiveFileMasks (in category 'file primitives') ----- primitiveFileMasks "Answer an array of well known file masks" + | masksObj masks | - | masks | <export: true> + masksObj := interpreterProxy instantiateClass: interpreterProxy classWordArray indexableSize: 8. + masksObj ifNil: [^interpreterProxy primitiveFailFor: PrimErrNoMemory]. + masks := self cCoerceSimple: (interpreterProxy firstIndexableField: masksObj) to: #'int *'. + masks at: 0 put: (self cCode: [#S_IFMT] inSmalltalk: [16rF000]). + + self cppIf: #S_IFSOCK defined ifTrue: + [masks at: 1 put: (self cCode: [#S_IFSOCK] inSmalltalk: [16rC000])]. + + self cppIf: #S_IFLNK defined ifTrue: + [masks at: 2 put: (self cCode: [#S_IFLNK] inSmalltalk: [16rA000])]. + + masks at: 3 put: (self cCode: [#S_IFREG] inSmalltalk: [16r8000]). + + self cppIf: #S_IFBLK defined ifTrue: + [masks at: 4 put: (self cCode: [#S_IFBLK] inSmalltalk: [16r6000])]. + + masks at: 5 put: (self cCode: [#S_IFDIR] inSmalltalk: [16r4000]). + + masks at: 6 put: (self cCode: [#S_IFCHR] inSmalltalk: [16r2000]). + + self cppIf: #S_IFIFO defined ifTrue: + [masks at: 7 put: (self cCode: [#S_IFIFO] inSmalltalk: [16r1000])]. + + interpreterProxy methodReturnValue: masksObj! - masks := interpreterProxy instantiateClass: (interpreterProxy classArray) indexableSize: 8. - masks ifNil: [^interpreterProxy primitiveFailFor: PrimErrNoMemory]. - interpreterProxy - storePointer: 0 - ofObject: masks - withValue: (interpreterProxy positive32BitIntegerFor: (self cCode: [#S_IFMT] inSmalltalk: [16rF000])). - self cppIf: #_WIN32 defined not - ifTrue: [ - interpreterProxy - storePointer: 1 - ofObject: masks - withValue: (interpreterProxy positive32BitIntegerFor: (self cCode: [#S_IFSOCK] inSmalltalk: [16rC000])). - interpreterProxy - storePointer: 2 - ofObject: masks - withValue: (interpreterProxy positive32BitIntegerFor: (self cCode: [#S_IFLNK] inSmalltalk: [16rA000]))]. - interpreterProxy - storePointer: 3 - ofObject: masks - withValue: (interpreterProxy positive32BitIntegerFor: (self cCode: [#S_IFREG] inSmalltalk: [16r8000])). - interpreterProxy - storePointer: 4 - ofObject: masks - withValue: (interpreterProxy positive32BitIntegerFor: (self cCode: [#S_IFBLK] inSmalltalk: [16r6000])). - interpreterProxy - storePointer: 5 - ofObject: masks - withValue: (interpreterProxy positive32BitIntegerFor: (self cCode: [#S_IFDIR] inSmalltalk: [16r4000])). - interpreterProxy - storePointer: 6 - ofObject: masks - withValue: (interpreterProxy positive32BitIntegerFor: (self cCode: [#S_IFCHR] inSmalltalk: [16r2000])). - interpreterProxy - storePointer: 7 - ofObject: masks - withValue: (interpreterProxy positive32BitIntegerFor: (self cCode: [#S_IFIFO] inSmalltalk: [16r1000])). - interpreterProxy pop: 1 thenPush: masks! |
Free forum by Nabble | Edit this page |