VM Maker: VMMakerJS-bf.13.mcz

Previous Topic Next Topic
 
classic Classic list List threaded Threaded
1 message Options
Reply | Threaded
Open this post in threaded view
|

VM Maker: VMMakerJS-bf.13.mcz

commits-2
 
Bert Freudenberg uploaded a new version of VMMakerJS to project VM Maker:
http://source.squeak.org/VMMaker/VMMakerJS-bf.13.mcz

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

Name: VMMakerJS-bf.13
Author: bf
Time: 21 October 2014, 11:40:37.642 am
UUID: 36eab1e9-25b2-414b-b7e6-4d54dd7c120c
Ancestors: VMMakerJS-bf.12

Fix float-int conversion for Kedama

=============== Diff against VMMakerJS-bf.12 ===============

Item was changed:
  ----- Method: TAssignmentNode>>emitJSCodeOn:level:generator: (in category '*vmmakerjs') -----
  emitJSCodeOn: aStream level: level generator: aCodeGen
  expression isSwitch ifTrue:
  [^expression emitJSCodeOn: aStream addToEndOfCases: self level: level generator: aCodeGen].
  self isVariableUpdatingAssignment
  ifTrue:
  [(expression args first isConstant and: [expression args first value = 1])
  ifTrue: [aStream nextPutAll: expression selector, expression selector.
  variable emitJSCodeOn: aStream level: level generator: aCodeGen]
  ifFalse: [
  variable emitJSCodeOn: aStream level: level generator: aCodeGen.
  aStream nextPutAll: ' ', expression selector, '= '.
  expression args first emitJSCodeAsArgumentOn: aStream level: level generator: aCodeGen]]
  ifFalse:
+ [ | coerceToInt |
+ coerceToInt := (variable isFloatIn: aCodeGen) not and: [expression isFloatIn: aCodeGen].
+ variable emitJSCodeOn: aStream level: level generator: aCodeGen.
- [variable emitJSCodeOn: aStream level: level generator: aCodeGen.
  aStream nextPutAll: ' = '.
+ expression emitJSCodeAsArgumentOn: aStream level: level generator: aCodeGen.
+ coerceToInt ifTrue: [aStream nextPutAll: '|0'].]!
- expression emitJSCodeAsArgumentOn: aStream level: level generator: aCodeGen]!

Item was added:
+ ----- Method: TAssignmentNode>>isFloatIn: (in category '*vmmakerjs') -----
+ isFloatIn: aCodeGen
+ ^variable isFloatIn: aCodeGen!

Item was added:
+ ----- Method: TConstantNode>>isFloatIn: (in category '*vmmakerjs') -----
+ isFloatIn: aCodeGen
+ ^value isFloat!

Item was added:
+ ----- Method: TSendNode>>isFloatIn: (in category '*vmmakerjs') -----
+ isFloatIn: aCodeGen
+ selector precedence = 2 ifFalse: [^false].
+ ^ (receiver isFloatIn: aCodeGen)
+ or: [arguments first isFloatIn: aCodeGen]!

Item was added:
+ ----- Method: TVariableNode>>isFloatIn: (in category '*vmmakerjs') -----
+ isFloatIn: aCodeGen
+ | type |
+ type := aCodeGen typeOfVariable: name.
+ type isNil ifTrue: [^false].
+ (type includes: $*) ifTrue: [^false].
+ (type beginsWithAnyOf: #('register ' 'static ')) ifTrue: [type := type copyAfter: $ ].
+ (type beginsWithAnyOf: #('double ' 'float ')) ifTrue: [^true].
+ (type beginsWithAnyOf: #('int ' 'unsigned ' 'sqInt ' 'usqInt ' 'var ')) ifTrue: [^false].
+ self halt: 'need to handle ', type!