Author: kjs
Date: Tue Apr 10 02:40:49 2007
New Revision: 18111

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:
* remove source and pos info from sub_start vtable method
* add separate source and position vtable methods; they will be used in more 
locations than only sub-starts.

Modified: trunk/compilers/pirc/src/jsonout.c
==============================================================================
--- trunk/compilers/pirc/src/jsonout.c  (original)
+++ trunk/compilers/pirc/src/jsonout.c  Tue Apr 10 02:40:49 2007
@@ -132,15 +132,22 @@
 }
 
 static void
-json_sub_start(emit_data *data, char *source, int pos) {
+json_sub_start(emit_data *data) {
     if (data->need_comma) print_comma(data);
     fprintf(OUT, "%*s{ \"sub\" :\n", data->indent, " ");
     indent(data);
 
     fprintf(OUT, "%*s{\n", data->indent, " ");
     indent(data);
+}
 
+static void
+json_source(emit_data *data, char *source) {
     fprintf(OUT, "%*s{ \"source\" : \"%s\" },\n", data->indent, " ", source);
+}
+
+static void
+json_position(emit_data *data, int pos) {
     fprintf(OUT, "%*s{ \"pos\" : %d },\n", data->indent, " ", pos);
 }
 
@@ -335,6 +342,8 @@
     /* set vtable methods to the appropiate implementation */
     vtable->initialize       = json_init;
     vtable->destroy          = json_destroy;
+    vtable->source           = json_source;
+    vtable->position         = json_position;
     vtable->sub_start        = json_sub_start;
     vtable->sub_end          = json_sub_end;
     vtable->end              = json_end;

Modified: trunk/compilers/pirc/src/pastout.c
==============================================================================
--- trunk/compilers/pirc/src/pastout.c  (original)
+++ trunk/compilers/pirc/src/pastout.c  Tue Apr 10 02:40:49 2007
@@ -71,10 +71,18 @@
 
 */
 static void
-past_block(struct emit_data *data, char *source, int pos) {
+past_block(struct emit_data *data) {
     fprintf(OUT, "%*sPMC 'PAST::Block'  {\n", data->indent, " ");
     indent(data);
+}
+
+static void
+past_source(emit_data *data, char *source) {
     fprintf(OUT, "%*s<source> => \"%s\"\n", data->indent, " ", source);
+}
+
+static void
+past_position(emit_data *data, int pos) {
     fprintf(OUT, "%*s<pos> => %d\n", data->indent, " ", pos);
 }
 
@@ -235,6 +243,8 @@
     /* override vtable methods */
     vtable->initialize   = past_init;
     vtable->destroy      = past_destroy;
+    vtable->source       = past_source;
+    vtable->position     = past_position;
     vtable->sub_start    = past_block;
     vtable->sub_end      = past_close;
     vtable->name         = past_name;

Modified: trunk/compilers/pirc/src/pirout.c
==============================================================================
--- trunk/compilers/pirc/src/pirout.c   (original)
+++ trunk/compilers/pirc/src/pirout.c   Tue Apr 10 02:40:49 2007
@@ -41,8 +41,7 @@
 }
 
 static void
-pir_sub(struct emit_data *data, char *source, int pos) {
-    fprintf(OUT, "#character position %d\n", pos);
+pir_sub(struct emit_data *data) {
     fprintf(OUT, ".sub");
 }
 

Modified: trunk/compilers/pirc/src/pirparser.c
==============================================================================
--- trunk/compilers/pirc/src/pirparser.c        (original)
+++ trunk/compilers/pirc/src/pirparser.c        Tue Apr 10 02:40:49 2007
@@ -2062,7 +2062,7 @@
 static void
 sub_definition(parser_state *p) {
     /* call emit method */
-    emit_sub_start(p, "", get_current_filepos(p->lexer));
+    emit_sub_start(p);
     next(p); /* skip '.sub' or '.pcc_sub' */
 
     switch (p->curtoken) { /* subname -> IDENTIFIER | STRINGC */

Modified: trunk/compilers/pirc/src/pirvtable.c
==============================================================================
--- trunk/compilers/pirc/src/pirvtable.c        (original)
+++ trunk/compilers/pirc/src/pirvtable.c        Tue Apr 10 02:40:49 2007
@@ -71,6 +71,8 @@
      */
     vtable->initialize       = not_implemented;
     vtable->destroy          = not_implemented; /* destructor; highly 
recommended to implement! */
+    vtable->source           = not_implemented;
+    vtable->position         = not_implemented;
     vtable->name             = not_implemented;
     vtable->sub_start        = not_implemented;
     vtable->sub_end          = not_implemented;

Modified: trunk/compilers/pirc/src/pirvtable.h
==============================================================================
--- trunk/compilers/pirc/src/pirvtable.h        (original)
+++ trunk/compilers/pirc/src/pirvtable.h        Tue Apr 10 02:40:49 2007
@@ -10,26 +10,42 @@
  * 'emit_data' structure is left to each back-end separately.
  */
 typedef struct pirvtable {
-    struct emit_data         *data;
+    struct emit_data         *data; /* keep data here; where to store else? */
+
+    /* initializer and destructor */
     void (* initialize)      (struct emit_data *data);
     void (* destroy)         (struct emit_data *data);
-    void (* sub_start)       (struct emit_data *data, char *source, int pos);
+
+    /* location and debug info */
+    void (* source)          (struct emit_data *data, char *source);
+    void (* position)        (struct emit_data *data, int pos);
+
+    /* sub handling */
+    void (* sub_start)       (struct emit_data *data);
     void (* sub_end)         (struct emit_data *data);
-    void (* name)            (struct emit_data *data, char *name);
-    void (* stmts_start)     (struct emit_data *data);
-    void (* stmts_end)       (struct emit_data *data);
-    void (* end)             (struct emit_data *data);
+    void (* sub_flag)        (struct emit_data *data, int flag);
+    void (* sub_flag_start)  (struct emit_data *data);
+    void (* sub_flag_end)    (struct emit_data *data);
+    /* parameter handling */
     void (* param_start)     (struct emit_data *data);
     void (* param_end)       (struct emit_data *data);
     void (* type)            (struct emit_data *data, char *type);
-    void (* sub_flag)        (struct emit_data *data, int flag);
+    void (* name)            (struct emit_data *data, char *name);
+
+    /* statement handling */
+    void (* stmts_start)     (struct emit_data *data);
+    void (* stmts_end)       (struct emit_data *data);
+
+    /* ops handling */
     void (* op_start)        (struct emit_data *data, char *op);
     void (* op_end)          (struct emit_data *data);
     void (* expression)      (struct emit_data *data, char *expr);
+
+    /* general list handling */
     void (* list_start)      (struct emit_data *data);
     void (* list_end)        (struct emit_data *data);
-    void (* sub_flag_start)  (struct emit_data *data);
-    void (* sub_flag_end)    (struct emit_data *data);
+
+    /* invocation of subs and methods */
     void (* method_name)     (struct emit_data *data, char *name);
     void (* invocant)        (struct emit_data *data, char *invocant);
     void (* args_start)      (struct emit_data *data);
@@ -39,29 +55,40 @@
     void (* invocation_start)(struct emit_data *data);
     void (* invocation_end)  (struct emit_data *data);
 
+    /* finalizer (not destructor, that only should be called to free resources 
*/
+    void (* end)             (struct emit_data *data);
+
 
 } pirvtable;
 
 /* #defines for cleaner invocation syntax */
 #  define emit_init(P)             (*P->vtable->initialize)       
(P->vtable->data)
 #  define emit_destroy(P)          (*P->vtable->destroy)          
(P->vtable->data)
-#  define emit_sub_start(P,S,L)    (*P->vtable->sub_start)        
(P->vtable->data, S,L)
+
+#  define emit_source(P,S)         (*P->vtable->source)           
(P->vtable->data, S)
+#  define emit_position(P,L)       (*P->vtable->position)         
(P->vtable->data, L)
+
+#  define emit_sub_start(P)        (*P->vtable->sub_start)        
(P->vtable->data)
 #  define emit_sub_end(P)          (*P->vtable->sub_end)          
(P->vtable->data)
+#  define emit_sub_flag(P,F)       (*p->vtable->sub_flag)         
(P->vtable->data, F)
+#  define emit_sub_flag_start(P)   (*P->vtable->sub_flag_start)   
(P->vtable->data)
+#  define emit_sub_flag_end(P)     (*P->vtable->sub_flag_end)     
(P->vtable->data)
+#  define emit_param_start(P)      (*P->vtable->param_start)      
(P->vtable->data)
+#  define emit_param_end(P)        (*P->vtable->param_end)        
(P->vtable->data)
+#  define emit_type(P,T)           (*P->vtable->type)             
(P->vtable->data, T)
 #  define emit_name(P,N)           (*P->vtable->name)             
(P->vtable->data, N)
+
 #  define emit_stmts_start(P)      (*P->vtable->stmts_start)      
(P->vtable->data)
 #  define emit_stmts_end(P)        (*P->vtable->stmts_end)        
(P->vtable->data)
 #  define emit_end(P)              (*P->vtable->end)              
(P->vtable->data)
-#  define emit_param_start(P)      (*P->vtable->param_start)      
(P->vtable->data)
-#  define emit_param_end(P)        (*P->vtable->param_end)        
(P->vtable->data)
-#  define emit_type(P,T)           (*P->vtable->type)             
(P->vtable->data, T)
-#  define emit_sub_flag(P,F)       (*p->vtable->sub_flag)         
(P->vtable->data, F)
-#  define emit_sub_flag_start(P)   (*P->vtable->sub_flag_start)   
(P->vtable->data)
-#  define emit_sub_flag_end(P)     (*P->vtable->sub_flag_end)     
(P->vtable->data)
+
 #  define emit_op_start(P,O)       (*P->vtable->op_start)         
(P->vtable->data, O)
 #  define emit_op_end(P)           (*P->vtable->op_end)           
(P->vtable->data)
 #  define emit_expr(P,E)           (*P->vtable->expression)       
(P->vtable->data, E)
+
 #  define emit_list_start(P)       (*P->vtable->list_start)       
(P->vtable->data)
 #  define emit_list_end(P)         (*P->vtable->list_end)         
(P->vtable->data)
+
 #  define emit_method_name(P,N)    (*P->vtable->method_name)      
(P->vtable->data, N)
 #  define emit_invocant(P,N)       (*P->vtable->invocant)         
(P->vtable->data, N)
 #  define emit_args_start(P)       (*P->vtable->args_start)       
(P->vtable->data)

Reply via email to