diff --git a/kernel/include/kernel/ACPI/AML/Integer.h b/kernel/include/kernel/ACPI/AML/Integer.h index 5a459f82..280e17d3 100644 --- a/kernel/include/kernel/ACPI/AML/Integer.h +++ b/kernel/include/kernel/ACPI/AML/Integer.h @@ -30,6 +30,8 @@ namespace Kernel::ACPI::AML , constant(constant) {} + BAN::RefPtr copy() override { return MUST(BAN::RefPtr::create(value)); } + BAN::RefPtr evaluate() override { return this; diff --git a/kernel/include/kernel/ACPI/AML/Node.h b/kernel/include/kernel/ACPI/AML/Node.h index 55a78f31..8f0b3795 100644 --- a/kernel/include/kernel/ACPI/AML/Node.h +++ b/kernel/include/kernel/ACPI/AML/Node.h @@ -43,6 +43,8 @@ namespace Kernel::ACPI::AML virtual bool is_scope() const { return false; } + virtual BAN::RefPtr copy() { return this; } + [[nodiscard]] BAN::Optional as_integer(); [[nodiscard]] virtual BAN::RefPtr evaluate() { AML_TODO("evaluate, type {}", static_cast(type)); return nullptr; } [[nodiscard]] virtual bool store(BAN::RefPtr) { AML_TODO("store, type {}", static_cast(type)); return false; } diff --git a/kernel/include/kernel/ACPI/AML/Register.h b/kernel/include/kernel/ACPI/AML/Register.h index d2fa396c..589eccb6 100644 --- a/kernel/include/kernel/ACPI/AML/Register.h +++ b/kernel/include/kernel/ACPI/AML/Register.h @@ -32,7 +32,7 @@ namespace Kernel::ACPI::AML AML_ERROR("Failed to evaluate source for store"); return false; } - value = evaluated; + value = evaluated->copy(); return true; }