dvander@25: /* dvander@25: * Copyright (C) 2012 David Anderson dvander@25: * dvander@25: * This file is part of JITCraft. dvander@25: * dvander@25: * JITCraft is free software: you can redistribute it and/or modify it under dvander@25: * the terms of the GNU General Public License as published by the Free dvander@25: * Software Foundation, either version 3 of the License, or (at your option) dvander@25: * any later version. dvander@25: * dvander@25: * Foobar is distributed in the hope that it will be useful, but WITHOUT ANY dvander@25: * WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS dvander@25: * FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. dvander@25: * dvander@25: * You should have received a copy of the GNU General Public License along with dvander@25: * JITCraft. If not, see http://www.gnu.org/licenses/. dvander@25: */ dvander@25: #include dvander@25: #include "Scanner.h" dvander@25: #include "CompileContext.h" dvander@69: #include "Zone.h" danderson@92: #include "Spaces-inl.h" danderson@92: #include "Heap-inl.h" dvander@25: dvander@59: using namespace ke; dvander@25: dvander@69: CompileContext::CompileContext(Zone *zone, const char *file) dvander@25: : zone_(zone), dvander@69: failures_(0), dvander@69: file_(file) dvander@25: { dvander@25: } dvander@25: dvander@69: CompileContext::~CompileContext() dvander@69: { dvander@69: if (failures_) dvander@69: zone_->endCompilationErrors(); dvander@69: } dvander@69: dvander@25: void dvander@25: CompileContext::reportErrorVa(const SourcePosition &pos, Message msg, va_list ap) dvander@25: { dvander@69: if (!failures_) dvander@69: zone_->beginCompilationErrors(file_); dvander@69: dvander@69: zone_->reportCompilationError(msg, pos.line, pos.col, ap); dvander@25: dvander@25: failures_++; dvander@25: } dvander@25: dvander@25: void dvander@25: CompileContext::reportError(const SourcePosition &pos, Message msg, ...) dvander@25: { dvander@25: va_list ap; dvander@25: va_start(ap, msg); dvander@25: reportErrorVa(pos, msg, ap); dvander@25: va_end(ap); dvander@25: }