		void Phase2() final {
			// Setup
			auto* isolate = Isolate::GetCurrent();
			auto context = Deref(this->context);
			Context::Scope context_scope{context};
			auto name = GetKey(context);
			auto object = GetTargetAndAlsoCheckForProxy();

			// Get property
			ret = TransferOut([&]() {
				if (inherit) {
					// To avoid accessors I guess we have to walk the prototype chain ourselves
					auto target = object;
					do {
						if (Unmaybe(target->HasOwnProperty(context, name))) {
							if (Unmaybe(target->HasRealNamedCallbackProperty(context, name))) {
								throw RuntimeTypeError("Property is getter");
							}
							return Unmaybe(target->GetRealNamedProperty(context, name));
						}
						auto next = target->GetPrototype();
						if (next->IsNullOrUndefined()) {
							return Undefined(isolate).As<Value>();
						}
						target = next.As<Object>();
					} while (true);
				} else if (!Unmaybe(object->HasOwnProperty(context, name))) {
					return Undefined(isolate).As<Value>();
				} else if (Unmaybe(object->HasRealNamedCallbackProperty(context, name))) {
					throw RuntimeTypeError("Property is getter");
				} else {
					return Unmaybe(object->Get(context, name));
				}
			}(), options);
		}
		void Phase2() final {
			 
			auto* isolate = Isolate::GetCurrent();
			auto context = Deref(this->context);
			Context::Scope context_scope{context};
			auto name = GetKey(context);
			auto object = GetTargetAndAlsoCheckForProxy();

			 
			ret = TransferOut([&]() {
				if (inherit) {
					 
					auto target = object;
					do {
						if (Unmaybe(target->HasOwnProperty(context, name))) {
							if (Unmaybe(target->HasRealNamedCallbackProperty(context, name))) {
								throw RuntimeTypeError("Property is getter");
							}
							return Unmaybe(target->GetRealNamedProperty(context, name));
						}
						auto next = target->GetPrototype();
						if (next->IsNullOrUndefined()) {
							return Undefined(isolate).As<Value>();
						}
						target = next.As<Object>();
					} while (true);
				} else if (!Unmaybe(object->HasOwnProperty(context, name))) {
					return Undefined(isolate).As<Value>();
				} else if (Unmaybe(object->HasRealNamedCallbackProperty(context, name))) {
					throw RuntimeTypeError("Property is getter");
				} else {
					return Unmaybe(object->Get(context, name));
				}
			}(), options);
		}