From e029905cada60b6bdac29379d467eeac29a0e041 Mon Sep 17 00:00:00 2001 From: Yevgen Muntyan <17531749+muntyan@users.noreply.github.com> Date: Wed, 8 Mar 2006 08:48:05 -0600 Subject: [PATCH] Added ms_value_repr() --- moo/mooutils/mooscript/mooscript-builtin.c | 4 +- moo/mooutils/mooscript/mooscript-value.c | 96 +++++++++++++++++++--- moo/mooutils/mooscript/mooscript-value.h | 1 + 3 files changed, 89 insertions(+), 12 deletions(-) diff --git a/moo/mooutils/mooscript/mooscript-builtin.c b/moo/mooutils/mooscript/mooscript-builtin.c index 28fbdccf..13632370 100644 --- a/moo/mooutils/mooscript/mooscript-builtin.c +++ b/moo/mooutils/mooscript/mooscript-builtin.c @@ -84,9 +84,9 @@ int_func (MSValue *arg, if (!ms_value_get_int (arg, &ival)) { - char *str = ms_value_print (arg); + char *str = ms_value_repr (arg); ms_context_format_error (ctx, MS_ERROR_TYPE, - "could not convert '%s' to int", + "could not convert %s to int", str); g_free (str); return NULL; diff --git a/moo/mooutils/mooscript/mooscript-value.c b/moo/mooutils/mooscript/mooscript-value.c index 8fd598cf..69f9bcb9 100644 --- a/moo/mooutils/mooscript/mooscript-value.c +++ b/moo/mooutils/mooscript/mooscript-value.c @@ -332,8 +332,6 @@ ms_value_get_bool (MSValue *val) case MS_VALUE_GVALUE: switch (G_TYPE_FUNDAMENTAL (G_VALUE_TYPE (val->gval))) { - case G_TYPE_NONE: - return FALSE; case G_TYPE_CHAR: return g_value_get_char (val->gval) != 0; case G_TYPE_UCHAR: @@ -401,9 +399,6 @@ ms_value_get_int (MSValue *val, case MS_VALUE_GVALUE: switch (G_TYPE_FUNDAMENTAL (G_VALUE_TYPE (val->gval))) { - case G_TYPE_NONE: - *ival = 0; - return TRUE; case G_TYPE_CHAR: *ival = g_value_get_char (val->gval) != 0; return TRUE; @@ -464,7 +459,7 @@ print_list (MSValue **elms, char *s; if (i) g_string_append (string, ", "); - s = ms_value_print (elms[i]); + s = ms_value_repr (elms[i]); g_string_append (string, s); g_free (s); } @@ -548,7 +543,7 @@ print_dict_elm (KeyValPair *pair, g_string_append (data->string, ", "); data->first = FALSE; - strval = ms_value_print (pair->val); + strval = ms_value_repr (pair->val); g_string_append_printf (data->string, "%s = %s", pair->key, strval); g_free (strval); } @@ -590,7 +585,7 @@ print_func (MSValue *val) else if (!val->func.obj) return g_strdup (""); - obj = ms_value_print (val->func.obj); + obj = ms_value_repr (val->func.obj); str = g_strdup_printf ("", obj); g_free (obj); @@ -620,8 +615,6 @@ ms_value_print (MSValue *val) case MS_VALUE_GVALUE: switch (G_TYPE_FUNDAMENTAL (G_VALUE_TYPE (val->gval))) { - case G_TYPE_NONE: - return g_strdup ("None"); case G_TYPE_CHAR: return g_strdup_printf ("%c", g_value_get_char (val->gval)); case G_TYPE_UCHAR: @@ -669,6 +662,89 @@ ms_value_print (MSValue *val) } +char * +ms_value_repr (MSValue *val) +{ + char *tmp, *ret; + + g_return_val_if_fail (val != NULL, NULL); + + switch (MS_VALUE_TYPE (val)) + { + case MS_VALUE_STRING: + tmp = g_strescape (val->str, NULL); + ret = g_strdup_printf ("\"%s\"", tmp); + g_free (tmp); + return ret; + + case MS_VALUE_INT: + return g_strdup_printf ("%d", val->ival); + + case MS_VALUE_NONE: + return g_strdup ("none"); + + case MS_VALUE_LIST: + return print_list (val->list.elms, val->list.n_elms); + + case MS_VALUE_DICT: + return print_dict (val->hash); + + case MS_VALUE_FUNC: + return print_func (val); + + case MS_VALUE_GVALUE: + switch (G_TYPE_FUNDAMENTAL (G_VALUE_TYPE (val->gval))) + { + case G_TYPE_CHAR: + return g_strdup_printf ("'%c'", g_value_get_char (val->gval)); + case G_TYPE_UCHAR: + return g_strdup_printf ("'%c'", g_value_get_uchar (val->gval)); + case G_TYPE_BOOLEAN: + return g_strdup_printf ("%d", g_value_get_boolean (val->gval)); + case G_TYPE_INT: + return g_strdup_printf ("%d", g_value_get_int (val->gval)); + case G_TYPE_UINT: + return g_strdup_printf ("%d", g_value_get_uint (val->gval)); + case G_TYPE_LONG: + return g_strdup_printf ("%ld", g_value_get_long (val->gval)); + case G_TYPE_ULONG: + return g_strdup_printf ("%ld", g_value_get_ulong (val->gval)); + case G_TYPE_INT64: + return g_strdup_printf ("%" G_GINT64_FORMAT, g_value_get_int64 (val->gval)); + case G_TYPE_UINT64: + return g_strdup_printf ("%" G_GUINT64_FORMAT, g_value_get_uint64 (val->gval)); + case G_TYPE_ENUM: + return g_strdup_printf ("<%d>", g_value_get_enum (val->gval)); + case G_TYPE_FLAGS: + return g_strdup_printf ("<%d>", g_value_get_flags (val->gval)); + case G_TYPE_FLOAT: + return g_strdup_printf ("%f", g_value_get_float (val->gval)); + case G_TYPE_DOUBLE: + return g_strdup_printf ("%f", g_value_get_double (val->gval)); + case G_TYPE_STRING: + tmp = (char*) g_value_get_string (val->gval); + tmp = tmp ? g_strescape (tmp, NULL) : NULL; + ret = tmp ? g_strdup_printf ("\"%s\"", tmp) : g_strdup ("(null)"); + g_free (tmp); + return ret; + case G_TYPE_POINTER: + return g_strdup_printf ("", g_value_get_pointer (val->gval)); + case G_TYPE_BOXED: + return g_strdup_printf ("", g_value_get_boxed (val->gval)); + case G_TYPE_OBJECT: + return g_strdup_printf ("", g_value_get_object (val->gval)); + default: + g_return_val_if_reached (NULL); + } + + case MS_VALUE_INVALID: + g_assert_not_reached (); + } + + g_return_val_if_reached (NULL); +} + + static MSValue * func_plus (MSValue *a, MSValue *b, MSContext *ctx) { diff --git a/moo/mooutils/mooscript/mooscript-value.h b/moo/mooutils/mooscript/mooscript-value.h index a7223042..faf6f68e 100644 --- a/moo/mooutils/mooscript/mooscript-value.h +++ b/moo/mooutils/mooscript/mooscript-value.h @@ -142,6 +142,7 @@ gboolean ms_value_get_bool (MSValue *val); gboolean ms_value_get_int (MSValue *val, int *ival); char *ms_value_print (MSValue *val); +char *ms_value_repr (MSValue *val); gboolean ms_value_equal (MSValue *a, MSValue *b);