[Ltrace-devel] r62 - in ltrace/trunk: . etc testsuite/ltrace.main
Ian Wienand
ianw-guest at costa.debian.org
Mon Aug 7 04:00:00 UTC 2006
Author: ianw-guest
Date: 2006-08-07 03:59:59 +0000 (Mon, 07 Aug 2006)
New Revision: 62
Modified:
ltrace/trunk/ChangeLog
ltrace/trunk/etc/ltrace.conf
ltrace/trunk/read_config_file.c
ltrace/trunk/testsuite/ltrace.main/parameters-lib.c
ltrace/trunk/testsuite/ltrace.main/parameters.c
ltrace/trunk/testsuite/ltrace.main/parameters.conf
ltrace/trunk/testsuite/ltrace.main/parameters.exp
Log:
typedefs
Modified: ltrace/trunk/ChangeLog
===================================================================
--- ltrace/trunk/ChangeLog 2006-08-07 03:56:56 UTC (rev 61)
+++ ltrace/trunk/ChangeLog 2006-08-07 03:59:59 UTC (rev 62)
@@ -1,5 +1,13 @@
2006-08-07 Steve Fink <sphink at gmail.com>
+ * etc/ltrace.conf, read_config_file.c,
+ testsuite/ltrace.main/parameters-lib.c,
+ testsuite/ltrace.main/parameters.c,
+ testsuite/ltrace.main/parameters.conf,
+ testsuite/ltrace.main/parameters.exp: add ability to typedef
+
+2006-08-07 Steve Fink <sphink at gmail.com>
+
* display_args.c, etc/ltrace.conf, ltrace.h, read_config_file.c,
testsuite/ltrace.main/parameters-lib.c,
testsuite/ltrace.main/parameters.c,
Modified: ltrace/trunk/etc/ltrace.conf
===================================================================
--- ltrace/trunk/etc/ltrace.conf 2006-08-07 03:56:56 UTC (rev 61)
+++ ltrace/trunk/etc/ltrace.conf 2006-08-07 03:59:59 UTC (rev 62)
@@ -32,6 +32,15 @@
; string0 == (char *) [same as string[retval]]
; stringN == (char *) [N>0] [same as string[argN]]
+; Typedefs
+;
+; To make it easier to specify argument lists, you can use 'typedef'
+; directives to avoid repeating complex parameter descriptors:
+;
+; typedef color = enum(RED=1,BLUE=2,GREEN=3)
+; void draw_line(color,int,int,int,int)
+; void draw_square(color,int,int,int,int)
+;
; Enumerations
;
; The syntax is a parenthesized list of key=value assignments, like so:
Modified: ltrace/trunk/read_config_file.c
===================================================================
--- ltrace/trunk/read_config_file.c 2006-08-07 03:56:56 UTC (rev 61)
+++ ltrace/trunk/read_config_file.c 2006-08-07 03:59:59 UTC (rev 62)
@@ -15,6 +15,8 @@
static char *filename;
static int error_count = 0;
+static arg_type_info *parse_type(char **str);
+
struct function *list_of_functions = NULL;
static struct list_of_pt_t {
@@ -214,13 +216,82 @@
return n * multiplier;
}
+struct typedef_node_t {
+ char *name;
+ arg_type_info *info;
+ struct typedef_node_t *next;
+} *typedefs = NULL;
+
+static arg_type_info *lookup_typedef(char **str)
+{
+ struct typedef_node_t *node;
+ char *end = *str;
+ while (*end && (isalnum(*end) || *end == '_'))
+ ++end;
+ if (end == *str)
+ return NULL;
+
+ for (node = typedefs; node != NULL; node = node->next) {
+ if (strncmp(*str, node->name, end - *str) == 0) {
+ (*str) += strlen(node->name);
+ return node->info;
+ }
+ }
+
+ return NULL;
+}
+
+static void parse_typedef(char **str)
+{
+ char *name;
+ arg_type_info *info;
+ struct typedef_node_t *binding;
+
+ (*str) += strlen("typedef");
+ eat_spaces(str);
+
+ // Grab out the name of the type
+ name = parse_ident(str);
+
+ // Skip = sign
+ eat_spaces(str);
+ if (**str != '=') {
+ output_line(0,
+ "Syntax error in `%s', line %d: expected '=', got '%c'",
+ filename, line_no, **str);
+ error_count++;
+ return;
+ }
+ (*str)++;
+ eat_spaces(str);
+
+ // Parse the type
+ info = parse_type(str);
+
+ // Insert onto beginning of linked list
+ binding = malloc(sizeof(*binding));
+ binding->name = name;
+ binding->info = info;
+ binding->next = typedefs;
+ typedefs = binding;
+}
+
static arg_type_info *parse_nonpointer_type(char **str)
{
arg_type_info *simple;
arg_type_info *info;
+ if (strncmp(*str, "typedef", 7) == 0) {
+ parse_typedef(str);
+ return lookup_singleton(ARGTYPE_UNKNOWN);
+ }
+
simple = str2type(str);
if (simple->type == ARGTYPE_UNKNOWN) {
+ info = lookup_typedef(str);
+ if (info)
+ return info;
+ else
return simple; // UNKNOWN
}
Modified: ltrace/trunk/testsuite/ltrace.main/parameters-lib.c
===================================================================
--- ltrace/trunk/testsuite/ltrace.main/parameters-lib.c 2006-08-07 03:56:56 UTC (rev 61)
+++ ltrace/trunk/testsuite/ltrace.main/parameters-lib.c 2006-08-07 03:59:59 UTC (rev 62)
@@ -56,3 +56,8 @@
{
printf("%f %f\n", f1, f2);
}
+
+void func_typedef(int x)
+{
+ printf("typedef'd enum: %d\n", x);
+}
Modified: ltrace/trunk/testsuite/ltrace.main/parameters.c
===================================================================
--- ltrace/trunk/testsuite/ltrace.main/parameters.c 2006-08-07 03:56:56 UTC (rev 61)
+++ ltrace/trunk/testsuite/ltrace.main/parameters.c 2006-08-07 03:59:59 UTC (rev 62)
@@ -31,6 +31,7 @@
PETUNIA
} color_t;
void func_enum(color_t);
+void func_typedef(color_t);
int
main ()
@@ -67,5 +68,7 @@
func_ushort(33, 34);
func_float(3.4, -3.4);
+ func_typedef(BLUE);
+
return 0;
}
Modified: ltrace/trunk/testsuite/ltrace.main/parameters.conf
===================================================================
--- ltrace/trunk/testsuite/ltrace.main/parameters.conf 2006-08-07 03:56:56 UTC (rev 61)
+++ ltrace/trunk/testsuite/ltrace.main/parameters.conf 2006-08-07 03:59:59 UTC (rev 62)
@@ -9,3 +9,5 @@
void func_short(short,short)
void func_ushort(ushort, ushort)
void func_float(float,float)
+typedef color = enum (RED=0,GREEN=1,BLUE=2,CHARTREUSE=3,PETUNIA=4)
+void func_typedef(color)
Modified: ltrace/trunk/testsuite/ltrace.main/parameters.exp
===================================================================
--- ltrace/trunk/testsuite/ltrace.main/parameters.exp 2006-08-07 03:56:56 UTC (rev 61)
+++ ltrace/trunk/testsuite/ltrace.main/parameters.exp 2006-08-07 03:59:59 UTC (rev 62)
@@ -58,5 +58,7 @@
ltrace_verify_output ${srcdir}/${subdir}/${testfile}.ltrace $pattern 1
set pattern "func_float(3.40*, -3.40*)"
ltrace_verify_output ${srcdir}/${subdir}/${testfile}.ltrace $pattern 1
+set pattern "func_typedef(BLUE)"
+ltrace_verify_output ${srcdir}/${subdir}/${testfile}.ltrace $pattern 1
set pattern "exited (status 0)"
ltrace_verify_output ${srcdir}/${subdir}/${testfile}.ltrace $pattern 1
More information about the Ltrace-devel
mailing list