Spaces:
Running
Running
| JS code generation | |
| emitJSHeaderOn: aStream generator: aCodeGen | |
| "Emit a C function header for this method onto the given stream." | |
| aStream cr. | |
| self emitJSFunctionHeader: aStream generator: aCodeGen. | |
| aStream nextPutAll: ' {'; cr. | |
| self emitGlobalStructReferenceOn: aStream. | |
| locals do: [ :var | | varDecl | | |
| aStream nextPutAll: ' var ', (aCodeGen returnPrefixFromVariable: var). | |
| varDecl := declarations at: var asString ifAbsent: ['']. | |
| (varDecl includes: $=) | |
| ifTrue: [ | const | | |
| const := ((varDecl copyAfter: $=) replaceAll: ${ with: $[) replaceAll: $} with: $]. | |
| aStream nextPutAll: ' =', const] | |
| ifFalse: [(varDecl includes: $[) | |
| ifTrue: [ | size | | |
| size := (varDecl copyAfter: $[) copyUpTo: $]. | |
| size ifEmpty: [self halt]. | |
| aStream nextPutAll: ' = new Array(', size, ')']]. | |
| aStream nextPutAll: ';'; cr | |
| ]. | |
| (#(primitiveExtractChannel primitiveCondenseSound) includes: selector) | |
| ifTrue: [#(src dst) do: [:v | aStream nextPutAll: ' var _', v, ' = 0;'; cr]]. | |
| locals isEmpty ifFalse: [ aStream cr ]. |