Qt
Internal/Contributor docs for the Qt SDK. Note: These are NOT official API docs; those are found at https://doc.qt.io/
Toggle main menu visibility
Loading...
Searching...
No Matches
qqmljsbasicblocks_p.h
Go to the documentation of this file.
1
// Copyright (C) 2022 The Qt Company Ltd.
2
// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR GPL-3.0-only WITH Qt-GPL-exception-1.0
3
// Qt-Security score:significant
4
5
#
ifndef
QQMLJSBASICBLOCKS_P_H
6
#
define
QQMLJSBASICBLOCKS_P_H
7
8
//
9
// W A R N I N G
10
// -------------
11
//
12
// This file is not part of the Qt API. It exists purely as an
13
// implementation detail. This header file may change from version to
14
// version without notice, or even be removed.
15
//
16
// We mean it.
17
18
19
#
include
<
private
/
qflatmap_p
.
h
>
20
#
include
<
private
/
qqmljscompilepass_p
.
h
>
21
#
include
<
private
/
qqmljscompiler_p
.
h
>
22
23
QT_BEGIN_NAMESPACE
24
25
class
Q_QMLCOMPILER_EXPORT
QQmlJSBasicBlocks
:
public
QQmlJSCompilePass
26
{
27
public
:
28
QQmlJSBasicBlocks(
const
QV4::Compiler::Context *context,
29
const
QV4::Compiler::JSUnitGenerator *unitGenerator,
30
const
QQmlJSTypeResolver *typeResolver, QQmlJSLogger *logger)
31
: QQmlJSCompilePass(unitGenerator, typeResolver, logger), m_context{ context }
32
{
33
}
34
35
~QQmlJSBasicBlocks() =
default
;
36
37
QQmlJSCompilePass::BlocksAndAnnotations run(
const
Function *function,
38
QQmlJSAotCompiler::Flags compileFlags,
39
bool
&basicBlocksValidationFailed);
40
41
struct
BasicBlocksValidationResult {
bool
success =
true
; QString errorMessage; };
42
BasicBlocksValidationResult basicBlocksValidation();
43
44
static
BasicBlocks::iterator basicBlockForInstruction(BasicBlocks &blocks,
int
offset)
45
{
46
return
findBasicBlockForInstruction(blocks, offset);
47
}
48
static
BasicBlocks::const_iterator constBasicBlockForInstruction(
const
BasicBlocks &blocks,
49
int
offset)
50
{
51
return
findBasicBlockForInstruction(blocks, offset);
52
}
53
54
QList<ObjectOrArrayDefinition> objectAndArrayDefinitions()
const
;
55
56
private
:
57
QV4::Moth::ByteCodeHandler::Verdict startInstruction(QV4::Moth::Instr::Type type) override;
58
void
endInstruction(QV4::Moth::Instr::Type type) override;
59
60
void
generate_Jump(
int
offset) override;
61
void
generate_JumpTrue(
int
offset) override;
62
void
generate_JumpFalse(
int
offset) override;
63
void
generate_JumpNoException(
int
offset) override;
64
void
generate_JumpNotUndefined(
int
offset) override;
65
void
generate_IteratorNext(
int
value,
int
offset) override;
66
void
generate_GetOptionalLookup(
int
index,
int
offset) override;
67
68
void
generate_Ret() override;
69
void
generate_ThrowException() override;
70
71
void
generate_DefineArray(
int
argc,
int
argv) override;
72
void
generate_DefineObjectLiteral(
int
internalClassId,
int
argc,
int
args) override;
73
void
generate_Construct(
int
func,
int
argc,
int
argv) override;
74
75
enum
JumpMode { Unconditional, Conditional };
76
void
processJump(
int
offset, JumpMode mode);
77
78
void
dumpBasicBlocks();
79
void
dumpDOTGraph();
80
81
template
<
typename
Container,
typename
Iterator =
decltype
(Container().lower_bound(1))>
82
static
Iterator findBasicBlockForInstruction(Container &container,
int
instructionOffset)
83
{
84
auto
block = container.lower_bound(instructionOffset);
85
if
(block == container.end() || block->first != instructionOffset)
86
--block;
87
return
block;
88
}
89
90
const
QV4::Compiler::Context *m_context;
91
QList<ObjectOrArrayDefinition> m_objectAndArrayDefinitions;
92
bool
m_skipUntilNextLabel =
false
;
93
bool
m_hadBackJumps =
false
;
94
};
95
96
QT_END_NAMESPACE
97
98
#
endif
// QQMLJSBASICBLOCKS_P_H
QQmlJSBasicBlocks
Definition
qqmljsbasicblocks_p.h:26
QT_BEGIN_NAMESPACE
Combined button and popup list for selecting options.
Definition
qsequentialanimationgroup.cpp:47
qtdeclarative
src
qmlcompiler
qqmljsbasicblocks_p.h
Generated on
for Qt by
1.18.0