r4504 - in developers/werner/greg: . tests

werner at docs.openmoko.org werner at docs.openmoko.org
Mon Jun 30 02:55:01 CEST 2008


Author: werner
Date: 2008-06-30 02:55:00 +0200 (Mon, 30 Jun 2008)
New Revision: 4504

Added:
   developers/werner/greg/id.c
   developers/werner/greg/id.h
   developers/werner/greg/tests/cont
   developers/werner/greg/tests/formula
Modified:
   developers/werner/greg/Makefile
   developers/werner/greg/README
   developers/werner/greg/greg.c
   developers/werner/greg/lang.l
Log:
- use unique() also when looking up identifiers from the command line
- added regression tests for split lines, values given by formulas



Modified: developers/werner/greg/Makefile
===================================================================
--- developers/werner/greg/Makefile	2008-06-26 05:49:26 UTC (rev 4503)
+++ developers/werner/greg/Makefile	2008-06-30 00:55:00 UTC (rev 4504)
@@ -5,7 +5,7 @@
        -Wno-missing-declarations
 LDLIBS=-lfl
 
-OBJS=greg.o lex.yy.o y.tab.o cpp.o
+OBJS=greg.o lex.yy.o y.tab.o cpp.o id.o
 
 .PHONY:		all dep depend clean spotless test tests
 

Modified: developers/werner/greg/README
===================================================================
--- developers/werner/greg/README	2008-06-26 05:49:26 UTC (rev 4503)
+++ developers/werner/greg/README	2008-06-30 00:55:00 UTC (rev 4504)
@@ -14,12 +14,10 @@
 Known issues
 ------------
 
-- output format should be easier to read
 - value names in pcf50633.greg are often unsuitable for identifier generation
   (should align them properly with what we use in u-boot and kernel)
 - "pretty-print" is hard to read
 - unique() should use rb-trees
-- greg.c should use unique(), to accelerate lookups
 
 
 dr.pl

Modified: developers/werner/greg/greg.c
===================================================================
--- developers/werner/greg/greg.c	2008-06-26 05:49:26 UTC (rev 4503)
+++ developers/werner/greg/greg.c	2008-06-30 00:55:00 UTC (rev 4504)
@@ -14,10 +14,10 @@
 
 #include <stdlib.h>
 #include <stdio.h>
-#include <string.h>
 
 #include "reg.h"
 #include "cpp.h"
+#include "id.h"
 #include "greg.h"
 
 
@@ -81,8 +81,9 @@
 	const struct reg *reg;
 	const struct field *field;
 
+	id = unique(id);
 	for (reg = regs; reg; reg = reg->next)
-		if (!strcmp(reg->id, id))
+		if (reg->id == id)
 			break;
 	if (!reg) {
 		fprintf(stderr, "register \"%s\" not found\n", id);

Added: developers/werner/greg/id.c
===================================================================
--- developers/werner/greg/id.c	                        (rev 0)
+++ developers/werner/greg/id.c	2008-06-30 00:55:00 UTC (rev 4504)
@@ -0,0 +1,49 @@
+/*
+ * id.c - Unique identifiers
+ *
+ * Copyright (C) 2008 by OpenMoko, Inc.
+ * Written by Werner Almesberger <werner at openmoko.org>
+ * All Rights Reserved
+ *
+ * This program is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation; either version 2 of the License, or
+ * (at your option) any later version.
+ */
+
+
+#include <stdlib.h>
+#include <stdio.h>
+#include <string.h>
+
+#include "id.h"
+
+
+char *unique(const char *s)
+{
+	static struct node {
+		char *s;
+		struct node *left, *right;
+	} *root = NULL;
+	struct node **n = &root;
+	int cmp;
+
+	while (*n) {
+		cmp = strcmp((*n)->s, s);
+		if (!cmp)
+			return (*n)->s;
+		n = cmp < 0 ? &(*n)->left : &(*n)->right;
+	}
+	*n = malloc(sizeof(struct node));
+	if (!*n) {
+		perror("malloc");
+		exit(1);
+	}
+	(*n)->s = strdup(s);
+	if (!(*n)->s) {
+		perror("strdup");
+		exit(1);
+	}
+	(*n)->left = (*n)->right = NULL;
+	return (*n)->s;
+}

Added: developers/werner/greg/id.h
===================================================================
--- developers/werner/greg/id.h	                        (rev 0)
+++ developers/werner/greg/id.h	2008-06-30 00:55:00 UTC (rev 4504)
@@ -0,0 +1,19 @@
+/*
+ * id.h - Unique identifiers
+ *
+ * Copyright (C) 2008 by OpenMoko, Inc.
+ * Written by Werner Almesberger <werner at openmoko.org>
+ * All Rights Reserved
+ *
+ * This program is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation; either version 2 of the License, or
+ * (at your option) any later version.
+ */
+
+#ifndef ID_H
+#define ID_H
+
+char *unique(const char *s);
+
+#endif /* !ID_H */

Modified: developers/werner/greg/lang.l
===================================================================
--- developers/werner/greg/lang.l	2008-06-26 05:49:26 UTC (rev 4503)
+++ developers/werner/greg/lang.l	2008-06-30 00:55:00 UTC (rev 4504)
@@ -21,45 +21,18 @@
 #include "y.tab.h"
 
 #include "greg.h"
+#include "id.h"
 
 
 static int lineno = 1;
 static int col0 = 1; /* token starts in the first column */
 
-
-static char *unique(const char *s)
-{
-	static struct node {
-		char *s;
-		struct node *left, *right;
-	} *root = NULL;
-	struct node **n = &root;
-	int cmp;
-
-	while (*n) {
-		cmp = strcmp((*n)->s, s);
-		if (!cmp)
-			return (*n)->s;
-		n = cmp < 0 ? &(*n)->left : &(*n)->right;
-	}
-	*n = malloc(sizeof(struct node));
-	if (!*n) {
-		perror("malloc");
-		exit(1);
-	}
-	(*n)->s = strdup(s);
-	if (!(*n)->s) {
-		perror("strdup");
-		exit(1);
-	}
-	(*n)->left = (*n)->right = NULL;
-	return (*n)->s;
-}
-
 %}
 
+
 %%
 
+
 "%"[0-9]+		{ yylval.num = strtoul(yytext+1, NULL, 10);
 			  col0 = 0;
 			  return TOK_BITS; }

Added: developers/werner/greg/tests/cont
===================================================================
--- developers/werner/greg/tests/cont	                        (rev 0)
+++ developers/werner/greg/tests/cont	2008-06-30 00:55:00 UTC (rev 4504)
@@ -0,0 +1,45 @@
+#!/bin/sh
+. ./Common
+
+# -----------------------------------------------------------------------------
+
+greg "register definition continues on second line" foo 0x12 <<EOF
+foo
+  bar
+EOF
+
+expect <<EOF
+foo bar = 0x12
+EOF
+
+# -----------------------------------------------------------------------------
+
+greg_fail "continuation must be indented" <<EOF
+bar
+blah
+EOF
+
+expect <<EOF
+2: syntax error near "blah"
+EOF
+
+# -----------------------------------------------------------------------------
+
+greg_fail "file may not begin with an indentation" <<EOF
+  foo
+  bar
+EOF
+
+expect <<EOF
+1: syntax error near "foo"
+EOF
+
+# -----------------------------------------------------------------------------
+
+greg "concatenate strings" foo 0 <<EOF
+foo bar "some" "comment"
+EOF
+
+expect <<EOF
+foo bar = 0x00 -- somecomment
+EOF


Property changes on: developers/werner/greg/tests/cont
___________________________________________________________________
Name: svn:executable
   + *

Added: developers/werner/greg/tests/formula
===================================================================
--- developers/werner/greg/tests/formula	                        (rev 0)
+++ developers/werner/greg/tests/formula	2008-06-30 00:55:00 UTC (rev 4504)
@@ -0,0 +1,30 @@
+#!/bin/sh
+. ./Common
+
+# -----------------------------------------------------------------------------
+
+greg "formula value, with unit" foo 3 <<EOF
+foo bar
+	blah[8]
+		<1+2* blah>
+EOF
+
+expect <<EOF
+foo bar = 0x03
+    blah
+	0000.0011 (0x03): 1+2*3 = 7 blah
+EOF
+
+# -----------------------------------------------------------------------------
+
+greg "formula value, without unit" foo 2 <<EOF
+foo bar
+	blah[8]
+		<3+5*>
+EOF
+
+expect <<EOF
+foo bar = 0x02
+    blah
+	0000.0010 (0x02): 3+5*2 = 13
+EOF


Property changes on: developers/werner/greg/tests/formula
___________________________________________________________________
Name: svn:executable
   + *





More information about the commitlog mailing list