summaryrefslogtreecommitdiff
path: root/AK
AgeCommit message (Collapse)Author
2021-08-13IntrusiveRedBlackTree: Remove redundant subtraction of 0Lenny Maiorani
Problem: - ToT clang will not build due to casting `nullptr` to `u8*`. This is redundant because it casts to get a `0` then subtracts it. Solution: - Remove it since subtracting `0` doesn't do anything.
2021-08-13AK+Everywhere: Delete Variant's default constructorAli Mohammad Pur
This was exposed to the user by mistake, and even accumulated a bunch of users that didn't blow up out of sheer luck.
2021-08-13AK: Annotate String.count as [[nodiscard]]Brian Gianforcaro
2021-08-13AK: Avoid OOB access in UniformBumpAllocator::destroy_all()Ali Mohammad Pur
Otherwise we would end up calling T::~T() on some random memory right after our mapped block, which is most likely a pretty bad thing to do :P
2021-08-12AK: Add a IsSpecializationOf<T, Template> type traitAli Mohammad Pur
2021-08-12AK: Don't zero Variant data in the move constructorAli Mohammad Pur
There's no reason to zero the data that will be immediately overwritten.
2021-08-12AK: Add contains(char) method to StringJean-Baptiste Boric
2021-08-10AK: Add a formatter overload for Utf16ViewTimothy Flynn
2021-08-10AK+Kernel: Add StringBuilder::append overload for UTF-16 viewsTimothy Flynn
Currently, to append a UTF-16 view to a StringBuilder, callers must first convert the view to UTF-8 and then append the copy. Add a UTF-16 overload so callers do not need to hold an entire copy in memory.
2021-08-10AK: Convert StringBuilder to use east-constTimothy Flynn
2021-08-08AK: Add `typename` keyword for dependent typesDaniel Bertalan
This was made optional in C++20 in most cases, but Clang doesn't support omitting it yet. See P0634R3.
2021-08-08AK: Add formatting for infinity and NaNDaniel Bertalan
Without this patch, we would end up printing garbage values when we encountered floating point infinity or NaN values, and also triggered UBSAN with Clang. This added code models `std::format`'s behavior: the sign is added the same way as with normal values and the strings 'nan' and 'inf' are printed.
2021-08-08AK: Handle partial remaindersDaniel Bertalan
On x86, the `fprem` and `fmprem1` instructions may produce a 'partial remainder', for which we should check by reading a FPU flag. If we don't check for it, we may end up using values that are outside the expected range of values.
2021-08-08LibSanitizer+AK: Add float cast overflow handlerDaniel Bertalan
This is not enabled by default in GCC, but is in Clang.
2021-08-08AK: Use `explode_byte` in BumpAllocator.hDaniel Bertalan
When compiling this code with Clang, both branches of the ternary operator get evaluated at compile-time, triggering a warning about a narrowing implicit conversion. We can use `explode_byte` instead.
2021-08-08AK: Make `InputMemoryStream::read_LEB128_*` templatedDaniel Bertalan
On i686, reading integers larger than `2^32 - 1` would fail as the 32-bit `size_t` parameter would overflow. This caused us to read too few bytes in LibDebug's DWARF parser. Making this method templated solves this issue, as we now can call this API with a `u64` parameter.
2021-08-08AK: Use kmalloc_array() where appropriateAndreas Kling
2021-08-08AK: Add kmalloc_array() to trap multiplication overflowsAndreas Kling
This pattern is no good: kmalloc(elements * sizeof(T)); Since it silently swallows any multiplication overflow. This patch adds a simple kmalloc_array() that stops the program if overflow occurs: kmalloc_array(elements, sizeof(T));
2021-08-08Everywhere: Replace AK::Singleton => SingletonAndreas Kling
2021-08-08AK: Bring Singleton into the global namespace with `using`Andreas Kling
2021-08-07AK: Add RecursionDecisionsin-ack
Similar to IterationDecision, this can be returned from callbacks passed to recursive traversal functions to signal how to proceed.
2021-08-07AK: Use east const in MappedFileTimothy
2021-08-07AK: Add method to create MappedFile from fdTimothy
2021-08-07AK: Introduce IntrusiveListRelaxedConstJean-Baptiste Boric
This container is the same as IntrusiveList, except that it allows modifications to the elements even if the reference to the IntrusiveList itself is const, by returning mutable iterators. This represents a use-case where we want to allow modifications to the elements while keeping the list itself immutable. This behavior is explicitely opt-in by using IntrusiveListRelaxedConst instead of IntrusiveList. It will be useful later on when we model shared/exclusive locks with the help of const and mutable references.
2021-08-06AK: Implement any_of using common implementationLenny Maiorani
Problem: - `any_of` is implemented in 2 different ways, one for the entire container and a different implementation for a partial container using iterators. Solution: - Follow the "don't repeat yourself" (DRY) idiom and implement the entire container version in terms of the partial version.
2021-08-06Kernel: Rename Kernel/VM/ to Kernel/Memory/Andreas Kling
This directory isn't just about virtual memory, it's about all kinds of memory management.
2021-08-06AK: Improve the parsing of data urlsTheFightingCatfish
Improve the parsing of data urls in URLParser to bring it more up-to- spec. At the moment, we cannot parse the components of the MIME type since it is represented as a string, but the spec requires it to be parsed as a "MIME type record".
2021-08-06AK: Make StringBuilder::join() use appendff() instead of append()Ali Mohammad Pur
`append()` is almost never going to select the overload that is desired. e.g. it will append chars when you pass it a Vector<size_t>, which is definitely not the right overload :)
2021-08-04AK+LibJS: Implement String.from{CharCode,CodePoint} using UTF-16 stringsTimothy Flynn
Most of String.prototype and RegExp.prototype is implemented with UTF-16 so this is to prevent extra copying of the string data.
2021-08-04AK: Allow configuring the BumpAllocator chunk sizeTimothy Flynn
2021-08-04AK+LibRegex: Add Utf16View::code_point_at and use it in RegexStringViewTimothy Flynn
The current method of iterating through the string to access a code point hurts performance quite badly for very large strings. The test262 test "RegExp/property-escapes/generated/Any.js" previously took 3 hours to complete; this one change brings it down to under 10 seconds.
2021-08-04AK+Kernel: Print TODO when a TODO() is executedsin-ack
Previously we would just print "ASSERTION FAILED: false", which was kinda cryptic and also didn't make it clear whether this was a TODO or an unreachable condition. Now, we actually print "ASSERTION FAILED: TODO", making it crystal clear.
2021-08-03AK: Mark Time::max() / Time::min() / Time::zero() as constexprBrian Gianforcaro
No reason for these static helper functions to not be constexpr.
2021-08-03Everywhere: Make use of container version of all_ofLenny Maiorani
Problem: - New `all_of` implementation takes the entire container so the user does not need to pass explicit begin/end iterators. This is unused except is in tests. Solution: - Make use of the new and more user-friendly version where possible.
2021-08-02AK: Fix declaration of {String,StringView}::is_one_ofTimothy Flynn
The declarations need to consume the variadic parameters as "Ts&&..." for the parameters to be forwarding references.
2021-08-02AK: Add a simple bump allocatorAli Mohammad Pur
2021-08-02AK: Correct Tuple's constructor signaturesAli Mohammad Pur
Tuple previously required rvalue references, this commit makes it accept forwarding references instead (which was the intention all along).
2021-08-02AK: Add formatters for BigEndian and LittleEndiansin-ack
This allows printing out BigEndian and LittleEndian values without having to perform a static_cast first.
2021-07-31LibWeb: Define proper debug symbols for CSS Parser and TokenizerSam Atkins
You can now turn debug logging for them on using `CSS_PARSER_DEBUG` and `CSS_TOKENIZER_DEBUG`.
2021-07-29AK: Update mmap name for MappedFiles on SerenityOSAndreas Kling
Looking at process memory maps is a lot nicer when you can see the paths of MappedFile mappings.
2021-07-27AK: Add copy_to span method for AK::MACAddressBrian Gianforcaro
2021-07-25AK: Create MACAddress from stringbrapru
Previously there was no way to create a MACAddress by passing a direct address as a string. This will allow programs like the arp utility to create a MACAddress instance by user-passed addresses.
2021-07-24AK: Reimplement all_of in terms of find_ifLenny Maiorani
Problem: - Now that a generic free-function form of `find_if` is implemented the code in `all_of` is redundant. Solution: - Follow the "don't repeat yourself" mantra and make the code DRY by implementing `all_of` in terms of `find_if`. - One tricky part is that since captures are not permitted in `constexpr` lambdas, the lambda created to negate the predicate needs to be created by a function which does not capture and takes the predicate at run-time instead. This allows `all_of` to continue to work in a `constexpr` context.
2021-07-23AK+LibRegex: Partially implement case insensitive UTF-16 comparisonTimothy Flynn
This will work for ASCII code points. Unicode case folding will be needed for non-ASCII.
2021-07-23AK: Add UTF-16 helper methods required for use within LibRegexTimothy Flynn
To be used as a RegexStringView variant, Utf16View must provide a couple more helper methods. It must also not default its assignment operators, because that implicitly deletes move/copy constructors.
2021-07-22CrashDaemon: Remove BACKTRACE_DEBUG debugging codeAndreas Kling
This thing seems to work fine, no need to hang on to old debug code.
2021-07-22AK: Add char SIMD typesHendiadyoin1
These are used in intrinsics, which do not recognize any signed version of the char type
2021-07-22AK: Rewrite {AnyOf,AllOf,Find}.h to use the IteratorPairWith conceptAli Mohammad Pur
This makes it so these algorithms are usable with arbitrary iterators, as opposed to just instances of AK::SimpleIterator. This commit also makes the requirement of ::index() in find_index() explicit, as previously it was accepting any iterator.
2021-07-22AK: Convert AnyOf/AllOf to east-const styleAli Mohammad Pur
2021-07-22AK: Implement {any,all}_of(IterableContainer&&, Predicate)Ali Mohammad Pur
This is a generally nicer-to-use version of the existing {any,all}_of() that doesn't require the user to explicitly provide two iterators. As a bonus, it also allows arbitrary iterators (as opposed to the hard requirement of providing SimpleIterators in the iterator version).