scratch0-5 / utils /VMMakerJS.package /TSendNode.extension /instance /emitJSCodeAsFunctionCallOn.level.generator..st
soiz1's picture
Upload folder using huggingface_hub
8f3f8db verified
*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: $)