Compiler and software product for compiling intermediate language bytecodes into Java bytecodes

Saved in:
Bibliographic Details
Title: Compiler and software product for compiling intermediate language bytecodes into Java bytecodes
Patent Number: 7,380,242
Publication Date: May 27, 2008
Appl. No: 10/437518
Application Filed: May 14, 2003
Abstract: Compiler and software product for compiling intermediate language (IL) bytecodes, such as Microsoft IL (MSIL) instructions into Java bytecodes, are provided. The provided compiler decodes the IL instructions, generates the stack content, and produces Java bytecodes based on the stack content. Furthermore, the compiler is specially designed to allow a programmer to develop software applications using the .Net framework that could be easily executed using a Java runtime environment.
Inventors: Alaluf, Eyal (Jerusalem, IL)
Assignees: Mainsoft Israel Ltd. (Lod, IL)
Claim: 1. A method for compiling the bytecodes of a first intermediate language to a second intermediate language, by a compiler having system calls and metadata content, wherein said second intermediate language is Java bytecodes for use in a Java runtime environment, said method comprising: generating a virtual stack content by performing a static analysis of the first intermediate language bytecodes; decoding the variable types of the first intermediate language bytecodes and producing virtual stack element types; and producing the Java bytecodes using said virtual stack element types and the respective first intermediate language bytecodes.
Claim: 2. The method of claim 1 , further comprising the step of simplifying the bytecodes of the first intermediate language prior to generating a virtual stack content.
Claim: 3. The method of claim 2 , wherein said simplifying the first intermediate language bytecodes comprises at least replacing the intermediate language bytecodes with at least one pseudo intermediate language instruction.
Claim: 4. The method of claim 3 , wherein decoding of said at least one pseudo intermediate language instruction is unique to the compiler.
Claim: 5. The method of claim 1 , wherein said second intermediate language is Microsoft intermediate language (MSIL™).
Claim: 6. The method of claim 5 , wherein said MSIL™ is generated using another compiler.
Claim: 7. The method of claim 6 , wherein said other compiler is a .Net compiler.
Claim: 8. The method of claim 7 , wherein said .Net compiler is capable of compiling at least one of the following programming languages: C++ with managed extensions; C#; Visual Basic; Pascal; Cobol; Java; and Jscript.
Claim: 9. The method of claim 1 , wherein said software applications are at least .Net applications.
Claim: 10. The method of claim 1 , wherein said virtual stack element types comprise at least one of: 32 bit integer; 64 bit integer; object reference; and floating number.
Claim: 11. The method of claim 1 , wherein said variable types comprise at least one of: byte; 32 bit integer; 64 bit integer; single precision number; double precision number; Boolean character (char); decimal; string 16 bit integer; 8 bit integer; unsigned 16 bit integer; unsigned 32 bit integer; unsigned 64 bit integer; and object reference.
Claim: 12. The method of claim 1 , wherein producing Java bytecodes comprises at least: convening the intermediate language system calls to Java system calls, changing said variable types of the intermediate language bytecodes to Java variable types and creating the Java bytecodes using said virtual stack content.
Claim: 13. The method of claim 1 , wherein producing Java: bytecodes further comprises convening the metadata content to the Java bytecodes.
Claim: 14. The method of claim 1 , wherein producing said Java bytecodes is performed using said at least compiler-implemented classes.
Claim: 15. The method of claim 14 , wherein said at least compiler-implemented classes comprise static Java class files programmed to convert frequently used intermediate language bytecodes.
Claim: 16. The method of claim 1 , wherein said generating a; least one Java class file comprises at least: mapping method names; mapping variable names; and updating reference fields.
Claim: 17. The method of claim 1 , wherein said generating at least one Java class file comprises outputting a single class file for each intermediate language class.
Claim: 18. The method of claim 1 , wherein said compiling is operative to handle attributes unsupported by the Java language.
Claim: 19. The method of claim 1 , wherein the Java bytecodes can be executed an any Java virtual machine.
Claim: 20. The method of claim 1 , wherein the Java bytecodes can operate in conjunction with any Java runtime environment.
Claim: 21. The method of claim 20 , wherein said Java runtime environment comprises at least Java to enterprise edition (J2EE) platform and Java to standard edition (J2SE) platform.
Claim: 22. A computer storage unit comprising computer executable code having system calls and metadata content, and capable of decoding intermediate language bytecodes and producing Java class files for use in a Java runtime environment, wherein executing the code comprises: generating a virtual stack content by performing a static analysis of the intermediate language bytecodes; decoding the variable types of the intermediate language bytecodes and producing virtual stack element types; producing the Java bytecodes using said virtual stack element types; and, generating at least one Java class file, thereby enabling a programmer to develop software applications executable in the Java runtime environment.
Claim: 23. The computer storage unit of claim 22 , the computer executable code further comprising the step of simplifying the intermediate language bytecodes prior to generating a virtual stack content.
Claim: 24. The computer storage unit of claim 23 , wherein said simplifying the intermediate language bytecodes comprises at least replacing the intermediate language bytecodes with at least one pseudo intermediate language instruction.
Claim: 25. The computer storage unit of claim 24 , wherein decoding of said at least one pseudo intermediate language instruction is unique to the code.
Claim: 26. The computer storage unit of claim 22 , wherein the intermediate language comprises another intermediate language.
Claim: 27. The computer storage unit of claim 26 , wherein the intermediate language is Microsoft intermediate language (MSIL™).
Claim: 28. The computer storage unit of claim 22 , wherein said MSIL™ is generated using another compiler.
Claim: 29. The computer storage unit of claim 22 , wherein the software applications are at least .Net applications.
Claim: 30. The computer storage unit of claim 29 , wherein said another compiler is a .Net compiler.
Claim: 31. The computer storage unit of claim 30 , wherein said .Net compiler is capable of compiling at least one of the following programming languages: C++ with managed extensions; C#(C Sharp); Visual Basic; Pascal; Cobol; and Jscript.
Claim: 32. The computer storage unit of claim 22 , wherein said virtual stack element types comprise at least one of: 32 bit integer; 64 bit integer; object reference; and floating number.
Claim: 33. The computer storage unit of claim 22 , wherein said variable types comprise at least one of: byte; 32 bit integer; 64 bit integer; single precision number; double precision number; Boolean; character (char); decimal; string; 16 bit integer; 8 bit integer; unsigned 16 bit integer; unsigned 32 bit integer; unsigned 64 bit integer; and object reference.
Claim: 34. The computer storage unit of claim 22 , wherein producing Java bytecodes comprises at least: converting the intermediate language system calls to Java system calls, changing said variable types of the intermediate language bytecodes to Java variable types and creating the Java bytecodes using said virtual stack content.
Claim: 35. The computer storage unit of claim 22 , wherein producing Java bytecodes further comprises converting the metadata content to the Java bytecodes.
Claim: 36. The computer storage unit of claim 22 , wherein producing said Java bytecodes is performed using at least compiler-implemented classes.
Claim: 37. The computer storage unit of claim 36 , wherein said compiler-implemented classes are static Java class files programmed to convert frequently used intermediate language bytecodes.
Claim: 38. The computer storage unit of claim 22 , wherein generating said at least one Java class file comprises outputting a single class file for each intermediate language class.
Claim: 39. The computer storage unit of claim 22 , wherein said generating Java class file comprises at least: mapping method names; mapping variable names; and updating reference fields.
Claim: 40. The computer storage unit of claim 22 , wherein said code is operative to handle attributes unsupported by the Java language.
Claim: 41. The computer storage unit of claim 22 , wherein said Java class file can be executed on any Java virtual machine.
Claim: 42. The computer storage unit of claim 22 , wherein the Java bytecodes can operate in conjunction with any Java runtime environment.
Claim: 43. The computer storage unit of claim 42 , wherein said Java runtime environment comprises at least Java to enterprise edition (J2EE) platform and Java to standard edition (J2SE) platform.
Claim: 44. A computer storage medium having recorded thereon a compiler having system calls and metadata content, and capable of compiling intermediate language bytecodes into Java bytecodes for use in a Java runtime environment, said compiler comprising: means for generating a virtual stack content by performing a static analysis of the intermediate language bytecodes; means for decoding the variable types of the intermediate language bytecodes and producing virtual stack element types; means for producing the Java bytecodes using said stack virtual stack element types; and means for generating at least one Java class file, thereby enabling a programmer to develop software applications executable in a Java runtime environment.
Claim: 45. The computer storage medium of claim 44 , the compiler further comprising means for simplifying the bytecodes of the intermediate language prior to generating a virtual stack content.
Claim: 46. The computer storage medium of claim 45 , wherein said simplifying of the intermediate language bytecodes comprises at least replacing the intermediate language bytecodes with at least one pseudo intermediate language instruction.
Claim: 47. The computer storage medium of claim 45 , wherein said MSIL™ is generated using another compiler.
Claim: 48. The computer storage medium of claim 44 , wherein the intermediate language comprises another intermediate language.
Claim: 49. The computer storage medium of claim 48 , wherein said other compiler is a .Net compiler.
Claim: 50. The computer storage medium of claim 44 , wherein said another intermediate language is Microsoft intermediate language (MSIL™).
Claim: 51. The computer storage medium of claim 50 , wherein said .Net compiler is capable of compiling at least one of the following programming languages: C++ with managed extensions; C#; Visual Basic; Pascal; Cobol; Java; and Jscript.
Claim: 52. The computer storage medium of claim 44 , wherein said software applications are at least .Net applications.
Claim: 53. The computer storage medium of claim 44 wherein said virtual stack element types comprise at least one of: 32 bit integer; 64 bit integer; object reference; floating number.
Claim: 54. The computer storage medium of claim 44 , wherein said variable type comprises at least one of: byte; 32 bit integer; 64 bit integer; single precision number; double precision number; Boolean; character (char); decimal; string; and pointer.
Claim: 55. The computer storage medium of claim 54 , wherein said at least compiler-implemented classes comprise static Java class files programmed to convert frequently used intermediate language bytecodes.
Claim: 56. The computer storage medium of claim 44 , wherein said producing Java bytecodes comprises at least: converting the intermediate language system calls to Java system calls, changing said variable types of the intermediate language to Java variable types and creating the Java bytecodes using said virtual stack content.
Claim: 57. The computer storage medium of claim 44 , wherein producing Java bytecodes further comprises converting the metadata content to the Java bytecodes.
Claim: 58. The computer storage medium of claim 44 , wherein producing said Java bytecodes is performed using said at least compiler-implemented classes.
Claim: 59. The computer storage medium of claim 44 , wherein said generating at least one Java class file comprises outputting a single class file for each intermediate language class.
Claim: 60. The computer storage medium of claim 44 , wherein said generating at least one Java class file comprises at least: mapping method names, mapping variable names, updating reference fields.
Claim: 61. The computer storage medium of claim 60 , wherein said Java runtime environment comprises at least Java to enterprise edition (J2EE) platform and Java to standard edition (J2SE) platform.
Claim: 62. The computer storage medium of claim 44 , wherein said compiler is operative to handle attributes unsupported by the Java language.
Claim: 63. The computer storage medium of claim 44 , wherein the Java bytecodes can be executed on any Java virtual machine.
Claim: 64. The computer storage medium of claim 63 , wherein decoding of said at least one pseudo intermediate language bytecode is unique to the compiler.
Claim: 65. The computer storage medium of claim 44 , wherein the Java bytecodes can operate in conjunction with any Java runtime environment.
Claim: 66. A computer storage unit comprising computer executable code for executing .Net applications on a Java virtual machine (JVM) having a .Net compiler and a Java runtime environment, comprising the steps of: generating bytecodes in an intermediate language using the .Net compiler; compiling said intermediate language bytecodes into Java bytecodes; and executing said Java bytecodes on the JVM, thereby enabling a programmer to develop .Net applications executable in the Java runtime environment.
Claim: 67. The computer storage unit of claim 66 , wherein said intermediate language is at least a Microsoft intermediate language (MSIL™).
Claim: 68. The computer storage unit of claim 66 , wherein said .Net applications are written using at least one of the following programming languages: C++ with managed extensions; C#; Visual Basic; Pascal; Cobol; Java; and Jscript.
Claim: 69. The computer storage unit of claim 66 , wherein compiling intermediate language into Java bytecodes further comprises: generating a virtual stack content by performing a static analysis of said intermediate language bytecodes; decoding the variable types of said intermediate language bytecodes and producing stack element types; producing said Java bytecodes using said stack virtual stack element types; and, generating at least one Java class file.
Claim: 70. The computer storage unit of claim 66 , wherein compiling said intermediate language bytecodes further comprises the step of simplifying said intermediate language bytecodes prior to generating a virtual stack content.
Claim: 71. The computer storage unit of claim 69 , wherein said generating Java class file comprises at least mapping method names, mapping variable names and updating reference fields.
Claim: 72. The computer storage unit of claim 71 , wherein said any Java runtime environment comprises at least Java to platform enterprise edition (J2EE) and Java to platform standard edition (J2SE).
Claim: 73. The computer storage unit of claim 69 , wherein generating said at least one Java class file comprises outputting a single class file for each intermediate language class.
Claim: 74. The computer storage unit of claim 69 , wherein producing Java bytecodes comprises at least: converting intermediate language system calls to Java system calls, changing said variable types of the intermediate language to Java variable types and creating the Java bytecodes using said virtual stack content.
Claim: 75. The computer storage unit of claim 69 , wherein the generated Java bytecodes can operate in conjunction with any Java runtime environment.
Claim: 76. A computer system comprising at least a central processing unit (CPU); a memory; means for inputting at least one .Net application; a .Net compiler; and a computer executable code for executing said at least one .Net application on a Java virtual machine (JVM), wherein said computer system utilizes said processing unit to execute the steps of: generating intermediate language bytecodes using said .Net compiler; compiling said intermediate language into Java bytecodes; and executing said Java bytecodes on said JVM.
Claim: 77. The computer system of claim 76 , wherein said intermediate language is at least a Microsoft intermediate language (MSIL™).
Claim: 78. The computer system of claim 76 , wherein compiling said intermediate language into Java bytecodes further comprises: generating a virtual stack content by performing a static analysis of said intermediate language bytecodes; decoding the variable types of said intermediate language bytecodes and producing stack element types; producing said Java bytecodes using said stack element types; and, p1 generating at least one Java class file.
Current U.S. Class: 717/148
Patent References Cited: 5668999 September 1997 Gosling
5740441 April 1998 Yellin et al.
5768593 June 1998 Walters et al.
6205577 March 2001 Shinohara et al.
6295642 September 2001 Blandy
6327702 December 2001 Sauntry et al.
6412107 June 2002 Cyran et al.
6484313 November 2002 Trowbridge et al.
6810518 October 2004 Grimaud et al.
6823504 November 2004 Sokolov
2001/0047394 November 2001 Kloba et al.
2002/0120719 August 2002 Lee et al.
2003/0023958 January 2003 Patel et al.
2003/0084271 May 2003 Lindwer
2003/0120824 June 2003 Shattuck et al.
2003/0182457 September 2003 Brewin
2004/0083467 April 2004 Hanley et al.
2004/0098731 May 2004 Demsey et al.

Other References: Binding et al., Generation of Java Beans to Access XML Data, 2000, IEEE, p. 143-141. cited by examiner
Kazi et al., Techniques for Obtaining High Performance in Java Programs, Sep. 2000, ACM p. 213-240. cited by examiner
Primary Examiner: Chavis, John
Attorney, Agent or Firm: Katten Muchin Rosenman LLP
Accession Number: edspgr.07380242
Database: USPTO Patent Grants
Be the first to leave a comment!
You must be logged in first