ladybird/Libraries/LibJS/Bytecode/PutKind.h

40 lines
1,010 B
C
Raw Permalink Normal View History

/*
* Copyright (c) 2025, Andreas Kling <andreas@ladybird.org>
*
* SPDX-License-Identifier: BSD-2-Clause
*/
#pragma once
namespace JS::Bytecode {
// PutKind indicates how a property is being set.
// `Normal` is a normal `o.foo = x` or `o[foo] = x` operation.
// The others are used for object expressions.
#define JS_ENUMERATE_PUT_KINDS(X) \
X(Normal) \
X(Getter) \
X(Setter) \
X(Prototype) \
X(Own) // Always sets an own property, never calls a setter.
enum class PutKind {
#define __JS_ENUMERATE_PUT_KIND(name) name,
JS_ENUMERATE_PUT_KINDS(__JS_ENUMERATE_PUT_KIND)
#undef __JS_ENUMERATE_PUT_KIND
};
inline char const* put_kind_to_string(PutKind kind)
{
switch (kind) {
#define __JS_PUT_KIND_TO_STRING(name) \
case PutKind::name: \
return #name;
JS_ENUMERATE_PUT_KINDS(__JS_PUT_KIND_TO_STRING)
#undef __JS_PUT_KIND_TO_STRING
}
VERIFY_NOT_REACHED();
}
}