From 7ebba9cd718c9cb72b9f4eb1e27e2d50f76b1e47 Mon Sep 17 00:00:00 2001
From: Philippe Suter <philippe.suter@gmail.com>
Date: Mon, 21 Jun 2010 22:05:58 +0000
Subject: [PATCH]

---
 src/purescala/Analyzer.scala   |  7 ++++++
 src/purescala/Extensions.scala |  5 ++++
 src/purescala/Reporter.scala   | 46 ++++++++++++++++++++++++++++++++++
 3 files changed, 58 insertions(+)
 create mode 100644 src/purescala/Analyzer.scala
 create mode 100644 src/purescala/Extensions.scala
 create mode 100644 src/purescala/Reporter.scala

diff --git a/src/purescala/Analyzer.scala b/src/purescala/Analyzer.scala
new file mode 100644
index 000000000..2add7823a
--- /dev/null
+++ b/src/purescala/Analyzer.scala
@@ -0,0 +1,7 @@
+package purescala
+
+import purescala.Definitions._
+
+abstract class Analyzer(reporter: Reporter)  {
+  def analyze(program: Program)
+}
diff --git a/src/purescala/Extensions.scala b/src/purescala/Extensions.scala
new file mode 100644
index 000000000..9cf90cb44
--- /dev/null
+++ b/src/purescala/Extensions.scala
@@ -0,0 +1,5 @@
+package purescala
+
+object Extensions {
+
+}
diff --git a/src/purescala/Reporter.scala b/src/purescala/Reporter.scala
new file mode 100644
index 000000000..194409ff4
--- /dev/null
+++ b/src/purescala/Reporter.scala
@@ -0,0 +1,46 @@
+package purescala
+
+import purescala.Definitions.Definition
+import purescala.Trees.Expr
+
+abstract class Reporter {
+  def error(msg: Any) : Unit
+  def warning(msg: Any) : Unit 
+  def info(msg: Any) : Unit 
+  def fatalError(msg: Any) : Nothing
+
+  def error(definition: Definition, msg: Any) : Unit
+  def warning(definition: Definition, msg: Any) : Unit
+  def info(definition: Definition, msg: Any) : Unit 
+  def fatalError(definition: Definition, msg: Any) : Nothing
+
+  def error(expr: Expr, msg: Any) : Unit
+  def warning(expr: Expr, msg: Any) : Unit
+  def info(expr: Expr, msg: Any) : Unit
+  def fatalError(expr: Expr, msg: Any) : Nothing
+}
+
+object DefaultReporter extends Reporter {
+  private val errorPfx = "Error: "
+  private val warningPfx = "Warning: "
+  private val infoPfx = "Info: "
+  private val fatalPfx = "Fatal error: "
+
+  def output(msg: String) : Unit = {
+    Console.err.println(msg)
+    Console.err.println("")
+  }
+
+  def error(msg: Any) = output(errorPfx + msg.toString)
+  def warning(msg: Any) = output(warningPfx + msg.toString)
+  def info(msg: Any) = output(infoPfx + msg.toString)
+  def fatalError(msg: Any) = { output(fatalPfx + msg.toString); exit(0) }
+  def error(definition: Definition, msg: Any) = output(errorPfx + "\n" + PrettyPrinter(definition) + msg.toString)
+  def warning(definition: Definition, msg: Any) = output(warningPfx + "\n" + PrettyPrinter(definition) + msg.toString)
+  def info(definition: Definition, msg: Any) = output(infoPfx + "\n" + PrettyPrinter(definition) + msg.toString)
+  def fatalError(definition: Definition, msg: Any) = { output(fatalPfx + "\n" + PrettyPrinter(definition) + msg.toString); exit(0) }
+  def error(expr: Expr, msg: Any) = output(errorPfx + "\n" + PrettyPrinter(expr) + msg.toString) 
+  def warning(expr: Expr, msg: Any) = output(warningPfx + "\n" + PrettyPrinter(expr) + msg.toString) 
+  def info(expr: Expr, msg: Any) = output(infoPfx + "\n" + PrettyPrinter(expr) + msg.toString) 
+  def fatalError(expr: Expr, msg: Any) = { output(fatalPfx + "\n" + PrettyPrinter(expr) + msg.toString); exit(0) }
+}
-- 
GitLab