/*
    JBlock generateRateMatchSteadyState(FilterContent filter)                    {        Utils.fail("This is not supported");            JBlock block = new JBlock(null, new JStatement[0], null);        //reset the simple index        if (filterInfo.isSimple()){            block.addStatement                (new JExpressionStatement(null,                                          (new JAssignmentExpression                                           (null,                                            new JLocalVariableExpression                                            (null, generatedVariables.simpleIndex),                                            new JIntLiteral(-1))), null));        }                    //should be at least peek - pop items in the buffer, so        //just receive pop * filterInfo.steadyMult in the buffer and we can        //run for an entire filterInfo.steadyMult state        block.addStatement            (makeForLoopFieldIndex(receiveCode(filter, filter.getInputType(),                                     generatedVariables),                         generatedVariables.exeIndex,                         new JIntLiteral(filterInfo.pop * filterInfo.steadyMult)));            //now, run the work function steady times...        JBlock workBlock =             (JBlock)ObjectDeepCloner.            deepCopy(filter.getWork().getBody());        //convert all of the push expressions in the steady state work block into        //stores to the output buffer        workBlock.accept(new SLIRReplacingVisitor() {                /**                 * Visits a push expression.                 */                public Object visitPushExpression(SIRPushExpression self,                                                  CType tapeType,                                                  JExpression arg) {                    JExpression newExp = (JExpression)arg.accept(this);                    //the expression is the argument of the call                    JExpression[] args = new JExpression[1];                    args[0] = newExp;                                JMethodCallExpression ratematchsend =                         new JMethodCallExpression(null, new JThisExpression(null),                                                  rateMatchSendMethod,                                                  args);                    //set the type of the method call                    ratematchsend.setTapeType(tapeType);                    return ratematchsend;                }            });            //if we are in debug mode, print out that the filter is firing        if (SpaceTimeBackend.FILTER_DEBUG_MODE) {            block.addStatement                (new SIRPrintStatement(null,                                       new JStringLiteral(null, filter.getName() + " firing."),                                       null));        }        //add the cloned work function to the block        block.addStatement            (makeForLoopFieldIndex(workBlock, generatedVariables.exeIndex,                         new JIntLiteral(filterInfo.steadyMult)));            //now add the code to push the output buffer onto the static network and         //reset the output buffer index        //    for (steady*push*typesize)        //        push(__SENDBUFFER__[++ __SENDBUFFERINDEX__])        if (filterInfo.push > 0) {                    SIRPushExpression pushExp =  new SIRPushExpression                (new JArrayAccessExpression                 (null,                   new JLocalVariableExpression                  (null,                   generatedVariables.sendBuffer),                  new JLocalVariableExpression                  (null,                   generatedVariables.exeIndex)));                    pushExp.setTapeType(Util.getBaseType(filter.getOutputType()));                    JExpressionStatement send = new JExpressionStatement(null, pushExp, null);                    block.addStatement                (makeForLoopFieldIndex(send, generatedVariables.exeIndex,                             new JIntLiteral(filterInfo.steadyMult * filterInfo.push *                                              Util.getTypeSize(filter.getOutputType()))));            //reset the send buffer index            block.addStatement                (new JExpressionStatement(null,                                          new JAssignmentExpression(null,                                                                    new JLocalVariableExpression                                                                    (null, generatedVariables.sendBufferIndex),                                                                    new JIntLiteral(-1)),                                          null));        }            //if we are in decoupled mode do not put the work function in a for loop        //and add the print statements        if (KjcOptions.decoupled) {            block.addStatementFirst                (new SIRPrintStatement(null,                                        new JIntLiteral(0),                                       null));            block.addStatement(block.size(),                                new SIRPrintStatement(null,                                                      new JIntLiteral(1),                                                     null));        }            return block;        }