Example #1
0
void ParserDriver::addType(std::unique_ptr<AstType> type) {
    const auto& name = type->getName();
    if (const AstType* prev = translationUnit->getProgram()->getType(name)) {
        Diagnostic err(Diagnostic::ERROR,
                DiagnosticMessage("Redefinition of type " + toString(name), type->getSrcLoc()),
                {DiagnosticMessage("Previous definition", prev->getSrcLoc())});
        translationUnit->getErrorReport().addDiagnostic(err);
    } else {
        translationUnit->getProgram()->addType(std::move(type));
    }
}
Example #2
0
void ParserDriver::addFunctorDeclaration(std::unique_ptr<AstFunctorDeclaration> f) {
    const std::string& name = f->getName();
    if (AstFunctorDeclaration* prev = translationUnit->getProgram()->getFunctorDeclaration(name)) {
        Diagnostic err(Diagnostic::ERROR,
                DiagnosticMessage("Redefinition of functor " + toString(name), f->getSrcLoc()),
                {DiagnosticMessage("Previous definition", prev->getSrcLoc())});
        translationUnit->getErrorReport().addDiagnostic(err);
    } else {
        translationUnit->getProgram()->addFunctorDeclaration(std::move(f));
    }
}
Example #3
0
void ParserDriver::addRelation(std::unique_ptr<AstRelation> r) {
    const auto& name = r->getName();
    if (AstRelation* prev = translationUnit->getProgram()->getRelation(name)) {
        Diagnostic err(Diagnostic::ERROR,
                DiagnosticMessage("Redefinition of relation " + toString(name), r->getSrcLoc()),
                {DiagnosticMessage("Previous definition", prev->getSrcLoc())});
        translationUnit->getErrorReport().addDiagnostic(err);
    } else {
        if (!r->getStores().empty() || !r->getLoads().empty()) {
            translationUnit->getErrorReport().addWarning(
                    "Deprecated io qualifier was used in relation " + toString(name), r->getSrcLoc());
        }
        translationUnit->getProgram()->addRelation(std::move(r));
    }
}
Example #4
0
void ParserDriver::addStore(std::unique_ptr<AstStore> d) {
    if (dynamic_cast<AstPrintSize*>(d.get()) != nullptr) {
        for (const auto& cur : translationUnit->getProgram()->getStores()) {
            if (cur->getName() == d->getName() && dynamic_cast<AstPrintSize*>(cur.get()) != nullptr) {
                Diagnostic err(Diagnostic::ERROR,
                        DiagnosticMessage(
                                "Redefinition of printsize directives for relation " + toString(d->getName()),
                                d->getSrcLoc()),
                        {DiagnosticMessage("Previous definition", cur->getSrcLoc())});
                translationUnit->getErrorReport().addDiagnostic(err);
                return;
            }
        }
    }
    translationUnit->getProgram()->addStore(std::move(d));
}