001    /*
002     *  This file is part of the Jikes RVM project (http://jikesrvm.org).
003     *
004     *  This file is licensed to You under the Eclipse Public License (EPL);
005     *  You may not use this file except in compliance with the License. You
006     *  may obtain a copy of the License at
007     *
008     *      http://www.opensource.org/licenses/eclipse-1.0.php
009     *
010     *  See the COPYRIGHT.txt file distributed with this work for information
011     *  regarding copyright ownership.
012     */
013    package org.mmtk.vm;
014    
015    import org.vmmagic.pragma.Uninterruptible;
016    
017    @Uninterruptible public abstract class Assert {
018      /**
019       * Logs a message and traceback, then exits.
020       *
021       * @param message the string to log
022       */
023      public abstract void fail(String message);
024    
025      /**
026       * Checks that the given condition is true.  If it is not, this
027       * method does a traceback and exits.  All calls to this method
028       * must be guarded by <code>VM.VERIFY_ASSERTIONS</code>.
029       *
030       * @param cond the condition to be checked
031       */
032      public abstract void _assert(boolean cond);
033    
034      /**
035       * Checks that the given condition is true.  If it is not, this
036       * method prints a message, does a traceback and exits. All calls
037       * to this method must be guarded by <code>VM.VERIFY_ASSERTIONS</code>.
038       *
039       * @param cond the condition to be checked
040       * @param message the message to print
041       */
042      public abstract void _assert(boolean cond, String message);
043    
044      /**
045       * Print a stack trace
046       */
047      public abstract void dumpStack();
048    
049      /*
050       * NOTE: The following methods must be implemented by subclasses of this
051       * class, but are internal to the VM<->MM interface glue, so are never
052       * called by MMTk users.
053       */
054       /** @return <code>true</code> if assertions should be verified */
055      protected abstract boolean getVerifyAssertionsConstant();
056    
057      /*
058       * NOTE: This method should not be called by anything other than the
059       * reflective mechanisms in org.mmtk.vm.VM, and is not implemented by
060       * subclasses.
061       *
062       * This hack exists only to allow us to declare getVerifyAssertions() as
063       * a protected method.
064       */
065      static boolean verifyAssertionsTrapdoor(Assert a) {
066        return a.getVerifyAssertionsConstant();
067      }
068    }