xbt_dynar_t globals;
} s_gras_cbps_t;
-void free_string(void *d);
-
-void free_string(void *d){
+static void free_string(void *d){
free(*(void**)d);
}
* name already exists, it is masked by the one given here, and will be
* seeable again only after a pop to remove the value this push adds.
*/
-xbt_error_t
+void
gras_cbps_v_push(gras_cbps_t ps,
const char *name,
void *data,
gras_datadesc_type_t ddt) {
- xbt_dynar_t varstack,frame;
+ xbt_dynar_t varstack=NULL,frame;
gras_cbps_elm_t var;
- char *varname = (char*)strdup(name);
+ char *varname = (char*)xbt_strdup(name);
xbt_ex_t e;
DEBUG2("push(%s,%p)",name,(void*)data);
TRY {
varstack = xbt_dict_get(ps->space, name);
} CATCH(e) {
- if (e.category == mismatch_error) {
- DEBUG1("Create a new variable stack for '%s' into the space",name);
- varstack = xbt_dynar_new(sizeof (gras_cbps_elm_t *), NULL);
- xbt_dict_set(ps->space, varname, (void **)varstack, NULL);
- xbt_ex_free(e);
- /* leaking, you think? only if you do not close all the openned blocks ;)*/
- } else {
+ if (e.category != mismatch_error)
RETHROW;
- }
+
+ DEBUG1("Create a new variable stack for '%s' into the space",name);
+ varstack = xbt_dynar_new(sizeof (gras_cbps_elm_t *), NULL);
+ xbt_dict_set(ps->space, varname, (void **)varstack, NULL);
+ xbt_ex_free(e);
+ /* leaking, you think? only if you do not close all the openned blocks ;)*/
}
var = xbt_new0(s_gras_cbps_elm_t,1);
DEBUG4("Push %s (%p @%p) into frame %p",varname,(void*)varname,(void*)&varname,(void*)frame);
xbt_dynar_push(frame, &varname);
xbt_dynar_push(ps->frames, &frame);
- return no_error;
}
/** \brief Retrieve an element from the PS, and remove it from the PS.
*
- * If it's not
- * present in the current block, it will fail (with abort) and not search
- * in upper blocks since this denotes a programmation error.
+ * If it's not present in the current block, it will fail (throwing not_found)
+ * and not search in upper blocks since this denotes a programmation error.
*/
-xbt_error_t
+void
gras_cbps_v_pop (gras_cbps_t ps,
const char *name,
gras_datadesc_type_t *ddt,
TRY {
varstack = xbt_dict_get(ps->space, name);
} CATCH(e) {
- if (e.category == mismatch_error) {
- xbt_ex_free(e);
- THROW1(mismatch_error,1,"Asked to pop the non-existant %s",
- name);
- }
- RETHROW;
+ if (e.category != mismatch_error)
+ RETHROW;
+
+ xbt_ex_free(e);
+ THROW1(not_found_error,1,"Asked to pop the non-existant %s", name);
}
xbt_dynar_pop(varstack, &var);
xbt_dynar_push(ps->frames, &frame);
*res = data;
- return no_error;
}
/** \brief Change the value of an element in the PS.
xbt_dynar_t dynar = NULL;
gras_cbps_elm_t elm = NULL;
- xbt_ex_t e;
DEBUG1("set(%s)",name);
- TRY {
- dynar = xbt_dict_get(ps->space, name);
- } CATCH(e) {
- if (e.category == mismatch_error) {
- dynar = NULL;
- xbt_ex_free(e);
- } else {
- RETHROW;
- }
- }
+ dynar = xbt_dict_get_or_null(ps->space, name);
if (dynar == NULL) {
dynar = xbt_dynar_new(sizeof (gras_cbps_elm_t), NULL);