transforming recordDeclarations "Record C type declarations of the forms self returnTypeC: 'float'. self var: #foo declareC: 'float foo' self var: #foo as: Class self var: #foo type: 'float'. and remove the declarations from the method body." | newStatements | properties pragmas notEmpty ifTrue: [properties pragmas do: [:pragma| pragma keyword = #var:declareC: ifTrue: [self declarationAt: pragma arguments first asString put: pragma arguments last]. pragma keyword = #var:type: ifTrue: [| varName varType | varName := pragma arguments first asString. varType := pragma arguments last. varType last = $* ifFalse: [varType := varType, ' ']. self declarationAt: varName put: varType, varName]. pragma keyword = #var:as: ifTrue: [| theClass | theClass := Smalltalk at: pragma arguments last name asSymbol ifAbsent: [nil]. (theClass isKindOf: Behavior) ifFalse: [^self error: 'declarator must be a Behavior']. self declarationAt: pragma arguments first value asString put: (theClass jscgDeclareJSForVar: pragma arguments first asString)]. pragma keyword = #returnTypeC: ifTrue: [returnType := pragma arguments last]. pragma keyword = #doNotGenerate: ifTrue: [locals removeKey: pragma arguments last]]]. newStatements := OrderedCollection new: parseTree statements size. parseTree statements do: [:stmt | | isDeclaration | isDeclaration := false. stmt isSend ifTrue: [stmt selector = #var:declareC: ifTrue: [isDeclaration := true. self declarationAt: stmt args first value asString put: stmt args last value]. stmt selector = #var:type: ifTrue: [ | varName varType | isDeclaration := true. varName := stmt args first value asString. varType := stmt args last value. varType last = $* ifFalse: [varType := varType, ' ']. self declarationAt: varName put: varType, varName. ]. stmt selector = #var:as: ifTrue: [| theClass | isDeclaration := true. theClass := Smalltalk at: stmt args last name asSymbol ifAbsent: [nil]. (theClass isKindOf: Behavior) ifFalse: [^self error: 'declarator must be a Behavior']. self declarationAt: stmt args first value asString put: (theClass jscgDeclareJSForVar: stmt args first value asString)]. stmt selector = #returnTypeC: ifTrue: [isDeclaration := true. returnType := stmt args last value]]. isDeclaration ifFalse: [newStatements add: stmt]]. parseTree setStatements: newStatements asArray