cplx.getReal()));
cplx.getRealExpr()));
    public Object visitStmtVarDecl(StmtVarDecl stmt)    {        stmt = (StmtVarDecl)super.visitStmtVarDecl(stmt);        // Save the context, we'll need it later.        FEContext ctx = stmt.getContext();        // Go ahead and do propagation:        List newTypes = new java.util.ArrayList();        List newNames = new java.util.ArrayList();        List newInits = new java.util.ArrayList();        for (int i = 0; i < stmt.getNumVars(); i++)        {            String name = stmt.getName(i);            Type type = stmt.getType(i);            Expression init = stmt.getInit(i);            // If this is uninitialized, or the type isn't complex,            // go on with our lives.            //            // (But what about things like float foo=abs(a+bi)?  --dzm)            if (init == null || !type.isComplex())            {                newTypes.add(type);                newNames.add(name);                newInits.add(init);                continue;            }            // Is the right-hand side complex too?            Expression exprVar = new ExprVar(ctx, name);            if (init instanceof ExprComplex)            {                // Right.  Create the separate initialization statements.                ExprComplex cplx = (ExprComplex)init;                addStatement(new StmtVarDecl(ctx, type, name, null));                addStatement(new StmtAssign(ctx,                                            new ExprField(ctx,                                                          exprVar, "real"),                                            cplx.getReal()));                addStatement(new StmtAssign(ctx,                                            new ExprField(ctx,                                                          exprVar, "imag"),                                            cplx.getImag()));                continue;            }            // Maybe the right-hand side isn't complex at all.            if (!(getType(init).isComplex()))            {                addStatement(new StmtVarDecl(ctx, type, name, null));                addStatement(new StmtAssign(ctx,                                            new ExprField(ctx,                                                          exprVar, "real"),                                            init));                addStatement(new StmtAssign(ctx,                                            new ExprField(ctx,                                                          exprVar, "imag"),                                            new ExprConstInt(ctx, 0)));                continue;            }            // Otherwise, we have complex foo = (complex)bar(), which is fine.            newTypes.add(type);            newNames.add(name);            newInits.add(init);        }        // It's possible that this will leave us with no variables.        // If so, don't return anything.  Assume all three lists are        // the same length.        if (newTypes.isEmpty())            return null;        return new StmtVarDecl(ctx, newTypes, newNames, newInits);    }