Procházet zdrojové kódy

[cs] Cast the right-side of shift expressions to Int

Cauê Waneck před 10 roky
rodič
revize
c4f50f181a
1 změnil soubory, kde provedl 4 přidání a 0 odebrání
  1. 4 0
      gencommon.ml

+ 4 - 0
gencommon.ml

@@ -6431,6 +6431,10 @@ struct
 					let e1 = run ~just_type:true e1 in
 					let e1 = run ~just_type:true e1 in
 					let e2 = handle (run e2) e1.etype e2.etype in
 					let e2 = handle (run e2) e1.etype e2.etype in
 					{ e with eexpr = TBinop(op, clean_cast e1, e2) }
 					{ e with eexpr = TBinop(op, clean_cast e1, e2) }
+				| TBinop ( (Ast.OpShl | Ast.OpShr | Ast.OpUShr as op), e1, e2 ) ->
+					let e1 = run e1 in
+					let e2 = handle (run e2) (gen.gcon.basic.tint) e2.etype in
+					{ e with eexpr = TBinop(op, e1, e2) }
 				| TField(ef, f) ->
 				| TField(ef, f) ->
 					handle_type_parameter gen None e (run ef) ~clean_ef:ef ~overloads_cast_to_base:overloads_cast_to_base f [] calls_parameters_explicitly
 					handle_type_parameter gen None e (run ef) ~clean_ef:ef ~overloads_cast_to_base:overloads_cast_to_base f [] calls_parameters_explicitly
 				| TArrayDecl el ->
 				| TArrayDecl el ->