Home My Page Projects Code Snippets Project Openings diderot
Summary Activity Tracker Tasks SCM

SCM Repository

[diderot] Diff of /branches/ein16/synth/d2/test_writeDiderot.py
ViewVC logotype

Diff of /branches/ein16/synth/d2/test_writeDiderot.py

Parent Directory Parent Directory | Revision Log Revision Log | View Patch Patch

revision 3997, Sun Jun 19 15:55:49 2016 UTC revision 3998, Sun Jun 19 17:12:03 2016 UTC
# Line 93  Line 93 
93          if(ft==false):          if(ft==false):
94              raise "unsupported application of unary operator"              raise "unsupported application of unary operator"
95          fieldShape(f, typ2)          fieldShape(f, typ2)
96          foo += (op1.symb)+fieldName(0)          if(op1.placement == place_left):
97                foo += (op1.symb)+"("+fieldName(0)+")"
98            elif(op1.placement == place_split):
99                foo += (op1.symb)+"("+fieldName(0)+")"+(op1.symb)
100            else:
101                raise Exception ("unhandled placement")
102      elif(arity==2):      elif(arity==2):
103          (ft,typ2) = applyBinaryOp(op1,itypes)          (ft,typ2) = applyBinaryOp(op1,itypes)
104          if(ft==false):          if(ft==false):
# Line 105  Line 110 
110      foo += ";\n"      foo += ";\n"
111      f.write(foo.encode('utf8'))      f.write(foo.encode('utf8'))
112    
113    # print unary operator
114    def prntUnary(opr, e):
115        if(opr.placement == place_split):
116            k = (opr.symb)+"("+e+")"+(opr.symb)
117            return k
118        elif(opr.placement == place_left):
119            k = (opr.symb)+"("+e+")"
120            return k
121        elif(opr.placement == place_right):
122            k = "("+e+")"+(opr.symb)
123            return k
124        else:
125            raise Exception ("unsupported placement")
126    
127  #write operation between fields  #write operation between fields
128  def gotop2(f,app_outer):  def gotop2(f,app_outer):
129      opr_outer=app_outer.opr      opr_outer=app_outer.opr
# Line 115  Line 134 
134      s_inner=apply.toStr(app_inner,0)      s_inner=apply.toStr(app_inner,0)
135      s_outer= apply.toStr(app_outer,0)      s_outer= apply.toStr(app_outer,0)
136      #print s_outer      #print s_outer
   
137      itypes_inner = apply.get_types(app_inner)      itypes_inner = apply.get_types(app_inner)
138      foo = opfieldname1+" = "      foo = opfieldname1+" = "
139      #checks inside arity      #checks inside arity
140      #assumes outside arity is one      #assumes outside arity is one
141      if (arity_inner==1):      if (arity_inner==1):
142            print "A"
143          (_, typ_inner) = applyUnaryOp(opr_inner,itypes_inner)          (_, typ_inner) = applyUnaryOp(opr_inner,itypes_inner)
144          if(arity_outer==1):          if(arity_outer==1):
145                print"C"
146                k = prntUnary(opr_inner, fieldName(0)) # inner placement
147              (_, typ_outer) = applyUnaryOp(opr_outer,[typ_inner])              (_, typ_outer) = applyUnaryOp(opr_outer,[typ_inner])
148                if(opr_outer.placement==place_right):
149                    # multiple lines
150                    print "F"
151                    fieldShape(f, typ_inner)
152                    foo0 = fieldName(2)+" = "+k+";\n"
153                    f.write(foo0.encode('utf8'))
154                    fieldShape(f, typ_outer)
155                    foo += fieldName(2)+(opr_outer.symb)
156                else:
157                    print "E"
158                    #single line
159              fieldShape(f, typ_outer)              fieldShape(f, typ_outer)
160              foo += (opr_outer.symb)+"("+(opr_inner.symb)+fieldName(0)+")"                  foo += prntUnary(opr_outer, k)
161          elif(arity_outer==2):          elif(arity_outer==2):
162                print "d"
163              #assumes second arg is a field              #assumes second arg is a field
164              (f_outer,g_outer) = apply.get_binary(app_outer)              (f_outer,g_outer) = apply.get_binary(app_outer)
             #print "f-outer", f_outer  
             #print "g-outer", g_outer  
165              g_ty = g_outer.fldty              g_ty = g_outer.fldty
166              (_, typ_outer) = applyBinaryOp(opr_outer,[typ_inner,  g_ty])              (_, typ_outer) = applyBinaryOp(opr_outer,[typ_inner,  g_ty])
167              fieldShape(f, typ_outer)              fieldShape(f, typ_outer)
168              foo += fieldName(0)+(opr_outer.symb)+"("+(opr_inner.symb)+fieldName(1)+")"              foo += fieldName(0)+(opr_outer.symb)+prntUnary(opr_inner, fieldName(1))
169          else:          else:
170              raise Exception("unsupported arity")              raise Exception("unsupported arity")
171      elif(arity_inner==2):      elif(arity_inner==2):
172            print "B"
173          (_, typ_inner)= applyBinaryOp(opr_inner,itypes_inner)          (_, typ_inner)= applyBinaryOp(opr_inner,itypes_inner)
174          if(arity_outer==1):          if(arity_outer==1):
175                print "G"
176              (_, typ_outer) = applyUnaryOp(opr_outer,[typ_inner])              (_, typ_outer) = applyUnaryOp(opr_outer,[typ_inner])
177                if(opr_outer.placement==place_right):
178                    # multiple lines
179                    print "I"
180                    fieldShape(f, typ_inner)
181                    foo0 = fieldName(2)+" = ("+fieldName(0)+(opr_inner.symb)+fieldName(1)+");\n"
182                    f.write(foo0.encode('utf8'))
183              fieldShape(f, typ_outer)              fieldShape(f, typ_outer)
184              foo += (opr_outer.symb)+"("+fieldName(0)+(opr_inner.symb)+fieldName(1)+")"                  foo += fieldName(2)+(opr_outer.symb)
185                else:
186                    print "H"
187                    # one line
188                    fieldShape(f, typ_outer)
189                    tmp = fieldName(0)+(opr_inner.symb)+fieldName(1)
190                    foo+= prntUnary(opr_outer, tmp)
191    
192          elif(arity_outer==2):          elif(arity_outer==2):
193                print "Z"
194              (f_outer,g_outer) = apply.get_binary(app_outer)              (f_outer,g_outer) = apply.get_binary(app_outer)
195              #print "f-outer", f_outer              #print "f-outer", f_outer
196              #print "g-outer", g_outer              #print "g-outer", g_outer

Legend:
Removed from v.3997  
changed lines
  Added in v.3998

root@smlnj-gforge.cs.uchicago.edu
ViewVC Help
Powered by ViewVC 1.0.0