Sha256: 459cd55be8e4485921d57ccd658bf3da50086f07fa48088308bfb77214c082a5
Contents?: true
Size: 1.87 KB
Versions: 5
Compression:
Stored size: 1.87 KB
Contents
// 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. #include "src/ast/compile-time-value.h" #include "src/ast/ast.h" #include "src/factory.h" #include "src/handles-inl.h" #include "src/isolate.h" #include "src/objects-inl.h" namespace v8 { namespace internal { bool CompileTimeValue::IsCompileTimeValue(Expression* expression) { if (expression->IsLiteral()) return true; MaterializedLiteral* lit = expression->AsMaterializedLiteral(); return lit != NULL && lit->is_simple(); } Handle<FixedArray> CompileTimeValue::GetValue(Isolate* isolate, Expression* expression) { Factory* factory = isolate->factory(); DCHECK(IsCompileTimeValue(expression)); Handle<FixedArray> result = factory->NewFixedArray(2, TENURED); if (expression->IsObjectLiteral()) { ObjectLiteral* object_literal = expression->AsObjectLiteral(); DCHECK(object_literal->is_simple()); int literalTypeFlag = object_literal->EncodeLiteralType(); DCHECK_NE(kArrayLiteralFlag, literalTypeFlag); result->set(kLiteralTypeSlot, Smi::FromInt(literalTypeFlag)); result->set(kElementsSlot, *object_literal->constant_properties()); } else { ArrayLiteral* array_literal = expression->AsArrayLiteral(); DCHECK(array_literal != NULL && array_literal->is_simple()); result->set(kLiteralTypeSlot, Smi::FromInt(kArrayLiteralFlag)); result->set(kElementsSlot, *array_literal->constant_elements()); } return result; } int CompileTimeValue::GetLiteralTypeFlags(Handle<FixedArray> value) { return Smi::cast(value->get(kLiteralTypeSlot))->value(); } Handle<HeapObject> CompileTimeValue::GetElements(Handle<FixedArray> value) { return Handle<HeapObject>(HeapObject::cast(value->get(kElementsSlot))); } } // namespace internal } // namespace v8
Version data entries
5 entries across 5 versions & 1 rubygems