diff --git a/src/compiler.js b/src/compiler.js index f7b8066..4c3b2f9 100644 --- a/src/compiler.js +++ b/src/compiler.js @@ -81,10 +81,6 @@ async function compile(srcFile, options) { throw new Error("A main component must be defined"); } - if (ctx.verbose) console.log("Classify Signals"); - measures.classifySignals = -performance.now(); - classifySignals(ctx); - measures.classifySignals += performance.now(); if (ctx.verbose) console.log("Reduce Constants"); measures.reduceConstants = -performance.now(); @@ -108,9 +104,13 @@ async function compile(srcFile, options) { measures.reduceConstraints += performance.now(); } - if (ctx.verbose) console.log("NConstraints After: "+ctx.constraints.length); + if (ctx.verbose) console.log("Classify Signals"); + measures.classifySignals = -performance.now(); + classifySignals(ctx); + measures.classifySignals += performance.now(); + measures.generateWitnessNames = -performance.now(); generateWitnessNames(ctx); measures.generateWitnessNames += performance.now(); @@ -462,7 +462,6 @@ async function reduceConstrains(ctx) { } sig2constraint[s] = null; - lSignal.c = ctx.stDISCARDED; } /* @@ -496,7 +495,12 @@ async function reduceConstrains(ctx) { for (let k in l.coefs) { k = Number(k); const signal = ctx.signals[k]; - if ((signal.c == ctx.stINTERNAL)&&(!ctx.F.isZero(l.coefs[k])) &&(!removedSignals[k])) return k; + if ( ( ((signal.o & ctx.MAIN) == 0) + ||( ((signal.o & ctx.IN) == 0) + &&((signal.o & ctx.OUT) == 0))) + &&((signal.o & ctx.ONE) ==0) + &&(!ctx.F.isZero(l.coefs[k])) + &&(!removedSignals[k])) return k; } return null; } diff --git a/src/construction_phase.js b/src/construction_phase.js index 492a7c2..5765a84 100644 --- a/src/construction_phase.js +++ b/src/construction_phase.js @@ -428,10 +428,17 @@ function execAssignement(ctx, ast) { } // Skip if an out is assigned directly to an input. - if ((!isIn)||(!isOut)) { - sDest.e = sIdx; - } else { - if (utils.isDefined(sSrc.v)) sDest.v = sSrc.v; + if (!(isIn&&isOut)) { + if (isIn) { + sDest.e = sIdx; + } else if (isOut) { + sSrc.e = dIdx; + } else { + sDest.e = sIdx; + } + if (!isOut) { + if (utils.isDefined(sSrc.v)) sDest.v = sSrc.v; + } } } }