🐛 fix error report bug in import.cpp
This commit is contained in:
parent
f7f4a38b47
commit
9f7484596a
|
@ -8,6 +8,7 @@
|
|||
#include <iostream>
|
||||
#include <fstream>
|
||||
#include <cstring>
|
||||
#include <sstream>
|
||||
#include <cmath>
|
||||
|
||||
// abbreviation of some useful basic type
|
||||
|
|
|
@ -1303,7 +1303,7 @@ void codegen::print(std::ostream& out) {
|
|||
out << std::hex << "<0x" << func_begin_stack.top() << std::dec << ">;\n";
|
||||
// avoid two empty lines
|
||||
if (c.op!=op_newf) {
|
||||
out<<"\n";
|
||||
out << "\n";
|
||||
}
|
||||
func_begin_stack.pop();
|
||||
func_end_stack.pop();
|
||||
|
@ -1322,7 +1322,7 @@ void codegen::print(std::ostream& out) {
|
|||
}
|
||||
|
||||
// output bytecode
|
||||
out << " " << codestream(c,i) << "\n";
|
||||
out << " " << codestream(c, i) << "\n";
|
||||
}
|
||||
}
|
||||
|
||||
|
|
|
@ -198,8 +198,10 @@ code_block* linker::import_regular_file(call_expr* node) {
|
|||
return new code_block({0, 0, 0, 0, filename});
|
||||
}
|
||||
if (check_self_import(filename)) {
|
||||
err.err("link", "self-referenced module <" + filename + ">:\n" +
|
||||
" reference path: " + generate_self_import_path(filename));
|
||||
err.err("link",
|
||||
"self-referenced module <" + filename + ">:\n" +
|
||||
" reference path: " + generate_self_import_path(filename)
|
||||
);
|
||||
return new code_block({0, 0, 0, 0, filename});
|
||||
}
|
||||
exist(filename);
|
||||
|
@ -208,16 +210,19 @@ code_block* linker::import_regular_file(call_expr* node) {
|
|||
// start importing...
|
||||
if (lex.scan(filename).geterr()) {
|
||||
err.err("link", "error occurred when analysing <" + filename + ">");
|
||||
return new code_block({0, 0, 0, 0, filename});
|
||||
}
|
||||
if (par.compile(lex).geterr()) {
|
||||
err.err("link", "error occurred when analysing <" + filename + ">");
|
||||
return new code_block({0, 0, 0, 0, filename});
|
||||
}
|
||||
auto tmp = par.swap(nullptr);
|
||||
|
||||
// check if tmp has 'import'
|
||||
auto res = load(tmp, find(filename));
|
||||
auto parse_result = par.swap(nullptr);
|
||||
|
||||
// check if parse result has 'import'
|
||||
auto result = load(parse_result, find(filename));
|
||||
module_load_stack.pop_back();
|
||||
return res;
|
||||
return result;
|
||||
}
|
||||
|
||||
code_block* linker::import_nasal_lib() {
|
||||
|
@ -239,16 +244,18 @@ code_block* linker::import_nasal_lib() {
|
|||
err.err("link",
|
||||
"error occurred when analysing library <" + filename + ">"
|
||||
);
|
||||
return new code_block({0, 0, 0, 0, filename});
|
||||
}
|
||||
if (par.compile(lex).geterr()) {
|
||||
err.err("link",
|
||||
"error occurred when analysing library <" + filename + ">"
|
||||
);
|
||||
return new code_block({0, 0, 0, 0, filename});
|
||||
}
|
||||
auto tmp = par.swap(nullptr);
|
||||
|
||||
// check if tmp has 'import'
|
||||
return load(tmp, find(filename));
|
||||
auto parse_result = par.swap(nullptr);
|
||||
// check if library has 'import' (in fact it should not)
|
||||
return load(parse_result, find(filename));
|
||||
}
|
||||
|
||||
std::string linker::generate_module_name(const std::string& file_path) {
|
||||
|
|
|
@ -7,7 +7,7 @@
|
|||
|
||||
namespace nasal {
|
||||
|
||||
class optimizer:public ast_visitor {
|
||||
class optimizer: public ast_visitor {
|
||||
private:
|
||||
void const_string(binary_operator*, string_literal*, string_literal*);
|
||||
void const_number(binary_operator*, number_literal*, number_literal*);
|
||||
|
|
|
@ -9,7 +9,7 @@
|
|||
|
||||
namespace nasal {
|
||||
|
||||
class symbol_finder:public ast_visitor {
|
||||
class symbol_finder: public ast_visitor {
|
||||
public:
|
||||
struct symbol_info {
|
||||
std::string name;
|
||||
|
|
Loading…
Reference in New Issue