arnaucube
arnaucube/circomPublic Self-hosted repository
circom/src/buildwasm.js
src/buildwasm.jsRaw
 1
 2const ModuleBuilder = require("wasmbuilder").ModuleBuilder;
 3const gen = require("./gencode");
 4
 5
 6module.exports = function buildWasm(ctx) {
 7
 8    const fDefined = {};
 9
10    ctx.module = new ModuleBuilder();
11    for (let f in ctx.functions) {
12        ctx.f = ctx.module.addFunction(f);
13        ctx.c = ctx.f.getCodeBuilder();
14
15        ctx.scope = {};
16        for (let p in ctx.functions[f].params) {
17            const param = ctx.functions[f].params[p];
18            ctx.f.addParam(param.name, "i32");
19            ctx.scope[param.name] = {
20                type: "PARAM",
21                sels: param.sels,
22                getter: () => { return ctx.c.getLocal(param.name); },
23                setter: (v) => { return ctx.c.setLocal(param.name, v); }
24            };
25        }
26
27        gen(ctx, ctx.functions[f].block);
28    }
29
30    for (let i=0; i<ctx.components.length; i++) {
31        const h = hashComponentCall(ctx, i);
32        const fName = ctx.components[i].temlate+"_"+h;
33        if (!fDefined[fName]) {
34
35            ctx.f = ctx.module.addFunction(fName);
36            ctx.c = ctx.f.getCodeBuilder();
37
38            ctx.scope = {};
39            for (let p in ctx.components[i].params) {
40                ctx.scope[p] = createConstant(ctx, ctx.components[i].params[p]);
41            }
42
43            gen(ctx, ctx.templates[ctx.components[i].temlate].block);
44        }
45        ctx.components[i].f = fName;
46    }
47};
48
49function buildSetSignal(ctx) {
50
51
52}