OLD | NEW |
1 // Copyright (c) 2012, the Dart project authors. Please see the AUTHORS file | 1 // Copyright (c) 2012, the Dart project authors. Please see the AUTHORS file |
2 // for details. All rights reserved. Use of this source code is governed by a | 2 // for details. All rights reserved. Use of this source code is governed by a |
3 // BSD-style license that can be found in the LICENSE file. | 3 // BSD-style license that can be found in the LICENSE file. |
4 | 4 |
5 #include "vm/object.h" | 5 #include "vm/object.h" |
6 | 6 |
7 #include "include/dart_api.h" | 7 #include "include/dart_api.h" |
8 #include "platform/assert.h" | 8 #include "platform/assert.h" |
9 #include "vm/assembler.h" | 9 #include "vm/assembler.h" |
10 #include "vm/cpu.h" | 10 #include "vm/cpu.h" |
(...skipping 52 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
63 DEFINE_FLAG(bool, use_lib_cache, true, "Use library name cache"); | 63 DEFINE_FLAG(bool, use_lib_cache, true, "Use library name cache"); |
64 | 64 |
65 DECLARE_FLAG(bool, eliminate_type_checks); | 65 DECLARE_FLAG(bool, eliminate_type_checks); |
66 DECLARE_FLAG(bool, enable_type_checks); | 66 DECLARE_FLAG(bool, enable_type_checks); |
67 DECLARE_FLAG(bool, error_on_bad_override); | 67 DECLARE_FLAG(bool, error_on_bad_override); |
68 DECLARE_FLAG(bool, trace_compiler); | 68 DECLARE_FLAG(bool, trace_compiler); |
69 DECLARE_FLAG(bool, trace_deoptimization); | 69 DECLARE_FLAG(bool, trace_deoptimization); |
70 DECLARE_FLAG(bool, trace_deoptimization_verbose); | 70 DECLARE_FLAG(bool, trace_deoptimization_verbose); |
71 DECLARE_FLAG(bool, verbose_stacktrace); | 71 DECLARE_FLAG(bool, verbose_stacktrace); |
72 DECLARE_FLAG(charp, coverage_dir); | 72 DECLARE_FLAG(charp, coverage_dir); |
| 73 DECLARE_FLAG(bool, write_protect_code); |
73 | 74 |
74 static const char* kGetterPrefix = "get:"; | 75 static const char* kGetterPrefix = "get:"; |
75 static const intptr_t kGetterPrefixLength = strlen(kGetterPrefix); | 76 static const intptr_t kGetterPrefixLength = strlen(kGetterPrefix); |
76 static const char* kSetterPrefix = "set:"; | 77 static const char* kSetterPrefix = "set:"; |
77 static const intptr_t kSetterPrefixLength = strlen(kSetterPrefix); | 78 static const intptr_t kSetterPrefixLength = strlen(kSetterPrefix); |
78 | 79 |
79 cpp_vtable Object::handle_vtable_ = 0; | 80 cpp_vtable Object::handle_vtable_ = 0; |
80 cpp_vtable Object::builtin_vtables_[kNumPredefinedCids] = { 0 }; | 81 cpp_vtable Object::builtin_vtables_[kNumPredefinedCids] = { 0 }; |
81 cpp_vtable Smi::handle_vtable_ = 0; | 82 cpp_vtable Smi::handle_vtable_ = 0; |
82 | 83 |
(...skipping 10138 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
10221 instrs.set_object_pool(Object::empty_array().raw()); | 10222 instrs.set_object_pool(Object::empty_array().raw()); |
10222 } else { | 10223 } else { |
10223 // TODO(regis): Once MakeArray takes a Heap::Space argument, call it here | 10224 // TODO(regis): Once MakeArray takes a Heap::Space argument, call it here |
10224 // with Heap::kOld and change the ARM and MIPS assemblers to work with a | 10225 // with Heap::kOld and change the ARM and MIPS assemblers to work with a |
10225 // GrowableObjectArray in new space. | 10226 // GrowableObjectArray in new space. |
10226 instrs.set_object_pool(Array::MakeArray(object_pool)); | 10227 instrs.set_object_pool(Array::MakeArray(object_pool)); |
10227 } | 10228 } |
10228 bool status = | 10229 bool status = |
10229 VirtualMemory::Protect(reinterpret_cast<void*>(instrs.raw_ptr()), | 10230 VirtualMemory::Protect(reinterpret_cast<void*>(instrs.raw_ptr()), |
10230 instrs.raw()->Size(), | 10231 instrs.raw()->Size(), |
10231 VirtualMemory::kReadExecute); | 10232 FLAG_write_protect_code |
| 10233 ? VirtualMemory::kReadExecute |
| 10234 : VirtualMemory::kReadWriteExecute); |
10232 ASSERT(status); | 10235 ASSERT(status); |
10233 } | 10236 } |
10234 return code.raw(); | 10237 return code.raw(); |
10235 } | 10238 } |
10236 | 10239 |
10237 | 10240 |
10238 RawCode* Code::FinalizeCode(const Function& function, | 10241 RawCode* Code::FinalizeCode(const Function& function, |
10239 Assembler* assembler, | 10242 Assembler* assembler, |
10240 bool optimized) { | 10243 bool optimized) { |
10241 // Calling ToFullyQualifiedCString is very expensive, try to avoid it. | 10244 // Calling ToFullyQualifiedCString is very expensive, try to avoid it. |
(...skipping 7114 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
17356 return "_MirrorReference"; | 17359 return "_MirrorReference"; |
17357 } | 17360 } |
17358 | 17361 |
17359 | 17362 |
17360 void MirrorReference::PrintToJSONStream(JSONStream* stream, bool ref) const { | 17363 void MirrorReference::PrintToJSONStream(JSONStream* stream, bool ref) const { |
17361 Instance::PrintToJSONStream(stream, ref); | 17364 Instance::PrintToJSONStream(stream, ref); |
17362 } | 17365 } |
17363 | 17366 |
17364 | 17367 |
17365 } // namespace dart | 17368 } // namespace dart |
OLD | NEW |