[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