stage4/generate_cc/generate_cc_base.cc
changeset 16 e8b99f896416
parent 0 fb772792efd1
child 26 fd67f54e64e1
--- a/stage4/generate_cc/generate_cc_base.cc	Wed Feb 14 19:57:01 2007 +0100
+++ b/stage4/generate_cc/generate_cc_base.cc	Tue Feb 20 18:17:21 2007 +0100
@@ -172,7 +172,6 @@
       return NULL;
     }
 
-
     void *print_unary_expression(symbol_c *exp,
 				 const char *operation) {
       s4o.print(operation);
@@ -182,6 +181,32 @@
       return NULL;
     }
 
+    void *print_binary_function(const char *function,
+          symbol_c *l_exp,
+				  symbol_c *r_exp) {
+      s4o.print(function);
+      s4o.print("(");
+      l_exp->accept(*this);
+      s4o.print(", ");
+      r_exp->accept(*this);
+      s4o.print(")");
+      return NULL;
+   	}
+
+    void *print_compare_function(const char *function,
+          const char *compare_sign,
+          symbol_c *l_exp,
+          symbol_c *r_exp) {
+      s4o.print(function);
+      s4o.print("(");
+      s4o.print(compare_sign);
+      s4o.print(", ");
+      l_exp->accept(*this);
+      s4o.print(", ");
+      r_exp->accept(*this);
+      s4o.print(")");
+      return NULL;
+    }
 
 /***************************/
 /* 2.1.6 - Pragmas */
@@ -309,7 +334,7 @@
 /* SYM_REF2(duration_c, neg, interval) */
 void *visit(duration_c *symbol) {
   TRACE("duration_c");
-  s4o.print("TIME(");
+  s4o.print("__time_to_timespec(");
   if (NULL == symbol->neg)
     s4o.print("1");  /* positive time value */
   else
@@ -318,6 +343,10 @@
   s4o.print(", ");
 
   symbol->interval->accept(*this);
+  if (typeid(*symbol->interval) == typeid(hours_c)) {s4o.print(", 0");}
+  if (typeid(*symbol->interval) == typeid(minutes_c)) {s4o.print(", 0, 0");}
+  if (typeid(*symbol->interval) == typeid(seconds_c)) {s4o.print(", 0, 0, 0");}
+  if (typeid(*symbol->interval) == typeid(milliseconds_c)) {s4o.print(", 0, 0, 0, 0");}
   s4o.print(")");
   return NULL;
 }
@@ -401,7 +430,7 @@
 /* SYM_REF2(time_of_day_c, daytime, unused) */
 void *visit(time_of_day_c *symbol) {
   TRACE("time_of_day_c");
-  s4o.print("TOD(");
+  s4o.print("__tod_to_timespec(");
   symbol->daytime->accept(*this);
   s4o.print(")");
   return NULL;
@@ -423,7 +452,7 @@
 /* SYM_REF2(date_c, date_literal, unused) */
 void *visit(date_c *symbol) {
   TRACE("date_c");
-  s4o.print("DATE(");
+  s4o.print("__date_to_timespec(");
   symbol->date_literal->accept(*this);
   s4o.print(")");
   return NULL;
@@ -445,7 +474,7 @@
 /* SYM_REF2(date_and_time_c, date_literal, daytime) */
 void *visit(date_and_time_c *symbol) {
   TRACE("date_and_time_c");
-  s4o.print("DT(");
+  s4o.print("__dt_to_timespec(");
   symbol->daytime->accept(*this);
   s4o.print(", ");
   symbol->date_literal->accept(*this);