import { registerLibraryHeader, SourceFile } from "../core/compilation/Program"; import { registerOpaqueExpression, OpaqueExpressionImpl, RuntimeOpaqueExpression } from "../core/constructs/expressions/OpaqueExpression"; import { Int, CompleteClassType, Bool, VoidType } from "../core/compilation/types"; import { getDataPtr } from "./string"; import { Value } from "../core/runtime/Value"; import { getLocal } from "../core/compilation/contexts"; registerLibraryHeader("cstdlib", new SourceFile("cstdlib.h", `int rand() { return @rand; } void srand(int seed) { @srand; }`, true ) ); registerOpaqueExpression("rand", >{ type: Int.INT, valueCategory: "prvalue", operate: (rt: RuntimeOpaqueExpression) => { return new Value(rt.sim.rng.randomInteger(0, 1000000), Int.INT); } }); registerOpaqueExpression("srand", >{ type: VoidType.VOID, valueCategory: "prvalue", operate: (rt: RuntimeOpaqueExpression) => { rt.sim.rng.setRandomSeed(getLocal(rt, "seed").getValue().rawValue); } });