Ver código fonte

LibJS: Start implementing a Console class for the interpreter

The goal is to start factoring out core ConsoleObject functionality and
to make ConsoleObject only a JS wrapper around Console.
Emanuele Torre 5 anos atrás
pai
commit
2e92c2e5e1

+ 36 - 0
Libraries/LibJS/Console.cpp

@@ -0,0 +1,36 @@
+/*
+ * Copyright (c) 2020, Emanuele Torre <torreemanuele6@gmail.com>
+ * All rights reserved.
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions are met:
+ *
+ * 1. Redistributions of source code must retain the above copyright notice, this
+ *    list of conditions and the following disclaimer.
+ *
+ * 2. Redistributions in binary form must reproduce the above copyright notice,
+ *    this list of conditions and the following disclaimer in the documentation
+ *    and/or other materials provided with the distribution.
+ *
+ * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
+ * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
+ * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
+ * DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE
+ * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
+ * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
+ * SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER
+ * CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
+ * OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
+ * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+ */
+
+#include <LibJS/Console.h>
+
+namespace JS {
+
+Console::Console(Interpreter& interpreter)
+    : m_interpreter(interpreter)
+{
+}
+
+}

+ 52 - 0
Libraries/LibJS/Console.h

@@ -0,0 +1,52 @@
+/*
+ * Copyright (c) 2020, Emanuele Torre <torreemanuele6@gmail.com>
+ * All rights reserved.
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions are met:
+ *
+ * 1. Redistributions of source code must retain the above copyright notice, this
+ *    list of conditions and the following disclaimer.
+ *
+ * 2. Redistributions in binary form must reproduce the above copyright notice,
+ *    this list of conditions and the following disclaimer in the documentation
+ *    and/or other materials provided with the distribution.
+ *
+ * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
+ * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
+ * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
+ * DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE
+ * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
+ * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
+ * SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER
+ * CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
+ * OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
+ * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+ */
+
+#pragma once
+
+#include <AK/HashMap.h>
+#include <AK/Noncopyable.h>
+#include <LibJS/Forward.h>
+
+namespace JS {
+
+class Console {
+    AK_MAKE_NONCOPYABLE(Console);
+    AK_MAKE_NONMOVABLE(Console);
+
+public:
+    Console(Interpreter&);
+
+    Interpreter& interpreter() { return m_interpreter; }
+
+    HashMap<String, unsigned>& counters() { return m_counters; }
+
+private:
+    Interpreter& m_interpreter;
+
+    HashMap<String, unsigned> m_counters;
+};
+
+}

+ 1 - 0
Libraries/LibJS/Interpreter.cpp

@@ -41,6 +41,7 @@ namespace JS {
 
 Interpreter::Interpreter()
     : m_heap(*this)
+    , m_console(*this)
 {
 }
 

+ 3 - 2
Libraries/LibJS/Interpreter.h

@@ -30,6 +30,7 @@
 #include <AK/HashMap.h>
 #include <AK/String.h>
 #include <AK/Vector.h>
+#include <LibJS/Console.h>
 #include <LibJS/Forward.h>
 #include <LibJS/Heap/Heap.h>
 #include <LibJS/Runtime/Exception.h>
@@ -163,7 +164,7 @@ public:
 
     Value last_value() const { return m_last_value; }
 
-    HashMap<String, unsigned>& console_counters() { return m_console_counters; }
+    Console& console() { return m_console; }
 
 private:
     Interpreter();
@@ -181,7 +182,7 @@ private:
 
     ScopeType m_unwind_until { ScopeType::None };
 
-    HashMap<String, unsigned> m_console_counters;
+    Console m_console;
 };
 
 }

+ 1 - 0
Libraries/LibJS/Makefile

@@ -1,5 +1,6 @@
 OBJS = \
     AST.o \
+    Console.o \
     Heap/Handle.o \
     Heap/Heap.o \
     Heap/HeapBlock.o \

+ 2 - 2
Libraries/LibJS/Runtime/ConsoleObject.cpp

@@ -121,7 +121,7 @@ Value ConsoleObject::count(Interpreter& interpreter)
     else
         counter_name = interpreter.argument(0).to_string();
 
-    auto& counters = interpreter.console_counters();
+    auto& counters = interpreter.console().counters();
     auto counter_value = counters.get(counter_name);
 
     if (counter_value.has_value()) {
@@ -142,7 +142,7 @@ Value ConsoleObject::count_reset(Interpreter& interpreter)
     else
         counter_name = interpreter.argument(0).to_string();
 
-    auto& counters = interpreter.console_counters();
+    auto& counters = interpreter.console().counters();
 
     if (counters.contains(counter_name)) {
         counters.remove(counter_name);