MCPcopy Create free account
hub / github.com/covscript/covscript / preprocess

Method preprocess

sources/compiler/codegen.cpp:40–64  ·  view source on GitHub ↗

Source from the content-addressed store, hash-verified

38 }
39
40 void method_import::preprocess(const context_t &context, const std::deque<std::deque<token_base *>> &raw)
41 {
42 tree_type<token_base *> &tree = static_cast<token_expr *>(raw.front().at(1))->get_tree();
43 if (tree.root().data() == nullptr)
44 throw internal_error("Null pointer accessed.");
45 std::vector<std::pair<std::string, var>> var_list;
46 auto process = [&context, &var_list](tree_type<token_base *> &t) {
47 token_base *token = t.root().data();
48 if (token == nullptr || token->get_type() != token_types::id)
49 throw compile_error("Wrong grammar for import statement, expect <package name>");
50 const var_id &package_name = static_cast<token_id *>(token)->get_id();
51 const var &ext = make_namespace(context->instance->import(current_process->import_path, package_name));
52 context->compiler->add_constant(ext);
53 context->instance->storage.add_var_no_return(package_name, ext);
54 var_list.emplace_back(package_name, ext);
55 };
56 if (tree.root().data()->get_type() == token_types::parallel) {
57 auto &parallel_list = static_cast<token_parallel *>(tree.root().data())->get_parallel();
58 for (auto &t : parallel_list)
59 process(t);
60 }
61 else
62 process(tree);
63 mResult.emplace_back(new statement_import(var_list, context, raw.front().back()));
64 }
65
66 statement_base *
67 method_import::translate(const context_t &context, const std::deque<std::deque<token_base *>> &raw)

Callers 2

translateMethod · 0.45
interpretMethod · 0.45

Calls 15

internal_errorClass · 0.85
compile_errorClass · 0.85
make_namespaceFunction · 0.85
dataMethod · 0.80
importMethod · 0.80
add_constantMethod · 0.80
add_var_no_returnMethod · 0.80
is_protectMethod · 0.80
involve_domainMethod · 0.80
check_define_varMethod · 0.80
parse_define_varMethod · 0.80
clear_domainMethod · 0.80

Tested by

no test coverage detected