rescript version: 10.0.1
I have defined a module Utils in file Utils.res.
@inline
let selfAdd = v => {
let value = v.contents
v := value + 1
value
}
And i called it’s function selfAdd in another file with this code below.
Demo.res
module UtilsInTheSameModule = {
@inline
let selfAdd = v => {
let value = v.contents
v := value + 1
value
}
}
let i = ref(0)
Js.log2(`i: `, i->Utils.selfAdd)
Js.log2(`i: `, i->UtilsInTheSameModule.selfAdd)
Here is the compiled js:
Utils.res
// Generated by ReScript, PLEASE EDIT WITH CARE
'use strict';
function selfAdd(v) {
var value = v.contents;
v.contents = value + 1 | 0;
return value;
}
exports.selfAdd = selfAdd;
/* No side effect */
Demo.bs.js
// Generated by ReScript, PLEASE EDIT WITH CARE
'use strict';
var Utils = require("./Utils.bs.js");
function selfAdd(v) {
var value = v.contents;
v.contents = value + 1 | 0;
return value;
}
var UtilsInTheSameModule = {
selfAdd: selfAdd
};
var i = {
contents: 0
};
console.log("i: ", Utils.selfAdd(i));
var value = i.contents;
console.log("i: ", (i.contents = value + 1 | 0, value));
exports.UtilsInTheSameModule = UtilsInTheSameModule;
exports.i = i;
/* Not a pure module */
As you can see, the function selfAdd in module Utils is not inlined, but is inlined when it’s defined in the module UtilsInTheSameModule which is defined within the same file the calling code in.
Is it a bug of our compiler or it just has the mechanism that the inline function should be defined in the place it is called?