NewLang Project
Yet another programm language
|
#include <analysis.h>
Static Public Member Functions | |
static std::string | MakeInclude (const TermPtr &ast) |
static bool | CheckStrPrintf (const std::string_view format, TermPtr args, int start) |
static bool | CheckStrFormat (const std::string_view format, TermPtr args, RunTime *rt) |
static std::string | MakeFormat (const std::string_view format, TermPtr args, RunTime *rt) |
static fmt::dynamic_format_arg_store< fmt::format_context > | MakeFormatArgs (TermPtr args, RunTime *rt) |
template<typename T > | |
static std::string | ConvertToVFormat_ (const std::string_view format, T &args) |
Public Attributes | |
RunTime & | m_rt |
Diag * | m_diag |
Protected Member Functions | |
AstAnalysis (const AstAnalysis &)=delete | |
const AstAnalysis & | operator= (const AstAnalysis &)=delete |
Definition at line 24 of file analysis.h.
|
protecteddelete |
Definition at line 34 of file analysis.h.
|
protecteddelete |
|
static |
Definition at line 1695 of file analysis.cpp.
References ASSERT, newlang::Term::isExportName(), newlang::MACRO_DEL, newlang::MACRO_SEQ, MakeInclude(), and result.
Referenced by MakeInclude(), and newlang::JIT::ModuleCreate().
bool AstAnalysis::Analyze | ( | TermPtr | term, |
NameLookupStack * | stack_ptr = nullptr ) |
Definition at line 1484 of file analysis.cpp.
References Analyze().
Referenced by Analyze(), newlang::RunTime::ParseBuildin(), and newlang::JIT::Run().
bool AstAnalysis::Analyze | ( | BlockType & | block, |
NameLookupStack * | stack_ptr = nullptr ) |
Definition at line 1489 of file analysis.cpp.
References LOG_PARSER, m_diag, newlang::Diag::m_error_count, m_rt, and RecursiveAnalyzer().
bool AstAnalysis::RecursiveAnalyzer | ( | TermPtr | term, |
NameLookupStack & | stack ) |
Definition at line 1543 of file analysis.cpp.
References newlang::ARGS, newlang::ARGUMENT, ASSERT, newlang::ASSIGN, newlang::BLOCK, newlang::BLOCK_MINUS, newlang::BLOCK_PLUS, newlang::BLOCK_TRY, CheckCall(), CheckDoWhile_(), CheckError(), CheckFollow_(), CheckItems_(), CheckMatching_(), CheckOpType(), CheckTake_(), CheckWhile_(), CheckWith_(), CkeckRange_(), newlang::CREATE_NEW, newlang::CREATE_USE, CreateOp_(), newlang::DICT, newlang::DOWHILE, newlang::NameLookupStack::Dump(), newlang::EMBED, newlang::END, newlang::EVAL, newlang::FOLLOW, newlang::INT_MINUS, newlang::INT_PLUS, newlang::INT_REPEAT, newlang::INTEGER, newlang::ITERATOR, Iterator_(), newlang::LOCAL, LOG_LEVEL_INFO, newlang::NameLookupStack::LookupBlock_(), LookupName(), newlang::RunTime::m_embed_source, newlang::RunTime::m_eval_enable, newlang::RunTime::m_import_module, m_rt, newlang::MATCHING, newlang::MODULE, newlang::NAME, newlang::NAMESPACE, NL_MESSAGE, newlang::NUMBER, newlang::OP_COMPARE, newlang::OP_MATH, newlang::PURE_NEW, newlang::PURE_USE, newlang::RANGE, newlang::RATIONAL, RecursiveAnalyzer(), newlang::SEQUENCE, newlang::STATIC, newlang::STRCHAR, newlang::STRWIDE, newlang::TAKE, newlang::TENSOR, newlang::toString(), newlang::TYPE, UpcastOpType(), newlang::WHILE, and newlang::WITH.
Referenced by Analyze(), CheckCall(), CheckCallArg(), CheckDims(), CheckDoWhile_(), CheckFollow_(), CheckIndex_(), CheckItems_(), CheckTake_(), CheckWhile_(), CkeckRange_(), CreateOp_(), Iterator_(), and RecursiveAnalyzer().
bool AstAnalysis::CreateOp_ | ( | TermPtr & | term, |
NameLookupStack & | stack ) |
Definition at line 568 of file analysis.cpp.
References newlang::NameLookupStack::AddName(), newlang::Any, ASSERT, newlang::ASSIGN, newlang::canCast(), CheckAssignRef(), CheckCall(), CheckField_(), CheckIndex_(), CheckNative_(), CheckOpType(), newlang::COMMENT, newlang::Term::CreateDict(), newlang::Term::CreateName(), newlang::Term::CreateNil(), newlang::ELLIPSIS, newlang::FIELD, newlang::FUNCTION, newlang::getDefaultType(), newlang::INDEX, newlang::isDefaultType(), LOG_LEVEL_INFO, LookupName(), newlang::NameLookupStack::MakeInternalName(), newlang::NAME, newlang::NATIVE, NL_MESSAGE, newlang::NormalizeName(), RecursiveAnalyzer(), newlang::NameLookupStack::SetLookupNamespace(), and newlang::toString().
Referenced by RecursiveAnalyzer().
bool newlang::AstAnalysis::CreateVar | ( | TermPtr & | var, |
TermPtr & | value, | ||
NameLookupStack & | stack ) |
bool newlang::AstAnalysis::AssignVar | ( | TermPtr & | var, |
TermPtr & | value, | ||
NameLookupStack & | stack ) |
bool AstAnalysis::Iterator_ | ( | TermPtr & | term, |
NameLookupStack & | stack ) |
Definition at line 429 of file analysis.cpp.
References ASSERT, newlang::ITERATOR, and RecursiveAnalyzer().
Referenced by RecursiveAnalyzer().
TermPtr AstAnalysis::CheckField_ | ( | TermPtr & | term, |
TermPtr & | field, | ||
NameLookupStack & | stack ) |
Definition at line 495 of file analysis.cpp.
References LOG_LEVEL_INFO, and NL_MESSAGE.
Referenced by CreateOp_().
bool AstAnalysis::CheckIndex_ | ( | TermPtr & | term, |
TermPtr & | index, | ||
TermPtr & | value, | ||
NameLookupStack & | stack ) |
Definition at line 500 of file analysis.cpp.
References newlang::ARGS, newlang::ARGUMENT, ASSERT, newlang::canCast(), CheckCall(), newlang::DICT, newlang::Int8, newlang::isStringChar(), newlang::isStringWide(), newlang::LOCAL, LOG_LEVEL_INFO, LookupName(), newlang::RunTime::m_integer_type, m_rt, newlang::RunTime::m_wide_char_type, newlang::NAME, NL_MESSAGE, RecursiveAnalyzer(), newlang::STATIC, newlang::STRCHAR, newlang::STRWIDE, newlang::TENSOR, newlang::toString(), newlang::TYPE, and newlang::typeFromString().
Referenced by CreateOp_().
bool AstAnalysis::CheckItems_ | ( | TermPtr & | term, |
NameLookupStack & | stack ) |
Definition at line 1688 of file analysis.cpp.
References RecursiveAnalyzer().
Referenced by RecursiveAnalyzer().
TermPtr AstAnalysis::CheckGetValue_ | ( | TermPtr & | obj, |
NameLookupStack & | stack ) |
Definition at line 487 of file analysis.cpp.
bool AstAnalysis::CheckSetValue_ | ( | TermPtr & | obj, |
TermPtr & | value, | ||
NameLookupStack & | stack ) |
Definition at line 491 of file analysis.cpp.
TermPtr AstAnalysis::LookupName | ( | TermPtr & | term, |
NameLookupStack & | stack ) |
Definition at line 1515 of file analysis.cpp.
References ASSERT, CheckOpType(), newlang::GlobalObjects::Dump(), newlang::GlobalObjects::FindObject(), newlang::isReservedName(), LOG_LEVEL_INFO, newlang::NameLookupStack::LookupName(), m_rt, NL_MESSAGE, result, and newlang::VariablePair::term.
Referenced by CheckAssignRef(), CheckIndex_(), CreateOp_(), and RecursiveAnalyzer().
bool newlang::AstAnalysis::CheckNative_ | ( | TermPtr & | term | ) |
Referenced by CreateOp_().
bool AstAnalysis::CheckError | ( | bool | result | ) |
Функция проверки наличия ошибок при анализе AST. Прерывает работу анализатора при превышении лимита или при force=true
force | - Если есть ошибки- завершить работу |
Definition at line 1473 of file analysis.cpp.
References LOG_PARSER, m_diag, newlang::Diag::m_error_count, newlang::Diag::m_error_limit, and result.
Referenced by CheckAssignRef(), CheckCall(), CheckDims(), CheckReference(), and RecursiveAnalyzer().
bool newlang::AstAnalysis::CheckName | ( | TermPtr & | term | ) |
bool newlang::AstAnalysis::CheckOp | ( | TermPtr & | term | ) |
bool newlang::AstAnalysis::CalcType | ( | TermPtr & | term | ) |
bool AstAnalysis::UpcastOpType | ( | TermPtr & | op | ) |
Definition at line 439 of file analysis.cpp.
References newlang::canCast(), newlang::isDefaultType(), LOG_LEVEL_INFO, LOG_TEST, m_rt, NL_MESSAGE, newlang::toString(), and newlang::typeFromString().
Referenced by CreateOp_(), LookupName(), and RecursiveAnalyzer().
Definition at line 874 of file analysis.cpp.
References ASSERT, CheckError(), newlang::isValidReference(), LOG_LEVEL_INFO, NL_MESSAGE, and newlang::RefTypeFromString().
Referenced by CheckAssignRef().
bool AstAnalysis::CheckAssignRef | ( | TermPtr & | left, |
TermPtr & | right, | ||
NameLookupStack & | stack ) |
Definition at line 803 of file analysis.cpp.
References ASSERT, CheckError(), CheckReference(), newlang::isConstRef(), newlang::isLiteSyncRef(), newlang::isReservedName(), LOG_LEVEL_INFO, LookupName(), NL_MESSAGE, and newlang::RefTypeFromString().
Referenced by CreateOp_().
bool AstAnalysis::CheckCall | ( | TermPtr & | proto, |
TermPtr & | call, | ||
NameLookupStack & | stack ) |
Definition at line 891 of file analysis.cpp.
References newlang::Any, ASSERT, newlang::canCast(), CheckCallArg(), CheckError(), CheckStrFormat(), CheckStrPrintf(), newlang::ELLIPSIS, newlang::FIELD, newlang::FmtChar, newlang::FmtWide, newlang::INDEX, newlang::Int8, newlang::Integer, newlang::isDictionary(), newlang::isString(), newlang::isStringChar(), newlang::isStringWide(), newlang::isSystemName(), newlang::isTypeName(), LOG_LEVEL_INFO, m_rt, newlang::RunTime::m_wide_char_type, MakeFormat(), NL_MESSAGE, newlang::Range, RecursiveAnalyzer(), newlang::toString(), and newlang::typeFromString().
Referenced by CheckIndex_(), CreateOp_(), and RecursiveAnalyzer().
bool AstAnalysis::CheckCallArg | ( | TermPtr & | call, |
size_t | arg_pos, | ||
NameLookupStack & | stack ) |
Definition at line 1127 of file analysis.cpp.
References ASSERT, newlang::canCast(), CheckDims(), newlang::ELLIPSIS, newlang::FILLING, LOG_DEBUG, LOG_LEVEL_INFO, NL_MESSAGE, newlang::RANGE, and RecursiveAnalyzer().
Referenced by CheckCall().
void AstAnalysis::CheckDims | ( | TermPtr & | dims, |
NameLookupStack & | stack, | ||
bool | allow_none, | ||
bool | allow_ellipsis ) |
Definition at line 1099 of file analysis.cpp.
References CheckError(), newlang::ELLIPSIS, LOG_LEVEL_INFO, NL_MESSAGE, and RecursiveAnalyzer().
Referenced by CheckCallArg().
bool AstAnalysis::CkeckRange_ | ( | TermPtr & | term, |
NameLookupStack & | stack ) |
Definition at line 345 of file analysis.cpp.
References CalcSummaryType(), newlang::canCast(), newlang::Term::Create(), newlang::INTEGER, LOG_LEVEL_INFO, NL_MESSAGE, and RecursiveAnalyzer().
Referenced by RecursiveAnalyzer().
bool AstAnalysis::CheckFollow_ | ( | TermPtr & | term, |
NameLookupStack & | stack ) |
Definition at line 257 of file analysis.cpp.
References ASSERT, newlang::ELLIPSIS, LOG_LEVEL_INFO, NL_MESSAGE, and RecursiveAnalyzer().
Referenced by RecursiveAnalyzer().
bool AstAnalysis::CheckWhile_ | ( | TermPtr & | term, |
NameLookupStack & | stack ) |
Definition at line 286 of file analysis.cpp.
References ASSERT, and RecursiveAnalyzer().
Referenced by RecursiveAnalyzer().
bool AstAnalysis::CheckDoWhile_ | ( | TermPtr & | term, |
NameLookupStack & | stack ) |
Definition at line 308 of file analysis.cpp.
References ASSERT, and RecursiveAnalyzer().
Referenced by RecursiveAnalyzer().
bool AstAnalysis::CheckMatching_ | ( | TermPtr & | term, |
NameLookupStack & | stack ) |
Definition at line 323 of file analysis.cpp.
References LOG_LEVEL_INFO, and NL_MESSAGE.
Referenced by RecursiveAnalyzer().
bool AstAnalysis::CheckWith_ | ( | TermPtr & | term, |
NameLookupStack & | stack ) |
Definition at line 328 of file analysis.cpp.
References LOG_LEVEL_INFO, and NL_MESSAGE.
Referenced by RecursiveAnalyzer().
bool AstAnalysis::CheckTake_ | ( | TermPtr & | term, |
NameLookupStack & | stack ) |
Definition at line 333 of file analysis.cpp.
References ASSERT, and RecursiveAnalyzer().
Referenced by RecursiveAnalyzer().
Definition at line 375 of file analysis.cpp.
References ASSERT, newlang::RunTime::GetNativeAddress(), LOG_LEVEL_INFO, newlang::RunTime::m_import_native, m_rt, newlang::NATIVE, and NL_MESSAGE.
Definition at line 38 of file analysis.cpp.
Referenced by CheckArgs_().
Definition at line 57 of file analysis.cpp.
References newlang::Any, ASSERT, newlang::RunTime::BaseTypeFromString(), CheckArgsType_(), newlang::isSystemName(), m_rt, and NL_PARSER.
|
static |
Definition at line 1319 of file analysis.cpp.
References ASSERT, newlang::canCast(), newlang::Float64, newlang::Int16, newlang::Int32, newlang::Int64, newlang::Int8, newlang::isSystemName(), LOG_LEVEL_INFO, NL_MESSAGE, newlang::None, newlang::Pointer, result, newlang::StrChar, newlang::StrWide, and newlang::toString().
Referenced by CheckCall().
|
static |
Definition at line 1305 of file analysis.cpp.
References ASSERT, ConvertToVFormat_(), LOG_LEVEL_INFO, MakeFormatArgs(), and NL_MESSAGE.
Referenced by CheckCall().
|
static |
Definition at line 1290 of file analysis.cpp.
References ASSERT, ConvertToVFormat_(), LOG_RUNTIME, LOG_TEST, MakeFormatArgs(), and result.
Referenced by CheckCall().
|
static |
Definition at line 1251 of file analysis.cpp.
References newlang::Bool, newlang::Byte, newlang::Char, newlang::Double, newlang::DWord, newlang::DWord64, newlang::Float16, newlang::Float32, newlang::Float64, newlang::Int16, newlang::Int32, newlang::Int64, newlang::Int8, newlang::parseDouble(), newlang::parseInteger(), newlang::Single, newlang::typeFromString(), and newlang::Word.
Referenced by CheckStrFormat(), and MakeFormat().
|
inlinestatic |
Definition at line 115 of file analysis.h.
References ASSERT, LOG_RUNTIME, and result.
Referenced by CheckStrFormat(), MakeFormat(), and newlang::Context::StringFormat().
TermPtr AstAnalysis::CalcSummaryType | ( | const TermPtr & | term, |
NameLookupStack & | stack ) |
Definition at line 193 of file analysis.cpp.
References ASSERT, newlang::canCast(), newlang::GetBaseTypeFromString(), newlang::getDefaultType(), LOG_LEVEL_INFO, NL_MESSAGE, newlang::None, newlang::RANGE, and newlang::toString().
Referenced by CkeckRange_().
RunTime& newlang::AstAnalysis::m_rt |
Definition at line 31 of file analysis.h.
Referenced by Analyze(), CheckArgs_(), CheckCall(), CheckIndex_(), CheckNative_(), CheckOpType(), LookupName(), and RecursiveAnalyzer().
Diag* newlang::AstAnalysis::m_diag |
Definition at line 32 of file analysis.h.
Referenced by Analyze(), and CheckError().