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

Unified Diff: runtime/vm/dart_api_message.h

Issue 9325022: Decode the Dart message into a Dart_CMessage structure before calling the native port callback (Closed) Base URL: https://dart.googlecode.com/svn/branches/bleeding_edge/dart
Patch Set: Addressed review comments from asiva@ Created 8 years, 10 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 side-by-side diff with in-line comments
Download patch
« no previous file with comments | « runtime/vm/dart_api_impl_test.cc ('k') | runtime/vm/dart_api_message.cc » ('j') | no next file with comments »
Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
Index: runtime/vm/dart_api_message.h
diff --git a/runtime/vm/dart_api_message.h b/runtime/vm/dart_api_message.h
new file mode 100644
index 0000000000000000000000000000000000000000..76e29b4436d03dbd2960298ff64a2da5f494f99e
--- /dev/null
+++ b/runtime/vm/dart_api_message.h
@@ -0,0 +1,81 @@
+// Copyright (c) 2012, the Dart project authors. Please see the AUTHORS file
+// for details. All rights reserved. Use of this source code is governed by a
+// BSD-style license that can be found in the LICENSE file.
+
+#ifndef VM_DART_API_MESSAGE_H_
+#define VM_DART_API_MESSAGE_H_
+
+#include "vm/dart_api_state.h"
+#include "vm/snapshot.h"
+
+namespace dart {
+
+// Use this C structure for reading internal objects in the serialized
+// data. These are objects that we need to process in order to
+// generate the Dart_CObject graph but that we don't want to expose in
+// that graph.
+// TODO(sjesse): Remove this when message serialization format is
+// updated.
+struct Dart_CObject_Internal : public Dart_CObject {
+ enum Type {
+ kTypeArguments = Dart_CObject::kNumberOfTypes,
+ kDynamicType,
+ };
+};
+
+
+// Reads a message snapshot into a C structure.
+class ApiMessageReader : public BaseReader {
+ public:
+ ApiMessageReader(const uint8_t* buffer, intptr_t length, ReAlloc alloc);
+ ~ApiMessageReader() { }
+
+ Dart_CObject* ReadMessage();
+
+ private:
+ // Allocates a Dart_CObject object.
+ Dart_CObject* AllocateDartCObject();
+ // Allocates a Dart_CObject object with the specified type.
+ Dart_CObject* AllocateDartCObject(Dart_CObject::Type type);
+ // Allocates a Dart_CObject object for the null object.
+ Dart_CObject* AllocateDartCObjectNull();
+ // Allocates a Dart_CObject object for a boolean object.
+ Dart_CObject* AllocateDartCObjectBool(bool value);
+ // Allocates a Dart_CObject object for for a 32-bit integer.
+ Dart_CObject* AllocateDartCObjectInt32(int32_t value);
+ // Allocates a Dart_CObject object for a double.
+ Dart_CObject* AllocateDartCObjectDouble(double value);
+ // Allocates a Dart_CObject object for string data.
+ Dart_CObject* AllocateDartCObjectString(intptr_t length);
+ // Allocates a C array of Dart_CObject objects.
+ Dart_CObject* AllocateDartCObjectArray(intptr_t length);
+
+ void Init();
+
+ intptr_t LookupInternalClass(intptr_t class_header);
+ Dart_CObject* ReadInlinedObject(intptr_t object_id);
+ Dart_CObject* ReadObjectImpl(intptr_t header);
+ Dart_CObject* ReadIndexedObject(intptr_t object_id);
+ Dart_CObject* ReadObject();
+
+ // Add object to backward references.
+ void AddBackwardReference(intptr_t id, Dart_CObject* obj);
+
+ Dart_CObject_Internal* AsInternal(Dart_CObject* object) {
+ ASSERT(object->type >= Dart_CObject::kNumberOfTypes);
+ return reinterpret_cast<Dart_CObject_Internal*>(object);
+ }
+
+ // Allocation of the structures for the decoded message happens
+ // either in the supplied zone or using the supplied allocation
+ // function.
+ ReAlloc alloc_;
+ ApiGrowableArray<Dart_CObject*> backward_references_;
+
+ Dart_CObject type_arguments_marker;
+ Dart_CObject dynamic_type_marker;
+};
+
+} // namespace dart
+
+#endif // VM_DART_API_MESSAGE_H_
« no previous file with comments | « runtime/vm/dart_api_impl_test.cc ('k') | runtime/vm/dart_api_message.cc » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698