*vmmakerjs emitJSCodeAsFunctionCallOn: aStream level: level generator: aCodeGen "Translate this message send into a JS function call" "Special case for pluggable modules. Replace messages to interpreterProxy by interpreterProxy->message(..) if the message is not builtin" (aCodeGen isGeneratingPluginCode and: [receiver isVariable and: ['interpreterProxy' = receiver name and: [self isBuiltinOperator not]]]) ifTrue: [aStream nextPutAll:'interpreterProxy.']. "Translate this message send into a JS function call." aStream nextPutAll: (aCodeGen jsFunctionNameFor: selector); nextPut: $(. "Only include the receiver as the first argument in certain cases. The receiver is always included if it is an expression. If it is a variable: If the vmClass says it is an implicit variable, don't include it. If the variable is 'self' and the method being called is not in the method set (i.e. it is some external code), don't include it." (self shouldIncludeReceiverAsFirstArgument: aCodeGen) ifTrue: [receiver emitJSCodeOn: aStream level: level generator: aCodeGen. arguments isEmpty ifFalse: [aStream nextPutAll: ', ']]. arguments do: [ :arg| arg emitJSCodeAsArgumentOn: aStream level: level generator: aCodeGen] separatedBy: [aStream nextPut: $,; space]. aStream nextPut: $)