Photon 1.0.0
Loading...
Searching...
No Matches
ECMAVirtualMachine.hpp
Go to the documentation of this file.
1/*
2 * =====================================================================
3 *
4 * Photon
5 * Copyright Amlal EL Mahrouss, all rights reserved.
6 *
7 * =====================================================================
8 */
9
10#pragma once
11
12#include <core/Core.hpp>
14#include <unordered_map>
15#include <variant>
16#include <vector>
17
18#define PHOTON_ECMA_UNDEFINED "undefined"
19#define PHOTON_ECMA_NULL "null"
20#define PHOTON_ECMA_WINDOW "window"
21
22/***********************************************************************************/
24/***********************************************************************************/
25
26namespace Photon
27{
28 class ECMAVirtualMachine;
29 struct ECMAEnvironment;
30 struct ECMAObject;
31
32 using ECMAValue = std::variant<std::monostate, Real, std::string, bool, ECMAObject>;
33
34 using ECMAFunction = std::function<bool(ECMAVirtualMachine&)>;
35
36 struct ECMAObject final
37 {
39
40 std::unordered_map<String, ECMAFunction> m_methods;
41 std::unordered_map<String, ECMAValue> m_properties;
42
44 {
46 return *this;
47 }
48
50 {
51 return *this;
52 }
53
55 {
56 return *this;
57 }
58 };
59
71
72 struct ECMAInstruction final
73 {
74 enum ECMAOpcode m_op
75 {
77 };
78
80 size_t m_index = 0;
81 };
82
85 {
86 public:
87 std::vector<String> m_script;
88 std::vector<ECMAObject> m_objects;
89 std::vector<ECMAValue> m_stack;
90 std::vector<ECMAValue> m_variables;
91
92 public:
93 explicit ECMAVirtualMachine(std::vector<String>& js_blob);
95
96 public:
98
99 public:
100 Bool execute();
101
102 public:
103 Bool pre_eval(const String& line, BOOL& comment_ctrl);
105 };
106
108} // namespace Photon
Definition Core.hpp:46
JavaScriptEngine class program.
Definition ECMAVirtualMachine.hpp:85
std::vector< ECMAValue > m_stack
Definition ECMAVirtualMachine.hpp:89
std::vector< ECMAObject > m_objects
Definition ECMAVirtualMachine.hpp:88
Bool pre_eval(const String &line, BOOL &comment_ctrl)
Bool eval(ECMAInstruction &opcode)
Bool execute()
Definition ECMAVirtualMachine.mm:148
std::vector< ECMAValue > m_variables
Definition ECMAVirtualMachine.hpp:90
std::vector< String > m_script
Definition ECMAVirtualMachine.hpp:87
PHOTON_COPY_DEFAULT(ECMAVirtualMachine)
This file is also about defining core js concepts.
Definition BasePhotonWindow.hpp:22
ECMAOpcode
Definition ECMAVirtualMachine.hpp:61
@ kECMALoadConst
Definition ECMAVirtualMachine.hpp:63
@ kECMALoadVar
Definition ECMAVirtualMachine.hpp:65
@ kECMASetProp
Definition ECMAVirtualMachine.hpp:69
@ kECMASubExpr
Definition ECMAVirtualMachine.hpp:67
@ kECMAStoreVar
Definition ECMAVirtualMachine.hpp:64
@ kECMAInvalid
Definition ECMAVirtualMachine.hpp:62
@ kECMACallNative
Definition ECMAVirtualMachine.hpp:68
@ kECMAAddExpr
Definition ECMAVirtualMachine.hpp:66
std::function< bool(ECMAVirtualMachine &)> ECMAFunction
Definition ECMAVirtualMachine.hpp:34
bool Bool
Definition Config.hpp:101
std::variant< std::monostate, Real, std::string, bool, ECMAObject > ECMAValue
Definition ECMAVirtualMachine.hpp:32
std::string String
Definition Core.hpp:37
Definition ECMAVirtualMachine.hpp:73
size_t m_index
Definition ECMAVirtualMachine.hpp:80
String m_name
Definition ECMAVirtualMachine.hpp:79
Definition ECMAVirtualMachine.hpp:37
ECMAObject & operator-=(const ECMAObject &rhs)
Definition ECMAVirtualMachine.hpp:49
std::unordered_map< String, ECMAValue > m_properties
Definition ECMAVirtualMachine.hpp:41
ECMAObject & operator+=(const ECMAObject &rhs)
Definition ECMAVirtualMachine.hpp:54
ECMAObject & operator=(const ECMAObject &rhs)
Definition ECMAVirtualMachine.hpp:43
std::unordered_map< String, ECMAFunction > m_methods
Definition ECMAVirtualMachine.hpp:40
String m_name
Definition ECMAVirtualMachine.hpp:38