@scriptc/compiler 0.2.0 → 0.2.1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/ambient/scriptc-node-fallback.d.ts +25 -15
- package/dist/backend/cycle-analysis.js +1 -0
- package/dist/backend/cycle-analysis.js.map +1 -1
- package/dist/backend/llvm/classes.js +21 -5
- package/dist/backend/llvm/classes.js.map +1 -1
- package/dist/backend/llvm/dyn.d.ts +5 -0
- package/dist/backend/llvm/dyn.js +166 -99
- package/dist/backend/llvm/dyn.js.map +1 -1
- package/dist/backend/llvm/emitter.d.ts +2 -2
- package/dist/backend/llvm/emitter.js +79 -20
- package/dist/backend/llvm/emitter.js.map +1 -1
- package/dist/backend/llvm/expr-bytes.d.ts +1 -1
- package/dist/backend/llvm/expr-bytes.js +28 -17
- package/dist/backend/llvm/expr-bytes.js.map +1 -1
- package/dist/backend/llvm/expr-control.js +1 -1
- package/dist/backend/llvm/expr-control.js.map +1 -1
- package/dist/backend/llvm/expr-dynamic.js +18 -9
- package/dist/backend/llvm/expr-dynamic.js.map +1 -1
- package/dist/backend/llvm/expr-primitives.js +11 -1
- package/dist/backend/llvm/expr-primitives.js.map +1 -1
- package/dist/backend/llvm/expr-records.js +11 -3
- package/dist/backend/llvm/expr-records.js.map +1 -1
- package/dist/backend/llvm/expr-stream-bridges.js +125 -17
- package/dist/backend/llvm/expr-stream-bridges.js.map +1 -1
- package/dist/backend/llvm/lib-process.js +23 -3
- package/dist/backend/llvm/lib-process.js.map +1 -1
- package/dist/backend/llvm/lib-shared.js +45 -2
- package/dist/backend/llvm/lib-shared.js.map +1 -1
- package/dist/backend/llvm/shapes.js +8 -2
- package/dist/backend/llvm/shapes.js.map +1 -1
- package/dist/backend/native-toolchain.d.ts +3 -6
- package/dist/backend/native-toolchain.js +53 -23
- package/dist/backend/native-toolchain.js.map +1 -1
- package/dist/backend/native-toolchain.test.js +72 -0
- package/dist/backend/native-toolchain.test.js.map +1 -1
- package/dist/backend/runtime-abi.d.ts +2 -2
- package/dist/backend/runtime-abi.js +2 -2
- package/dist/backend/runtime-pack-native.js +4 -1
- package/dist/backend/runtime-pack-native.js.map +1 -1
- package/dist/backend/runtime-pack-targets.test.js +1 -1
- package/dist/backend/runtime-pack.test.js +1 -1
- package/dist/backend/targets.js +10 -6
- package/dist/backend/targets.js.map +1 -1
- package/dist/backend/targets.test.js +7 -0
- package/dist/backend/targets.test.js.map +1 -1
- package/dist/compat/fetch-profile.js +34 -4
- package/dist/compat/fetch-profile.js.map +1 -1
- package/dist/diagnostics/diagnostic.js +2 -7
- package/dist/diagnostics/diagnostic.js.map +1 -1
- package/dist/frontend/lowering/class-callbacks.d.ts +3 -3
- package/dist/frontend/lowering/class-callbacks.js +26 -15
- package/dist/frontend/lowering/class-callbacks.js.map +1 -1
- package/dist/frontend/lowering/class-construction.d.ts +12 -0
- package/dist/frontend/lowering/class-construction.js +156 -0
- package/dist/frontend/lowering/class-construction.js.map +1 -0
- package/dist/frontend/lowering/class-descriptors.d.ts +1 -0
- package/dist/frontend/lowering/class-descriptors.js +46 -5
- package/dist/frontend/lowering/class-descriptors.js.map +1 -1
- package/dist/frontend/lowering/class-dynamic-dispatch.d.ts +11 -1
- package/dist/frontend/lowering/class-dynamic-dispatch.js +403 -48
- package/dist/frontend/lowering/class-dynamic-dispatch.js.map +1 -1
- package/dist/frontend/lowering/class-dynamic-dispatch.test.js +2 -1
- package/dist/frontend/lowering/class-dynamic-dispatch.test.js.map +1 -1
- package/dist/frontend/lowering/class-instance-constructor.js +4 -1
- package/dist/frontend/lowering/class-instance-constructor.js.map +1 -1
- package/dist/frontend/lowering/class-method-values.d.ts +4 -1
- package/dist/frontend/lowering/class-method-values.js +72 -7
- package/dist/frontend/lowering/class-method-values.js.map +1 -1
- package/dist/frontend/lowering/class-prototypes.d.ts +5 -2
- package/dist/frontend/lowering/class-prototypes.js +121 -13
- package/dist/frontend/lowering/class-prototypes.js.map +1 -1
- package/dist/frontend/lowering/class-runtime-statics.d.ts +8 -0
- package/dist/frontend/lowering/class-runtime-statics.js +66 -0
- package/dist/frontend/lowering/class-runtime-statics.js.map +1 -0
- package/dist/frontend/lowering/class-static-data.js +2 -2
- package/dist/frontend/lowering/class-static-data.js.map +1 -1
- package/dist/frontend/lowering/containers/bytes.js +49 -13
- package/dist/frontend/lowering/containers/bytes.js.map +1 -1
- package/dist/frontend/lowering/containers/string-and-regexp.js +19 -47
- package/dist/frontend/lowering/containers/string-and-regexp.js.map +1 -1
- package/dist/frontend/lowering/error-methods.d.ts +4 -1
- package/dist/frontend/lowering/error-methods.js +100 -1
- package/dist/frontend/lowering/error-methods.js.map +1 -1
- package/dist/frontend/lowering/expressions/native-proxy.js +3 -1
- package/dist/frontend/lowering/expressions/native-proxy.js.map +1 -1
- package/dist/frontend/lowering/expressions/nullish-assignment.js +19 -11
- package/dist/frontend/lowering/expressions/nullish-assignment.js.map +1 -1
- package/dist/frontend/lowering/expressions/object-literals.js +38 -7
- package/dist/frontend/lowering/expressions/object-literals.js.map +1 -1
- package/dist/frontend/lowering/expressions/optional-chains.d.ts +3 -4
- package/dist/frontend/lowering/expressions/optional-chains.js +69 -17
- package/dist/frontend/lowering/expressions/optional-chains.js.map +1 -1
- package/dist/frontend/lowering/function-context.d.ts +11 -3
- package/dist/frontend/lowering/function-context.js +11 -5
- package/dist/frontend/lowering/function-context.js.map +1 -1
- package/dist/frontend/lowering/generator-dynamic-dispatch.d.ts +1 -0
- package/dist/frontend/lowering/generator-dynamic-dispatch.js +39 -1
- package/dist/frontend/lowering/generator-dynamic-dispatch.js.map +1 -1
- package/dist/frontend/lowering/lib-boundary.d.ts +2 -0
- package/dist/frontend/lowering/lib-boundary.js +54 -1
- package/dist/frontend/lowering/lib-boundary.js.map +1 -1
- package/dist/frontend/lowering/lower-builtin-values.d.ts +7 -1
- package/dist/frontend/lowering/lower-builtin-values.js +113 -3
- package/dist/frontend/lowering/lower-builtin-values.js.map +1 -1
- package/dist/frontend/lowering/lower-builtins.d.ts +6 -5
- package/dist/frontend/lowering/lower-builtins.js +156 -41
- package/dist/frontend/lowering/lower-builtins.js.map +1 -1
- package/dist/frontend/lowering/lower-calls.d.ts +8 -5
- package/dist/frontend/lowering/lower-calls.js +448 -83
- package/dist/frontend/lowering/lower-calls.js.map +1 -1
- package/dist/frontend/lowering/lower-classes.d.ts +13 -13
- package/dist/frontend/lowering/lower-classes.js +650 -176
- package/dist/frontend/lowering/lower-classes.js.map +1 -1
- package/dist/frontend/lowering/lower-containers.d.ts +9 -0
- package/dist/frontend/lowering/lower-containers.js +135 -36
- package/dist/frontend/lowering/lower-containers.js.map +1 -1
- package/dist/frontend/lowering/lower-dgram.js +3 -2
- package/dist/frontend/lowering/lower-dgram.js.map +1 -1
- package/dist/frontend/lowering/lower-exprs.d.ts +2 -2
- package/dist/frontend/lowering/lower-exprs.js +531 -126
- package/dist/frontend/lowering/lower-exprs.js.map +1 -1
- package/dist/frontend/lowering/lower-generators.js +12 -1
- package/dist/frontend/lowering/lower-generators.js.map +1 -1
- package/dist/frontend/lowering/lower-island.d.ts +2 -0
- package/dist/frontend/lowering/lower-island.js +32 -10
- package/dist/frontend/lowering/lower-island.js.map +1 -1
- package/dist/frontend/lowering/lower-modules.js +220 -17
- package/dist/frontend/lowering/lower-modules.js.map +1 -1
- package/dist/frontend/lowering/lower-modules.test.d.ts +1 -0
- package/dist/frontend/lowering/lower-modules.test.js +39 -0
- package/dist/frontend/lowering/lower-modules.test.js.map +1 -0
- package/dist/frontend/lowering/lower-stmts.d.ts +7 -3
- package/dist/frontend/lowering/lower-stmts.js +135 -26
- package/dist/frontend/lowering/lower-stmts.js.map +1 -1
- package/dist/frontend/lowering/lower-stream.js +1 -1
- package/dist/frontend/lowering/lower-stream.js.map +1 -1
- package/dist/frontend/lowering/lowerer.d.ts +27 -1
- package/dist/frontend/lowering/lowerer.js +172 -50
- package/dist/frontend/lowering/lowerer.js.map +1 -1
- package/dist/frontend/lowering/lowerer.test.js +149 -3
- package/dist/frontend/lowering/lowerer.test.js.map +1 -1
- package/dist/frontend/lowering/surfaces.d.ts +2 -0
- package/dist/frontend/lowering/surfaces.js +25 -8
- package/dist/frontend/lowering/surfaces.js.map +1 -1
- package/dist/frontend/lowering/text-decoder-encoding.d.ts +2 -0
- package/dist/frontend/lowering/text-decoder-encoding.js +5 -0
- package/dist/frontend/lowering/text-decoder-encoding.js.map +1 -1
- package/dist/frontend/lowering/unregistered-class-types.test.js +3 -3
- package/dist/frontend/lowering/unregistered-class-types.test.js.map +1 -1
- package/dist/frontend/npm-static-prune.js +116 -34
- package/dist/frontend/npm-static-prune.js.map +1 -1
- package/dist/frontend/npm-static-prune.test.js +8 -0
- package/dist/frontend/npm-static-prune.test.js.map +1 -1
- package/dist/frontend/program.d.ts +1 -1
- package/dist/frontend/program.js +53 -24
- package/dist/frontend/program.js.map +1 -1
- package/dist/frontend/program.test.js +18 -0
- package/dist/frontend/program.test.js.map +1 -1
- package/dist/frontend/ts7/ast.js +4 -3
- package/dist/frontend/ts7/ast.js.map +1 -1
- package/dist/frontend/ts7/semantic-json.js +5 -10
- package/dist/frontend/ts7/semantic-json.js.map +1 -1
- package/dist/frontend/type-mapper.d.ts +9 -1
- package/dist/frontend/type-mapper.js +90 -13
- package/dist/frontend/type-mapper.js.map +1 -1
- package/dist/frontend/type-mapper.test.js +23 -0
- package/dist/frontend/type-mapper.test.js.map +1 -1
- package/dist/frontend/union-discriminants.d.ts +1 -1
- package/dist/frontend/union-discriminants.js +2 -2
- package/dist/frontend/union-discriminants.js.map +1 -1
- package/dist/ir/analysis.js +2 -0
- package/dist/ir/analysis.js.map +1 -1
- package/dist/ir/ir.d.ts +52 -33
- package/dist/ir/ir.js +142 -42
- package/dist/ir/ir.js.map +1 -1
- package/dist/ir/ir.test.js +35 -0
- package/dist/ir/ir.test.js.map +1 -1
- package/dist/ir/serialize.js +15 -3
- package/dist/ir/serialize.js.map +1 -1
- package/dist/ir/serialize.test.js +5 -1
- package/dist/ir/serialize.test.js.map +1 -1
- package/dist/ir/validate.js +80 -11
- package/dist/ir/validate.js.map +1 -1
- package/dist/ir/validate.test.js +61 -1
- package/dist/ir/validate.test.js.map +1 -1
- package/dist/native/sanitizer.js +3 -1
- package/dist/native/sanitizer.js.map +1 -1
- package/dist/native/toolchain.d.ts +1 -1
- package/dist/native/toolchain.js +26 -6
- package/dist/native/toolchain.js.map +1 -1
- package/dist/native/toolchain.test.js +53 -1
- package/dist/native/toolchain.test.js.map +1 -1
- package/package.json +20 -20
- package/surface-manifest.json +56 -81
|
@@ -4152,4 +4152,76 @@ test.skipIf(process.platform === "win32" || zigExecutable === undefined)("cross-
|
|
|
4152
4152
|
process.env["SCRIPTC_TARGET"] = oldTarget;
|
|
4153
4153
|
}
|
|
4154
4154
|
});
|
|
4155
|
+
for (const cached of [false, true]) {
|
|
4156
|
+
test.skipIf(process.platform === "win32" || clangExecutable === undefined)(`sanitized dev executables keep program O0 and runtime O1 (${cached ? "cached" : "uncached"})`, async () => {
|
|
4157
|
+
const directory = await mkdtemp(join(tmpdir(), "scriptc-sanitized-posture-"));
|
|
4158
|
+
scratch.push(directory);
|
|
4159
|
+
const wrapperDirectory = join(directory, "tools");
|
|
4160
|
+
const invocationLog = join(directory, "invocations.jsonl");
|
|
4161
|
+
const source = join(directory, "program.c");
|
|
4162
|
+
const environmentKeys = ["PATH", "SCRIPTC_CC", "SCRIPTC_TARGET", "SCRIPTC_CACHE_DIR", "SCRIPTC_NO_CACHE", "SCRIPTC_TEST_DISABLE_CCACHE"];
|
|
4163
|
+
const previous = new Map(environmentKeys.map((key) => [key, process.env[key]]));
|
|
4164
|
+
try {
|
|
4165
|
+
await mkdir(wrapperDirectory);
|
|
4166
|
+
await writeFile(join(directory, "sibling.h"), '#define MESSAGE "sanitized dev"\n');
|
|
4167
|
+
await writeFile(source, `#include <stdio.h>
|
|
4168
|
+
#include "sibling.h"
|
|
4169
|
+
#if defined(__OPTIMIZE__)
|
|
4170
|
+
#error dev program must remain unoptimized
|
|
4171
|
+
#endif
|
|
4172
|
+
#if !__has_feature(address_sanitizer)
|
|
4173
|
+
#error program must retain AddressSanitizer
|
|
4174
|
+
#endif
|
|
4175
|
+
int main(void) { puts(MESSAGE); return 0; }
|
|
4176
|
+
`);
|
|
4177
|
+
await writeFile(join(wrapperDirectory, "clang"), `#!/usr/bin/env node
|
|
4178
|
+
const { appendFileSync } = require('node:fs');
|
|
4179
|
+
const { spawnSync } = require('node:child_process');
|
|
4180
|
+
const args = process.argv.slice(2);
|
|
4181
|
+
if ((args.includes('-c') || args.some(arg => arg.endsWith('/scr_cycle.c'))) && !args.includes('-###')) appendFileSync(${JSON.stringify(invocationLog)}, JSON.stringify(args) + '\\n');
|
|
4182
|
+
const result = spawnSync(${JSON.stringify(clangExecutable)}, args, { stdio: 'inherit' });
|
|
4183
|
+
if (result.error) throw result.error;
|
|
4184
|
+
process.exit(result.status ?? 1);
|
|
4185
|
+
`);
|
|
4186
|
+
await chmod(join(wrapperDirectory, "clang"), 0o755);
|
|
4187
|
+
process.env["PATH"] = wrapperDirectory + delimiter + (previous.get("PATH") ?? "");
|
|
4188
|
+
process.env["SCRIPTC_CC"] = "clang";
|
|
4189
|
+
process.env["SCRIPTC_CACHE_DIR"] = join(directory, "cache");
|
|
4190
|
+
process.env["SCRIPTC_TEST_DISABLE_CCACHE"] = "1";
|
|
4191
|
+
if (cached)
|
|
4192
|
+
delete process.env["SCRIPTC_NO_CACHE"];
|
|
4193
|
+
else
|
|
4194
|
+
process.env["SCRIPTC_NO_CACHE"] = "1";
|
|
4195
|
+
delete process.env["SCRIPTC_TARGET"];
|
|
4196
|
+
trustInstrumentedCompilerWrapper();
|
|
4197
|
+
const options = { cPath: source, sanitize: true, optimization: "dev",
|
|
4198
|
+
...(cached ? { cacheIdentity: TEST_CACHE_IDENTITY, systemLibraries: ["m"] } : {}) };
|
|
4199
|
+
for (let index = 0; index < (cached ? 2 : 1); index++) {
|
|
4200
|
+
const output = join(directory, "program-" + index);
|
|
4201
|
+
await compileC({ ...options, outPath: output });
|
|
4202
|
+
expect(execFileSync(output, { encoding: "utf8" })).toBe("sanitized dev\n");
|
|
4203
|
+
if (process.platform === "darwin")
|
|
4204
|
+
expect(existsSync(output + ".dSYM")).toBe(true);
|
|
4205
|
+
}
|
|
4206
|
+
const invocations = (await readFile(invocationLog, "utf8")).trim().split("\n").map((line) => JSON.parse(line));
|
|
4207
|
+
const programCompiles = invocations.filter((args) => args.some((arg) => arg.endsWith("/program.c")));
|
|
4208
|
+
expect(programCompiles.length).toBeGreaterThanOrEqual(cached ? 2 : 1);
|
|
4209
|
+
for (const args of programCompiles)
|
|
4210
|
+
expect(args.filter((arg) => /^-O\d$/.test(arg)).at(-1)).toBe("-O0");
|
|
4211
|
+
const runtimeCompiles = invocations.filter((args) => args.some((arg) => arg.endsWith("/scr_cycle.c")));
|
|
4212
|
+
expect(runtimeCompiles).toHaveLength(1);
|
|
4213
|
+
expect(runtimeCompiles[0].filter((arg) => /^-O\d$/.test(arg)).at(-1)).toBe("-O1");
|
|
4214
|
+
expect(runtimeCompiles[0]).toContain("-fsanitize=address");
|
|
4215
|
+
expect(runtimeCompiles[0]).toContain("-DSCR_RC_AUDIT");
|
|
4216
|
+
}
|
|
4217
|
+
finally {
|
|
4218
|
+
for (const [key, value] of previous) {
|
|
4219
|
+
if (value === undefined)
|
|
4220
|
+
delete process.env[key];
|
|
4221
|
+
else
|
|
4222
|
+
process.env[key] = value;
|
|
4223
|
+
}
|
|
4224
|
+
}
|
|
4225
|
+
});
|
|
4226
|
+
}
|
|
4155
4227
|
//# sourceMappingURL=native-toolchain.test.js.map
|