    001    /* Copyright 2000, 2001, Compaq Computer Corporation */
    002
    003    package escjava.translate;
    004
    005    import javafe.util.Assert;
    006    import javafe.util.Set;
    007    import javafe.util.ErrorSet;
    008    import javafe.ast.*;
    009
    010    import escjava.ast.*;
    011    import escjava.ast.TagConstants;
    012
    013
    014
    015    public class Helper {
    016
    017      /** Provides support for appropriately handling the 'helper' pragma
    018          during translation.
    019      **/
    020
    021        /* The following decoration lets us cache the fact that a given
    022           RoutineDecl is known to be not helper recursive, so that we don't
    023           have to recompute this fact.  In particular, the helperDecoration of
    024           a RoutineDecl is non-null precisely when the RoutineDecl is known
    025           to be not helper recursive.
    026
    027           FIXME - this is not currently used, but should be?
    028
    029        static {
    030            ASTDecoration helperDecoration =
    031                new ASTDecoration("helperDecoration");
    032        }
    033        */
    034
    035
    036        /* Returns true iff the given RoutineDecl has a 'helper' modifier
    037           pragma.
    038        */
    039        public static boolean isHelper(RoutineDecl r) {
    040            if (r != null && r.pmodifiers != null) {
    041                int pmodSize = r.pmodifiers.size();
    042                for (int i = 0; i < pmodSize; i++) {
    043                    ModifierPragma mp = r.pmodifiers.elementAt(i);
    044                    if (mp.getTag() == TagConstants.HELPER) {
    045                        return true;
    046                    }
    047                }
    048            }
    049            return false;
    050        }
    051
    052
    053        // Abort the program because the given RoutineDecl is helper recursive.
    054        public static void abort(/*@ non_null */ RoutineDecl rd) {
    055            ErrorSet.fatal(rd.locId, "helper routine is recursive");
    056        }
    057
    058    }