summaryrefslogtreecommitdiff
path: root/src/main/scala/Error.scala
diff options
context:
space:
mode:
authorJim Lawson2015-05-11 10:04:01 -0700
committerJim Lawson2015-07-24 15:50:53 -0700
commitb208bfb5691c7b5921dd47d0b599726872acd1cd (patch)
tree5d8695f13db41a807622dfdc93c1b6841911acc8 /src/main/scala/Error.scala
parentcaa7602b878c03c47fd263550e37715f1a67f854 (diff)
move source files under Chisel folder - eclipse compatibility
Diffstat (limited to 'src/main/scala/Error.scala')
-rw-r--r--src/main/scala/Error.scala167
1 files changed, 0 insertions, 167 deletions
diff --git a/src/main/scala/Error.scala b/src/main/scala/Error.scala
deleted file mode 100644
index 1ad5414d..00000000
--- a/src/main/scala/Error.scala
+++ /dev/null
@@ -1,167 +0,0 @@
-/*
- Copyright (c) 2011, 2012, 2013, 2014 The Regents of the University of
- California (Regents). All Rights Reserved. Redistribution and use in
- source and binary forms, with or without modification, are permitted
- provided that the following conditions are met:
-
- * Redistributions of source code must retain the above
- copyright notice, this list of conditions and the following
- two paragraphs of disclaimer.
- * Redistributions in binary form must reproduce the above
- copyright notice, this list of conditions and the following
- two paragraphs of disclaimer in the documentation and/or other materials
- provided with the distribution.
- * Neither the name of the Regents nor the names of its contributors
- may be used to endorse or promote products derived from this
- software without specific prior written permission.
-
- IN NO EVENT SHALL REGENTS BE LIABLE TO ANY PARTY FOR DIRECT, INDIRECT,
- SPECIAL, INCIDENTAL, OR CONSEQUENTIAL DAMAGES, INCLUDING LOST PROFITS,
- ARISING OUT OF THE USE OF THIS SOFTWARE AND ITS DOCUMENTATION, EVEN IF
- REGENTS HAS BEEN ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
-
- REGENTS SPECIFICALLY DISCLAIMS ANY WARRANTIES, INCLUDING, BUT NOT
- LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
- A PARTICULAR PURPOSE. THE SOFTWARE AND ACCOMPANYING DOCUMENTATION, IF
- ANY, PROVIDED HEREUNDER IS PROVIDED "AS IS". REGENTS HAS NO OBLIGATION
- TO PROVIDE MAINTENANCE, SUPPORT, UPDATES, ENHANCEMENTS, OR
- MODIFICATIONS.
-*/
-
-package Chisel
-import scala.collection.mutable.ArrayBuffer
-
-/** This Singleton implements a log4j compatible interface.
- It is used through out the Chisel package to report errors and warnings
- detected at runtime.
- */
-object ChiselError {
- var hasErrors: Boolean = false;
- val ChiselErrors = new ArrayBuffer[ChiselError];
-
- def clear() {
- ChiselErrors.clear()
- hasErrors = false
- }
-
- /** emit an error message */
- def error(mf: => String, line: StackTraceElement) {
- hasErrors = true
- ChiselErrors += new ChiselError(() => mf, line)
- }
-
- def error(m: String) {
- val stack = Thread.currentThread().getStackTrace
- error(m, findFirstUserLine(stack) getOrElse stack(0))
- }
-
- /** Emit an informational message
- (useful to track long running passes) */
- def info(m: String): Unit =
- println(tag("info", Console.MAGENTA) + " [%2.3f] ".format(Driver.elapsedTime/1e3) + m)
-
- /** emit a warning message */
- def warning(m: => String) {
- val stack = Thread.currentThread().getStackTrace
- ChiselErrors += new ChiselError(() => m,
- findFirstUserLine(stack) getOrElse stack(0), 1)
- }
-
- def findFirstUserLine(stack: Array[StackTraceElement]): Option[StackTraceElement] = {
- findFirstUserInd(stack) map { stack(_) }
- }
-
- def findFirstUserInd(stack: Array[StackTraceElement]): Option[Int] = {
- def isUserCode(ste: StackTraceElement): Boolean = {
- val className = ste.getClassName()
- try {
- val cls = Class.forName(className)
- if( cls.getSuperclass() == classOf[Module] ) {
- true
- } else {
- /* XXX Do it the old way until we figure if it is safe
- to remove from Node.scala
- var line: StackTraceElement = findFirstUserLine(Thread.currentThread().getStackTrace)
- */
- val dotPos = className.lastIndexOf('.')
- if( dotPos > 0 ) {
- (className.subSequence(0, dotPos) != "Chisel") && !className.contains("scala") &&
- !className.contains("java") && !className.contains("$$")
- } else {
- false
- }
- }
- } catch {
- case e: java.lang.ClassNotFoundException => false
- }
- }
- val idx = stack.indexWhere(isUserCode)
- if(idx < 0) {
- println("COULDN'T FIND LINE NUMBER (" + stack(1) + ")")
- None
- } else {
- Some(idx)
- }
- }
-
- // Print stack frames up to and including the "user" stack frame.
- def printChiselStackTrace() {
- val stack = Thread.currentThread().getStackTrace
- val idx = ChiselError.findFirstUserInd(stack)
- idx match {
- case None => {}
- case Some(x) => for (i <- 0 to x) println(stack(i))
- }
- }
-
- /** Prints error messages generated by Chisel at runtime. */
- def report() {
- if (!ChiselErrors.isEmpty) {
- for(err <- ChiselErrors) err.print;
- }
- }
-
- /** Throws an exception if there has been any error recorded
- before this point. */
- def checkpoint() {
- if(hasErrors) {
- throw new IllegalStateException(
- Console.UNDERLINED + "CODE HAS " +
- Console.UNDERLINED + Console.BOLD + ChiselErrors.filter(_.isError).length + Console.RESET +
- Console.UNDERLINED + " " +
- Console.UNDERLINED + Console.RED + "ERRORS" + Console.RESET +
- Console.UNDERLINED + " and " +
- Console.UNDERLINED + Console.BOLD + ChiselErrors.filter(_.isWarning).length + Console.RESET +
- Console.UNDERLINED + " " +
- Console.UNDERLINED + Console.YELLOW + "WARNINGS" + Console.RESET)
- }
- }
-
- def tag(name: String, color: String): String =
- s"[${color}${name}${Console.RESET}]"
-}
-
-class ChiselError(val errmsgFun: () => String, val errline: StackTraceElement,
-val errlevel: Int = 0) {
-
- val level = errlevel
- val line = errline
- val msgFun = errmsgFun
-
- def isError = (level == 0)
- def isWarning = (level == 1)
-
- def print() {
- /* Following conventions for error formatting */
- val levelstr =
- if (isError) ChiselError.tag("error", Console.RED)
- else ChiselError.tag("warn", Console.YELLOW)
- if( line != null ) {
- println(levelstr + " " + line.getFileName + ":" +
- line.getLineNumber + ": " + msgFun() +
- " in class " + line.getClassName)
- } else {
- println(levelstr + ": " + msgFun())
- }
- }
-}