import java.util.*; import Jakarta.util.FixDosOutputStream; import Jakarta.util.Util2; import java.io.*; // the following classes deal with Field signature harvesting public class FldVarDec { // harvest [mods] AST_TypeName AST_VarDecl; public void execute( int stage ) { if ( stage != 0 ) { super.executeBypass( stage ); return; } ; // Step 1: get the name of the type String typename = ( ( AST_TypeName ) arg[1] ).GetSignature(); // Step 2: harvest modifiers in temporary MMOutput object MMOutput modifiers = new MMOutput(); modifiers.setModifiers( (AstOptNode) arg[0] ); // Step 3: harvest identifiers on declarator list, and for // each identifier, create an MMOutput object and // add it to the main object MMOutput m = Main.mmresult; AstCursor c = new AstCursor(); for ( c.FirstElement( arg[2] ); c.MoreElement(); c.NextElement() ) { VariableDeclarator vd = ((VariableDeclarator) c.node); String varname = vd.GetSignature(); String dims = vd.GetDims(); String sig = varname + " " + typename + dims; MMOutput o = new MMOutput().init( sig, MMGlobals.Field, MMGlobals.Defines ); o.setlines( this.getFirstLineNum(), this.getLastLineNum() ); o.copyModifiers( modifiers ); // now remember final values if ((modifiers.modifiers & MMGlobals.ModFinal) != 0) { String initedValue = vd.getValue(); if (initedValue != null) { NamedVector nv = new NamedVector( "finalValue" ); nv.add( initedValue ); o.union( nv ); } } m.nested.putUnique( sig, o ); } } }