/* * @(#)CVMInitInfo.java 1.10 06/10/10 * * Copyright 1990-2008 Sun Microsystems, Inc. All Rights Reserved. * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER * * This program is free software; you can redistribute it and/or * modify it under the terms of the GNU General Public License version * 2 only, as published by the Free Software Foundation. * * This program is distributed in the hope that it will be useful, but * WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * General Public License version 2 for more details (a copy is * included at /legal/license.txt). * * You should have received a copy of the GNU General Public License * version 2 along with this work; if not, write to the Free Software * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA * 02110-1301 USA * * Please contact Sun Microsystems, Inc., 4150 Network Circle, Santa * Clara, CA 95054 or visit www.sun.com if you need additional * information or have any questions. * */ package runtime; class CVMInitInfo { /* * This class puts together a list of "initialization records". * * This takes two possible forms: * * A triple of: * from-address * to-address * byte count * * Or a list of: * pointers to ROMizer generated data structs. * * This data is interpreted by the startup code. */ String fromAddress; String toAddress; String byteCount; CVMInitInfo next; CVMInitInfo( String f, String t, String c, CVMInitInfo n ){ fromAddress = f; toAddress = t; byteCount = c; next = n; } // // The single address version // CVMInitInfo( String f, CVMInitInfo n ){ fromAddress = f; next = n; } CVMInitInfo() { } CVMInitInfo initList = null; public void addInfo( String f, String t, String c ){ initList = new CVMInitInfo( f, t, c, initList ); } public void addInfo( String f ){ initList = new CVMInitInfo( f, initList ); } public void write( CCodeWriter out, String typename, String dataname){ out.println("const "+typename+" "+dataname+"[] = {"); if (initList.toAddress == null && initList.byteCount == null) { // The single address variant for ( CVMInitInfo p = initList; p != null; p = p.next ){ out.println(" "+p.fromAddress+","); } out.println(" NULL"); /* terminator */ } else { // The triple variant for ( CVMInitInfo p = initList; p != null; p = p.next ){ out.println(" { "+p.fromAddress+", "+p.toAddress+", "+p.byteCount+" },"); } out.println(" {NULL, NULL, 0}"); /* terminator */ } out.println("};"); } }