@@ -147,6 +147,7 @@ void Evaluator::edit_removeBlock(
147147 logError (" Node at position {} not found" , " Evaluator::edit_removeBlock" , position.toString ());
148148 return ;
149149 }
150+ circuitNodeToBlockTypeMap.erase (node.value ());
150151 removeDependentInterCircuitConnections (pauseGuard, node.value ());
151152 if (node->isIC ()) {
152153 eval_circuit_id_t icId = node->getEvalCircuitId ();
@@ -209,6 +210,7 @@ void Evaluator::edit_placeBlock(
209210 }
210211 CircuitNode node = CircuitNode::fromMiddle (gateId);
211212 evalCircuit->setNode (position, node);
213+ circuitNodeToBlockTypeMap[node] = blockType;
212214 dirtyBlockAt (position, evalCircuitId);
213215 checkToCreateExternalConnections (pauseGuard, evalCircuitId, position);
214216}
@@ -286,12 +288,49 @@ void Evaluator::edit_createConnection(
286288 return ;
287289 }
288290 EvalConnection connection (outputPoint.value (), inputPoint.value ());
291+
292+ // if (!checkIfBitWidthsMatch(connection)) {
293+ // return;
294+ // }
295+
289296 if (!circuitPortDependencies.empty () || !circuitNodeDependencies.empty ()) {
290297 interCircuitConnections.push_back ({ connection, circuitPortDependencies, circuitNodeDependencies });
291298 }
292299 evalSimulator->makeConnection (pauseGuard, connection);
293300}
294301
302+ // bool Evaluator::checkIfBitWidthsMatch(
303+ // const EvalConnection& connection
304+ // ) const {
305+ // CircuitNode outputNode = CircuitNode::fromMiddle(connection.source.gateId);
306+ // CircuitNode inputNode = CircuitNode::fromMiddle(connection.destination.gateId);
307+ // if (!circuitNodeToBlockTypeMap.contains(outputNode) || !circuitNodeToBlockTypeMap.contains(inputNode)) {
308+ // logError("CircuitNode not found in circuitNodeToBlockTypeMap", "Evaluator::checkIfBitWidthsMatch");
309+ // return false;
310+ // }
311+ // BlockType outputBlockType = circuitNodeToBlockTypeMap.at(outputNode);
312+ // unsigned int outputBitWidth;
313+ // if (outputBlockType == BlockType::SWITCH || outputBlockType == BlockType::BUTTON || outputBlockType == BlockType::TICK_BUTTON) {
314+ // outputBitWidth = 1;
315+ // } else {
316+ // BlockData* outputBlockData = blockDataManager.getBlockData(outputBlockType);
317+ // connection_end_id_t outputConnectionEndId = connection.source.portId;
318+ // outputBitWidth = outputBlockData->getConnectionBitWidth(outputConnectionEndId);
319+ // }
320+
321+ // BlockType inputBlockType = circuitNodeToBlockTypeMap.at(inputNode);
322+ // unsigned int inputBitWidth;
323+ // if (inputBlockType == BlockType::LIGHT) {
324+ // inputBitWidth = 1;
325+ // } else{
326+ // BlockData* inputBlockData = blockDataManager.getBlockData(inputBlockType);
327+ // connection_end_id_t inputConnectionEndId = connection.destination.portId;
328+ // inputBitWidth = inputBlockData->getConnectionBitWidth(inputConnectionEndId);
329+ // }
330+
331+ // return outputBitWidth == inputBitWidth;
332+ // }
333+
295334void Evaluator::removeDependentInterCircuitConnections (SimPauseGuard& pauseGuard, CircuitPortDependency circuitPortDependency) {
296335 // delete any connections that have the pair {circuitId, connectionEndId} in their traceSet
297336 for (auto it = interCircuitConnections.begin (); it != interCircuitConnections.end ();) {
@@ -999,8 +1038,10 @@ void Evaluator::traceOutwardsIC(
9991038 } else {
10001039 evalConnection = EvalConnection (targetConnectionPoint, connectionPoint.value ());
10011040 }
1041+ // if (checkIfBitWidthsMatch(evalConnection)) {
10021042 evalSimulator->makeConnection (pauseGuard, evalConnection);
10031043 interCircuitConnections.push_back ({ evalConnection, circuitPortDependenciesCopy, circuitNodeDependenciesCopy });
1044+ // }
10041045
10051046 traceOutwardsIC (
10061047 pauseGuard,
0 commit comments