Sfoglia il codice sorgente

[java] Fixed Void synchronized statements. Closes #2054

Caue Waneck 12 anni fa
parent
commit
312465784e
2 ha cambiato i file con 11 aggiunte e 3 eliminazioni
  1. 9 1
      genjava.ml
  2. 2 2
      std/java/Lib.hx

+ 9 - 1
genjava.ml

@@ -1172,7 +1172,15 @@ let configure gen =
           write w "synchronized(";
           expr_s w eobj;
           write w ")";
-          expr_s w (mk_block eblock)
+          (match eblock.eexpr with
+          | TBlock(_ :: _) ->
+            expr_s w eblock
+          | _ ->
+            begin_block w;
+            expr_s w eblock;
+            if has_semicolon eblock then write w ";";
+            end_block w;
+          )
         | TCall ({ eexpr = TLocal( { v_name = "__goto__" } ) }, [ { eexpr = TConst(TInt v) } ] ) ->
           print w "break label%ld" v
         | TCall ({ eexpr = TLocal( { v_name = "__label__" } ) }, [ { eexpr = TConst(TInt v) } ] ) ->

+ 2 - 2
std/java/Lib.hx

@@ -83,8 +83,8 @@ package java;
 
 		This method only exists at compile-time, so it can't be called via reflection.
 	**/
-	@:extern public static inline function lock(obj:Dynamic, block:Dynamic):Void
+	@:extern public static inline function lock<T>(obj:Dynamic, block:T):Void
 	{
 		untyped __lock__(obj, block);
 	}
-}
+}