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 #ifndef VM_NATIVE_ARGUMENTS_H_ | 5 #ifndef VM_NATIVE_ARGUMENTS_H_ |
6 #define VM_NATIVE_ARGUMENTS_H_ | 6 #define VM_NATIVE_ARGUMENTS_H_ |
7 | 7 |
8 #include "platform/assert.h" | 8 #include "platform/assert.h" |
9 #include "vm/globals.h" | 9 #include "vm/globals.h" |
10 #include "vm/stub_code.h" | 10 #include "vm/stub_code.h" |
11 | 11 |
12 namespace dart { | 12 namespace dart { |
13 | 13 |
14 // Forward declarations. | 14 // Forward declarations. |
| 15 class BootstrapNatives; |
15 class Isolate; | 16 class Isolate; |
16 class Object; | 17 class Object; |
17 class RawObject; | 18 class RawObject; |
18 | 19 |
19 | 20 |
20 #if defined(TESTING) || defined(DEBUG) | 21 #if defined(TESTING) || defined(DEBUG) |
21 | 22 |
22 #if defined(TARGET_OS_WINDOWS) | 23 #if defined(TARGET_OS_WINDOWS) |
23 // The compiler may dynamically align the stack on Windows, so do not check. | 24 // The compiler may dynamically align the stack on Windows, so do not check. |
24 #define CHECK_STACK_ALIGNMENT { } | 25 #define CHECK_STACK_ALIGNMENT { } |
(...skipping 44 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
69 static intptr_t isolate_offset() { | 70 static intptr_t isolate_offset() { |
70 return OFFSET_OF(NativeArguments, isolate_); | 71 return OFFSET_OF(NativeArguments, isolate_); |
71 } | 72 } |
72 static intptr_t argc_offset() { return OFFSET_OF(NativeArguments, argc_); } | 73 static intptr_t argc_offset() { return OFFSET_OF(NativeArguments, argc_); } |
73 static intptr_t argv_offset() { return OFFSET_OF(NativeArguments, argv_); } | 74 static intptr_t argv_offset() { return OFFSET_OF(NativeArguments, argv_); } |
74 static intptr_t retval_offset() { | 75 static intptr_t retval_offset() { |
75 return OFFSET_OF(NativeArguments, retval_); | 76 return OFFSET_OF(NativeArguments, retval_); |
76 } | 77 } |
77 | 78 |
78 private: | 79 private: |
| 80 friend class BootstrapNatives; |
| 81 |
| 82 // Since this function is passed a RawObject directly, we need to be |
| 83 // exceedingly careful when we use it. If there are any other side |
| 84 // effects in the statement that may cause GC, it could lead to |
| 85 // bugs. |
| 86 void SetReturnUnsafe(RawObject* value) const; |
| 87 |
79 Isolate* isolate_; // Current isolate pointer. | 88 Isolate* isolate_; // Current isolate pointer. |
80 int argc_; // Number of arguments passed to the runtime call. | 89 int argc_; // Number of arguments passed to the runtime call. |
81 RawObject*(*argv_)[]; // Pointer to an array of arguments to runtime call. | 90 RawObject*(*argv_)[]; // Pointer to an array of arguments to runtime call. |
82 RawObject** retval_; // Pointer to the return value area. | 91 RawObject** retval_; // Pointer to the return value area. |
83 }; | 92 }; |
84 | 93 |
85 } // namespace dart | 94 } // namespace dart |
86 | 95 |
87 #endif // VM_NATIVE_ARGUMENTS_H_ | 96 #endif // VM_NATIVE_ARGUMENTS_H_ |
OLD | NEW |