From 45f20e366aed3bc1972faf853474fd4167c7e7c4 Mon Sep 17 00:00:00 2001 From: "yangguo@chromium.org" Date: Wed, 9 Jan 2013 10:30:54 +0000 Subject: [PATCH] Introduce ENABLE_LATIN_1 compile flag Mostly a bunch of renaming when flag is disabled. R=yangguo@chromium.org BUG= Review URL: https://chromiumcodereview.appspot.com/11759008 Patch from Dan Carney . git-svn-id: http://v8.googlecode.com/svn/branches/bleeding_edge@13340 ce2b1a6d-e550-0410-aec6-3dcde31c8c00 --- build/common.gypi | 5 ++ src/api.cc | 8 +- src/arm/code-stubs-arm.cc | 4 +- src/arm/full-codegen-arm.cc | 2 +- src/arm/lithium-codegen-arm.cc | 8 +- src/arm/regexp-macro-assembler-arm.cc | 4 +- src/ast.cc | 5 +- src/bootstrapper.cc | 3 +- src/bootstrapper.h | 2 +- src/codegen.cc | 2 +- src/compiler.cc | 4 +- src/factory.cc | 6 +- src/factory.h | 12 ++- src/globals.h | 6 +- src/heap-inl.h | 12 +-- src/heap.cc | 57 +++++++------- src/heap.h | 22 ++++-- src/hydrogen.cc | 6 +- src/ia32/code-stubs-ia32.cc | 4 +- src/ia32/full-codegen-ia32.cc | 2 +- src/ia32/lithium-codegen-ia32.cc | 8 +- src/ia32/regexp-macro-assembler-ia32.cc | 4 +- src/json-parser.h | 13 ++-- src/jsregexp.cc | 112 +++++++++++++++++---------- src/jsregexp.h | 14 ++-- src/log.cc | 2 +- src/mips/code-stubs-mips.cc | 4 +- src/mips/full-codegen-mips.cc | 2 +- src/mips/lithium-codegen-mips.cc | 8 +- src/mips/regexp-macro-assembler-mips.cc | 4 +- src/objects-debug.cc | 4 +- src/objects-inl.h | 12 ++- src/objects.cc | 40 +++++----- src/objects.h | 35 ++++++--- src/parser.cc | 8 +- src/runtime.cc | 32 ++++---- src/scanner.h | 6 +- src/string-search.h | 13 ++-- src/string.js | 1 + src/unicode.h | 8 ++ src/utils.h | 42 +++++++++- src/v8utils.h | 33 +++++++- src/x64/code-stubs-x64.cc | 2 +- src/x64/full-codegen-x64.cc | 2 +- src/x64/lithium-codegen-x64.cc | 8 +- src/x64/regexp-macro-assembler-x64.cc | 4 +- test/cctest/test-api.cc | 4 +- test/cctest/test-hashing.cc | 23 +++--- test/cctest/test-heap.cc | 10 +-- test/cctest/test-strings.cc | 2 +- test/mjsunit/regress/regress-crbug-146910.js | 15 ++-- 51 files changed, 408 insertions(+), 241 deletions(-) diff --git a/build/common.gypi b/build/common.gypi index 0144435..34bf50c 100644 --- a/build/common.gypi +++ b/build/common.gypi @@ -66,6 +66,8 @@ # Default arch variant for MIPS. 'mips_arch_variant%': 'mips32r2', + 'v8_enable_latin_1%': 0, + 'v8_enable_debugger_support%': 1, 'v8_enable_backtrace%': 0, @@ -107,6 +109,9 @@ }, 'target_defaults': { 'conditions': [ + ['v8_enable_latin_1==1', { + 'defines': ['ENABLE_LATIN_1',], + }], ['v8_enable_debugger_support==1', { 'defines': ['ENABLE_DEBUGGER_SUPPORT',], }], diff --git a/src/api.cc b/src/api.cc index b926c22..1097200 100644 --- a/src/api.cc +++ b/src/api.cc @@ -3124,7 +3124,7 @@ Local v8::Object::ObjectProtoToString() { } else { i::Handle class_name = i::Handle::cast(name); - if (class_name->IsEqualTo(i::CStrVector("Arguments"))) { + if (class_name->IsOneByteEqualTo(STATIC_ASCII_VECTOR("Arguments"))) { return v8::String::New("[object Object]"); } else { @@ -4145,7 +4145,7 @@ int String::WriteAscii(char* buffer, FlattenString(str); // Flatten the string for efficiency. } - if (str->IsOneByteRepresentation()) { + if (str->HasOnlyAsciiChars()) { // WriteToFlat is faster than using the StringCharacterStream. if (length == -1) length = str->length() + 1; int len = i::Min(length, str->length() - start); @@ -5183,14 +5183,14 @@ void v8::Date::DateTimeConfigurationChangeNotification() { static i::Handle RegExpFlagsToString(RegExp::Flags flags) { - char flags_buf[3]; + uint8_t flags_buf[3]; int num_flags = 0; if ((flags & RegExp::kGlobal) != 0) flags_buf[num_flags++] = 'g'; if ((flags & RegExp::kMultiline) != 0) flags_buf[num_flags++] = 'm'; if ((flags & RegExp::kIgnoreCase) != 0) flags_buf[num_flags++] = 'i'; ASSERT(num_flags <= static_cast(ARRAY_SIZE(flags_buf))); return FACTORY->LookupOneByteSymbol( - i::Vector(flags_buf, num_flags)); + i::Vector(flags_buf, num_flags)); } diff --git a/src/arm/code-stubs-arm.cc b/src/arm/code-stubs-arm.cc index a670d5c..66aee2e 100644 --- a/src/arm/code-stubs-arm.cc +++ b/src/arm/code-stubs-arm.cc @@ -5661,10 +5661,10 @@ void StringCharFromCodeGenerator::GenerateFast(MacroAssembler* masm) { // Fast case of Heap::LookupSingleCharacterStringFromCode. STATIC_ASSERT(kSmiTag == 0); STATIC_ASSERT(kSmiShiftSize == 0); - ASSERT(IsPowerOf2(String::kMaxAsciiCharCode + 1)); + ASSERT(IsPowerOf2(String::kMaxOneByteCharCode + 1)); __ tst(code_, Operand(kSmiTagMask | - ((~String::kMaxAsciiCharCode) << kSmiTagSize))); + ((~String::kMaxOneByteCharCode) << kSmiTagSize))); __ b(ne, &slow_case_); __ LoadRoot(result_, Heap::kSingleCharacterStringCacheRootIndex); diff --git a/src/arm/full-codegen-arm.cc b/src/arm/full-codegen-arm.cc index 19b4c08..6a97201 100644 --- a/src/arm/full-codegen-arm.cc +++ b/src/arm/full-codegen-arm.cc @@ -138,7 +138,7 @@ void FullCodeGenerator::Generate() { #ifdef DEBUG if (strlen(FLAG_stop_at) > 0 && - info->function()->name()->IsEqualTo(CStrVector(FLAG_stop_at))) { + info->function()->name()->IsUtf8EqualTo(CStrVector(FLAG_stop_at))) { __ stop("stop-at"); } #endif diff --git a/src/arm/lithium-codegen-arm.cc b/src/arm/lithium-codegen-arm.cc index 9a83073..c7fe06c 100644 --- a/src/arm/lithium-codegen-arm.cc +++ b/src/arm/lithium-codegen-arm.cc @@ -121,7 +121,7 @@ bool LCodeGen::GeneratePrologue() { #ifdef DEBUG if (strlen(FLAG_stop_at) > 0 && - info_->function()->name()->IsEqualTo(CStrVector(FLAG_stop_at))) { + info_->function()->name()->IsUtf8EqualTo(CStrVector(FLAG_stop_at))) { __ stop("stop_at"); } #endif @@ -2562,7 +2562,7 @@ void LCodeGen::EmitClassOfTest(Label* is_true, __ JumpIfSmi(input, is_false); - if (class_name->IsEqualTo(CStrVector("Function"))) { + if (class_name->IsOneByteEqualTo(STATIC_ASCII_VECTOR("Function"))) { // Assuming the following assertions, we can use the same compares to test // for both being a function type and being in the object type range. STATIC_ASSERT(NUM_OF_CALLABLE_SPEC_OBJECT_TYPES == 2); @@ -2593,7 +2593,7 @@ void LCodeGen::EmitClassOfTest(Label* is_true, // Objects with a non-function constructor have class 'Object'. __ CompareObjectType(temp, temp2, temp2, JS_FUNCTION_TYPE); - if (class_name->IsEqualTo(CStrVector("Object"))) { + if (class_name->IsOneByteEqualTo(STATIC_ASCII_VECTOR("Object"))) { __ b(ne, is_true); } else { __ b(ne, is_false); @@ -4625,7 +4625,7 @@ void LCodeGen::DoStringCharFromCode(LStringCharFromCode* instr) { Register result = ToRegister(instr->result()); ASSERT(!char_code.is(result)); - __ cmp(char_code, Operand(String::kMaxAsciiCharCode)); + __ cmp(char_code, Operand(String::kMaxOneByteCharCode)); __ b(hi, deferred->entry()); __ LoadRoot(result, Heap::kSingleCharacterStringCacheRootIndex); __ add(result, result, Operand(char_code, LSL, kPointerSizeLog2)); diff --git a/src/arm/regexp-macro-assembler-arm.cc b/src/arm/regexp-macro-assembler-arm.cc index 21b92b7..608c209 100644 --- a/src/arm/regexp-macro-assembler-arm.cc +++ b/src/arm/regexp-macro-assembler-arm.cc @@ -261,7 +261,7 @@ void RegExpMacroAssemblerARM::CheckCharacters(Vector str, for (int i = 0; i < str.length(); i++) { if (mode_ == ASCII) { __ ldrb(r1, MemOperand(r0, char_size(), PostIndex)); - ASSERT(str[i] <= String::kMaxAsciiCharCode); + ASSERT(str[i] <= String::kMaxOneByteCharCode); __ cmp(r1, Operand(str[i])); } else { __ ldrh(r1, MemOperand(r0, char_size(), PostIndex)); @@ -508,7 +508,7 @@ void RegExpMacroAssemblerARM::CheckBitInTable( Handle table, Label* on_bit_set) { __ mov(r0, Operand(table)); - if (mode_ != ASCII || kTableMask != String::kMaxAsciiCharCode) { + if (mode_ != ASCII || kTableMask != String::kMaxOneByteCharCode) { __ and_(r1, current_character(), Operand(kTableSize - 1)); __ add(r1, r1, Operand(ByteArray::kHeaderSize - kHeapObjectTag)); } else { diff --git a/src/ast.cc b/src/ast.cc index a63bb83..e2acd20 100644 --- a/src/ast.cc +++ b/src/ast.cc @@ -1083,8 +1083,9 @@ void AstConstructionVisitor::VisitCallRuntime(CallRuntime* node) { // optimize them. add_flag(kDontInline); } else if (node->function()->intrinsic_type == Runtime::INLINE && - (node->name()->IsEqualTo(CStrVector("_ArgumentsLength")) || - node->name()->IsEqualTo(CStrVector("_Arguments")))) { + (node->name()->IsOneByteEqualTo( + STATIC_ASCII_VECTOR("_ArgumentsLength")) || + node->name()->IsOneByteEqualTo(STATIC_ASCII_VECTOR("_Arguments")))) { // Don't inline the %_ArgumentsLength or %_Arguments because their // implementation will not work. There is no stack frame to get them // from. diff --git a/src/bootstrapper.cc b/src/bootstrapper.cc index bf96c8c..762c4f9 100644 --- a/src/bootstrapper.cc +++ b/src/bootstrapper.cc @@ -499,7 +499,8 @@ Handle Genesis::CreateEmptyFunction(Isolate* isolate) { Builtins::kEmptyFunction)); empty_function->set_code(*code); empty_function->shared()->set_code(*code); - Handle source = factory->NewStringFromAscii(CStrVector("() {}")); + Handle source = + factory->NewStringFromOneByte(STATIC_ASCII_VECTOR("() {}")); Handle