Commit f7be7ae0 authored by Jakob Gruber's avatar Jakob Gruber Committed by Commit Bot

Clean out dead code and remove IS_VAR support

This removes unused code (macros.py, runtime functions). As IS_VAR is
now unused we can remove support from the parser.

Bug: v8:7624
Change-Id: Ia1c5e23f4c2caa85310d3f9a557218fc52d200f2
Reviewed-on: https://chromium-review.googlesource.com/c/1329696Reviewed-by: 's avatarIgor Sheludko <ishell@chromium.org>
Reviewed-by: 's avatarSathya Gunasekaran <gsathya@chromium.org>
Commit-Queue: Jakob Gruber <jgruber@chromium.org>
Cr-Commit-Position: refs/heads/master@{#57434}
parent 2ecdbd24
...@@ -2577,15 +2577,6 @@ RUNTIME_FUNCTION(Runtime_CloneObjectIC_Miss) { ...@@ -2577,15 +2577,6 @@ RUNTIME_FUNCTION(Runtime_CloneObjectIC_Miss) {
return *result_map; return *result_map;
} }
RUNTIME_FUNCTION(Runtime_CloneObjectIC_Slow) {
HandleScope scope(isolate);
DCHECK_EQ(2, args.length());
Handle<HeapObject> source = args.at<HeapObject>(0);
int flags = args.smi_at(1);
RETURN_RESULT_OR_FAILURE(isolate,
CloneObjectSlowPath(isolate, source, flags));
}
RUNTIME_FUNCTION(Runtime_StoreCallbackProperty) { RUNTIME_FUNCTION(Runtime_StoreCallbackProperty) {
Handle<JSObject> receiver = args.at<JSObject>(0); Handle<JSObject> receiver = args.at<JSObject>(0);
Handle<JSObject> holder = args.at<JSObject>(1); Handle<JSObject> holder = args.at<JSObject>(1);
......
...@@ -33,53 +33,21 @@ define READ_ONLY = 1; ...@@ -33,53 +33,21 @@ define READ_ONLY = 1;
define DONT_ENUM = 2; define DONT_ENUM = 2;
define DONT_DELETE = 4; define DONT_DELETE = 4;
# 2^32 - 1
define kMaxUint32 = 4294967295;
# Type query macros. # Type query macros.
#
# Note: We have special support for typeof(foo) === 'bar' in the compiler.
# It will *not* generate a runtime typeof call for the most important
# values of 'bar'.
macro IS_ARRAY(arg) = (%_IsArray(arg)); macro IS_ARRAY(arg) = (%_IsArray(arg));
macro IS_NULL(arg) = (arg === null); macro IS_NULL(arg) = (arg === null);
macro IS_NULL_OR_UNDEFINED(arg) = (arg == null); macro IS_NULL_OR_UNDEFINED(arg) = (arg == null);
macro IS_NUMBER(arg) = (typeof(arg) === 'number'); macro IS_NUMBER(arg) = (typeof(arg) === 'number');
macro IS_STRING(arg) = (typeof(arg) === 'string');
macro IS_SYMBOL(arg) = (typeof(arg) === 'symbol'); macro IS_SYMBOL(arg) = (typeof(arg) === 'symbol');
macro IS_UNDEFINED(arg) = (arg === (void 0)); macro IS_UNDEFINED(arg) = (arg === (void 0));
# Macro for ES queries of the type: "Type(O) is Object."
macro IS_RECEIVER(arg) = (%_IsJSReceiver(arg));
# Macro for ES queries of the type: "IsCallable(O)"
macro IS_CALLABLE(arg) = (typeof(arg) === 'function'); macro IS_CALLABLE(arg) = (typeof(arg) === 'function');
# Macro for ES RequireObjectCoercible # Inline macros.
# https://tc39.github.io/ecma262/#sec-requireobjectcoercible
# Throws a TypeError of the form "[functionName] called on null or undefined".
macro REQUIRE_OBJECT_COERCIBLE(arg, functionName) = if (IS_NULL(%IS_VAR(arg)) || IS_UNDEFINED(arg)) throw %make_type_error(kCalledOnNullOrUndefined, functionName);
# Inline macros. Use %IS_VAR to make sure arg is evaluated only once.
macro TO_BOOLEAN(arg) = (!!(arg));
macro TO_LENGTH(arg) = (%_ToLength(arg)); macro TO_LENGTH(arg) = (%_ToLength(arg));
macro TO_STRING(arg) = (%_ToString(arg)); macro TO_STRING(arg) = (%_ToString(arg));
macro TO_OBJECT(arg) = (%_ToObject(arg));
macro HAS_OWN_PROPERTY(obj, key) = (%_Call(ObjectHasOwnProperty, obj, key));
macro DEFINE_METHODS_LEN(obj, class_def, len) = %DefineMethodsInternal(obj, class class_def, len);
macro DEFINE_METHOD_LEN(obj, method_def, len) = %DefineMethodsInternal(obj, class { method_def }, len); macro DEFINE_METHOD_LEN(obj, method_def, len) = %DefineMethodsInternal(obj, class { method_def }, len);
macro DEFINE_METHODS(obj, class_def) = DEFINE_METHODS_LEN(obj, class_def, -1);
macro DEFINE_METHOD(obj, method_def) = DEFINE_METHOD_LEN(obj, method_def, -1); macro DEFINE_METHOD(obj, method_def) = DEFINE_METHOD_LEN(obj, method_def, -1);
# Constants. The compiler constant folds them. # Constants. The compiler constant folds them.
define INFINITY = (1/0);
define UNDEFINED = (void 0); define UNDEFINED = (void 0);
# This should be kept consistent with Intl::Type.
define NUMBER_FORMAT_TYPE = 0;
define COLLATOR_TYPE = 1;
define DATE_TIME_FORMAT_TYPE = 2;
define PLURAL_RULES_TYPE = 3;
define BREAK_ITERATOR_TYPE = 4;
define LOCALE_TYPE = 5;
...@@ -411,7 +411,6 @@ namespace internal { ...@@ -411,7 +411,6 @@ namespace internal {
"More than one default clause in switch statement") \ "More than one default clause in switch statement") \
T(NewlineAfterThrow, "Illegal newline after throw") \ T(NewlineAfterThrow, "Illegal newline after throw") \
T(NoCatchOrFinally, "Missing catch or finally after try") \ T(NoCatchOrFinally, "Missing catch or finally after try") \
T(NotIsvar, "builtin %%IS_VAR: not a variable") \
T(ParamAfterRest, "Rest parameter must be last formal parameter") \ T(ParamAfterRest, "Rest parameter must be last formal parameter") \
T(FlattenPastSafeLength, \ T(FlattenPastSafeLength, \
"Flattening % elements on an array-like of length % " \ "Flattening % elements on an array-like of length % " \
......
...@@ -356,19 +356,6 @@ Expression* Parser::NewV8Intrinsic(const AstRawString* name, ...@@ -356,19 +356,6 @@ Expression* Parser::NewV8Intrinsic(const AstRawString* name,
// Check for possible name clash. // Check for possible name clash.
DCHECK_EQ(Context::kNotFound, DCHECK_EQ(Context::kNotFound,
Context::IntrinsicIndexForName(name->raw_data(), name->length())); Context::IntrinsicIndexForName(name->raw_data(), name->length()));
// Check for built-in IS_VAR macro.
if (function->function_id == Runtime::kIS_VAR) {
DCHECK_EQ(Runtime::RUNTIME, function->intrinsic_type);
// %IS_VAR(x) evaluates to x if x is a variable,
// leads to a parse error otherwise. Could be implemented as an
// inline function %_IS_VAR(x) to eliminate this special case.
if (args.length() == 1 && args.at(0)->AsVariableProxy() != nullptr) {
return args.at(0);
} else {
ReportMessage(MessageTemplate::kNotIsvar);
return FailureExpression();
}
}
// Check that the expected number of arguments are being passed. // Check that the expected number of arguments are being passed.
if (function->nargs != -1 && function->nargs != args.length()) { if (function->nargs != -1 && function->nargs != args.length()) {
......
...@@ -404,29 +404,6 @@ RUNTIME_FUNCTION(Runtime_PrepareElementsForSort) { ...@@ -404,29 +404,6 @@ RUNTIME_FUNCTION(Runtime_PrepareElementsForSort) {
return RemoveArrayHoles(isolate, object, length); return RemoveArrayHoles(isolate, object, length);
} }
// Move contents of argument 0 (an array) to argument 1 (an array)
RUNTIME_FUNCTION(Runtime_MoveArrayContents) {
HandleScope scope(isolate);
DCHECK_EQ(2, args.length());
CONVERT_ARG_HANDLE_CHECKED(JSArray, from, 0);
CONVERT_ARG_HANDLE_CHECKED(JSArray, to, 1);
JSObject::ValidateElements(*from);
JSObject::ValidateElements(*to);
Handle<FixedArrayBase> new_elements(from->elements(), isolate);
ElementsKind from_kind = from->GetElementsKind();
Handle<Map> new_map = JSObject::GetElementsTransitionMap(to, from_kind);
JSObject::SetMapAndElements(to, new_map, new_elements);
to->set_length(from->length());
from->initialize_elements();
from->set_length(Smi::kZero);
JSObject::ValidateElements(*to);
return *to;
}
// How many elements does this object/array have? // How many elements does this object/array have?
RUNTIME_FUNCTION(Runtime_EstimateNumberOfElements) { RUNTIME_FUNCTION(Runtime_EstimateNumberOfElements) {
DisallowHeapAllocation no_gc; DisallowHeapAllocation no_gc;
......
...@@ -312,10 +312,6 @@ RUNTIME_FUNCTION(Runtime_AllocateSeqTwoByteString) { ...@@ -312,10 +312,6 @@ RUNTIME_FUNCTION(Runtime_AllocateSeqTwoByteString) {
return *result; return *result;
} }
RUNTIME_FUNCTION(Runtime_IS_VAR) {
UNREACHABLE(); // implemented as macro in the parser
}
namespace { namespace {
bool ComputeLocation(Isolate* isolate, MessageLocation* target) { bool ComputeLocation(Isolate* isolate, MessageLocation* target) {
......
...@@ -107,13 +107,6 @@ RUNTIME_FUNCTION(Runtime_PromiseStatus) { ...@@ -107,13 +107,6 @@ RUNTIME_FUNCTION(Runtime_PromiseStatus) {
return Smi::FromInt(promise->status()); return Smi::FromInt(promise->status());
} }
RUNTIME_FUNCTION(Runtime_PromiseResult) {
HandleScope scope(isolate);
DCHECK_EQ(1, args.length());
CONVERT_ARG_HANDLE_CHECKED(JSPromise, promise, 0);
return promise->result();
}
RUNTIME_FUNCTION(Runtime_PromiseMarkAsHandled) { RUNTIME_FUNCTION(Runtime_PromiseMarkAsHandled) {
SealHandleScope shs(isolate); SealHandleScope shs(isolate);
DCHECK_EQ(1, args.length()); DCHECK_EQ(1, args.length());
......
...@@ -928,20 +928,6 @@ RUNTIME_FUNCTION(Runtime_ArraySpeciesProtector) { ...@@ -928,20 +928,6 @@ RUNTIME_FUNCTION(Runtime_ArraySpeciesProtector) {
return isolate->heap()->ToBoolean(isolate->IsArraySpeciesLookupChainIntact()); return isolate->heap()->ToBoolean(isolate->IsArraySpeciesLookupChainIntact());
} }
RUNTIME_FUNCTION(Runtime_TypedArraySpeciesProtector) {
SealHandleScope shs(isolate);
DCHECK_EQ(0, args.length());
return isolate->heap()->ToBoolean(
isolate->IsTypedArraySpeciesLookupChainIntact());
}
RUNTIME_FUNCTION(Runtime_PromiseSpeciesProtector) {
SealHandleScope shs(isolate);
DCHECK_EQ(0, args.length());
return isolate->heap()->ToBoolean(
isolate->IsPromiseSpeciesLookupChainIntact());
}
RUNTIME_FUNCTION(Runtime_MapIteratorProtector) { RUNTIME_FUNCTION(Runtime_MapIteratorProtector) {
SealHandleScope shs(isolate); SealHandleScope shs(isolate);
DCHECK_EQ(0, args.length()); DCHECK_EQ(0, args.length());
......
...@@ -47,7 +47,6 @@ namespace internal { ...@@ -47,7 +47,6 @@ namespace internal {
F(GrowArrayElements, 2, 1) \ F(GrowArrayElements, 2, 1) \
F(HasComplexElements, 1, 1) \ F(HasComplexElements, 1, 1) \
I(IsArray, 1, 1) \ I(IsArray, 1, 1) \
F(MoveArrayContents, 2, 1) \
F(NewArray, -1 /* >= 3 */, 1) \ F(NewArray, -1 /* >= 3 */, 1) \
F(NormalizeElements, 1, 1) \ F(NormalizeElements, 1, 1) \
F(PrepareElementsForSort, 2, 1) \ F(PrepareElementsForSort, 2, 1) \
...@@ -224,7 +223,6 @@ namespace internal { ...@@ -224,7 +223,6 @@ namespace internal {
F(IncrementUseCounter, 1, 1) \ F(IncrementUseCounter, 1, 1) \
F(InstallToContext, 1, 1) \ F(InstallToContext, 1, 1) \
F(Interrupt, 0, 1) \ F(Interrupt, 0, 1) \
F(IS_VAR, 1, 1) \
F(NewReferenceError, 2, 1) \ F(NewReferenceError, 2, 1) \
F(NewSyntaxError, 2, 1) \ F(NewSyntaxError, 2, 1) \
F(NewTypeError, 2, 1) \ F(NewTypeError, 2, 1) \
...@@ -354,7 +352,6 @@ namespace internal { ...@@ -354,7 +352,6 @@ namespace internal {
F(AwaitPromisesInitOld, 5, 1) \ F(AwaitPromisesInitOld, 5, 1) \
F(PromiseMarkAsHandled, 1, 1) \ F(PromiseMarkAsHandled, 1, 1) \
F(PromiseRejectEventFromStack, 2, 1) \ F(PromiseRejectEventFromStack, 2, 1) \
F(PromiseResult, 1, 1) \
F(PromiseRevokeReject, 1, 1) \ F(PromiseRevokeReject, 1, 1) \
F(PromiseStatus, 1, 1) \ F(PromiseStatus, 1, 1) \
F(RejectPromise, 3, 1) \ F(RejectPromise, 3, 1) \
...@@ -508,8 +505,6 @@ namespace internal { ...@@ -508,8 +505,6 @@ namespace internal {
F(SetWasmCompileControls, 2, 1) \ F(SetWasmCompileControls, 2, 1) \
F(SetWasmInstantiateControls, 0, 1) \ F(SetWasmInstantiateControls, 0, 1) \
F(ArraySpeciesProtector, 0, 1) \ F(ArraySpeciesProtector, 0, 1) \
F(TypedArraySpeciesProtector, 0, 1) \
F(PromiseSpeciesProtector, 0, 1) \
F(MapIteratorProtector, 0, 1) \ F(MapIteratorProtector, 0, 1) \
F(SetIteratorProtector, 0, 1) \ F(SetIteratorProtector, 0, 1) \
F(StringIteratorProtector, 0, 1) \ F(StringIteratorProtector, 0, 1) \
...@@ -569,8 +564,7 @@ namespace internal { ...@@ -569,8 +564,7 @@ namespace internal {
F(StoreIC_Miss, 5, 1) \ F(StoreIC_Miss, 5, 1) \
F(StoreInArrayLiteralIC_Slow, 5, 1) \ F(StoreInArrayLiteralIC_Slow, 5, 1) \
F(StorePropertyWithInterceptor, 5, 1) \ F(StorePropertyWithInterceptor, 5, 1) \
F(CloneObjectIC_Miss, 4, 1) \ F(CloneObjectIC_Miss, 4, 1)
F(CloneObjectIC_Slow, 2, 1)
#define FOR_EACH_INTRINSIC_RETURN_OBJECT_IMPL(F, I) \ #define FOR_EACH_INTRINSIC_RETURN_OBJECT_IMPL(F, I) \
FOR_EACH_INTRINSIC_ARRAY(F, I) \ FOR_EACH_INTRINSIC_ARRAY(F, I) \
......
// Copyright 2008 the V8 project authors. All rights reserved.
// Redistribution and use in source and binary forms, with or without
// modification, are permitted provided that the following conditions are
// met:
//
// * Redistributions of source code must retain the above copyright
// notice, this list of conditions and the following disclaimer.
// * Redistributions in binary form must reproduce the above
// copyright notice, this list of conditions and the following
// disclaimer in the documentation and/or other materials provided
// with the distribution.
// * Neither the name of Google Inc. nor the names of its
// contributors may be used to endorse or promote products derived
// from this software without specific prior written permission.
//
// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
// "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
// LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
// A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
// OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
// SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
// LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
// DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
// THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
// OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
// Flags: --allow-natives-syntax
var x;
%IS_VAR(x);
%IS_VAR(x+x);
*%(basename)s:31: SyntaxError: builtin %%IS_VAR: not a variable
%%IS_VAR(x+x);
^
SyntaxError: builtin %%IS_VAR: not a variable
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment