Răsfoiți Sursa

+ assert() support for the JVM target (currently ignores the Java classloader
assertionStatus setting)

git-svn-id: branches/jvmbackend@20388 -

Jonas Maebe 13 ani în urmă
părinte
comite
85ef5e109c

+ 1 - 0
.gitattributes

@@ -9782,6 +9782,7 @@ tests/test/jvm/taddset.pp svneol=native#text/plain
 tests/test/jvm/taddsetint.pp svneol=native#text/plain
 tests/test/jvm/tarray2.pp svneol=native#text/plain
 tests/test/jvm/tarray3.pp svneol=native#text/plain
+tests/test/jvm/tassert.pp svneol=native#text/plain
 tests/test/jvm/tbyte.pp svneol=native#text/plain
 tests/test/jvm/tbytearrres.pp svneol=native#text/plain
 tests/test/jvm/tclassproptest.pp svneol=native#text/plain

+ 18 - 2
compiler/jvm/njvminl.pas

@@ -39,6 +39,8 @@ interface
           function first_copy: tnode; override;
           function first_assigned: tnode; override;
 
+          function first_assert: tnode; override;
+
           function first_box: tnode; override;
           function first_unbox: tnode; override;
 
@@ -71,11 +73,11 @@ interface
 implementation
 
     uses
-      cutils,globals,verbose,globtype,constexp,
+      cutils,globals,verbose,globtype,constexp,fmodule,
       aasmbase,aasmtai,aasmdata,aasmcpu,
       symtype,symconst,symdef,symsym,symtable,jvmdef,
       defutil,
-      nadd,nbas,ncon,ncnv,nmem,ncal,nld,nflw,nutils,
+      nadd,nbas,ncon,ncnv,nmat,nmem,ncal,nld,nflw,nutils,
       cgbase,pass_1,pass_2,
       cpuinfo,ncgutil,
       cgutils,hlcgobj,hlcgcpu;
@@ -241,6 +243,20 @@ implementation
       end;
 
 
+    function tjvminlinenode.first_assert: tnode;
+      var
+        paras: tcallparanode;
+      begin
+        paras:=tcallparanode(tcallparanode(left).right);
+        paras:=ccallparanode.create(cstringconstnode.createstr(current_module.sourcefiles.get_file_name(current_filepos.fileindex)),paras);
+        paras:=ccallparanode.create(genintconstnode(fileinfo.line),paras);
+        result:=cifnode.create(cnotnode.create(tcallparanode(left).left),
+           ccallnode.createintern('fpc_assert',paras),nil);
+        tcallparanode(left).left:=nil;
+        tcallparanode(left).right:=nil;
+      end;
+
+
     function tjvminlinenode.first_box: tnode;
       var
         boxdef,

+ 9 - 1
compiler/ninl.pas

@@ -76,6 +76,7 @@ interface
           function first_box: tnode; virtual; abstract;
           function first_unbox: tnode; virtual; abstract;
           function first_assigned: tnode; virtual;
+          function first_assert: tnode; virtual;
 
         private
           function handle_str: tnode;
@@ -3249,7 +3250,7 @@ implementation
 
          in_assert_x_y :
             begin
-              expectloc:=LOC_VOID;
+              result := first_assert;
             end;
 
           in_low_x,
@@ -3619,6 +3620,13 @@ implementation
          expectloc := LOC_JUMP;
        end;
 
+
+     function tinlinenode.first_assert: tnode;
+       begin
+         expectloc:=LOC_VOID;
+       end;
+
+
      function tinlinenode.handle_box: tnode;
        begin
          result:=nil;

+ 0 - 12
rtl/android/jvm/androidr14.inc

@@ -21296,18 +21296,6 @@
     constructor create(para1: JLThrowable); overload;
   end;
 
-  JLAssertionError = class external 'java.lang' name 'AssertionError' (JLError)
-  public
-    constructor create(); overload;
-    constructor create(para1: JLObject); overload;
-    constructor create(para1: jboolean); overload;
-    constructor create(para1: jchar); overload;
-    constructor create(para1: jint); overload;
-    constructor create(para1: jlong); overload;
-    constructor create(para1: jfloat); overload;
-    constructor create(para1: jdouble); overload;
-  end;
-
   JLThreadDeath = class external 'java.lang' name 'ThreadDeath' (JLError)
   public
     constructor create(); overload;

+ 0 - 5
rtl/android/jvm/androidr14.pas

@@ -8865,11 +8865,6 @@ type
   Arr2JNURISyntaxException = array of Arr1JNURISyntaxException;
   Arr3JNURISyntaxException = array of Arr2JNURISyntaxException;
 
-  JLAssertionError = class;
-  Arr1JLAssertionError = array of JLAssertionError;
-  Arr2JLAssertionError = array of Arr1JLAssertionError;
-  Arr3JLAssertionError = array of Arr2JLAssertionError;
-
   OAHCMHttpPost = class;
   Arr1OAHCMHttpPost = array of OAHCMHttpPost;
   Arr2OAHCMHttpPost = array of Arr1OAHCMHttpPost;

+ 12 - 0
rtl/android/jvm/java_sys_android.inc

@@ -2343,3 +2343,15 @@
     function getCharsetName(): JLString; overload; virtual;
   end;
 
+  JLAssertionError = class external 'java.lang' name 'AssertionError' (JLError)
+  public
+    constructor create(); overload;
+    constructor create(para1: JLObject); overload;
+    constructor create(para1: jboolean); overload;
+    constructor create(para1: jchar); overload;
+    constructor create(para1: jint); overload;
+    constructor create(para1: jlong); overload;
+    constructor create(para1: jfloat); overload;
+    constructor create(para1: jdouble); overload;
+  end;
+

+ 5 - 1
rtl/android/jvm/java_sysh_android.inc

@@ -1,4 +1,4 @@
-{ Imports for Java packages/classes: java.io.IIOException, java.io.IOException, java.io.Serializable, java.lang.AbstractStringBuilder, java.lang.Appendable, java.lang.Boolean, java.lang.Byte, java.lang.CharSequence, java.lang.Character, java.lang.Class, java.lang.Cloneable, java.lang.Comparable, java.lang.Double, java.lang.Enum, java.lang.Error, java.lang.Exception, java.lang.Float, java.lang.IllegalArgumentException, java.lang.IllegalStateException, java.lang.IndexOutOfBoundsException, java.lang.Integer, java.lang.Iterable, java.lang.LinkageError, java.lang.Long, java.lang.Math, java.lang.NoSuchMethodException, java.lang.Number, java.lang.Object, java.lang.Readable, java.lang.Runtime, java.lang.RuntimeException, java.lang.Short, java.lang.String, java.lang.StringBuffer, java.lang.StringBuilder, java.lang.System, java.lang.ThreadLocal, java.lang.Throwable, java.lang.UnsupportedOperationException, java.lang.reflect.AccessibleObject, java.lang.reflect.AnnotatedElement, java.lang.reflect.Array, java.lang.reflect.Field, java.lang.reflect.GenericDeclaration, java.lang.reflect.InvocationTargetException, java.lang.reflect.Member, java.lang.reflect.Method, java.lang.reflect.Type, java.math.BigInteger, java.nio.Buffer, java.nio.ByteBuffer, java.nio.CharBuffer, java.nio.charset., java.text.Collator, java.util.AbstractCollection, java.util.AbstractMap, java.util.AbstractSet, java.util.Arrays, java.util.BitSet, java.util.Calendar, java.util.Collection, java.util.Comparator, java.util.EnumSet, java.util.HashMap, java.util.Iterator, java.util.Map, java.util.Set }
+{ Imports for Java packages/classes: java.io.IIOException, java.io.IOException, java.io.Serializable, java.lang.AbstractStringBuilder, java.lang.Appendable, java.lang.Boolean, java.lang.Byte, java.lang.CharSequence, java.lang.Character, java.lang.Class, java.lang.Cloneable, java.lang.Comparable, java.lang.Double, java.lang.Enum, java.lang.Error, java.lang.Exception, java.lang.Float, java.lang.IllegalArgumentException, java.lang.IllegalStateException, java.lang.IndexOutOfBoundsException, java.lang.Integer, java.lang.Iterable, java.lang.LinkageError, java.lang.Long, java.lang.Math, java.lang.NoSuchMethodException, java.lang.Number, java.lang.Object, java.lang.Readable, java.lang.Runtime, java.lang.RuntimeException, java.lang.Short, java.lang.String, java.lang.StringBuffer, java.lang.StringBuilder, java.lang.System, java.lang.ThreadLocal, java.lang.Throwable, java.lang.UnsupportedOperationException, java.lang.reflect.AccessibleObject, java.lang.reflect.AnnotatedElement, java.lang.reflect.Array, java.lang.reflect.Field, java.lang.reflect.GenericDeclaration, java.lang.reflect.InvocationTargetException, java.lang.reflect.Member, java.lang.reflect.Method, java.lang.reflect.Type, java.lang.AssertionError, java.math.BigInteger, java.nio.Buffer, java.nio.ByteBuffer, java.nio.CharBuffer, java.nio.charset., java.text.Collator, java.util.AbstractCollection, java.util.AbstractMap, java.util.AbstractSet, java.util.Arrays, java.util.BitSet, java.util.Calendar, java.util.Collection, java.util.Comparator, java.util.EnumSet, java.util.HashMap, java.util.Iterator, java.util.Map, java.util.Set }
 type
   JLNoSuchMethodException = class;
   Arr1JLNoSuchMethodException = array of JLNoSuchMethodException;
@@ -545,4 +545,8 @@ type
   Arr2JUSortedMap = array of Arr1JUSortedMap;
   Arr3JUSortedMap = array of Arr2JUSortedMap;
 
+  JLAssertionError = class;
+  Arr1JLAssertionError = array of JLAssertionError;
+  Arr2JLAssertionError = array of Arr1JLAssertionError;
+  Arr3JLAssertionError = array of Arr2JLAssertionError;
 

+ 61 - 49
rtl/java/java_sys.inc

@@ -1472,18 +1472,18 @@
   JLClass = class sealed external 'java.lang' name 'Class' (JLObject, JISerializable, JLRGenericDeclaration, JLRType, JLRAnnotatedElement)
   public
     type
-      InnerMethodArray = class;
-      Arr1InnerMethodArray = array of InnerMethodArray;
-      Arr2InnerMethodArray = array of Arr1InnerMethodArray;
-      Arr3InnerMethodArray = array of Arr2InnerMethodArray;
       InnerEnclosingMethodInfo = class;
       Arr1InnerEnclosingMethodInfo = array of InnerEnclosingMethodInfo;
       Arr2InnerEnclosingMethodInfo = array of Arr1InnerEnclosingMethodInfo;
       Arr3InnerEnclosingMethodInfo = array of Arr2InnerEnclosingMethodInfo;
-      InnerMethodArray = class external 'java.lang' name 'MethodArray' 
+      InnerMethodArray = class;
+      Arr1InnerMethodArray = array of InnerMethodArray;
+      Arr2InnerMethodArray = array of Arr1InnerMethodArray;
+      Arr3InnerMethodArray = array of Arr2InnerMethodArray;
+      InnerEnclosingMethodInfo = class sealed external 'java.lang' name 'EnclosingMethodInfo' 
       end;
 
-      InnerEnclosingMethodInfo = class sealed external 'java.lang' name 'EnclosingMethodInfo' 
+      InnerMethodArray = class external 'java.lang' name 'MethodArray' 
       end;
 
   public
@@ -1711,15 +1711,15 @@
   JUAbstractMap = class abstract external 'java.util' name 'AbstractMap' (JLObject, JUMap)
   public
     type
-      InnerSimpleImmutableEntry = class;
-      Arr1InnerSimpleImmutableEntry = array of InnerSimpleImmutableEntry;
-      Arr2InnerSimpleImmutableEntry = array of Arr1InnerSimpleImmutableEntry;
-      Arr3InnerSimpleImmutableEntry = array of Arr2InnerSimpleImmutableEntry;
       InnerSimpleEntry = class;
       Arr1InnerSimpleEntry = array of InnerSimpleEntry;
       Arr2InnerSimpleEntry = array of Arr1InnerSimpleEntry;
       Arr3InnerSimpleEntry = array of Arr2InnerSimpleEntry;
-      InnerSimpleImmutableEntry = class external 'java.util' name 'SimpleImmutableEntry' (JLObject, JUMap.InnerEntry, JISerializable)
+      InnerSimpleImmutableEntry = class;
+      Arr1InnerSimpleImmutableEntry = array of InnerSimpleImmutableEntry;
+      Arr2InnerSimpleImmutableEntry = array of Arr1InnerSimpleImmutableEntry;
+      Arr3InnerSimpleImmutableEntry = array of Arr2InnerSimpleImmutableEntry;
+      InnerSimpleEntry = class external 'java.util' name 'SimpleEntry' (JLObject, JUMap.InnerEntry, JISerializable)
       public
         constructor create(para1: JLObject; para2: JLObject); overload;
         constructor create(para1: JUMap.InnerEntry); overload;
@@ -1731,7 +1731,7 @@
         function toString(): JLString; overload; virtual;
       end;
 
-      InnerSimpleEntry = class external 'java.util' name 'SimpleEntry' (JLObject, JUMap.InnerEntry, JISerializable)
+      InnerSimpleImmutableEntry = class external 'java.util' name 'SimpleImmutableEntry' (JLObject, JUMap.InnerEntry, JISerializable)
       public
         constructor create(para1: JLObject; para2: JLObject); overload;
         constructor create(para1: JUMap.InnerEntry); overload;
@@ -2139,16 +2139,6 @@
     constructor create(para1: JLThrowable); overload;
   end;
 
-  JLRInvocationTargetException = class external 'java.lang.reflect' name 'InvocationTargetException' (JLException)
-  strict protected
-    constructor create(); overload;
-  public
-    constructor create(para1: JLThrowable); overload;
-    constructor create(para1: JLThrowable; para2: JLString); overload;
-    function getTargetException(): JLThrowable; overload; virtual;
-    function getCause(): JLThrowable; overload; virtual;
-  end;
-
   JLStringBuffer = class sealed external 'java.lang' name 'StringBuffer' (JLAbstractStringBuilder, JISerializable, JLCharSequence)
   public
     constructor create(); overload;
@@ -2454,18 +2444,14 @@
   JUHashMap = class external 'java.util' name 'HashMap' (JUAbstractMap, JUMap, JLCloneable, JISerializable)
   public
     type
-      InnerEntrySet = class;
-      Arr1InnerEntrySet = array of InnerEntrySet;
-      Arr2InnerEntrySet = array of Arr1InnerEntrySet;
-      Arr3InnerEntrySet = array of Arr2InnerEntrySet;
-      InnerKeySet = class;
-      Arr1InnerKeySet = array of InnerKeySet;
-      Arr2InnerKeySet = array of Arr1InnerKeySet;
-      Arr3InnerKeySet = array of Arr2InnerKeySet;
-      InnerValues = class;
-      Arr1InnerValues = array of InnerValues;
-      Arr2InnerValues = array of Arr1InnerValues;
-      Arr3InnerValues = array of Arr2InnerValues;
+      InnerEntry = class;
+      Arr1InnerEntry = array of InnerEntry;
+      Arr2InnerEntry = array of Arr1InnerEntry;
+      Arr3InnerEntry = array of Arr2InnerEntry;
+      InnerEntryIterator = class;
+      Arr1InnerEntryIterator = array of InnerEntryIterator;
+      Arr2InnerEntryIterator = array of Arr1InnerEntryIterator;
+      Arr3InnerEntryIterator = array of Arr2InnerEntryIterator;
       InnerKeyIterator = class;
       Arr1InnerKeyIterator = array of InnerKeyIterator;
       Arr2InnerKeyIterator = array of Arr1InnerKeyIterator;
@@ -2474,25 +2460,26 @@
       Arr1InnerValueIterator = array of InnerValueIterator;
       Arr2InnerValueIterator = array of Arr1InnerValueIterator;
       Arr3InnerValueIterator = array of Arr2InnerValueIterator;
-      InnerEntryIterator = class;
-      Arr1InnerEntryIterator = array of InnerEntryIterator;
-      Arr2InnerEntryIterator = array of Arr1InnerEntryIterator;
-      Arr3InnerEntryIterator = array of Arr2InnerEntryIterator;
-      InnerEntry = class;
-      Arr1InnerEntry = array of InnerEntry;
-      Arr2InnerEntry = array of Arr1InnerEntry;
-      Arr3InnerEntry = array of Arr2InnerEntry;
+      InnerEntrySet = class;
+      Arr1InnerEntrySet = array of InnerEntrySet;
+      Arr2InnerEntrySet = array of Arr1InnerEntrySet;
+      Arr3InnerEntrySet = array of Arr2InnerEntrySet;
+      InnerKeySet = class;
+      Arr1InnerKeySet = array of InnerKeySet;
+      Arr2InnerKeySet = array of Arr1InnerKeySet;
+      Arr3InnerKeySet = array of Arr2InnerKeySet;
       InnerHashIterator = class;
       Arr1InnerHashIterator = array of InnerHashIterator;
       Arr2InnerHashIterator = array of Arr1InnerHashIterator;
       Arr3InnerHashIterator = array of Arr2InnerHashIterator;
-      InnerEntrySet = class sealed external 'java.util' name 'EntrySet' 
-      end;
-
-      InnerKeySet = class sealed external 'java.util' name 'KeySet' 
+      InnerValues = class;
+      Arr1InnerValues = array of InnerValues;
+      Arr2InnerValues = array of Arr1InnerValues;
+      Arr3InnerValues = array of Arr2InnerValues;
+      InnerEntry = class external 'java.util' name 'Entry' 
       end;
 
-      InnerValues = class sealed external 'java.util' name 'Values' 
+      InnerEntryIterator = class sealed external 'java.util' name 'EntryIterator' 
       end;
 
       InnerKeyIterator = class sealed external 'java.util' name 'KeyIterator' 
@@ -2501,15 +2488,18 @@
       InnerValueIterator = class sealed external 'java.util' name 'ValueIterator' 
       end;
 
-      InnerEntryIterator = class sealed external 'java.util' name 'EntryIterator' 
+      InnerEntrySet = class sealed external 'java.util' name 'EntrySet' 
       end;
 
-      InnerEntry = class external 'java.util' name 'Entry' 
+      InnerKeySet = class sealed external 'java.util' name 'KeySet' 
       end;
 
       InnerHashIterator = class abstract external 'java.util' name 'HashIterator' 
       end;
 
+      InnerValues = class sealed external 'java.util' name 'Values' 
+      end;
+
   public
     constructor create(para1: jint; para2: jfloat); overload;
     constructor create(para1: jint); overload;
@@ -2530,6 +2520,18 @@
     function entrySet(): JUSet; overload; virtual;
   end;
 
+  JLAssertionError = class external 'java.lang' name 'AssertionError' (JLError)
+  public
+    constructor create(); overload;
+    constructor create(para1: JLObject); overload;
+    constructor create(para1: jboolean); overload;
+    constructor create(para1: jchar); overload;
+    constructor create(para1: jint); overload;
+    constructor create(para1: jlong); overload;
+    constructor create(para1: jfloat); overload;
+    constructor create(para1: jdouble); overload;
+  end;
+
   JLLinkageError = class external 'java.lang' name 'LinkageError' (JLError)
   public
     constructor create(); overload;
@@ -2563,6 +2565,16 @@
     constructor create(para1: JLThrowable); overload;
   end;
 
+  JLRInvocationTargetException = class external 'java.lang.reflect' name 'InvocationTargetException' (JLException)
+  strict protected
+    constructor create(); overload;
+  public
+    constructor create(para1: JLThrowable); overload;
+    constructor create(para1: JLThrowable; para2: JLString); overload;
+    function getTargetException(): JLThrowable; overload; virtual;
+    function getCause(): JLThrowable; overload; virtual;
+  end;
+
   JUAbstractSet = class abstract external 'java.util' name 'AbstractSet' (JUAbstractCollection, JUSet)
   strict protected
     constructor create(); overload;

+ 11 - 6
rtl/java/java_sysh.inc

@@ -1,4 +1,4 @@
-{ Imports for Java packages/classes: java.io.IIOException, java.io.IOException, java.io.Serializable, java.lang.AbstractStringBuilder, java.lang.Appendable, java.lang.Boolean, java.lang.Byte, java.lang.CharSequence, java.lang.Character, java.lang.Class, java.lang.Cloneable, java.lang.Comparable, java.lang.Double, java.lang.Enum, java.lang.Error, java.lang.Exception, java.lang.Float, java.lang.IllegalArgumentException, java.lang.IllegalStateException, java.lang.IndexOutOfBoundsException, java.lang.Integer, java.lang.Iterable, java.lang.LinkageError, java.lang.Long, java.lang.Math, java.lang.NoSuchMethodException, java.lang.Number, java.lang.Object, java.lang.Readable, java.lang.Runtime, java.lang.RuntimeException, java.lang.Short, java.lang.String, java.lang.StringBuffer, java.lang.StringBuilder, java.lang.System, java.lang.ThreadLocal, java.lang.Throwable, java.lang.UnsupportedOperationException, java.lang.reflect.AccessibleObject, java.lang.reflect.AnnotatedElement, java.lang.reflect.Array, java.lang.reflect.Field, java.lang.reflect.GenericDeclaration, java.lang.reflect.Member, java.lang.reflect.Method, java.lang.reflect.Type, java.math.BigInteger, java.nio.Buffer, java.nio.ByteBuffer, java.nio.CharBuffer, java.nio.charset., java.text.Collator, java.util.AbstractCollection, java.util.AbstractMap, java.util.AbstractSet, java.util.Arrays, java.util.BitSet, java.util.Calendar, java.util.Collection, java.util.Comparator, java.util.EnumSet, java.util.HashMap, java.util.Iterator, java.util.Map, java.util.Set }
+{ Imports for Java packages/classes: java.io.IIOException, java.io.IOException, java.io.Serializable, java.lang.AbstractStringBuilder, java.lang.Appendable, java.lang.AssertionError, java.lang.Boolean, java.lang.Byte, java.lang.CharSequence, java.lang.Character, java.lang.Class, java.lang.Cloneable, java.lang.Comparable, java.lang.Double, java.lang.Enum, java.lang.Error, java.lang.Exception, java.lang.Float, java.lang.IllegalArgumentException, java.lang.IllegalStateException, java.lang.IndexOutOfBoundsException, java.lang.Integer, java.lang.Iterable, java.lang.LinkageError, java.lang.Long, java.lang.Math, java.lang.NoSuchMethodException, java.lang.Number, java.lang.Object, java.lang.Readable, java.lang.Runtime, java.lang.RuntimeException, java.lang.Short, java.lang.String, java.lang.StringBuffer, java.lang.StringBuilder, java.lang.System, java.lang.ThreadLocal, java.lang.Throwable, java.lang.UnsupportedOperationException, java.lang.reflect.AccessibleObject, java.lang.reflect.AnnotatedElement, java.lang.reflect.Array, java.lang.reflect.Field, java.lang.reflect.GenericDeclaration, java.lang.reflect.InvocationTargetException, java.lang.reflect.Member, java.lang.reflect.Method, java.lang.reflect.Type, java.math.BigInteger, java.nio.Buffer, java.nio.ByteBuffer, java.nio.CharBuffer, java.nio.charset., java.text.Collator, java.util.AbstractCollection, java.util.AbstractMap, java.util.AbstractSet, java.util.Arrays, java.util.BitSet, java.util.Calendar, java.util.Collection, java.util.Comparator, java.util.EnumSet, java.util.HashMap, java.util.Iterator, java.util.Map, java.util.Set }
 type
   JLNoSuchMethodException = class;
   Arr1JLNoSuchMethodException = array of JLNoSuchMethodException;
@@ -20,6 +20,11 @@ type
   Arr2JLAbstractStringBuilder = array of Arr1JLAbstractStringBuilder;
   Arr3JLAbstractStringBuilder = array of Arr2JLAbstractStringBuilder;
 
+  JLRInvocationTargetException = class;
+  Arr1JLRInvocationTargetException = array of JLRInvocationTargetException;
+  Arr2JLRInvocationTargetException = array of Arr1JLRInvocationTargetException;
+  Arr3JLRInvocationTargetException = array of Arr2JLRInvocationTargetException;
+
   JLError = class;
   Arr1JLError = array of JLError;
   Arr2JLError = array of Arr1JLError;
@@ -30,11 +35,6 @@ type
   Arr2JLRField = array of Arr1JLRField;
   Arr3JLRField = array of Arr2JLRField;
 
-  JLRInvocationTargetException = class;
-  Arr1JLRInvocationTargetException = array of JLRInvocationTargetException;
-  Arr2JLRInvocationTargetException = array of Arr1JLRInvocationTargetException;
-  Arr3JLRInvocationTargetException = array of Arr2JLRInvocationTargetException;
-
   JNBuffer = class;
   Arr1JNBuffer = array of JNBuffer;
   Arr2JNBuffer = array of Arr1JNBuffer;
@@ -305,6 +305,11 @@ type
   Arr2JLSystem = array of Arr1JLSystem;
   Arr3JLSystem = array of Arr2JLSystem;
 
+  JLAssertionError = class;
+  Arr1JLAssertionError = array of JLAssertionError;
+  Arr2JLAssertionError = array of Arr1JLAssertionError;
+  Arr3JLAssertionError = array of Arr2JLAssertionError;
+
   JLIterable = interface;
   Arr1JLIterable = array of JLIterable;
   Arr2JLIterable = array of Arr1JLIterable;

+ 1 - 1
rtl/java/jcompproc.inc

@@ -723,8 +723,8 @@ Procedure fpc_HandleError (Errno : longint); compilerproc;
 }
 
 procedure fpc_AbstractErrorIntern;compilerproc;
-procedure fpc_assert(Const Msg,FName:Shortstring;LineNo:Longint;ErrorAddr:Pointer); compilerproc;
 *)
+procedure fpc_assert(Const Msg,FName:unicodestring;LineNo:Longint{;ErrorAddr:Pointer}); compilerproc;
 
 {$ifdef FPC_HAS_FEATURE_FILEIO}
 Procedure fpc_reset_typed(var f : TypedFile;Size : Longint); compilerproc;

+ 14 - 105
rtl/java/jdk15.inc

@@ -5019,6 +5019,10 @@
       Arr1InnerLogNode = array of InnerLogNode;
       Arr2InnerLogNode = array of Arr1InnerLogNode;
       Arr3InnerLogNode = array of Arr2InnerLogNode;
+      InnerLoggerWeakRef = class;
+      Arr1InnerLoggerWeakRef = array of InnerLoggerWeakRef;
+      Arr2InnerLoggerWeakRef = array of Arr1InnerLoggerWeakRef;
+      Arr3InnerLoggerWeakRef = array of Arr2InnerLoggerWeakRef;
       InnerRootLogger = class;
       Arr1InnerRootLogger = array of InnerRootLogger;
       Arr2InnerRootLogger = array of Arr1InnerRootLogger;
@@ -5029,6 +5033,9 @@
       InnerLogNode = class external 'java.util.logging' name 'LogNode' 
       end;
 
+      InnerLoggerWeakRef = class sealed external 'java.util.logging' name 'LoggerWeakRef' 
+      end;
+
       InnerRootLogger = class external 'java.util.logging' name 'RootLogger' 
       end;
 
@@ -9044,6 +9051,10 @@
       Arr1InnerDisplayChangedRunnable = array of InnerDisplayChangedRunnable;
       Arr2InnerDisplayChangedRunnable = array of Arr1InnerDisplayChangedRunnable;
       Arr3InnerDisplayChangedRunnable = array of Arr2InnerDisplayChangedRunnable;
+      InnerProcessingRunnable = class;
+      Arr1InnerProcessingRunnable = array of InnerProcessingRunnable;
+      Arr2InnerProcessingRunnable = array of Arr1InnerProcessingRunnable;
+      Arr3InnerProcessingRunnable = array of Arr2InnerProcessingRunnable;
       InnerDoubleBufferInfo = class external 'javax.swing' name 'DoubleBufferInfo' 
       end;
 
@@ -9056,6 +9067,9 @@
       InnerDisplayChangedRunnable = class sealed external 'javax.swing' name 'DisplayChangedRunnable' 
       end;
 
+      InnerProcessingRunnable = class sealed external 'javax.swing' name 'ProcessingRunnable' 
+      end;
+
   public
     class function currentManager(para1: JAComponent): JSRepaintManager; static; overload;
     class function currentManager(para1: JSJComponent): JSRepaintManager; static; overload;
@@ -9320,60 +9334,6 @@
   JSSwingHeavyWeight = interface external 'javax.swing' name 'SwingHeavyWeight' 
   end;
 
-  JSSystemEventQueueUtilities = class external 'javax.swing' name 'SystemEventQueueUtilities' (JLObject)
-  public
-    type
-      InnerSystemEventQueue = class;
-      Arr1InnerSystemEventQueue = array of InnerSystemEventQueue;
-      Arr2InnerSystemEventQueue = array of Arr1InnerSystemEventQueue;
-      Arr3InnerSystemEventQueue = array of Arr2InnerSystemEventQueue;
-      InnerComponentWorkRequest = class;
-      Arr1InnerComponentWorkRequest = array of InnerComponentWorkRequest;
-      Arr2InnerComponentWorkRequest = array of Arr1InnerComponentWorkRequest;
-      Arr3InnerComponentWorkRequest = array of Arr2InnerComponentWorkRequest;
-      InnerTimerQueueRestart = class;
-      Arr1InnerTimerQueueRestart = array of InnerTimerQueueRestart;
-      Arr2InnerTimerQueueRestart = array of Arr1InnerTimerQueueRestart;
-      Arr3InnerTimerQueueRestart = array of Arr2InnerTimerQueueRestart;
-      InnerRunnableCanvas = class;
-      Arr1InnerRunnableCanvas = array of InnerRunnableCanvas;
-      Arr2InnerRunnableCanvas = array of Arr1InnerRunnableCanvas;
-      Arr3InnerRunnableCanvas = array of Arr2InnerRunnableCanvas;
-      InnerRunnableCanvasGraphics = class;
-      Arr1InnerRunnableCanvasGraphics = array of InnerRunnableCanvasGraphics;
-      Arr2InnerRunnableCanvasGraphics = array of Arr1InnerRunnableCanvasGraphics;
-      Arr3InnerRunnableCanvasGraphics = array of Arr2InnerRunnableCanvasGraphics;
-      InnerRunnableEvent = class;
-      Arr1InnerRunnableEvent = array of InnerRunnableEvent;
-      Arr2InnerRunnableEvent = array of Arr1InnerRunnableEvent;
-      Arr3InnerRunnableEvent = array of Arr2InnerRunnableEvent;
-      InnerRunnableTarget = class;
-      Arr1InnerRunnableTarget = array of InnerRunnableTarget;
-      Arr2InnerRunnableTarget = array of Arr1InnerRunnableTarget;
-      Arr3InnerRunnableTarget = array of Arr2InnerRunnableTarget;
-      InnerSystemEventQueue = class external 'javax.swing' name 'SystemEventQueue' 
-      end;
-
-      InnerComponentWorkRequest = class external 'javax.swing' name 'ComponentWorkRequest' 
-      end;
-
-      InnerTimerQueueRestart = class external 'javax.swing' name 'TimerQueueRestart' 
-      end;
-
-      InnerRunnableCanvas = class external 'javax.swing' name 'RunnableCanvas' 
-      end;
-
-      InnerRunnableCanvasGraphics = class external 'javax.swing' name 'RunnableCanvasGraphics' 
-      end;
-
-      InnerRunnableEvent = class external 'javax.swing' name 'RunnableEvent' 
-      end;
-
-      InnerRunnableTarget = class external 'javax.swing' name 'RunnableTarget' 
-      end;
-
-  end;
-
   JSWindowConstants = interface external 'javax.swing' name 'WindowConstants' 
     const
       DO_NOTHING_ON_CLOSE = 0;
@@ -15741,18 +15701,6 @@
     constructor create(para1: JLThrowable); overload;
   end;
 
-  JLAssertionError = class external 'java.lang' name 'AssertionError' (JLError)
-  public
-    constructor create(); overload;
-    constructor create(para1: JLObject); overload;
-    constructor create(para1: jboolean); overload;
-    constructor create(para1: jchar); overload;
-    constructor create(para1: jint); overload;
-    constructor create(para1: jlong); overload;
-    constructor create(para1: jfloat); overload;
-    constructor create(para1: jdouble); overload;
-  end;
-
   JLThreadDeath = class external 'java.lang' name 'ThreadDeath' (JLError)
   public
     constructor create(); overload;
@@ -24149,9 +24097,6 @@
     final class var
       funsafe: SMUnsafe; external name 'unsafe';
       funaligned: jboolean; external name 'unaligned';
-  strict protected
-    var
-      fviewedBuffer: JLObject; external name 'viewedBuffer';
   public
     function viewedBuffer(): JLObject; overload; virtual;
     function cleaner(): SMCleaner; overload; virtual;
@@ -24181,9 +24126,6 @@
     final class var
       funsafe: SMUnsafe; external name 'unsafe';
       funaligned: jboolean; external name 'unaligned';
-  strict protected
-    var
-      fviewedBuffer: JLObject; external name 'viewedBuffer';
   public
     function viewedBuffer(): JLObject; overload; virtual;
     function cleaner(): SMCleaner; overload; virtual;
@@ -43976,9 +43918,6 @@
     final class var
       funsafe: SMUnsafe; external name 'unsafe';
       funaligned: jboolean; external name 'unaligned';
-  strict protected
-    var
-      fviewedBuffer: JLObject; external name 'viewedBuffer';
   public
     function viewedBuffer(): JLObject; overload; virtual;
     function cleaner(): SMCleaner; overload; virtual;
@@ -44006,9 +43945,6 @@
     final class var
       funsafe: SMUnsafe; external name 'unsafe';
       funaligned: jboolean; external name 'unaligned';
-  strict protected
-    var
-      fviewedBuffer: JLObject; external name 'viewedBuffer';
   public
     function viewedBuffer(): JLObject; overload; virtual;
     function cleaner(): SMCleaner; overload; virtual;
@@ -44106,9 +44042,6 @@
     final class var
       funsafe: SMUnsafe; external name 'unsafe';
       funaligned: jboolean; external name 'unaligned';
-  strict protected
-    var
-      fviewedBuffer: JLObject; external name 'viewedBuffer';
   public
     function viewedBuffer(): JLObject; overload; virtual;
     function cleaner(): SMCleaner; overload; virtual;
@@ -44136,9 +44069,6 @@
     final class var
       funsafe: SMUnsafe; external name 'unsafe';
       funaligned: jboolean; external name 'unaligned';
-  strict protected
-    var
-      fviewedBuffer: JLObject; external name 'viewedBuffer';
   public
     function viewedBuffer(): JLObject; overload; virtual;
     function cleaner(): SMCleaner; overload; virtual;
@@ -44236,9 +44166,6 @@
     final class var
       funsafe: SMUnsafe; external name 'unsafe';
       funaligned: jboolean; external name 'unaligned';
-  strict protected
-    var
-      fviewedBuffer: JLObject; external name 'viewedBuffer';
   public
     function viewedBuffer(): JLObject; overload; virtual;
     function cleaner(): SMCleaner; overload; virtual;
@@ -44266,9 +44193,6 @@
     final class var
       funsafe: SMUnsafe; external name 'unsafe';
       funaligned: jboolean; external name 'unaligned';
-  strict protected
-    var
-      fviewedBuffer: JLObject; external name 'viewedBuffer';
   public
     function viewedBuffer(): JLObject; overload; virtual;
     function cleaner(): SMCleaner; overload; virtual;
@@ -44366,9 +44290,6 @@
     final class var
       funsafe: SMUnsafe; external name 'unsafe';
       funaligned: jboolean; external name 'unaligned';
-  strict protected
-    var
-      fviewedBuffer: JLObject; external name 'viewedBuffer';
   public
     function viewedBuffer(): JLObject; overload; virtual;
     function cleaner(): SMCleaner; overload; virtual;
@@ -44396,9 +44317,6 @@
     final class var
       funsafe: SMUnsafe; external name 'unsafe';
       funaligned: jboolean; external name 'unaligned';
-  strict protected
-    var
-      fviewedBuffer: JLObject; external name 'viewedBuffer';
   public
     function viewedBuffer(): JLObject; overload; virtual;
     function cleaner(): SMCleaner; overload; virtual;
@@ -44496,9 +44414,6 @@
     final class var
       funsafe: SMUnsafe; external name 'unsafe';
       funaligned: jboolean; external name 'unaligned';
-  strict protected
-    var
-      fviewedBuffer: JLObject; external name 'viewedBuffer';
   public
     function viewedBuffer(): JLObject; overload; virtual;
     function cleaner(): SMCleaner; overload; virtual;
@@ -44526,9 +44441,6 @@
     final class var
       funsafe: SMUnsafe; external name 'unsafe';
       funaligned: jboolean; external name 'unaligned';
-  strict protected
-    var
-      fviewedBuffer: JLObject; external name 'viewedBuffer';
   public
     function viewedBuffer(): JLObject; overload; virtual;
     function cleaner(): SMCleaner; overload; virtual;
@@ -44626,9 +44538,6 @@
     final class var
       funsafe: SMUnsafe; external name 'unsafe';
       funaligned: jboolean; external name 'unaligned';
-  strict protected
-    var
-      fviewedBuffer: JLObject; external name 'viewedBuffer';
   public
     function viewedBuffer(): JLObject; overload; virtual;
     function cleaner(): SMCleaner; overload; virtual;

+ 10 - 20
rtl/java/jdk15.pas

@@ -3575,11 +3575,6 @@ type
   Arr2JLIClassDefinition = array of Arr1JLIClassDefinition;
   Arr3JLIClassDefinition = array of Arr2JLIClassDefinition;
 
-  JSSystemEventQueueUtilities = class;
-  Arr1JSSystemEventQueueUtilities = array of JSSystemEventQueueUtilities;
-  Arr2JSSystemEventQueueUtilities = array of Arr1JSSystemEventQueueUtilities;
-  Arr3JSSystemEventQueueUtilities = array of Arr2JSSystemEventQueueUtilities;
-
   JRNoSuchObjectException = class;
   Arr1JRNoSuchObjectException = array of JRNoSuchObjectException;
   Arr2JRNoSuchObjectException = array of Arr1JRNoSuchObjectException;
@@ -4565,16 +4560,16 @@ type
   Arr2JAIImagingOpException = array of Arr1JAIImagingOpException;
   Arr3JAIImagingOpException = array of Arr2JAIImagingOpException;
 
-  JSInvalidParameterException = class;
-  Arr1JSInvalidParameterException = array of JSInvalidParameterException;
-  Arr2JSInvalidParameterException = array of Arr1JSInvalidParameterException;
-  Arr3JSInvalidParameterException = array of Arr2JSInvalidParameterException;
-
   JLVirtualMachineError = class;
   Arr1JLVirtualMachineError = array of JLVirtualMachineError;
   Arr2JLVirtualMachineError = array of Arr1JLVirtualMachineError;
   Arr3JLVirtualMachineError = array of Arr2JLVirtualMachineError;
 
+  JSInvalidParameterException = class;
+  Arr1JSInvalidParameterException = array of JSInvalidParameterException;
+  Arr2JSInvalidParameterException = array of Arr1JSInvalidParameterException;
+  Arr3JSInvalidParameterException = array of Arr2JSInvalidParameterException;
+
   OJXDIDDOMTransform = class;
   Arr1OJXDIDDOMTransform = array of OJXDIDDOMTransform;
   Arr2OJXDIDDOMTransform = array of Arr1OJXDIDDOMTransform;
@@ -13275,16 +13270,16 @@ type
   Arr2JTAttributeEntry = array of Arr1JTAttributeEntry;
   Arr3JTAttributeEntry = array of Arr2JTAttributeEntry;
 
-  JURPatternSyntaxException = class;
-  Arr1JURPatternSyntaxException = array of JURPatternSyntaxException;
-  Arr2JURPatternSyntaxException = array of Arr1JURPatternSyntaxException;
-  Arr3JURPatternSyntaxException = array of Arr2JURPatternSyntaxException;
-
   JBDefaultPersistenceDelegate = class;
   Arr1JBDefaultPersistenceDelegate = array of JBDefaultPersistenceDelegate;
   Arr2JBDefaultPersistenceDelegate = array of Arr1JBDefaultPersistenceDelegate;
   Arr3JBDefaultPersistenceDelegate = array of Arr2JBDefaultPersistenceDelegate;
 
+  JURPatternSyntaxException = class;
+  Arr1JURPatternSyntaxException = array of JURPatternSyntaxException;
+  Arr2JURPatternSyntaxException = array of Arr1JURPatternSyntaxException;
+  Arr3JURPatternSyntaxException = array of Arr2JURPatternSyntaxException;
+
   JPAHashPrintRequestAttributeSet = class;
   Arr1JPAHashPrintRequestAttributeSet = array of JPAHashPrintRequestAttributeSet;
   Arr2JPAHashPrintRequestAttributeSet = array of Arr1JPAHashPrintRequestAttributeSet;
@@ -14010,11 +14005,6 @@ type
   Arr2JSPSSynthEditorPaneUI = array of Arr1JSPSSynthEditorPaneUI;
   Arr3JSPSSynthEditorPaneUI = array of Arr2JSPSSynthEditorPaneUI;
 
-  JLAssertionError = class;
-  Arr1JLAssertionError = array of JLAssertionError;
-  Arr2JLAssertionError = array of Arr1JLAssertionError;
-  Arr3JLAssertionError = array of Arr2JLAssertionError;
-
   JNURISyntaxException = class;
   Arr1JNURISyntaxException = array of JNURISyntaxException;
   Arr2JNURISyntaxException = array of Arr1JNURISyntaxException;

+ 3 - 2
rtl/java/jsystem.inc

@@ -1289,14 +1289,15 @@ begin
 end;
 
 
-Procedure fpc_assert(Const Msg,FName:Shortstring;LineNo:Longint;ErrorAddr:Pointer); [Public,Alias : 'FPC_ASSERT']; compilerproc;
+Procedure fpc_assert(Const Msg,FName:unicodestring;LineNo:Longint{;ErrorAddr:Pointer}); [Public,Alias : 'FPC_ASSERT']; compilerproc;
 begin
 (*
   if pointer(AssertErrorProc)<>nil then
     AssertErrorProc(Msg,FName,LineNo,ErrorAddr)
   else
-*)
     HandleErrorFrame(227,get_frame);
+*)
+  raise JLAssertionError.Create(JLObject(Fname+'('+unicodestring(JLInteger.valueOf(LineNo).toString)+'): '+Msg));
 end;
 
 

+ 17 - 0
tests/test/jvm/tassert.pp

@@ -0,0 +1,17 @@
+program tassert;
+
+{$mode objfpc}
+
+var
+  b: byte;
+  caught: boolean;
+begin
+  caught:=false;
+  try
+    assert(b=1,'yow');
+  except
+    caught:=true;
+  end;
+  if not caught then
+    halt(1);
+end.

+ 4 - 0
tests/test/jvm/testall.bat

@@ -228,4 +228,8 @@ ppcjvm -O2 -g -B topovl
 if %errorlevel% neq 0 exit /b %errorlevel%
 java -Dfile.encoding=UTF-8 -cp ..\..\..\rtl\units\jvm-java;. topovl
 if %errorlevel% neq 0 exit /b %errorlevel%
+ppcjvm -O2 -g -B tassert
+if %errorlevel% neq 0 exit /b %errorlevel%
+java -Dfile.encoding=UTF-8 -cp ..\..\..\rtl\units\jvm-java;. -Sa tassert
+if %errorlevel% neq 0 exit /b %errorlevel%
 

+ 2 - 0
tests/test/jvm/testall.sh

@@ -129,3 +129,5 @@ $PPC -O2 -g -B tnestdynarr
 java -Dfile.encoding=UTF-8 -cp ../../../rtl/units/$RTLDIR:. tnestdynarr
 $PPC -O2 -g -B topovl
 java -Dfile.encoding=UTF-8 -cp ../../../rtl/units/$RTLDIR:. topovl
+$PPC -O2 -g -B -Sa tassert
+java -Dfile.encoding=UTF-8 -cp ../../../rtl/units/$RTLDIR:. tassert