Skip to content

Commit

Permalink
Add r_aggregate_type_member_by_name
Browse files Browse the repository at this point in the history
  • Loading branch information
Russell Harmon committed Dec 11, 2013
1 parent 27a91a0 commit 7d2621d
Show file tree
Hide file tree
Showing 5 changed files with 61 additions and 22 deletions.
14 changes: 13 additions & 1 deletion include/ruminate/aggregate_type.h
Original file line number Diff line number Diff line change
Expand Up @@ -55,7 +55,7 @@ size_t RUMINATE_EXPORT r_aggregate_type_nmembers(
GError **error /** [out] see errors.h */
) RUMINATE_NOEXCEPT;

/** Get a aggregate's member at a specified index.
/** Get an aggregate's member at a specified index.
*
* @return a RAggregateMember representing the member of this aggregate at index \a
* index.
Expand All @@ -67,4 +67,16 @@ RAggregateMember * RUMINATE_EXPORT r_aggregate_type_member_at(
GError **error /** [out] see errors.h */
) RUMINATE_NOEXCEPT;

/** Get an aggregate's member by name.
*
* @return a RAggregateMember representing the member of this aggregate with
* name \a name.
* @memberof RAggregateType
*/
RAggregateMember * RUMINATE_EXPORT r_aggregate_type_member_by_name(
RAggregateType *type /** [in] the aggregate type to retrieve a member of */,
const char *name /** [in] the name of the aggregate member */,
GError **error /** [out] see errors.h */
) RUMINATE_NOEXCEPT;

G_END_DECLS
5 changes: 5 additions & 0 deletions python/lldb_em.py
Original file line number Diff line number Diff line change
Expand Up @@ -68,10 +68,15 @@ def onEvent(self, event):
for cb in callbacks:
cb(event)
elif state == lldb.eStateStopped:
#print("Child stopped unexpectedly")
# TODO: This is a hack
self.process.Continue()
elif state == lldb.eStateExited:
#print("Child exited")
self.shutdown()
else:
#print("No callback registered")
pass

def addCallback(self, state, cb):
self.callbacks[state].append(cb)
Expand Down
36 changes: 36 additions & 0 deletions src/aggregate_type.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -135,4 +135,40 @@ RAggregateMember *r_aggregate_type_member_at( RAggregateType *rat, size_t i, GEr
return (RAggregateMember *) r_type_member_new(tmp, rt, error);
}

RAggregateMember *r_aggregate_type_member_by_name( RAggregateType *rat, const char *name, GError **error ) RUMINATE_NOEXCEPT {
GError *err = NULL;
GQuark member_name_quark, name_quark;
size_t nmembers, i;
RAggregateMember *member;
RString *member_name;

name_quark = g_quark_from_string(name);
nmembers = r_aggregate_type_nmembers(rat, &err);
if( err != NULL ) goto error_nmembers;
for( i = 0; i < nmembers; i++ ) {
member = r_aggregate_type_member_at(rat, i, error);
if( member == NULL ) goto error_member_at;

member_name = r_aggregate_member_name(member, error);
if( member_name == NULL ) goto error_member_name;
member_name_quark = r_string_quark(member_name);
r_string_unref(member_name);

if( member_name_quark == name_quark ) return member;

r_type_member_unref((RTypeMember *) member);

continue;
error_member_name:
r_type_member_unref((RTypeMember *) member);
error_member_at:
goto error_in_loop;
}

error_in_loop:
error_nmembers:
g_propagate_error(error, err);
return NULL;
}

G_END_DECLS
6 changes: 6 additions & 0 deletions test/main/CMakeLists.txt
Original file line number Diff line number Diff line change
@@ -0,0 +1,6 @@
add_executable(main
main.c
)
set_target_properties(main PROPERTIES COMPILE_FLAGS "-std=c99 -g")
target_link_libraries(main ruminate ${GLIB2_LIBRARIES})
include_directories(${GLIB2_INCLUDE_DIRS})
22 changes: 1 addition & 21 deletions test/main.c → test/main/main.c
Original file line number Diff line number Diff line change
Expand Up @@ -95,23 +95,9 @@ int main( int argc, char **argv ) {

static void do_ruminate_init( char **prgname ) {
GError *err = NULL;
int argc = 7;
*prgname = g_strdup(g_get_prgname());
//*prgname = g_strdup("./test/main.exe");
char *argv[] = {
*prgname,
g_strdup("--Ice.Trace.GC=2"),
g_strdup("--Ice.Trace.Network=3"),
g_strdup("--Ice.Trace.Location=2"),
g_strdup("--Ice.Trace.Protocol=1"),
g_strdup("--Ice.Trace.Retry=2"),
g_strdup("--Ice.Trace.Slicing=1"),
NULL
};

dup2(3, 1);
dup2(3, 2);
ruminate_init(&argc, argv, &err);
ruminate_init(*prgname, &err);
g_assert_no_error(err);
}

Expand Down Expand Up @@ -141,16 +127,10 @@ static void test_ruminate_init_and_destroy() {
}

int main( int argc, char **argv ) {
fprintf(stderr, "prgname = %s\n", argv[0]);

dup2(2, 3);
g_test_init(&argc, &argv, NULL);
test_ruminate_init_and_destroy();
exit(0);
g_test_init(&argc, &argv, NULL);
dup2(3, 2);
dup2(3, 1);
fprintf(stderr, "prgname = %s\n", g_get_prgname());

g_test_add_func("/init_and_destroy", test_ruminate_init_and_destroy);
//g_test_add_func("/init_and_destroy/subprocess", test_ruminate_init_and_destroy_subprocess);
Expand Down

0 comments on commit 7d2621d

Please sign in to comment.