| 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 ¶llel_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) |
no test coverage detected