Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(75)

Side by Side Diff: src/serialize.cc

Issue 395823002: Store builtin index on the builtin code object. (Closed) Base URL: https://v8.googlecode.com/svn/branches/bleeding_edge
Patch Set: Created 6 years, 5 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View unified diff | Download patch | Annotate | Revision Log
« no previous file with comments | « src/objects-inl.h ('k') | no next file » | no next file with comments »
Toggle Intra-line Diffs ('i') | Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
OLDNEW
1 // Copyright 2012 the V8 project authors. All rights reserved. 1 // Copyright 2012 the V8 project authors. All rights reserved.
2 // Use of this source code is governed by a BSD-style license that can be 2 // Use of this source code is governed by a BSD-style license that can be
3 // found in the LICENSE file. 3 // found in the LICENSE file.
4 4
5 #include "src/v8.h" 5 #include "src/v8.h"
6 6
7 #include "src/accessors.h" 7 #include "src/accessors.h"
8 #include "src/api.h" 8 #include "src/api.h"
9 #include "src/base/platform/platform.h" 9 #include "src/base/platform/platform.h"
10 #include "src/bootstrapper.h" 10 #include "src/bootstrapper.h"
(...skipping 1919 matching lines...) Expand 10 before | Expand all | Expand 10 after
1930 where_to_point, skip); 1930 where_to_point, skip);
1931 return; 1931 return;
1932 } 1932 }
1933 1933
1934 if (heap_object->IsCode()) { 1934 if (heap_object->IsCode()) {
1935 Code* code_object = Code::cast(heap_object); 1935 Code* code_object = Code::cast(heap_object);
1936 if (code_object->kind() == Code::BUILTIN) { 1936 if (code_object->kind() == Code::BUILTIN) {
1937 SerializeBuiltin(code_object, how_to_code, where_to_point, skip); 1937 SerializeBuiltin(code_object, how_to_code, where_to_point, skip);
1938 return; 1938 return;
1939 } 1939 }
1940 // TODO(yangguo) figure out whether other code kinds can be handled smarter.
1940 } 1941 }
1941 1942
1942 if (heap_object == source_) { 1943 if (heap_object == source_) {
1943 SerializeSourceObject(how_to_code, where_to_point, skip); 1944 SerializeSourceObject(how_to_code, where_to_point, skip);
1944 return; 1945 return;
1945 } 1946 }
1946 1947
1947 if (skip != 0) { 1948 if (skip != 0) {
1948 sink_->Put(kSkip, "SkipFromSerializeObject"); 1949 sink_->Put(kSkip, "SkipFromSerializeObject");
1949 sink_->PutInt(skip, "SkipDistanceFromSerializeObject"); 1950 sink_->PutInt(skip, "SkipDistanceFromSerializeObject");
1950 } 1951 }
1951 // Object has not yet been serialized. Serialize it here. 1952 // Object has not yet been serialized. Serialize it here.
1952 ObjectSerializer serializer(this, heap_object, sink_, how_to_code, 1953 ObjectSerializer serializer(this, heap_object, sink_, how_to_code,
1953 where_to_point); 1954 where_to_point);
1954 serializer.Serialize(); 1955 serializer.Serialize();
1955 } 1956 }
1956 1957
1957 1958
1958 void CodeSerializer::SerializeBuiltin(Code* builtin, HowToCode how_to_code, 1959 void CodeSerializer::SerializeBuiltin(Code* builtin, HowToCode how_to_code,
1959 WhereToPoint where_to_point, int skip) { 1960 WhereToPoint where_to_point, int skip) {
1960 if (skip != 0) { 1961 if (skip != 0) {
1961 sink_->Put(kSkip, "SkipFromSerializeBuiltin"); 1962 sink_->Put(kSkip, "SkipFromSerializeBuiltin");
1962 sink_->PutInt(skip, "SkipDistanceFromSerializeBuiltin"); 1963 sink_->PutInt(skip, "SkipDistanceFromSerializeBuiltin");
1963 } 1964 }
1964 1965
1965 ASSERT((how_to_code == kPlain && where_to_point == kStartOfObject) || 1966 ASSERT((how_to_code == kPlain && where_to_point == kStartOfObject) ||
1966 (how_to_code == kFromCode && where_to_point == kInnerPointer)); 1967 (how_to_code == kFromCode && where_to_point == kInnerPointer));
1967 int id = 0; 1968 int builtin_index = builtin->builtin_index();
1968 do { // Look for existing builtins in the list. 1969 ASSERT_LT(builtin_index, Builtins::builtin_count);
1969 Code* b = isolate()->builtins()->builtin(static_cast<Builtins::Name>(id)); 1970 ASSERT_LE(0, builtin_index);
1970 if (builtin == b) break;
1971 } while (++id < Builtins::builtin_count);
1972 ASSERT(id < Builtins::builtin_count); // We must have found a one.
1973
1974 sink_->Put(kBuiltin + how_to_code + where_to_point, "Builtin"); 1971 sink_->Put(kBuiltin + how_to_code + where_to_point, "Builtin");
1975 sink_->PutInt(id, "builtin_index"); 1972 sink_->PutInt(builtin_index, "builtin_index");
1976 } 1973 }
1977 1974
1978 1975
1979 void CodeSerializer::SerializeSourceObject(HowToCode how_to_code, 1976 void CodeSerializer::SerializeSourceObject(HowToCode how_to_code,
1980 WhereToPoint where_to_point, 1977 WhereToPoint where_to_point,
1981 int skip) { 1978 int skip) {
1982 if (skip != 0) { 1979 if (skip != 0) {
1983 sink_->Put(kSkip, "SkipFromSerializeSourceObject"); 1980 sink_->Put(kSkip, "SkipFromSerializeSourceObject");
1984 sink_->PutInt(skip, "SkipDistanceFromSerializeSourceObject"); 1981 sink_->PutInt(skip, "SkipDistanceFromSerializeSourceObject");
1985 } 1982 }
(...skipping 44 matching lines...) Expand 10 before | Expand all | Expand 10 after
2030 SetHeaderValue(kReservationsOffset + i, cs->CurrentAllocationAddress(i)); 2027 SetHeaderValue(kReservationsOffset + i, cs->CurrentAllocationAddress(i));
2031 } 2028 }
2032 } 2029 }
2033 2030
2034 2031
2035 bool SerializedCodeData::IsSane() { 2032 bool SerializedCodeData::IsSane() {
2036 return GetHeaderValue(kVersionHashOffset) == Version::Hash() && 2033 return GetHeaderValue(kVersionHashOffset) == Version::Hash() &&
2037 PayloadLength() >= SharedFunctionInfo::kSize; 2034 PayloadLength() >= SharedFunctionInfo::kSize;
2038 } 2035 }
2039 } } // namespace v8::internal 2036 } } // namespace v8::internal
OLDNEW
« no previous file with comments | « src/objects-inl.h ('k') | no next file » | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698