|
|
@@ -56,6 +56,42 @@ namespace Invercargill {
|
|
|
assert_not_reached();
|
|
|
}
|
|
|
|
|
|
+ public virtual Value to_value(Type requested_type) throws Error {
|
|
|
+ Value result = Value(requested_type);
|
|
|
+
|
|
|
+ if(requested_type == typeof(bool)) {
|
|
|
+ result.set_boolean(@as<bool>());
|
|
|
+ } else if(requested_type == typeof(char)) {
|
|
|
+ result.set_schar((int8)@as<char>());
|
|
|
+ } else if(requested_type == typeof(uchar)) {
|
|
|
+ result.set_uchar(@as<uchar>());
|
|
|
+ } else if(requested_type == typeof(int)) {
|
|
|
+ result.set_int(@as<int>());
|
|
|
+ } else if(requested_type == typeof(uint)) {
|
|
|
+ result.set_uint(@as<uint>());
|
|
|
+ } else if(requested_type == typeof(long)) {
|
|
|
+ result.set_long(@as<long>());
|
|
|
+ } else if(requested_type == typeof(ulong)) {
|
|
|
+ result.set_ulong(@as<ulong>());
|
|
|
+ } else if(requested_type == typeof(int64)) {
|
|
|
+ result.set_int64(@as<int64?>());
|
|
|
+ } else if(requested_type == typeof(uint64)) {
|
|
|
+ result.set_uint64(@as<uint64?>());
|
|
|
+ } else if(requested_type == typeof(float)) {
|
|
|
+ result.set_float(@as<float?>());
|
|
|
+ } else if(requested_type == typeof(double)) {
|
|
|
+ result.set_double(@as<double?>());
|
|
|
+ } else if(requested_type == typeof(string)) {
|
|
|
+ result.set_string(@as<string>());
|
|
|
+ } else if(requested_type == typeof(Object)) {
|
|
|
+ result.set_object(@as<Object>());
|
|
|
+ } else {
|
|
|
+ // Fallback for any other type - try to get as Object
|
|
|
+ result.set_object(@as<Object>());
|
|
|
+ }
|
|
|
+
|
|
|
+ return result;
|
|
|
+ }
|
|
|
|
|
|
public virtual string to_string() {
|
|
|
return @"Element[$(type_name())]";
|