Re: [cp-patches] Assertions and System Assertions in GNU Classpath

2012-05-19 Thread Brian Jones
 On the administrative side, AFAICS you haven't contributed before.  Do you 
 have
 a copyright assignment with the FSF?

The change appears to be minor enough to not require the paperwork to
me.  Mostly comments, very little code.  But hey, if you're gonna be
contributing better to get that started sooner than later.

Brian



Re: [cp-patches] Assertions and System Assertions in GNU Classpath

2012-04-25 Thread Josef Eisl
On 04/25/2012 02:07 AM, Andrew Hughes wrote:
 - Original Message -
 Hi.

 Attached is a patch that enables GNU Classpath to distinguish between
 normal assertions and assertions for system classes (i.e. null
 classloader) as discussed on the Classpath mailing list [1].

 Note that the new method
 'java/lang/VMClassLoader.getSystemAssertionStatus()' must be
 implemented
 otherwise an exception will occur.

 
 I'm confused about something in this patch which perhaps you can explain.
 
 I was under the impression that all system classes had assertions enabled
 and disabled as 'system assertions' (-esa/-dsa).  So I was expecting
 the patch to just return this value if the classloader was null.  Why does
 it instead retrieve a system classloader and probe that on a per-package/class
 basis?  How would these values be set?
 
 As quoted before, the Oracle documentation explicitly states that -ea does
 not turn on system assertions.  This patch would imply that e.g. assertions
 for java.lang could be turned on by -ea:java.lang.  Is this intentional?

As far as I understood the documentation (in my case
http://docs.oracle.com/javase/6/docs/technotes/guides/language/assert.html#enable-disable
as a reference) it is true that '-ea' (no argument) only applies to
normal classes. The flag '-ea:*' does apply all classes:

The above switches apply to all class loaders. With one exception, they
also apply to system classes (which do not have an explicit class
loader). The exception concerns the switches with no arguments, which
(as indicated above) do not apply to system classes.

Did I miss anything?

 
 On the administrative side, AFAICS you haven't contributed before.  Do you 
 have
 a copyright assignment with the FSF?
 
 josef

 [1]:
 http://developer.classpath.org/pipermail/classpath/2012-April/003195.html

 On 04/24/2012 02:29 AM, Andrew Hughes wrote:
 - Original Message -
 Hi there.

 I want to reanimate a discussion from 2007 [1,2] about the
 Assertion/System Assertion handling. As far as I know GNU
 Classpath
 can't distinguish between normal assertions
 (-ea/-eanableassertions)
 and
 assertions for system classes (-esa/-enablesystemassertions, i.e.
 classes with no classloader [3]).
 The only interface for the VM is the method
 VMClassLoader.defaultAssertionStatus(). It is not clear if this is
 supposed to return the system assertion status or the normal
 assertion
 status (vm integration doc [4] vs. javadoc [5]). On the one hand,
 it
 is
 used to set the defaultAssertionStatus for java.lang.ClassLoader
 [6]
 which would imply that it is the normal assertion status. On the
 other
 hand, the very same flag is used for setting the assertion status
 for
 system class in java.lang.Class (desiredAssertionStatus)[7].

 I think we need two dedicated methods in VMClassLoader.
 getDefaultAssertionStatus() for normal assertions (i.e. -ea) and
 getDefaultSystemAssertionStatus() for system assertions (i.e.
 -esa).
 ClassLoader should use VMClassLoader.getDefaultAssertionStatus()
 as
 its
 default value and Class.getDesiredAssertionStatus() should use
 VMClassLoader.defaultSystemAssertionStatus() for system classes.

 I understand that this would be a rather big change because all
 VMs
 using GNU Classpath will fail if they do not adopt their
 VMClassLoader
 accordingly.

 I want to revitalize the discussion on this topic and I'm ready to
 prepare a patch for this issue but things should be discussed
 first
 ;).

 I hope my explanations are somehow understandable ;).

 - josef

 PS: I think the patch from 2007 is does not fix this issue as it
 does
 not modify java.lang.Class and java.lang.Classloader receptively.


 [1]:
 http://developer.classpath.org/pipermail/classpath-patches/2007-August/005601.html
 [2]:
 http://developer.classpath.org/pipermail/classpath-patches/2007-September/005605.html
 [3]:
 http://docs.oracle.com/javase/1.4.2/docs/guide/lang/assert.html#enable-disable
 [4]:
 http://www.gnu.org/software/classpath/docs/cp-vmintegration.html#SEC7
 [5]:
 http://git.savannah.gnu.org/cgit/classpath.git/tree/vm/reference/java/lang/VMClassLoader.java?id=18f4bdd925d1a78d11598fb23dcaf1110772dcae#n334
 [6]:
 http://git.savannah.gnu.org/cgit/classpath.git/tree/java/lang/ClassLoader.java?id=18f4bdd925d1a78d11598fb23dcaf1110772dcae#n220
 [7]:
 http://git.savannah.gnu.org/cgit/classpath.git/tree/java/lang/Class.java?id=18f4bdd925d1a78d11598fb23dcaf1110772dcae#n1233



 You're right.  The issue is here:

 But if you use them with no arguments (-ea or -da), they do not
 apply to system classes.

 (from
 http://java.sun.com/developer/technicalArticles/JavaLP/assertions/)

 Both when the classloader is null (a system class) and when there
 is no class or package-specific setting, the same default setting
 from VMClassLoader.defaultAssertionStatus() is used.

 There should instead a separate method for system classes as you
 mention: VMClassLoader.getSystemAssertionStatus()
 (I don't think it needs to be called 

[cp-patches] Assertions and System Assertions in GNU Classpath

2012-04-24 Thread Josef Eisl
Hi.

Attached is a patch that enables GNU Classpath to distinguish between
normal assertions and assertions for system classes (i.e. null
classloader) as discussed on the Classpath mailing list [1].

Note that the new method
'java/lang/VMClassLoader.getSystemAssertionStatus()' must be implemented
otherwise an exception will occur.

josef

[1]:
http://developer.classpath.org/pipermail/classpath/2012-April/003195.html

On 04/24/2012 02:29 AM, Andrew Hughes wrote:
 - Original Message -
 Hi there.

 I want to reanimate a discussion from 2007 [1,2] about the
 Assertion/System Assertion handling. As far as I know GNU Classpath
 can't distinguish between normal assertions (-ea/-eanableassertions)
 and
 assertions for system classes (-esa/-enablesystemassertions, i.e.
 classes with no classloader [3]).
 The only interface for the VM is the method
 VMClassLoader.defaultAssertionStatus(). It is not clear if this is
 supposed to return the system assertion status or the normal
 assertion
 status (vm integration doc [4] vs. javadoc [5]). On the one hand, it
 is
 used to set the defaultAssertionStatus for java.lang.ClassLoader [6]
 which would imply that it is the normal assertion status. On the
 other
 hand, the very same flag is used for setting the assertion status for
 system class in java.lang.Class (desiredAssertionStatus)[7].

 I think we need two dedicated methods in VMClassLoader.
 getDefaultAssertionStatus() for normal assertions (i.e. -ea) and
 getDefaultSystemAssertionStatus() for system assertions (i.e. -esa).
 ClassLoader should use VMClassLoader.getDefaultAssertionStatus() as
 its
 default value and Class.getDesiredAssertionStatus() should use
 VMClassLoader.defaultSystemAssertionStatus() for system classes.

 I understand that this would be a rather big change because all VMs
 using GNU Classpath will fail if they do not adopt their
 VMClassLoader
 accordingly.

 I want to revitalize the discussion on this topic and I'm ready to
 prepare a patch for this issue but things should be discussed first
 ;).

 I hope my explanations are somehow understandable ;).

 - josef

 PS: I think the patch from 2007 is does not fix this issue as it does
 not modify java.lang.Class and java.lang.Classloader receptively.


 [1]:
 http://developer.classpath.org/pipermail/classpath-patches/2007-August/005601.html
 [2]:
 http://developer.classpath.org/pipermail/classpath-patches/2007-September/005605.html
 [3]:
 http://docs.oracle.com/javase/1.4.2/docs/guide/lang/assert.html#enable-disable
 [4]:
 http://www.gnu.org/software/classpath/docs/cp-vmintegration.html#SEC7
 [5]:
 http://git.savannah.gnu.org/cgit/classpath.git/tree/vm/reference/java/lang/VMClassLoader.java?id=18f4bdd925d1a78d11598fb23dcaf1110772dcae#n334
 [6]:
 http://git.savannah.gnu.org/cgit/classpath.git/tree/java/lang/ClassLoader.java?id=18f4bdd925d1a78d11598fb23dcaf1110772dcae#n220
 [7]:
 http://git.savannah.gnu.org/cgit/classpath.git/tree/java/lang/Class.java?id=18f4bdd925d1a78d11598fb23dcaf1110772dcae#n1233


 
 You're right.  The issue is here:
 
 But if you use them with no arguments (-ea or -da), they do not apply to 
 system classes.
 
 (from http://java.sun.com/developer/technicalArticles/JavaLP/assertions/)
 
 Both when the classloader is null (a system class) and when there is no class 
 or package-specific setting, the same default setting
 from VMClassLoader.defaultAssertionStatus() is used. 
 
 There should instead a separate method for system classes as you mention: 
 VMClassLoader.getSystemAssertionStatus()
 (I don't think it needs to be called default because it can't be overridden 
 by the class/package settings).
 
 As we're just after a release (0.99), this would be an ideal time to add that 
 method.

From b3beaa47685cd75e25d5d35a483618708c7dc132 Mon Sep 17 00:00:00 2001
From: Josef Eisl zaps...@zapster.cc
Date: Tue, 24 Apr 2012 17:21:51 +0200
Subject: [PATCH] Added java/lang/VMClassLoader.getSystemAssertionStatus().

This patch adds the possibility to distinguish between
assertions for normal classes and assertion for system
classes (i.e. classes with null ClassLoader).
---
 ChangeLog |6 ++
 doc/cp-vmintegration.texinfo  |3 +++
 java/lang/Class.java  |   14 +++---
 vm/reference/java/lang/VMClassLoader.java |   16 ++--
 4 files changed, 34 insertions(+), 5 deletions(-)

diff --git a/ChangeLog b/ChangeLog
index 062298b..d733367 100644
--- a/ChangeLog
+++ b/ChangeLog
@@ -1,3 +1,9 @@
+2012-04-24  Josef Eisl  zaps...@zapster.cc
+
+	* vm/reference/java/lang/VMClassLoader.java: Added getSystemAssertionStatus().
+	* java/lang/Class.java: Using getSystemAssertionStatus().
+	* doc/cp-vmintegration.texinfo: Updated documentation.
+
 2012-04-03  Andrew John Hughes  ahug...@redhat.com
 
 	* .gitignore: Renamed from .cvsignore.
diff --git a/doc/cp-vmintegration.texinfo b/doc/cp-vmintegration.texinfo
index 0b2d78c..672a262 100644
--- 

Re: [cp-patches] Assertions and System Assertions in GNU Classpath

2012-04-24 Thread Pekka Enberg
On Tue, Apr 24, 2012 at 9:40 PM, Josef Eisl
zaps...@complang.tuwien.ac.at wrote:
 Attached is a patch that enables GNU Classpath to distinguish between
 normal assertions and assertions for system classes (i.e. null
 classloader) as discussed on the Classpath mailing list [1].

Acked-by: Pekka Enberg penb...@kernel.org

On Tue, Apr 24, 2012 at 9:40 PM, Josef Eisl
zaps...@complang.tuwien.ac.at wrote:
 Note that the new method
 'java/lang/VMClassLoader.getSystemAssertionStatus()' must be implemented
 otherwise an exception will occur.

Sure, but only for VMs that override GNU Classpath VM native classes.
Jato, for example, doesn't.



Re: [cp-patches] Assertions and System Assertions in GNU Classpath

2012-04-24 Thread Josef Eisl
On 04/24/2012 08:52 PM, Pekka Enberg wrote:
 On Tue, Apr 24, 2012 at 9:40 PM, Josef Eisl
 zaps...@complang.tuwien.ac.at wrote:
 Attached is a patch that enables GNU Classpath to distinguish between
 normal assertions and assertions for system classes (i.e. null
 classloader) as discussed on the Classpath mailing list [1].
 
 Acked-by: Pekka Enberg penb...@kernel.org
 
 On Tue, Apr 24, 2012 at 9:40 PM, Josef Eisl
 zaps...@complang.tuwien.ac.at wrote:
 Note that the new method
 'java/lang/VMClassLoader.getSystemAssertionStatus()' must be implemented
 otherwise an exception will occur.
 
 Sure, but only for VMs that override GNU Classpath VM native classes.
 Jato, for example, doesn't.

Oh, yeah. That's true. If the reference implementation is used
everything should be fine ;).




Re: [cp-patches] Assertions and System Assertions in GNU Classpath

2012-04-24 Thread Andrew Hughes
- Original Message -
 Hi.
 
 Attached is a patch that enables GNU Classpath to distinguish between
 normal assertions and assertions for system classes (i.e. null
 classloader) as discussed on the Classpath mailing list [1].
 
 Note that the new method
 'java/lang/VMClassLoader.getSystemAssertionStatus()' must be
 implemented
 otherwise an exception will occur.
 

I'm confused about something in this patch which perhaps you can explain.

I was under the impression that all system classes had assertions enabled
and disabled as 'system assertions' (-esa/-dsa).  So I was expecting
the patch to just return this value if the classloader was null.  Why does
it instead retrieve a system classloader and probe that on a per-package/class
basis?  How would these values be set?

As quoted before, the Oracle documentation explicitly states that -ea does
not turn on system assertions.  This patch would imply that e.g. assertions
for java.lang could be turned on by -ea:java.lang.  Is this intentional?

On the administrative side, AFAICS you haven't contributed before.  Do you have
a copyright assignment with the FSF?

 josef
 
 [1]:
 http://developer.classpath.org/pipermail/classpath/2012-April/003195.html
 
 On 04/24/2012 02:29 AM, Andrew Hughes wrote:
  - Original Message -
  Hi there.
 
  I want to reanimate a discussion from 2007 [1,2] about the
  Assertion/System Assertion handling. As far as I know GNU
  Classpath
  can't distinguish between normal assertions
  (-ea/-eanableassertions)
  and
  assertions for system classes (-esa/-enablesystemassertions, i.e.
  classes with no classloader [3]).
  The only interface for the VM is the method
  VMClassLoader.defaultAssertionStatus(). It is not clear if this is
  supposed to return the system assertion status or the normal
  assertion
  status (vm integration doc [4] vs. javadoc [5]). On the one hand,
  it
  is
  used to set the defaultAssertionStatus for java.lang.ClassLoader
  [6]
  which would imply that it is the normal assertion status. On the
  other
  hand, the very same flag is used for setting the assertion status
  for
  system class in java.lang.Class (desiredAssertionStatus)[7].
 
  I think we need two dedicated methods in VMClassLoader.
  getDefaultAssertionStatus() for normal assertions (i.e. -ea) and
  getDefaultSystemAssertionStatus() for system assertions (i.e.
  -esa).
  ClassLoader should use VMClassLoader.getDefaultAssertionStatus()
  as
  its
  default value and Class.getDesiredAssertionStatus() should use
  VMClassLoader.defaultSystemAssertionStatus() for system classes.
 
  I understand that this would be a rather big change because all
  VMs
  using GNU Classpath will fail if they do not adopt their
  VMClassLoader
  accordingly.
 
  I want to revitalize the discussion on this topic and I'm ready to
  prepare a patch for this issue but things should be discussed
  first
  ;).
 
  I hope my explanations are somehow understandable ;).
 
  - josef
 
  PS: I think the patch from 2007 is does not fix this issue as it
  does
  not modify java.lang.Class and java.lang.Classloader receptively.
 
 
  [1]:
  http://developer.classpath.org/pipermail/classpath-patches/2007-August/005601.html
  [2]:
  http://developer.classpath.org/pipermail/classpath-patches/2007-September/005605.html
  [3]:
  http://docs.oracle.com/javase/1.4.2/docs/guide/lang/assert.html#enable-disable
  [4]:
  http://www.gnu.org/software/classpath/docs/cp-vmintegration.html#SEC7
  [5]:
  http://git.savannah.gnu.org/cgit/classpath.git/tree/vm/reference/java/lang/VMClassLoader.java?id=18f4bdd925d1a78d11598fb23dcaf1110772dcae#n334
  [6]:
  http://git.savannah.gnu.org/cgit/classpath.git/tree/java/lang/ClassLoader.java?id=18f4bdd925d1a78d11598fb23dcaf1110772dcae#n220
  [7]:
  http://git.savannah.gnu.org/cgit/classpath.git/tree/java/lang/Class.java?id=18f4bdd925d1a78d11598fb23dcaf1110772dcae#n1233
 
 
  
  You're right.  The issue is here:
  
  But if you use them with no arguments (-ea or -da), they do not
  apply to system classes.
  
  (from
  http://java.sun.com/developer/technicalArticles/JavaLP/assertions/)
  
  Both when the classloader is null (a system class) and when there
  is no class or package-specific setting, the same default setting
  from VMClassLoader.defaultAssertionStatus() is used.
  
  There should instead a separate method for system classes as you
  mention: VMClassLoader.getSystemAssertionStatus()
  (I don't think it needs to be called default because it can't be
  overridden by the class/package settings).
  
  As we're just after a release (0.99), this would be an ideal time
  to add that method.
 
 

Thanks,
-- 
Andrew :)

Free Java Software Engineer
Red Hat, Inc. (http://www.redhat.com)

PGP Key: 248BDC07 (https://keys.indymedia.org/)
Fingerprint = EC5A 1F5E C0AD 1D15 8F1F  8F91 3B96 A578 248B DC07