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

commits at source.squeak.org commits at source.squeak.org
Thu Jun 7 19:16:23 UTC 2012


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

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

Name: VMMaker.oscog-eem.161
Author: eem
Time: 7 June 2012, 12:13:51.191 pm
UUID: d9d960b4-9f66-43a2-9d90-4fb58d541adc
Ancestors: VMMaker.oscog-eem.160

Integrate ipv6 socket prims.  Fix a typo.

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

Item was changed:
  ----- Method: NewspeakStackDepthFinder>>interpretNextNewspeakInstructionFor: (in category 'decoding') -----
  interpretNextNewspeakInstructionFor: client 
  	"Send to the argument, client, a message that specifies the type of the 
  	next instruction."
  
  	| byte type offset method |
  	method := self method.  
  	byte := method at: pc.
  	type := byte // 16.  
  	offset := byte \\ 16.  
  	pc := pc+1.
  	"We do an inline binary search on each of the possible 16 values of type:
+ 	The old, cleaner but slow code is retained as a comment below"
- 	The old, cleaner but slowe code is retained as a comment below"
  	type < 8
  	ifTrue: [type < 4
  				ifTrue: [type < 2
  						ifTrue: [type < 1
  								ifTrue: ["type = 0"
  									^ client pushReceiverVariable: offset]
  								ifFalse: ["type = 1"
  									^ client pushTemporaryVariable: offset]]
  						ifFalse: [type < 3
  								ifTrue: ["type = 2"
  									^ client
  										pushConstant: (method literalAt: offset + 1)]
  								ifFalse: ["type = 3"
  									^ client
  										pushConstant: (method literalAt: offset + 17)]]]
  				ifFalse: [type < 6
  						ifTrue: [type < 5
  								ifTrue: ["type = 4"
  									^ client
  										pushLiteralVariable: (method literalAt: offset + 1)]
  								ifFalse: ["type = 5"
  									^ client
  										pushLiteralVariable: (method literalAt: offset + 17)]]
  						ifFalse: [type < 7
  								ifTrue: ["type = 6"
  									offset < 8
  										ifTrue: [^ client popIntoReceiverVariable: offset]
  										ifFalse: [^ client popIntoTemporaryVariable: offset - 8]]
  								ifFalse: ["type = 7"
  									offset = 0
  										ifTrue: [^ client pushReceiver].
  									offset < 8
  										ifTrue: [^ client
  												pushConstant: (SpecialConstants at: offset)].
  									offset = 8
  										ifTrue: [^ client methodReturnReceiver].
  									offset < 12
  										ifTrue: [^ client
  												methodReturnConstant: (SpecialConstants at: offset - 8)].
  									offset = 12
  										ifTrue: [^ client methodReturnTop].
  									offset = 13
  										ifTrue: [^ client blockReturnTop].
  									offset = 14 ifTrue:
  										[| byte2 |
  										 byte := method at: pc.
  										 pc := pc+1.
  										byte2 := method at: pc.
  										 pc := pc+1.
  										^client sendToDynamicSuperclass: (method literalAt: byte2 + 1)
  												numArgs: byte].
  									offset = 15 ifTrue:
  										[byte := method at: pc.
  										 pc := pc+1.
  										^client pushImplicitReceiverForMessage: (method literalAt: byte + 1)].
  									^self error: 'unusedBytecode']]]]
  		ifFalse: [type < 12
  				ifTrue: [type < 10
  						ifTrue: [type < 9
  								ifTrue: ["type = 8"
  									^ self
  										interpretNewspeakExtension: offset
  										in: method
  										for: client]
  								ifFalse: ["type = 9 (short jumps)"
  									offset < 8
  										ifTrue: [^ client jump: offset + 1].
  									^ client jump: offset - 8 + 1 if: false]]
  						ifFalse: [type < 11
  								ifTrue: ["type = 10 (long jumps)"
  									byte := method at: pc.
  									pc := pc + 1.
  									offset < 8
  										ifTrue: [^ client jump: offset - 4 * 256 + byte].
  									^ client jump: (offset bitAnd: 3)
  											* 256 + byte if: offset < 12]
  								ifFalse: ["type = 11"
  									^ client
  										send: (Smalltalk specialSelectorAt: offset + 1)
  										super: false
  										numArgs: (Smalltalk specialNargsAt: offset + 1)]]]
  				ifFalse: [type = 12
  						ifTrue: [^ client
  								send: (Smalltalk specialSelectorAt: offset + 17)
  								super: false
  								numArgs: (Smalltalk specialNargsAt: offset + 17)]
  						ifFalse: ["type = 13, 14 or 15"
  							^ client
  								send: (method literalAt: offset + 1)
  								super: false
  								numArgs: type - 13]]]!

Item was added:
+ ----- Method: SocketPlugin>>primitiveResolverGetAddressInfoFamily (in category 'ipv6 primitives') -----
+ primitiveResolverGetAddressInfoFamily
+ 
+ 	| family |
+ 	self primitive: 'primitiveResolverGetAddressInfoFamily'
+ 		parameters: #().
+ 	interpreterProxy failed
+ 		ifFalse:
+ 			[family := self sqResolverGetAddressInfoFamily.
+ 			 ^family asSmallIntegerObj]!

Item was added:
+ ----- Method: SocketPlugin>>primitiveResolverGetAddressInfoHost:service:flags:family:type:protocol: (in category 'ipv6 primitives') -----
+ primitiveResolverGetAddressInfoHost: hostName service: servName flags: flags family: family type: type protocol: protocol
+ 
+ 	| hostSize servSize |
+ 	self primitive: 'primitiveResolverGetAddressInfo'
+ 		parameters: #(String String SmallInteger SmallInteger SmallInteger SmallInteger).
+ 	interpreterProxy failed
+ 		ifFalse:
+ 			[hostSize := interpreterProxy byteSizeOf: hostName cPtrAsOop.
+ 			 servSize := interpreterProxy byteSizeOf: servName cPtrAsOop.
+ 			 self
+ 			 	sqResolverGetAddressInfoHost: hostName Size: hostSize Service: servName Size: servSize
+ 					Flags: flags Family: family Type: type Protocol: protocol]!

Item was added:
+ ----- Method: SocketPlugin>>primitiveResolverGetAddressInfoNext (in category 'ipv6 primitives') -----
+ primitiveResolverGetAddressInfoNext
+ 
+ 	| more |
+ 	self primitive: 'primitiveResolverGetAddressInfoNext'
+ 		parameters: #().
+ 	more := self sqResolverGetAddressInfoNext.
+ 	interpreterProxy failed ifTrue: [^nil].
+ 	^more asBooleanObj!

Item was added:
+ ----- Method: SocketPlugin>>primitiveResolverGetAddressInfoProtocol (in category 'ipv6 primitives') -----
+ primitiveResolverGetAddressInfoProtocol
+ 
+ 	| protocol |
+ 	self primitive: 'primitiveResolverGetAddressInfoProtocol'
+ 		parameters: #().
+ 	interpreterProxy failed
+ 		ifFalse:
+ 			[protocol := self sqResolverGetAddressInfoProtocol.
+ 			 ^protocol asSmallIntegerObj]!

Item was added:
+ ----- Method: SocketPlugin>>primitiveResolverGetAddressInfoResult: (in category 'ipv6 primitives') -----
+ primitiveResolverGetAddressInfoResult: socketAddress
+ 
+ 	| addrSize |
+ 	self primitive: 'primitiveResolverGetAddressInfoResult'
+ 		parameters: #(ByteArray).
+ 	interpreterProxy failed
+ 		ifFalse:
+ 			[addrSize := interpreterProxy byteSizeOf: socketAddress cPtrAsOop.
+ 			 self sqResolverGetAddressInfoResult: socketAddress Size: addrSize]!

Item was added:
+ ----- Method: SocketPlugin>>primitiveResolverGetAddressInfoSize (in category 'ipv6 primitives') -----
+ primitiveResolverGetAddressInfoSize
+ 
+ 	| size |
+ 	self primitive: 'primitiveResolverGetAddressInfoSize'
+ 		parameters: #().
+ 	interpreterProxy failed
+ 		ifFalse:
+ 			[size := self sqResolverGetAddressInfoSize.
+ 			 ^size asSmallIntegerObj]!

Item was added:
+ ----- Method: SocketPlugin>>primitiveResolverGetAddressInfoType (in category 'ipv6 primitives') -----
+ primitiveResolverGetAddressInfoType
+ 
+ 	| type |
+ 	self primitive: 'primitiveResolverGetAddressInfoType'
+ 		parameters: #().
+ 	interpreterProxy failed
+ 		ifFalse:
+ 			[type := self sqResolverGetAddressInfoType.
+ 			 ^type asSmallIntegerObj]!

Item was added:
+ ----- Method: SocketPlugin>>primitiveResolverGetNameInfo:flags: (in category 'ipv6 primitives') -----
+ primitiveResolverGetNameInfo: socketAddress flags: flags
+ 
+ 	| addrSize addrBase |
+ 	<var: #addrBase type: 'char *'>
+ 	self primitive: 'primitiveResolverGetNameInfo'
+ 		parameters: #(Oop SmallInteger).
+ 	interpreterProxy failed
+ 		ifFalse:
+ 			[addrSize := interpreterProxy byteSizeOf: socketAddress.
+ 			 addrBase := self cCoerce: (interpreterProxy firstIndexableField: socketAddress) to: 'char *'.
+ 			 self sqResolverGetNameInfo: addrBase Size: addrSize Flags: flags]!

Item was added:
+ ----- Method: SocketPlugin>>primitiveResolverGetNameInfoHostResult: (in category 'ipv6 primitives') -----
+ primitiveResolverGetNameInfoHostResult: socketName
+ 
+ 	| addrSize |
+ 	self primitive: 'primitiveResolverGetNameInfoHostResult'
+ 		parameters: #(String).
+ 	interpreterProxy failed
+ 		ifFalse:
+ 			[addrSize := interpreterProxy byteSizeOf: socketName cPtrAsOop.
+ 			 self sqResolverGetNameInfoHostResult: socketName Size: addrSize]!

Item was added:
+ ----- Method: SocketPlugin>>primitiveResolverGetNameInfoHostSize (in category 'ipv6 primitives') -----
+ primitiveResolverGetNameInfoHostSize
+ 
+ 	| size |
+ 	self primitive: 'primitiveResolverGetNameInfoHostSize'
+ 		parameters: #().
+ 	interpreterProxy failed
+ 		ifFalse:
+ 			[size := self sqResolverGetNameInfoHostSize.
+ 			 ^size asSmallIntegerObj]!

Item was added:
+ ----- Method: SocketPlugin>>primitiveResolverGetNameInfoServiceResult: (in category 'ipv6 primitives') -----
+ primitiveResolverGetNameInfoServiceResult: socketName
+ 
+ 	| addrSize |
+ 	self primitive: 'primitiveResolverGetNameInfoServiceResult'
+ 		parameters: #(String).
+ 	interpreterProxy failed
+ 		ifFalse:
+ 			[addrSize := interpreterProxy byteSizeOf: socketName cPtrAsOop.
+ 			 self sqResolverGetNameInfoServiceResult: socketName Size: addrSize]!

Item was added:
+ ----- Method: SocketPlugin>>primitiveResolverGetNameInfoServiceSize (in category 'ipv6 primitives') -----
+ primitiveResolverGetNameInfoServiceSize
+ 
+ 	| size |
+ 	self primitive: 'primitiveResolverGetNameInfoServiceSize'
+ 		parameters: #().
+ 	interpreterProxy failed
+ 		ifFalse:
+ 			[size := self sqResolverGetNameInfoServiceSize.
+ 			 ^size asSmallIntegerObj]!

Item was added:
+ ----- Method: SocketPlugin>>primitiveResolverHostNameResult: (in category 'ipv6 primitives') -----
+ primitiveResolverHostNameResult: nameString
+ 
+ 	| nameSize |
+ 	self primitive: 'primitiveResolverHostNameResult'
+ 		parameters: #(String).
+ 	interpreterProxy failed
+ 		ifFalse:
+ 			[nameSize := interpreterProxy byteSizeOf: nameString cPtrAsOop.
+ 			 self sqResolverHostNameResult: nameString Size: nameSize]!

Item was added:
+ ----- Method: SocketPlugin>>primitiveResolverHostNameSize (in category 'ipv6 primitives') -----
+ primitiveResolverHostNameSize
+ 
+ 	| size |
+ 	self primitive: 'primitiveResolverHostNameSize'
+ 		parameters: #().
+ 	interpreterProxy failed
+ 		ifFalse:
+ 			[size := self sqResolverHostNameSize.
+ 			 interpreterProxy failed ifFalse: [^size asSmallIntegerObj]]!

Item was added:
+ ----- Method: SocketPlugin>>primitiveSocket:bindTo: (in category 'ipv6 primitives') -----
+ primitiveSocket: socket bindTo: socketAddress
+ 
+ 	| addrSize addrBase s  |
+ 	<var: #addrBase type: 'char *'>
+ 	<var: #s type: 'SocketPtr'>
+ 	self primitive: 'primitiveSocketBindTo' parameters: #(#Oop #Oop).
+ 	s := self socketValueOf: socket.
+ 	addrSize := interpreterProxy byteSizeOf: socketAddress.
+ 	addrBase := self cCoerce: (interpreterProxy firstIndexableField: socketAddress) to: 'char *'.
+ 	interpreterProxy failed ifFalse: [self sqSocket: s BindToAddress: addrBase Size: addrSize]!

Item was added:
+ ----- Method: SocketPlugin>>primitiveSocket:connectTo: (in category 'ipv6 primitives') -----
+ primitiveSocket: socket connectTo: socketAddress
+ 
+ 	| addrSize addrBase s  |
+ 	<var: #addrBase type: 'char *'>
+ 	<var: #s type: 'SocketPtr'>
+ 	self primitive: 'primitiveSocketConnectTo' parameters: #(#Oop #Oop).
+ 	s := self socketValueOf: socket.
+ 	addrSize := interpreterProxy byteSizeOf: socketAddress.
+ 	addrBase := self cCoerce: (interpreterProxy firstIndexableField: socketAddress) to: 'char *'.
+ 	interpreterProxy failed ifFalse: [self sqSocket: s ConnectToAddress: addrBase Size: addrSize]!

Item was changed:
  ----- Method: SocketPlugin>>primitiveSocket:listenOnPort: (in category 'primitives') -----
  primitiveSocket: socket listenOnPort: port 
  	"one part of the wierdass dual prim primitiveSocketListenOnPort which 
  	was warped by some demented evil person determined to twist the very 
  	nature of reality"
  	| s  okToListen |
  	<var: #s type: 'SocketPtr '>
  	self primitive: 'primitiveSocketListenOnPort' parameters: #(#Oop #SmallInteger ).
  	s := self socketValueOf: socket.
  	"If the security plugin can be loaded, use it to check for permission.
  	If  not, assume it's ok"
  	sCCLOPfn ~= 0
  		ifTrue: [okToListen := self cCode: ' ((int (*) (SocketPtr, int)) sCCLOPfn)(s, port)'.
  			okToListen
  				ifFalse: [^ interpreterProxy primitiveFail]].
+ 	interpreterProxy failed ifFalse:[self sqSocket: s ListenOnPort: port]!
- 	self sqSocket: s ListenOnPort: port!

Item was added:
+ ----- Method: SocketPlugin>>primitiveSocket:listenWithBacklog: (in category 'ipv6 primitives') -----
+ primitiveSocket: socket listenWithBacklog: backlogSize
+ 
+ 	| s  |
+ 	<var: #s type: 'SocketPtr'>
+ 	self primitive: 'primitiveSocketListenWithBacklog' parameters: #(#Oop #SmallInteger).
+ 	s := self socketValueOf: socket.
+ 	interpreterProxy failed ifFalse: [self sqSocket: s ListenBacklog: backlogSize]!

Item was added:
+ ----- Method: SocketPlugin>>primitiveSocket:localAddressResult: (in category 'ipv6 primitives') -----
+ primitiveSocket: socket localAddressResult: socketAddress
+ 
+ 	| addrSize addrBase s  |
+ 	<var: #addrBase type: 'char *'>
+ 	<var: #s type: 'SocketPtr'>
+ 	self primitive: 'primitiveSocketLocalAddressResult' parameters: #(#Oop #Oop).
+ 	s := self socketValueOf: socket.
+ 	addrSize := interpreterProxy byteSizeOf: socketAddress.
+ 	addrBase := self cCoerce: (interpreterProxy firstIndexableField: socketAddress) to: 'char *'.
+ 	interpreterProxy failed ifFalse: [self sqSocket: s LocalAddressResult: addrBase Size: addrSize]!

Item was added:
+ ----- Method: SocketPlugin>>primitiveSocket:remoteAddressResult: (in category 'ipv6 primitives') -----
+ primitiveSocket: socket remoteAddressResult: socketAddress
+ 
+ 	| addrSize addrBase s  |
+ 	<var: #addrBase type: 'char *'>
+ 	<var: #s type: 'SocketPtr'>
+ 	self primitive: 'primitiveSocketRemoteAddressResult' parameters: #(#Oop #Oop).
+ 	s := self socketValueOf: socket.
+ 	addrSize := interpreterProxy byteSizeOf: socketAddress.
+ 	addrBase := self cCoerce: (interpreterProxy firstIndexableField: socketAddress) to: 'char *'.
+ 	interpreterProxy failed ifFalse: [self sqSocket: s RemoteAddressResult: addrBase Size: addrSize]!

Item was added:
+ ----- Method: SocketPlugin>>primitiveSocketAddressGetPort (in category 'ipv6 primitives') -----
+ primitiveSocketAddressGetPort
+ 
+ 	| addr addrSize addrBase port |
+ 	<var: #addrBase type: 'char *'>
+ 	addr := self primitive: 'primitiveSocketAddressGetPort' parameters: #() receiver: #Oop.
+ 	addrSize := interpreterProxy byteSizeOf: addr.
+ 	addrBase := self cCoerce: (interpreterProxy firstIndexableField: addr) to: 'char *'.
+ 	interpreterProxy failed
+ 		ifFalse:
+ 			[port := self sqSocketAddress: addrBase SizeGetPort: addrSize.
+ 			 interpreterProxy failed ifFalse: [^port asSmallIntegerObj]]!

Item was added:
+ ----- Method: SocketPlugin>>primitiveSocketAddressSetPort: (in category 'ipv6 primitives') -----
+ primitiveSocketAddressSetPort: portNumber
+ 
+ 	| addr addrSize addrBase |
+ 	<var: #addrBase type: 'char *'>
+ 	addr := self primitive: 'primitiveSocketAddressSetPort' parameters: #(SmallInteger) receiver: #Oop.
+ 	addrSize := interpreterProxy byteSizeOf: addr.
+ 	addrBase := self cCoerce: (interpreterProxy firstIndexableField: addr) to: 'char *'.
+ 	interpreterProxy failed ifFalse: [self sqSocketAddress: addrBase Size: addrSize SetPort: portNumber]!

Item was added:
+ ----- Method: SocketPlugin>>primitiveSocketLocalAddressSize: (in category 'ipv6 primitives') -----
+ primitiveSocketLocalAddressSize: socket
+ 
+ 	| s size |
+ 	<var: #s type: 'SocketPtr'>
+ 	self primitive: 'primitiveSocketLocalAddressSize' parameters: #(#Oop).
+ 	s := self socketValueOf: socket.
+ 	interpreterProxy failed ifTrue: [^nil].
+ 	size := self sqSocketLocalAddressSize: s.
+ 	interpreterProxy failed ifTrue: [^nil].
+ 	^size asSmallIntegerObj!

Item was added:
+ ----- Method: SocketPlugin>>primitiveSocketRemoteAddressSize: (in category 'ipv6 primitives') -----
+ primitiveSocketRemoteAddressSize: socket
+ 
+ 	| s size |
+ 	<var: #s type: 'SocketPtr'>
+ 	self primitive: 'primitiveSocketRemoteAddressSize' parameters: #(#Oop).
+ 	s := self socketValueOf: socket.
+ 	interpreterProxy failed ifTrue: [^nil].
+ 	size := self sqSocketRemoteAddressSize: s.
+ 	interpreterProxy failed ifTrue: [^nil].
+ 	^size asSmallIntegerObj!

Item was changed:
  ----- Method: SocketPlugin>>socketValueOf: (in category 'primitives') -----
  socketValueOf: socketOop 
  	"Return a pointer to the first byte of of the socket record within the  
+ 	 given Smalltalk object, or nil if socketOop is not a socket record."
- 	given Smalltalk object, or nil if socketOop is not a socket record."
- 	| socketIndex |
  	<returnTypeC: 'SocketPtr'>
- 	<var: #socketIndex type: 'void *'>
  	interpreterProxy success: ((interpreterProxy isBytes: socketOop)
  			and: [(interpreterProxy byteSizeOf: socketOop)
  					= self socketRecordSize]).
+ 	^interpreterProxy failed
+ 		ifTrue: [nil]
+ 		ifFalse: [self cCoerce: (interpreterProxy firstIndexableField: socketOop) to: 'SocketPtr']!
- 	interpreterProxy failed ifTrue:
- 		[^ nil].
- 	socketIndex := self cCoerce: (interpreterProxy firstIndexableField: socketOop) to: 'SocketPtr'.
- 	^socketIndex!



More information about the Vm-dev mailing list