summaryrefslogtreecommitdiff
path: root/Libraries/LibJS
diff options
context:
space:
mode:
authorAndreas Kling <kling@serenityos.org>2020-03-15 21:17:18 +0100
committerAndreas Kling <kling@serenityos.org>2020-03-15 21:17:38 +0100
commit731abd997833a4cd8524cd8c64e2817edb1182d4 (patch)
treee76858507ebd2bdbb30bd4a030650a3951d0d126 /Libraries/LibJS
parent63b3cfdc7361ea11b253c07f10e74987f8019f23 (diff)
downloadserenity-731abd997833a4cd8524cd8c64e2817edb1182d4.zip
LibJS: Add String.prototype.repeat() :^)
Diffstat (limited to 'Libraries/LibJS')
-rw-r--r--Libraries/LibJS/StringPrototype.cpp21
1 files changed, 18 insertions, 3 deletions
diff --git a/Libraries/LibJS/StringPrototype.cpp b/Libraries/LibJS/StringPrototype.cpp
index 9be1eafdc1..d359cfdf4a 100644
--- a/Libraries/LibJS/StringPrototype.cpp
+++ b/Libraries/LibJS/StringPrototype.cpp
@@ -25,6 +25,7 @@
*/
#include <AK/Function.h>
+#include <AK/StringBuilder.h>
#include <LibJS/Heap.h>
#include <LibJS/Interpreter.h>
#include <LibJS/PrimitiveString.h>
@@ -34,13 +35,11 @@
namespace JS {
-
-
StringPrototype::StringPrototype()
{
put_native_property(
"length", [](Object* this_object) {
- ASSERT(this_object);
+ ASSERT(this_object);
ASSERT(this_object->is_string_object());
return Value((i32) static_cast<const StringObject*>(this_object)->primitive_string()->string().length());
},
@@ -56,6 +55,22 @@ StringPrototype::StringPrototype()
return js_string(this_object->heap(), String::empty());
return js_string(this_object->heap(), underlying_string.substring(index, 1));
});
+ put_native_function("repeat", [](Object* this_object, Vector<Value> arguments) -> Value {
+ ASSERT(this_object->is_string_object());
+ if (arguments.is_empty())
+ return js_string(this_object->heap(), String::empty());
+ i32 count = 0;
+ count = arguments[0].to_i32();
+ if (count < 0) {
+ // FIXME: throw RangeError
+ return js_undefined();
+ }
+ auto* string_object = static_cast<StringObject*>(this_object);
+ StringBuilder builder;
+ for (i32 i = 0; i < count; ++i)
+ builder.append(string_object->primitive_string()->string());
+ return js_string(this_object->heap(), builder.to_string());
+ });
}
StringPrototype::~StringPrototype()