mirror of
https://github.com/RGBCube/serenity
synced 2025-07-25 06:57:44 +00:00
LibJS: Add and begin using a completion-compatible string formatter
The `deprecated_format` helper is a thin wrapper to map results from AK::vformat to a throw completion. This will let us try to throw on OOM conditions rather than just blowing up. Note it's called `deprecated_format` as we will likely end up adding a method named just `format` to return `ThrowCompletionOr<String>`, when we begin the migration from DeprecatedString->String for LibJS.
This commit is contained in:
parent
6e1a239a62
commit
356e58332c
2 changed files with 31 additions and 2 deletions
28
Userland/Libraries/LibJS/Runtime/ThrowableFormat.h
Normal file
28
Userland/Libraries/LibJS/Runtime/ThrowableFormat.h
Normal file
|
@ -0,0 +1,28 @@
|
|||
/*
|
||||
* Copyright (c) 2023, Tim Flynn <trflynn89@serenityos.org>
|
||||
*
|
||||
* SPDX-License-Identifier: BSD-2-Clause
|
||||
*/
|
||||
|
||||
#pragma once
|
||||
|
||||
#include <AK/CheckedFormatString.h>
|
||||
#include <AK/DeprecatedString.h>
|
||||
#include <AK/Format.h>
|
||||
#include <LibJS/Runtime/Completion.h>
|
||||
#include <LibJS/Runtime/ErrorTypes.h>
|
||||
#include <LibJS/Runtime/VM.h>
|
||||
|
||||
namespace JS {
|
||||
|
||||
template<typename... Args>
|
||||
ThrowCompletionOr<DeprecatedString> deprecated_format(VM& vm, CheckedFormatString<Args...>&& fmtstr, Args const&... args)
|
||||
{
|
||||
StringBuilder builder;
|
||||
AK::VariadicFormatParams parameters { args... };
|
||||
|
||||
TRY_OR_THROW_OOM(vm, vformat(builder, fmtstr.view(), parameters));
|
||||
return builder.to_deprecated_string();
|
||||
}
|
||||
|
||||
}
|
Loading…
Add table
Add a link
Reference in a new issue