ArkScript
A small, fast, functional and scripting language for video games
Entity.cpp
Go to the documentation of this file.
1
#include <
Ark/Compiler/IntermediateRepresentation/Entity.hpp
>
2
3
namespace
Ark::internal::IR
4
{
5
Entity::Entity
(
const
Kind
kind) :
6
m_kind(kind),
7
m_inst(
NOP
)
8
{}
9
10
Entity::Entity
(
const
Instruction
inst,
const
uint16_t arg) :
11
m_kind(
Kind
::
Opcode
),
12
m_inst(inst), m_primary_arg(arg)
13
{}
14
15
Entity::Entity
(
const
Instruction
inst,
const
uint16_t primary_arg,
const
uint16_t secondary_arg) :
16
m_kind(
Kind
::
Opcode2Args
),
17
m_inst(inst), m_primary_arg(primary_arg), m_secondary_arg(secondary_arg)
18
{}
19
20
Entity
Entity::Label
(
const
label_t
value)
21
{
22
auto
label
=
Entity
(
Kind::Label
);
23
label
.m_label = value;
24
25
return
label
;
26
}
27
28
Entity
Entity::Goto
(
const
Entity
& label)
29
{
30
auto
jump =
Entity
(
Kind::Goto
);
31
jump.m_label =
label
.m_label;
32
33
return
jump;
34
}
35
36
Entity
Entity::GotoIf
(
const
Entity
& label,
const
bool
cond)
37
{
38
auto
jump =
Entity
(cond ?
Kind::GotoIfTrue
:
Kind::GotoIfFalse
);
39
jump.m_label =
label
.m_label;
40
41
return
jump;
42
}
43
44
Word
Entity::bytecode
()
const
45
{
46
if
(
m_kind
==
Kind::Opcode
)
47
return
Word
(
m_inst
,
m_primary_arg
);
48
if
(
m_kind
==
Kind::Opcode2Args
)
49
return
Word
(
m_inst
,
m_primary_arg
,
m_secondary_arg
);
50
return
Word
(0, 0);
51
}
52
}
Entity.hpp
An entity in the IR is a bundle of information.
Ark::internal::IR::Entity
Definition
Entity.hpp:39
Ark::internal::IR::Entity::m_kind
Kind m_kind
Definition
Entity.hpp:66
Ark::internal::IR::Entity::Label
static Entity Label(label_t value)
Definition
Entity.cpp:20
Ark::internal::IR::Entity::m_primary_arg
uint16_t m_primary_arg
Definition
Entity.hpp:69
Ark::internal::IR::Entity::label
label_t label() const
Definition
Entity.hpp:55
Ark::internal::IR::Entity::m_secondary_arg
uint16_t m_secondary_arg
Definition
Entity.hpp:70
Ark::internal::IR::Entity::Entity
Entity(Kind kind)
Definition
Entity.cpp:5
Ark::internal::IR::Entity::GotoIf
static Entity GotoIf(const Entity &label, bool cond)
Definition
Entity.cpp:36
Ark::internal::IR::Entity::Goto
static Entity Goto(const Entity &label)
Definition
Entity.cpp:28
Ark::internal::IR::Entity::bytecode
Word bytecode() const
Definition
Entity.cpp:44
Ark::internal::IR::Entity::m_inst
Instruction m_inst
Definition
Entity.hpp:68
Ark::internal::IR
Definition
Entity.hpp:22
Ark::internal::IR::Kind
Kind
Definition
Entity.hpp:24
Ark::internal::IR::Kind::GotoIfTrue
@ GotoIfTrue
Ark::internal::IR::Kind::Opcode
@ Opcode
Ark::internal::IR::Kind::Goto
@ Goto
Ark::internal::IR::Kind::Label
@ Label
Ark::internal::IR::Kind::GotoIfFalse
@ GotoIfFalse
Ark::internal::IR::Kind::Opcode2Args
@ Opcode2Args
Ark::internal::IR::label_t
std::size_t label_t
Definition
Entity.hpp:33
Ark::internal::Instruction
Instruction
The different bytecodes are stored here.
Definition
Instructions.hpp:28
Ark::internal::NOP
@ NOP
Definition
Instructions.hpp:30
Ark::internal::Word
Definition
Word.hpp:18
src
arkreactor
Compiler
IntermediateRepresentation
Entity.cpp
Generated on Wed Jan 15 2025 19:51:44 for ArkScript by
1.12.0