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
entity =
Entity
(
Kind::Label
);
23
entity.m_label = value;
24
25
return
entity;
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
53
void
Entity::setSourceLocation
(
const
std::string& filename, std::size_t line)
54
{
55
m_source_file
=
filename
;
56
m_source_line
= line;
57
}
58
}
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:74
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:77
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:78
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::m_source_line
std::size_t m_source_line
Definition
Entity.hpp:80
Ark::internal::IR::Entity::setSourceLocation
void setSourceLocation(const std::string &filename, std::size_t line)
Definition
Entity.cpp:53
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:76
Ark::internal::IR::Entity::filename
const std::string & filename() const
Definition
Entity.hpp:69
Ark::internal::IR::Entity::m_source_file
std::string m_source_file
Definition
Entity.hpp:79
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:27
Ark::internal::NOP
@ NOP
Definition
Instructions.hpp:29
Ark::internal::Word
Definition
Word.hpp:17
src
arkreactor
Compiler
IntermediateRepresentation
Entity.cpp
Generated on Wed May 21 2025 18:40:52 for ArkScript by
1.12.0