[Vm-dev] VM Maker: VMMaker-oscog-EstebanLorenzano.161.mcz
commits at source.squeak.org
commits at source.squeak.org
Fri Jun 22 14:59:50 UTC 2012
Esteban Lorenzano uploaded a new version of VMMaker to project VM Maker:
http://source.squeak.org/VMMaker/VMMaker-oscog-EstebanLorenzano.161.mcz
==================== Summary ====================
Name: VMMaker-oscog-EstebanLorenzano.161
Author: EstebanLorenzano
Time: 22 June 2012, 4:57:52.269 pm
UUID: 8e0c22c3-b48d-4d8d-a7f9-8a75dc246f28
Ancestors: VMMaker-oscog-EstebanLorenzano.160
FilePlugin now answers posix permissions
=============== Diff against VMMaker-oscog-EstebanLorenzano.160 ===============
Item was removed:
- ----- Method: CogVMSimulator>>makeDirEntryName:size:createDate:modDate:isDir:fileSize: (in category 'file primitives') -----
- makeDirEntryName: entryName size: entryNameSize
- createDate: createDate modDate: modifiedDate
- isDir: dirFlag fileSize: 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).
- ^ results!
Item was added:
+ ----- 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: CogVMSimulator>>primitiveDirectoryEntry (in category 'file primitives') -----
primitiveDirectoryEntry
| name pathName array result |
name := self stringOf: self stackTop.
pathName := self stringOf: (self stackValue: 1).
self successful ifFalse:
[^self primitiveFail].
array := FileDirectory default primLookupEntryIn: pathName name: name.
array == nil ifTrue:
[self pop: 3 thenPush: objectMemory nilObject.
^array].
array == #badDirectoryPath ifTrue:
[self halt.
^self primitiveFail].
+ result := self makeDirEntryName: (array at: 1)
+ size: (array at: 1) size
+ createDate: (array at: 2)
+ modDate: (array at: 3)
+ isDir: (array at: 4)
+ fileSize: (array at: 5)
+ posixPermissions: (array at: 6).
+
- result := self makeDirEntryName: (array at: 1) size: (array at: 1) size
- createDate: (array at: 2) modDate: (array at: 3)
- isDir: (array at: 4) fileSize: (array at: 5).
self pop: 3.
self push: result!
Item was changed:
----- Method: CogVMSimulator>>primitiveDirectoryLookup (in category 'file primitives') -----
primitiveDirectoryLookup
| index pathName array result |
index := self stackIntegerValue: 0.
pathName := (self stringOf: (self stackValue: 1)).
self successful ifFalse:
[^self primitiveFail].
array := FileDirectory default primLookupEntryIn: pathName index: index.
array == nil ifTrue:
[self pop: 3 thenPush: objectMemory nilObject.
^array].
array == #badDirectoryPath ifTrue:
["self halt."
^self primitiveFail].
+ result := self makeDirEntryName: (array at: 1)
+ size: (array at: 1) size
+ createDate: (array at: 2)
+ modDate: (array at: 3)
+ isDir: (array at: 4)
+ fileSize: (array at: 5)
+ posixPermissions: (array at: 6).
- result := self makeDirEntryName: (array at: 1) size: (array at: 1) size
- createDate: (array at: 2) modDate: (array at: 3)
- isDir: (array at: 4) fileSize: (array at: 5).
self pop: 3 thenPush: result!
Item was removed:
- ----- Method: FilePlugin>>makeDirEntryName:size:createDate:modDate:isDir:fileSize: (in category 'directory primitives') -----
- makeDirEntryName: entryName size: entryNameSize
- createDate: createDate modDate: modifiedDate
- isDir: dirFlag fileSize: fileSize
-
- | modDateOop createDateOop nameString results stringPtr 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: 5).
- interpreterProxy pushRemappableOop:
- (interpreterProxy instantiateClass: (interpreterProxy classString) indexableSize: entryNameSize)..
- interpreterProxy pushRemappableOop:
- (interpreterProxy positive32BitIntegerFor: createDate).
- interpreterProxy pushRemappableOop:
- (interpreterProxy positive32BitIntegerFor: modifiedDate).
- interpreterProxy pushRemappableOop:
- (interpreterProxy positive64BitIntegerFor: fileSize).
-
- 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.
- ^ results!
Item was added:
+ ----- 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: FilePlugin>>primitiveDirectoryEntry (in category 'directory primitives') -----
primitiveDirectoryEntry
"Two arguments - directory path, and simple file name;
returns an array (see primitiveDirectoryLookup) describing the file or directory,
or nil if it does not exist.
Primitive fails if the outer path does not identify a readable directory.
(This is a lookup-by-name variant of primitiveDirectoryLookup.)"
+ | requestedName pathName pathNameIndex pathNameSize status entryName entryNameSize createDate modifiedDate dirFlag posixPermissions fileSize okToList reqNameIndex reqNameSize |
- | requestedName pathName pathNameIndex pathNameSize status entryName entryNameSize createDate modifiedDate dirFlag fileSize okToList reqNameIndex reqNameSize |
<var: 'entryName' declareC: 'char entryName[256]'>
<var: 'pathNameIndex' type: 'char *'>
<var: 'reqNameIndex' type: 'char *'>
<var: 'fileSize' type: 'squeakFileOffsetType'>
<export: true>
requestedName := interpreterProxy stackValue: 0.
pathName := interpreterProxy stackValue: 1.
(interpreterProxy isBytes: pathName)
ifFalse: [^interpreterProxy primitiveFail].
"Outbound string parameters"
pathNameIndex := interpreterProxy firstIndexableField: pathName.
pathNameSize := interpreterProxy byteSizeOf: pathName.
reqNameIndex := interpreterProxy firstIndexableField: requestedName.
reqNameSize := interpreterProxy byteSizeOf: requestedName.
"If the security plugin can be loaded, use it to check for permission.
If not, assume it's ok"
sCLPfn ~= 0
ifTrue: [okToList := self cCode: '((sqInt (*)(char *, sqInt))sCLPfn)(pathNameIndex, pathNameSize)']
ifFalse: [okToList := true].
okToList
+ ifTrue: [status := self cCode: 'dir_EntryLookup(
+ pathNameIndex,
+ pathNameSize,
+ reqNameIndex,
+ reqNameSize,
+ entryName,
+ &entryNameSize,
+ &createDate,
+ &modifiedDate,
+ &dirFlag,
+ &fileSize,
+ &posixPermissions)']
- ifTrue: [status := self cCode: 'dir_EntryLookup(pathNameIndex, pathNameSize, reqNameIndex, reqNameSize,
- entryName, &entryNameSize, &createDate,
- &modifiedDate, &dirFlag, &fileSize)']
ifFalse: [status := DirNoMoreEntries].
interpreterProxy failed
ifTrue: [^nil].
status = DirNoMoreEntries
ifTrue: ["no entry; return nil"
interpreterProxy pop: 3 "pop pathName, index, rcvr"
thenPush: interpreterProxy nilObject.
^nil].
status = DirBadPath
ifTrue: [^interpreterProxy primitiveFail]."bad path"
interpreterProxy pop: 3 "pop pathName, fName, rcvr"
thenPush: (self
makeDirEntryName: entryName
size: entryNameSize
createDate: createDate
modDate: modifiedDate
isDir: dirFlag
+ fileSize: fileSize
+ posixPermissions: posixPermissions)!
- fileSize: fileSize)!
Item was changed:
----- Method: FilePlugin>>primitiveDirectoryLookup (in category 'directory primitives') -----
primitiveDirectoryLookup
+ | index pathName pathNameIndex pathNameSize status entryName entryNameSize createDate modifiedDate dirFlag posixPermissions fileSize okToList |
- | index pathName pathNameIndex pathNameSize status entryName entryNameSize createDate modifiedDate dirFlag fileSize okToList |
<var: 'entryName' declareC: 'char entryName[256]'>
<var: 'pathNameIndex' type: 'char *'>
<var: 'fileSize' type: 'squeakFileOffsetType'>
<export: true>
index := interpreterProxy stackIntegerValue: 0.
pathName := interpreterProxy stackValue: 1.
(interpreterProxy isBytes: pathName)
ifFalse: [^interpreterProxy primitiveFail].
pathNameIndex := interpreterProxy firstIndexableField: pathName.
pathNameSize := interpreterProxy byteSizeOf: pathName.
"If the security plugin can be loaded, use it to check for permission.
If not, assume it's ok"
sCLPfn ~= 0
ifTrue: [okToList := self cCode: '((sqInt (*)(char *, sqInt))sCLPfn)(pathNameIndex, pathNameSize)']
ifFalse: [okToList := true].
okToList
+ ifTrue: [status := self cCode: 'dir_Lookup(
+ pathNameIndex,
+ pathNameSize,
+ index,
+ entryName,
+ &entryNameSize,
+ &createDate,
+ &modifiedDate,
+ &dirFlag,
+ &fileSize,
+ &posixPermissions)']
- ifTrue: [status := self cCode: 'dir_Lookup(pathNameIndex, pathNameSize, index,
- entryName, &entryNameSize, &createDate,
- &modifiedDate, &dirFlag, &fileSize)']
ifFalse: [status := DirNoMoreEntries].
interpreterProxy failed
ifTrue: [^nil].
status = DirNoMoreEntries
ifTrue: ["no more entries; return nil"
interpreterProxy pop: 3 "pop pathName, index, rcvr"
thenPush: interpreterProxy nilObject.
^nil].
status = DirBadPath
ifTrue: [^interpreterProxy primitiveFail]."bad path"
interpreterProxy pop: 3 "pop pathName, index, rcvr"
thenPush: (self
makeDirEntryName: entryName
size: entryNameSize
createDate: createDate
modDate: modifiedDate
isDir: dirFlag
+ fileSize: fileSize
+ posixPermissions: posixPermissions)!
- fileSize: fileSize)!
Item was removed:
- ----- Method: FilePluginSimulator>>makeDirEntryName:size:createDate:modDate:isDir:fileSize: (in category 'simulation') -----
- makeDirEntryName: entryName size: entryNameSize
- createDate: createDate modDate: modifiedDate
- isDir: dirFlag fileSize: fileSize
-
- ^interpreterProxy
- makeDirEntryName: entryName size: entryNameSize
- createDate: createDate modDate: modifiedDate
- isDir: dirFlag fileSize: fileSize
- !
Item was added:
+ ----- 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 removed:
- ----- Method: InterpreterSimulator>>makeDirEntryName:size:createDate:modDate:isDir:fileSize: (in category 'file primitives') -----
- makeDirEntryName: entryName size: entryNameSize
- createDate: createDate modDate: modifiedDate
- isDir: dirFlag fileSize: 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).
- ^ results
- !
Item was added:
+ ----- 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: InterpreterSimulator>>primitiveDirectoryEntry (in category 'file primitives') -----
primitiveDirectoryEntry
| name pathName array result |
name := self stringOf: self stackTop.
pathName := self stringOf: (self stackValue: 1).
successFlag ifFalse:
[^self primitiveFail].
array := FileDirectory default primLookupEntryIn: pathName name: name.
array == nil ifTrue:
[self pop: 3 thenPush: nilObj.
^array].
array == #badDirectoryPath ifTrue:
[self halt.
^self primitiveFail].
+ result := self makeDirEntryName: (array at: 1)
+ size: (array at: 1) size
+ createDate: (array at: 2)
+ modDate: (array at: 3)
+ isDir: (array at: 4)
+ fileSize: (array at: 5)
+ posixPermissions: (array at: 6).
- result := self makeDirEntryName: (array at: 1) size: (array at: 1) size
- createDate: (array at: 2) modDate: (array at: 3)
- isDir: (array at: 4) fileSize: (array at: 5).
self pop: 3.
self push: result!
Item was changed:
----- Method: InterpreterSimulator>>primitiveDirectoryLookup (in category 'file primitives') -----
primitiveDirectoryLookup
| index pathName array result |
index := self stackIntegerValue: 0.
pathName := (self stringOf: (self stackValue: 1)).
successFlag ifFalse: [
^self primitiveFail.
].
array := FileDirectory default primLookupEntryIn: pathName index: index.
array == nil ifTrue: [
self pop: 3.
self push: nilObj.
^array.
].
array == #badDirectoryPath ifTrue: [self halt.
^self primitiveFail.
].
+ result := self makeDirEntryName: (array at: 1)
+ size: (array at: 1) size
+ createDate: (array at: 2)
+ modDate: (array at: 3)
+ isDir: (array at: 4)
+ fileSize: (array at: 5)
+ posixPermissions: (array at: 6).
- result := self makeDirEntryName: (array at: 1) size: (array at: 1) size
- createDate: (array at: 2) modDate: (array at: 3)
- isDir: (array at: 4) fileSize: (array at: 5).
self pop: 3.
self push: result.
!
Item was removed:
- ----- Method: NewspeakInterpreterSimulator>>makeDirEntryName:size:createDate:modDate:isDir:fileSize: (in category 'file primitives') -----
- makeDirEntryName: entryName size: entryNameSize
- createDate: createDate modDate: modifiedDate
- isDir: dirFlag fileSize: 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).
- ^ results
- !
Item was added:
+ ----- 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: NewspeakInterpreterSimulator>>primitiveDirectoryEntry (in category 'file primitives') -----
primitiveDirectoryEntry
| name pathName array result |
name := self stringOf: self stackTop.
pathName := self stringOf: (self stackValue: 1).
self successful ifFalse:
[^self primitiveFail].
array := FileDirectory default primLookupEntryIn: pathName name: name.
array == nil ifTrue:
[self pop: 3 thenPush: nilObj.
^array].
array == #badDirectoryPath ifTrue:
[self halt.
^self primitiveFail].
+ result := self makeDirEntryName: (array at: 1)
+ size: (array at: 1) size
+ createDate: (array at: 2)
+ modDate: (array at: 3)
+ isDir: (array at: 4)
+ fileSize: (array at: 5)
+ posixPermissions: (array at: 6).
- result := self makeDirEntryName: (array at: 1) size: (array at: 1) size
- createDate: (array at: 2) modDate: (array at: 3)
- isDir: (array at: 4) fileSize: (array at: 5).
self pop: 3.
self push: result!
Item was changed:
----- Method: NewspeakInterpreterSimulator>>primitiveDirectoryLookup (in category 'file primitives') -----
primitiveDirectoryLookup
| index pathName array result |
index := self stackIntegerValue: 0.
pathName := (self stringOf: (self stackValue: 1)).
self successful ifFalse: [
^self primitiveFail.
].
array := FileDirectory default primLookupEntryIn: pathName index: index.
array == nil ifTrue: [
self pop: 3.
self push: nilObj.
^array.
].
array == #badDirectoryPath ifTrue: [self halt.
^self primitiveFail.
].
+ result := self makeDirEntryName: (array at: 1)
+ size: (array at: 1) size
+ createDate: (array at: 2)
+ modDate: (array at: 3)
+ isDir: (array at: 4)
+ fileSize: (array at: 5)
+ posixPermissions: (array at: 6).
- result := self makeDirEntryName: (array at: 1) size: (array at: 1) size
- createDate: (array at: 2) modDate: (array at: 3)
- isDir: (array at: 4) fileSize: (array at: 5).
self pop: 3.
self push: result.
!
Item was removed:
- ----- Method: StackInterpreterSimulator>>makeDirEntryName:size:createDate:modDate:isDir:fileSize: (in category 'file primitives') -----
- makeDirEntryName: entryName size: entryNameSize
- createDate: createDate modDate: modifiedDate
- isDir: dirFlag fileSize: 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).
- ^ results!
Item was added:
+ ----- 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!
Item was changed:
----- Method: StackInterpreterSimulator>>primitiveDirectoryEntry (in category 'file primitives') -----
primitiveDirectoryEntry
| name pathName array result |
name := self stringOf: self stackTop.
pathName := self stringOf: (self stackValue: 1).
self successful ifFalse:
[^self primitiveFail].
array := FileDirectory default primLookupEntryIn: pathName name: name.
array == nil ifTrue:
[self pop: 3 thenPush: objectMemory nilObject.
^array].
array == #badDirectoryPath ifTrue:
[self halt.
^self primitiveFail].
+ result := self makeDirEntryName: (array at: 1)
+ size: (array at: 1) size
+ createDate: (array at: 2)
+ modDate: (array at: 3)
+ isDir: (array at: 4)
+ fileSize: (array at: 5)
+ posixPermissions: (array at: 6).
- result := self makeDirEntryName: (array at: 1) size: (array at: 1) size
- createDate: (array at: 2) modDate: (array at: 3)
- isDir: (array at: 4) fileSize: (array at: 5).
self pop: 3.
self push: result!
Item was changed:
----- Method: StackInterpreterSimulator>>primitiveDirectoryLookup (in category 'file primitives') -----
primitiveDirectoryLookup
| index pathName array result |
index := self stackIntegerValue: 0.
pathName := (self stringOf: (self stackValue: 1)).
self successful ifFalse:
[^self primitiveFail].
array := FileDirectory default primLookupEntryIn: pathName index: index.
array == nil ifTrue:
[self pop: 3 thenPush: objectMemory nilObject.
^array].
array == #badDirectoryPath ifTrue:
["self halt."
^self primitiveFail].
+ result := self
+ makeDirEntryName: (array at: 1)
+ size: (array at: 1) size
+ createDate: (array at: 2)
+ modDate: (array at: 3)
+ isDir: (array at: 4)
+ fileSize: (array at: 5)
+ posixPermissions: (array at: 6).
- result := self makeDirEntryName: (array at: 1) size: (array at: 1) size
- createDate: (array at: 2) modDate: (array at: 3)
- isDir: (array at: 4) fileSize: (array at: 5).
self pop: 3 thenPush: result!
Item was changed:
----- Method: TMethod>>emitCCodeOn:generator: (in category 'C code generation') -----
emitCCodeOn: aStream generator: aCodeGen
"Emit C code for this method onto the given stream.
All calls to inlined methods should already have been expanded."
aCodeGen currentMethod: self.
self emitCCommentOn: aStream. "place method comment before function"
aStream cr.
self emitCFunctionPrototype: aStream generator: aCodeGen newlineBeforeName: true.
aStream cr; nextPut: ${.
+ aStream cr; tab;
+ nextPutAll: '// '; nextPutAll: self definingClass name; nextPutAll: '>>#'; nextPutAll: self selector.
self emitCLocalsOn: aStream generator: aCodeGen.
aCodeGen
pushScope: declarations
while: [parseTree emitCCodeOn: aStream level: 1 generator: aCodeGen].
aStream nextPut: $}; cr!
More information about the Vm-dev
mailing list