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

Unified Diff: runtime/bin/dartutils.h

Issue 9403012: Add utility functions for creating and accessing Dart_CObject structures (Closed) Base URL: https://dart.googlecode.com/svn/branches/bleeding_edge/dart
Patch Set: Addressed review comments from ager@ 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 | « no previous file | runtime/bin/dartutils.cc » ('j') | no next file with comments »
Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
Index: runtime/bin/dartutils.h
diff --git a/runtime/bin/dartutils.h b/runtime/bin/dartutils.h
index 4911b907e3b2ac99dc46fb71332507e495c63b24..65e62e734753c8f6cae899364d2a2c7b08020391 100644
--- a/runtime/bin/dartutils.h
+++ b/runtime/bin/dartutils.h
@@ -104,4 +104,137 @@ class DartUtils {
DISALLOW_IMPLICIT_CONSTRUCTORS(DartUtils);
};
+
+class CObject {
Mads Ager (google) 2012/02/21 08:51:20 As discussed offline I think we should get rid of
Søren Gjesse 2012/02/21 09:07:23 Will do.
+ public:
+ explicit CObject(Dart_CObject *cobject) : cobject_(cobject) {}
+ Dart_CObject::Type type() { return cobject_->type; }
+
+ bool IsNull() { return type() == Dart_CObject::kNull; }
+ bool IsBool() { return type() == Dart_CObject::kBool; }
+ bool IsInt32() { return type() == Dart_CObject::kInt32; }
+ bool IsInt64() { return type() == Dart_CObject::kInt64; }
+ bool IsBigint() { return type() == Dart_CObject::kBigint; }
+ bool IsDouble() { return type() == Dart_CObject::kDouble; }
+ bool IsString() { return type() == Dart_CObject::kString; }
+ bool IsArray() { return type() == Dart_CObject::kArray; }
+ bool IsByteArray() { return type() == Dart_CObject::kByteArray; }
+
+ bool IsTrue() {
+ return type() == Dart_CObject::kBool && cobject_->value.as_bool;
+ }
+
+ bool IsFalse() {
+ return type() == Dart_CObject::kBool && !cobject_->value.as_bool;
+ }
+
+ void* operator new(size_t size) {
+ return Dart_ScopeAllocate(size);
+ }
+
+ static CObject* Null();
+ static CObject* True();
+ static CObject* False();
+ static CObject* Bool(bool value);
+ static Dart_CObject* NewInt32(int32_t value);
+ static Dart_CObject* NewInt64(int64_t value);
+ // TODO(sgjesse): Add support for kBigint.
+ static Dart_CObject* NewDouble(double value);
+ static Dart_CObject* NewString(int length);
+ static Dart_CObject* NewString(const char* str);
+ static Dart_CObject* NewArray(int length);
+ // TODO(sgjesse): Add support for kByteArray.
+
+ Dart_CObject* AsApiCObject() { return cobject_; }
+
+ protected:
+ CObject() : cobject_(NULL) {}
+ Dart_CObject* cobject_;
+
+ private:
+ static Dart_CObject* New(Dart_CObject::Type type, int additional_bytes = 0);
+
+ static Dart_CObject api_null_;
+ static Dart_CObject api_true_;
+ static Dart_CObject api_false_;
+ static CObject null_;
+ static CObject true_;
+ static CObject false_;
+};
+
+
+#define DECLARE_COBJECT_CONSTRUCTORS(t) \
+ explicit CObject##t(Dart_CObject *cobject) : CObject(cobject) { \
+ ASSERT(type() == Dart_CObject::k##t); \
+ cobject_ = cobject; \
+ } \
+ explicit CObject##t(CObject* cobject) : CObject() { \
+ ASSERT(cobject != NULL); \
+ ASSERT(cobject->type() == Dart_CObject::k##t); \
+ cobject_ = cobject->AsApiCObject(); \
+ }
+
+
+class CObjectBool : public CObject {
+ public:
+ DECLARE_COBJECT_CONSTRUCTORS(Bool)
+
+ bool Value() const { return cobject_->value.as_bool; }
+};
+
+
+class CObjectInt32 : public CObject {
+ public:
+ DECLARE_COBJECT_CONSTRUCTORS(Int32)
+
+ int32_t Value() const { return cobject_->value.as_int32; }
+};
+
+
+class CObjectInt64 : public CObject {
+ public:
+ DECLARE_COBJECT_CONSTRUCTORS(Int64)
+
+ int64_t Value() const { return cobject_->value.as_int64; }
+};
+
+
+class CObjectBigint : public CObject {
+ public:
+ DECLARE_COBJECT_CONSTRUCTORS(Bigint)
+
+ char* Value() const { return cobject_->value.as_bigint; }
+};
+
+
+class CObjectDouble : public CObject {
+ public:
+ DECLARE_COBJECT_CONSTRUCTORS(Double)
+
+ double Value() const { return cobject_->value.as_double; }
+};
+
+
+class CObjectString : public CObject {
+ public:
+ DECLARE_COBJECT_CONSTRUCTORS(String)
+
+ int Length() const { return strlen(cobject_->value.as_string); }
+ char* CString() const { return cobject_->value.as_string; }
+};
+
+
+class CObjectArray : public CObject {
+ public:
+ DECLARE_COBJECT_CONSTRUCTORS(Array)
+
+ int Length() const { return cobject_->value.as_array.length; }
+ CObject* operator[](int index) const {
+ return new CObject(cobject_->value.as_array.values[index]);
+ }
+ void SetAt(int index, CObject* value) {
+ cobject_->value.as_array.values[index] = value->AsApiCObject();
+ }
+};
+
#endif // BIN_DARTUTILS_H_
« no previous file with comments | « no previous file | runtime/bin/dartutils.cc » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698