Chromium Code Reviews| OLD | NEW |
|---|---|
| 1 // Copyright 2012 the V8 project authors. All rights reserved. | 1 // Copyright 2012 the V8 project authors. All rights reserved. |
| 2 // Redistribution and use in source and binary forms, with or without | 2 // Redistribution and use in source and binary forms, with or without |
| 3 // modification, are permitted provided that the following conditions are | 3 // modification, are permitted provided that the following conditions are |
| 4 // met: | 4 // met: |
| 5 // | 5 // |
| 6 // * Redistributions of source code must retain the above copyright | 6 // * Redistributions of source code must retain the above copyright |
| 7 // notice, this list of conditions and the following disclaimer. | 7 // notice, this list of conditions and the following disclaimer. |
| 8 // * Redistributions in binary form must reproduce the above | 8 // * Redistributions in binary form must reproduce the above |
| 9 // copyright notice, this list of conditions and the following | 9 // copyright notice, this list of conditions and the following |
| 10 // disclaimer in the documentation and/or other materials provided | 10 // disclaimer in the documentation and/or other materials provided |
| (...skipping 1874 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
| 1885 HInstruction* array_function = AddInstruction(new(zone()) | 1885 HInstruction* array_function = AddInstruction(new(zone()) |
| 1886 HLoadNamedField(native_context, true, Representation::Tagged(), offset)); | 1886 HLoadNamedField(native_context, true, Representation::Tagged(), offset)); |
| 1887 return array_function; | 1887 return array_function; |
| 1888 } | 1888 } |
| 1889 | 1889 |
| 1890 | 1890 |
| 1891 HGraphBuilder::JSArrayBuilder::JSArrayBuilder(HGraphBuilder* builder, | 1891 HGraphBuilder::JSArrayBuilder::JSArrayBuilder(HGraphBuilder* builder, |
| 1892 ElementsKind kind, | 1892 ElementsKind kind, |
| 1893 HValue* allocation_site_payload, | 1893 HValue* allocation_site_payload, |
| 1894 AllocationSiteMode mode) : | 1894 AllocationSiteMode mode) : |
| 1895 builder_(builder), | 1895 builder_(builder), |
|
Michael Starzinger
2013/05/23 09:16:49
nit: Indentation is off.
mvstanton
2013/05/23 14:46:05
Done.
| |
| 1896 kind_(kind), | 1896 kind_(kind), |
| 1897 allocation_site_payload_(allocation_site_payload) { | 1897 allocation_site_payload_(allocation_site_payload), |
| 1898 constructor_function_(NULL) { | |
| 1898 if (mode == DONT_TRACK_ALLOCATION_SITE) { | 1899 if (mode == DONT_TRACK_ALLOCATION_SITE) { |
| 1899 mode_ = mode; | 1900 mode_ = mode; |
| 1900 } else { | 1901 } else { |
| 1901 mode_ = AllocationSiteInfo::GetMode(kind); | 1902 mode_ = AllocationSiteInfo::GetMode(kind); |
| 1902 } | 1903 } |
| 1903 } | 1904 } |
| 1904 | 1905 |
| 1905 | 1906 |
| 1907 HGraphBuilder::JSArrayBuilder::JSArrayBuilder(HGraphBuilder* builder, | |
| 1908 ElementsKind kind, | |
| 1909 HValue* constructor_function) : | |
| 1910 builder_(builder), | |
|
Michael Starzinger
2013/05/23 09:16:49
nit: Indentation is off.
mvstanton
2013/05/23 14:46:05
Done.
| |
| 1911 kind_(kind), | |
| 1912 mode_(DONT_TRACK_ALLOCATION_SITE), | |
| 1913 allocation_site_payload_(NULL), | |
| 1914 constructor_function_(constructor_function) { | |
| 1915 } | |
| 1916 | |
| 1917 | |
| 1906 HValue* HGraphBuilder::JSArrayBuilder::EmitMapCode(HValue* context) { | 1918 HValue* HGraphBuilder::JSArrayBuilder::EmitMapCode(HValue* context) { |
| 1907 HInstruction* native_context = builder()->BuildGetNativeContext(context); | 1919 HInstruction* native_context = builder()->BuildGetNativeContext(context); |
| 1908 int offset = Context::kHeaderSize + | 1920 int offset = Context::kHeaderSize + |
| 1909 kPointerSize * Context::JS_ARRAY_MAPS_INDEX; | 1921 kPointerSize * Context::JS_ARRAY_MAPS_INDEX; |
| 1910 HInstruction* map_array = AddInstruction(new(zone()) | 1922 HInstruction* map_array = AddInstruction(new(zone()) |
| 1911 HLoadNamedField(native_context, true, Representation::Tagged(), offset)); | 1923 HLoadNamedField(native_context, true, Representation::Tagged(), offset)); |
| 1912 offset = kind_ * kPointerSize + FixedArrayBase::kHeaderSize; | 1924 offset = kind_ * kPointerSize + FixedArrayBase::kHeaderSize; |
| 1913 return AddInstruction(new(zone()) HLoadNamedField( | 1925 return AddInstruction(new(zone()) HLoadNamedField( |
| 1914 map_array, true, Representation::Tagged(), offset)); | 1926 map_array, true, Representation::Tagged(), offset)); |
| 1915 } | 1927 } |
| 1916 | 1928 |
| 1917 | 1929 |
| 1930 HValue* HGraphBuilder::JSArrayBuilder::InternalEmitMapCode() { | |
| 1931 // Find the map near the constructor function | |
| 1932 HValue* initial_map = AddInstruction(new(zone()) | |
| 1933 HLoadNamedField(constructor_function_, true, Representation::Tagged(), | |
| 1934 JSFunction::kPrototypeOrInitialMapOffset)); | |
| 1935 return initial_map; | |
| 1936 } | |
| 1937 | |
| 1938 | |
| 1918 HValue* HGraphBuilder::JSArrayBuilder::EstablishAllocationSize( | 1939 HValue* HGraphBuilder::JSArrayBuilder::EstablishAllocationSize( |
| 1919 HValue* length_node) { | 1940 HValue* length_node) { |
| 1920 HValue* context = builder()->environment()->LookupContext(); | 1941 HValue* context = builder()->environment()->LookupContext(); |
| 1921 ASSERT(length_node != NULL); | 1942 ASSERT(length_node != NULL); |
| 1922 | 1943 |
| 1923 int base_size = JSArray::kSize; | 1944 int base_size = JSArray::kSize; |
| 1924 if (mode_ == TRACK_ALLOCATION_SITE) { | 1945 if (mode_ == TRACK_ALLOCATION_SITE) { |
| 1925 base_size += AllocationSiteInfo::kSize; | 1946 base_size += AllocationSiteInfo::kSize; |
| 1926 } | 1947 } |
| 1927 | 1948 |
| (...skipping 66 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
| 1994 bool fill_with_hole) { | 2015 bool fill_with_hole) { |
| 1995 HValue* context = builder()->environment()->LookupContext(); | 2016 HValue* context = builder()->environment()->LookupContext(); |
| 1996 | 2017 |
| 1997 // Allocate (dealing with failure appropriately) | 2018 // Allocate (dealing with failure appropriately) |
| 1998 HAllocate::Flags flags = HAllocate::DefaultFlags(kind_); | 2019 HAllocate::Flags flags = HAllocate::DefaultFlags(kind_); |
| 1999 HAllocate* new_object = new(zone()) HAllocate(context, size_in_bytes, | 2020 HAllocate* new_object = new(zone()) HAllocate(context, size_in_bytes, |
| 2000 HType::JSArray(), flags); | 2021 HType::JSArray(), flags); |
| 2001 AddInstruction(new_object); | 2022 AddInstruction(new_object); |
| 2002 | 2023 |
| 2003 // Fill in the fields: map, properties, length | 2024 // Fill in the fields: map, properties, length |
| 2004 HValue* map = EmitMapCode(context); | 2025 HValue* map; |
| 2026 if (constructor_function_ != NULL) { | |
| 2027 map = InternalEmitMapCode(); | |
| 2028 } else { | |
| 2029 map = EmitMapCode(context); | |
| 2030 } | |
| 2005 elements_location_ = builder()->BuildJSArrayHeader(new_object, | 2031 elements_location_ = builder()->BuildJSArrayHeader(new_object, |
| 2006 map, | 2032 map, |
| 2007 mode_, | 2033 mode_, |
| 2008 allocation_site_payload_, | 2034 allocation_site_payload_, |
| 2009 length_field); | 2035 length_field); |
| 2010 | 2036 |
| 2011 // Initialize the elements | 2037 // Initialize the elements |
| 2012 builder()->BuildInitializeElements(elements_location_, kind_, capacity); | 2038 builder()->BuildInitializeElements(elements_location_, kind_, capacity); |
| 2013 | 2039 |
| 2014 if (fill_with_hole) { | 2040 if (fill_with_hole) { |
| (...skipping 10444 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
| 12459 } | 12485 } |
| 12460 } | 12486 } |
| 12461 | 12487 |
| 12462 #ifdef DEBUG | 12488 #ifdef DEBUG |
| 12463 if (graph_ != NULL) graph_->Verify(false); // No full verify. | 12489 if (graph_ != NULL) graph_->Verify(false); // No full verify. |
| 12464 if (allocator_ != NULL) allocator_->Verify(); | 12490 if (allocator_ != NULL) allocator_->Verify(); |
| 12465 #endif | 12491 #endif |
| 12466 } | 12492 } |
| 12467 | 12493 |
| 12468 } } // namespace v8::internal | 12494 } } // namespace v8::internal |
| OLD | NEW |