You can subscribe to this list here.
2009 |
Jan
|
Feb
|
Mar
|
Apr
|
May
|
Jun
|
Jul
(29) |
Aug
(75) |
Sep
(32) |
Oct
(147) |
Nov
(31) |
Dec
(49) |
---|---|---|---|---|---|---|---|---|---|---|---|---|
2010 |
Jan
(46) |
Feb
(35) |
Mar
(148) |
Apr
(33) |
May
(53) |
Jun
(46) |
Jul
(60) |
Aug
(44) |
Sep
(135) |
Oct
(23) |
Nov
(68) |
Dec
(42) |
2011 |
Jan
(94) |
Feb
(55) |
Mar
(114) |
Apr
(78) |
May
(64) |
Jun
(10) |
Jul
(31) |
Aug
(2) |
Sep
(25) |
Oct
(13) |
Nov
(8) |
Dec
(24) |
2012 |
Jan
(5) |
Feb
(33) |
Mar
(31) |
Apr
(19) |
May
(24) |
Jun
(23) |
Jul
(14) |
Aug
(15) |
Sep
(12) |
Oct
(3) |
Nov
(4) |
Dec
(19) |
2013 |
Jan
(8) |
Feb
(20) |
Mar
(4) |
Apr
(2) |
May
(1) |
Jun
(2) |
Jul
|
Aug
(1) |
Sep
(2) |
Oct
(1) |
Nov
(4) |
Dec
|
2014 |
Jan
|
Feb
|
Mar
(6) |
Apr
(1) |
May
|
Jun
|
Jul
|
Aug
|
Sep
|
Oct
|
Nov
|
Dec
|
2015 |
Jan
(7) |
Feb
|
Mar
|
Apr
|
May
|
Jun
|
Jul
|
Aug
|
Sep
|
Oct
|
Nov
|
Dec
(6) |
2016 |
Jan
|
Feb
|
Mar
|
Apr
|
May
(3) |
Jun
|
Jul
|
Aug
|
Sep
|
Oct
|
Nov
|
Dec
|
2019 |
Jan
|
Feb
|
Mar
|
Apr
|
May
(2) |
Jun
|
Jul
|
Aug
|
Sep
|
Oct
|
Nov
|
Dec
|
From: Arno P. <ar...@pu...> - 2009-11-20 07:04:32
|
can you please send the original Java source as well? Generally, the NSAutoReleasePool on the device is more aggressive in reclaiming memory than the one on the desktop. That in my experience sometimes explains the different behavior on the desktop and the device. What most likely happens is that an object is dealloced but later still being referenced. These are called zombie objects. You can track those in Objective-C by setting a certain property. In Xcode, go to Project > Edit Active Executable. Then add another variable. Call it 'NSZombieEnabled' and set its value to 'YES'. That should give you a clue which object it is trying to access that has already been destroyed (assuming that this is the problem). Arno Markus Heberling wrote: > Hi again, > > got another crash. This time it's really weird I think. It works on the Simulator, but crashes on the device. Problem is, I can't construct an easy Test case that demonstrates it... > > //_stack has a size of 6 > _stack[_sp++].i = _op1.i; > //sp==6 here > _stack[_sp++].o = _locals[0].o; > //sp==7 here on simulator, but on the iPhone its some value like 3390961 > _op1.o = _stack[--_sp].o; > //crash here on the device obviously. If I put a breakpoint here and change _sp to 7, all is fine. > > If I change the size of _stack to 7, its also not crashing. > > But changing it to > _stack[_sp++].i = _op1.i; > _stack[_sp].o = _locals[0].o; > _op1.o = _stack[_sp].o; > does crash. > > I have no clue what is causing it. Maybe you can see something or have an idea. As I daid I couldn't construct a simple test, so I here is the complete generated method: > > - (void) run__ > { > XMLVMElem _stack[6]; > XMLVMElem _locals[4]; > int _sp = 0; > XMLVMElem _op1, _op2, _op3; > NSAutoreleasePool* _pool = [[NSAutoreleasePool alloc] init]; > _locals[0].o = self; > label4:; > _stack[_sp++].o = _locals[0].o; > _op1.o = _stack[--_sp].o; > _op2.o = [((javax_microedition_lcdui_Display_TickerPaintTask*) _op1.o) _GET_this_0]; > _stack[_sp++].o = _op2.o; > _sp -= 1; > _op1.o = [javax_microedition_lcdui_Display access$000___javax_microedition_lcdui_Display:_stack[_sp + 0].o]; > [_op1.o autorelease]; > _stack[_sp++].o = _op1.o; > _op1.o = _stack[--_sp].o; > if (_op1.o == [NSNull null]) goto label0; > _stack[_sp++].o = _locals[0].o; > _op1.o = _stack[--_sp].o; > _op2.o = [((javax_microedition_lcdui_Display_TickerPaintTask*) _op1.o) _GET_this_0]; > _stack[_sp++].o = _op2.o; > _sp -= 1; > _op1.o = [javax_microedition_lcdui_Display access$000___javax_microedition_lcdui_Display:_stack[_sp + 0].o]; > [_op1.o autorelease]; > _stack[_sp++].o = _op1.o; > _sp -= 1; > _op1.o = [((javax_microedition_lcdui_Displayable*) _stack[_sp].o) getTicker__]; > [_op1.o autorelease]; > _stack[_sp++].o = _op1.o; > _op1.o = _stack[--_sp].o; > _locals[1].o = _op1.o; > label6:; > _stack[_sp++].o = _locals[1].o; > _op1.o = _stack[--_sp].o; > if (_op1.o == [NSNull null]) goto label0; > _stack[_sp++].o = _locals[1].o; > _op1 = _stack[_sp - 1]; > _stack[_sp++] = _op1; > _op1.o = _stack[--_sp].o; > _locals[2].o = _op1.o; > _op1.o = _stack[--_sp].o; > @synchronized(_op1.o) { > } > @try { > _stack[_sp++].o = _locals[1].o; > _op1.o = _stack[--_sp].o; > _op2.i = [((javax_microedition_lcdui_Ticker*) _op1.o) _GET_resetTextPosTo]; > _stack[_sp++].i = _op2.i; > _stack[_sp++].i = -1; > _op2.i = _stack[--_sp].i; > _op1.i = _stack[--_sp].i; > if (_op1.i == _op2.i) goto label2; > _stack[_sp++].o = _locals[1].o; > _stack[_sp++].o = _locals[1].o; > _op1.o = _stack[--_sp].o; > _op2.i = [((javax_microedition_lcdui_Ticker*) _op1.o) _GET_resetTextPosTo]; > _stack[_sp++].i = _op2.i; > _op1.i = _stack[--_sp].i; > _op2.o = _stack[--_sp].o; > [((javax_microedition_lcdui_Ticker*) _op2.o) _PUT_textPos: _op1.i]; > _stack[_sp++].o = _locals[1].o; > _stack[_sp++].i = -1; > _op1.i = _stack[--_sp].i; > _op2.o = _stack[--_sp].o; > [((javax_microedition_lcdui_Ticker*) _op2.o) _PUT_resetTextPosTo: _op1.i]; > label2:; > _stack[_sp++].o = _locals[1].o; > _op1 = _stack[_sp - 1]; > _stack[_sp++] = _op1; > _op1.o = _stack[--_sp].o; > _op2.i = [((javax_microedition_lcdui_Ticker*) _op1.o) _GET_textPos]; > _stack[_sp++].i = _op2.i; > _op1.i = [javax_microedition_lcdui_Ticker _GET_PAINT_MOVE]; > _stack[_sp++].i = _op1.i; > _op2.i = _stack[--_sp].i; > _op1.i = _stack[--_sp].i; > _stack[_sp++].i = _op1.i - _op2.i; _op1.i = _stack[--_sp].i; > _op2.o = _stack[--_sp].o; > [((javax_microedition_lcdui_Ticker*) _op2.o) _PUT_textPos: _op1.i]; > _stack[_sp++].o = _locals[2].o; > } @catch (java_lang_Exception* _ex) { > _stack[_sp++].o = _ex; > goto label8; > } > goto label3; > label8:; > @try { > _op1.o = _stack[--_sp].o; > _locals[3].o = _op1.o; > _stack[_sp++].o = _locals[2].o; > } @catch (java_lang_Exception* _ex) { > _stack[_sp++].o = _ex; > goto label8; > } > _stack[_sp++].o = _locals[3].o; > _op1.o = _stack[--_sp].o; > @throw _op1.o; > label3:; > _stack[_sp++].o = _locals[0].o; > _op1.o = _stack[--_sp].o; > _op2.o = [((javax_microedition_lcdui_Display_TickerPaintTask*) _op1.o) _GET_this_0]; > _stack[_sp++].o = _op2.o; > _stack[_sp++].o = _locals[0].o; > _op1.o = _stack[--_sp].o; > _op2.o = [((javax_microedition_lcdui_Display_TickerPaintTask*) _op1.o) _GET_this_0]; > _stack[_sp++].o = _op2.o; > _sp -= 1; > _op1.o = [javax_microedition_lcdui_Display access$000___javax_microedition_lcdui_Display:_stack[_sp + 0].o]; > [_op1.o autorelease]; > _stack[_sp++].o = _op1.o; > _stack[_sp++].i = 0; > _stack[_sp++].i = 0; > _stack[_sp++].o = _locals[0].o; > _op1.o = _stack[--_sp].o; > _op2.o = [((javax_microedition_lcdui_Display_TickerPaintTask*) _op1.o) _GET_this_0]; > _stack[_sp++].o = _op2.o; > _sp -= 1; > _op1.o = [javax_microedition_lcdui_Display access$000___javax_microedition_lcdui_Display:_stack[_sp + 0].o]; > [_op1.o autorelease]; > _stack[_sp++].o = _op1.o; > _sp -= 1; > _op1.i = [((javax_microedition_lcdui_Displayable*) _stack[_sp].o) getWidth__]; > //start > _stack[_sp++].i = _op1.i; > _stack[_sp++].o = _locals[0].o; > _op1.o = _stack[--_sp].o; > //end > _op2.o = [((javax_microedition_lcdui_Display_TickerPaintTask*) _op1.o) _GET_this_0]; > _stack[_sp++].o = _op2.o; > _sp -= 1; > _op1.o = [javax_microedition_lcdui_Display access$000___javax_microedition_lcdui_Display:_stack[_sp + 0].o]; > [_op1.o autorelease]; > _stack[_sp++].o = _op1.o; > _sp -= 1; > _op1.i = [((javax_microedition_lcdui_Displayable*) _stack[_sp].o) getHeight__]; > _stack[_sp++].i = _op1.i; > _sp -= 6; > [((javax_microedition_lcdui_Display*) _stack[_sp].o) repaint___javax_microedition_lcdui_Displayable_int_int_int_int:_stack[_sp + 1].o:_stack[_sp + 2].i:_stack[_sp + 3].i:_stack[_sp + 4].i:_stack[_sp + 5].i]; > label0:; > [_pool release]; > return; > } > > > > ------------------------------------------------------------------------ > > ------------------------------------------------------------------------------ > Let Crystal Reports handle the reporting - Free Crystal Reports 2008 30-Day > trial. Simplify your report design, integration and deployment - and focus on > what you do best, core application coding. Discover what's new with > Crystal Reports now. http://p.sf.net/sfu/bobj-july > > > ------------------------------------------------------------------------ > > _______________________________________________ > xmlvm-users mailing list > xml...@li... > https://lists.sourceforge.net/lists/listinfo/xmlvm-users |
From: Markus H. <ma...@ti...> - 2009-11-20 00:25:34
|
Hi again, got another crash. This time it's really weird I think. It works on the Simulator, but crashes on the device. Problem is, I can't construct an easy Test case that demonstrates it... //_stack has a size of 6 _stack[_sp++].i = _op1.i; //sp==6 here _stack[_sp++].o = _locals[0].o; //sp==7 here on simulator, but on the iPhone its some value like 3390961 _op1.o = _stack[--_sp].o; //crash here on the device obviously. If I put a breakpoint here and change _sp to 7, all is fine. If I change the size of _stack to 7, its also not crashing. But changing it to _stack[_sp++].i = _op1.i; _stack[_sp].o = _locals[0].o; _op1.o = _stack[_sp].o; does crash. I have no clue what is causing it. Maybe you can see something or have an idea. As I daid I couldn't construct a simple test, so I here is the complete generated method: - (void) run__ { XMLVMElem _stack[6]; XMLVMElem _locals[4]; int _sp = 0; XMLVMElem _op1, _op2, _op3; NSAutoreleasePool* _pool = [[NSAutoreleasePool alloc] init]; _locals[0].o = self; label4:; _stack[_sp++].o = _locals[0].o; _op1.o = _stack[--_sp].o; _op2.o = [((javax_microedition_lcdui_Display_TickerPaintTask*) _op1.o) _GET_this_0]; _stack[_sp++].o = _op2.o; _sp -= 1; _op1.o = [javax_microedition_lcdui_Display access$000___javax_microedition_lcdui_Display:_stack[_sp + 0].o]; [_op1.o autorelease]; _stack[_sp++].o = _op1.o; _op1.o = _stack[--_sp].o; if (_op1.o == [NSNull null]) goto label0; _stack[_sp++].o = _locals[0].o; _op1.o = _stack[--_sp].o; _op2.o = [((javax_microedition_lcdui_Display_TickerPaintTask*) _op1.o) _GET_this_0]; _stack[_sp++].o = _op2.o; _sp -= 1; _op1.o = [javax_microedition_lcdui_Display access$000___javax_microedition_lcdui_Display:_stack[_sp + 0].o]; [_op1.o autorelease]; _stack[_sp++].o = _op1.o; _sp -= 1; _op1.o = [((javax_microedition_lcdui_Displayable*) _stack[_sp].o) getTicker__]; [_op1.o autorelease]; _stack[_sp++].o = _op1.o; _op1.o = _stack[--_sp].o; _locals[1].o = _op1.o; label6:; _stack[_sp++].o = _locals[1].o; _op1.o = _stack[--_sp].o; if (_op1.o == [NSNull null]) goto label0; _stack[_sp++].o = _locals[1].o; _op1 = _stack[_sp - 1]; _stack[_sp++] = _op1; _op1.o = _stack[--_sp].o; _locals[2].o = _op1.o; _op1.o = _stack[--_sp].o; @synchronized(_op1.o) { } @try { _stack[_sp++].o = _locals[1].o; _op1.o = _stack[--_sp].o; _op2.i = [((javax_microedition_lcdui_Ticker*) _op1.o) _GET_resetTextPosTo]; _stack[_sp++].i = _op2.i; _stack[_sp++].i = -1; _op2.i = _stack[--_sp].i; _op1.i = _stack[--_sp].i; if (_op1.i == _op2.i) goto label2; _stack[_sp++].o = _locals[1].o; _stack[_sp++].o = _locals[1].o; _op1.o = _stack[--_sp].o; _op2.i = [((javax_microedition_lcdui_Ticker*) _op1.o) _GET_resetTextPosTo]; _stack[_sp++].i = _op2.i; _op1.i = _stack[--_sp].i; _op2.o = _stack[--_sp].o; [((javax_microedition_lcdui_Ticker*) _op2.o) _PUT_textPos: _op1.i]; _stack[_sp++].o = _locals[1].o; _stack[_sp++].i = -1; _op1.i = _stack[--_sp].i; _op2.o = _stack[--_sp].o; [((javax_microedition_lcdui_Ticker*) _op2.o) _PUT_resetTextPosTo: _op1.i]; label2:; _stack[_sp++].o = _locals[1].o; _op1 = _stack[_sp - 1]; _stack[_sp++] = _op1; _op1.o = _stack[--_sp].o; _op2.i = [((javax_microedition_lcdui_Ticker*) _op1.o) _GET_textPos]; _stack[_sp++].i = _op2.i; _op1.i = [javax_microedition_lcdui_Ticker _GET_PAINT_MOVE]; _stack[_sp++].i = _op1.i; _op2.i = _stack[--_sp].i; _op1.i = _stack[--_sp].i; _stack[_sp++].i = _op1.i - _op2.i; _op1.i = _stack[--_sp].i; _op2.o = _stack[--_sp].o; [((javax_microedition_lcdui_Ticker*) _op2.o) _PUT_textPos: _op1.i]; _stack[_sp++].o = _locals[2].o; } @catch (java_lang_Exception* _ex) { _stack[_sp++].o = _ex; goto label8; } goto label3; label8:; @try { _op1.o = _stack[--_sp].o; _locals[3].o = _op1.o; _stack[_sp++].o = _locals[2].o; } @catch (java_lang_Exception* _ex) { _stack[_sp++].o = _ex; goto label8; } _stack[_sp++].o = _locals[3].o; _op1.o = _stack[--_sp].o; @throw _op1.o; label3:; _stack[_sp++].o = _locals[0].o; _op1.o = _stack[--_sp].o; _op2.o = [((javax_microedition_lcdui_Display_TickerPaintTask*) _op1.o) _GET_this_0]; _stack[_sp++].o = _op2.o; _stack[_sp++].o = _locals[0].o; _op1.o = _stack[--_sp].o; _op2.o = [((javax_microedition_lcdui_Display_TickerPaintTask*) _op1.o) _GET_this_0]; _stack[_sp++].o = _op2.o; _sp -= 1; _op1.o = [javax_microedition_lcdui_Display access$000___javax_microedition_lcdui_Display:_stack[_sp + 0].o]; [_op1.o autorelease]; _stack[_sp++].o = _op1.o; _stack[_sp++].i = 0; _stack[_sp++].i = 0; _stack[_sp++].o = _locals[0].o; _op1.o = _stack[--_sp].o; _op2.o = [((javax_microedition_lcdui_Display_TickerPaintTask*) _op1.o) _GET_this_0]; _stack[_sp++].o = _op2.o; _sp -= 1; _op1.o = [javax_microedition_lcdui_Display access$000___javax_microedition_lcdui_Display:_stack[_sp + 0].o]; [_op1.o autorelease]; _stack[_sp++].o = _op1.o; _sp -= 1; _op1.i = [((javax_microedition_lcdui_Displayable*) _stack[_sp].o) getWidth__]; //start _stack[_sp++].i = _op1.i; _stack[_sp++].o = _locals[0].o; _op1.o = _stack[--_sp].o; //end _op2.o = [((javax_microedition_lcdui_Display_TickerPaintTask*) _op1.o) _GET_this_0]; _stack[_sp++].o = _op2.o; _sp -= 1; _op1.o = [javax_microedition_lcdui_Display access$000___javax_microedition_lcdui_Display:_stack[_sp + 0].o]; [_op1.o autorelease]; _stack[_sp++].o = _op1.o; _sp -= 1; _op1.i = [((javax_microedition_lcdui_Displayable*) _stack[_sp].o) getHeight__]; _stack[_sp++].i = _op1.i; _sp -= 6; [((javax_microedition_lcdui_Display*) _stack[_sp].o) repaint___javax_microedition_lcdui_Displayable_int_int_int_int:_stack[_sp + 1].o:_stack[_sp + 2].i:_stack[_sp + 3].i:_stack[_sp + 4].i:_stack[_sp + 5].i]; label0:; [_pool release]; return; } |
From: Markus H. <ma...@ti...> - 2009-11-19 16:31:50
|
Hi, Unfortunatly I can't change the code. I'm porting microemulator over and don't want to enforce this in all MIDlets that would be converted with it. I have tried a bit more and have now this solution: <xsl:template match="jvm:catch"> <xsl:choose> <xsl:when test="./*[1][@id]"> <xsl:text> label</xsl:text> <xsl:value-of select="./jvm:label[1]/@id"/> <xsl:text>:; </xsl:text> </xsl:when> </xsl:choose> <xsl:text> @try { </xsl:text> <xsl:choose> <xsl:when test="./*[1][@id]"> <xsl:apply-templates select="./*[position()>1]"/> </xsl:when> <xsl:otherwise> <xsl:apply-templates/> </xsl:otherwise> </xsl:choose> <xsl:text> } @catch (</xsl:text> <xsl:value-of select="vm:fixname(@type)"/> <xsl:text>* _ex) { _stack[_sp++].o = _ex; goto label</xsl:text> <xsl:value-of select="@using"/> <xsl:text>; } </xsl:text> </xsl:template> This works fine for me and puts the labelX:; before the @try, if it finds one diretly after it. Does this make any sense? I don't know if his could have any sideeffects, but for me its working at least. Markus Am 19.11.2009 um 14:02 schrieb Arno Puder: > > that is a known bug. Flow control in the JVM is represented by absolute jumps which we simply map to gotos in Objective-C. Exceptions sometimes cause the problems you are experiencing. We have discussed for a long time to convert the stack machine to register machine that would also reverse engineer flow control by removing the gotos. This is no easy matter and is further down on our to-do list. In the meantime you can probably get around the problem by inserting a dummy statement just before the try. Something like: > > } else { > int x = 42; > try { > > Arno > > > Markus Heberling wrote: >> Hi, >> I have the following java code: >> if(args==null){ >> System.out.println(1); >> }else{ >> try{ >> System.out.println(2); >> } catch(Exception e){ >> System.out.println(3); >> } >> } >> It gets converted to the following ObjectiveC code (only relevant part here) >> if (_op1.o != [NSNull null]) goto label0; >> _op1.o = [java_lang_System _GET_out]; >> _stack[_sp++].o = _op1.o; >> _stack[_sp++].i = 1; >> _sp -= 2; >> [((java_io_PrintStream*) _stack[_sp].o) println___int:_stack[_sp + 1].i]; >> goto label1; >> @try { >> label0:; >> _op1.o = [java_lang_System _GET_out]; >> _stack[_sp++].o = _op1.o; >> _stack[_sp++].i = 2; >> _sp -= 2; >> [((java_io_PrintStream*) _stack[_sp].o) println___int:_stack[_sp + 1].i]; >> } @catch (java_lang_Exception* _ex) { >> _stack[_sp++].o = _ex; >> goto label7; >> } >> This code crashes. The label0 is inside the try and the code jumps into it from the outside. This seems not to be allowed in ObjectiveC. if I move the label0:; before the try manually, it works. The xsl would need to be changed, so that if there is a jvm:label directly after a jvm:catch, they have to be swapped. I tried but wasn't able to do this myself. Don't know if it has any side effects, too :/ >> Markus >> ------------------------------------------------------------------------ >> ------------------------------------------------------------------------------ >> Let Crystal Reports handle the reporting - Free Crystal Reports 2008 30-Day trial. Simplify your report design, integration and deployment - and focus on what you do best, core application coding. Discover what's new with >> Crystal Reports now. http://p.sf.net/sfu/bobj-july >> ------------------------------------------------------------------------ >> _______________________________________________ >> xmlvm-users mailing list >> xml...@li... >> https://lists.sourceforge.net/lists/listinfo/xmlvm-users |
From: Arno P. <ar...@pu...> - 2009-11-19 13:02:47
|
that is a known bug. Flow control in the JVM is represented by absolute jumps which we simply map to gotos in Objective-C. Exceptions sometimes cause the problems you are experiencing. We have discussed for a long time to convert the stack machine to register machine that would also reverse engineer flow control by removing the gotos. This is no easy matter and is further down on our to-do list. In the meantime you can probably get around the problem by inserting a dummy statement just before the try. Something like: } else { int x = 42; try { Arno Markus Heberling wrote: > Hi, > > I have the following java code: > > if(args==null){ > System.out.println(1); > }else{ > try{ > System.out.println(2); > > } catch(Exception e){ > System.out.println(3); > > } > } > > It gets converted to the following ObjectiveC code (only relevant part here) > > if (_op1.o != [NSNull null]) goto label0; > _op1.o = [java_lang_System _GET_out]; > _stack[_sp++].o = _op1.o; > _stack[_sp++].i = 1; > _sp -= 2; > [((java_io_PrintStream*) _stack[_sp].o) println___int:_stack[_sp + 1].i]; > goto label1; > @try { > label0:; > _op1.o = [java_lang_System _GET_out]; > _stack[_sp++].o = _op1.o; > _stack[_sp++].i = 2; > _sp -= 2; > [((java_io_PrintStream*) _stack[_sp].o) println___int:_stack[_sp + 1].i]; > } @catch (java_lang_Exception* _ex) { > _stack[_sp++].o = _ex; > goto label7; > } > > This code crashes. The label0 is inside the try and the code jumps into it from the outside. This seems not to be allowed in ObjectiveC. if I move the label0:; before the try manually, it works. The xsl would need to be changed, so that if there is a jvm:label directly after a jvm:catch, they have to be swapped. I tried but wasn't able to do this myself. Don't know if it has any side effects, too :/ > > Markus > > > ------------------------------------------------------------------------ > > ------------------------------------------------------------------------------ > Let Crystal Reports handle the reporting - Free Crystal Reports 2008 30-Day > trial. Simplify your report design, integration and deployment - and focus on > what you do best, core application coding. Discover what's new with > Crystal Reports now. http://p.sf.net/sfu/bobj-july > > > ------------------------------------------------------------------------ > > _______________________________________________ > xmlvm-users mailing list > xml...@li... > https://lists.sourceforge.net/lists/listinfo/xmlvm-users |
From: Markus H. <ma...@ti...> - 2009-11-19 09:48:59
|
Hi, I have the following java code: if(args==null){ System.out.println(1); }else{ try{ System.out.println(2); } catch(Exception e){ System.out.println(3); } } It gets converted to the following ObjectiveC code (only relevant part here) if (_op1.o != [NSNull null]) goto label0; _op1.o = [java_lang_System _GET_out]; _stack[_sp++].o = _op1.o; _stack[_sp++].i = 1; _sp -= 2; [((java_io_PrintStream*) _stack[_sp].o) println___int:_stack[_sp + 1].i]; goto label1; @try { label0:; _op1.o = [java_lang_System _GET_out]; _stack[_sp++].o = _op1.o; _stack[_sp++].i = 2; _sp -= 2; [((java_io_PrintStream*) _stack[_sp].o) println___int:_stack[_sp + 1].i]; } @catch (java_lang_Exception* _ex) { _stack[_sp++].o = _ex; goto label7; } This code crashes. The label0 is inside the try and the code jumps into it from the outside. This seems not to be allowed in ObjectiveC. if I move the label0:; before the try manually, it works. The xsl would need to be changed, so that if there is a jvm:label directly after a jvm:catch, they have to be swapped. I tried but wasn't able to do this myself. Don't know if it has any side effects, too :/ Markus |
From: Arno P. <ar...@pu...> - 2009-11-16 14:22:39
|
Guys, I have just committed a major code contribution from Panayotis Katsaloulis. Here a list of things that he did: - Automatically create Xcode project. - Create template project for target 'iphone'. - Use affine transformations on all iPhone widgets in XMLVM's Java-based iPhone emulator. - Separate simulator-specific GUI code from UIView items itself, by using specific renderers. - Introducing view controllers (UIViewController, UINavigationController, UITabBarController) - Introducing view items (UIBarButtonItem, UIBarButtonItemDelegate, UIBarButtonSystemItem, UIBarItem, UINavigationBar, UINavigationItem, UIPickerView, UIProgressView, UISegmentedControl, UISlider, UITabBarItem, UIToolbar) - Support UIColor and UIFont. - Command line argument improvements. - Logging level. - Simplify constant names. - Clean interface of UIViewGL. - Other fixes and additions. My personal favorite is the generation of an Xcode project. Simply double-click on the project file and Xcode starts with all the generated Objective-C files and frameworks properly imported. Big, big thanks to Panayotis! XMLVM just made a big leap forward! Arno |
From: Sascha H. <sa...@xm...> - 2009-11-16 12:37:01
|
Hi Benjamin, wow, thanks for recommending us to Randal and Leo. In fact, I am listening to their show every single week! :) I was thinking in the past about us presenting there, but was never sure if we were as good as the other shows they had (and they had some amazing ones in the past). But maybe we should think about it :) Again, thanks for the recommendation and trust in the project! // Sascha On Mon, Nov 16, 2009 at 8:42 AM, Benjamin Aranguren <bar...@gm...>wrote: > Hi, > > Some time ago I emailed Randal Schwartz from FLOSS Weekly to feature XMLVM. > He suggested that it would speed up the process of getting on the show if > someone from the XMLVM team could contact him. > > For those not familiar, FLOSS Weekly <http://twit.tv/floss> is a weekly > podcast about Free Libre Open Source Software. > > I believe it would be a very good way to promote XMLVM even more. > > Keep up the great work! > > -Ben > > > > > ------------------------------------------------------------------------------ > Let Crystal Reports handle the reporting - Free Crystal Reports 2008 30-Day > trial. Simplify your report design, integration and deployment - and focus > on > what you do best, core application coding. Discover what's new with > Crystal Reports now. http://p.sf.net/sfu/bobj-july > _______________________________________________ > xmlvm-users mailing list > xml...@li... > https://lists.sourceforge.net/lists/listinfo/xmlvm-users > > |
From: Tim H. <tim...@gm...> - 2009-11-16 10:53:53
|
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"> <html> <head> </head> <body bgcolor="#ffffff" text="#000000"> hi *,<br> first of all thanks for the work these guys put into that awesome project!<br> the issue: <br> after compiling with ant the conversion from a .net win console application (just writes hello world to the console) to xmlvmclr fails with a nullpointer exception. <br> debugging leads to some problem (?) with mbel.jar thus leading to the call of the unimplemented method XmlvmResource.getXmlvm() @ line 70 in ExeInputProcess.java. <br> that call happens at outputFiles.add(createOutputFromDocument(process.getXmlvm())) in XmlvmOutputProcess.java where getXmlvm simply returns null, the rest crashes.<br> enough of that selfmade stacktrace, down below the java exception message:<br> Exception in thread "main" java.lang.NullPointerException<br> at org.xmlvm.proc.out.XmlvmOutputProcess.createOutputFromDocument(XmlvmOutputProcess.java:66)<br> at org.xmlvm.proc.out.XmlvmOutputProcess.process(XmlvmOutputProcess.java:57)<br> at org.xmlvm.proc.XmlvmProcessor.process(XmlvmProcessor.java:105)<br> at org.xmlvm.proc.NewMain.main(NewMain.java:55)<br> <code><br> any help highly appreciated!<br> <br> using .net 3.5, jdk 6 (re 1.6 update 7), xp sp3<br> from inside the dist directory the call looks like: java -jar xmlvm.jar --in=D:\test.exe -out=D:\ --target=xmlvm<br> <br> thanks,<br> TiM<br> </code> </body> </html> |
From: Benjamin A. <bar...@gm...> - 2009-11-16 07:43:09
|
Hi, Some time ago I emailed Randal Schwartz from FLOSS Weekly to feature XMLVM. He suggested that it would speed up the process of getting on the show if someone from the XMLVM team could contact him. For those not familiar, FLOSS Weekly <http://twit.tv/floss> is a weekly podcast about Free Libre Open Source Software. I believe it would be a very good way to promote XMLVM even more. Keep up the great work! -Ben |
From: Markus H. <ma...@ti...> - 2009-11-11 20:13:35
|
Hi, is anyone of you at Devoxx 2009 next week in Antwerp? If so we could do a little XMLVM coding together, or something like that. Mail me or ping me on twitter @Atoro. Markus |
From: Arno P. <ar...@pu...> - 2009-11-04 02:20:11
|
OK, I just committed a fix for this problem. Static members were a little tricker but it should work now. The XMLVM demos work. Arno Markus Heberling wrote: > Hi, > > I have tested it with a port of microemulator (http://microemu.org). > Worked fine for me there. Will try out the xmlvm demos tonight, too. > > Markus > > Von meinem iPhone gesendet > > Am 03.11.2009 um 16:38 schrieb Wolfgang Korn <wol...@xm... > <mailto:wol...@xm...>>: > >> Markus, >> >> sorry for the late reply. At a first glance I don't see problems with >> the patch you sent. Did you try running the demo applications shipped >> with XMLVM to make sure that the patch did not break something or did >> you only try running your small sample program? >> >> -- Wolfgang >> >> >> Markus Heberling wrote: >>> Hi, >>> >>> what about this patch: >>> >>> @@ -183,11 +183,35 @@ int main(int argc, char* argv[]) >>> <xsl:text> >>> @implementation </xsl:text> >>> <xsl:value-of select="vm:fixname(@package)"/> >>> <xsl:text>_</xsl:text> >>> <xsl:value-of select="vm:fixname(@name)"/> >>> - >>> + >>> + >>> + <!-- Emit constructor --> >>> + <xsl:text> >>> +-(id)init >>> +{ >>> + if (self = [super init]) >>> + { >>> +</xsl:text> >>> + <!-- Emit declarations for all non-static object fields --> >>> + <xsl:for-each select="vm:field[not(@isStatic = 'true') and >>> vm:isObjectRef(@type)]"> >>> + <xsl:text> </xsl:text> >>> + <xsl:value-of select="vm:fixname(../@package)"/> >>> + <xsl:text>_</xsl:text> >>> + <xsl:value-of select="vm:fixname(../@name)"/> >>> + <xsl:text>_</xsl:text> >>> + <xsl:value-of select="vm:fixname(@name)"/> >>> + <xsl:text>=[NSNull null]; >>> +</xsl:text> >>> + </xsl:for-each> >>> +<xsl:text> } >>> + return self; >>> +} >>> +</xsl:text> >>> + >>> <!-- Emit destructor --> >>> <xsl:text>; >>> >>> - (void) dealloc; >>> { >>> >>> >>> This creates a constructor in the ObjC-class and fills all instance >>> variables of any Object-type with [NSNull null]. >>> >>> This seems to work in my tests, but I don't know if it might break >>> anything. >>> >>> Markus >>> >>> Am 30.10.2009 um 20:18 schrieb Arno Puder: >>> >>>> >>>> this is a tricky issue. Objective-C initializes member variables to >>>> 'nil' by default (which, I believe, is represented by 0x0). However, in >>>> XMLVM we cannot map Java's null to Objective-C's nil, because nil is >>>> not >>>> accepted as an argument to some data structures (e.g., NSArray, >>>> NSDictionary, etc). That is why we map null to [NSNull null]. >>>> >>>> Now, very unfortunate, you cannot do something like this in >>>> Objective-C: >>>> >>>> @interface Foo { >>>> id ref = [NSNull null]; >>>> } >>>> @end >>>> >>>> This means, you have do some fancy code generation. This is a known >>>> issue in XMLVM. In the meantime, you can explicitly initialize Java >>>> members such as: >>>> >>>> public class Test { >>>> Object ref = null; >>>> ... >>>> >>>> Arno >>>> >>>> >>>> Panayotis Katsaloulis wrote: >>>>> On 30 Οκτ 2009, at 8:35 μ.μ., Markus Heberling wrote: >>>>> >>>>>> Hi, >>>>>> >>>>>> take this code convert it to objc and run it: >>>>>> >>>>>> public class Test{ >>>>>> Object thisIsNotInitialized; >>>>>> >>>>>> void test(){ >>>>>> if(thisIsNotInitialized==null) >>>>>> System.out.println("null"); >>>>>> } >>>>>> >>>>>> public static void main(String[] args){ >>>>>> new Test().test(); >>>>>> } >>>>>> } >>>>>> >>>>>> I would expect to get "null" printed to the console. But that >>>>>> doesn't happen. The generated if is something like thos: >>>>>> >>>>>> if (_op1.o != [NSNull null]) goto label0; >>>>>> >>>>>> So it checks for [NSNull null]. But _op1.o contains 0x0 and the >>>>>> check is false. So I would guess that the initialization code of the >>>>>> ObjC variables has to be changed so that they contain [NSNull null] >>>>>> and not 0x0 by default. >>>>>> >>>>>> Hope you get what I mean. >>>>> >>>>> >>>>> >>>>> If a selector returns nil, what is seen in Java? >>>>> ------------------------------------------------------------------------------ >>>>> >>>>> Come build with us! The BlackBerry(R) Developer Conference in SF, CA >>>>> is the only developer event you need to attend this year. Jumpstart >>>>> your >>>>> developing skills, take BlackBerry mobile applications to market >>>>> and stay >>>>> ahead of the curve. Join us from November 9 - 12, 2009. Register now! >>>>> http://p.sf.net/sfu/devconference >>>>> _______________________________________________ >>>>> xmlvm-users mailing list >>>>> xml...@li... >>>>> <mailto:xml...@li...> >>>>> https://lists.sourceforge.net/lists/listinfo/xmlvm-users >>>> >>>> ------------------------------------------------------------------------------ >>>> >>>> Come build with us! The BlackBerry(R) Developer Conference in SF, CA >>>> is the only developer event you need to attend this year. Jumpstart >>>> your >>>> developing skills, take BlackBerry mobile applications to market and >>>> stay >>>> ahead of the curve. Join us from November 9 - 12, 2009. Register now! >>>> http://p.sf.net/sfu/devconference >>>> _______________________________________________ >>>> xmlvm-users mailing list >>>> xml...@li... >>>> <mailto:xml...@li...> >>>> https://lists.sourceforge.net/lists/listinfo/xmlvm-users >>> >>> ------------------------------------------------------------------------ >>> >>> ------------------------------------------------------------------------------ >>> Come build with us! The BlackBerry(R) Developer Conference in SF, CA >>> is the only developer event you need to attend this year. Jumpstart your >>> developing skills, take BlackBerry mobile applications to market and stay >>> ahead of the curve. Join us from November 9 - 12, 2009. Register now! >>> http://p.sf.net/sfu/devconference >>> ------------------------------------------------------------------------ >>> >>> _______________________________________________ >>> xmlvm-users mailing list >>> xml...@li... <mailto:xml...@li...> >>> https://lists.sourceforge.net/lists/listinfo/xmlvm-users >>> >> >> > > ------------------------------------------------------------------------ > > ------------------------------------------------------------------------------ > Come build with us! The BlackBerry(R) Developer Conference in SF, CA > is the only developer event you need to attend this year. Jumpstart your > developing skills, take BlackBerry mobile applications to market and stay > ahead of the curve. Join us from November 9 - 12, 2009. Register now! > http://p.sf.net/sfu/devconference > > > ------------------------------------------------------------------------ > > _______________________________________________ > xmlvm-users mailing list > xml...@li... > https://lists.sourceforge.net/lists/listinfo/xmlvm-users |
From: Arno P. <ar...@pu...> - 2009-11-03 16:55:13
|
Guys: sorry for the late reply from my side. To add the initialization in the Objective-C default constructor is a clever idea. I will take Markus patch and make some modifications to it (also generate the declaration of the default constructor in the header file and default initialization of static member variables). I hope I'll get to that sometime today. Arno Markus Heberling wrote: > Hi, > > I have tested it with a port of microemulator (http://microemu.org). > Worked fine for me there. Will try out the xmlvm demos tonight, too. > > Markus > > Von meinem iPhone gesendet > > Am 03.11.2009 um 16:38 schrieb Wolfgang Korn <wol...@xm... > <mailto:wol...@xm...>>: > >> Markus, >> >> sorry for the late reply. At a first glance I don't see problems with >> the patch you sent. Did you try running the demo applications shipped >> with XMLVM to make sure that the patch did not break something or did >> you only try running your small sample program? >> >> -- Wolfgang >> >> >> Markus Heberling wrote: >>> Hi, >>> >>> what about this patch: >>> >>> @@ -183,11 +183,35 @@ int main(int argc, char* argv[]) >>> <xsl:text> >>> @implementation </xsl:text> >>> <xsl:value-of select="vm:fixname(@package)"/> >>> <xsl:text>_</xsl:text> >>> <xsl:value-of select="vm:fixname(@name)"/> >>> - >>> + >>> + >>> + <!-- Emit constructor --> >>> + <xsl:text> >>> +-(id)init >>> +{ >>> + if (self = [super init]) >>> + { >>> +</xsl:text> >>> + <!-- Emit declarations for all non-static object fields --> >>> + <xsl:for-each select="vm:field[not(@isStatic = 'true') and >>> vm:isObjectRef(@type)]"> >>> + <xsl:text> </xsl:text> >>> + <xsl:value-of select="vm:fixname(../@package)"/> >>> + <xsl:text>_</xsl:text> >>> + <xsl:value-of select="vm:fixname(../@name)"/> >>> + <xsl:text>_</xsl:text> >>> + <xsl:value-of select="vm:fixname(@name)"/> >>> + <xsl:text>=[NSNull null]; >>> +</xsl:text> >>> + </xsl:for-each> >>> +<xsl:text> } >>> + return self; >>> +} >>> +</xsl:text> >>> + >>> <!-- Emit destructor --> >>> <xsl:text>; >>> >>> - (void) dealloc; >>> { >>> >>> >>> This creates a constructor in the ObjC-class and fills all instance >>> variables of any Object-type with [NSNull null]. >>> >>> This seems to work in my tests, but I don't know if it might break >>> anything. >>> >>> Markus >>> >>> Am 30.10.2009 um 20:18 schrieb Arno Puder: >>> >>>> >>>> this is a tricky issue. Objective-C initializes member variables to >>>> 'nil' by default (which, I believe, is represented by 0x0). However, in >>>> XMLVM we cannot map Java's null to Objective-C's nil, because nil is >>>> not >>>> accepted as an argument to some data structures (e.g., NSArray, >>>> NSDictionary, etc). That is why we map null to [NSNull null]. >>>> >>>> Now, very unfortunate, you cannot do something like this in >>>> Objective-C: >>>> >>>> @interface Foo { >>>> id ref = [NSNull null]; >>>> } >>>> @end >>>> >>>> This means, you have do some fancy code generation. This is a known >>>> issue in XMLVM. In the meantime, you can explicitly initialize Java >>>> members such as: >>>> >>>> public class Test { >>>> Object ref = null; >>>> ... >>>> >>>> Arno >>>> >>>> >>>> Panayotis Katsaloulis wrote: >>>>> On 30 Οκτ 2009, at 8:35 μ.μ., Markus Heberling wrote: >>>>> >>>>>> Hi, >>>>>> >>>>>> take this code convert it to objc and run it: >>>>>> >>>>>> public class Test{ >>>>>> Object thisIsNotInitialized; >>>>>> >>>>>> void test(){ >>>>>> if(thisIsNotInitialized==null) >>>>>> System.out.println("null"); >>>>>> } >>>>>> >>>>>> public static void main(String[] args){ >>>>>> new Test().test(); >>>>>> } >>>>>> } >>>>>> >>>>>> I would expect to get "null" printed to the console. But that >>>>>> doesn't happen. The generated if is something like thos: >>>>>> >>>>>> if (_op1.o != [NSNull null]) goto label0; >>>>>> >>>>>> So it checks for [NSNull null]. But _op1.o contains 0x0 and the >>>>>> check is false. So I would guess that the initialization code of the >>>>>> ObjC variables has to be changed so that they contain [NSNull null] >>>>>> and not 0x0 by default. >>>>>> >>>>>> Hope you get what I mean. >>>>> >>>>> >>>>> >>>>> If a selector returns nil, what is seen in Java? >>>>> ------------------------------------------------------------------------------ >>>>> >>>>> Come build with us! The BlackBerry(R) Developer Conference in SF, CA >>>>> is the only developer event you need to attend this year. Jumpstart >>>>> your >>>>> developing skills, take BlackBerry mobile applications to market >>>>> and stay >>>>> ahead of the curve. Join us from November 9 - 12, 2009. Register now! >>>>> http://p.sf.net/sfu/devconference >>>>> _______________________________________________ >>>>> xmlvm-users mailing list >>>>> xml...@li... >>>>> <mailto:xml...@li...> >>>>> https://lists.sourceforge.net/lists/listinfo/xmlvm-users >>>> >>>> ------------------------------------------------------------------------------ >>>> >>>> Come build with us! The BlackBerry(R) Developer Conference in SF, CA >>>> is the only developer event you need to attend this year. Jumpstart >>>> your >>>> developing skills, take BlackBerry mobile applications to market and >>>> stay >>>> ahead of the curve. Join us from November 9 - 12, 2009. Register now! >>>> http://p.sf.net/sfu/devconference >>>> _______________________________________________ >>>> xmlvm-users mailing list >>>> xml...@li... >>>> <mailto:xml...@li...> >>>> https://lists.sourceforge.net/lists/listinfo/xmlvm-users >>> >>> ------------------------------------------------------------------------ >>> >>> ------------------------------------------------------------------------------ >>> Come build with us! The BlackBerry(R) Developer Conference in SF, CA >>> is the only developer event you need to attend this year. Jumpstart your >>> developing skills, take BlackBerry mobile applications to market and stay >>> ahead of the curve. Join us from November 9 - 12, 2009. Register now! >>> http://p.sf.net/sfu/devconference >>> ------------------------------------------------------------------------ >>> >>> _______________________________________________ >>> xmlvm-users mailing list >>> xml...@li... <mailto:xml...@li...> >>> https://lists.sourceforge.net/lists/listinfo/xmlvm-users >>> >> >> > > ------------------------------------------------------------------------ > > ------------------------------------------------------------------------------ > Come build with us! The BlackBerry(R) Developer Conference in SF, CA > is the only developer event you need to attend this year. Jumpstart your > developing skills, take BlackBerry mobile applications to market and stay > ahead of the curve. Join us from November 9 - 12, 2009. Register now! > http://p.sf.net/sfu/devconference > > > ------------------------------------------------------------------------ > > _______________________________________________ > xmlvm-users mailing list > xml...@li... > https://lists.sourceforge.net/lists/listinfo/xmlvm-users |
From: Markus H. <ma...@ti...> - 2009-11-03 16:09:34
|
Hi, I have tested it with a port of microemulator (http://microemu.org). Worked fine for me there. Will try out the xmlvm demos tonight, too. Markus Von meinem iPhone gesendet Am 03.11.2009 um 16:38 schrieb Wolfgang Korn <wol...@xm...>: > Markus, > > sorry for the late reply. At a first glance I don't see problems > with the patch you sent. Did you try running the demo applications > shipped with XMLVM to make sure that the patch did not break > something or did you only try running your small sample program? > > -- Wolfgang > > > Markus Heberling wrote: >> >> Hi, >> >> what about this patch: >> >> @@ -183,11 +183,35 @@ int main(int argc, char* argv[]) >> <xsl:text> >> @implementation </xsl:text> >> <xsl:value-of select="vm:fixname(@package)"/> >> <xsl:text>_</xsl:text> >> <xsl:value-of select="vm:fixname(@name)"/> >> - >> + >> + >> + <!-- Emit constructor --> >> + <xsl:text> >> +-(id)init >> +{ >> + if (self = [super init]) >> + { >> +</xsl:text> >> + <!-- Emit declarations for all non-static object fields --> >> + <xsl:for-each select="vm:field[not(@isStatic = 'true') and >> vm:isObjectRef(@type)]"> >> + <xsl:text> </xsl:text> >> + <xsl:value-of select="vm:fixname(../@package)"/> >> + <xsl:text>_</xsl:text> >> + <xsl:value-of select="vm:fixname(../@name)"/> >> + <xsl:text>_</xsl:text> >> + <xsl:value-of select="vm:fixname(@name)"/> >> + <xsl:text>=[NSNull null]; >> +</xsl:text> >> + </xsl:for-each> >> +<xsl:text> } >> + return self; >> +} >> +</xsl:text> >> + >> <!-- Emit destructor --> >> <xsl:text>; >> >> - (void) dealloc; >> { >> >> >> This creates a constructor in the ObjC-class and fills all instance >> variables of any Object-type with [NSNull null]. >> >> This seems to work in my tests, but I don't know if it might break >> anything. >> >> Markus >> >> Am 30.10.2009 um 20:18 schrieb Arno Puder: >> >>> >>> this is a tricky issue. Objective-C initializes member variables to >>> 'nil' by default (which, I believe, is represented by 0x0). >>> However, in >>> XMLVM we cannot map Java's null to Objective-C's nil, because nil >>> is not >>> accepted as an argument to some data structures (e.g., NSArray, >>> NSDictionary, etc). That is why we map null to [NSNull null]. >>> >>> Now, very unfortunate, you cannot do something like this in >>> Objective-C: >>> >>> @interface Foo { >>> id ref = [NSNull null]; >>> } >>> @end >>> >>> This means, you have do some fancy code generation. This is a known >>> issue in XMLVM. In the meantime, you can explicitly initialize Java >>> members such as: >>> >>> public class Test { >>> Object ref = null; >>> ... >>> >>> Arno >>> >>> >>> Panayotis Katsaloulis wrote: >>>> On 30 Οκτ 2009, at 8:35 μ.μ., Markus >>>> Heberling wrote: >>>> >>>>> Hi, >>>>> >>>>> take this code convert it to objc and run it: >>>>> >>>>> public class Test{ >>>>> Object thisIsNotInitialized; >>>>> >>>>> void test(){ >>>>> if(thisIsNotInitialized==null) >>>>> System.out.println("null"); >>>>> } >>>>> >>>>> public static void main(String[] args){ >>>>> new Test().test(); >>>>> } >>>>> } >>>>> >>>>> I would expect to get "null" printed to the console. But that >>>>> doesn't happen. The generated if is something like thos: >>>>> >>>>> if (_op1.o != [NSNull null]) goto label0; >>>>> >>>>> So it checks for [NSNull null]. But _op1.o contains 0x0 and the >>>>> check is false. So I would guess that the initialization code of >>>>> the >>>>> ObjC variables has to be changed so that they contain [NSNull >>>>> null] >>>>> and not 0x0 by default. >>>>> >>>>> Hope you get what I mean. >>>> >>>> >>>> >>>> If a selector returns nil, what is seen in Java? >>>> --- >>>> --- >>>> --- >>>> --- >>>> ------------------------------------------------------------------ >>>> Come build with us! The BlackBerry(R) Developer Conference in SF, >>>> CA >>>> is the only developer event you need to attend this year. >>>> Jumpstart your >>>> developing skills, take BlackBerry mobile applications to market >>>> and stay >>>> ahead of the curve. Join us from November 9 - 12, 2009. Register >>>> now! >>>> http://p.sf.net/sfu/devconference >>>> _______________________________________________ >>>> xmlvm-users mailing list >>>> xml...@li... >>>> https://lists.sourceforge.net/lists/listinfo/xmlvm-users >>> >>> --- >>> --- >>> --- >>> --- >>> ------------------------------------------------------------------ >>> Come build with us! The BlackBerry(R) Developer Conference in SF, CA >>> is the only developer event you need to attend this year. >>> Jumpstart your >>> developing skills, take BlackBerry mobile applications to market >>> and stay >>> ahead of the curve. Join us from November 9 - 12, 2009. Register >>> now! >>> http://p.sf.net/sfu/devconference >>> _______________________________________________ >>> xmlvm-users mailing list >>> xml...@li... >>> https://lists.sourceforge.net/lists/listinfo/xmlvm-users >> >> >> --- >> --- >> --- >> --------------------------------------------------------------------- >> Come build with us! The BlackBerry(R) Developer Conference in SF, CA >> is the only developer event you need to attend this year. Jumpstart >> your >> developing skills, take BlackBerry mobile applications to market >> and stay >> ahead of the curve. Join us from November 9 - 12, 2009. Register now! >> http://p.sf.net/sfu/devconference >> >> _______________________________________________ >> xmlvm-users mailing list >> xml...@li... >> https://lists.sourceforge.net/lists/listinfo/xmlvm-users >> > > |
From: Wolfgang K. <wol...@xm...> - 2009-11-03 16:02:51
|
Markus, sorry for the late reply. At a first glance I don't see problems with the patch you sent. Did you try running the demo applications shipped with XMLVM to make sure that the patch did not break something or did you only try running your small sample program? -- Wolfgang Markus Heberling wrote: > Hi, > > what about this patch: > > @@ -183,11 +183,35 @@ int main(int argc, char* argv[]) > <xsl:text> > @implementation </xsl:text> > <xsl:value-of select="vm:fixname(@package)"/> > <xsl:text>_</xsl:text> > <xsl:value-of select="vm:fixname(@name)"/> > - > + > + > + <!-- Emit constructor --> > + <xsl:text> > +-(id)init > +{ > + if (self = [super init]) > + { > +</xsl:text> > + <!-- Emit declarations for all non-static object fields --> > + <xsl:for-each select="vm:field[not(@isStatic = 'true') and > vm:isObjectRef(@type)]"> > + <xsl:text> </xsl:text> > + <xsl:value-of select="vm:fixname(../@package)"/> > + <xsl:text>_</xsl:text> > + <xsl:value-of select="vm:fixname(../@name)"/> > + <xsl:text>_</xsl:text> > + <xsl:value-of select="vm:fixname(@name)"/> > + <xsl:text>=[NSNull null]; > +</xsl:text> > + </xsl:for-each> > +<xsl:text> } > + return self; > +} > +</xsl:text> > + > <!-- Emit destructor --> > <xsl:text>; > > - (void) dealloc; > { > > > This creates a constructor in the ObjC-class and fills all instance > variables of any Object-type with [NSNull null]. > > This seems to work in my tests, but I don't know if it might break > anything. > > Markus > > Am 30.10.2009 um 20:18 schrieb Arno Puder: > >> >> this is a tricky issue. Objective-C initializes member variables to >> 'nil' by default (which, I believe, is represented by 0x0). However, in >> XMLVM we cannot map Java's null to Objective-C's nil, because nil is not >> accepted as an argument to some data structures (e.g., NSArray, >> NSDictionary, etc). That is why we map null to [NSNull null]. >> >> Now, very unfortunate, you cannot do something like this in Objective-C: >> >> @interface Foo { >> id ref = [NSNull null]; >> } >> @end >> >> This means, you have do some fancy code generation. This is a known >> issue in XMLVM. In the meantime, you can explicitly initialize Java >> members such as: >> >> public class Test { >> Object ref = null; >> ... >> >> Arno >> >> >> Panayotis Katsaloulis wrote: >>> On 30 Οκτ 2009, at 8:35 μ.μ., Markus Heberling wrote: >>> >>>> Hi, >>>> >>>> take this code convert it to objc and run it: >>>> >>>> public class Test{ >>>> Object thisIsNotInitialized; >>>> >>>> void test(){ >>>> if(thisIsNotInitialized==null) >>>> System.out.println("null"); >>>> } >>>> >>>> public static void main(String[] args){ >>>> new Test().test(); >>>> } >>>> } >>>> >>>> I would expect to get "null" printed to the console. But that >>>> doesn't happen. The generated if is something like thos: >>>> >>>> if (_op1.o != [NSNull null]) goto label0; >>>> >>>> So it checks for [NSNull null]. But _op1.o contains 0x0 and the >>>> check is false. So I would guess that the initialization code of the >>>> ObjC variables has to be changed so that they contain [NSNull null] >>>> and not 0x0 by default. >>>> >>>> Hope you get what I mean. >>> >>> >>> >>> If a selector returns nil, what is seen in Java? >>> ------------------------------------------------------------------------------ >>> >>> Come build with us! The BlackBerry(R) Developer Conference in SF, CA >>> is the only developer event you need to attend this year. Jumpstart >>> your >>> developing skills, take BlackBerry mobile applications to market and >>> stay >>> ahead of the curve. Join us from November 9 - 12, 2009. Register now! >>> http://p.sf.net/sfu/devconference >>> _______________________________________________ >>> xmlvm-users mailing list >>> xml...@li... >>> https://lists.sourceforge.net/lists/listinfo/xmlvm-users >> >> ------------------------------------------------------------------------------ >> >> Come build with us! The BlackBerry(R) Developer Conference in SF, CA >> is the only developer event you need to attend this year. Jumpstart your >> developing skills, take BlackBerry mobile applications to market and >> stay >> ahead of the curve. Join us from November 9 - 12, 2009. Register now! >> http://p.sf.net/sfu/devconference >> _______________________________________________ >> xmlvm-users mailing list >> xml...@li... >> https://lists.sourceforge.net/lists/listinfo/xmlvm-users > > ------------------------------------------------------------------------ > > ------------------------------------------------------------------------------ > Come build with us! The BlackBerry(R) Developer Conference in SF, CA > is the only developer event you need to attend this year. Jumpstart your > developing skills, take BlackBerry mobile applications to market and stay > ahead of the curve. Join us from November 9 - 12, 2009. Register now! > http://p.sf.net/sfu/devconference > ------------------------------------------------------------------------ > > _______________________________________________ > xmlvm-users mailing list > xml...@li... > https://lists.sourceforge.net/lists/listinfo/xmlvm-users > |
From: Markus H. <ma...@ti...> - 2009-10-31 16:01:28
|
Hi, what about this patch: @@ -183,11 +183,35 @@ int main(int argc, char* argv[]) <xsl:text> @implementation </xsl:text> <xsl:value-of select="vm:fixname(@package)"/> <xsl:text>_</xsl:text> <xsl:value-of select="vm:fixname(@name)"/> - + + + <!-- Emit constructor --> + <xsl:text> +-(id)init +{ + if (self = [super init]) + { +</xsl:text> + <!-- Emit declarations for all non-static object fields --> + <xsl:for-each select="vm:field[not(@isStatic = 'true') and vm:isObjectRef(@type)]"> + <xsl:text> </xsl:text> + <xsl:value-of select="vm:fixname(../@package)"/> + <xsl:text>_</xsl:text> + <xsl:value-of select="vm:fixname(../@name)"/> + <xsl:text>_</xsl:text> + <xsl:value-of select="vm:fixname(@name)"/> + <xsl:text>=[NSNull null]; +</xsl:text> + </xsl:for-each> +<xsl:text> } + return self; +} +</xsl:text> + <!-- Emit destructor --> <xsl:text>; - (void) dealloc; { This creates a constructor in the ObjC-class and fills all instance variables of any Object-type with [NSNull null]. This seems to work in my tests, but I don't know if it might break anything. Markus Am 30.10.2009 um 20:18 schrieb Arno Puder: > > this is a tricky issue. Objective-C initializes member variables to > 'nil' by default (which, I believe, is represented by 0x0). However, > in > XMLVM we cannot map Java's null to Objective-C's nil, because nil is > not > accepted as an argument to some data structures (e.g., NSArray, > NSDictionary, etc). That is why we map null to [NSNull null]. > > Now, very unfortunate, you cannot do something like this in > Objective-C: > > @interface Foo { > id ref = [NSNull null]; > } > @end > > This means, you have do some fancy code generation. This is a known > issue in XMLVM. In the meantime, you can explicitly initialize Java > members such as: > > public class Test { > Object ref = null; > ... > > Arno > > > Panayotis Katsaloulis wrote: >> On 30 Οκτ 2009, at 8:35 μ.μ., Markus Heberling wrote: >> >>> Hi, >>> >>> take this code convert it to objc and run it: >>> >>> public class Test{ >>> Object thisIsNotInitialized; >>> >>> void test(){ >>> if(thisIsNotInitialized==null) >>> System.out.println("null"); >>> } >>> >>> public static void main(String[] args){ >>> new Test().test(); >>> } >>> } >>> >>> I would expect to get "null" printed to the console. But that >>> doesn't happen. The generated if is something like thos: >>> >>> if (_op1.o != [NSNull null]) goto label0; >>> >>> So it checks for [NSNull null]. But _op1.o contains 0x0 and the >>> check is false. So I would guess that the initialization code of the >>> ObjC variables has to be changed so that they contain [NSNull null] >>> and not 0x0 by default. >>> >>> Hope you get what I mean. >> >> >> >> If a selector returns nil, what is seen in Java? >> ------------------------------------------------------------------------------ >> Come build with us! The BlackBerry(R) Developer Conference in SF, CA >> is the only developer event you need to attend this year. Jumpstart >> your >> developing skills, take BlackBerry mobile applications to market >> and stay >> ahead of the curve. Join us from November 9 - 12, 2009. Register now! >> http://p.sf.net/sfu/devconference >> _______________________________________________ >> xmlvm-users mailing list >> xml...@li... >> https://lists.sourceforge.net/lists/listinfo/xmlvm-users > > ------------------------------------------------------------------------------ > Come build with us! The BlackBerry(R) Developer Conference in SF, CA > is the only developer event you need to attend this year. Jumpstart > your > developing skills, take BlackBerry mobile applications to market and > stay > ahead of the curve. Join us from November 9 - 12, 2009. Register now! > http://p.sf.net/sfu/devconference > _______________________________________________ > xmlvm-users mailing list > xml...@li... > https://lists.sourceforge.net/lists/listinfo/xmlvm-users |
From: Wolfgang K. <wol...@xm...> - 2009-10-31 07:56:21
|
Dominique, Setting up a project to develop your own iPhone application is still a manual process (for both - Eclipse as well as for Netbeans). Create your project and add XMLVM's libraries to your classpath. These are objc-compat.jar and lwjgl.jar. If you are developing an Android application which will be run using XMLVM's emulator you need android-compat.jar as well. Please note - we currently have a contribution under review which (among a lot of other things) provides support for automatic generation of project skeletons to speed up setting up a new project. -- Wolfgang dominique wrote: > > Hello, > > > > Hello, > > > > I have downloaded your tool, congratulation.. I bought a Mac in order > to develop product for Iphone. I know very well Java, but I wanted to > do a minimum for Macintosh SDK..Also I have just some informations > about Machintosh the strict minimum.. > > > > > > I have decided to install windows_XP_SP3 with VMWARE … if that can > help, here are the steps.. > > > > > > 1- Mac : install Snow Leopard (64 bits & Java 6) : in canada 66$ > included tax for 5 licences > > (java 6 is only available from apple with OS_64_bits, thank you apple) > > > > 2- Install Wmware WorkStation (78$ with tax) > > > > 3- Install Windows_XP_SP3 : official version, install java_6, > notepad++, winrar > > > > And use your XP under Mac… > > > > 4- Download and install Cygwin (free), unix emulation > > > > |5- ||svn co https://xmlvm.svn.sourceforge.net/svnroot/xmlvm > xmlvm ||| > > > > 6- Download and install ant (make for java) installed in > c:\apache-ant-1.7.0 (or another version) > > > > 7- update environment variables inside windows > > JAVA_HOME = C:\Program Files\Java\jdk1.6.0_16 > > Path add : C:\Program Files\Java\jdk1.6.0_16\bin;C:\apache-ant-1.7.0\bin > > > > 8- create .bash_profile inside $HOME c:\cygwin\home\Administrator > > alias xmlvm =’java –jar > c:/cygwin/home/Administrator/xmlvm/trunk/xmlvm/dist/xmlvm.jar’ > > run cygwin and type alias you should see the xmlvm alias > > > > 9- Recompile xmlvm with ant ; open cygwin and then > > cd xmlvm/trunk/xmlvm > > and type *ant *you should get inside the folder *dist :* > > *xmlvm.jar* > > > > > > and it works ! > > > > My question is : for java i use NetBeans 6.7.1 … >From Eclipse how is > built java code for Iphone ? Is it manual ? > > > > > > Dominique MARY from Québec, Canada > > > > > > > > ------------------------------------------------------------------------ > > ------------------------------------------------------------------------------ > Come build with us! The BlackBerry(R) Developer Conference in SF, CA > is the only developer event you need to attend this year. Jumpstart your > developing skills, take BlackBerry mobile applications to market and stay > ahead of the curve. Join us from November 9 - 12, 2009. Register now! > http://p.sf.net/sfu/devconference > ------------------------------------------------------------------------ > > _______________________________________________ > xmlvm-users mailing list > xml...@li... > https://lists.sourceforge.net/lists/listinfo/xmlvm-users > |
From: Arno P. <ar...@pu...> - 2009-10-30 19:41:13
|
this is a tricky issue. Objective-C initializes member variables to 'nil' by default (which, I believe, is represented by 0x0). However, in XMLVM we cannot map Java's null to Objective-C's nil, because nil is not accepted as an argument to some data structures (e.g., NSArray, NSDictionary, etc). That is why we map null to [NSNull null]. Now, very unfortunate, you cannot do something like this in Objective-C: @interface Foo { id ref = [NSNull null]; } @end This means, you have do some fancy code generation. This is a known issue in XMLVM. In the meantime, you can explicitly initialize Java members such as: public class Test { Object ref = null; ... Arno Panayotis Katsaloulis wrote: > On 30 Οκτ 2009, at 8:35 μ.μ., Markus Heberling wrote: > >> Hi, >> >> take this code convert it to objc and run it: >> >> public class Test{ >> Object thisIsNotInitialized; >> >> void test(){ >> if(thisIsNotInitialized==null) >> System.out.println("null"); >> } >> >> public static void main(String[] args){ >> new Test().test(); >> } >> } >> >> I would expect to get "null" printed to the console. But that >> doesn't happen. The generated if is something like thos: >> >> if (_op1.o != [NSNull null]) goto label0; >> >> So it checks for [NSNull null]. But _op1.o contains 0x0 and the >> check is false. So I would guess that the initialization code of the >> ObjC variables has to be changed so that they contain [NSNull null] >> and not 0x0 by default. >> >> Hope you get what I mean. > > > > If a selector returns nil, what is seen in Java? > ------------------------------------------------------------------------------ > Come build with us! The BlackBerry(R) Developer Conference in SF, CA > is the only developer event you need to attend this year. Jumpstart your > developing skills, take BlackBerry mobile applications to market and stay > ahead of the curve. Join us from November 9 - 12, 2009. Register now! > http://p.sf.net/sfu/devconference > _______________________________________________ > xmlvm-users mailing list > xml...@li... > https://lists.sourceforge.net/lists/listinfo/xmlvm-users |
From: Panayotis K. <pan...@pa...> - 2009-10-30 19:11:57
|
On 30 Οκτ 2009, at 8:35 μ.μ., Markus Heberling wrote: > Hi, > > take this code convert it to objc and run it: > > public class Test{ > Object thisIsNotInitialized; > > void test(){ > if(thisIsNotInitialized==null) > System.out.println("null"); > } > > public static void main(String[] args){ > new Test().test(); > } > } > > I would expect to get "null" printed to the console. But that > doesn't happen. The generated if is something like thos: > > if (_op1.o != [NSNull null]) goto label0; > > So it checks for [NSNull null]. But _op1.o contains 0x0 and the > check is false. So I would guess that the initialization code of the > ObjC variables has to be changed so that they contain [NSNull null] > and not 0x0 by default. > > Hope you get what I mean. If a selector returns nil, what is seen in Java? |
From: Markus H. <ma...@ti...> - 2009-10-30 18:36:18
|
Hi, take this code convert it to objc and run it: public class Test{ Object thisIsNotInitialized; void test(){ if(thisIsNotInitialized==null) System.out.println("null"); } public static void main(String[] args){ new Test().test(); } } I would expect to get "null" printed to the console. But that doesn't happen. The generated if is something like thos: if (_op1.o != [NSNull null]) goto label0; So it checks for [NSNull null]. But _op1.o contains 0x0 and the check is false. So I would guess that the initialization code of the ObjC variables has to be changed so that they contain [NSNull null] and not 0x0 by default. Hope you get what I mean. Markus |
From: dominique <dom...@gm...> - 2009-10-30 11:41:46
|
Hello, Hello, I have downloaded your tool, congratulation.. I bought a Mac in order to develop product for Iphone. I know very well Java, but I wanted to do a minimum for Macintosh SDK..Also I have just some informations about Machintosh the strict minimum.. I have decided to install windows_XP_SP3 with VMWARE if that can help, here are the steps.. 1- Mac : install Snow Leopard (64 bits & Java 6) : in canada 66$ included tax for 5 licences (java 6 is only available from apple with OS_64_bits, thank you apple) 2- Install Wmware WorkStation (78$ with tax) 3- Install Windows_XP_SP3 : official version, install java_6, notepad++, winrar And use your XP under Mac 4- Download and install Cygwin (free), unix emulation 5- svn co https://xmlvm.svn.sourceforge.net/svnroot/xmlvm xmlvm 6- Download and install ant (make for java) installed in c:\apache-ant-1.7.0 (or another version) 7- update environment variables inside windows JAVA_HOME = C:\Program Files\Java\jdk1.6.0_16 Path add : C:\Program Files\Java\jdk1.6.0_16\bin;C:\apache-ant-1.7.0\bin 8- create .bash_profile inside $HOME c:\cygwin\home\Administrator alias xmlvm =java jar c:/cygwin/home/Administrator/xmlvm/trunk/xmlvm/dist/xmlvm.jar run cygwin and type alias you should see the xmlvm alias 9- Recompile xmlvm with ant ; open cygwin and then cd xmlvm/trunk/xmlvm and type ant you should get inside the folder dist : xmlvm.jar and it works ! My question is : for java i use NetBeans 6.7.1 From Eclipse how is built java code for Iphone ? Is it manual ? Dominique MARY from Québec, Canada |
From: Arno P. <ar...@pu...> - 2009-10-28 23:59:04
|
fixed. Panayotis Katsaloulis wrote: > On 28 Οκτ 2009, at 11:43 π.μ., Wolfgang Korn wrote: > >> Panayotis, >> >> what exactly do you mean by saying "doesn't work"? I assume you ran >> that >> code from within Apples emulator and caught an exception. Did you >> have a >> look into the console tool to see the error message produced? Please >> post that message that message to the list so that we can >> investigate it. >> >> -- Wolfgang > > > Actually I mean doesn't work as expected. > > From Java of course I saw > q=8 > > From emulator I saw > q=0 > > no, I didn't see an exception, because this method is already > "implemented" through StringBuilder/StringBuffer class > It's a strange error, because inside the > - (java_lang_StringBuffer*) append___float: (float) f > of java_lang_StringBuffer object, the value of "f" is indeed 0 > ------------------------------------------------------------------------------ > Come build with us! The BlackBerry(R) Developer Conference in SF, CA > is the only developer event you need to attend this year. Jumpstart your > developing skills, take BlackBerry mobile applications to market and stay > ahead of the curve. Join us from November 9 - 12, 2009. Register now! > http://p.sf.net/sfu/devconference > _______________________________________________ > xmlvm-users mailing list > xml...@li... > https://lists.sourceforge.net/lists/listinfo/xmlvm-users |
From: Arno P. <ar...@pu...> - 2009-10-28 21:48:13
|
there is one problems with Objective-C categories: you can overwrite an existing method (such as drawRect) but there is no way to access the original implementation (the one that you 'covered up'). When using inheritance, it is sometimes necessary to access the implementation of the base class (that is what the keyword 'super' is for). If you use a category for drawRect, you would not be able to access the original implementation in UIView. Apart from the fact the drawRect is doing quite a few things (e.g., iterate over all sub-views). You would need to replicate that behavior in your own implementation of drawRect. Note that a category replaces the implementation of drawRect for *all* widgets (UILabel, etc, etc). You can only use a category for 'cover up' a method that someone might override only if (1) you are sure nothing happens in the implementation of that method in the base class (i.e., the method is abstract) and (2) you don't need to access the implementation via super. Arno Panayotis Katsaloulis wrote: > I try to understand one thing - it doesn't really make sense to me. > > In UIView inheritance is used to call > drawRect:(CGRect)rect > because it doesn't work otherwise. I tried it too without inheritance > and failed. > > But, in the similar issue with viewDidLoad from UIViewController, > which I simply did something like: > > - (void) viewDidLoad { > [self viewDidLoad__]; > } > - (void) viewDidLoad__ { > } > > there wasn't a need to use inheritance. viewDidLoad__ was called in > any case. > Any ideas why in the first case, inheritance was required, but in the > second it was not? > > ------------------------------------------------------------------------------ > Come build with us! The BlackBerry(R) Developer Conference in SF, CA > is the only developer event you need to attend this year. Jumpstart your > developing skills, take BlackBerry mobile applications to market and stay > ahead of the curve. Join us from November 9 - 12, 2009. Register now! > http://p.sf.net/sfu/devconference > _______________________________________________ > xmlvm-users mailing list > xml...@li... > https://lists.sourceforge.net/lists/listinfo/xmlvm-users |
From: Panayotis K. <pan...@pa...> - 2009-10-28 16:38:49
|
I try to understand one thing - it doesn't really make sense to me. In UIView inheritance is used to call drawRect:(CGRect)rect because it doesn't work otherwise. I tried it too without inheritance and failed. But, in the similar issue with viewDidLoad from UIViewController, which I simply did something like: - (void) viewDidLoad { [self viewDidLoad__]; } - (void) viewDidLoad__ { } there wasn't a need to use inheritance. viewDidLoad__ was called in any case. Any ideas why in the first case, inheritance was required, but in the second it was not? |
From: Wolfgang K. <wol...@xm...> - 2009-10-28 10:14:41
|
I see. Looks like we are having some research to do. We'll keep you posted! -- Wolfgang Panayotis Katsaloulis wrote: > On 28 Οκτ 2009, at 11:43 π.μ., Wolfgang Korn wrote: > > >> Panayotis, >> >> what exactly do you mean by saying "doesn't work"? I assume you ran >> that >> code from within Apples emulator and caught an exception. Did you >> have a >> look into the console tool to see the error message produced? Please >> post that message that message to the list so that we can >> investigate it. >> >> -- Wolfgang >> > > > Actually I mean doesn't work as expected. > > From Java of course I saw > q=8 > > From emulator I saw > q=0 > > no, I didn't see an exception, because this method is already > "implemented" through StringBuilder/StringBuffer class > It's a strange error, because inside the > - (java_lang_StringBuffer*) append___float: (float) f > of java_lang_StringBuffer object, the value of "f" is indeed 0 > ------------------------------------------------------------------------------ > Come build with us! The BlackBerry(R) Developer Conference in SF, CA > is the only developer event you need to attend this year. Jumpstart your > developing skills, take BlackBerry mobile applications to market and stay > ahead of the curve. Join us from November 9 - 12, 2009. Register now! > http://p.sf.net/sfu/devconference > _______________________________________________ > xmlvm-users mailing list > xml...@li... > https://lists.sourceforge.net/lists/listinfo/xmlvm-users > |
From: Panayotis K. <pan...@pa...> - 2009-10-28 09:57:26
|
On 28 Οκτ 2009, at 11:43 π.μ., Wolfgang Korn wrote: > Panayotis, > > what exactly do you mean by saying "doesn't work"? I assume you ran > that > code from within Apples emulator and caught an exception. Did you > have a > look into the console tool to see the error message produced? Please > post that message that message to the list so that we can > investigate it. > > -- Wolfgang Actually I mean doesn't work as expected. From Java of course I saw q=8 From emulator I saw q=0 no, I didn't see an exception, because this method is already "implemented" through StringBuilder/StringBuffer class It's a strange error, because inside the - (java_lang_StringBuffer*) append___float: (float) f of java_lang_StringBuffer object, the value of "f" is indeed 0 |