7aac6bc905
Moves the unicode predicate cache tables out of the unicode cache, and turns them into generic predicates in char-predicates.h which use static constexpr tables. This drops the per-isolate cost of unicode caches, and removes the need for accessing the unicode cache from most files. It does remove the mutability of the cache, which means that there may be regressions when parsing non-ASCII identifiers. Most likely the benefits to ASCII identifiers/keywords will outweigh any non-ASCII costs. Change-Id: I9a7a8b7c9b22d3e9ede824ab4e27f133ce20a399 Reviewed-on: https://chromium-review.googlesource.com/c/1335564 Reviewed-by: Yang Guo <yangguo@chromium.org> Reviewed-by: Toon Verwaest <verwaest@chromium.org> Reviewed-by: Michael Starzinger <mstarzinger@chromium.org> Commit-Queue: Leszek Swirski <leszeks@chromium.org> Cr-Commit-Position: refs/heads/master@{#57506}
62 lines
1.8 KiB
C++
62 lines
1.8 KiB
C++
// Copyright 2016 the V8 project authors. All rights reserved.
|
|
// Use of this source code is governed by a BSD-style license that can be
|
|
// found in the LICENSE file.
|
|
|
|
// Test enabled only on supported architectures.
|
|
#if defined(V8_TARGET_ARCH_X64) || defined(V8_TARGET_ARCH_ARM) || \
|
|
defined(V8_TARGET_ARCH_ARM64)
|
|
|
|
#include "src/flags.h"
|
|
#include "src/objects-inl.h"
|
|
#include "src/objects.h"
|
|
#include "test/cctest/compiler/function-tester.h"
|
|
|
|
namespace v8 {
|
|
namespace internal {
|
|
namespace compiler {
|
|
|
|
TEST(RunUnwindingInfo) {
|
|
FLAG_always_opt = true;
|
|
FLAG_perf_prof_unwinding_info = true;
|
|
|
|
FunctionTester tester(
|
|
"(function (x) {\n"
|
|
" function f(x) { return x*x; }\n"
|
|
" return x > 0 ? x+1 : f(x);\n"
|
|
"})");
|
|
|
|
tester.Call(tester.Val(-1));
|
|
|
|
CHECK(tester.function->code()->has_unwinding_info());
|
|
}
|
|
|
|
// TODO(ssanfilippo) Build low-level graph and check that state is correctly
|
|
// restored in the following situation:
|
|
//
|
|
// +-----------------+
|
|
// | no frame |---+
|
|
// check that a +-----------------+ |
|
|
// a noframe state | construct frame |<--+
|
|
// is restored here --> +-----------------+ |
|
|
// | construct frame |<--+
|
|
// +-----------------+
|
|
//
|
|
// Same for <construct>/<destruct>/<destruct> (a <construct> status is restored)
|
|
|
|
// TODO(ssanfilippo) Intentionally reach a BB with different initial states
|
|
// and check that the UnwindingInforWriter fails in debug mode:
|
|
//
|
|
// +----------------+
|
|
// +---| State A |
|
|
// | +----------------+
|
|
// | | State B != A |---+
|
|
// | +----------------+ |
|
|
// +-->| Failure here |<--+
|
|
// +----------------+
|
|
|
|
} // namespace compiler
|
|
} // namespace internal
|
|
} // namespace v8
|
|
|
|
#endif
|