소스 검색

Fixed wrong inlining of #=

Nicolas Petton 13 년 전
부모
커밋
20cd63e878
3개의 변경된 파일79개의 추가작업 그리고 15개의 파일을 삭제
  1. 24 1
      js/Compiler.deploy.js
  2. 34 3
      js/Compiler.js
  3. 21 11
      st/Compiler.st

파일 크기가 너무 크기때문에 변경 상태를 표시하지 않습니다.
+ 24 - 1
js/Compiler.deploy.js


파일 크기가 너무 크기때문에 변경 상태를 표시하지 않습니다.
+ 34 - 3
js/Compiler.js


+ 21 - 11
st/Compiler.st

@@ -163,7 +163,8 @@ left
 !
 
 left: aNode
-	left := aNode
+	left := aNode.
+	left assigned: true
 !
 
 right
@@ -296,9 +297,19 @@ accept: aVisitor
 ! !
 
 ValueNode subclass: #VariableNode
-	instanceVariableNames: ''
+	instanceVariableNames: 'assigned'
 	category: 'Compiler'!
 
+!VariableNode methodsFor: 'accessing'!
+
+assigned
+	^assigned ifNil: [false]
+!
+
+assigned: aBoolean
+	assigned := aBoolean
+! !
+
 !VariableNode methodsFor: 'visiting'!
 
 accept: aVisitor
@@ -736,12 +747,6 @@ inline: aSelector receiver: receiver argumentNodes: aCollection
                 self visit: aCollection first.
                 inlined := true].
 
-	(aSelector = '=') ifTrue: [
-                self checkClass: 'Number' for: receiver.
-                stream nextPutAll: '$receiver =='.
-                self visit: aCollection first.
-                inlined := true].
-
 	(aSelector = '>') ifTrue: [
                 self checkClass: 'Number' for: receiver.
                 stream nextPutAll: '$receiver >'.
@@ -961,8 +966,13 @@ visitVariableNode: aNode
 		ifTrue: [stream nextPutAll: 'self[''@', aNode value, ''']']
 		ifFalse: [
 			(self knownVariables includes: aNode value) 
-                  		ifFalse: [unknownVariables add: aNode value].
-                	stream nextPutAll: '(', aNode value, ' || nil)']
+                  		ifFalse: [
+                                  	unknownVariables add: aNode value.
+                                  	aNode assigned 
+                                  		ifTrue: [stream nextPutAll: '(', aNode value, ' || nil)']
+                                  		ifFalse: [stream nextPutAll: '(typeof ', aNode value, ' == ''undefined'' ? nil : ', aNode value, ')']]
+                  		ifTrue: [
+                			stream nextPutAll:aNode value]]
 !
 
 visitJSStatementNode: aNode
@@ -1023,6 +1033,6 @@ Object subclass: #DoIt
 
 !DoIt methodsFor: ''!
 
-doIt ^[Compiler new recompile: Browser] value
+doIt ^[a < 3] value
 ! !
 

이 변경점에서 너무 많은 파일들이 변경되어 몇몇 파일들은 표시되지 않았습니다.