1
Fork 0
mirror of https://github.com/RGBCube/serenity synced 2025-05-21 23:15:08 +00:00
serenity/Userland/Applications/Spreadsheet/JSIntegration.h
Andreas Kling 52cd671163 LibJS: Make Object::internal_get() reveal the used property offset
This function now takes an optional out parameter for callers who would
like to what kind of property we ended up getting.

This will be used to implement inline caching for property lookups.

Also, to prepare for adding more forms of caching, the out parameter
is a struct CacheablePropertyMetadata rather than just an offset. :^)
2023-07-09 12:54:06 +02:00

65 lines
2 KiB
C++

/*
* Copyright (c) 2020-2022, the SerenityOS developers.
*
* SPDX-License-Identifier: BSD-2-Clause
*/
#pragma once
#include "Forward.h"
#include <LibJS/Forward.h>
#include <LibJS/Runtime/Completion.h>
#include <LibJS/Runtime/GlobalObject.h>
namespace Spreadsheet {
struct FunctionAndArgumentIndex {
DeprecatedString function_name;
size_t argument_index { 0 };
};
Optional<FunctionAndArgumentIndex> get_function_and_argument_index(StringView source);
class SheetGlobalObject final : public JS::GlobalObject {
JS_OBJECT(SheetGlobalObject, JS::GlobalObject);
public:
SheetGlobalObject(JS::Realm&, Sheet&);
virtual JS::ThrowCompletionOr<void> initialize(JS::Realm&) override;
virtual ~SheetGlobalObject() override = default;
virtual JS::ThrowCompletionOr<bool> internal_has_property(JS::PropertyKey const& name) const override;
virtual JS::ThrowCompletionOr<JS::Value> internal_get(JS::PropertyKey const&, JS::Value receiver, JS::CacheablePropertyMetadata*) const override;
virtual JS::ThrowCompletionOr<bool> internal_set(JS::PropertyKey const&, JS::Value value, JS::Value receiver) override;
JS_DECLARE_NATIVE_FUNCTION(get_real_cell_contents);
JS_DECLARE_NATIVE_FUNCTION(set_real_cell_contents);
JS_DECLARE_NATIVE_FUNCTION(parse_cell_name);
JS_DECLARE_NATIVE_FUNCTION(current_cell_position);
JS_DECLARE_NATIVE_FUNCTION(column_index);
JS_DECLARE_NATIVE_FUNCTION(column_arithmetic);
JS_DECLARE_NATIVE_FUNCTION(get_column_bound);
JS_DECLARE_NATIVE_FUNCTION(get_name);
private:
virtual void visit_edges(Visitor&) override;
Sheet& m_sheet;
};
class WorkbookObject final : public JS::Object {
JS_OBJECT(WorkbookObject, JS::Object);
public:
WorkbookObject(JS::Realm&, Workbook&);
virtual ~WorkbookObject() override = default;
virtual JS::ThrowCompletionOr<void> initialize(JS::Realm&) override;
JS_DECLARE_NATIVE_FUNCTION(sheet);
private:
virtual void visit_edges(Visitor&) override;
Workbook& m_workbook;
};
}