NewLang Project
Yet another programm language
Loading...
Searching...
No Matches
newlang::AstAnalysis Class Reference

#include <analysis.h>

Public Member Functions

 AstAnalysis (RunTime &rt, Diag *diag)
 
bool Analyze (TermPtr term, NameLookupStack *stack_ptr=nullptr)
 
bool Analyze (BlockType &block, NameLookupStack *stack_ptr=nullptr)
 
bool RecursiveAnalyzer (TermPtr term, NameLookupStack &stack)
 
bool CreateOp_ (TermPtr &term, NameLookupStack &stack)
 
bool CreateVar (TermPtr &var, TermPtr &value, NameLookupStack &stack)
 
bool AssignVar (TermPtr &var, TermPtr &value, NameLookupStack &stack)
 
bool Iterator_ (TermPtr &term, NameLookupStack &stack)
 
TermPtr CheckField_ (TermPtr &term, TermPtr &field, NameLookupStack &stack)
 
bool CheckIndex_ (TermPtr &term, TermPtr &index, TermPtr &value, NameLookupStack &stack)
 
bool CheckItems_ (TermPtr &term, NameLookupStack &stack)
 
TermPtr CheckGetValue_ (TermPtr &obj, NameLookupStack &stack)
 
bool CheckSetValue_ (TermPtr &obj, TermPtr &value, NameLookupStack &stack)
 
TermPtr LookupName (TermPtr &term, NameLookupStack &stack)
 
bool CheckNative_ (TermPtr &term)
 
bool CheckError (bool result)
 
bool CheckName (TermPtr &term)
 
bool CheckOp (TermPtr &term)
 
bool CalcType (TermPtr &term)
 
bool UpcastOpType (TermPtr &op)
 
bool CheckOpType (TermPtr &op, TermPtr &left, const TermPtr right)
 
bool CheckReference (TermPtr &term, const TermPtr &test_ref)
 
bool CheckAssignRef (TermPtr &left, TermPtr &right, NameLookupStack &stack)
 
bool CheckCall (TermPtr &proto, TermPtr &call, NameLookupStack &stack)
 
bool CheckCallArg (TermPtr &call, size_t arg_pos, NameLookupStack &stack)
 
void CheckDims (TermPtr &dims, NameLookupStack &stack, bool allow_none, bool allow_ellipsis)
 
bool CkeckRange_ (TermPtr &term, NameLookupStack &stack)
 
bool CheckFollow_ (TermPtr &term, NameLookupStack &stack)
 
bool CheckWhile_ (TermPtr &term, NameLookupStack &stack)
 
bool CheckDoWhile_ (TermPtr &term, NameLookupStack &stack)
 
bool CheckMatching_ (TermPtr &term, NameLookupStack &stack)
 
bool CheckWith_ (TermPtr &term, NameLookupStack &stack)
 
bool CheckTake_ (TermPtr &term, NameLookupStack &stack)
 
bool CheckNative_ (TermPtr &proto, TermPtr &term)
 
bool CheckArgsType_ (TermPtr proto, TermPtr value)
 
bool CheckArgs_ (TermPtr proto, TermPtr args)
 
TermPtr CalcSummaryType (const TermPtr &term, NameLookupStack &stack)
 

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

RunTimem_rt
 
Diagm_diag
 

Protected Member Functions

 AstAnalysis (const AstAnalysis &)=delete
 
const AstAnalysisoperator= (const AstAnalysis &)=delete
 

Detailed Description

Definition at line 24 of file analysis.h.

Constructor & Destructor Documentation

◆ AstAnalysis() [1/2]

newlang::AstAnalysis::AstAnalysis ( const AstAnalysis & )
protecteddelete

◆ AstAnalysis() [2/2]

newlang::AstAnalysis::AstAnalysis ( RunTime & rt,
Diag * diag )
inline

Definition at line 34 of file analysis.h.

Member Function Documentation

◆ operator=()

const AstAnalysis & newlang::AstAnalysis::operator= ( const AstAnalysis & )
protecteddelete

◆ MakeInclude()

std::string AstAnalysis::MakeInclude ( const TermPtr & ast)
static

◆ Analyze() [1/2]

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().

◆ Analyze() [2/2]

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().

◆ 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().

◆ CreateOp_()

◆ CreateVar()

bool newlang::AstAnalysis::CreateVar ( TermPtr & var,
TermPtr & value,
NameLookupStack & stack )

◆ AssignVar()

bool newlang::AstAnalysis::AssignVar ( TermPtr & var,
TermPtr & value,
NameLookupStack & stack )

◆ Iterator_()

bool AstAnalysis::Iterator_ ( TermPtr & term,
NameLookupStack & stack )

Definition at line 429 of file analysis.cpp.

References ASSERT, newlang::ITERATOR, and RecursiveAnalyzer().

Referenced by RecursiveAnalyzer().

◆ CheckField_()

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_().

◆ CheckIndex_()

◆ CheckItems_()

bool AstAnalysis::CheckItems_ ( TermPtr & term,
NameLookupStack & stack )

Definition at line 1688 of file analysis.cpp.

References RecursiveAnalyzer().

Referenced by RecursiveAnalyzer().

◆ CheckGetValue_()

TermPtr AstAnalysis::CheckGetValue_ ( TermPtr & obj,
NameLookupStack & stack )

Definition at line 487 of file analysis.cpp.

◆ CheckSetValue_()

bool AstAnalysis::CheckSetValue_ ( TermPtr & obj,
TermPtr & value,
NameLookupStack & stack )

Definition at line 491 of file analysis.cpp.

◆ LookupName()

◆ CheckNative_() [1/2]

bool newlang::AstAnalysis::CheckNative_ ( TermPtr & term)

Referenced by CreateOp_().

◆ CheckError()

bool AstAnalysis::CheckError ( bool result)

Функция проверки наличия ошибок при анализе AST. Прерывает работу анализатора при превышении лимита или при force=true

Parameters
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().

◆ CheckName()

bool newlang::AstAnalysis::CheckName ( TermPtr & term)

◆ CheckOp()

bool newlang::AstAnalysis::CheckOp ( TermPtr & term)

◆ CalcType()

bool newlang::AstAnalysis::CalcType ( TermPtr & term)

◆ UpcastOpType()

bool AstAnalysis::UpcastOpType ( TermPtr & op)

Definition at line 173 of file analysis.cpp.

References ASSERT.

Referenced by RecursiveAnalyzer().

◆ CheckOpType()

bool AstAnalysis::CheckOpType ( TermPtr & op,
TermPtr & left,
const TermPtr right )

◆ CheckReference()

bool AstAnalysis::CheckReference ( TermPtr & term,
const TermPtr & test_ref )

◆ CheckAssignRef()

◆ CheckCall()

◆ CheckCallArg()

bool AstAnalysis::CheckCallArg ( TermPtr & call,
size_t arg_pos,
NameLookupStack & stack )

◆ CheckDims()

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().

◆ CkeckRange_()

bool AstAnalysis::CkeckRange_ ( TermPtr & term,
NameLookupStack & stack )

◆ CheckFollow_()

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().

◆ CheckWhile_()

bool AstAnalysis::CheckWhile_ ( TermPtr & term,
NameLookupStack & stack )

Definition at line 286 of file analysis.cpp.

References ASSERT, and RecursiveAnalyzer().

Referenced by RecursiveAnalyzer().

◆ CheckDoWhile_()

bool AstAnalysis::CheckDoWhile_ ( TermPtr & term,
NameLookupStack & stack )

Definition at line 308 of file analysis.cpp.

References ASSERT, and RecursiveAnalyzer().

Referenced by RecursiveAnalyzer().

◆ CheckMatching_()

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().

◆ CheckWith_()

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().

◆ CheckTake_()

bool AstAnalysis::CheckTake_ ( TermPtr & term,
NameLookupStack & stack )

Definition at line 333 of file analysis.cpp.

References ASSERT, and RecursiveAnalyzer().

Referenced by RecursiveAnalyzer().

◆ CheckNative_() [2/2]

bool AstAnalysis::CheckNative_ ( TermPtr & proto,
TermPtr & term )

◆ CheckArgsType_()

bool AstAnalysis::CheckArgsType_ ( TermPtr proto,
TermPtr value )

Definition at line 38 of file analysis.cpp.

Referenced by CheckArgs_().

◆ CheckArgs_()

bool AstAnalysis::CheckArgs_ ( TermPtr proto,
TermPtr args )

◆ CheckStrPrintf()

bool AstAnalysis::CheckStrPrintf ( const std::string_view format,
TermPtr args,
int start )
static

◆ CheckStrFormat()

bool AstAnalysis::CheckStrFormat ( const std::string_view format,
TermPtr args,
RunTime * rt )
static

Definition at line 1305 of file analysis.cpp.

References ASSERT, ConvertToVFormat_(), LOG_LEVEL_INFO, MakeFormatArgs(), and NL_MESSAGE.

Referenced by CheckCall().

◆ MakeFormat()

std::string AstAnalysis::MakeFormat ( const std::string_view format,
TermPtr args,
RunTime * rt )
static

Definition at line 1290 of file analysis.cpp.

References ASSERT, ConvertToVFormat_(), LOG_RUNTIME, LOG_TEST, MakeFormatArgs(), and result.

Referenced by CheckCall().

◆ MakeFormatArgs()

◆ ConvertToVFormat_()

template<typename T >
static std::string newlang::AstAnalysis::ConvertToVFormat_ ( const std::string_view format,
T & args )
inlinestatic

Definition at line 115 of file analysis.h.

References ASSERT, LOG_RUNTIME, and result.

Referenced by CheckStrFormat(), MakeFormat(), and newlang::Context::StringFormat().

◆ CalcSummaryType()

TermPtr AstAnalysis::CalcSummaryType ( const TermPtr & term,
NameLookupStack & stack )

Member Data Documentation

◆ m_rt

RunTime& newlang::AstAnalysis::m_rt

◆ m_diag

Diag* newlang::AstAnalysis::m_diag

Definition at line 32 of file analysis.h.

Referenced by Analyze(), and CheckError().


The documentation for this class was generated from the following files: