]> err.no Git - varnish/commitdiff
Split vcc_Coord() function out from vcc_ErrWhere(), to give a set
authorphk <phk@d4fa192b-c00b-0410-8231-f00ffab90ce4>
Mon, 29 Sep 2008 08:11:06 +0000 (08:11 +0000)
committerphk <phk@d4fa192b-c00b-0410-8231-f00ffab90ce4>
Mon, 29 Sep 2008 08:11:06 +0000 (08:11 +0000)
of source coordinates in human readable form in a vsb.

git-svn-id: svn+ssh://projects.linpro.no/svn/varnish/trunk@3235 d4fa192b-c00b-0410-8231-f00ffab90ce4

varnish-cache/lib/libvcl/vcc_compile.h
varnish-cache/lib/libvcl/vcc_token.c

index 4b80f0cd928e5b70d85a4f5cef7109b40d93c302..90008c420e4016a15696c0c2ab4e3221c6874056 100644 (file)
@@ -203,6 +203,7 @@ int vcc_StringVal(struct tokenlist *tl);
 void vcc_ExpectedStringval(struct tokenlist *tl);
 
 /* vcc_token.c */
+void vcc_Coord(const struct tokenlist *tl, struct vsb *vsb, const struct token *t);
 void vcc_ErrToken(const struct tokenlist *tl, const struct token *t);
 void vcc_ErrWhere(struct tokenlist *tl, const struct token *t);
 void vcc__Expect(struct tokenlist *tl, unsigned tok, int line);
index a6a72f8ccc5a954ed19c558d0afb08c554580e64..093c317c9ae417601c8bc82e54dd246b7e33f5b9 100644 (file)
@@ -68,32 +68,52 @@ vcc__ErrInternal(struct tokenlist *tl, const char *func, unsigned line)
        tl->err = 1;
 }
 
-void
-vcc_ErrWhere(struct tokenlist *tl, const struct token *t)
+static void
+vcc_icoord(struct vsb *vsb, const struct token *t, const char **ll)
 {
-       unsigned lin, pos, x, y;
-       const char *p, *l, *f, *b, *e;
+       unsigned lin, pos;
+       const char *p, *b;
        struct source *sp;
 
        lin = 1;
        pos = 0;
        sp = t->src;
-       f = sp->name;
        b = sp->b;
-       e = sp->e;
-       for (l = p = b; p < t->b; p++) {
+       for (p = b; p < t->b; p++) {
                if (*p == '\n') {
                        lin++;
                        pos = 0;
-                       l = p + 1;
+                       if (ll != NULL)
+                               *ll = p + 1;
                } else if (*p == '\t') {
                        pos &= ~7;
                        pos += 8;
                } else
                        pos++;
        }
-       vsb_printf(tl->sb, "(%s Line %d Pos %d)\n", f, lin, pos + 1);
+       vsb_printf(vsb, "(%s Line %d Pos %d)", sp->name, lin, pos + 1);
+}
+
+void
+vcc_Coord(const struct tokenlist *tl, struct vsb *vsb, const struct token *t)
+{
+
+       if (t == NULL)
+               t = tl->t;
+       vcc_icoord(vsb, t, NULL);
+}
+
+void
+vcc_ErrWhere(struct tokenlist *tl, const struct token *t)
+{
+       unsigned x, y;
+       const char *p, *l, *e;
+
+       vcc_icoord(tl->sb, t, &l);
+       vsb_printf(tl->sb, "\n");
+       
        x = y = 0;
+       e = t->src->e;
        for (p = l; p < e && *p != '\n'; p++) {
                if (*p == '\t') {
                        y &= ~7;