diff --git a/awt/toolkit.cs b/awt/toolkit.cs index cbde4973..1d3b03c1 100644 --- a/awt/toolkit.cs +++ b/awt/toolkit.cs @@ -72,7 +72,7 @@ namespace ikvm.awt // HACK I have no idea why this line is necessary... IntPtr p = form.Handle; bogusForm = form; - // HACK to make sure we can be aborted (Thread.Abort) we need to periodically + // FXBUG to make sure we can be aborted (Thread.Abort) we need to periodically // fire an event (because otherwise we'll be blocking in unmanaged code and // the Abort cannot be handled there). System.Windows.Forms.Timer t = new System.Windows.Forms.Timer(); @@ -333,10 +333,16 @@ namespace ikvm.awt return getImage(url); } + const int ERROR = java.awt.image.ImageObserver.__Fields.ERROR; + const int WIDTH = java.awt.image.ImageObserver.__Fields.WIDTH; + const int HEIGHT = java.awt.image.ImageObserver.__Fields.HEIGHT; + const int FRAMEBITS = java.awt.image.ImageObserver.__Fields.FRAMEBITS; + const int ALLBITS = java.awt.image.ImageObserver.__Fields.ALLBITS; + public override bool prepareImage(java.awt.Image image, int width, int height, java.awt.image.ImageObserver observer) { // HACK for now we call checkImage to obtain the status and fire the observer - return (checkImage(image, width, height, observer) & 32) != 0; + return (checkImage(image, width, height, observer) & ALLBITS) != 0; } public override int checkImage(java.awt.Image image, int width, int height, java.awt.image.ImageObserver observer) @@ -345,16 +351,15 @@ namespace ikvm.awt { if(observer != null) { - observer.imageUpdate(image, 64, 0, 0, -1, -1); + observer.imageUpdate(image, ERROR, 0, 0, -1, -1); } - return 64; // ERROR + return ERROR; } if(observer != null) { - observer.imageUpdate(image, 1 + 2 + 16 + 32, 0, 0, image.getWidth(null), image.getHeight(null)); + observer.imageUpdate(image, WIDTH + HEIGHT + FRAMEBITS + ALLBITS, 0, 0, image.getWidth(null), image.getHeight(null)); } - // HACK we cannot use the constants defined in the interface from C#, so we hardcode the flags - return 1 + 2 + 16 + 32; // WIDTH + HEIGHT + FRAMEBITS + ALLBITS + return WIDTH + HEIGHT + FRAMEBITS + ALLBITS; } public override java.awt.Image createImage(java.awt.image.ImageProducer producer) diff --git a/classpath/allsources.lst b/classpath/allsources.lst index 9f96a2bb..ddda1a9f 100644 --- a/classpath/allsources.lst +++ b/classpath/allsources.lst @@ -15,7 +15,6 @@ java/lang/VMDouble.java java/lang/VMFloat.java java/lang/VMSystem.java java/lang/ExceptionHelper.java -java/lang/ObjectHelper.java java/lang/StringHelper.java java/lang/VMClassLoader.java java/lang/VMRuntime.java @@ -57,6 +56,43 @@ sun/misc/Ref.java ../../classpath/gnu/java/awt/peer/ClasspathTextLayoutPeer.java ../../classpath/gnu/java/awt/peer/EmbeddedWindowPeer.java ../../classpath/gnu/java/beans/BeanInfoEmbryo.java +../../classpath/gnu/java/beans/decoder/AbstractContext.java +../../classpath/gnu/java/beans/decoder/AbstractCreatableObjectContext.java +../../classpath/gnu/java/beans/decoder/AbstractElementHandler.java +../../classpath/gnu/java/beans/decoder/AbstractObjectContext.java +../../classpath/gnu/java/beans/decoder/ArrayContext.java +../../classpath/gnu/java/beans/decoder/ArrayHandler.java +../../classpath/gnu/java/beans/decoder/AssemblyException.java +../../classpath/gnu/java/beans/decoder/BooleanHandler.java +../../classpath/gnu/java/beans/decoder/ByteHandler.java +../../classpath/gnu/java/beans/decoder/CharHandler.java +../../classpath/gnu/java/beans/decoder/ClassHandler.java +../../classpath/gnu/java/beans/decoder/ConstructorContext.java +../../classpath/gnu/java/beans/decoder/Context.java +../../classpath/gnu/java/beans/decoder/DecoderContext.java +../../classpath/gnu/java/beans/decoder/DefaultExceptionListener.java +../../classpath/gnu/java/beans/decoder/DoubleHandler.java +../../classpath/gnu/java/beans/decoder/DummyContext.java +../../classpath/gnu/java/beans/decoder/DummyHandler.java +../../classpath/gnu/java/beans/decoder/ElementHandler.java +../../classpath/gnu/java/beans/decoder/FloatHandler.java +../../classpath/gnu/java/beans/decoder/GrowableArrayContext.java +../../classpath/gnu/java/beans/decoder/IndexContext.java +../../classpath/gnu/java/beans/decoder/IntHandler.java +../../classpath/gnu/java/beans/decoder/JavaHandler.java +../../classpath/gnu/java/beans/decoder/LongHandler.java +../../classpath/gnu/java/beans/decoder/MethodContext.java +../../classpath/gnu/java/beans/decoder/MethodFinder.java +../../classpath/gnu/java/beans/decoder/NullHandler.java +../../classpath/gnu/java/beans/decoder/ObjectContext.java +../../classpath/gnu/java/beans/decoder/ObjectHandler.java +../../classpath/gnu/java/beans/decoder/PersistenceParser.java +../../classpath/gnu/java/beans/decoder/PropertyContext.java +../../classpath/gnu/java/beans/decoder/ShortHandler.java +../../classpath/gnu/java/beans/decoder/SimpleHandler.java +../../classpath/gnu/java/beans/decoder/StaticMethodContext.java +../../classpath/gnu/java/beans/decoder/StringHandler.java +../../classpath/gnu/java/beans/decoder/VoidHandler.java ../../classpath/gnu/java/beans/editors/ColorEditor.java ../../classpath/gnu/java/beans/editors/FontEditor.java ../../classpath/gnu/java/beans/editors/NativeBooleanEditor.java @@ -964,6 +1000,7 @@ sun/misc/Ref.java ../../classpath/java/beans/VetoableChangeListenerProxy.java ../../classpath/java/beans/VetoableChangeSupport.java ../../classpath/java/beans/Visibility.java +../../classpath/java/beans/XMLDecoder.java ../../classpath/java/io/BufferedInputStream.java ../../classpath/java/io/BufferedOutputStream.java ../../classpath/java/io/BufferedReader.java @@ -1564,6 +1601,7 @@ sun/misc/Ref.java ../../classpath/java/util/ListIterator.java ../../classpath/java/util/ListResourceBundle.java ../../classpath/java/util/Locale.java +../../classpath/java/util/LocaleData.java ../../classpath/java/util/logging/ConsoleHandler.java ../../classpath/java/util/logging/ErrorManager.java ../../classpath/java/util/logging/FileHandler.java @@ -2162,6 +2200,7 @@ sun/misc/Ref.java ../../classpath/javax/swing/ImageIcon.java ../../classpath/javax/swing/InputMap.java ../../classpath/javax/swing/InputVerifier.java +../../classpath/javax/swing/InternalFrameFocusTraversalPolicy.java ../../classpath/javax/swing/JApplet.java ../../classpath/javax/swing/JButton.java ../../classpath/javax/swing/JCheckBox.java @@ -2230,6 +2269,7 @@ sun/misc/Ref.java ../../classpath/javax/swing/plaf/basic/BasicComboPopup.java ../../classpath/javax/swing/plaf/basic/BasicDesktopIconUI.java ../../classpath/javax/swing/plaf/basic/BasicDesktopPaneUI.java +../../classpath/javax/swing/plaf/basic/BasicEditorPaneUI.java ../../classpath/javax/swing/plaf/basic/BasicFormattedTextFieldUI.java ../../classpath/javax/swing/plaf/basic/BasicGraphicsUtils.java ../../classpath/javax/swing/plaf/basic/BasicIconFactory.java @@ -2290,7 +2330,9 @@ sun/misc/Ref.java ../../classpath/javax/swing/plaf/ListUI.java ../../classpath/javax/swing/plaf/MenuBarUI.java ../../classpath/javax/swing/plaf/MenuItemUI.java +../../classpath/javax/swing/plaf/metal/DefaultMetalTheme.java ../../classpath/javax/swing/plaf/metal/MetalLookAndFeel.java +../../classpath/javax/swing/plaf/metal/MetalTheme.java ../../classpath/javax/swing/plaf/OptionPaneUI.java ../../classpath/javax/swing/plaf/PanelUI.java ../../classpath/javax/swing/plaf/PopupMenuUI.java @@ -2449,3 +2491,411 @@ sun/misc/Ref.java ../../classpath/vm/reference/java/lang/VMSecurityManager.java ../../classpath/vm/reference/java/lang/VMString.java ../../classpath/vm/reference/java/lang/VMThrowable.java +../../classpath/external/sax/org/xml/sax/AttributeList.java +../../classpath/external/sax/org/xml/sax/Attributes.java +../../classpath/external/sax/org/xml/sax/ContentHandler.java +../../classpath/external/sax/org/xml/sax/DocumentHandler.java +../../classpath/external/sax/org/xml/sax/DTDHandler.java +../../classpath/external/sax/org/xml/sax/EntityResolver.java +../../classpath/external/sax/org/xml/sax/ErrorHandler.java +../../classpath/external/sax/org/xml/sax/HandlerBase.java +../../classpath/external/sax/org/xml/sax/InputSource.java +../../classpath/external/sax/org/xml/sax/Locator.java +../../classpath/external/sax/org/xml/sax/Parser.java +../../classpath/external/sax/org/xml/sax/SAXException.java +../../classpath/external/sax/org/xml/sax/SAXNotRecognizedException.java +../../classpath/external/sax/org/xml/sax/SAXNotSupportedException.java +../../classpath/external/sax/org/xml/sax/SAXParseException.java +../../classpath/external/sax/org/xml/sax/XMLFilter.java +../../classpath/external/sax/org/xml/sax/XMLReader.java +../../classpath/external/sax/org/xml/sax/ext/Attributes2.java +../../classpath/external/sax/org/xml/sax/ext/Attributes2Impl.java +../../classpath/external/sax/org/xml/sax/ext/DeclHandler.java +../../classpath/external/sax/org/xml/sax/ext/DefaultHandler2.java +../../classpath/external/sax/org/xml/sax/ext/EntityResolver2.java +../../classpath/external/sax/org/xml/sax/ext/LexicalHandler.java +../../classpath/external/sax/org/xml/sax/ext/Locator2.java +../../classpath/external/sax/org/xml/sax/ext/Locator2Impl.java +../../classpath/external/sax/org/xml/sax/helpers/AttributeListImpl.java +../../classpath/external/sax/org/xml/sax/helpers/AttributesImpl.java +../../classpath/external/sax/org/xml/sax/helpers/DefaultHandler.java +../../classpath/external/sax/org/xml/sax/helpers/LocatorImpl.java +../../classpath/external/sax/org/xml/sax/helpers/NamespaceSupport.java +../../classpath/external/sax/org/xml/sax/helpers/NewInstance.java +../../classpath/external/sax/org/xml/sax/helpers/ParserAdapter.java +../../classpath/external/sax/org/xml/sax/helpers/ParserFactory.java +../../classpath/external/sax/org/xml/sax/helpers/XMLFilterImpl.java +../../classpath/external/sax/org/xml/sax/helpers/XMLReaderAdapter.java +../../classpath/external/sax/org/xml/sax/helpers/XMLReaderFactory.java +../../classpath/external/w3c_dom/org/w3c/dom/Attr.java +../../classpath/external/w3c_dom/org/w3c/dom/CDATASection.java +../../classpath/external/w3c_dom/org/w3c/dom/CharacterData.java +../../classpath/external/w3c_dom/org/w3c/dom/Comment.java +../../classpath/external/w3c_dom/org/w3c/dom/Document.java +../../classpath/external/w3c_dom/org/w3c/dom/DocumentFragment.java +../../classpath/external/w3c_dom/org/w3c/dom/DocumentType.java +../../classpath/external/w3c_dom/org/w3c/dom/DOMConfiguration.java +../../classpath/external/w3c_dom/org/w3c/dom/DOMError.java +../../classpath/external/w3c_dom/org/w3c/dom/DOMErrorHandler.java +../../classpath/external/w3c_dom/org/w3c/dom/DOMException.java +../../classpath/external/w3c_dom/org/w3c/dom/DOMImplementation.java +../../classpath/external/w3c_dom/org/w3c/dom/DOMImplementationList.java +../../classpath/external/w3c_dom/org/w3c/dom/DOMImplementationSource.java +../../classpath/external/w3c_dom/org/w3c/dom/DOMLocator.java +../../classpath/external/w3c_dom/org/w3c/dom/DOMStringList.java +../../classpath/external/w3c_dom/org/w3c/dom/Element.java +../../classpath/external/w3c_dom/org/w3c/dom/Entity.java +../../classpath/external/w3c_dom/org/w3c/dom/EntityReference.java +../../classpath/external/w3c_dom/org/w3c/dom/NamedNodeMap.java +../../classpath/external/w3c_dom/org/w3c/dom/NameList.java +../../classpath/external/w3c_dom/org/w3c/dom/Node.java +../../classpath/external/w3c_dom/org/w3c/dom/NodeList.java +../../classpath/external/w3c_dom/org/w3c/dom/Notation.java +../../classpath/external/w3c_dom/org/w3c/dom/ProcessingInstruction.java +../../classpath/external/w3c_dom/org/w3c/dom/Text.java +../../classpath/external/w3c_dom/org/w3c/dom/TypeInfo.java +../../classpath/external/w3c_dom/org/w3c/dom/UserDataHandler.java +../../classpath/external/w3c_dom/org/w3c/dom/bootstrap/DOMImplementationRegistry.java +../../classpath/external/w3c_dom/org/w3c/dom/css/Counter.java +../../classpath/external/w3c_dom/org/w3c/dom/css/CSS2Properties.java +../../classpath/external/w3c_dom/org/w3c/dom/css/CSSCharsetRule.java +../../classpath/external/w3c_dom/org/w3c/dom/css/CSSFontFaceRule.java +../../classpath/external/w3c_dom/org/w3c/dom/css/CSSImportRule.java +../../classpath/external/w3c_dom/org/w3c/dom/css/CSSMediaRule.java +../../classpath/external/w3c_dom/org/w3c/dom/css/CSSPageRule.java +../../classpath/external/w3c_dom/org/w3c/dom/css/CSSPrimitiveValue.java +../../classpath/external/w3c_dom/org/w3c/dom/css/CSSRule.java +../../classpath/external/w3c_dom/org/w3c/dom/css/CSSRuleList.java +../../classpath/external/w3c_dom/org/w3c/dom/css/CSSStyleDeclaration.java +../../classpath/external/w3c_dom/org/w3c/dom/css/CSSStyleRule.java +../../classpath/external/w3c_dom/org/w3c/dom/css/CSSStyleSheet.java +../../classpath/external/w3c_dom/org/w3c/dom/css/CSSUnknownRule.java +../../classpath/external/w3c_dom/org/w3c/dom/css/CSSValue.java +../../classpath/external/w3c_dom/org/w3c/dom/css/CSSValueList.java +../../classpath/external/w3c_dom/org/w3c/dom/css/DocumentCSS.java +../../classpath/external/w3c_dom/org/w3c/dom/css/DOMImplementationCSS.java +../../classpath/external/w3c_dom/org/w3c/dom/css/ElementCSSInlineStyle.java +../../classpath/external/w3c_dom/org/w3c/dom/css/Rect.java +../../classpath/external/w3c_dom/org/w3c/dom/css/RGBColor.java +../../classpath/external/w3c_dom/org/w3c/dom/css/ViewCSS.java +../../classpath/external/w3c_dom/org/w3c/dom/events/DocumentEvent.java +../../classpath/external/w3c_dom/org/w3c/dom/events/Event.java +../../classpath/external/w3c_dom/org/w3c/dom/events/EventException.java +../../classpath/external/w3c_dom/org/w3c/dom/events/EventListener.java +../../classpath/external/w3c_dom/org/w3c/dom/events/EventTarget.java +../../classpath/external/w3c_dom/org/w3c/dom/events/MouseEvent.java +../../classpath/external/w3c_dom/org/w3c/dom/events/MutationEvent.java +../../classpath/external/w3c_dom/org/w3c/dom/events/UIEvent.java +../../classpath/external/w3c_dom/org/w3c/dom/html2/HTMLAnchorElement.java +../../classpath/external/w3c_dom/org/w3c/dom/html2/HTMLAppletElement.java +../../classpath/external/w3c_dom/org/w3c/dom/html2/HTMLAreaElement.java +../../classpath/external/w3c_dom/org/w3c/dom/html2/HTMLBaseElement.java +../../classpath/external/w3c_dom/org/w3c/dom/html2/HTMLBaseFontElement.java +../../classpath/external/w3c_dom/org/w3c/dom/html2/HTMLBodyElement.java +../../classpath/external/w3c_dom/org/w3c/dom/html2/HTMLBRElement.java +../../classpath/external/w3c_dom/org/w3c/dom/html2/HTMLButtonElement.java +../../classpath/external/w3c_dom/org/w3c/dom/html2/HTMLCollection.java +../../classpath/external/w3c_dom/org/w3c/dom/html2/HTMLDirectoryElement.java +../../classpath/external/w3c_dom/org/w3c/dom/html2/HTMLDivElement.java +../../classpath/external/w3c_dom/org/w3c/dom/html2/HTMLDListElement.java +../../classpath/external/w3c_dom/org/w3c/dom/html2/HTMLDocument.java +../../classpath/external/w3c_dom/org/w3c/dom/html2/HTMLElement.java +../../classpath/external/w3c_dom/org/w3c/dom/html2/HTMLFieldSetElement.java +../../classpath/external/w3c_dom/org/w3c/dom/html2/HTMLFontElement.java +../../classpath/external/w3c_dom/org/w3c/dom/html2/HTMLFormElement.java +../../classpath/external/w3c_dom/org/w3c/dom/html2/HTMLFrameElement.java +../../classpath/external/w3c_dom/org/w3c/dom/html2/HTMLFrameSetElement.java +../../classpath/external/w3c_dom/org/w3c/dom/html2/HTMLHeadElement.java +../../classpath/external/w3c_dom/org/w3c/dom/html2/HTMLHeadingElement.java +../../classpath/external/w3c_dom/org/w3c/dom/html2/HTMLHRElement.java +../../classpath/external/w3c_dom/org/w3c/dom/html2/HTMLHtmlElement.java +../../classpath/external/w3c_dom/org/w3c/dom/html2/HTMLIFrameElement.java +../../classpath/external/w3c_dom/org/w3c/dom/html2/HTMLImageElement.java +../../classpath/external/w3c_dom/org/w3c/dom/html2/HTMLInputElement.java +../../classpath/external/w3c_dom/org/w3c/dom/html2/HTMLIsIndexElement.java +../../classpath/external/w3c_dom/org/w3c/dom/html2/HTMLLabelElement.java +../../classpath/external/w3c_dom/org/w3c/dom/html2/HTMLLegendElement.java +../../classpath/external/w3c_dom/org/w3c/dom/html2/HTMLLIElement.java +../../classpath/external/w3c_dom/org/w3c/dom/html2/HTMLLinkElement.java +../../classpath/external/w3c_dom/org/w3c/dom/html2/HTMLMapElement.java +../../classpath/external/w3c_dom/org/w3c/dom/html2/HTMLMenuElement.java +../../classpath/external/w3c_dom/org/w3c/dom/html2/HTMLMetaElement.java +../../classpath/external/w3c_dom/org/w3c/dom/html2/HTMLModElement.java +../../classpath/external/w3c_dom/org/w3c/dom/html2/HTMLObjectElement.java +../../classpath/external/w3c_dom/org/w3c/dom/html2/HTMLOListElement.java +../../classpath/external/w3c_dom/org/w3c/dom/html2/HTMLOptGroupElement.java +../../classpath/external/w3c_dom/org/w3c/dom/html2/HTMLOptionElement.java +../../classpath/external/w3c_dom/org/w3c/dom/html2/HTMLOptionsCollection.java +../../classpath/external/w3c_dom/org/w3c/dom/html2/HTMLParagraphElement.java +../../classpath/external/w3c_dom/org/w3c/dom/html2/HTMLParamElement.java +../../classpath/external/w3c_dom/org/w3c/dom/html2/HTMLPreElement.java +../../classpath/external/w3c_dom/org/w3c/dom/html2/HTMLQuoteElement.java +../../classpath/external/w3c_dom/org/w3c/dom/html2/HTMLScriptElement.java +../../classpath/external/w3c_dom/org/w3c/dom/html2/HTMLSelectElement.java +../../classpath/external/w3c_dom/org/w3c/dom/html2/HTMLStyleElement.java +../../classpath/external/w3c_dom/org/w3c/dom/html2/HTMLTableCaptionElement.java +../../classpath/external/w3c_dom/org/w3c/dom/html2/HTMLTableCellElement.java +../../classpath/external/w3c_dom/org/w3c/dom/html2/HTMLTableColElement.java +../../classpath/external/w3c_dom/org/w3c/dom/html2/HTMLTableElement.java +../../classpath/external/w3c_dom/org/w3c/dom/html2/HTMLTableRowElement.java +../../classpath/external/w3c_dom/org/w3c/dom/html2/HTMLTableSectionElement.java +../../classpath/external/w3c_dom/org/w3c/dom/html2/HTMLTextAreaElement.java +../../classpath/external/w3c_dom/org/w3c/dom/html2/HTMLTitleElement.java +../../classpath/external/w3c_dom/org/w3c/dom/html2/HTMLUListElement.java +../../classpath/external/w3c_dom/org/w3c/dom/ls/DOMImplementationLS.java +../../classpath/external/w3c_dom/org/w3c/dom/ls/LSException.java +../../classpath/external/w3c_dom/org/w3c/dom/ls/LSInput.java +../../classpath/external/w3c_dom/org/w3c/dom/ls/LSLoadEvent.java +../../classpath/external/w3c_dom/org/w3c/dom/ls/LSOutput.java +../../classpath/external/w3c_dom/org/w3c/dom/ls/LSParser.java +../../classpath/external/w3c_dom/org/w3c/dom/ls/LSParserFilter.java +../../classpath/external/w3c_dom/org/w3c/dom/ls/LSProgressEvent.java +../../classpath/external/w3c_dom/org/w3c/dom/ls/LSResourceResolver.java +../../classpath/external/w3c_dom/org/w3c/dom/ls/LSSerializer.java +../../classpath/external/w3c_dom/org/w3c/dom/ls/LSSerializerFilter.java +../../classpath/external/w3c_dom/org/w3c/dom/ranges/DocumentRange.java +../../classpath/external/w3c_dom/org/w3c/dom/ranges/Range.java +../../classpath/external/w3c_dom/org/w3c/dom/ranges/RangeException.java +../../classpath/external/w3c_dom/org/w3c/dom/stylesheets/DocumentStyle.java +../../classpath/external/w3c_dom/org/w3c/dom/stylesheets/LinkStyle.java +../../classpath/external/w3c_dom/org/w3c/dom/stylesheets/MediaList.java +../../classpath/external/w3c_dom/org/w3c/dom/stylesheets/StyleSheet.java +../../classpath/external/w3c_dom/org/w3c/dom/stylesheets/StyleSheetList.java +../../classpath/external/w3c_dom/org/w3c/dom/traversal/DocumentTraversal.java +../../classpath/external/w3c_dom/org/w3c/dom/traversal/NodeFilter.java +../../classpath/external/w3c_dom/org/w3c/dom/traversal/NodeIterator.java +../../classpath/external/w3c_dom/org/w3c/dom/traversal/TreeWalker.java +../../classpath/external/w3c_dom/org/w3c/dom/views/AbstractView.java +../../classpath/external/w3c_dom/org/w3c/dom/views/DocumentView.java +../../classpath/external/w3c_dom/org/w3c/dom/xpath/XPathEvaluator.java +../../classpath/external/w3c_dom/org/w3c/dom/xpath/XPathException.java +../../classpath/external/w3c_dom/org/w3c/dom/xpath/XPathExpression.java +../../classpath/external/w3c_dom/org/w3c/dom/xpath/XPathNamespace.java +../../classpath/external/w3c_dom/org/w3c/dom/xpath/XPathNSResolver.java +../../classpath/external/w3c_dom/org/w3c/dom/xpath/XPathResult.java +../../classpath/gnu/xml/aelfred2/ContentHandler2.java +../../classpath/gnu/xml/aelfred2/JAXPFactory.java +../../classpath/gnu/xml/aelfred2/SAXDriver.java +../../classpath/gnu/xml/aelfred2/XmlParser.java +../../classpath/gnu/xml/aelfred2/XmlReader.java +../../classpath/gnu/xml/dom/Consumer.java +../../classpath/gnu/xml/dom/DomAttr.java +../../classpath/gnu/xml/dom/DomCDATA.java +../../classpath/gnu/xml/dom/DomCharacterData.java +../../classpath/gnu/xml/dom/DomComment.java +../../classpath/gnu/xml/dom/DomDoctype.java +../../classpath/gnu/xml/dom/DomDocument.java +../../classpath/gnu/xml/dom/DomDocumentBuilder.java +../../classpath/gnu/xml/dom/DomDocumentBuilderFactory.java +../../classpath/gnu/xml/dom/DomDocumentConfiguration.java +../../classpath/gnu/xml/dom/DomElement.java +../../classpath/gnu/xml/dom/DomEntity.java +../../classpath/gnu/xml/dom/DomEntityReference.java +../../classpath/gnu/xml/dom/DomEvent.java +../../classpath/gnu/xml/dom/DomEx.java +../../classpath/gnu/xml/dom/DomExtern.java +../../classpath/gnu/xml/dom/DomFragment.java +../../classpath/gnu/xml/dom/DomImpl.java +../../classpath/gnu/xml/dom/DomIterator.java +../../classpath/gnu/xml/dom/DomNamedNodeMap.java +../../classpath/gnu/xml/dom/DomNode.java +../../classpath/gnu/xml/dom/DomNodeIterator.java +../../classpath/gnu/xml/dom/DomNotation.java +../../classpath/gnu/xml/dom/DomNsNode.java +../../classpath/gnu/xml/dom/DomNSResolverContext.java +../../classpath/gnu/xml/dom/DomPI.java +../../classpath/gnu/xml/dom/DomText.java +../../classpath/gnu/xml/dom/DomXPathExpression.java +../../classpath/gnu/xml/dom/DomXPathNSResolver.java +../../classpath/gnu/xml/dom/DomXPathResult.java +../../classpath/gnu/xml/dom/DTDAttributeTypeInfo.java +../../classpath/gnu/xml/dom/DTDElementTypeInfo.java +../../classpath/gnu/xml/dom/ImplementationList.java +../../classpath/gnu/xml/dom/ImplementationSource.java +../../classpath/gnu/xml/dom/JAXPFactory.java +../../classpath/gnu/xml/dom/ls/DomLSEx.java +../../classpath/gnu/xml/dom/ls/DomLSInput.java +../../classpath/gnu/xml/dom/ls/DomLSOutput.java +../../classpath/gnu/xml/dom/ls/DomLSParser.java +../../classpath/gnu/xml/dom/ls/DomLSSerializer.java +../../classpath/gnu/xml/dom/ls/FilteredSAXEventSink.java +../../classpath/gnu/xml/dom/ls/ReaderInputStream.java +../../classpath/gnu/xml/dom/ls/SAXEventSink.java +../../classpath/gnu/xml/dom/ls/WriterOutputStream.java +../../classpath/gnu/xml/pipeline/CallFilter.java +../../classpath/gnu/xml/pipeline/DomConsumer.java +../../classpath/gnu/xml/pipeline/EventConsumer.java +../../classpath/gnu/xml/pipeline/EventFilter.java +../../classpath/gnu/xml/pipeline/LinkFilter.java +../../classpath/gnu/xml/pipeline/NSFilter.java +../../classpath/gnu/xml/pipeline/PipelineFactory.java +../../classpath/gnu/xml/pipeline/TeeConsumer.java +../../classpath/gnu/xml/pipeline/TextConsumer.java +../../classpath/gnu/xml/pipeline/ValidationConsumer.java +../../classpath/gnu/xml/pipeline/WellFormednessFilter.java +../../classpath/gnu/xml/pipeline/XIncludeFilter.java +../../classpath/gnu/xml/pipeline/XsltFilter.java +../../classpath/gnu/xml/transform/AbstractNumberNode.java +../../classpath/gnu/xml/transform/ApplyImportsNode.java +../../classpath/gnu/xml/transform/ApplyTemplatesNode.java +../../classpath/gnu/xml/transform/AttributeNode.java +../../classpath/gnu/xml/transform/AttributeSet.java +../../classpath/gnu/xml/transform/Bindings.java +../../classpath/gnu/xml/transform/CallTemplateNode.java +../../classpath/gnu/xml/transform/ChooseNode.java +../../classpath/gnu/xml/transform/CommentNode.java +../../classpath/gnu/xml/transform/CopyNode.java +../../classpath/gnu/xml/transform/CopyOfNode.java +../../classpath/gnu/xml/transform/CurrentFunction.java +../../classpath/gnu/xml/transform/DocumentFunction.java +../../classpath/gnu/xml/transform/DOMSourceLocator.java +../../classpath/gnu/xml/transform/ElementAvailableFunction.java +../../classpath/gnu/xml/transform/ElementNode.java +../../classpath/gnu/xml/transform/ErrorListenerErrorHandler.java +../../classpath/gnu/xml/transform/ForEachNode.java +../../classpath/gnu/xml/transform/FormatNumberFunction.java +../../classpath/gnu/xml/transform/FunctionAvailableFunction.java +../../classpath/gnu/xml/transform/GenerateIdFunction.java +../../classpath/gnu/xml/transform/IfNode.java +../../classpath/gnu/xml/transform/Key.java +../../classpath/gnu/xml/transform/KeyFunction.java +../../classpath/gnu/xml/transform/LiteralNode.java +../../classpath/gnu/xml/transform/MessageNode.java +../../classpath/gnu/xml/transform/NodeNumberNode.java +../../classpath/gnu/xml/transform/NumberNode.java +../../classpath/gnu/xml/transform/OtherwiseNode.java +../../classpath/gnu/xml/transform/ParameterNode.java +../../classpath/gnu/xml/transform/ProcessingInstructionNode.java +../../classpath/gnu/xml/transform/SAXSerializer.java +../../classpath/gnu/xml/transform/SortKey.java +../../classpath/gnu/xml/transform/StreamSerializer.java +../../classpath/gnu/xml/transform/Stylesheet.java +../../classpath/gnu/xml/transform/SystemPropertyFunction.java +../../classpath/gnu/xml/transform/Template.java +../../classpath/gnu/xml/transform/TemplateNode.java +../../classpath/gnu/xml/transform/TemplatesImpl.java +../../classpath/gnu/xml/transform/TextNode.java +../../classpath/gnu/xml/transform/TransformerFactoryImpl.java +../../classpath/gnu/xml/transform/TransformerImpl.java +../../classpath/gnu/xml/transform/TransformerOutputProperties.java +../../classpath/gnu/xml/transform/UnparsedEntityUriFunction.java +../../classpath/gnu/xml/transform/URIResolverEntityResolver.java +../../classpath/gnu/xml/transform/ValueOfNode.java +../../classpath/gnu/xml/transform/WhenNode.java +../../classpath/gnu/xml/transform/WithParam.java +../../classpath/gnu/xml/transform/XSLComparator.java +../../classpath/gnu/xml/transform/XSLURIResolver.java +../../classpath/gnu/xml/util/DomParser.java +../../classpath/gnu/xml/util/DoParse.java +../../classpath/gnu/xml/util/Resolver.java +../../classpath/gnu/xml/util/SAXNullTransformerFactory.java +../../classpath/gnu/xml/util/XCat.java +../../classpath/gnu/xml/util/XHTMLWriter.java +../../classpath/gnu/xml/util/XMLWriter.java +../../classpath/gnu/xml/xpath/AndExpr.java +../../classpath/gnu/xml/xpath/ArithmeticExpr.java +../../classpath/gnu/xml/xpath/BooleanFunction.java +../../classpath/gnu/xml/xpath/CeilingFunction.java +../../classpath/gnu/xml/xpath/ConcatFunction.java +../../classpath/gnu/xml/xpath/Constant.java +../../classpath/gnu/xml/xpath/ContainsFunction.java +../../classpath/gnu/xml/xpath/CountFunction.java +../../classpath/gnu/xml/xpath/DocumentOrderComparator.java +../../classpath/gnu/xml/xpath/EqualityExpr.java +../../classpath/gnu/xml/xpath/Expr.java +../../classpath/gnu/xml/xpath/FalseFunction.java +../../classpath/gnu/xml/xpath/FloorFunction.java +../../classpath/gnu/xml/xpath/Function.java +../../classpath/gnu/xml/xpath/FunctionCall.java +../../classpath/gnu/xml/xpath/IdFunction.java +../../classpath/gnu/xml/xpath/LangFunction.java +../../classpath/gnu/xml/xpath/LastFunction.java +../../classpath/gnu/xml/xpath/LocalNameFunction.java +../../classpath/gnu/xml/xpath/NameFunction.java +../../classpath/gnu/xml/xpath/NamespaceTest.java +../../classpath/gnu/xml/xpath/NamespaceUriFunction.java +../../classpath/gnu/xml/xpath/NameTest.java +../../classpath/gnu/xml/xpath/NegativeExpr.java +../../classpath/gnu/xml/xpath/NodeTypeTest.java +../../classpath/gnu/xml/xpath/NormalizeSpaceFunction.java +../../classpath/gnu/xml/xpath/NotFunction.java +../../classpath/gnu/xml/xpath/NumberFunction.java +../../classpath/gnu/xml/xpath/OrExpr.java +../../classpath/gnu/xml/xpath/ParenthesizedExpr.java +../../classpath/gnu/xml/xpath/Path.java +../../classpath/gnu/xml/xpath/Pattern.java +../../classpath/gnu/xml/xpath/PositionFunction.java +../../classpath/gnu/xml/xpath/Predicate.java +../../classpath/gnu/xml/xpath/RelationalExpr.java +../../classpath/gnu/xml/xpath/Root.java +../../classpath/gnu/xml/xpath/RoundFunction.java +../../classpath/gnu/xml/xpath/Selector.java +../../classpath/gnu/xml/xpath/StartsWithFunction.java +../../classpath/gnu/xml/xpath/Steps.java +../../classpath/gnu/xml/xpath/StringFunction.java +../../classpath/gnu/xml/xpath/StringLengthFunction.java +../../classpath/gnu/xml/xpath/SubstringAfterFunction.java +../../classpath/gnu/xml/xpath/SubstringBeforeFunction.java +../../classpath/gnu/xml/xpath/SubstringFunction.java +../../classpath/gnu/xml/xpath/SumFunction.java +../../classpath/gnu/xml/xpath/Test.java +../../classpath/gnu/xml/xpath/TranslateFunction.java +../../classpath/gnu/xml/xpath/TrueFunction.java +../../classpath/gnu/xml/xpath/UnionExpr.java +../../classpath/gnu/xml/xpath/VariableReference.java +../../classpath/gnu/xml/xpath/XPathFactoryImpl.java +../../classpath/gnu/xml/xpath/XPathImpl.java +../../classpath/gnu/xml/xpath/XPathParser.java +../../classpath/gnu/xml/xpath/XPathTokenizer.java +../../classpath/javax/xml/XMLConstants.java +../../classpath/javax/xml/datatype/DatatypeConfigurationException.java +../../classpath/javax/xml/datatype/DatatypeConstants.java +../../classpath/javax/xml/datatype/DatatypeFactory.java +../../classpath/javax/xml/datatype/Duration.java +../../classpath/javax/xml/datatype/XMLGregorianCalendar.java +../../classpath/javax/xml/namespace/NamespaceContext.java +../../classpath/javax/xml/namespace/QName.java +../../classpath/javax/xml/parsers/DocumentBuilder.java +../../classpath/javax/xml/parsers/DocumentBuilderFactory.java +../../classpath/javax/xml/parsers/FactoryConfigurationError.java +../../classpath/javax/xml/parsers/ParserConfigurationException.java +../../classpath/javax/xml/parsers/SAXParser.java +../../classpath/javax/xml/parsers/SAXParserFactory.java +../../classpath/javax/xml/transform/ErrorListener.java +../../classpath/javax/xml/transform/OutputKeys.java +../../classpath/javax/xml/transform/Result.java +../../classpath/javax/xml/transform/Source.java +../../classpath/javax/xml/transform/SourceLocator.java +../../classpath/javax/xml/transform/Templates.java +../../classpath/javax/xml/transform/Transformer.java +../../classpath/javax/xml/transform/TransformerConfigurationException.java +../../classpath/javax/xml/transform/TransformerException.java +../../classpath/javax/xml/transform/TransformerFactory.java +../../classpath/javax/xml/transform/TransformerFactoryConfigurationError.java +../../classpath/javax/xml/transform/URIResolver.java +../../classpath/javax/xml/transform/dom/DOMLocator.java +../../classpath/javax/xml/transform/dom/DOMResult.java +../../classpath/javax/xml/transform/dom/DOMSource.java +../../classpath/javax/xml/transform/sax/SAXResult.java +../../classpath/javax/xml/transform/sax/SAXSource.java +../../classpath/javax/xml/transform/sax/SAXTransformerFactory.java +../../classpath/javax/xml/transform/sax/TemplatesHandler.java +../../classpath/javax/xml/transform/sax/TransformerHandler.java +../../classpath/javax/xml/transform/stream/StreamResult.java +../../classpath/javax/xml/transform/stream/StreamSource.java +../../classpath/javax/xml/validation/Schema.java +../../classpath/javax/xml/validation/SchemaFactory.java +../../classpath/javax/xml/validation/TypeInfoProvider.java +../../classpath/javax/xml/validation/Validator.java +../../classpath/javax/xml/validation/ValidatorHandler.java +../../classpath/javax/xml/xpath/XPath.java +../../classpath/javax/xml/xpath/XPathConstants.java +../../classpath/javax/xml/xpath/XPathException.java +../../classpath/javax/xml/xpath/XPathExpression.java +../../classpath/javax/xml/xpath/XPathExpressionException.java +../../classpath/javax/xml/xpath/XPathFactory.java +../../classpath/javax/xml/xpath/XPathFactoryConfigurationException.java +../../classpath/javax/xml/xpath/XPathFunction.java +../../classpath/javax/xml/xpath/XPathFunctionException.java +../../classpath/javax/xml/xpath/XPathFunctionResolver.java +../../classpath/javax/xml/xpath/XPathVariableResolver.java diff --git a/classpath/classpath.build b/classpath/classpath.build index 4ae099df..30ed2bbe 100644 --- a/classpath/classpath.build +++ b/classpath/classpath.build @@ -23,7 +23,7 @@ - + diff --git a/classpath/gnu/classpath/VMSystemProperties.java b/classpath/gnu/classpath/VMSystemProperties.java index eb96f909..087c95e6 100644 --- a/classpath/gnu/classpath/VMSystemProperties.java +++ b/classpath/gnu/classpath/VMSystemProperties.java @@ -10,6 +10,10 @@ public class VMSystemProperties static void preInit(Properties p) { + String[] culture = ((cli.System.String)(Object)cli.System.Globalization.CultureInfo.get_CurrentCulture().get_Name()).Split(new char[] { '-' }); + p.setProperty("user.language", culture[0]); + p.setProperty("user.region", culture.length > 1 ? culture[1] : ""); + p.setProperty("user.variant", culture.length > 2 ? culture[2] : ""); p.setProperty("java.version", "1.4"); p.setProperty("java.vendor", "Jeroen Frijters"); p.setProperty("java.vendor.url", "http://ikvm.net/"); diff --git a/classpath/java/lang/ObjectHelper.java b/classpath/java/lang/ObjectHelper.java deleted file mode 100644 index f4bbd9a9..00000000 --- a/classpath/java/lang/ObjectHelper.java +++ /dev/null @@ -1,55 +0,0 @@ -/* - Copyright (C) 2003 Jeroen Frijters - - This software is provided 'as-is', without any express or implied - warranty. In no event will the authors be held liable for any damages - arising from the use of this software. - - Permission is granted to anyone to use this software for any purpose, - including commercial applications, and to alter it and redistribute it - freely, subject to the following restrictions: - - 1. The origin of this software must not be misrepresented; you must not - claim that you wrote the original software. If you use this software - in a product, an acknowledgment in the product documentation would be - appreciated but is not required. - 2. Altered source versions must be plainly marked as such, and must not be - misrepresented as being the original software. - 3. This notice may not be removed or altered from any source distribution. - - Jeroen Frijters - jeroen@frijters.net - -*/ -package java.lang; - -class ObjectHelper -{ - private ObjectHelper() {} - - static void wait(Object o, long timeout, int nanos) - { - if(o == null) - { - throw new NullPointerException(); - } - if(timeout < 0 || nanos < 0 || nanos > 999999) - { - throw new IllegalArgumentException("argument out of range"); - } - if(timeout == 0 && nanos == 0) - { - cli.System.Threading.Monitor.Wait(o); - } - else - { - // TODO handle time span calculation overflow - cli.System.Threading.Monitor.Wait(o, new cli.System.TimeSpan(timeout * 10000 + (nanos + 99) / 100)); - } - } - - static String toStringSpecial(Object o) - { - return o.getClass().getName() + '@' + Integer.toHexString(o.hashCode()); - } -} diff --git a/classpath/java/lang/VMRuntime.java b/classpath/java/lang/VMRuntime.java index 20c658b0..a1d5721a 100644 --- a/classpath/java/lang/VMRuntime.java +++ b/classpath/java/lang/VMRuntime.java @@ -39,9 +39,6 @@ import cli.System.Diagnostics.ProcessStartInfo; */ final class VMRuntime { - // HACK ikvm.exe sets this field to pass the properties set on the command line - private static cli.System.Collections.Hashtable props; - /** * No instance is ever created. */ @@ -49,7 +46,7 @@ final class VMRuntime { } - static + static void enableShutdownHooks() { cli.System.AppDomain.get_CurrentDomain().add_ProcessExit(new cli.System.EventHandler(new cli.System.EventHandler.Method() { public void Invoke(Object sender, cli.System.EventArgs e) { @@ -311,8 +308,18 @@ final class VMRuntime public int waitFor() throws InterruptedException { - proc.WaitForExit(); - return proc.get_ExitCode(); + // to be interruptable we have to use polling + for(;;) + { + if(Thread.interrupted()) + { + throw new InterruptedException(); + } + if(proc.WaitForExit(100)) + { + return proc.get_ExitCode(); + } + } } public int exitValue() diff --git a/classpath/java/lang/VMThread.java b/classpath/java/lang/VMThread.java index 7878da2c..0fec2557 100644 --- a/classpath/java/lang/VMThread.java +++ b/classpath/java/lang/VMThread.java @@ -12,7 +12,10 @@ final class VMThread // Note: when this thread dies, this reference is *not* cleared volatile Thread thread; private volatile boolean running; - private volatile cli.System.Threading.Thread joinThread; + private volatile boolean interruptableWait; + private volatile boolean interruptPending; + private VMThread firstJoinWaiter; + private VMThread nextJoinWaiter; private VMThread(Thread thread) { @@ -75,6 +78,44 @@ final class VMThread } } + private synchronized void addJoinWaiter(VMThread waiter) + { + if(waiter != this) + { + waiter.nextJoinWaiter = firstJoinWaiter; + firstJoinWaiter = waiter; + } + } + + private synchronized void removeJoinWaiter(VMThread waiter) + { + if(waiter == this) + { + // we never link ourself + } + else if(firstJoinWaiter == waiter) + { + firstJoinWaiter = waiter.nextJoinWaiter; + waiter.nextJoinWaiter = null; + } + else + { + VMThread prev = firstJoinWaiter; + VMThread curr = prev.nextJoinWaiter; + while(curr != null) + { + if(curr == waiter) + { + prev.nextJoinWaiter = waiter.nextJoinWaiter; + waiter.nextJoinWaiter = null; + break; + } + prev = curr; + curr = curr.nextJoinWaiter; + } + } + } + static void jniDetach() { VMThread vmthread = Thread.currentThread().vmThread; @@ -82,10 +123,13 @@ final class VMThread { vmthread.cleanup(); cli.System.Threading.Thread.SetData(localDataStoreSlot, null); - if(vmthread.joinThread != null) - { - vmthread.joinThread.Interrupt(); - } + VMThread joinWaiter = vmthread.firstJoinWaiter; + while(joinWaiter != null) + { + VMThread next = joinWaiter.nextJoinWaiter; + joinWaiter.interrupt(); + joinWaiter = next; + } } } @@ -157,47 +201,43 @@ final class VMThread void join(long ms, int ns) throws InterruptedException { - cli.System.Threading.Thread nativeThread; - synchronized(this) + cli.System.Threading.Thread nativeThread = (cli.System.Threading.Thread)nativeThreadReference.get_Target(); + if(nativeThread == null) { - nativeThread = (cli.System.Threading.Thread)nativeThreadReference.get_Target(); - if(nativeThread == null) - { - return; - } - joinThread = cli.System.Threading.Thread.get_CurrentThread(); + return; } try { - if(false) throw new InterruptedException(); + VMThread current = currentThread().vmThread; + enterInterruptableWait(); try { - if(ms == 0 && ns == 0) - { - nativeThread.Join(); - } - else - { - // if nanoseconds are specified, round up to one millisecond - if(ns != 0) + addJoinWaiter(current); + if(thread.vmThread != null) + { + if(ms == 0 && ns == 0) { - nativeThread.Join(1); + nativeThread.Join(); } - for(long iter = ms / Integer.MAX_VALUE; iter != 0; iter--) + else { - nativeThread.Join(Integer.MAX_VALUE); + // if nanoseconds are specified, round up to one millisecond + if(ns != 0) + { + nativeThread.Join(1); + } + for(long iter = ms / Integer.MAX_VALUE; iter != 0; iter--) + { + nativeThread.Join(Integer.MAX_VALUE); + } + nativeThread.Join((int)(ms % Integer.MAX_VALUE)); } - nativeThread.Join((int)(ms % Integer.MAX_VALUE)); - } + } } finally { - synchronized(this) - { - joinThread = null; - // make sure that any pending interrupts (caused by the thread dying) are handled - cli.System.Threading.Thread.Sleep(0); - } + removeJoinWaiter(current); + leaveInterruptableWait(); } } catch(InterruptedException x) @@ -253,41 +293,78 @@ final class VMThread } } - void interrupt() + private static void enterInterruptableWait() throws InterruptedException { - cli.System.Threading.Thread nativeThread = (cli.System.Threading.Thread)nativeThreadReference.get_Target(); - if(nativeThread != null) - { - nativeThread.Interrupt(); - } + VMThread vmthread = currentThread().vmThread; + synchronized(vmthread) + { + if(vmthread.interruptPending) + { + vmthread.interruptPending = false; + throw new InterruptedException(); + } + vmthread.interruptableWait = true; + } + } + + private static void leaveInterruptableWait() throws InterruptedException + { + cli.System.Threading.ThreadInterruptedException dotnetInterrupt = null; + for(;;) + { + try + { + if(false) throw new cli.System.Threading.ThreadInterruptedException(); + VMThread vmthread = currentThread().vmThread; + synchronized(vmthread) + { + vmthread.interruptableWait = false; + if(vmthread.interruptPending) + { + vmthread.interruptPending = false; + throw new InterruptedException(); + } + } + break; + } + catch(cli.System.Threading.ThreadInterruptedException x) + { + dotnetInterrupt = x; + } + } + if(dotnetInterrupt != null) + { + VMClass.throwException(dotnetInterrupt); + } + } + + synchronized void interrupt() + { + interruptPending = true; + if(interruptableWait) + { + cli.System.Threading.Thread nativeThread = (cli.System.Threading.Thread)nativeThreadReference.get_Target(); + if(nativeThread != null) + { + nativeThread.Interrupt(); + } + } + } + + static boolean interrupted() + { + VMThread thread = currentThread().vmThread; + synchronized(thread) + { + boolean state = thread.interruptPending; + thread.interruptPending = false; + return state; + } } boolean isInterrupted() { - // NOTE special case for current thread, because then we can use the .NET interrupted status - if(thread == currentThread()) - { - try - { - if(false) throw new InterruptedException(); - cli.System.Threading.Thread.Sleep(0); - return false; - } - catch(InterruptedException x) - { - // because we "consumed" the interrupt, we need to interrupt ourself again - cli.System.Threading.Thread nativeThread = (cli.System.Threading.Thread)nativeThreadReference.get_Target(); - if(nativeThread != null) - { - nativeThread.Interrupt(); - } - return true; - } - } - // HACK since quering the interrupted state of another thread is inherently racy, I hope - // we can get away with always returning false, because I have no idea how to obtain this - // information from the .NET runtime - return false; + return interruptPending; } void suspend() @@ -436,16 +513,7 @@ final class VMThread static void yield() { - try - { - if(false) throw new InterruptedException(); - cli.System.Threading.Thread.Sleep(0); - } - catch(InterruptedException x) - { - // since we "consumed" the interrupt, we have to interrupt ourself again - cli.System.Threading.Thread.get_CurrentThread().Interrupt(); - } + cli.System.Threading.Thread.Sleep(0); } static void sleep(long ms, int ns) throws InterruptedException @@ -458,30 +526,24 @@ final class VMThread } else { - // if nanoseconds are specified, round up to one millisecond - if(ns != 0) - { - cli.System.Threading.Thread.Sleep(1); - } - for(long iter = ms / Integer.MAX_VALUE; iter != 0; iter--) - { - cli.System.Threading.Thread.Sleep(Integer.MAX_VALUE); - } - cli.System.Threading.Thread.Sleep((int)(ms % Integer.MAX_VALUE)); - } - } - - static boolean interrupted() - { - try - { - if(false) throw new InterruptedException(); - cli.System.Threading.Thread.Sleep(0); - return false; - } - catch(InterruptedException x) - { - return true; + enterInterruptableWait(); + try + { + // if nanoseconds are specified, round up to one millisecond + if(ns != 0) + { + cli.System.Threading.Thread.Sleep(1); + } + for(long iter = ms / Integer.MAX_VALUE; iter != 0; iter--) + { + cli.System.Threading.Thread.Sleep(Integer.MAX_VALUE); + } + cli.System.Threading.Thread.Sleep((int)(ms % Integer.MAX_VALUE)); + } + finally + { + leaveInterruptableWait(); + } } } @@ -504,4 +566,33 @@ final class VMThread return false; } } + + // this implements java.lang.Object.wait(long timeout, int nanos) (via map.xml) + static void objectWait(Object o, long timeout, int nanos) throws InterruptedException + { + if(o == null) + { + throw new NullPointerException(); + } + if(timeout < 0 || nanos < 0 || nanos > 999999) + { + throw new IllegalArgumentException("argument out of range"); + } + enterInterruptableWait(); + try + { + if((timeout == 0 && nanos == 0) || timeout > 922337203685476L) + { + cli.System.Threading.Monitor.Wait(o); + } + else + { + cli.System.Threading.Monitor.Wait(o, new cli.System.TimeSpan(timeout * 10000 + (nanos + 99) / 100)); + } + } + finally + { + leaveInterruptableWait(); + } + } } diff --git a/classpath/map.xml b/classpath/map.xml index 1de089e3..b09b14dd 100644 --- a/classpath/map.xml +++ b/classpath/map.xml @@ -44,9 +44,10 @@ - - - + + + + @@ -56,7 +57,7 @@ - + @@ -66,7 +67,7 @@ - + @@ -103,11 +104,24 @@ + + + + + + + + + + + + + - + @@ -115,7 +129,7 @@ - +
- +
@@ -934,7 +948,7 @@