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