Author: kjs
Date: Tue Apr  3 11:26:53 2007
New Revision: 17963

Modified:
   trunk/compilers/pirc/src/jsonout.c
   trunk/compilers/pirc/src/pastout.c
   trunk/compilers/pirc/src/pirout.c
   trunk/compilers/pirc/src/pirparser.c
   trunk/compilers/pirc/src/pirvtable.c
   trunk/compilers/pirc/src/pirvtable.h

Log:
compilers/pirc:
* some vtable changes
* and fixes for json/past/pir output

Modified: trunk/compilers/pirc/src/jsonout.c
==============================================================================
--- trunk/compilers/pirc/src/jsonout.c  (original)
+++ trunk/compilers/pirc/src/jsonout.c  Tue Apr  3 11:26:53 2007
@@ -12,7 +12,7 @@
 #include "pirparser.h"
 #include <stdio.h>
 
-#define OUT  stderr
+#define OUT  stdout
 
 /* todo: re-use this code (see pastout.c) , and make it threadsafe: */
 static int indent = 0;
@@ -32,15 +32,14 @@
 json_end(struct parser_state *p) {
     dedent();
     fprintf(OUT, "%*s}\n", indent, (indent == 0) ? "" : " ");
-
 }
 
-
 static void
 json_sub_start(struct parser_state *p, char *source, int pos) {
     fprintf(OUT, "%*s'sub' : {\n", indent, " ");
     indent();
-    fprintf(OUT, "%*s'source' : '%s', 'pos' : %d,\n", indent, " ", source, 
pos);
+    fprintf(OUT, "%*s'source' : '%s',\n", indent, " ", source);
+    fprintf(OUT, "%*s'pos' : %d,\n", indent, " ", pos);
 }
 
 static void
@@ -50,10 +49,44 @@
 
 static void
 json_stmts_start(struct parser_state *p) {
-    fprintf(OUT, "%*s'instructions' : {\n", indent, " ");
+    fprintf(OUT, "%*s'instructions' : [\n", indent, " ");
     indent();
 }
 
+static void
+json_param_start(struct parser_state *p) {
+    fprintf(OUT, "%*s'parameters' : [\n", indent, " ");
+    indent();
+}
+
+static void
+json_sub_flag_start(struct parser_state *p) {
+    fprintf(OUT, "%*s'subflags' : [\n", indent, " ");
+    indent();
+}
+
+static void
+json_sub_flag_end(struct parser_state *p) {
+    dedent();
+    fprintf(OUT, "%*s]\n", indent, " ");
+}
+
+static void
+json_sub_flag(struct parser_state *p, int flag) {
+    fprintf(OUT, "%*s{ 'subflag' : '%s' }\n", indent, " ", "TODO");
+}
+
+static void
+json_list_start(struct parser_state *p) {
+    fprintf(OUT, "%*s[\n", indent, " ");
+    indent();
+}
+
+static void
+json_list_end(struct parser_state *p) {
+    dedent();
+    fprintf(OUT, "%*s]\n", indent, " ");
+}
 /*
 static void
 json_next(struct parser_state *p) {
@@ -66,13 +99,22 @@
 init_json_vtable(void) {
     pirvtable *vtable = new_pirvtable();
 
-    vtable->initialize  = json_init;
-    vtable->sub_start   = json_sub_start;
-    vtable->sub_end     = json_end;
-    vtable->end         = json_end;
-    vtable->stmts_start = json_stmts_start;
-    vtable->stmts_end   = json_end;
-    vtable->name        = json_name;
+    vtable->initialize     = json_init;
+    vtable->sub_start      = json_sub_start;
+    vtable->sub_end        = json_end;
+    vtable->end            = json_end;
+    vtable->stmts_start    = json_stmts_start;
+    vtable->stmts_end      = json_list_end;
+    vtable->name           = json_name;
+    vtable->sub_flag       = json_sub_flag;
+
+    vtable->param_start    = json_param_start;
+    vtable->param_end      = json_list_end;
+    vtable->sub_flag_start = json_sub_flag_start;
+    vtable->sub_flag_end   = json_sub_flag_end;
+    vtable->list_start     = json_list_start;
+    vtable->list_end       = json_list_end;
+
     /* vtable->next_expr   = json_next; */
 
     return vtable;

Modified: trunk/compilers/pirc/src/pastout.c
==============================================================================
--- trunk/compilers/pirc/src/pastout.c  (original)
+++ trunk/compilers/pirc/src/pastout.c  Tue Apr  3 11:26:53 2007
@@ -131,11 +131,6 @@
     */
 }
 
-static void
-past_subflagarg(struct parser_state *p, int flag, char *arg) {
-    /*fprintf(OUT, "%*s<type> => \"%s\"\n", indent, " ", type);
-    */
-}
 
 static void
 past_op(struct parser_state *p, char *op) {
@@ -181,8 +176,7 @@
     vtable->param_start  = past_param;
     vtable->param_end    = past_close;
     vtable->type         = past_type;
-    vtable->sub_flag     = past_subflag;
-    vtable->sub_flag_arg = past_subflagarg;
+    vtable->sub_flag     = past_subflag;    
     vtable->op_start     = past_op;
     vtable->expression   = past_expr;
     vtable->op_end       = past_close;

Modified: trunk/compilers/pirc/src/pirout.c
==============================================================================
--- trunk/compilers/pirc/src/pirout.c   (original)
+++ trunk/compilers/pirc/src/pirout.c   Tue Apr  3 11:26:53 2007
@@ -5,6 +5,7 @@
 #include <malloc.h>
 
 
+
 #define OUT stderr
 
 /*
@@ -80,7 +81,7 @@
 
 static void
 pir_param(struct parser_state *p) {
-    fprintf(OUT, "\t.param ");
+    fprintf(OUT, "  .param ");
 }
 
 static void
@@ -89,13 +90,8 @@
 }
 
 static void
-pir_subflag(struct parser_state *p, int flag) {
-    fprintf(OUT, "%s ", find_keyword(flag));
-}
-
-static void
-pir_subflagarg(struct parser_state *p, int flag, char *arg) {
-    fprintf(OUT, "%s(%s) ", find_keyword(flag), arg);
+pir_sub_flag(struct parser_state *p, int flag) {    
+    fprintf(OUT, "%s ", find_keyword(flag));           
 }
 
 static void
@@ -105,7 +101,7 @@
 
 static void
 pir_op(struct parser_state *p, char *op) {
-    fprintf(OUT, "%s ", op);
+    fprintf(OUT, "  %s ", op);
 }
 
 static void
@@ -113,6 +109,27 @@
     fprintf(OUT, ", ");
 }
 
+static void
+pir_list_start(struct parser_state *p) {
+    fprintf(OUT, "(");
+}
+
+static void
+pir_list_end(struct parser_state *p) {
+    fprintf(OUT, ")");
+}
+
+static void
+pir_sub_flag_start(struct parser_state *p) {
+    fprintf(OUT, "");
+}
+
+
+static void
+pir_sub_flag_end(struct parser_state *p) {
+    fprintf(OUT, "\n");
+}
+
 /*
 
 =item init_pir_vtable()
@@ -128,20 +145,24 @@
     pirvtable *vtable = new_pirvtable();
 
     /* override the methods that are needed for PIR output */
-    vtable->sub_start    = pir_sub;
-    vtable->sub_end      = pir_end;
-    vtable->name         = pir_name;
-    vtable->stmts_start  = pir_newline;
-    vtable->param_start  = pir_param;
-    vtable->param_end    = pir_newline;
-    vtable->type         = pir_type;
-    vtable->sub_flag     = pir_subflag;
-    vtable->sub_flag_arg = pir_subflagarg;
-    vtable->op_start     = pir_op;
-    vtable->op_end       = pir_newline;
-    vtable->expression   = pir_expr;
-    vtable->next_expr    = pir_comma;
-
+    vtable->sub_start      = pir_sub;
+    vtable->sub_end        = pir_end;
+    vtable->name           = pir_name;
+    vtable->stmts_start    = pir_newline;
+    vtable->param_start    = pir_param;
+    vtable->param_end      = pir_newline;
+    vtable->type           = pir_type;
+    vtable->sub_flag       = pir_sub_flag;
+    vtable->op_start       = pir_op;
+    vtable->op_end         = pir_newline;
+    vtable->expression     = pir_expr;
+    vtable->next_expr      = pir_comma;
+    vtable->list_start     = pir_list_start;
+    vtable->list_end       = pir_list_end;
+    vtable->sub_flag_start = pir_sub_flag_start;
+    vtable->sub_flag_end   = pir_sub_flag_end;
+    
+    
     return vtable;
 }
 

Modified: trunk/compilers/pirc/src/pirparser.c
==============================================================================
--- trunk/compilers/pirc/src/pirparser.c        (original)
+++ trunk/compilers/pirc/src/pirparser.c        Tue Apr  3 11:26:53 2007
@@ -1703,11 +1703,14 @@
 multi_type_list(parser_state *p) {
     int wantmore = 1;
 
+    emit_list_start(p);
+    
     match(p, T_LPAREN);
     while (wantmore) {
         switch (p->curtoken) {
             case T_IDENTIFIER:
             case T_STRING_CONSTANT:
+                emit_expr(p, get_current_token(p->lexer));
                 next(p);
                 break;
             case T_LBRACKET:
@@ -1717,6 +1720,7 @@
             case T_NUM:
             case T_PMC:
             case T_STRING:
+                emit_type(p, get_current_token(p->lexer));
                 next(p);
                 break;
             case T_RPAREN: /* ')', so stop parsing this list */
@@ -1728,10 +1732,14 @@
                 break;
         }
 
-        if (p->curtoken == T_COMMA) next(p);
+        if (p->curtoken == T_COMMA) {
+            emit_next_expr(p);
+            next(p);
+        }
         else wantmore = 0; /* no comma, so quit loop */
     }
     match(p, T_RPAREN);
+    emit_list_end(p);
 }
 
 /*
@@ -1760,6 +1768,8 @@
     int ok = 1;
     int wantmore = 0; /* flag that is set when a ',' is parsed */
 
+    emit_sub_flag_start(p);
+        
     while (ok || wantmore) {
         switch (p->curtoken) {
             case T_ANON_FLAG:
@@ -1775,15 +1785,18 @@
                 break;
             case T_OUTER_FLAG:
             case T_VTABLE_FLAG: {
-                token flag = p->curtoken; /* store the flag for the emit() to 
come */
+                emit_sub_flag(p, p->curtoken);                
                 next(p);
-                match(p, T_LPAREN);
-                emit_sub_flag_arg(p, flag, get_current_token(p->lexer));
+                emit_list_start(p);
+                match(p, T_LPAREN);                
+                emit_expr(p, get_current_token(p->lexer));                
                 match(p, T_STRING_CONSTANT);
+                emit_list_end(p);
                 match(p, T_RPAREN);
                 break;
             }
             case T_MULTI_FLAG:
+                emit_sub_flag(p, p->curtoken);
                 next(p);
                 multi_type_list(p);
                 break;
@@ -1807,6 +1820,8 @@
             wantmore = 1;  /* after the optional comma we expect another sub 
flag */
         }
     }
+        
+    emit_sub_flag_end(p);
 }
 
 
@@ -1894,9 +1909,9 @@
     }
 
     sub_flags(p);
-    match(p, T_NEWLINE);
-    emit_stmts_start(p); /* open stmts block */
+    match(p, T_NEWLINE);    
     parameters(p);
+    emit_stmts_start(p); /* open stmts block */
     instructions(p);
     emit_stmts_end(p);  /* close stmts block */
     match(p, T_END);

Modified: trunk/compilers/pirc/src/pirvtable.c
==============================================================================
--- trunk/compilers/pirc/src/pirvtable.c        (original)
+++ trunk/compilers/pirc/src/pirvtable.c        Tue Apr  3 11:26:53 2007
@@ -70,26 +70,26 @@
     /* set all entries to 'default' by default. This way, another output module
      * only needs to override the entries that are interesting for that module.
      */
-    vtable->initialize   = not_implemented;
-    vtable->name         = not_implemented;
-    vtable->sub_start    = not_implemented;
-    vtable->sub_end      = not_implemented;
-    vtable->stmts_start  = not_implemented;
-    vtable->stmts_end    = not_implemented;
-    vtable->end          = not_implemented;
-    vtable->param_start  = not_implemented;
-    vtable->param_end    = not_implemented;
-    vtable->type         = not_implemented;
-    vtable->sub_flag     = not_implemented;
-    vtable->sub_flag_arg = not_implemented;
-    vtable->expression   = not_implemented;
-    vtable->next_expr    = not_implemented;
-    vtable->op_start     = not_implemented;
-    vtable->op_end       = not_implemented;
-    vtable->list_start   = not_implemented;
-    vtable->list_end     = not_implemented;
-
-
+    vtable->initialize     = not_implemented;
+    vtable->name           = not_implemented;
+    vtable->sub_start      = not_implemented;
+    vtable->sub_end        = not_implemented;
+    vtable->stmts_start    = not_implemented;
+    vtable->stmts_end      = not_implemented;
+    vtable->end            = not_implemented;
+    vtable->param_start    = not_implemented;
+    vtable->param_end      = not_implemented;
+    vtable->type           = not_implemented;
+    vtable->sub_flag       = not_implemented;    
+    vtable->expression     = not_implemented;
+    vtable->next_expr      = not_implemented;
+    vtable->op_start       = not_implemented;
+    vtable->op_end         = not_implemented;
+    vtable->list_start     = not_implemented;
+    vtable->list_end       = not_implemented;
+    vtable->sub_flag_start = not_implemented;
+    vtable->sub_flag_end   = not_implemented;
+    
     return vtable;
 }
 

Modified: trunk/compilers/pirc/src/pirvtable.h
==============================================================================
--- trunk/compilers/pirc/src/pirvtable.h        (original)
+++ trunk/compilers/pirc/src/pirvtable.h        Tue Apr  3 11:26:53 2007
@@ -7,47 +7,49 @@
  * routines.
  */
 typedef struct pirvtable {
-    void (* initialize)  (struct parser_state *p);
-    void (* sub_start)   (struct parser_state *p, char *source, int pos);
-    void (* sub_end)     (struct parser_state *p);
-    void (* name)        (struct parser_state *p, char *name);
-    void (* stmts_start) (struct parser_state *p);
-    void (* stmts_end)   (struct parser_state *p);
-    void (* end)         (struct parser_state *p);
-    void (* param_start) (struct parser_state *p);
-    void (* param_end)   (struct parser_state *p);
-    void (* type)        (struct parser_state *p, char *type);
-    void (* sub_flag)    (struct parser_state *p, int flag);
-    void (* sub_flag_arg)(struct parser_state *p, int flag, char *arg);
-    void (* op_start)    (struct parser_state *p, char *op);
-    void (* op_end)      (struct parser_state *p);
-    void (* expression)  (struct parser_state *p, char *expr);
-    void (* next_expr)   (struct parser_state *p);
-    void (* list_start)  (struct parser_state *p);
-    void (* list_end)    (struct parser_state *p);
+    void (* initialize)     (struct parser_state *p);
+    void (* sub_start)      (struct parser_state *p, char *source, int pos);
+    void (* sub_end)        (struct parser_state *p);
+    void (* name)           (struct parser_state *p, char *name);
+    void (* stmts_start)    (struct parser_state *p);
+    void (* stmts_end)      (struct parser_state *p);
+    void (* end)            (struct parser_state *p);
+    void (* param_start)    (struct parser_state *p);
+    void (* param_end)      (struct parser_state *p);
+    void (* type)           (struct parser_state *p, char *type);
+    void (* sub_flag)       (struct parser_state *p, int flag);
+    void (* op_start)       (struct parser_state *p, char *op);
+    void (* op_end)         (struct parser_state *p);
+    void (* expression)     (struct parser_state *p, char *expr);
+    void (* next_expr)      (struct parser_state *p);
+    void (* list_start)     (struct parser_state *p);
+    void (* list_end)       (struct parser_state *p);
+    void (* sub_flag_start) (struct parser_state *p);
+    void (* sub_flag_end)   (struct parser_state *p);
 
 
 } pirvtable;
 
 /* #defines for cleaner invocation syntax */
-#  define emit_init(P)              (*P->vtable->initialize)  (P)
-#  define emit_sub_start(P,S,L)     (*P->vtable->sub_start)   (P,S,L)
-#  define emit_sub_end(P)           (*P->vtable->sub_end)     (P)
-#  define emit_name(P,N)            (*P->vtable->name)        (P,N)
-#  define emit_stmts_start(P)       (*P->vtable->stmts_start) (P)
-#  define emit_stmts_end(P)         (*P->vtable->stmts_end)   (P)
-#  define emit_end(P)               (*P->vtable->end)         (P)
-#  define emit_param_start(P)       (*P->vtable->param_start) (P)
-#  define emit_param_end(P)         (*P->vtable->param_end)   (P)
-#  define emit_type(P,T)            (*P->vtable->type)        (P,T)
-#  define emit_sub_flag(P,F)        (*P->vtable->sub_flag)    (P,F)
-#  define emit_sub_flag_arg(P,F,A)  (*P->vtable->sub_flag_arg)(P,F,A)
-#  define emit_op_start(P,O)        (*P->vtable->op_start)    (P,O)
-#  define emit_op_end(P)            (*P->vtable->op_end)      (P)
-#  define emit_expr(P,E)            (*P->vtable->expression)  (P,E)
-#  define emit_next_expr(P)         (*P->vtable->next_expr)   (P)
-#  define emit_list_start(P)        (*P->vtable->list_start)  (P)
-#  define emit_list_end(P)          (*P->vtable->list_end)    (P)
+#  define emit_init(P)              (*P->vtable->initialize)    (P)
+#  define emit_sub_start(P,S,L)     (*P->vtable->sub_start)     (P,S,L)
+#  define emit_sub_end(P)           (*P->vtable->sub_end)       (P)
+#  define emit_name(P,N)            (*P->vtable->name)          (P,N)
+#  define emit_stmts_start(P)       (*P->vtable->stmts_start)   (P)
+#  define emit_stmts_end(P)         (*P->vtable->stmts_end)     (P)
+#  define emit_end(P)               (*P->vtable->end)           (P)
+#  define emit_param_start(P)       (*P->vtable->param_start)   (P)
+#  define emit_param_end(P)         (*P->vtable->param_end)     (P)
+#  define emit_type(P,T)            (*P->vtable->type)          (P,T)
+#  define emit_sub_flag(P,F)        (*p->vtable->sub_flag)      (P,F)
+#  define emit_sub_flag_start(P)    (*P->vtable->sub_flag_start)(P)
+#  define emit_sub_flag_end(P)      (*P->vtable->sub_flag_end)  (P)
+#  define emit_op_start(P,O)        (*P->vtable->op_start)      (P,O)
+#  define emit_op_end(P)            (*P->vtable->op_end)        (P)
+#  define emit_expr(P,E)            (*P->vtable->expression)    (P,E)
+#  define emit_next_expr(P)         (*P->vtable->next_expr)     (P)
+#  define emit_list_start(P)        (*P->vtable->list_start)    (P)
+#  define emit_list_end(P)          (*P->vtable->list_end)      (P)
 
 extern pirvtable *new_pirvtable(void);
 

Reply via email to