]> Joshua Wise's Git repositories - snipe.git/blobdiff - trans/trans.sml
Add strings to type system and parser/lexer
[snipe.git] / trans / trans.sml
index d8807f03def58f35ee4ce85c7e29d368b7175098..73968d9c36cf0f20df3007576d5ded04e0835b4a 100644 (file)
@@ -129,8 +129,12 @@ struct
         | trans_exp env vartypes (A.ArrIndex(exp1, exp2)) =
             let
               val asubk = T.BINOP(T.ADD, trans_exp env vartypes exp1, 
-                                  T.BINOP(T.MUL, trans_exp env vartypes exp2,
-                                          T.CONST(Word32.fromInt(sizeof (deref (typeof' vartypes exp1))))))
+                                  if sizeof (deref (typeof' vartypes exp1)) = 1
+                                  then trans_exp env vartypes exp2
+                                  else T.BINOP(T.MUL, trans_exp env vartypes exp2,
+                                               T.CONST(Word32.fromInt(sizeof (deref (typeof' vartypes exp1))))
+                                              )
+                                 )
               val tipo = deref (typeof' vartypes exp1)
               val d =
                 if not (Flag.isset Flags.safe)
@@ -160,7 +164,9 @@ struct
             end
         | trans_exp env vartypes (A.NewArr(tipo, exp)) =
             let
-              val size = T.BINOP(T.MUL, trans_exp env vartypes exp, T.CONST(Word32.fromInt(sizeof tipo)))
+              val size = if (sizeof tipo) = 1
+                         then trans_exp env vartypes exp
+                         else T.BINOP(T.MUL, trans_exp env vartypes exp, T.CONST(Word32.fromInt(sizeof tipo)))
               val t1 = T.TEMP (Temp.new "allocated address")
               val ts = T.TEMP (Temp.new "size")
             in
This page took 0.024445 seconds and 4 git commands to generate.