[minor FIX] InterpreterSimlator

ohshima at is.titech.ac.jp ohshima at is.titech.ac.jp
Wed Aug 18 01:13:49 UTC 1999


  The following patch adds two primitives (warpBits and
primitiveDirectoryLookup) to the InterpreterSimulator.  It
means nothing for most of Squeakers, but it makes the
InterpreterSimlator a bit more functional:-)

                                             OHSHIMA Yoshiki
                Dept. of Mathematical and Computing Sciences
                               Tokyo Institute of Technology 

!InterpreterSimulator methodsFor: 'I/O primitives support' stamp: 'yo 6/3/1999 16:10'!

	^ myBitBlt warpBits! !

!InterpreterSimulator methodsFor: 'file primitives' stamp: 'yo 6/3/1999 12:03'!
makeDirEntryName: entryName size: entryNameSize
	createDate: createDate modDate: modifiedDate
	isDir: dirFlag fileSize: fileSize

	| modDateOop createDateOop nameString results |
	self var: 'entryName' declareC: 'char *entryName'.

	"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.
		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
! !

!InterpreterSimulator methodsFor: 'file primitives' stamp: 'yo 6/3/1999 12:07'!
	| index pathName array result |
	index _ self stackIntegerValue: 0.
	pathName _ (self shortPrint: (self stackValue: 1)).
	pathName _ pathName copyFrom: 2 to: pathName size - 1.
	successFlag ifFalse: [
		^self primitiveFail.

	array _ FileDirectory default primLookupEntryIn: pathName index: index.

	array == nil ifTrue: [
		self pop: 3.
		self push: nilObj.
	array == #badDirectoryPath ifTrue: [
		^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).
	self pop: 3.
	self push: result.
! !

More information about the Squeak-dev mailing list