mirror of
https://github.com/ton-blockchain/ton
synced 2025-03-09 15:40:10 +00:00
[FunC] Add an ability to deprecate pragmas
This commit is contained in:
parent
de570873d7
commit
bb86dc0f96
2 changed files with 35 additions and 17 deletions
|
@ -77,6 +77,37 @@ bool SymValCodeFunc::does_need_codegen() const {
|
||||||
// in the future, we may want to implement a true AST inlining for `inline` functions also
|
// in the future, we may want to implement a true AST inlining for `inline` functions also
|
||||||
}
|
}
|
||||||
|
|
||||||
|
void GlobalPragma::enable(SrcLocation loc) {
|
||||||
|
if (deprecated_from_v_) {
|
||||||
|
loc.show_warning(PSTRING() << "#pragma " << name_ <<
|
||||||
|
" is deprecated since FunC v" << deprecated_from_v_ <<
|
||||||
|
". Please, remove this line from your code.");
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
enabled_ = true;
|
||||||
|
locs_.push_back(std::move(loc));
|
||||||
|
}
|
||||||
|
|
||||||
|
void GlobalPragma::check_enable_in_libs() {
|
||||||
|
if (locs_.empty()) {
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
for (const SrcLocation& loc : locs_) {
|
||||||
|
if (loc.fdescr->is_main) {
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
locs_[0].show_warning(PSTRING() << "#pragma " << name_
|
||||||
|
<< " is enabled in included libraries, it may change the behavior of your code. "
|
||||||
|
<< "Add this #pragma to the main source file to suppress this warning.");
|
||||||
|
}
|
||||||
|
|
||||||
|
void GlobalPragma::always_on_and_deprecated(const char *deprecated_from_v) {
|
||||||
|
deprecated_from_v_ = deprecated_from_v;
|
||||||
|
enabled_ = true;
|
||||||
|
}
|
||||||
|
|
||||||
td::Result<std::string> fs_read_callback(ReadCallback::Kind kind, const char* query) {
|
td::Result<std::string> fs_read_callback(ReadCallback::Kind kind, const char* query) {
|
||||||
switch (kind) {
|
switch (kind) {
|
||||||
case ReadCallback::Kind::ReadFile: {
|
case ReadCallback::Kind::ReadFile: {
|
||||||
|
|
|
@ -1769,27 +1769,14 @@ class GlobalPragma {
|
||||||
bool enabled() const {
|
bool enabled() const {
|
||||||
return enabled_;
|
return enabled_;
|
||||||
}
|
}
|
||||||
void enable(SrcLocation loc) {
|
void enable(SrcLocation loc);
|
||||||
enabled_ = true;
|
void check_enable_in_libs();
|
||||||
locs_.push_back(std::move(loc));
|
void always_on_and_deprecated(const char *deprecated_from_v);
|
||||||
}
|
|
||||||
void check_enable_in_libs() {
|
|
||||||
if (locs_.empty()) {
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
for (const SrcLocation& loc : locs_) {
|
|
||||||
if (loc.fdescr->is_main) {
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
locs_[0].show_warning(PSTRING() << "#pragma " << name_
|
|
||||||
<< " is enabled in included libraries, it may change the behavior of your code. "
|
|
||||||
<< "Add this #pragma to the main source file to suppress this warning.");
|
|
||||||
}
|
|
||||||
|
|
||||||
private:
|
private:
|
||||||
std::string name_;
|
std::string name_;
|
||||||
bool enabled_ = false;
|
bool enabled_ = false;
|
||||||
|
const char *deprecated_from_v_ = nullptr;
|
||||||
std::vector<SrcLocation> locs_;
|
std::vector<SrcLocation> locs_;
|
||||||
};
|
};
|
||||||
extern GlobalPragma pragma_allow_post_modification, pragma_compute_asm_ltr, pragma_remove_unused_functions;
|
extern GlobalPragma pragma_allow_post_modification, pragma_compute_asm_ltr, pragma_remove_unused_functions;
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue