Skip to content
Snippets Groups Projects
Commit a63ef146 authored by Peter Matta's avatar Peter Matta
Browse files

basic CLI added

parent 4d00c92e
No related branches found
No related tags found
No related merge requests found
set(HEADERS
${CMAKE_CURRENT_SOURCE_DIR}/CompilerInstance.h
${CMAKE_CURRENT_SOURCE_DIR}/CompilerInvocation.h
${CMAKE_CURRENT_SOURCE_DIR}/Formatter.h
${CMAKE_CURRENT_SOURCE_DIR}/SourceFile.h
${HEADERS}
PARENT_SCOPE
......
//===--- Formatter.h - Dusk foramtter ---------------------------*- C++ -*-===//
//
// dusk-lang
// This source file is part of a dusk-lang project, which is a semestral
// assignement for BI-PJP course at Czech Technical University in Prague.
// The software is provided "AS IS", WITHOUT WARRANTY OF ANY KIND.
//
//===----------------------------------------------------------------------===//
#ifndef DUSK_FORMATTER_H
#define DUSK_FORMATTER_H
#include "dusk/Basic/LLVM.h"
#include "dusk/AST/ASTContext.h"
#include "llvm/Support/raw_ostream.h"
namespace dusk {
class Formatter {
ASTContext &Ctx;
raw_ostream &OS;
public:
Formatter(ASTContext &C, raw_ostream &OS): Ctx(C), OS(OS) {}
void format();
};
} // namespace dusk
#endif /* DUSK_FORMATTER_H */
......@@ -8,6 +8,7 @@
//===----------------------------------------------------------------------===//
 
#include "dusk/AST/ASTPrinter.h"
#include "dusk/AST/Decl.h"
#include "dusk/AST/Expr.h"
#include "dusk/AST/Stmt.h"
......@@ -15,6 +16,7 @@
#include "dusk/AST/Type.h"
#include "dusk/AST/ASTVisitor.h"
#include "dusk/Basic/TokenDefinition.h"
#include "dusk/Frontend/Formatter.h"
 
using namespace dusk;
 
......@@ -498,11 +500,11 @@ StreamPrinter::StreamPrinter(raw_ostream &OS) : OS(OS) {}
 
void StreamPrinter::printText(StringRef Text) { OS << Text; }
 
//// MARK: - Formatter
//
//void Formatter::format(ASTNode *N, raw_ostream &OS) {
// PrettyPrinter pp(OS);
// PrintAST p(pp);
// p.ASTVisitor::visit(N);
//}
//
// MARK: - Formatter
void Formatter::format() {
PrettyPrinter pp(OS);
PrintAST p(pp);
p.ASTVisitor::visit(Ctx.getRootModule());
}
set(SOURCE
${CMAKE_CURRENT_SOURCE_DIR}/CompilerInstance.cpp
${CMAKE_CURRENT_SOURCE_DIR}/CompilerInvocation.cpp
${CMAKE_CURRENT_SOURCE_DIR}/SourceFile.cpp
${SOURCE}
PARENT_SCOPE
)
......@@ -25,11 +25,11 @@ SourceFile *CompilerInstance::getInputFile() {
}
 
void CompilerInstance::performCompilation() {
llvm_unreachable("Not implemented");
}
 
void CompilerInstance::performSema() {
llvm_unreachable("Not implemented");
}
 
void CompilerInstance::performParseOnly() {
......@@ -37,6 +37,7 @@ void CompilerInstance::performParseOnly() {
auto InputFile = Invocation.getInputFile();
Parser P(*Context, SourceManager, *InputFile, Diag, InputFile->bufferID());
MainModule = P.parseModule();
Context->setRootModule(MainModule);
}
 
void CompilerInstance::freeContext() {
......
......@@ -30,6 +30,5 @@ int main(int argc, const char *argv[]) {
initCompilerInstance(Compiler);
 
Compiler.performParseOnly();
return 0;
}
#include "dusk/Basic/LLVM.h"
#include "dusk/Frontend/CompilerInvocation.h"
#include "dusk/Frontend/CompilerInstance.h"
#include "dusk/Frontend/Formatter.h"
#include "llvm/ADT/StringRef.h"
#include "llvm/Support/CommandLine.h"
#include <iostream>
#include <string>
 
#include "dusk/Frontend/Compiler.h"
using namespace dusk;
using namespace llvm;
 
int main() {
std::cout << "Hello from duskc\n";
cl::opt<std::string> InFile(cl::Positional, cl::Required,
cl::desc("<input file>"), cl::init("-"));
cl::opt<std::string> OutFile("o", cl::desc("Specify output filename"),
cl::value_desc("<filename>"));
cl::opt<bool> IsQuiet("quiet", cl::desc("Suppress diagnostics"));
cl::alias IsQuiet2("q", cl::desc("Suppress diagnostics"),
cl::aliasopt(IsQuiet));
void initCompilerInstance(CompilerInstance &C) {
CompilerInvocation Inv;
Inv.setArgs(C.getSourceManager(), C.getDiags(), InFile, OutFile, IsQuiet);
C.reset(std::move(Inv));
}
int main(int argc, const char *argv[]) {
cl::ParseCommandLineOptions(argc, argv);
CompilerInstance Compiler;
initCompilerInstance(Compiler);
Compiler.performParseOnly();
if (Compiler.hasASTContext() && !Compiler.getContext().isError()) {
Formatter F(Compiler.getContext(), llvm::errs());
F.format();
return 0;
} else {
return 1;
}
}
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment