Chromium Code Reviews| 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_ |