[Vm-dev] VM Maker: VMMaker.oscog-eem.2800.mcz

commits at source.squeak.org commits at source.squeak.org
Sun Sep 6 23:58:57 UTC 2020


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

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

Name: VMMaker.oscog-eem.2800
Author: eem
Time: 6 September 2020, 4:58:47.598839 pm
UUID: a6116113-df13-435d-968d-e9b111676754
Ancestors: VMMaker.oscog-eem.2799

Use shared code for string results.
Use storePointerUnchecked: storeInteger: in a few appropriate places.

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

Item was changed:
  ----- Method: CogVMSimulator>>startInContextSuchThat: (in category 'simulation only') -----
  startInContextSuchThat: aBlock
  	"Change the active process's suspendedContext to its sender, which short-cuts the
  	 initialization of the system.  This can be a short-cut to running code, e.g. when doing
  		Smalltalk saveAs.
  		Compiler recompileAll
  	 via e.g.
  		vm startInContextSuchThat: [:ctxt| (vm stringOf: (vm penultimateLiteralOf: (vm methodForContext: ctxt))) = 'DoIt']"
  	<doNotGenerate>
  	| context activeProc |
  	activeProc := self activeProcess.
  	context := objectMemory fetchPointer: SuspendedContextIndex ofObject: activeProc.
  	[context = objectMemory nilObject ifTrue:
  		[^self error: 'no context found'].
  	 aBlock value: context] whileFalse:
  		[context := objectMemory fetchPointer: SenderIndex ofObject: context].
  	objectMemory storePointer: SuspendedContextIndex ofObject: activeProc withValue: context.
  	"Now push a dummy return value."
  	objectMemory
+ 		storePointerUnchecked: (self fetchStackPointerOf: context) + CtxtTempFrameStart
- 		storePointer: (self fetchStackPointerOf: context) + CtxtTempFrameStart
  		ofObject: context
  		withValue: objectMemory nilObject.
  	self storeInteger: StackPointerIndex
  		ofObject: context
  		withValue: (self fetchStackPointerOf: context) + 1!

Item was changed:
  ----- Method: InterpreterPrimitives>>primitiveGetWindowLabel (in category 'I/O primitives') -----
  primitiveGetWindowLabel
  	"Primitive. Answer the OS window's label"
- 	| ptr sz labelOop |
- 	<var: 'ptr' type: 'char*'>
  	<export: true>
+ 	self methodReturnString: self ioGetWindowLabel!
- 	ptr := self ioGetWindowLabel.
- 	ptr == nil ifTrue:[^self success: false].
- 	sz := self strlen: ptr.
- 	labelOop := objectMemory instantiateClass: objectMemory classString indexableSize: sz.
- 	0 to: sz-1 do:[:i| objectMemory storeByte: i ofObject: labelOop withValue: (ptr at: i)].
- 	self pop: argumentCount+1 thenPush: labelOop!

Item was changed:
  ----- Method: StackInterpreterSimulator>>startInContextSuchThat: (in category 'simulation only') -----
  startInContextSuchThat: aBlock
  	"Change the active process's suspendedContext to its sender, which short-cuts the
  	 initialization of the system.  This can be a short-cut to running code, e.g. when doing
  		Smalltalk saveAs.
  		Compiler recompileAll
  	 via e.g.
  		vm startInContextSuchThat: [:ctxt| (vm stringOf: (vm penultimateLiteralOf: (vm methodForContext: ctxt))) = 'DoIt']"
  	<doNotGenerate>
  	| context activeProc |
  	activeProc := self activeProcess.
  	context := objectMemory fetchPointer: SuspendedContextIndex ofObject: activeProc.
  	[context = objectMemory nilObject ifTrue:
  		[self error: 'no context found'].
  	 aBlock value: context] whileFalse:
  		[context := objectMemory fetchPointer: SenderIndex ofObject: context].
  	objectMemory storePointer: SuspendedContextIndex ofObject: activeProc withValue: context.
  	"Now push a dummy return value."
  	objectMemory
+ 		storePointerUnchecked: (self fetchStackPointerOf: context) + CtxtTempFrameStart
- 		storePointer: (self fetchStackPointerOf: context) + CtxtTempFrameStart
  		ofObject: context
  		withValue: objectMemory nilObject.
  	self storeInteger: StackPointerIndex
  		ofObject: context
  		withValue: (self fetchStackPointerOf: context) + 1!

Item was changed:
  ----- Method: StackInterpreterSimulator>>startInSender (in category 'simulation only') -----
  startInSender
  	"Change the active process's suspendedContext to its sender, which short-cuts the
  	 initialization of the system.  This can be a short-cut to running code, e.g. when doing
  		Smalltalk saveAs.
  		Compiler recompileAll"
  	
  	| activeContext activeProc senderContext |
  	activeProc := self activeProcess.
  	activeContext := objectMemory fetchPointer: SuspendedContextIndex ofObject: activeProc.
  	senderContext := objectMemory fetchPointer: SenderIndex ofObject: activeContext.
  	objectMemory storePointer: SuspendedContextIndex ofObject: activeProc withValue: senderContext.
  	"Now push a dummy return value."
  	objectMemory
+ 		storePointerUnchecked: (self fetchStackPointerOf: senderContext) + CtxtTempFrameStart
- 		storePointer: (self fetchStackPointerOf: senderContext) + CtxtTempFrameStart
  		ofObject: senderContext
  		withValue: objectMemory nilObject.
  	self storeInteger: StackPointerIndex
  		ofObject: senderContext
  		withValue: (self fetchStackPointerOf: senderContext) + 1!

Item was changed:
  ----- Method: ThreadedFFIPlugin>>ffiLoadCalloutAddress: (in category 'symbol loading') -----
  ffiLoadCalloutAddress: lit
  	"Load the address of the foreign function from the given object"
  	| addressPtr address ptr |
  	<var: #ptr type: #'sqIntptr_t *'>
  	"Lookup the address"
  	addressPtr := interpreterProxy fetchPointer: 0 ofObject: lit.
  	"Make sure it's an external handle"
  	address := self ffiContentsOfHandle: addressPtr errCode: FFIErrorBadAddress.
  	interpreterProxy failed ifTrue:
  		[^0].
  	address = 0 ifTrue:"Go look it up in the module"
  		[self externalFunctionHasStackSizeSlot ifTrue:
+ 			[interpreterProxy storeInteger: ExternalFunctionStackSizeIndex ofObject: lit withValue: -1].
- 			[interpreterProxy
- 				storePointer: ExternalFunctionStackSizeIndex
- 				ofObject: lit
- 				withValue: (interpreterProxy integerObjectOf: -1)].
  		(interpreterProxy slotSizeOf: lit) < 5 ifTrue:
  			[^self ffiFail: FFIErrorNoModule].
  		address := self ffiLoadCalloutAddressFrom: lit.
  		interpreterProxy failed ifTrue:
  			[^0].
  		"Store back the address"
  		ptr := interpreterProxy firstIndexableField: addressPtr.
  		ptr at: 0 put: address].
  	^address!



More information about the Vm-dev mailing list