Commit 224e7e2f authored by Paul Asmuth's avatar Paul Asmuth
Browse files

add 'stack traces' to error messages

parent 8f1bc91c
Loading
Loading
Loading
Loading
+1 −1
Original line number Diff line number Diff line
@@ -71,7 +71,7 @@ foreach(spec_test_path ${spec_test_files})
  add_test(
      NAME ${spec_test_name}_svg
      WORKING_DIRECTORY ${CMAKE_CURRENT_SOURCE_DIR}
      COMMAND ${CMAKE_CURRENT_SOURCE_DIR}/tests/spec/test_runner.sh ${CMAKE_CURRENT_BINARY_DIR}/fviz ${spec_test_path} ${CMAKE_CURRENT_BINARY_DIR}/${spec_test_name}.svg ${spec_test_srcdir}/${spec_test_name}.svg)
      COMMAND ${CMAKE_CURRENT_SOURCE_DIR}/tests/spec/test_runner.sh ${CMAKE_CURRENT_BINARY_DIR}/fviz ${spec_test_name} ${spec_test_srcdir} ${CMAKE_CURRENT_BINARY_DIR})
endforeach()

file(GLOB example_test_files "examples/**/*.fvz")
+2 −8
Original line number Diff line number Diff line
@@ -102,18 +102,12 @@ int main(int argc, const char** argv) {
  }

  if (!fviz_configure_file(ctx, flag_in.c_str())) {
    std::cerr
        << "ERROR: error while parsing configuration: "
        << fviz_geterror(ctx)
        << std::endl;
    fviz_printerror(ctx);
    return EXIT_FAILURE;
  }

  if (!fviz_render_file(ctx, flag_out.c_str(), fmt.c_str())) {
    std::cerr
        << "ERROR: error while rendering: "
        << fviz_geterror(ctx)
        << std::endl;
    fviz_printerror(ctx);
    return EXIT_FAILURE;
  }

+0 −1
Original line number Diff line number Diff line
@@ -51,6 +51,5 @@ struct Element {
  ElementSizeHintFn size_hint;
};


} // namespace fviz
+14 −8
Original line number Diff line number Diff line
@@ -22,17 +22,27 @@ ReturnCode element_build(
    const Environment& env,
    const Expr* expr,
    ElementRef* elem) {
  if (!expr || !expr_is_value(expr)) {
  if (!expr || !expr_is_list(expr)) {
    return error(ERROR, "expected an element list");
  }

  auto args = expr_get_list(expr);
  if (!args || !expr_is_value(args)) {
    return error(ERROR, "expected an element name");
  }

  auto elem_name = expr_get_value(expr);
  auto elem_name = expr_get_value(args);
  auto elem_iter = env.element_map.elements.find(elem_name);
  if (elem_iter == env.element_map.elements.end()) {
    return errorf(ERROR, "no such element: {}", elem_name);
  }

  return elem_iter->second(env, expr, elem);
  auto rc = elem_iter->second(env, args, elem);
  if (!rc) {
    rc.trace.push_back(expr);
  }

  return rc;
}

ReturnCode element_build_all(
@@ -40,12 +50,8 @@ ReturnCode element_build_all(
    const Expr* expr,
    std::vector<ElementRef>* elems) {
  for (; expr; expr = expr_next(expr)) {
    if (!expr_is_list(expr)) {
      return error(ERROR, "expected an element list");
    }

    ElementRef elem;
    if (auto rc = element_build(env, expr_get_list(expr), &elem); !rc) {
    if (auto rc = element_build(env, expr, &elem); !rc) {
      return rc;
    }

+7 −16
Original line number Diff line number Diff line
@@ -42,7 +42,7 @@ struct fviz_s {
  Environment env;
  ElementMap elements;
  ExprStorage expr;
  std::string error;
  ReturnCode error;
};

fviz_t* fviz_init() {
@@ -66,31 +66,22 @@ fviz_t* fviz_init() {
}

const char* fviz_geterror(const fviz_t* ctx) {
  return ctx->error.c_str();
  return ctx->error.message.c_str();
}

void fviz_seterrf(fviz_t* ctx, const std::string& err) {
  ctx->error = err;
}

template <typename... T>
void fviz_seterrf(fviz_t* ctx, const std::string& err, T... args) {
  ctx->error = fmt::format(err, args...);
void fviz_printerror(const fviz_t* ctx) {
  error_print(ctx->error, std::cerr);
}

void fviz_seterr(fviz_t* ctx, const ReturnCode& err) {
  ctx->error = err.message;
  ctx->error = err;
}

int fviz_configure(
    fviz_t* ctx,
    const char* config) {
  if (auto rc = expr_parse(config, strlen(config), &ctx->expr); !rc) {
    fviz_seterrf(
        ctx,
        "invalid element specification: {}",
        rc.message);

    fviz_seterr(ctx, rc);
    return ERROR;
  }

@@ -149,7 +140,7 @@ int fviz_render_file(fviz_t* ctx, const char* path, const char* fmt) {
  if (format == "png")
    return fviz_render_png_file(ctx, path);

  fviz_seterrf(ctx, "invalid output format: {}", format);
  fviz_seterr(ctx, errorf(ERROR, "invalid output format: {}", format));
  return ERROR;
}

Loading