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}