summaryrefslogtreecommitdiff
path: root/tiger-compiler/lib/misc/contract.cc
blob: 3dc70be589e5fdacf93a820e97a83792079105e2 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
/** \file misc/contract.cc
 ** \brief Implementation for contract.hh
 */

#include <cstdlib>
#include <iostream>

#include <misc/contract.hh>

Contract::Contract(const char* condType,
                   const char* condText,
                   const char* fileName,
                   int fileLine)
  : condType(condType)
  , condText(condText)
  , fileName(fileName)
  , fileLine(fileLine)
{}

Contract::~Contract()
{
  const std::string message = std::string(condType) + ' ' + condText + " was false";
  __Terminate(fileName, fileLine, message.c_str());
}

void __Terminate(const char* fileName, int fileLine, const char* reason)
{
  std::cerr << fileName << ":" << fileLine << ": Program abortion (" << reason
            << ")\n";
  abort();
}