|
@@ -637,7 +637,7 @@ inlineLiteral: aSelector receiverNode: anObject argumentNodes: aCollection
|
|
|
self visit: anObject.
|
|
|
stream nextPutAll: ') == nil || $receiver == undefined) ? '.
|
|
|
self visit: aCollection first.
|
|
|
- stream nextPutAll: '() : nil'.
|
|
|
+ stream nextPutAll: '() : $receiver'.
|
|
|
inlined := true]].
|
|
|
|
|
|
(aSelector = 'ifNotNil:') ifTrue: [
|
|
@@ -781,6 +781,12 @@ inline: aSelector receiver: receiver argumentNodes: aCollection
|
|
|
^inlined
|
|
|
! !
|
|
|
|
|
|
+!Compiler methodsFor: 'testing'!
|
|
|
+
|
|
|
+performOptimizations
|
|
|
+ ^self class performOptimizations
|
|
|
+! !
|
|
|
+
|
|
|
!Compiler methodsFor: 'visiting'!
|
|
|
|
|
|
visit: aNode
|
|
@@ -903,11 +909,14 @@ visitSendNode: aNode
|
|
|
superSend := stream contents = 'super'.
|
|
|
receiver := superSend ifTrue: ['self'] ifFalse: [stream contents].
|
|
|
stream := str.
|
|
|
-
|
|
|
- (self inlineLiteral: aNode selector receiverNode: aNode receiver argumentNodes: aNode arguments) ifFalse: [
|
|
|
- (self inline: aNode selector receiver: receiver argumentNodes: aNode arguments)
|
|
|
- ifTrue: [stream nextPutAll: ' : ', (self send: aNode selector to: '$receiver' arguments: aNode arguments superSend: superSend)]
|
|
|
- ifFalse: [stream nextPutAll: (self send: aNode selector to: receiver arguments: aNode arguments superSend: superSend)]]
|
|
|
+
|
|
|
+ self performOptimizations
|
|
|
+ ifTrue: [
|
|
|
+ (self inlineLiteral: aNode selector receiverNode: aNode receiver argumentNodes: aNode arguments) ifFalse: [
|
|
|
+ (self inline: aNode selector receiver: receiver argumentNodes: aNode arguments)
|
|
|
+ ifTrue: [stream nextPutAll: ' : ', (self send: aNode selector to: '$receiver' arguments: aNode arguments superSend: superSend)]
|
|
|
+ ifFalse: [stream nextPutAll: (self send: aNode selector to: receiver arguments: aNode arguments superSend: superSend)]]]
|
|
|
+ ifFalse: [stream nextPutAll: (self send: aNode selector to: receiver arguments: aNode arguments superSend: superSend)]
|
|
|
!
|
|
|
|
|
|
visitCascadeNode: aNode
|
|
@@ -981,6 +990,18 @@ send: aSelector to: aReceiver arguments: aCollection superSend: aBoolean
|
|
|
str nextPutAll: ')']
|
|
|
! !
|
|
|
|
|
|
+Compiler class instanceVariableNames: 'performOptimizations'!
|
|
|
+
|
|
|
+!Compiler class methodsFor: 'accessing'!
|
|
|
+
|
|
|
+performOptimizations
|
|
|
+ ^performOptimizations ifNil: [true]
|
|
|
+!
|
|
|
+
|
|
|
+performOptimizations: aBoolean
|
|
|
+ performOptimizations := aBoolean
|
|
|
+! !
|
|
|
+
|
|
|
!Compiler class methodsFor: 'compiling'!
|
|
|
|
|
|
recompile: aClass
|
|
@@ -1002,6 +1023,6 @@ Object subclass: #DoIt
|
|
|
|
|
|
!DoIt methodsFor: ''!
|
|
|
|
|
|
-doIt ^[Date millisecondsToRun: [Compiler new compile: (SmalltalkParser methodDictionary at: 'parser') source forClass: SmalltalkParser]] value
|
|
|
+doIt ^[Compiler performOptimizations: false.] value
|
|
|
! !
|
|
|
|