mirror of
https://github.com/vercel-labs/scriptc.git
synced 2026-11-06 08:23:19 +08:00
Count the arguments a replaced stdio write receives (#2530)
This commit is contained in:
@@ -1062,6 +1062,9 @@ export function lambdaSignature(
|
||||
type: DYN,
|
||||
mode: "required",
|
||||
}));
|
||||
// `arguments` holds the call's own tuple: a console line passes one
|
||||
// or two arguments whatever the replacement declares.
|
||||
appendArgumentsParameter(lowerer, node, shapes, "arguments");
|
||||
return { shapes, funcType: funcTypeFromParamShapes(shapes, DYN) };
|
||||
}
|
||||
}
|
||||
|
||||
+6
@@ -0,0 +1,6 @@
|
||||
{
|
||||
"order": [
|
||||
"<repo>/tests/corpus/stdio-write-replacement-arguments.cjs"
|
||||
],
|
||||
"diags": []
|
||||
}
|
||||
@@ -0,0 +1,43 @@
|
||||
// A replaced process.stdout.write or process.stderr.write sees the call's own
|
||||
// arguments: arguments.length is the number the caller passed, whatever the
|
||||
// replacement declares.
|
||||
const seen = [];
|
||||
const originalOut = process.stdout.write;
|
||||
process.stdout.write = function (chunk, encodingOrCallback, callback) {
|
||||
seen.push(`stdout declared3 ${arguments.length} ${typeof callback}`);
|
||||
return true;
|
||||
};
|
||||
process.stdout.write("one");
|
||||
process.stdout.write("two", "utf8");
|
||||
process.stdout.write("three", "utf8", () => {});
|
||||
process.stdout.write = function () {
|
||||
seen.push(`stdout declared0 ${arguments.length} ${arguments[0]}`);
|
||||
return true;
|
||||
};
|
||||
process.stdout.write("zero");
|
||||
process.stdout.write = function (chunk) {
|
||||
seen.push(`stdout declared1 ${arguments.length} ${arguments[1]}`);
|
||||
return true;
|
||||
};
|
||||
process.stdout.write("a", "latin1");
|
||||
process.stdout.write = originalOut;
|
||||
const originalErr = process.stderr.write;
|
||||
process.stderr.write = function (chunk, encodingOrCallback, callback) {
|
||||
seen.push(`stderr declared3 ${arguments.length} ${typeof callback}`);
|
||||
return true;
|
||||
};
|
||||
process.stderr.write("one");
|
||||
process.stderr.write("two", "utf8");
|
||||
process.stderr.write("three", "utf8", () => {});
|
||||
process.stderr.write = function () {
|
||||
seen.push(`stderr declared0 ${arguments.length} ${arguments[0]}`);
|
||||
return true;
|
||||
};
|
||||
process.stderr.write("zero");
|
||||
process.stderr.write = function (chunk) {
|
||||
seen.push(`stderr declared1 ${arguments.length} ${arguments[1]}`);
|
||||
return true;
|
||||
};
|
||||
process.stderr.write("a", "latin1");
|
||||
process.stderr.write = originalErr;
|
||||
console.log(seen.join("\n"));
|
||||
@@ -0,0 +1 @@
|
||||
{ "plain": 3757, "san": 5000 }
|
||||
Reference in New Issue
Block a user