A hybrid compiler-interpreter comprising a compiler for "compiling" source program code, and an interpreter for interpreting the "compiled" code, is provided to a computer system. The compiler comprises a code generator that generates code in intermediate form with data references made on a symbolic basis. The interpreter comprises a main interpretation routine, and two data reference handling routines, a dynamic field reference routine for handling symbolic references, and a static field reference routine for handling numeric references. The dynamic field reference routine, when invoked, resolves a symbolic reference and rewrites the symbolic reference into a numeric reference. After re-writing, the dynamic field reference routine returns to the main interpretation routine without advancing program execution to the next instruction, thereby allowing the rewritten instruction with numeric reference to be reexecuted. The static field reference routine, when invoked, obtain data for the program from a data object based on the numeric reference. After obtaining data, the static field reference routine advances program execution to the next instruction before returning to the interpretation routine. The main interpretation routine selectively invokes the two data reference handling routines depending on whether the data reference in an interaction in a symbolic or a numeric reference.
|
0. 1. In a computer system comprising a program in source code form, a method for generating executable code for said program and resolving data references in said generated code, said method comprising the steps of:
a) generating executable code in intermediate form for said program in source code form with data references being made in said generated code on a symbolic basis, said generated code comprising a plurality of instructions of said computer system; b) interpreting said instructions, one at a time, in accordance to a program execution control; c) resolving said symbolic references to corresponding numeric references, replacing said symbolic references with their corresponding numeric references, and continuing interpretation without advancing program execution, as said symbolic references are encountered while said instructions are being interpreted; and d) obtaining data in accordance to said numeric references, and continuing interpretation after advancing program execution, as said numeric references are encountered while said instruction are being interpreted; said steps b) through d) being performed iteratively and interleaving.
0. 6. In a computer system comprising a program in source code form, an apparatus for generating executable code for said program and resolving data references in said generated code, said apparatus comprising:
a) compilation means for receiving said program in source code form and generating executable code in intermediate form for said program in source code form with data references being made in said generated code on a symbolic basis, said generated code comprising a plurality of instructions of said computer system; b) interpretation means for receiving said generated code and interpreting said instructions, one at a time; c) dynamic reference handling means coupled to said interpretation means for resolving said symbolic references to corresponding numeric references, replacing said symbolic references with their corresponding numeric references, and continuing interpretation by said interpretation means without advancing program execution, as said symbolic references are encountered while said instructions are being interpreted by said interpretation means; and d) static reference handling means coupled to said interpretation means for obtaining data in accordance to said numeric references, and continuing interpretation by said interpretation means after advancing program execution, as said numeric references are encountered while said instruction are being interpreted by said interpretation means; said interpretation means, said dynamic reference handling means, and said static reference handling means performing their corresponding functions iteratively and interleavingly.
0. 27. A computer-implemented method comprising:
receiving a program with a set of original instructions written in an intermediate form code; generating a set of new instructions for the program that contain numeric references resulting from invocation of a routine to resolve any symbolic data references in the set of original instructions; and executing the program using the set of new instructions.
0. 13. A computer-implemented method for executing instructions, certain of said instructions containing one or more symbolic references, said method comprising the steps of:
resolving a symbolic reference in an instruction, said step of resolving said symbolic reference including the substeps of: determining a numerical reference corresponding to said symbolic reference, and storing said numerical reference in a memory.
0. 11. An apparatus comprising:
a memory containing intermediate form object code constituted by a set of instructions, certain of said instructions containing one or more symbolic references; and a processor configured to execute said instructions containing one or more symbolic references by determining a numerical reference corresponding to said symbolic reference, storing said numerical references, and obtaining data in accordance to said numerical references.
0. 29. A computer program product containing instructions for causing a computer to perform a method, the method comprising:
receiving a program with a set of original instructions written in an intermediate form code; generating a set of new instructions for the program that contain numeric references resulting from invocation of a routine to resolve any symbolic data references in the set of original instructions; and executing the program using the set of new instructions.
0. 28. A data processing system, comprising:
a processor; and a memory comprising a control program for causing the processor to (i) receive a program with a set of original instructions written in an intermediate form code, (ii) generate a set of new instructions for the program that contain numeric references resulting from invocation of a routine to resolve any symbolic data references in the set of original instructions, and (iii) executing the program using the set of new instructions.
0. 22. An apparatus comprising:
a memory containing a compiled program in intermediate form object code constituted by a set of instructions, at least one of the instructions containing a symbolic reference; and a processor configured to execute the instruction by determining a numerical reference corresponding to the symbolic reference, and performing an operation in accordance with the instruction and data obtained in accordance with the numerical reference without recompiling the program or any portion thereof.
0. 36. A computer-implemented method for executing a program comprised of bytecodes, the method comprising:
determining whether a bytecode of the program contains a symbolic reference; when it is determined that the bytecode contains a symbolic reference, invoking a dynamic field reference routine to resolve the symbolic reference; and performing an operation identified by the bytecode thereafter using data from a storage location identified by a numeric reference resulting from the invocation of the dynamic field reference routine.
0. 24. A computer-implemented method for executing a program comprised of bytecodes, the method comprising:
determining immediately prior to execution whether a bytecode of the program contains a symbolic data reference; when it is determined that the bytecode of the program contains a symbolic data reference, invoking a dynamic field reference routine to resolve the symbolic data reference; and executing thereafter the bytecode using stored data located using a numeric reference resulting from the resolution of the symbolic reference.
0. 19. A memory for use in executing a program by a processor, the memory comprising:
intermediate form code containing symbolic field references associated with an intermediate representation of source code for the program, the intermediate representation having been generated by lexically analyzing the source code and parsing output of said lexical analysis, and wherein the symbolic field references are resolved by determining a numerical reference corresponding to said symbolic reference, and storing said numerical reference in a memory.
0. 23. A computer-implemented method, comprising:
receiving a program with a set instructions written in an intermediate form code; analyzing each instruction of the program to determine whether the instruction contains a symbolic reference to a data object; and executing the program, wherein when it was determined that an instruction contains a symbolic reference, data from a storage location identified by a numeric reference correspoding to the symbolic reference is used thereafter to perform an operation corresponding to that instruction.
0. 33. A computer-implemented method, comprising:
receiving a program with a set instructions written in an intermediate form code; analyzing each instruction of the program to determine whether the instruction contains a symbolic reference to a data object; and executing the program, wherein when it was determined that an instruction contains a symbolic reference, data from a storage location identified by a numeric reference corresponding to the symbolic reference is used thereafter to perform an operation corresponding to that instruction.
0. 39. A computer-implemented method comprising:
receiving a program formed of instructions written in an intermediate form code compiled from source code; analyzing each instruction to determine whether it contains a symbolic field reference; and executing the program by performing an operation identified by each instruction, wherein data from a storage location identified by a numeric reference is thereafter used for the operation when the instruction contains a symbolic field reference, the numeric reference having been resolved from the symbolic field reference.
0. 17. In a computer system comprising a program, a method for executing said program comprising the steps of:
receiving intermediate form object code for said program with symbolic data references in certain instructions of said intermediate form object code; and converting the instructions of the intermediate form object code having symbolic data references, said converting step comprising the substeps of: resolving said symbolic references to corresponding numerical references, storing said numerical references, and obtaining data in accordance to said numerical references. 0. 37. A data processing system, comprising:
a processor; and a memory comprising a program comprised of bytecodes and instructions for causing the processor to (i) determine whether a bytecode of the program contains a symbolic reference, (ii) when it is determined that the bytecode contains a symbolic reference, invoke a dynamic field reference routine to resolve the symbolic reference, and (iii) perform an operation identified by the bytecode thereafter using data from a storage location identified by a numeric reference resulting from the invocation of the dynamic field reference routine.
0. 20. A computer-implemented method comprising:
receiving a program that comprises a set instructions written in an intermediate form code; replacing each instruction in the program with a symbolic data reference with a new instruction containing a numeric reference resulting from invocation of a dynamic field reference routine to resolve the symbolic data reference; and executing the program by performing an operation in accordance with each instruction or new instruction, depending upon whether an instruction has been replaced with a new instruction in accordance with the replacing step.
0. 30. A computer-implemented method comprising:
receiving a program that comprises a set instructions written in an intermediate form code; replacing each instruction in the program with a symbolic data reference with a new instruction containing a numeric reference resulting from invocation of a dynamic field reference routine to resolve the symbolic data reference; and executing the program by performing an operation in accordance with each instruction or new instruction, depending upon whether an instruction has been replaced with a new instruction in accordance with the replacing step.
0. 38. A computer program product containing instructions for causing a computer to perform a method for executing a program comprised of bytecodes, the method comprising:
determining whether a bytecode of the program contains a symbolic reference; when it is determined that the bytecode contains a symbolic reference, invoking a dynamic field reference routine to resolve the symbolic reference; and performing an operation identified by the bytecode therafter using data from a storage location identified by a numeric reference resulting from the invocation of the dynamic field reference routine.
0. 26. A computer program product containing instructions for causing a computer to perform a method for executing a program comprised of bytecodes, the method comprising:
determining immediately prior to execution whether a bytecode of the program contains a symbolic data reference; when it is determined that the bytecode of the program contains a symbolic data reference, invoking a dynamic field reference routine to resolve the symbolic data reference; and executing thereafter the bytecode using stored data located using a numeric reference resulting from the resolution of the symbolic reference.
0. 18. A computer-implemented method for executing program operations, each operation being comprised of a set of instructions, certain of said instructions containing one or more symbolic references, said method comprising the steps of:
receiving a set of instructions reflecting an operation; and performing the operation corresponding to the received set of instructions, wherein at least one of said symbolic references is resolved by determining a numerical reference corresponding to said symbolic reference, storing said numerical reference, and obtaining data in accordance to said stored numerical reference.
0. 25. A data processing system, comprising:
a processor; and a memory comprising a program comprised of bytecodes and instructions for causing the processor to (i) determine immediately prior to execution of the program whether a bytecode of the program contains a symbolic data reference, (ii) when it is determined that the bytecode of the program contains a symbolic data reference, invoke a dynamic field reference routine to resolve the symbolic data reference, and (iii) execute thereafter the bytecode using stored data located using a numeric reference resulting from the resolution of the symbolic reference.
0. 35. A computer program product containing control instructions for causing a computer to perform a method, the method comprising:
receiving a program with a set instructions written in an intermediate form code; analyzing each instruction of the program to determine whether the instruction contains a symbolic reference to a data object; and executing the program, wherein when it was determined that an instruction contains a symbolic reference, data from a storage location identified by a numeric reference corresponding to the symbolic reference is used thereafter to perform an operation corresponding to that instruction.
0. 34. A data processing system, comprising:
a processor; and a memory comprising a control program for causing the processor to (i) receive a program with a set instructions written in an intermediate form code, (ii) analyze each instruction of the program to determine whether the instruction contains a symbolic reference to a data object, and (iii) execute the program, wherein when it was determined that an instruction contains a symbolic reference, data from a storage location identified by a numeric reference corresponding to the symbolic reference is used thereafter to perform an operation corresponding to that instruction.
0. 41. A computer program product containing control instructions for causing a computer to perform a method, the method comprising:
receiving a program formed of instructions written in an intermediate form code compiled from source code; analyzing each instruction to determine whether it contains a symbolic field reference; and executing the program by performing an operation identified by each instruction, wherein data from a storage location identified by a numeric reference is used thereafter for the operation when the instruction contains a symbolic field reference, the numeric reference having been resolved from the symbolic field reference.
0. 40. A data processing system, comprising:
a processor; and a memory comprising a control program for causing the processor to (i) receive a program formed of instructions written in an intermediate form code compiled from source code, (ii) analyze each instruction to determine whether it contains a symbolic field reference, and (iii) execute the program by performing an operation identified by each instruction, wherein data from a storage location identified by a numeric reference is thereafter used for the operation when the instruction contains a symbolic field reference, the numeric reference having been resolved from the symbolic field reference.
0. 12. A computer-readable medium containing instructions for controlling a data processing system to perform a method for interpreting intermediate form object code comprised of instructions, certain of said instructions containing one or more symbolic references, said method comprising the steps of:
interpreting said instructions in accordance with a program execution control; and resolving a symbolic reference in an instruction being interpreted, said step of resolving said symbolic reference including the substeps of: determining a numerical reference corresponding to said symbolic reference, and storing said numerical reference in a memory. 0. 32. A computer program product containing control instructions for causing a computer to perform a method, the method comprising:
receiving a program that comprises a set instructions written in an intermediate form code; replacing each instruction in the program with a symbolic data reference with a new instruction containing a numeric reference resulting from invocation of a dynamic field reference routine to resolve the symbolic data reference; and executing the program by performing an operation in accordance with each instruction or new instruction, depending upon whether an instruction has been replaced with a new instruction in accordance with the replacing step.
0. 21. A data processing system, comprising:
a processor; and a memory comprising a control program for causing the processor to (i) receive a program that comprises a set instructions written in an intermediate form code, (ii) replace each instruction in the program with a symbolic data reference with a new instruction containing a numeric reference resulting from invocation of a dynamic field reference routine to resolve the symbolic data reference, and (iii) execute the program by performing an operation in accordance with each instruction or new instruction, depending upon whether an instruction has been replaced with a new instruction in accordance with the replacing step.
0. 31. A data processing system, comprising:
a processor; and a memory comprising a control program for causing the processor to (i) receive a program that comprises a set instructions written in an intermediate form code, (ii) replace each instruction in the program with a symbolic data reference with a new instruction containing a numeric reference resulting from invocation of a dynamic field reference routing to resolve the symbolic data reference, and (iii) execute the program by performing an operation in accordance with each instruction or new instruction, depending upon whether an instruction has been replaced with a new instruction in accordance with the replacing step.
0. 2. The method as set forth in
0. 3. The method as set forth in
0. 4. The method as set forth in
0. 5. The method as set forth in
said continuing interpretation in said step d) is achieved by performing said step b) after said d) after incrementing said program counter.
0. 7. The apparatus as set forth in
0. 8. The apparatus as set forth in
0. 9. The apparatus as set forth in
0. 10. The apparatus as set forth in
0. 14. The method of
0. 15. The method of
0. 16. The method of
|
This is a continuation of reissue application Ser. No. 08/755,764, filed Nov. 21, 1996, now U.S. Pat. Re. No. 36,204, which is incorporated herein by reference.
1. Field of the Invention
The present invention relates to the field of computer systems, in particular, programming language compilers and interpreters of these computer systems. More specifically, the present invention relates to resolving references in compiler generated object code.
2. Background
The implementation of modern programming languages, including object oriented programming languages, are generally grouped into two categories: compiled and interpreted.
In a compiled programming language, a computer program (called a compiler) compiles the source program and generates executable code for a specific computer architecture. References to data in the generated code are resolved prior to execution based on the layout of the data objects that the program deals with, thereby, allowing the executable code to reference data by their locations. For example, consider a program that deals with a point data object containing two variables x and y, representing the x and y coordinates of a point, and further assume that the variables x and y are assigned slots 1 and 2 respectively, in each instance of the point data object. Thus, an instruction that accesses or fetches y, such as the Load instruction 14 illustrated in
This "compiled" approach presents problems when a program is constructed in pieces, which happens frequently under object oriented programming. For example, a program may be constructed from a library and a main program. If a change is made to the library, such that the layout of one of the data objects it implements is changed, then clients of that library, like the main program, need to be recompiled. Continuing the preceding example, if the point data object had a new field added at the beginning called name, which contains the name of the point, then the variables x and y could be reassigned to slots 2 and 3. Existing programs compiled assuming that the variables x and y and are in slots 1 and 2 will have to be recompiled for them to execute correctly.
In an interpreted language, a computer program (called a translator) translates the source statements of a program into some intermediate form, typically independent of any computer instruction set. References to data in the intermediate form are not fully resolved before execution based on the layout of the data objects that the program deals with. Instead, references to data are made on a symbolic basis. Thus, an instruction that accesses or fetches y, such as the Load instruction 14' illustrated in
The "interpreted" approach avoids the problems encountered with the "compiled" approach, when a program is constructed in pieces. However, because of the extra level of interpretation at execution time, each time an instruction comprising a symbolic reference is interpreted, execution is slowed significantly.
Thus, it is desirable if programming languages can be implemented in a manner that provides the execution performance of the "compiled" approach, and at the same time, the flexibility of the "interpreted" approach for altering data objects, without requiring the compiled programs to be recompiled. As will be disclosed, the present invention provides a method and apparatus for resolving data references in compiler generated object code that achieves the desired results.
A method and apparatus for generating executable code and resolving data references in the generated code is disclosed. The method and apparatus provides execution performance substantially similar to the traditional compiled approach, as well as the flexibility of altering data objects like the traditional interpreted approach. The method and apparatus has particular application to implementing object oriented programming languages in computer systems.
Under the present invention, a hybrid compiler-interpreter comprising a compiler for "compiling" source program code, and an interpreter for interpreting the "compiled" code, is provided to a computer system. The compiler comprises a code generator that generates code in intermediate form with data references made on a symbolic basis. The interpreter comprises a main interpretation routine, and two data reference handling routines, a static field reference routine for handling numeric references and a dynamic field reference routine for handling symbolic references. The dynamic field reference routine, when invoked, resolves a symbolic reference and rewrites the symbolic reference into a numeric reference. After rewriting, the dynamic field reference routine returns to the interpreter without advancing program execution to the next instruction, thereby allowing the rewritten instruction with numeric reference to be reexecuted. The static field reference routine, when invoked, obtain data for the program from a data object based on the numeric reference. After obtaining data, the static field reference routine advances program execution to the next instruction before returning to the interpreter. The main interpretation routine selectively invokes the two data reference handling routines depending on whether the data reference in an instruction is a symbolic or a numeric reference.
As a result, the "compiled" intermediate form object code of a program achieves execution performance substantially similar to that of the traditional compiled object code, and yet it has the flexibility of not having to be recompiled when the data objects it deals with are altered like that of the traditional translated code, since data reference resolution is performed at the first execution of a generated instruction comprising a data reference.
The objects, features, and advantages of the present invention will be apparent from the following detailed description of the presently preferred and alternate embodiments of the invention with references to the drawings in which:
A method and apparatus for generating executable code and resolving data references in the generated code is disclosed. The method and apparatus provides execution performance substantially similar to the traditional compiled approach, as well as the flexibility of altering data objects like the traditional interpreted approach. The method and apparatus has particular application to implementing object oriented programming languages. In the following description for purposes of explanation, specific numbers, materials and configurations are set forth in order to provide a thorough understanding of the present invention. However, it will be apparent to one skilled in the art that the present invention may be practiced without the specific details. In other instances, well known systems are shown in diagrammatical or block diagram form in order not to obscure the present invention unnecessarily.
Referring now to
Except for the manner they are used to practice the present invention, the CPU 22, the memory 24, the I/O module 26, the input/output devices 30, and the storage devices 28, are intended to represent a broad category of these hardware elements found in most computer systems. The constitutions and basic functions of these elements are well known and will not be further described here.
As shown in
Referring now to
As shown in
For further descriptions on various parsers, intermediate representation builders, semantic analyzers, and code generators, see A. V. Aho, R. Sethi, and J. D. Ullman, Compilers Principles, Techniques and Tools. Addision-Wesley, 1986, pp. 25-388, and 463-512.
Referring now to
As shown in
On the other hand, if the data reference is determined to be a numeric reference, branch 88a, the main interpretation routine invokes the static field reference routine, block 94. Upon invocation, the static field reference routine obtain the data reference by the numeric reference, block 96. Upon obtaining the data, the static field reference routine advances the program counter, block 98, and returns to the main interpretation routine, block 100.
Referring now to
While the present invention has been described in terms of presently preferred and alternate embodiments, those skilled in the art will recognize that the invention is not limited to the embodiments described. The method and apparatus of the present invention can be practiced with modification and alteration within the spirit and scope of the appended claims. The description is thus to be regarded as illustrative instead of limiting on the present invention.
Patent | Priority | Assignee | Title |
10503525, | Aug 22 2017 | REFINITIV US ORGANIZATION LLC | Apparatuses, methods and systems for persisting values in a computing environment |
11068282, | Aug 22 2017 | REFINITIV US ORGANIZATION LLC | Apparatuses, methods and systems for persisting values in a computing environment |
11809839, | Jan 18 2022 | Computer language and code for application development and electronic and optical communication | |
6785683, | Jul 06 2000 | International Business Machines Corporation | Categorization and presentation tool for code resources |
7483757, | Jul 22 2005 | Honeywell International, Inc. | Control system migration |
7840952, | Jul 10 2002 | U S BANK NATIONAL ASSOCIATION, AS COLLATERAL AGENT | Method and system for generating object code to facilitate predictive memory retrieval |
8468506, | Jul 10 2002 | U S BANK NATIONAL ASSOCIATION, AS COLLATERAL AGENT | Method and system for generating object code to facilitate predictive memory retrieval |
9170781, | Jul 10 2002 | U S BANK NATIONAL ASSOCIATION, AS COLLATERAL AGENT | Method and system for generating object code to facilitate predictive memory retrieval |
9304750, | Jul 11 2002 | U S BANK NATIONAL ASSOCIATION, AS COLLATERAL AGENT | System and method for processor with predictive memory retrieval assist |
9858079, | Jul 10 2002 | U S BANK NATIONAL ASSOCIATION, AS COLLATERAL AGENT | Method and system for generating object code to facilitate predictive memory retrieval |
Patent | Priority | Assignee | Title |
4636940, | Mar 31 1983 | Agilent Technologies Inc | Logic analyzer using source program or other user defined symbols in the trace specification and the trace listing |
4667290, | Sep 10 1984 | 501 Philon, Inc. | Compilers using a universal intermediate language |
4667920, | Oct 12 1984 | DAIMLER-BENZ AKTIENGESELLSCHAFT, D 7000 STUTTGART 60, GERMANY | Elastic support arrangement for a vehicle fuel pump or the like |
4686623, | Jun 07 1985 | International Business Machines Corporation | Parser-based attribute analysis |
4729096, | Oct 24 1984 | International Business Machines Corporation | Method and apparatus for generating a translator program for a compiler/interpreter and for testing the resulting translator program |
4773007, | Mar 07 1986 | Hitachi, Ltd. | Complier code optimization method for a source program having a first and second array definition and use statements in a loop |
5201050, | Jun 30 1989 | HEWLETT-PACKARD DEVELOPMENT COMPANY, L P | Line-skip compiler for source-code development system |
5230050, | Feb 06 1989 | Hitachi, Ltd. | Method of recompiling a program by using result of previous compilation |
5276881, | Jun 25 1990 | Hewlett-Packard Company | ANDF producer using the HPcode-Plus compiler intermediate language |
5280613, | Jun 25 1990 | Hewlett-Packard Company | ANDF installer using the HPcode-Plus compiler intermediate language |
5307492, | Mar 07 1991 | HEWLETT-PACKARD DEVELOPMENT COMPANY, L P | Mapping assembly language argument list references in translating code for different machine architectures |
5313614, | Dec 06 1988 | AT&T Bell Laboratories | Method and apparatus for direct conversion of programs in object code form between different hardware architecture computer systems |
5339419, | Jun 25 1990 | Hewlett-Packard Company | ANDF compiler using the HPcode-plus compiler intermediate language |
5347632, | Jul 15 1988 | International Business Machines Corporation | Reception system for an interactive computer network and method of operation |
5428792, | Dec 12 1991 | International Business Machines Corporation | System for producing language neutral objects and generating an interface between the objects and multiple computer languages |
5442771, | Jul 15 1988 | International Business Machines Corporation | Method for storing data in an interactive computer network |
5594910, | Mar 23 1989 | International Business Machines Corporation | Interactive computer network and method of operation |
5613117, | Feb 27 1991 | HEWLETT-PACKARD DEVELOPMENT COMPANY, L P | Optimizing compiler using templates corresponding to portions of an intermediate language graph to determine an order of evaluation and to allocate lifetimes to temporary names for variables |
5649204, | Aug 22 1991 | REC Software, Inc. | Method and apparatus for consolidating software module linkage information used for starting a multi-module program |
5758072, | Mar 23 1989 | International Business Machines Corp. | Interactive computer network and method of operation |
5836014, | Feb 27 1991 | Hewlett Packard Enterprise Development LP | Method of constructing a constant-folding mechanism in a multilanguage optimizing compiler |
Executed on | Assignor | Assignee | Conveyance | Frame | Reel | Doc |
Mar 03 1999 | Sun Microsystems, Inc. | (assignment on the face of the patent) | / |
Date | Maintenance Fee Events |
Date | Maintenance Schedule |
Apr 29 2006 | 4 years fee payment window open |
Oct 29 2006 | 6 months grace period start (w surcharge) |
Apr 29 2007 | patent expiry (for year 4) |
Apr 29 2009 | 2 years to revive unintentionally abandoned end. (for year 4) |
Apr 29 2010 | 8 years fee payment window open |
Oct 29 2010 | 6 months grace period start (w surcharge) |
Apr 29 2011 | patent expiry (for year 8) |
Apr 29 2013 | 2 years to revive unintentionally abandoned end. (for year 8) |
Apr 29 2014 | 12 years fee payment window open |
Oct 29 2014 | 6 months grace period start (w surcharge) |
Apr 29 2015 | patent expiry (for year 12) |
Apr 29 2017 | 2 years to revive unintentionally abandoned end. (for year 12) |