summaryrefslogtreecommitdiff
path: root/Userland/Applications/Spreadsheet
diff options
context:
space:
mode:
Diffstat (limited to 'Userland/Applications/Spreadsheet')
-rw-r--r--Userland/Applications/Spreadsheet/JSIntegration.cpp12
-rw-r--r--Userland/Applications/Spreadsheet/JSIntegration.h1
-rw-r--r--Userland/Applications/Spreadsheet/Spreadsheet.cpp3
3 files changed, 15 insertions, 1 deletions
diff --git a/Userland/Applications/Spreadsheet/JSIntegration.cpp b/Userland/Applications/Spreadsheet/JSIntegration.cpp
index 54a822872d..565a8ad942 100644
--- a/Userland/Applications/Spreadsheet/JSIntegration.cpp
+++ b/Userland/Applications/Spreadsheet/JSIntegration.cpp
@@ -8,7 +8,6 @@
#include "Spreadsheet.h"
#include "Workbook.h"
#include <LibJS/Lexer.h>
-#include <LibJS/Runtime/Completion.h>
#include <LibJS/Runtime/Error.h>
#include <LibJS/Runtime/GlobalObject.h>
#include <LibJS/Runtime/Object.h>
@@ -102,6 +101,17 @@ SheetGlobalObject::~SheetGlobalObject()
{
}
+JS::ThrowCompletionOr<bool> SheetGlobalObject::internal_has_property(JS::PropertyName const& name) const
+{
+ if (name.is_string()) {
+ if (name.as_string() == "value")
+ return true;
+ if (m_sheet.parse_cell_name(name.as_string()).has_value())
+ return true;
+ }
+ return Object::internal_has_property(name);
+}
+
JS::ThrowCompletionOr<JS::Value> SheetGlobalObject::internal_get(const JS::PropertyName& property_name, JS::Value receiver) const
{
if (property_name.is_string()) {
diff --git a/Userland/Applications/Spreadsheet/JSIntegration.h b/Userland/Applications/Spreadsheet/JSIntegration.h
index 2f7d81b160..8bd1e09a40 100644
--- a/Userland/Applications/Spreadsheet/JSIntegration.h
+++ b/Userland/Applications/Spreadsheet/JSIntegration.h
@@ -27,6 +27,7 @@ public:
virtual ~SheetGlobalObject() override;
+ virtual JS::ThrowCompletionOr<bool> internal_has_property(JS::PropertyName const& name) const override;
virtual JS::ThrowCompletionOr<JS::Value> internal_get(JS::PropertyName const&, JS::Value receiver) const override;
virtual JS::ThrowCompletionOr<bool> internal_set(JS::PropertyName const&, JS::Value value, JS::Value receiver) override;
virtual void initialize_global_object() override;
diff --git a/Userland/Applications/Spreadsheet/Spreadsheet.cpp b/Userland/Applications/Spreadsheet/Spreadsheet.cpp
index 2d8aa751c5..079104ddf3 100644
--- a/Userland/Applications/Spreadsheet/Spreadsheet.cpp
+++ b/Userland/Applications/Spreadsheet/Spreadsheet.cpp
@@ -163,6 +163,9 @@ Sheet::ValueAndException Sheet::evaluate(const StringView& source, Cell* on_beha
if (parser.has_errors() || interpreter().exception())
return { JS::js_undefined(), interpreter().exception() };
+ // FIXME: This creates a GlobalEnvironment for every evaluate call which we might be able to circumvent with multiple realms.
+ interpreter().realm().set_global_object(global_object(), &global_object());
+
interpreter().run(global_object(), program);
if (interpreter().exception()) {
auto exc = interpreter().exception();