pushExp.setTapeType(Util.getBaseType(filter.getOutputType()));
pushExp.setTapeType(CommonUtils.getBaseType(filter.getOutputType()));
    JStatement generateRateMatchSteadyState(SIRFilter filter,                                            LocalVariables localVariables)     {        JBlock block = new JBlock(null, new JStatement[0], null);        int steady = ((Integer)RawBackend.steadyExecutionCounts.                      get(Layout.getNode(Layout.getTile(filter)))).intValue();        //reset the simple index        if (isSimple(filter)){            block.addStatement                (new JExpressionStatement(null,                                          (new JAssignmentExpression                                           (null,                                            new JLocalVariableExpression                                            (null, localVariables.simpleIndex),                                            new JIntLiteral(-1))), null));        }                    //should be at least peek - pop items in the buffer, so        //just receive pop * steady in the buffer and we can        //run for an entire steady state        block.addStatement            (makeForLoop(receiveCode(filter, filter.getInputType(),                                     localVariables),                         localVariables.exeIndex,                         new JIntLiteral(filter.getPopInt() * steady)));        if (filter.getPushInt() > 0) {            //reset the send buffer index            block.addStatement                (new JExpressionStatement(null,                                          new JAssignmentExpression(null,                                                                    new JLocalVariableExpression                                                                    (null, localVariables.sendBufferIndex),                                                                    new JIntLiteral(-1)),                                          null));        }            //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 RateMatchConvertPush(localVariables));        //if we are in debug mode, print out that the filter is firing        if (RawBackend.FILTER_DEBUG_MODE) {            block.addStatement                (new SIRPrintStatement(null,                                       new JStringLiteral(null, filter.getName() + " firing.\\n"),                                       null));        }        //add the cloned work function to the block        block.addStatement            (makeForLoop(workBlock, localVariables.exeIndex,                         new JIntLiteral(steady)));            //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 (filter.getPushInt() > 0) {                    SIRPushExpression pushExp =  new SIRPushExpression                (new JArrayAccessExpression                 (null,                   new JLocalVariableExpression                  (null,                   localVariables.sendBuffer),                  new JLocalVariableExpression                  (null,                   localVariables.exeIndex)));                    pushExp.setTapeType(Util.getBaseType(filter.getOutputType()));                    JExpressionStatement send = new JExpressionStatement(null, pushExp, null);                    block.addStatement                (makeForLoop(send, localVariables.exeIndex,                             new JIntLiteral(steady * filter.getPushInt() *                                              Util.getTypeSize(filter.getOutputType()))));               }            //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;        }            //return the infinite loop        return new JWhileStatement(null,                                    new JBooleanLiteral(null, true),                                   block,                                    null);        }