36#include <gtest/gtest.h>
50 "func add x y = add x y\n"});
51 inputs.append({
"main.line",
53 "let answer = call add 40 2\n"});
68 " add = Function(add)\n"
69 " answer = Int(42)\n");
81 const auto *
surface =
driver.find_artifact(
"modules.surface");
87 const auto *
linkage =
driver.find_artifact(
"modules.linkage");
90 EXPECT_NE(
linkage->text.find(
"Module(main.line) order=1"), std::string::npos);
91 EXPECT_NE(
linkage->text.find(
"Visible(Function(add)) from math.line imported"),
93 EXPECT_NE(
linkage->text.find(
"Visible(Global(answer)) from main.line local"),
95 const auto * binding =
driver.find_artifact(
"modules.binding");
97 EXPECT_NE(binding->text.find(
"ModuleBindings"), std::string::npos);
98 EXPECT_NE(binding->text.find(
"Bind(Function(add)) -> math.line imported"),
100 EXPECT_NE(binding->text.find(
"Bind(Global(answer)) -> main.line local"),
102 const auto * names =
driver.find_artifact(
"modules.names");
104 EXPECT_NE(names->text.find(
"ModuleNameTable"), std::string::npos);
105 EXPECT_NE(names->text.find(
"Name(Function(add)) -> math.line imported"),
135 options.c_backend_options.emit_main =
true;
150 inputs.
append({
"main.line",
"let answer = call missing 1 2\n"});
159 const auto * diagnostics =
driver.find_artifact(
"diagnostics");
161 EXPECT_NE(diagnostics->text.find(
"LIN015"), std::string::npos);
167 inputs.
append({
"helper.line",
"func hidden x y = add x y\n"});
168 inputs.append({
"main.line",
"let answer = call hidden 1 2\n"});
177 const auto * diagnostics =
driver.find_artifact(
"diagnostics");
179 EXPECT_NE(diagnostics->text.find(
"LIN015"), std::string::npos);
186 "import missing.line\n"
187 "let answer = int 1\n"});
196 const auto * diagnostics =
driver.find_artifact(
"diagnostics");
198 EXPECT_NE(diagnostics->text.find(
"LIN017"), std::string::npos);
205 "func add x y = add x +\n"
206 "let answer = call add 1 )\n"});
215 const auto * diagnostics =
driver.find_artifact(
"diagnostics");
217 EXPECT_NE(diagnostics->text.find(
"LIN018"), std::string::npos);
Reusable pipeline driver that operates on any Compiler_Frontend.
Example frontend for a tiny line-oriented language built on reusable contracts.
Reusable orchestration object built on top of Compiler_Frontend.
Small example frontend for a line-oriented language.
T & append()
Allocate a new entry to the end of array.
size_t blossom_maximum_cardinality_matching(const GT &g, DynDlist< typename GT::Arc * > &matching, SA sa=SA())
Alias of compute_maximum_cardinality_general_matching().
Main namespace for Aleph-w library functions.
static struct argp_option options[]
std::string module_name
Prefix used to derive stable C identifiers.
Configuration shared by all runs of Compiler_Generic_Driver.
Compiler_C_Backend_Options c_backend_options
Backend-C emission options used by emit-c.