Book a Demo!
CoCalc Logo Icon
StoreFeaturesDocsShareSupportNewsAboutPoliciesSign UpSign In
Roblox
GitHub Repository: Roblox/luau
Path: blob/master/Analysis/include/Luau/RecursionCounter.h
2727 views
1
// This file is part of the Luau programming language and is licensed under MIT License; see LICENSE.txt for details
2
#pragma once
3
4
#include "Luau/Common.h"
5
#include "Luau/Error.h"
6
#include "Luau/NativeStackGuard.h"
7
8
#include <stdexcept>
9
#include <exception>
10
11
namespace Luau
12
{
13
14
struct RecursionLimitException : public InternalCompilerError
15
{
16
explicit RecursionLimitException(const std::string& system);
17
};
18
19
struct RecursionCounter
20
{
21
explicit RecursionCounter(int* count);
22
~RecursionCounter();
23
24
RecursionCounter(const RecursionCounter&) = delete;
25
RecursionCounter& operator=(const RecursionCounter&) = delete;
26
RecursionCounter(RecursionCounter&&) = delete;
27
RecursionCounter& operator=(RecursionCounter&&) = delete;
28
29
protected:
30
int* count;
31
};
32
33
struct RecursionLimiter : RecursionCounter
34
{
35
NativeStackGuard nativeStackGuard;
36
37
RecursionLimiter(const std::string& system, int* count, int limit);
38
};
39
40
struct NonExceptionalRecursionLimiter : RecursionCounter
41
{
42
NativeStackGuard nativeStackGuard;
43
44
bool isOk(int limit) const;
45
46
NonExceptionalRecursionLimiter(int* count);
47
};
48
49
} // namespace Luau
50
51