From 85ef5e109c93ab7ed5dcf34801e8d7d3003528ef Mon Sep 17 00:00:00 2001 From: Jonas Maebe Date: Mon, 20 Feb 2012 11:28:59 +0000 Subject: [PATCH] + assert() support for the JVM target (currently ignores the Java classloader assertionStatus setting) git-svn-id: branches/jvmbackend@20388 - --- .gitattributes | 1 + compiler/jvm/njvminl.pas | 20 ++++- compiler/ninl.pas | 10 ++- rtl/android/jvm/androidr14.inc | 12 --- rtl/android/jvm/androidr14.pas | 5 -- rtl/android/jvm/java_sys_android.inc | 12 +++ rtl/android/jvm/java_sysh_android.inc | 6 +- rtl/java/java_sys.inc | 110 +++++++++++++----------- rtl/java/java_sysh.inc | 17 ++-- rtl/java/jcompproc.inc | 2 +- rtl/java/jdk15.inc | 119 +++----------------------- rtl/java/jdk15.pas | 30 +++---- rtl/java/jsystem.inc | 5 +- tests/test/jvm/tassert.pp | 17 ++++ tests/test/jvm/testall.bat | 4 + tests/test/jvm/testall.sh | 2 + 16 files changed, 168 insertions(+), 204 deletions(-) create mode 100644 tests/test/jvm/tassert.pp diff --git a/.gitattributes b/.gitattributes index 8e771ac060..9479b61cec 100644 --- a/.gitattributes +++ b/.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 diff --git a/compiler/jvm/njvminl.pas b/compiler/jvm/njvminl.pas index 2cf8615db6..f435b40b0a 100644 --- a/compiler/jvm/njvminl.pas +++ b/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, diff --git a/compiler/ninl.pas b/compiler/ninl.pas index e425aec9cb..04a5a16c13 100644 --- a/compiler/ninl.pas +++ b/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; diff --git a/rtl/android/jvm/androidr14.inc b/rtl/android/jvm/androidr14.inc index 2b59cda277..26de74a9b1 100644 --- a/rtl/android/jvm/androidr14.inc +++ b/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; diff --git a/rtl/android/jvm/androidr14.pas b/rtl/android/jvm/androidr14.pas index 4211687947..8bae30274c 100644 --- a/rtl/android/jvm/androidr14.pas +++ b/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; diff --git a/rtl/android/jvm/java_sys_android.inc b/rtl/android/jvm/java_sys_android.inc index 17eb5454a1..9ac1751838 100644 --- a/rtl/android/jvm/java_sys_android.inc +++ b/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; + diff --git a/rtl/android/jvm/java_sysh_android.inc b/rtl/android/jvm/java_sysh_android.inc index 6f80b28c3b..68a3328994 100644 --- a/rtl/android/jvm/java_sysh_android.inc +++ b/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; diff --git a/rtl/java/java_sys.inc b/rtl/java/java_sys.inc index 172fa1e71f..5c6d0ac339 100644 --- a/rtl/java/java_sys.inc +++ b/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' + InnerValues = class; + Arr1InnerValues = array of InnerValues; + Arr2InnerValues = array of Arr1InnerValues; + Arr3InnerValues = array of Arr2InnerValues; + InnerEntry = class external 'java.util' name 'Entry' end; - InnerKeySet = class sealed external 'java.util' name 'KeySet' - 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; diff --git a/rtl/java/java_sysh.inc b/rtl/java/java_sysh.inc index ee34a5dcdb..e667f99d5f 100644 --- a/rtl/java/java_sysh.inc +++ b/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; diff --git a/rtl/java/jcompproc.inc b/rtl/java/jcompproc.inc index d1e0db9ffa..5ab1e71c32 100644 --- a/rtl/java/jcompproc.inc +++ b/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; diff --git a/rtl/java/jdk15.inc b/rtl/java/jdk15.inc index 134481d5fb..3c257ff2bd 100644 --- a/rtl/java/jdk15.inc +++ b/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; diff --git a/rtl/java/jdk15.pas b/rtl/java/jdk15.pas index 6765c4c366..5531e2a6c7 100644 --- a/rtl/java/jdk15.pas +++ b/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; diff --git a/rtl/java/jsystem.inc b/rtl/java/jsystem.inc index dea12cd17a..7f77828b1e 100644 --- a/rtl/java/jsystem.inc +++ b/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; diff --git a/tests/test/jvm/tassert.pp b/tests/test/jvm/tassert.pp new file mode 100644 index 0000000000..13428a8a5a --- /dev/null +++ b/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. diff --git a/tests/test/jvm/testall.bat b/tests/test/jvm/testall.bat index 6276052fcb..8a85204a5a 100644 --- a/tests/test/jvm/testall.bat +++ b/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% diff --git a/tests/test/jvm/testall.sh b/tests/test/jvm/testall.sh index c8e0024559..cc8f204f5b 100755 --- a/tests/test/jvm/testall.sh +++ b/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