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 }