Config editor through XML file
authorkhartlage <khartlage>
Mon, 27 Jan 2003 17:47:49 +0000 (17:47 +0000)
committerkhartlage <khartlage>
Mon, 27 Jan 2003 17:47:49 +0000 (17:47 +0000)
34 files changed:
net.sourceforge.phpeclipse/plugin.xml
net.sourceforge.phpeclipse/src/net/sourceforge/phpdt/internal/compiler/codegen/CodeStream.java
net.sourceforge.phpeclipse/src/net/sourceforge/phpdt/internal/compiler/parser/Parser.java
net.sourceforge.phpeclipse/src/net/sourceforge/phpeclipse/IPreferenceConstants.java
net.sourceforge.phpeclipse/src/net/sourceforge/phpeclipse/PHPCore.java
net.sourceforge.phpeclipse/src/net/sourceforge/phpeclipse/PHPEclipseBasePreferencePage.java [new file with mode: 0644]
net.sourceforge.phpeclipse/src/net/sourceforge/phpeclipse/PHPEclipsePreferencePage.java [deleted file]
net.sourceforge.phpeclipse/src/net/sourceforge/phpeclipse/PHPLanguagePreferencePage.java [new file with mode: 0644]
net.sourceforge.phpeclipse/src/net/sourceforge/phpeclipse/PHPOutlinePreferencePage.java [new file with mode: 0644]
net.sourceforge.phpeclipse/src/net/sourceforge/phpeclipse/PHPSyntaxEditorPreferencePage.java [new file with mode: 0644]
net.sourceforge.phpeclipse/src/net/sourceforge/phpeclipse/PHPSyntaxPreferencePage.java [deleted file]
net.sourceforge.phpeclipse/src/net/sourceforge/phpeclipse/PHPeclipsePlugin.java
net.sourceforge.phpeclipse/src/net/sourceforge/phpeclipse/newPHPPreferencesMessages_DE.properties [new file with mode: 0644]
net.sourceforge.phpeclipse/src/net/sourceforge/phpeclipse/newPHPPreferencesMessages_FR.properties [new file with mode: 0644]
net.sourceforge.phpeclipse/src/net/sourceforge/phpeclipse/newPHPPreferencesMessages_en_GB.properties [new file with mode: 0644]
net.sourceforge.phpeclipse/src/net/sourceforge/phpeclipse/phpeditor/PHPSyntaxRdr.java [new file with mode: 0644]
net.sourceforge.phpeclipse/src/net/sourceforge/phpeclipse/phpeditor/PHPTextHover.java
net.sourceforge.phpeclipse/src/net/sourceforge/phpeclipse/phpeditor/PresentationAction.java
net.sourceforge.phpeclipse/src/net/sourceforge/phpeclipse/phpeditor/SyntaxError.java [deleted file]
net.sourceforge.phpeclipse/src/net/sourceforge/phpeclipse/phpeditor/php/PHPCodeScanner.java
net.sourceforge.phpeclipse/src/net/sourceforge/phpeclipse/phpeditor/php/PHPConstant.java [new file with mode: 0644]
net.sourceforge.phpeclipse/src/net/sourceforge/phpeclipse/phpeditor/php/PHPElement.java [new file with mode: 0644]
net.sourceforge.phpeclipse/src/net/sourceforge/phpeclipse/phpeditor/php/PHPFunction.java [new file with mode: 0644]
net.sourceforge.phpeclipse/src/net/sourceforge/phpeclipse/phpeditor/php/PHPFunctionDescription.java [deleted file]
net.sourceforge.phpeclipse/src/net/sourceforge/phpeclipse/phpeditor/php/PHPKeyword.java [new file with mode: 0644]
net.sourceforge.phpeclipse/src/net/sourceforge/phpeclipse/phpeditor/php/PHPType.java [new file with mode: 0644]
net.sourceforge.phpeclipse/src/net/sourceforge/phpeclipse/phpeditor/phpsyntax.xml [new file with mode: 0644]
net.sourceforge.phpeclipse/src/net/sourceforge/phpeclipse/phpeditor/util/HTMLColorProvider.java
net.sourceforge.phpeclipse/src/net/sourceforge/phpeclipse/phpeditor/util/PHPColorProvider.java
net.sourceforge.phpeclipse/src/net/sourceforge/phpeclipse/preferences/ColorEditor.java [new file with mode: 0644]
net.sourceforge.phpeclipse/src/net/sourceforge/phpeclipse/preferences/OverlayPreferenceStore.java [new file with mode: 0644]
net.sourceforge.phpeclipse/src/net/sourceforge/phpeclipse/preferences/PHPPreferencesMessages.java
net.sourceforge.phpeclipse/src/net/sourceforge/phpeclipse/preferences/PHPProjectLibraryPage.java
net.sourceforge.phpeclipse/src/net/sourceforge/phpeclipse/preferences/PHPProjectPropertyPage.java

index 7783dea..5725887 100644 (file)
@@ -2,7 +2,7 @@
 <plugin
    id="net.sourceforge.phpeclipse"
    name="%pluginName"
-   version="1.0.6"
+   version="1.0.4"
    provider-name="%providerName"
    class="net.sourceforge.phpeclipse.PHPeclipsePlugin">
 
             Create a new PHP project.
          </description>
       </wizard>
+<!-- choochter's stuff -->       
+         <wizard
+            name="Xaraya Module"
+            icon="icons/obj16/php.gif"
+            category="net.sourceforge.phpeclipse.wizards.NewWizardCategoryPHP"
+            class="net.sourceforge.phpeclipse.wizards.NewXarayaModuleWizard"
+            project="true"
+            id="net.sourceforge.phpeclipse.wizards.NewXarayaModuleWizard">
+         <description>
+            Create a Xaraya module.
+         </description>
+      </wizard>      
+   </extension>
+<!--   <extension
+         point="org.eclipse.ui.newWizards">
+      <category
+            name="%newWizardCategory.name"
+            id="net.sourceforge.phpeclipse.wizardCategory">
+      </category>
       <wizard
             name="%newWizardPHPFile.name"
             icon="icons/obj16/phpedit.gif"
-            category="net.sourceforge.phpeclipse.wizards.NewWizardCategoryPHP"
+            category="net.sourceforge.phpeclipse.wizardCategory"
             class="net.sourceforge.phpeclipse.wizards.PHPFileWizard"
             id="net.sourceforge.phpeclipse.wizards.PHPFileWizard">
          <description>
             Create a basic PHP file.
          </description>
       </wizard>
-   </extension>
+   </extension> -->
    <extension
          point="org.eclipse.ui.projectNatureImages">
       <image
             icon="icons/obj16/php.gif"
             natureId="net.sourceforge.phpeclipse.phpnature"
-            id="net.sourceforge.phpeclipse.ProjectNatureImagePHP">
+            id="net.sourceforge.phpeclipse..ProjectNatureImagePHP">
       </image>
    </extension>
    <extension
                id="net.sourceforge.phpeclipse.actions.PHPStartMySQLAction">
          </action>
       </actionSet>
-      <actionSet
+  <!--    <actionSet
                id="net.sourceforge.phpeclipse.ui.CodingActionSet"
         label="%phpActionSet.label"
                visible="false"
             path="edit">
                <separator name="editGroup"/>
        </menu>
-       <action id="net.sourceforge.phpdt.ui.actions.Uncomment"
+       <action id="net.sourceforge.phpeclipse.ui.actions.Uncomment"
                menubarPath="net.sourceforge.phpeclipse.ui.source.menu/editGroup"
                label="%phpUncommentAction.label"
                        retarget="true" />
                        
-               <action id="net.sourceforge.phpdt.ui.actions.Comment"
+               <action id="net.sourceforge.phpeclipse.ui.actions.Comment"
                menubarPath="net.sourceforge.phpeclipse.ui.source.menu/editGroup"
                label="%phpCommentAction.label"
                        retarget="true" />
-         </actionSet> 
+         </actionSet> -->
    </extension>
-   <extension
+  <!-- <extension
          point="org.eclipse.ui.actionDefinitions">
       <actionDefinition
-            id="net.sourceforge.phpdt.ui.actions.comment">
+            id="net.sourceforge.phpeclipse.phpeditor.comment">
       </actionDefinition>
       <actionDefinition
-            id="net.sourceforge.phpdt.ui.actions.uncomment">
+            id="net.sourceforge.phpeclipse.phpeditor.uncomment">
       </actionDefinition>
    </extension> 
    <extension
             configurationId="org.eclipse.ui.defaultAcceleratorConfiguration">
          <accelerator
                key="Ctrl+/"
-               id="net.sourceforge.phpdt.ui.actions.comment">
+               id="net.sourceforge.phpeclipse.phpeditor.comment">
          </accelerator>
          <accelerator
                key="Ctrl+\\"
-               id="net.sourceforge.phpdt.ui.actions.uncomment">
+               id="net.sourceforge.phpeclipse.phpeditor.uncomment">
          </accelerator>
       </acceleratorSet>
-   </extension> 
+   </extension> -->
    <extension
          point="org.eclipse.ui.editors">
       <editor
          point="org.eclipse.ui.popupMenus">
       <objectContribution
             objectClass="org.eclipse.core.resources.IFile"
-            nameFilter="*.html"
-            id="net.sourceforge.phpeclipse.actions.htmlParserAction">
-         <action
-               label="Run JTidy Parser"
-               class="net.sourceforge.phpeclipse.actions.HTMLParserAction"
-               menubarPath="additions"
-               id="net.sourceforge.phpeclipse.actions.htmlParserAction">
-         </action>
-      </objectContribution>
-      <objectContribution
-            objectClass="org.eclipse.core.resources.IFile"
-            nameFilter="*.htm"
-            id="net.sourceforge.phpeclipse.actions.htmlParserAction">
-         <action
-               label="Run JTidy Parser"
-               class="net.sourceforge.phpeclipse.actions.HTMLParserAction"
-               menubarPath="additions"
-               id="net.sourceforge.phpeclipse.actions.htmlParserAction">
-         </action>
-      </objectContribution>
-      <objectContribution
-            objectClass="org.eclipse.core.resources.IFile"
-            nameFilter="*.xml"
-            id="net.sourceforge.phpeclipse.actions.htmlParserAction">
-         <action
-               label="Run JTidy Parser"
-               class="net.sourceforge.phpeclipse.actions.HTMLParserAction"
-               menubarPath="additions"
-               id="net.sourceforge.phpeclipse.actions.htmlParserAction">
-         </action>
-      </objectContribution>
-      <objectContribution
-            objectClass="org.eclipse.core.resources.IFile"
             nameFilter="*.php"
             id="net.sourceforge.phpeclipse.actions.externalParserAction">
          <action
                id="net.sourceforge.phpeclipse.actions.showAction">
          </action>
       </objectContribution>
-       
-         <viewerContribution 
-               id="net.sourceforge.phpdt.ui.PHPEditorPopupActions" 
-               targetID="#PHPRulerContext">
-               <action
-                       id="org.eclipse.ui.texteditor.TaskRulerAction"
-                       menubarPath="add"
-                       label="%AddTask.label"
-                       tooltip="%AddTask.tooltip"
-            helpContextId="org.eclipse.ui.AddTask_action_context"
-                       class="org.eclipse.ui.texteditor.TaskRulerAction">
-               </action>
-               <action
-                       id="org.eclipse.ui.texteditor.BookmarkRulerAction"
-                       menubarPath="add"
-                       label="%AddBookmark.label"
-                       tooltip="%AddBookmark.tooltip"
-            helpContextId="org.eclipse.ui.bookmark_action_context"
-                       class="org.eclipse.ui.texteditor.BookmarkRulerAction">
-               </action>
-         </viewerContribution>
-   </extension>
-   <extension point="org.eclipse.ui.editorActions">
-       <editorContribution
-               id="org.eclipse.ui.texteditor.ruler.actions"
-               targetID="net.sourceforge.phpeclipse.PHPEditor">
-
-               <action
-                       id="org.eclipse.ui.texteditor.BookmarkRulerAction"
-                       actionID="RulerDoubleClick"
-                       label="%Dummy.label"
-            helpContextId="org.eclipse.ui.bookmark_action_context"
-                       class="org.eclipse.ui.texteditor.BookmarkRulerAction">
-               </action>
-       </editorContribution>
    </extension>
    <extension
          point="org.eclipse.ui.preferencePages">
-      <page
+         <page
             name="PHP"
-            class="net.sourceforge.phpeclipse.PHPEclipsePreferencePage"
+            class="net.sourceforge.phpeclipse.PHPEclipseBasePreferencePage"
             id="net.sourceforge.phpeclipse.preference.PHPEclipsePreferencePage">
       </page>
       <page
             name="Editor"
             category="net.sourceforge.phpeclipse.preference.PHPEclipsePreferencePage"
-            class="net.sourceforge.phpeclipse.PHPSyntaxPreferencePage"
-            id="net.sourceforge.phpeclipse.preference.PHPSyntaxPreferencePage">
+            class="net.sourceforge.phpeclipse.PHPSyntaxEditorPreferencePage"
+            id="net.sourceforge.phpeclipse.preference.PHPSyntaxEditorPreferencePage">
       </page>
-      <page name="Templates"
-               id = "net.sourceforge.phpdt.internal.ui.preferences.TemplatePreferencePage"
-               class="net.sourceforge.phpdt.internal.ui.preferences.TemplatePreferencePage"
-               category= "net.sourceforge.phpeclipse.preference.PHPEclipsePreferencePage">
+      <page
+            name="Outline"
+            category="net.sourceforge.phpeclipse.preference.PHPEclipsePreferencePage"
+            class="net.sourceforge.phpeclipse.PHPOutlinePreferencePage"
+            id="net.sourceforge.phpeclipse.preference.PHPOutlinePreferencePage">
+      </page>
+      <page 
+            name="Templates"
+            category= "net.sourceforge.phpeclipse.preference.PHPEclipsePreferencePage"
+                   class="net.sourceforge.phpdt.internal.ui.preferences.TemplatePreferencePage"
+                   id = "net.sourceforge.phpdt.internal.ui.preferences.TemplatePreferencePage">
          </page>
+      <page
+            name="Language Settings"
+            category="net.sourceforge.phpeclipse.preference.PHPEclipsePreferencePage"
+            class="net.sourceforge.phpeclipse.PHPLanguagePreferencePage"
+            id="net.sourceforge.phpeclipse.preference.PHPLanguagePreferencePage">
+      </page>            
    </extension>
    <extension
          point="org.eclipse.ui.documentProviders">
       </provider>
    </extension>
    <extension
-         point="org.eclipse.ui.documentProviders">
-      <provider
-            extensions="%htmlFileExtension"
-            class="net.sourceforge.phpeclipse.phpeditor.PHPDocumentProvider"
-            id="net.sourceforge.phpeclipse.phpeditor.PHPDocumentProvider">
-      </provider>
-   </extension>
-   <extension
-         point="org.eclipse.ui.documentProviders">
-      <provider
-            extensions="%htmFileExtension"
-            class="net.sourceforge.phpeclipse.phpeditor.PHPDocumentProvider"
-            id="net.sourceforge.phpeclipse.phpeditor.PHPDocumentProvider">
-      </provider>
-   </extension>
-   <extension
-         point="org.eclipse.ui.documentProviders">
-      <provider
-            extensions="%xmlFileExtension"
-            class="net.sourceforge.phpeclipse.phpeditor.PHPDocumentProvider"
-            id="net.sourceforge.phpeclipse.phpeditor.PHPDocumentProvider">
-      </provider>
-   </extension>
-   <extension
          point="org.eclipse.ui.views">
       <view
             name="%phpConsoleView"
index 52d6b86..0519450 100644 (file)
@@ -19,5672 +19,5698 @@ import net.sourceforge.phpdt.internal.compiler.flow.*;
 import net.sourceforge.phpdt.internal.compiler.lookup.*;
 
 public class CodeStream implements OperatorIds, ClassFileConstants, Opcodes, BaseTypes, TypeConstants, TypeIds {
-       // It will be responsible for the following items.
+  // It will be responsible for the following items.
 
-       // -> Tracking Max Stack.
+  // -> Tracking Max Stack.
 
-       public int stackMax; // Use Ints to keep from using extra bc when adding
-       public int stackDepth; // Use Ints to keep from using extra bc when adding
-       public int maxLocals;
-       public static final int max = 100; // Maximum size of the code array
-       public static final int growFactor = 400;
-       public static final int LABELS_INCREMENT = 5;
-       public byte[] bCodeStream;
-       public int pcToSourceMapSize;
-       public int[] pcToSourceMap = new int[24];
-       public int lastEntryPC; // last entry recorded
-       public int[] lineSeparatorPositions;
-       public int position; // So when first set can be incremented
-       public int classFileOffset;
-       public int startingClassFileOffset; // I need to keep the starting point inside the byte array
-       public ConstantPool constantPool; // The constant pool used to generate bytecodes that need to store information into the constant pool
-       public ClassFile classFile; // The current classfile it is associated to.
-       // local variable attributes output
-       public static final int LOCALS_INCREMENT = 10;
-       public LocalVariableBinding[] locals = new LocalVariableBinding[LOCALS_INCREMENT];
-       static LocalVariableBinding[] noLocals = new LocalVariableBinding[LOCALS_INCREMENT];
-       public LocalVariableBinding[] visibleLocals = new LocalVariableBinding[LOCALS_INCREMENT];
-       static LocalVariableBinding[] noVisibleLocals = new LocalVariableBinding[LOCALS_INCREMENT];
-       int visibleLocalsCount;
-       public AbstractMethodDeclaration methodDeclaration;
-       public ExceptionLabel[] exceptionHandlers = new ExceptionLabel[LABELS_INCREMENT];
-       static ExceptionLabel[] noExceptionHandlers = new ExceptionLabel[LABELS_INCREMENT];
-       public int exceptionHandlersNumber;
-       public static FieldBinding[] ImplicitThis = new FieldBinding[] {};
-       public boolean generateLineNumberAttributes;
-       public boolean generateLocalVariableTableAttributes;
-       public boolean preserveUnusedLocals;
-       // store all the labels placed at the current position to be able to optimize
-       // a jump to the next bytecode.
-       public Label[] labels = new Label[LABELS_INCREMENT];
-       static Label[] noLabels = new Label[LABELS_INCREMENT];
-       public int countLabels;
-       public int allLocalsCounter;
-       public int maxFieldCount;
-       // to handle goto_w
-       public boolean wideMode = false;
-       public static final CompilationResult RESTART_IN_WIDE_MODE = new CompilationResult((char[])null, 0, 0, 0);
-       
-public CodeStream(ClassFile classFile) {
-       generateLineNumberAttributes = (classFile.produceDebugAttributes & CompilerOptions.Lines) != 0;
-       generateLocalVariableTableAttributes = (classFile.produceDebugAttributes & CompilerOptions.Vars) != 0;
-       if (generateLineNumberAttributes) {
-               lineSeparatorPositions = classFile.referenceBinding.scope.referenceCompilationUnit().compilationResult.lineSeparatorPositions;
-       }
-}
-final public void aaload() {
-       countLabels = 0;
-       stackDepth--;
-       try {
-               position++;
-               bCodeStream[classFileOffset++] = OPC_aaload;
-       } catch (IndexOutOfBoundsException e) {
-               resizeByteArray(OPC_aaload);
-       }
-}
-final public void aastore() {
-       countLabels = 0;
-       stackDepth -= 3;
-       try {
-               position++;
-               bCodeStream[classFileOffset++] = OPC_aastore;
-       } catch (IndexOutOfBoundsException e) {
-               resizeByteArray(OPC_aastore);
-       }
-}
-final public void aconst_null() {
-       countLabels = 0;
-       stackDepth++;
-       if (stackDepth > stackMax)
-               stackMax = stackDepth;
-       try {
-               position++;
-               bCodeStream[classFileOffset++] = OPC_aconst_null;
-       } catch (IndexOutOfBoundsException e) {
-               resizeByteArray(OPC_aconst_null);
-       }
-}
-public final void addDefinitelyAssignedVariables(Scope scope, int initStateIndex) {
-       // Required to fix 1PR0XVS: LFRE:WINNT - Compiler: variable table for method appears incorrect
-       if (!generateLocalVariableTableAttributes)
-               return;
-/*     if (initStateIndex == lastInitStateIndexWhenAddingInits)
-               return;
-       lastInitStateIndexWhenAddingInits = initStateIndex;
-       if (lastInitStateIndexWhenRemovingInits != initStateIndex){
-               lastInitStateIndexWhenRemovingInits = -2; // reinitialize remove index 
-               // remove(1)-add(1)-remove(1) -> ignore second remove
-               // remove(1)-add(2)-remove(1) -> perform second remove
-       }
-       
-*/     for (int i = 0; i < visibleLocalsCount; i++) {
-               LocalVariableBinding localBinding = visibleLocals[i];
-               if (localBinding != null) {
-                       // Check if the local is definitely assigned
-                       if ((initStateIndex != -1) && isDefinitelyAssigned(scope, initStateIndex, localBinding)) {
-                               if ((localBinding.initializationCount == 0) || (localBinding.initializationPCs[((localBinding.initializationCount - 1) << 1) + 1] != -1)) {
-                                       /* There are two cases:
-                                        * 1) there is no initialization interval opened ==> add an opened interval
-                                        * 2) there is already some initialization intervals but the last one is closed ==> add an opened interval
-                                        * An opened interval means that the value at localBinding.initializationPCs[localBinding.initializationCount - 1][1]
-                                        * is equals to -1.
-                                        * initializationPCs is a collection of pairs of int:
-                                        *      first value is the startPC and second value is the endPC. -1 one for the last value means that the interval
-                                        *      is not closed yet.
-                                        */
-                                       localBinding.recordInitializationStartPC(position);
-                               }
-                       }
-               }
-       }
-}
-public void addLabel(Label aLabel) {
-       if (countLabels == labels.length)
-               System.arraycopy(labels, 0, (labels = new Label[countLabels + LABELS_INCREMENT]), 0, countLabels);
-       labels[countLabels++] = aLabel;
-}
-public void addVisibleLocalVariable(LocalVariableBinding localBinding) {
-       if (!generateLocalVariableTableAttributes)
-               return;
+  public int stackMax; // Use Ints to keep from using extra bc when adding
+  public int stackDepth; // Use Ints to keep from using extra bc when adding
+  public int maxLocals;
+  public static final int max = 100; // Maximum size of the code array
+  public static final int growFactor = 400;
+  public static final int LABELS_INCREMENT = 5;
+  public byte[] bCodeStream;
+  public int pcToSourceMapSize;
+  public int[] pcToSourceMap = new int[24];
+  public int lastEntryPC; // last entry recorded
+  public int[] lineSeparatorPositions;
+  public int position; // So when first set can be incremented
+  public int classFileOffset;
+  public int startingClassFileOffset; // I need to keep the starting point inside the byte array
+  public ConstantPool constantPool;
+  // The constant pool used to generate bytecodes that need to store information into the constant pool
+  public ClassFile classFile; // The current classfile it is associated to.
+  // local variable attributes output
+  public static final int LOCALS_INCREMENT = 10;
+  public LocalVariableBinding[] locals = new LocalVariableBinding[LOCALS_INCREMENT];
+  static LocalVariableBinding[] noLocals = new LocalVariableBinding[LOCALS_INCREMENT];
+  public LocalVariableBinding[] visibleLocals = new LocalVariableBinding[LOCALS_INCREMENT];
+  static LocalVariableBinding[] noVisibleLocals = new LocalVariableBinding[LOCALS_INCREMENT];
+  int visibleLocalsCount;
+  public AbstractMethodDeclaration methodDeclaration;
+  public ExceptionLabel[] exceptionHandlers = new ExceptionLabel[LABELS_INCREMENT];
+  static ExceptionLabel[] noExceptionHandlers = new ExceptionLabel[LABELS_INCREMENT];
+  public int exceptionHandlersNumber;
+  public static FieldBinding[] ImplicitThis = new FieldBinding[] {
+  };
+  public boolean generateLineNumberAttributes;
+  public boolean generateLocalVariableTableAttributes;
+  public boolean preserveUnusedLocals;
+  // store all the labels placed at the current position to be able to optimize
+  // a jump to the next bytecode.
+  public Label[] labels = new Label[LABELS_INCREMENT];
+  static Label[] noLabels = new Label[LABELS_INCREMENT];
+  public int countLabels;
+  public int allLocalsCounter;
+  public int maxFieldCount;
+  // to handle goto_w
+  public boolean wideMode = false;
+  public static final CompilationResult RESTART_IN_WIDE_MODE = new CompilationResult((char[]) null, 0, 0, 0);
 
-       if (visibleLocalsCount >= visibleLocals.length) {
-               System.arraycopy(visibleLocals, 0, (visibleLocals = new LocalVariableBinding[visibleLocalsCount * 2]), 0, visibleLocalsCount);
-       }
-       visibleLocals[visibleLocalsCount++] = localBinding;
-}
-final public void aload(int iArg) {
-       countLabels = 0;
-       stackDepth++;
-       if (stackDepth > stackMax)
-               stackMax = stackDepth;
-       if (maxLocals <= iArg) {
-               maxLocals = iArg + 1;
-       }
-       if (iArg > 255) { // Widen
-               try {
-                       position++;
-                       bCodeStream[classFileOffset++] = OPC_wide;
-               } catch (IndexOutOfBoundsException e) {
-                       resizeByteArray(OPC_wide);
-               }
-               try {
-                       position++;
-                       bCodeStream[classFileOffset++] = OPC_aload;
-               } catch (IndexOutOfBoundsException e) {
-                       resizeByteArray(OPC_aload);
-               }
-               writeUnsignedShort(iArg);
-       } else {
-               // Don't need to use the wide bytecode
-               try {
-                       position++;
-                       bCodeStream[classFileOffset++] = OPC_aload;
-               } catch (IndexOutOfBoundsException e) {
-                       resizeByteArray(OPC_aload);
-               }
-               try {
-                       position++;
-                       bCodeStream[classFileOffset++] = (byte) (iArg);
-               } catch (IndexOutOfBoundsException e) {
-                       resizeByteArray((byte) iArg);
-               }
-       }
-}
-final public void aload_0() {
-       countLabels = 0;
-       stackDepth++;
-       if (stackDepth > stackMax)
-               stackMax = stackDepth;
-       if (maxLocals == 0) {
-               maxLocals = 1;
-       }
-       try {
-               position++;
-               bCodeStream[classFileOffset++] = OPC_aload_0;
-       } catch (IndexOutOfBoundsException e) {
-               resizeByteArray(OPC_aload_0);
-       }
-}
-final public void aload_1() {
-       countLabels = 0;
-       stackDepth++;
-       if (stackDepth > stackMax)
-               stackMax = stackDepth;
-       if (maxLocals <= 1) {
-               maxLocals = 2;
-       }
-       try {
-               position++;
-               bCodeStream[classFileOffset++] = OPC_aload_1;
-       } catch (IndexOutOfBoundsException e) {
-               resizeByteArray(OPC_aload_1);
-       }
-}
-final public void aload_2() {
-       countLabels = 0;
-       stackDepth++;
-       if (stackDepth > stackMax)
-               stackMax = stackDepth;
-       if (maxLocals <= 2) {
-               maxLocals = 3;
-       }
-       try {
-               position++;
-               bCodeStream[classFileOffset++] = OPC_aload_2;
-       } catch (IndexOutOfBoundsException e) {
-               resizeByteArray(OPC_aload_2);
-       }
-}
-final public void aload_3() {
-       countLabels = 0;
-       stackDepth++;
-       if (stackDepth > stackMax)
-               stackMax = stackDepth;
-       if (maxLocals <= 3) {
-               maxLocals = 4;
-       }
-       try {
-               position++;
-               bCodeStream[classFileOffset++] = OPC_aload_3;
-       } catch (IndexOutOfBoundsException e) {
-               resizeByteArray(OPC_aload_3);
-       }
-}
-public final void anewarray(TypeBinding typeBinding) {
-       countLabels = 0;
-       try {
-               position++;
-               bCodeStream[classFileOffset++] = OPC_anewarray;
-       } catch (IndexOutOfBoundsException e) {
-               resizeByteArray(OPC_anewarray);
-       }
-       writeUnsignedShort(constantPool.literalIndex(typeBinding));
-}
-public void anewarrayJavaLangClass() {
-       // anewarray: java.lang.Class
-       countLabels = 0;
-       try {
-               position++;
-               bCodeStream[classFileOffset++] = OPC_anewarray;
-       } catch (IndexOutOfBoundsException e) {
-               resizeByteArray(OPC_anewarray);
-       }
-       writeUnsignedShort(constantPool.literalIndexForJavaLangClass());
-}
-public void anewarrayJavaLangObject() {
-       // anewarray: java.lang.Object
-       countLabels = 0;
-       try {
-               position++;
-               bCodeStream[classFileOffset++] = OPC_anewarray;
-       } catch (IndexOutOfBoundsException e) {
-               resizeByteArray(OPC_anewarray);
-       }
-       writeUnsignedShort(constantPool.literalIndexForJavaLangObject());
-}
-final public void areturn() {
-       countLabels = 0;
-       stackDepth--;
-       // the stackDepth should be equal to 0 
-       try {
-               position++;
-               bCodeStream[classFileOffset++] = OPC_areturn;
-       } catch (IndexOutOfBoundsException e) {
-               resizeByteArray(OPC_areturn);
-       }
-}
-public void arrayAt(int typeBindingID) {
-       switch (typeBindingID) {
-               case T_int :
-                       this.iaload();
-                       break;
-               case T_byte :
-               case T_boolean :
-                       this.baload();
-                       break;
-               case T_short :
-                       this.saload();
-                       break;
-               case T_char :
-                       this.caload();
-                       break;
-               case T_long :
-                       this.laload();
-                       break;
-               case T_float :
-                       this.faload();
-                       break;
-               case T_double :
-                       this.daload();
-                       break;
-               default :
-                       this.aaload();
-       }
-}
-public void arrayAtPut(int elementTypeID, boolean valueRequired) {
-       switch (elementTypeID) {
-               case T_int :
-                       if (valueRequired)
-                               dup_x2();
-                       iastore();
-                       break;
-               case T_byte :
-               case T_boolean :
-                       if (valueRequired)
-                               dup_x2();
-                       bastore();
-                       break;
-               case T_short :
-                       if (valueRequired)
-                               dup_x2();
-                       sastore();
-                       break;
-               case T_char :
-                       if (valueRequired)
-                               dup_x2();
-                       castore();
-                       break;
-               case T_long :
-                       if (valueRequired)
-                               dup2_x2();
-                       lastore();
-                       break;
-               case T_float :
-                       if (valueRequired)
-                               dup_x2();
-                       fastore();
-                       break;
-               case T_double :
-                       if (valueRequired)
-                               dup2_x2();
-                       dastore();
-                       break;
-               default :
-                       if (valueRequired)
-                               dup_x2();
-                       aastore();
-       }
-}
-final public void arraylength() {
-       countLabels = 0;
-       try {
-               position++;
-               bCodeStream[classFileOffset++] = OPC_arraylength;
-       } catch (IndexOutOfBoundsException e) {
-               resizeByteArray(OPC_arraylength);
-       }
-}
-final public void astore(int iArg) {
-       countLabels = 0;
-       stackDepth--;
-       if (maxLocals <= iArg) {
-               maxLocals = iArg + 1;
-       }
-       if (iArg > 255) { // Widen
-               try {
-                       position++;
-                       bCodeStream[classFileOffset++] = OPC_wide;
-               } catch (IndexOutOfBoundsException e) {
-                       resizeByteArray(OPC_wide);
-               }
-               try {
-                       position++;
-                       bCodeStream[classFileOffset++] = OPC_astore;
-               } catch (IndexOutOfBoundsException e) {
-                       resizeByteArray(OPC_astore);
-               }
-               writeUnsignedShort(iArg);
-       } else {
-               try {
-                       position++;
-                       bCodeStream[classFileOffset++] = OPC_astore;
-               } catch (IndexOutOfBoundsException e) {
-                       resizeByteArray(OPC_astore);
-               }
-               try {
-                       position++;
-                       bCodeStream[classFileOffset++] = (byte) iArg;
-               } catch (IndexOutOfBoundsException e) {
-                       resizeByteArray((byte) iArg);
-               }
-       }
-}
-final public void astore_0() {
-       countLabels = 0;
-       stackDepth--;
-       if (maxLocals == 0) {
-               maxLocals = 1;
-       }
-       try {
-               position++;
-               bCodeStream[classFileOffset++] = OPC_astore_0;
-       } catch (IndexOutOfBoundsException e) {
-               resizeByteArray(OPC_astore_0);
-       }
-}
-final public void astore_1() {
-       countLabels = 0;
-       stackDepth--;
-       if (maxLocals <= 1) {
-               maxLocals = 2;
-       }
-       try {
-               position++;
-               bCodeStream[classFileOffset++] = OPC_astore_1;
-       } catch (IndexOutOfBoundsException e) {
-               resizeByteArray(OPC_astore_1);
-       }
-}
-final public void astore_2() {
-       countLabels = 0;
-       stackDepth--;
-       if (maxLocals <= 2) {
-               maxLocals = 3;
-       }
-       try {
-               position++;
-               bCodeStream[classFileOffset++] = OPC_astore_2;
-       } catch (IndexOutOfBoundsException e) {
-               resizeByteArray(OPC_astore_2);
-       }
-}
-final public void astore_3() {
-       countLabels = 0;
-       stackDepth--;
-       if (maxLocals <= 3) {
-               maxLocals = 4;
-       }
-       try {
-               position++;
-               bCodeStream[classFileOffset++] = OPC_astore_3;
-       } catch (IndexOutOfBoundsException e) {
-               resizeByteArray(OPC_astore_3);
-       }
-}
-final public void athrow() {
-       countLabels = 0;
-       stackDepth--;
-       try {
-               position++;
-               bCodeStream[classFileOffset++] = OPC_athrow;
-       } catch (IndexOutOfBoundsException e) {
-               resizeByteArray(OPC_athrow);
-       }
-}
-final public void baload() {
-       countLabels = 0;
-       stackDepth--;
-       try {
-               position++;
-               bCodeStream[classFileOffset++] = OPC_baload;
-       } catch (IndexOutOfBoundsException e) {
-               resizeByteArray(OPC_baload);
-       }
-}
-final public void bastore() {
-       countLabels = 0;
-       stackDepth -= 3;
-       try {
-               position++;
-               bCodeStream[classFileOffset++] = OPC_bastore;
-       } catch (IndexOutOfBoundsException e) {
-               resizeByteArray(OPC_bastore);
-       }
-}
-final public void bipush(byte b) {
-       countLabels = 0;
-       stackDepth++;
-       if (stackDepth > stackMax)
-               stackMax = stackDepth;
-       try {
-               position++;
-               bCodeStream[classFileOffset++] = OPC_bipush;
-       } catch (IndexOutOfBoundsException e) {
-               resizeByteArray(OPC_bipush);
-       }
-       writeSignedByte(b);
-}
-final public void caload() {
-       countLabels = 0;
-       stackDepth--;
-       try {
-               position++;
-               bCodeStream[classFileOffset++] = OPC_caload;
-       } catch (IndexOutOfBoundsException e) {
-               resizeByteArray(OPC_caload);
-       }
-}
-final public void castore() {
-       countLabels = 0;
-       stackDepth -= 3;
-       try {
-               position++;
-               bCodeStream[classFileOffset++] = OPC_castore;
-       } catch (IndexOutOfBoundsException e) {
-               resizeByteArray(OPC_castore);
-       }
-}
-public final void checkcast(TypeBinding typeBinding) {
-       countLabels = 0;
-       try {
-               position++;
-               bCodeStream[classFileOffset++] = OPC_checkcast;
-       } catch (IndexOutOfBoundsException e) {
-               resizeByteArray(OPC_checkcast);
-       }
-       writeUnsignedShort(constantPool.literalIndex(typeBinding));
-}
-public final void checkcastJavaLangError() {
-       countLabels = 0;
-       try {
-               position++;
-               bCodeStream[classFileOffset++] = OPC_checkcast;
-       } catch (IndexOutOfBoundsException e) {
-               resizeByteArray(OPC_checkcast);
-       }
-       writeUnsignedShort(constantPool.literalIndexForJavaLangError());
-}
-final public void d2f() {
-       countLabels = 0;
-       stackDepth--;
-       try {
-               position++;
-               bCodeStream[classFileOffset++] = OPC_d2f;
-       } catch (IndexOutOfBoundsException e) {
-               resizeByteArray(OPC_d2f);
-       }
-}
-final public void d2i() {
-       countLabels = 0;
-       stackDepth--;
-       try {
-               position++;
-               bCodeStream[classFileOffset++] = OPC_d2i;
-       } catch (IndexOutOfBoundsException e) {
-               resizeByteArray(OPC_d2i);
-       }
-}
-final public void d2l() {
-       countLabels = 0;
-       try {
-               position++;
-               bCodeStream[classFileOffset++] = OPC_d2l;
-       } catch (IndexOutOfBoundsException e) {
-               resizeByteArray(OPC_d2l);
-       }
-}
-final public void dadd() {
-       countLabels = 0;
-       stackDepth -= 2;
-       try {
-               position++;
-               bCodeStream[classFileOffset++] = OPC_dadd;
-       } catch (IndexOutOfBoundsException e) {
-               resizeByteArray(OPC_dadd);
-       }
-}
-final public void daload() {
-       countLabels = 0;
-       try {
-               position++;
-               bCodeStream[classFileOffset++] = OPC_daload;
-       } catch (IndexOutOfBoundsException e) {
-               resizeByteArray(OPC_daload);
-       }
-}
-final public void dastore() {
-       countLabels = 0;
-       stackDepth -= 4;
-       try {
-               position++;
-               bCodeStream[classFileOffset++] = OPC_dastore;
-       } catch (IndexOutOfBoundsException e) {
-               resizeByteArray(OPC_dastore);
-       }
-}
-final public void dcmpg() {
-       countLabels = 0;
-       stackDepth -= 3;
-       try {
-               position++;
-               bCodeStream[classFileOffset++] = OPC_dcmpg;
-       } catch (IndexOutOfBoundsException e) {
-               resizeByteArray(OPC_dcmpg);
-       }
-}
-final public void dcmpl() {
-       countLabels = 0;
-       stackDepth -= 3;
-       try {
-               position++;
-               bCodeStream[classFileOffset++] = OPC_dcmpl;
-       } catch (IndexOutOfBoundsException e) {
-               resizeByteArray(OPC_dcmpl);
-       }
-}
-final public void dconst_0() {
-       countLabels = 0;
-       stackDepth += 2;
-       if (stackDepth > stackMax)
-               stackMax = stackDepth;
-       try {
-               position++;
-               bCodeStream[classFileOffset++] = OPC_dconst_0;
-       } catch (IndexOutOfBoundsException e) {
-               resizeByteArray(OPC_dconst_0);
-       }
-}
-final public void dconst_1() {
-       countLabels = 0;
-       stackDepth += 2;
-       if (stackDepth > stackMax)
-               stackMax = stackDepth;
-       try {
-               position++;
-               bCodeStream[classFileOffset++] = OPC_dconst_1;
-       } catch (IndexOutOfBoundsException e) {
-               resizeByteArray(OPC_dconst_1);
-       }
-}
-final public void ddiv() {
-       countLabels = 0;
-       stackDepth -= 2;
-       try {
-               position++;
-               bCodeStream[classFileOffset++] = OPC_ddiv;
-       } catch (IndexOutOfBoundsException e) {
-               resizeByteArray(OPC_ddiv);
-       }
-}
-public void decrStackSize(int offset) {
-       stackDepth -= offset;
-}
-final public void dload(int iArg) {
-       countLabels = 0;
-       stackDepth += 2;
-       if (stackDepth > stackMax)
-               stackMax = stackDepth;
-       if (maxLocals < iArg + 2) {
-               maxLocals = iArg + 2; // + 2 because it is a double
-       }
-       if (iArg > 255) { // Widen
-               try {
-                       position++;
-                       bCodeStream[classFileOffset++] = OPC_wide;
-               } catch (IndexOutOfBoundsException e) {
-                       resizeByteArray(OPC_wide);
-               }
-               try {
-                       position++;
-                       bCodeStream[classFileOffset++] = OPC_dload;
-               } catch (IndexOutOfBoundsException e) {
-                       resizeByteArray(OPC_dload);
-               }
-               writeUnsignedShort(iArg);
-       } else {
-               // Don't need to use the wide bytecode
-               try {
-                       position++;
-                       bCodeStream[classFileOffset++] = OPC_dload;
-               } catch (IndexOutOfBoundsException e) {
-                       resizeByteArray(OPC_dload);
-               }
-               try {
-                       position++;
-                       bCodeStream[classFileOffset++] = (byte) iArg;
-               } catch (IndexOutOfBoundsException e) {
-                       resizeByteArray((byte) iArg);
-               }
-       }
-}
-final public void dload_0() {
-       countLabels = 0;
-       stackDepth += 2;
-       if (stackDepth > stackMax)
-               stackMax = stackDepth;
-       if (maxLocals < 2) {
-               maxLocals = 2;
-       }
-       try {
-               position++;
-               bCodeStream[classFileOffset++] = OPC_dload_0;
-       } catch (IndexOutOfBoundsException e) {
-               resizeByteArray(OPC_dload_0);
-       }
-}
-final public void dload_1() {
-       countLabels = 0;
-       stackDepth += 2;
-       if (stackDepth > stackMax)
-               stackMax = stackDepth;
-       if (maxLocals < 3) {
-               maxLocals = 3;
-       }
-       try {
-               position++;
-               bCodeStream[classFileOffset++] = OPC_dload_1;
-       } catch (IndexOutOfBoundsException e) {
-               resizeByteArray(OPC_dload_1);
-       }
-}
-final public void dload_2() {
-       countLabels = 0;
-       stackDepth += 2;
-       if (stackDepth > stackMax)
-               stackMax = stackDepth;
-       if (maxLocals < 4) {
-               maxLocals = 4;
-       }
-       try {
-               position++;
-               bCodeStream[classFileOffset++] = OPC_dload_2;
-       } catch (IndexOutOfBoundsException e) {
-               resizeByteArray(OPC_dload_2);
-       }
-}
-final public void dload_3() {
-       countLabels = 0;
-       stackDepth += 2;
-       if (stackDepth > stackMax)
-               stackMax = stackDepth;
-       if (maxLocals < 5) {
-               maxLocals = 5;
-       }
-       try {
-               position++;
-               bCodeStream[classFileOffset++] = OPC_dload_3;
-       } catch (IndexOutOfBoundsException e) {
-               resizeByteArray(OPC_dload_3);
-       }
-}
-final public void dmul() {
-       countLabels = 0;
-       stackDepth -= 2;
-       try {
-               position++;
-               bCodeStream[classFileOffset++] = OPC_dmul;
-       } catch (IndexOutOfBoundsException e) {
-               resizeByteArray(OPC_dmul);
-       }
-}
-final public void dneg() {
-       countLabels = 0;
-       try {
-               position++;
-               bCodeStream[classFileOffset++] = OPC_dneg;
-       } catch (IndexOutOfBoundsException e) {
-               resizeByteArray(OPC_dneg);
-       }
-}
-final public void drem() {
-       countLabels = 0;
-       stackDepth -= 2;
-       try {
-               position++;
-               bCodeStream[classFileOffset++] = OPC_drem;
-       } catch (IndexOutOfBoundsException e) {
-               resizeByteArray(OPC_drem);
-       }
-}
-final public void dreturn() {
-       countLabels = 0;
-       stackDepth -= 2;
-       // the stackDepth should be equal to 0 
-       try {
-               position++;
-               bCodeStream[classFileOffset++] = OPC_dreturn;
-       } catch (IndexOutOfBoundsException e) {
-               resizeByteArray(OPC_dreturn);
-       }
-}
-final public void dstore(int iArg) {
-       countLabels = 0;
-       stackDepth -= 2;
-       if (maxLocals <= iArg + 1) {
-               maxLocals = iArg + 2;
-       }
-       if (iArg > 255) { // Widen
-               try {
-                       position++;
-                       bCodeStream[classFileOffset++] = OPC_wide;
-               } catch (IndexOutOfBoundsException e) {
-                       resizeByteArray(OPC_wide);
-               }
-               try {
-                       position++;
-                       bCodeStream[classFileOffset++] = OPC_dstore;
-               } catch (IndexOutOfBoundsException e) {
-                       resizeByteArray(OPC_dstore);
-               }
-               writeUnsignedShort(iArg);
-       } else {
-               try {
-                       position++;
-                       bCodeStream[classFileOffset++] = OPC_dstore;
-               } catch (IndexOutOfBoundsException e) {
-                       resizeByteArray(OPC_dstore);
-               }
-               try {
-                       position++;
-                       bCodeStream[classFileOffset++] = (byte) iArg;
-               } catch (IndexOutOfBoundsException e) {
-                       resizeByteArray((byte) iArg);
-               }
-       }
-}
-final public void dstore_0() {
-       countLabels = 0;
-       stackDepth -= 2;
-       if (maxLocals < 2) {
-               maxLocals = 2;
-       }
-       try {
-               position++;
-               bCodeStream[classFileOffset++] = OPC_dstore_0;
-       } catch (IndexOutOfBoundsException e) {
-               resizeByteArray(OPC_dstore_0);
-       }
-}
-final public void dstore_1() {
-       countLabels = 0;
-       stackDepth -= 2;
-       if (maxLocals < 3) {
-               maxLocals = 3;
-       }
-       try {
-               position++;
-               bCodeStream[classFileOffset++] = OPC_dstore_1;
-       } catch (IndexOutOfBoundsException e) {
-               resizeByteArray(OPC_dstore_1);
-       }
-}
-final public void dstore_2() {
-       countLabels = 0;
-       stackDepth -= 2;
-       if (maxLocals < 4) {
-               maxLocals = 4;
-       }
-       try {
-               position++;
-               bCodeStream[classFileOffset++] = OPC_dstore_2;
-       } catch (IndexOutOfBoundsException e) {
-               resizeByteArray(OPC_dstore_2);
-       }
-}
-final public void dstore_3() {
-       countLabels = 0;
-       stackDepth -= 2;
-       if (maxLocals < 5) {
-               maxLocals = 5;
-       }
-       try {
-               position++;
-               bCodeStream[classFileOffset++] = OPC_dstore_3;
-       } catch (IndexOutOfBoundsException e) {
-               resizeByteArray(OPC_dstore_3);
-       }
-}
-final public void dsub() {
-       countLabels = 0;
-       stackDepth -= 2;
-       try {
-               position++;
-               bCodeStream[classFileOffset++] = OPC_dsub;
-       } catch (IndexOutOfBoundsException e) {
-               resizeByteArray(OPC_dsub);
-       }
-}
-final public void dup() {
-       countLabels = 0;
-       stackDepth++;
-       if (stackDepth > stackMax)
-               stackMax = stackDepth;
-       try {
-               position++;
-               bCodeStream[classFileOffset++] = OPC_dup;
-       } catch (IndexOutOfBoundsException e) {
-               resizeByteArray(OPC_dup);
-       }
-}
-final public void dup_x1() {
-       countLabels = 0;
-       stackDepth++;
-       if (stackDepth > stackMax)
-               stackMax = stackDepth;
-       try {
-               position++;
-               bCodeStream[classFileOffset++] = OPC_dup_x1;
-       } catch (IndexOutOfBoundsException e) {
-               resizeByteArray(OPC_dup_x1);
-       }
-}
-final public void dup_x2() {
-       countLabels = 0;
-       stackDepth++;
-       if (stackDepth > stackMax)
-               stackMax = stackDepth;
-       try {
-               position++;
-               bCodeStream[classFileOffset++] = OPC_dup_x2;
-       } catch (IndexOutOfBoundsException e) {
-               resizeByteArray(OPC_dup_x2);
-       }
-}
-final public void dup2() {
-       countLabels = 0;
-       stackDepth += 2;
-       if (stackDepth > stackMax)
-               stackMax = stackDepth;
-       try {
-               position++;
-               bCodeStream[classFileOffset++] = OPC_dup2;
-       } catch (IndexOutOfBoundsException e) {
-               resizeByteArray(OPC_dup2);
-       }
-}
-final public void dup2_x1() {
-       countLabels = 0;
-       stackDepth += 2;
-       if (stackDepth > stackMax)
-               stackMax = stackDepth;
-       try {
-               position++;
-               bCodeStream[classFileOffset++] = OPC_dup2_x1;
-       } catch (IndexOutOfBoundsException e) {
-               resizeByteArray(OPC_dup2_x1);
-       }
-}
-final public void dup2_x2() {
-       countLabels = 0;
-       stackDepth += 2;
-       if (stackDepth > stackMax)
-               stackMax = stackDepth;
-       try {
-               position++;
-               bCodeStream[classFileOffset++] = OPC_dup2_x2;
-       } catch (IndexOutOfBoundsException e) {
-               resizeByteArray(OPC_dup2_x2);
-       }
-}
-public void exitUserScope(BlockScope blockScope) {
-       // mark all the scope's locals as loosing their definite assignment
+  public CodeStream(ClassFile classFile) {
+    generateLineNumberAttributes = (classFile.produceDebugAttributes & CompilerOptions.Lines) != 0;
+    generateLocalVariableTableAttributes = (classFile.produceDebugAttributes & CompilerOptions.Vars) != 0;
+    if (generateLineNumberAttributes) {
+      lineSeparatorPositions = classFile.referenceBinding.scope.referenceCompilationUnit().compilationResult.lineSeparatorPositions;
+    }
+  }
+  final public void aaload() {
+    countLabels = 0;
+    stackDepth--;
+    try {
+      position++;
+      bCodeStream[classFileOffset++] = OPC_aaload;
+    } catch (IndexOutOfBoundsException e) {
+      resizeByteArray(OPC_aaload);
+    }
+  }
+  final public void aastore() {
+    countLabels = 0;
+    stackDepth -= 3;
+    try {
+      position++;
+      bCodeStream[classFileOffset++] = OPC_aastore;
+    } catch (IndexOutOfBoundsException e) {
+      resizeByteArray(OPC_aastore);
+    }
+  }
+  final public void aconst_null() {
+    countLabels = 0;
+    stackDepth++;
+    if (stackDepth > stackMax)
+      stackMax = stackDepth;
+    try {
+      position++;
+      bCodeStream[classFileOffset++] = OPC_aconst_null;
+    } catch (IndexOutOfBoundsException e) {
+      resizeByteArray(OPC_aconst_null);
+    }
+  }
+  public final void addDefinitelyAssignedVariables(Scope scope, int initStateIndex) {
+    // Required to fix 1PR0XVS: LFRE:WINNT - Compiler: variable table for method appears incorrect
+    if (!generateLocalVariableTableAttributes)
+      return;
+    /* if (initStateIndex == lastInitStateIndexWhenAddingInits)
+               return;
+       lastInitStateIndexWhenAddingInits = initStateIndex;
+       if (lastInitStateIndexWhenRemovingInits != initStateIndex){
+               lastInitStateIndexWhenRemovingInits = -2; // reinitialize remove index 
+               // remove(1)-add(1)-remove(1) -> ignore second remove
+               // remove(1)-add(2)-remove(1) -> perform second remove
+       }
+       
+    */
+    for (int i = 0; i < visibleLocalsCount; i++) {
+      LocalVariableBinding localBinding = visibleLocals[i];
+      if (localBinding != null) {
+        // Check if the local is definitely assigned
+        if ((initStateIndex != -1) && isDefinitelyAssigned(scope, initStateIndex, localBinding)) {
+          if ((localBinding.initializationCount == 0)
+            || (localBinding.initializationPCs[((localBinding.initializationCount - 1) << 1) + 1] != -1)) {
+            /* There are two cases:
+             * 1) there is no initialization interval opened ==> add an opened interval
+             * 2) there is already some initialization intervals but the last one is closed ==> add an opened interval
+             * An opened interval means that the value at localBinding.initializationPCs[localBinding.initializationCount - 1][1]
+             * is equals to -1.
+             * initializationPCs is a collection of pairs of int:
+             *         first value is the startPC and second value is the endPC. -1 one for the last value means that the interval
+             *         is not closed yet.
+             */
+            localBinding.recordInitializationStartPC(position);
+          }
+        }
+      }
+    }
+  }
+  public void addLabel(Label aLabel) {
+    if (countLabels == labels.length)
+      System.arraycopy(labels, 0, (labels = new Label[countLabels + LABELS_INCREMENT]), 0, countLabels);
+    labels[countLabels++] = aLabel;
+  }
+  public void addVisibleLocalVariable(LocalVariableBinding localBinding) {
+    if (!generateLocalVariableTableAttributes)
+      return;
 
-       if (!generateLocalVariableTableAttributes)
-               return;
-       for (int i = 0; i < visibleLocalsCount; i++) {
-               LocalVariableBinding visibleLocal = visibleLocals[i];
-               if ((visibleLocal != null) && (visibleLocal.declaringScope == blockScope)) { 
-                       // there maybe some some preserved locals never initialized
-                       if (visibleLocal.initializationCount > 0){
-                               visibleLocals[i].recordInitializationEndPC(position);
-                       }
-                       visibleLocals[i] = null; // this variable is no longer visible afterwards
-               }
-       }
-}
-final public void f2d() {
-       countLabels = 0;
-       stackDepth++;
-       if (stackDepth > stackMax)
-               stackMax = stackDepth;
-       try {
-               position++;
-               bCodeStream[classFileOffset++] = OPC_f2d;
-       } catch (IndexOutOfBoundsException e) {
-               resizeByteArray(OPC_f2d);
-       }
-}
-final public void f2i() {
-       countLabels = 0;
-       try {
-               position++;
-               bCodeStream[classFileOffset++] = OPC_f2i;
-       } catch (IndexOutOfBoundsException e) {
-               resizeByteArray(OPC_f2i);
-       }
-}
-final public void f2l() {
-       countLabels = 0;
-       stackDepth++;
-       if (stackDepth > stackMax)
-               stackMax = stackDepth;
-       try {
-               position++;
-               bCodeStream[classFileOffset++] = OPC_f2l;
-       } catch (IndexOutOfBoundsException e) {
-               resizeByteArray(OPC_f2l);
-       }
-}
-final public void fadd() {
-       countLabels = 0;
-       stackDepth--;
-       try {
-               position++;
-               bCodeStream[classFileOffset++] = OPC_fadd;
-       } catch (IndexOutOfBoundsException e) {
-               resizeByteArray(OPC_fadd);
-       }
-}
-final public void faload() {
-       countLabels = 0;
-       stackDepth--;
-       try {
-               position++;
-               bCodeStream[classFileOffset++] = OPC_faload;
-       } catch (IndexOutOfBoundsException e) {
-               resizeByteArray(OPC_faload);
-       }
-}
-final public void fastore() {
-       countLabels = 0;
-       stackDepth -= 3;
-       try {
-               position++;
-               bCodeStream[classFileOffset++] = OPC_fastore;
-       } catch (IndexOutOfBoundsException e) {
-               resizeByteArray(OPC_fastore);
-       }
-}
-final public void fcmpg() {
-       countLabels = 0;
-       stackDepth--;
-       try {
-               position++;
-               bCodeStream[classFileOffset++] = OPC_fcmpg;
-       } catch (IndexOutOfBoundsException e) {
-               resizeByteArray(OPC_fcmpg);
-       }
-}
-final public void fcmpl() {
-       countLabels = 0;
-       stackDepth--;
-       try {
-               position++;
-               bCodeStream[classFileOffset++] = OPC_fcmpl;
-       } catch (IndexOutOfBoundsException e) {
-               resizeByteArray(OPC_fcmpl);
-       }
-}
-final public void fconst_0() {
-       countLabels = 0;
-       stackDepth++;
-       if (stackDepth > stackMax)
-               stackMax = stackDepth;
-       try {
-               position++;
-               bCodeStream[classFileOffset++] = OPC_fconst_0;
-       } catch (IndexOutOfBoundsException e) {
-               resizeByteArray(OPC_fconst_0);
-       }
-}
-final public void fconst_1() {
-       countLabels = 0;
-       stackDepth++;
-       if (stackDepth > stackMax)
-               stackMax = stackDepth;
-       try {
-               position++;
-               bCodeStream[classFileOffset++] = OPC_fconst_1;
-       } catch (IndexOutOfBoundsException e) {
-               resizeByteArray(OPC_fconst_1);
-       }
-}
-final public void fconst_2() {
-       countLabels = 0;
-       stackDepth++;
-       if (stackDepth > stackMax)
-               stackMax = stackDepth;
-       try {
-               position++;
-               bCodeStream[classFileOffset++] = OPC_fconst_2;
-       } catch (IndexOutOfBoundsException e) {
-               resizeByteArray(OPC_fconst_2);
-       }
-}
-final public void fdiv() {
-       countLabels = 0;
-       stackDepth--;
-       try {
-               position++;
-               bCodeStream[classFileOffset++] = OPC_fdiv;
-       } catch (IndexOutOfBoundsException e) {
-               resizeByteArray(OPC_fdiv);
-       }
-}
-final public void fload(int iArg) {
-       countLabels = 0;
-       stackDepth++;
-       if (maxLocals <= iArg) {
-               maxLocals = iArg + 1;
-       }
-       if (stackDepth > stackMax)
-               stackMax = stackDepth;
-       if (iArg > 255) { // Widen
-               try {
-                       position++;
-                       bCodeStream[classFileOffset++] = OPC_wide;
-               } catch (IndexOutOfBoundsException e) {
-                       resizeByteArray(OPC_wide);
-               }
-               try {
-                       position++;
-                       bCodeStream[classFileOffset++] = OPC_fload;
-               } catch (IndexOutOfBoundsException e) {
-                       resizeByteArray(OPC_fload);
-               }
-               writeUnsignedShort(iArg);
-       } else {
-               try {
-                       position++;
-                       bCodeStream[classFileOffset++] = OPC_fload;
-               } catch (IndexOutOfBoundsException e) {
-                       resizeByteArray(OPC_fload);
-               }
-               try {
-                       position++;
-                       bCodeStream[classFileOffset++] = (byte) iArg;
-               } catch (IndexOutOfBoundsException e) {
-                       resizeByteArray((byte) iArg);
-               }
-       }
-}
-final public void fload_0() {
-       countLabels = 0;
-       stackDepth++;
-       if (maxLocals == 0) {
-               maxLocals = 1;
-       }
-       if (stackDepth > stackMax)
-               stackMax = stackDepth;
-       try {
-               position++;
-               bCodeStream[classFileOffset++] = OPC_fload_0;
-       } catch (IndexOutOfBoundsException e) {
-               resizeByteArray(OPC_fload_0);
-       }
-}
-final public void fload_1() {
-       countLabels = 0;
-       stackDepth++;
-       if (maxLocals <= 1) {
-               maxLocals = 2;
-       }
-       if (stackDepth > stackMax)
-               stackMax = stackDepth;
-       try {
-               position++;
-               bCodeStream[classFileOffset++] = OPC_fload_1;
-       } catch (IndexOutOfBoundsException e) {
-               resizeByteArray(OPC_fload_1);
-       }
-}
-final public void fload_2() {
-       countLabels = 0;
-       stackDepth++;
-       if (maxLocals <= 2) {
-               maxLocals = 3;
-       }
-       if (stackDepth > stackMax)
-               stackMax = stackDepth;
-       try {
-               position++;
-               bCodeStream[classFileOffset++] = OPC_fload_2;
-       } catch (IndexOutOfBoundsException e) {
-               resizeByteArray(OPC_fload_2);
-       }
-}
-final public void fload_3() {
-       countLabels = 0;
-       stackDepth++;
-       if (maxLocals <= 3) {
-               maxLocals = 4;
-       }
-       if (stackDepth > stackMax)
-               stackMax = stackDepth;
-       try {
-               position++;
-               bCodeStream[classFileOffset++] = OPC_fload_3;
-       } catch (IndexOutOfBoundsException e) {
-               resizeByteArray(OPC_fload_3);
-       }
-}
-final public void fmul() {
-       countLabels = 0;
-       stackDepth--;
-       try {
-               position++;
-               bCodeStream[classFileOffset++] = OPC_fmul;
-       } catch (IndexOutOfBoundsException e) {
-               resizeByteArray(OPC_fmul);
-       }
-}
-final public void fneg() {
-       countLabels = 0;
-       try {
-               position++;
-               bCodeStream[classFileOffset++] = OPC_fneg;
-       } catch (IndexOutOfBoundsException e) {
-               resizeByteArray(OPC_fneg);
-       }
-}
-final public void frem() {
-       countLabels = 0;
-       stackDepth--;
-       try {
-               position++;
-               bCodeStream[classFileOffset++] = OPC_frem;
-       } catch (IndexOutOfBoundsException e) {
-               resizeByteArray(OPC_frem);
-       }
-}
-final public void freturn() {
-       countLabels = 0;
-       stackDepth--;
-       // the stackDepth should be equal to 0 
-       try {
-               position++;
-               bCodeStream[classFileOffset++] = OPC_freturn;
-       } catch (IndexOutOfBoundsException e) {
-               resizeByteArray(OPC_freturn);
-       }
-}
-final public void fstore(int iArg) {
-       countLabels = 0;
-       stackDepth--;
-       if (maxLocals <= iArg) {
-               maxLocals = iArg + 1;
-       }
-       if (iArg > 255) { // Widen
-               try {
-                       position++;
-                       bCodeStream[classFileOffset++] = OPC_wide;
-               } catch (IndexOutOfBoundsException e) {
-                       resizeByteArray(OPC_wide);
-               }
-               try {
-                       position++;
-                       bCodeStream[classFileOffset++] = OPC_fstore;
-               } catch (IndexOutOfBoundsException e) {
-                       resizeByteArray(OPC_fstore);
-               }
-               writeUnsignedShort(iArg);
-       } else {
-               try {
-                       position++;
-                       bCodeStream[classFileOffset++] = OPC_fstore;
-               } catch (IndexOutOfBoundsException e) {
-                       resizeByteArray(OPC_fstore);
-               }
-               try {
-                       position++;
-                       bCodeStream[classFileOffset++] = (byte) iArg;
-               } catch (IndexOutOfBoundsException e) {
-                       resizeByteArray((byte) iArg);
-               }
-       }
-}
-final public void fstore_0() {
-       countLabels = 0;
-       stackDepth--;
-       if (maxLocals == 0) {
-               maxLocals = 1;
-       }
-       try {
-               position++;
-               bCodeStream[classFileOffset++] = OPC_fstore_0;
-       } catch (IndexOutOfBoundsException e) {
-               resizeByteArray(OPC_fstore_0);
-       }
-}
-final public void fstore_1() {
-       countLabels = 0;
-       stackDepth--;
-       if (maxLocals <= 1) {
-               maxLocals = 2;
-       }
-       try {
-               position++;
-               bCodeStream[classFileOffset++] = OPC_fstore_1;
-       } catch (IndexOutOfBoundsException e) {
-               resizeByteArray(OPC_fstore_1);
-       }
-}
-final public void fstore_2() {
-       countLabels = 0;
-       stackDepth--;
-       if (maxLocals <= 2) {
-               maxLocals = 3;
-       }
-       try {
-               position++;
-               bCodeStream[classFileOffset++] = OPC_fstore_2;
-       } catch (IndexOutOfBoundsException e) {
-               resizeByteArray(OPC_fstore_2);
-       }
-}
-final public void fstore_3() {
-       countLabels = 0;
-       stackDepth--;
-       if (maxLocals <= 3) {
-               maxLocals = 4;
-       }
-       try {
-               position++;
-               bCodeStream[classFileOffset++] = OPC_fstore_3;
-       } catch (IndexOutOfBoundsException e) {
-               resizeByteArray(OPC_fstore_3);
-       }
-}
-final public void fsub() {
-       countLabels = 0;
-       stackDepth--;
-       try {
-               position++;
-               bCodeStream[classFileOffset++] = OPC_fsub;
-       } catch (IndexOutOfBoundsException e) {
-               resizeByteArray(OPC_fsub);
-       }
-}
-/**
- * Macro for building a class descriptor object
- */
-public void generateClassLiteralAccessForType(TypeBinding accessedType, FieldBinding syntheticFieldBinding) {
-       Label endLabel;
-       ExceptionLabel anyExceptionHandler;
-       int saveStackSize;
-       if (accessedType.isBaseType() && accessedType != NullBinding) {
-               this.getTYPE(accessedType.id);
-               return;
-       }
-       endLabel = new Label(this);
+    if (visibleLocalsCount >= visibleLocals.length) {
+      System.arraycopy(visibleLocals, 0, (visibleLocals = new LocalVariableBinding[visibleLocalsCount * 2]), 0, visibleLocalsCount);
+    }
+    visibleLocals[visibleLocalsCount++] = localBinding;
+  }
+  final public void aload(int iArg) {
+    countLabels = 0;
+    stackDepth++;
+    if (stackDepth > stackMax)
+      stackMax = stackDepth;
+    if (maxLocals <= iArg) {
+      maxLocals = iArg + 1;
+    }
+    if (iArg > 255) { // Widen
+      try {
+        position++;
+        bCodeStream[classFileOffset++] = OPC_wide;
+      } catch (IndexOutOfBoundsException e) {
+        resizeByteArray(OPC_wide);
+      }
+      try {
+        position++;
+        bCodeStream[classFileOffset++] = OPC_aload;
+      } catch (IndexOutOfBoundsException e) {
+        resizeByteArray(OPC_aload);
+      }
+      writeUnsignedShort(iArg);
+    } else {
+      // Don't need to use the wide bytecode
+      try {
+        position++;
+        bCodeStream[classFileOffset++] = OPC_aload;
+      } catch (IndexOutOfBoundsException e) {
+        resizeByteArray(OPC_aload);
+      }
+      try {
+        position++;
+        bCodeStream[classFileOffset++] = (byte) (iArg);
+      } catch (IndexOutOfBoundsException e) {
+        resizeByteArray((byte) iArg);
+      }
+    }
+  }
+  final public void aload_0() {
+    countLabels = 0;
+    stackDepth++;
+    if (stackDepth > stackMax)
+      stackMax = stackDepth;
+    if (maxLocals == 0) {
+      maxLocals = 1;
+    }
+    try {
+      position++;
+      bCodeStream[classFileOffset++] = OPC_aload_0;
+    } catch (IndexOutOfBoundsException e) {
+      resizeByteArray(OPC_aload_0);
+    }
+  }
+  final public void aload_1() {
+    countLabels = 0;
+    stackDepth++;
+    if (stackDepth > stackMax)
+      stackMax = stackDepth;
+    if (maxLocals <= 1) {
+      maxLocals = 2;
+    }
+    try {
+      position++;
+      bCodeStream[classFileOffset++] = OPC_aload_1;
+    } catch (IndexOutOfBoundsException e) {
+      resizeByteArray(OPC_aload_1);
+    }
+  }
+  final public void aload_2() {
+    countLabels = 0;
+    stackDepth++;
+    if (stackDepth > stackMax)
+      stackMax = stackDepth;
+    if (maxLocals <= 2) {
+      maxLocals = 3;
+    }
+    try {
+      position++;
+      bCodeStream[classFileOffset++] = OPC_aload_2;
+    } catch (IndexOutOfBoundsException e) {
+      resizeByteArray(OPC_aload_2);
+    }
+  }
+  final public void aload_3() {
+    countLabels = 0;
+    stackDepth++;
+    if (stackDepth > stackMax)
+      stackMax = stackDepth;
+    if (maxLocals <= 3) {
+      maxLocals = 4;
+    }
+    try {
+      position++;
+      bCodeStream[classFileOffset++] = OPC_aload_3;
+    } catch (IndexOutOfBoundsException e) {
+      resizeByteArray(OPC_aload_3);
+    }
+  }
+  public final void anewarray(TypeBinding typeBinding) {
+    countLabels = 0;
+    try {
+      position++;
+      bCodeStream[classFileOffset++] = OPC_anewarray;
+    } catch (IndexOutOfBoundsException e) {
+      resizeByteArray(OPC_anewarray);
+    }
+    writeUnsignedShort(constantPool.literalIndex(typeBinding));
+  }
+  public void anewarrayJavaLangClass() {
+    // anewarray: java.lang.Class
+    countLabels = 0;
+    try {
+      position++;
+      bCodeStream[classFileOffset++] = OPC_anewarray;
+    } catch (IndexOutOfBoundsException e) {
+      resizeByteArray(OPC_anewarray);
+    }
+    writeUnsignedShort(constantPool.literalIndexForJavaLangClass());
+  }
+  public void anewarrayJavaLangObject() {
+    // anewarray: java.lang.Object
+    countLabels = 0;
+    try {
+      position++;
+      bCodeStream[classFileOffset++] = OPC_anewarray;
+    } catch (IndexOutOfBoundsException e) {
+      resizeByteArray(OPC_anewarray);
+    }
+    writeUnsignedShort(constantPool.literalIndexForJavaLangObject());
+  }
+  final public void areturn() {
+    countLabels = 0;
+    stackDepth--;
+    // the stackDepth should be equal to 0 
+    try {
+      position++;
+      bCodeStream[classFileOffset++] = OPC_areturn;
+    } catch (IndexOutOfBoundsException e) {
+      resizeByteArray(OPC_areturn);
+    }
+  }
+  public void arrayAt(int typeBindingID) {
+    switch (typeBindingID) {
+      case T_int :
+        this.iaload();
+        break;
+      case T_byte :
+      case T_boolean :
+        this.baload();
+        break;
+      case T_short :
+        this.saload();
+        break;
+      case T_char :
+        this.caload();
+        break;
+      case T_long :
+        this.laload();
+        break;
+      case T_float :
+        this.faload();
+        break;
+      case T_double :
+        this.daload();
+        break;
+      default :
+        this.aaload();
+    }
+  }
+  public void arrayAtPut(int elementTypeID, boolean valueRequired) {
+    switch (elementTypeID) {
+      case T_int :
+        if (valueRequired)
+          dup_x2();
+        iastore();
+        break;
+      case T_byte :
+      case T_boolean :
+        if (valueRequired)
+          dup_x2();
+        bastore();
+        break;
+      case T_short :
+        if (valueRequired)
+          dup_x2();
+        sastore();
+        break;
+      case T_char :
+        if (valueRequired)
+          dup_x2();
+        castore();
+        break;
+      case T_long :
+        if (valueRequired)
+          dup2_x2();
+        lastore();
+        break;
+      case T_float :
+        if (valueRequired)
+          dup_x2();
+        fastore();
+        break;
+      case T_double :
+        if (valueRequired)
+          dup2_x2();
+        dastore();
+        break;
+      default :
+        if (valueRequired)
+          dup_x2();
+        aastore();
+    }
+  }
+  final public void arraylength() {
+    countLabels = 0;
+    try {
+      position++;
+      bCodeStream[classFileOffset++] = OPC_arraylength;
+    } catch (IndexOutOfBoundsException e) {
+      resizeByteArray(OPC_arraylength);
+    }
+  }
+  final public void astore(int iArg) {
+    countLabels = 0;
+    stackDepth--;
+    if (maxLocals <= iArg) {
+      maxLocals = iArg + 1;
+    }
+    if (iArg > 255) { // Widen
+      try {
+        position++;
+        bCodeStream[classFileOffset++] = OPC_wide;
+      } catch (IndexOutOfBoundsException e) {
+        resizeByteArray(OPC_wide);
+      }
+      try {
+        position++;
+        bCodeStream[classFileOffset++] = OPC_astore;
+      } catch (IndexOutOfBoundsException e) {
+        resizeByteArray(OPC_astore);
+      }
+      writeUnsignedShort(iArg);
+    } else {
+      try {
+        position++;
+        bCodeStream[classFileOffset++] = OPC_astore;
+      } catch (IndexOutOfBoundsException e) {
+        resizeByteArray(OPC_astore);
+      }
+      try {
+        position++;
+        bCodeStream[classFileOffset++] = (byte) iArg;
+      } catch (IndexOutOfBoundsException e) {
+        resizeByteArray((byte) iArg);
+      }
+    }
+  }
+  final public void astore_0() {
+    countLabels = 0;
+    stackDepth--;
+    if (maxLocals == 0) {
+      maxLocals = 1;
+    }
+    try {
+      position++;
+      bCodeStream[classFileOffset++] = OPC_astore_0;
+    } catch (IndexOutOfBoundsException e) {
+      resizeByteArray(OPC_astore_0);
+    }
+  }
+  final public void astore_1() {
+    countLabels = 0;
+    stackDepth--;
+    if (maxLocals <= 1) {
+      maxLocals = 2;
+    }
+    try {
+      position++;
+      bCodeStream[classFileOffset++] = OPC_astore_1;
+    } catch (IndexOutOfBoundsException e) {
+      resizeByteArray(OPC_astore_1);
+    }
+  }
+  final public void astore_2() {
+    countLabels = 0;
+    stackDepth--;
+    if (maxLocals <= 2) {
+      maxLocals = 3;
+    }
+    try {
+      position++;
+      bCodeStream[classFileOffset++] = OPC_astore_2;
+    } catch (IndexOutOfBoundsException e) {
+      resizeByteArray(OPC_astore_2);
+    }
+  }
+  final public void astore_3() {
+    countLabels = 0;
+    stackDepth--;
+    if (maxLocals <= 3) {
+      maxLocals = 4;
+    }
+    try {
+      position++;
+      bCodeStream[classFileOffset++] = OPC_astore_3;
+    } catch (IndexOutOfBoundsException e) {
+      resizeByteArray(OPC_astore_3);
+    }
+  }
+  final public void athrow() {
+    countLabels = 0;
+    stackDepth--;
+    try {
+      position++;
+      bCodeStream[classFileOffset++] = OPC_athrow;
+    } catch (IndexOutOfBoundsException e) {
+      resizeByteArray(OPC_athrow);
+    }
+  }
+  final public void baload() {
+    countLabels = 0;
+    stackDepth--;
+    try {
+      position++;
+      bCodeStream[classFileOffset++] = OPC_baload;
+    } catch (IndexOutOfBoundsException e) {
+      resizeByteArray(OPC_baload);
+    }
+  }
+  final public void bastore() {
+    countLabels = 0;
+    stackDepth -= 3;
+    try {
+      position++;
+      bCodeStream[classFileOffset++] = OPC_bastore;
+    } catch (IndexOutOfBoundsException e) {
+      resizeByteArray(OPC_bastore);
+    }
+  }
+  final public void bipush(byte b) {
+    countLabels = 0;
+    stackDepth++;
+    if (stackDepth > stackMax)
+      stackMax = stackDepth;
+    try {
+      position++;
+      bCodeStream[classFileOffset++] = OPC_bipush;
+    } catch (IndexOutOfBoundsException e) {
+      resizeByteArray(OPC_bipush);
+    }
+    writeSignedByte(b);
+  }
+  final public void caload() {
+    countLabels = 0;
+    stackDepth--;
+    try {
+      position++;
+      bCodeStream[classFileOffset++] = OPC_caload;
+    } catch (IndexOutOfBoundsException e) {
+      resizeByteArray(OPC_caload);
+    }
+  }
+  final public void castore() {
+    countLabels = 0;
+    stackDepth -= 3;
+    try {
+      position++;
+      bCodeStream[classFileOffset++] = OPC_castore;
+    } catch (IndexOutOfBoundsException e) {
+      resizeByteArray(OPC_castore);
+    }
+  }
+  public final void checkcast(TypeBinding typeBinding) {
+    countLabels = 0;
+    try {
+      position++;
+      bCodeStream[classFileOffset++] = OPC_checkcast;
+    } catch (IndexOutOfBoundsException e) {
+      resizeByteArray(OPC_checkcast);
+    }
+    writeUnsignedShort(constantPool.literalIndex(typeBinding));
+  }
+  public final void checkcastJavaLangError() {
+    countLabels = 0;
+    try {
+      position++;
+      bCodeStream[classFileOffset++] = OPC_checkcast;
+    } catch (IndexOutOfBoundsException e) {
+      resizeByteArray(OPC_checkcast);
+    }
+    writeUnsignedShort(constantPool.literalIndexForJavaLangError());
+  }
+  final public void d2f() {
+    countLabels = 0;
+    stackDepth--;
+    try {
+      position++;
+      bCodeStream[classFileOffset++] = OPC_d2f;
+    } catch (IndexOutOfBoundsException e) {
+      resizeByteArray(OPC_d2f);
+    }
+  }
+  final public void d2i() {
+    countLabels = 0;
+    stackDepth--;
+    try {
+      position++;
+      bCodeStream[classFileOffset++] = OPC_d2i;
+    } catch (IndexOutOfBoundsException e) {
+      resizeByteArray(OPC_d2i);
+    }
+  }
+  final public void d2l() {
+    countLabels = 0;
+    try {
+      position++;
+      bCodeStream[classFileOffset++] = OPC_d2l;
+    } catch (IndexOutOfBoundsException e) {
+      resizeByteArray(OPC_d2l);
+    }
+  }
+  final public void dadd() {
+    countLabels = 0;
+    stackDepth -= 2;
+    try {
+      position++;
+      bCodeStream[classFileOffset++] = OPC_dadd;
+    } catch (IndexOutOfBoundsException e) {
+      resizeByteArray(OPC_dadd);
+    }
+  }
+  final public void daload() {
+    countLabels = 0;
+    try {
+      position++;
+      bCodeStream[classFileOffset++] = OPC_daload;
+    } catch (IndexOutOfBoundsException e) {
+      resizeByteArray(OPC_daload);
+    }
+  }
+  final public void dastore() {
+    countLabels = 0;
+    stackDepth -= 4;
+    try {
+      position++;
+      bCodeStream[classFileOffset++] = OPC_dastore;
+    } catch (IndexOutOfBoundsException e) {
+      resizeByteArray(OPC_dastore);
+    }
+  }
+  final public void dcmpg() {
+    countLabels = 0;
+    stackDepth -= 3;
+    try {
+      position++;
+      bCodeStream[classFileOffset++] = OPC_dcmpg;
+    } catch (IndexOutOfBoundsException e) {
+      resizeByteArray(OPC_dcmpg);
+    }
+  }
+  final public void dcmpl() {
+    countLabels = 0;
+    stackDepth -= 3;
+    try {
+      position++;
+      bCodeStream[classFileOffset++] = OPC_dcmpl;
+    } catch (IndexOutOfBoundsException e) {
+      resizeByteArray(OPC_dcmpl);
+    }
+  }
+  final public void dconst_0() {
+    countLabels = 0;
+    stackDepth += 2;
+    if (stackDepth > stackMax)
+      stackMax = stackDepth;
+    try {
+      position++;
+      bCodeStream[classFileOffset++] = OPC_dconst_0;
+    } catch (IndexOutOfBoundsException e) {
+      resizeByteArray(OPC_dconst_0);
+    }
+  }
+  final public void dconst_1() {
+    countLabels = 0;
+    stackDepth += 2;
+    if (stackDepth > stackMax)
+      stackMax = stackDepth;
+    try {
+      position++;
+      bCodeStream[classFileOffset++] = OPC_dconst_1;
+    } catch (IndexOutOfBoundsException e) {
+      resizeByteArray(OPC_dconst_1);
+    }
+  }
+  final public void ddiv() {
+    countLabels = 0;
+    stackDepth -= 2;
+    try {
+      position++;
+      bCodeStream[classFileOffset++] = OPC_ddiv;
+    } catch (IndexOutOfBoundsException e) {
+      resizeByteArray(OPC_ddiv);
+    }
+  }
+  public void decrStackSize(int offset) {
+    stackDepth -= offset;
+  }
+  final public void dload(int iArg) {
+    countLabels = 0;
+    stackDepth += 2;
+    if (stackDepth > stackMax)
+      stackMax = stackDepth;
+    if (maxLocals < iArg + 2) {
+      maxLocals = iArg + 2; // + 2 because it is a double
+    }
+    if (iArg > 255) { // Widen
+      try {
+        position++;
+        bCodeStream[classFileOffset++] = OPC_wide;
+      } catch (IndexOutOfBoundsException e) {
+        resizeByteArray(OPC_wide);
+      }
+      try {
+        position++;
+        bCodeStream[classFileOffset++] = OPC_dload;
+      } catch (IndexOutOfBoundsException e) {
+        resizeByteArray(OPC_dload);
+      }
+      writeUnsignedShort(iArg);
+    } else {
+      // Don't need to use the wide bytecode
+      try {
+        position++;
+        bCodeStream[classFileOffset++] = OPC_dload;
+      } catch (IndexOutOfBoundsException e) {
+        resizeByteArray(OPC_dload);
+      }
+      try {
+        position++;
+        bCodeStream[classFileOffset++] = (byte) iArg;
+      } catch (IndexOutOfBoundsException e) {
+        resizeByteArray((byte) iArg);
+      }
+    }
+  }
+  final public void dload_0() {
+    countLabels = 0;
+    stackDepth += 2;
+    if (stackDepth > stackMax)
+      stackMax = stackDepth;
+    if (maxLocals < 2) {
+      maxLocals = 2;
+    }
+    try {
+      position++;
+      bCodeStream[classFileOffset++] = OPC_dload_0;
+    } catch (IndexOutOfBoundsException e) {
+      resizeByteArray(OPC_dload_0);
+    }
+  }
+  final public void dload_1() {
+    countLabels = 0;
+    stackDepth += 2;
+    if (stackDepth > stackMax)
+      stackMax = stackDepth;
+    if (maxLocals < 3) {
+      maxLocals = 3;
+    }
+    try {
+      position++;
+      bCodeStream[classFileOffset++] = OPC_dload_1;
+    } catch (IndexOutOfBoundsException e) {
+      resizeByteArray(OPC_dload_1);
+    }
+  }
+  final public void dload_2() {
+    countLabels = 0;
+    stackDepth += 2;
+    if (stackDepth > stackMax)
+      stackMax = stackDepth;
+    if (maxLocals < 4) {
+      maxLocals = 4;
+    }
+    try {
+      position++;
+      bCodeStream[classFileOffset++] = OPC_dload_2;
+    } catch (IndexOutOfBoundsException e) {
+      resizeByteArray(OPC_dload_2);
+    }
+  }
+  final public void dload_3() {
+    countLabels = 0;
+    stackDepth += 2;
+    if (stackDepth > stackMax)
+      stackMax = stackDepth;
+    if (maxLocals < 5) {
+      maxLocals = 5;
+    }
+    try {
+      position++;
+      bCodeStream[classFileOffset++] = OPC_dload_3;
+    } catch (IndexOutOfBoundsException e) {
+      resizeByteArray(OPC_dload_3);
+    }
+  }
+  final public void dmul() {
+    countLabels = 0;
+    stackDepth -= 2;
+    try {
+      position++;
+      bCodeStream[classFileOffset++] = OPC_dmul;
+    } catch (IndexOutOfBoundsException e) {
+      resizeByteArray(OPC_dmul);
+    }
+  }
+  final public void dneg() {
+    countLabels = 0;
+    try {
+      position++;
+      bCodeStream[classFileOffset++] = OPC_dneg;
+    } catch (IndexOutOfBoundsException e) {
+      resizeByteArray(OPC_dneg);
+    }
+  }
+  final public void drem() {
+    countLabels = 0;
+    stackDepth -= 2;
+    try {
+      position++;
+      bCodeStream[classFileOffset++] = OPC_drem;
+    } catch (IndexOutOfBoundsException e) {
+      resizeByteArray(OPC_drem);
+    }
+  }
+  final public void dreturn() {
+    countLabels = 0;
+    stackDepth -= 2;
+    // the stackDepth should be equal to 0 
+    try {
+      position++;
+      bCodeStream[classFileOffset++] = OPC_dreturn;
+    } catch (IndexOutOfBoundsException e) {
+      resizeByteArray(OPC_dreturn);
+    }
+  }
+  final public void dstore(int iArg) {
+    countLabels = 0;
+    stackDepth -= 2;
+    if (maxLocals <= iArg + 1) {
+      maxLocals = iArg + 2;
+    }
+    if (iArg > 255) { // Widen
+      try {
+        position++;
+        bCodeStream[classFileOffset++] = OPC_wide;
+      } catch (IndexOutOfBoundsException e) {
+        resizeByteArray(OPC_wide);
+      }
+      try {
+        position++;
+        bCodeStream[classFileOffset++] = OPC_dstore;
+      } catch (IndexOutOfBoundsException e) {
+        resizeByteArray(OPC_dstore);
+      }
+      writeUnsignedShort(iArg);
+    } else {
+      try {
+        position++;
+        bCodeStream[classFileOffset++] = OPC_dstore;
+      } catch (IndexOutOfBoundsException e) {
+        resizeByteArray(OPC_dstore);
+      }
+      try {
+        position++;
+        bCodeStream[classFileOffset++] = (byte) iArg;
+      } catch (IndexOutOfBoundsException e) {
+        resizeByteArray((byte) iArg);
+      }
+    }
+  }
+  final public void dstore_0() {
+    countLabels = 0;
+    stackDepth -= 2;
+    if (maxLocals < 2) {
+      maxLocals = 2;
+    }
+    try {
+      position++;
+      bCodeStream[classFileOffset++] = OPC_dstore_0;
+    } catch (IndexOutOfBoundsException e) {
+      resizeByteArray(OPC_dstore_0);
+    }
+  }
+  final public void dstore_1() {
+    countLabels = 0;
+    stackDepth -= 2;
+    if (maxLocals < 3) {
+      maxLocals = 3;
+    }
+    try {
+      position++;
+      bCodeStream[classFileOffset++] = OPC_dstore_1;
+    } catch (IndexOutOfBoundsException e) {
+      resizeByteArray(OPC_dstore_1);
+    }
+  }
+  final public void dstore_2() {
+    countLabels = 0;
+    stackDepth -= 2;
+    if (maxLocals < 4) {
+      maxLocals = 4;
+    }
+    try {
+      position++;
+      bCodeStream[classFileOffset++] = OPC_dstore_2;
+    } catch (IndexOutOfBoundsException e) {
+      resizeByteArray(OPC_dstore_2);
+    }
+  }
+  final public void dstore_3() {
+    countLabels = 0;
+    stackDepth -= 2;
+    if (maxLocals < 5) {
+      maxLocals = 5;
+    }
+    try {
+      position++;
+      bCodeStream[classFileOffset++] = OPC_dstore_3;
+    } catch (IndexOutOfBoundsException e) {
+      resizeByteArray(OPC_dstore_3);
+    }
+  }
+  final public void dsub() {
+    countLabels = 0;
+    stackDepth -= 2;
+    try {
+      position++;
+      bCodeStream[classFileOffset++] = OPC_dsub;
+    } catch (IndexOutOfBoundsException e) {
+      resizeByteArray(OPC_dsub);
+    }
+  }
+  final public void dup() {
+    countLabels = 0;
+    stackDepth++;
+    if (stackDepth > stackMax)
+      stackMax = stackDepth;
+    try {
+      position++;
+      bCodeStream[classFileOffset++] = OPC_dup;
+    } catch (IndexOutOfBoundsException e) {
+      resizeByteArray(OPC_dup);
+    }
+  }
+  final public void dup_x1() {
+    countLabels = 0;
+    stackDepth++;
+    if (stackDepth > stackMax)
+      stackMax = stackDepth;
+    try {
+      position++;
+      bCodeStream[classFileOffset++] = OPC_dup_x1;
+    } catch (IndexOutOfBoundsException e) {
+      resizeByteArray(OPC_dup_x1);
+    }
+  }
+  final public void dup_x2() {
+    countLabels = 0;
+    stackDepth++;
+    if (stackDepth > stackMax)
+      stackMax = stackDepth;
+    try {
+      position++;
+      bCodeStream[classFileOffset++] = OPC_dup_x2;
+    } catch (IndexOutOfBoundsException e) {
+      resizeByteArray(OPC_dup_x2);
+    }
+  }
+  final public void dup2() {
+    countLabels = 0;
+    stackDepth += 2;
+    if (stackDepth > stackMax)
+      stackMax = stackDepth;
+    try {
+      position++;
+      bCodeStream[classFileOffset++] = OPC_dup2;
+    } catch (IndexOutOfBoundsException e) {
+      resizeByteArray(OPC_dup2);
+    }
+  }
+  final public void dup2_x1() {
+    countLabels = 0;
+    stackDepth += 2;
+    if (stackDepth > stackMax)
+      stackMax = stackDepth;
+    try {
+      position++;
+      bCodeStream[classFileOffset++] = OPC_dup2_x1;
+    } catch (IndexOutOfBoundsException e) {
+      resizeByteArray(OPC_dup2_x1);
+    }
+  }
+  final public void dup2_x2() {
+    countLabels = 0;
+    stackDepth += 2;
+    if (stackDepth > stackMax)
+      stackMax = stackDepth;
+    try {
+      position++;
+      bCodeStream[classFileOffset++] = OPC_dup2_x2;
+    } catch (IndexOutOfBoundsException e) {
+      resizeByteArray(OPC_dup2_x2);
+    }
+  }
+  public void exitUserScope(BlockScope blockScope) {
+    // mark all the scope's locals as loosing their definite assignment
 
-       if (syntheticFieldBinding != null) { // non interface case
-               this.getstatic(syntheticFieldBinding);
-               this.dup();
-               this.ifnonnull(endLabel);
-               this.pop();
-       }
+    if (!generateLocalVariableTableAttributes)
+      return;
+    for (int i = 0; i < visibleLocalsCount; i++) {
+      LocalVariableBinding visibleLocal = visibleLocals[i];
+      if ((visibleLocal != null) && (visibleLocal.declaringScope == blockScope)) {
+        // there maybe some some preserved locals never initialized
+        if (visibleLocal.initializationCount > 0) {
+          visibleLocals[i].recordInitializationEndPC(position);
+        }
+        visibleLocals[i] = null; // this variable is no longer visible afterwards
+      }
+    }
+  }
+  final public void f2d() {
+    countLabels = 0;
+    stackDepth++;
+    if (stackDepth > stackMax)
+      stackMax = stackDepth;
+    try {
+      position++;
+      bCodeStream[classFileOffset++] = OPC_f2d;
+    } catch (IndexOutOfBoundsException e) {
+      resizeByteArray(OPC_f2d);
+    }
+  }
+  final public void f2i() {
+    countLabels = 0;
+    try {
+      position++;
+      bCodeStream[classFileOffset++] = OPC_f2i;
+    } catch (IndexOutOfBoundsException e) {
+      resizeByteArray(OPC_f2i);
+    }
+  }
+  final public void f2l() {
+    countLabels = 0;
+    stackDepth++;
+    if (stackDepth > stackMax)
+      stackMax = stackDepth;
+    try {
+      position++;
+      bCodeStream[classFileOffset++] = OPC_f2l;
+    } catch (IndexOutOfBoundsException e) {
+      resizeByteArray(OPC_f2l);
+    }
+  }
+  final public void fadd() {
+    countLabels = 0;
+    stackDepth--;
+    try {
+      position++;
+      bCodeStream[classFileOffset++] = OPC_fadd;
+    } catch (IndexOutOfBoundsException e) {
+      resizeByteArray(OPC_fadd);
+    }
+  }
+  final public void faload() {
+    countLabels = 0;
+    stackDepth--;
+    try {
+      position++;
+      bCodeStream[classFileOffset++] = OPC_faload;
+    } catch (IndexOutOfBoundsException e) {
+      resizeByteArray(OPC_faload);
+    }
+  }
+  final public void fastore() {
+    countLabels = 0;
+    stackDepth -= 3;
+    try {
+      position++;
+      bCodeStream[classFileOffset++] = OPC_fastore;
+    } catch (IndexOutOfBoundsException e) {
+      resizeByteArray(OPC_fastore);
+    }
+  }
+  final public void fcmpg() {
+    countLabels = 0;
+    stackDepth--;
+    try {
+      position++;
+      bCodeStream[classFileOffset++] = OPC_fcmpg;
+    } catch (IndexOutOfBoundsException e) {
+      resizeByteArray(OPC_fcmpg);
+    }
+  }
+  final public void fcmpl() {
+    countLabels = 0;
+    stackDepth--;
+    try {
+      position++;
+      bCodeStream[classFileOffset++] = OPC_fcmpl;
+    } catch (IndexOutOfBoundsException e) {
+      resizeByteArray(OPC_fcmpl);
+    }
+  }
+  final public void fconst_0() {
+    countLabels = 0;
+    stackDepth++;
+    if (stackDepth > stackMax)
+      stackMax = stackDepth;
+    try {
+      position++;
+      bCodeStream[classFileOffset++] = OPC_fconst_0;
+    } catch (IndexOutOfBoundsException e) {
+      resizeByteArray(OPC_fconst_0);
+    }
+  }
+  final public void fconst_1() {
+    countLabels = 0;
+    stackDepth++;
+    if (stackDepth > stackMax)
+      stackMax = stackDepth;
+    try {
+      position++;
+      bCodeStream[classFileOffset++] = OPC_fconst_1;
+    } catch (IndexOutOfBoundsException e) {
+      resizeByteArray(OPC_fconst_1);
+    }
+  }
+  final public void fconst_2() {
+    countLabels = 0;
+    stackDepth++;
+    if (stackDepth > stackMax)
+      stackMax = stackDepth;
+    try {
+      position++;
+      bCodeStream[classFileOffset++] = OPC_fconst_2;
+    } catch (IndexOutOfBoundsException e) {
+      resizeByteArray(OPC_fconst_2);
+    }
+  }
+  final public void fdiv() {
+    countLabels = 0;
+    stackDepth--;
+    try {
+      position++;
+      bCodeStream[classFileOffset++] = OPC_fdiv;
+    } catch (IndexOutOfBoundsException e) {
+      resizeByteArray(OPC_fdiv);
+    }
+  }
+  final public void fload(int iArg) {
+    countLabels = 0;
+    stackDepth++;
+    if (maxLocals <= iArg) {
+      maxLocals = iArg + 1;
+    }
+    if (stackDepth > stackMax)
+      stackMax = stackDepth;
+    if (iArg > 255) { // Widen
+      try {
+        position++;
+        bCodeStream[classFileOffset++] = OPC_wide;
+      } catch (IndexOutOfBoundsException e) {
+        resizeByteArray(OPC_wide);
+      }
+      try {
+        position++;
+        bCodeStream[classFileOffset++] = OPC_fload;
+      } catch (IndexOutOfBoundsException e) {
+        resizeByteArray(OPC_fload);
+      }
+      writeUnsignedShort(iArg);
+    } else {
+      try {
+        position++;
+        bCodeStream[classFileOffset++] = OPC_fload;
+      } catch (IndexOutOfBoundsException e) {
+        resizeByteArray(OPC_fload);
+      }
+      try {
+        position++;
+        bCodeStream[classFileOffset++] = (byte) iArg;
+      } catch (IndexOutOfBoundsException e) {
+        resizeByteArray((byte) iArg);
+      }
+    }
+  }
+  final public void fload_0() {
+    countLabels = 0;
+    stackDepth++;
+    if (maxLocals == 0) {
+      maxLocals = 1;
+    }
+    if (stackDepth > stackMax)
+      stackMax = stackDepth;
+    try {
+      position++;
+      bCodeStream[classFileOffset++] = OPC_fload_0;
+    } catch (IndexOutOfBoundsException e) {
+      resizeByteArray(OPC_fload_0);
+    }
+  }
+  final public void fload_1() {
+    countLabels = 0;
+    stackDepth++;
+    if (maxLocals <= 1) {
+      maxLocals = 2;
+    }
+    if (stackDepth > stackMax)
+      stackMax = stackDepth;
+    try {
+      position++;
+      bCodeStream[classFileOffset++] = OPC_fload_1;
+    } catch (IndexOutOfBoundsException e) {
+      resizeByteArray(OPC_fload_1);
+    }
+  }
+  final public void fload_2() {
+    countLabels = 0;
+    stackDepth++;
+    if (maxLocals <= 2) {
+      maxLocals = 3;
+    }
+    if (stackDepth > stackMax)
+      stackMax = stackDepth;
+    try {
+      position++;
+      bCodeStream[classFileOffset++] = OPC_fload_2;
+    } catch (IndexOutOfBoundsException e) {
+      resizeByteArray(OPC_fload_2);
+    }
+  }
+  final public void fload_3() {
+    countLabels = 0;
+    stackDepth++;
+    if (maxLocals <= 3) {
+      maxLocals = 4;
+    }
+    if (stackDepth > stackMax)
+      stackMax = stackDepth;
+    try {
+      position++;
+      bCodeStream[classFileOffset++] = OPC_fload_3;
+    } catch (IndexOutOfBoundsException e) {
+      resizeByteArray(OPC_fload_3);
+    }
+  }
+  final public void fmul() {
+    countLabels = 0;
+    stackDepth--;
+    try {
+      position++;
+      bCodeStream[classFileOffset++] = OPC_fmul;
+    } catch (IndexOutOfBoundsException e) {
+      resizeByteArray(OPC_fmul);
+    }
+  }
+  final public void fneg() {
+    countLabels = 0;
+    try {
+      position++;
+      bCodeStream[classFileOffset++] = OPC_fneg;
+    } catch (IndexOutOfBoundsException e) {
+      resizeByteArray(OPC_fneg);
+    }
+  }
+  final public void frem() {
+    countLabels = 0;
+    stackDepth--;
+    try {
+      position++;
+      bCodeStream[classFileOffset++] = OPC_frem;
+    } catch (IndexOutOfBoundsException e) {
+      resizeByteArray(OPC_frem);
+    }
+  }
+  final public void freturn() {
+    countLabels = 0;
+    stackDepth--;
+    // the stackDepth should be equal to 0 
+    try {
+      position++;
+      bCodeStream[classFileOffset++] = OPC_freturn;
+    } catch (IndexOutOfBoundsException e) {
+      resizeByteArray(OPC_freturn);
+    }
+  }
+  final public void fstore(int iArg) {
+    countLabels = 0;
+    stackDepth--;
+    if (maxLocals <= iArg) {
+      maxLocals = iArg + 1;
+    }
+    if (iArg > 255) { // Widen
+      try {
+        position++;
+        bCodeStream[classFileOffset++] = OPC_wide;
+      } catch (IndexOutOfBoundsException e) {
+        resizeByteArray(OPC_wide);
+      }
+      try {
+        position++;
+        bCodeStream[classFileOffset++] = OPC_fstore;
+      } catch (IndexOutOfBoundsException e) {
+        resizeByteArray(OPC_fstore);
+      }
+      writeUnsignedShort(iArg);
+    } else {
+      try {
+        position++;
+        bCodeStream[classFileOffset++] = OPC_fstore;
+      } catch (IndexOutOfBoundsException e) {
+        resizeByteArray(OPC_fstore);
+      }
+      try {
+        position++;
+        bCodeStream[classFileOffset++] = (byte) iArg;
+      } catch (IndexOutOfBoundsException e) {
+        resizeByteArray((byte) iArg);
+      }
+    }
+  }
+  final public void fstore_0() {
+    countLabels = 0;
+    stackDepth--;
+    if (maxLocals == 0) {
+      maxLocals = 1;
+    }
+    try {
+      position++;
+      bCodeStream[classFileOffset++] = OPC_fstore_0;
+    } catch (IndexOutOfBoundsException e) {
+      resizeByteArray(OPC_fstore_0);
+    }
+  }
+  final public void fstore_1() {
+    countLabels = 0;
+    stackDepth--;
+    if (maxLocals <= 1) {
+      maxLocals = 2;
+    }
+    try {
+      position++;
+      bCodeStream[classFileOffset++] = OPC_fstore_1;
+    } catch (IndexOutOfBoundsException e) {
+      resizeByteArray(OPC_fstore_1);
+    }
+  }
+  final public void fstore_2() {
+    countLabels = 0;
+    stackDepth--;
+    if (maxLocals <= 2) {
+      maxLocals = 3;
+    }
+    try {
+      position++;
+      bCodeStream[classFileOffset++] = OPC_fstore_2;
+    } catch (IndexOutOfBoundsException e) {
+      resizeByteArray(OPC_fstore_2);
+    }
+  }
+  final public void fstore_3() {
+    countLabels = 0;
+    stackDepth--;
+    if (maxLocals <= 3) {
+      maxLocals = 4;
+    }
+    try {
+      position++;
+      bCodeStream[classFileOffset++] = OPC_fstore_3;
+    } catch (IndexOutOfBoundsException e) {
+      resizeByteArray(OPC_fstore_3);
+    }
+  }
+  final public void fsub() {
+    countLabels = 0;
+    stackDepth--;
+    try {
+      position++;
+      bCodeStream[classFileOffset++] = OPC_fsub;
+    } catch (IndexOutOfBoundsException e) {
+      resizeByteArray(OPC_fsub);
+    }
+  }
+  /**
+   * Macro for building a class descriptor object
+   */
+  public void generateClassLiteralAccessForType(TypeBinding accessedType, FieldBinding syntheticFieldBinding) {
+    Label endLabel;
+    ExceptionLabel anyExceptionHandler;
+    int saveStackSize;
+    if (accessedType.isBaseType() && accessedType != NullBinding) {
+      this.getTYPE(accessedType.id);
+      return;
+    }
+    endLabel = new Label(this);
 
-       /* Macro for building a class descriptor object... using or not a field cache to store it into...
-       this sequence is responsible for building the actual class descriptor.
-       
-       If the fieldCache is set, then it is supposed to be the body of a synthetic access method
-       factoring the actual descriptor creation out of the invocation site (saving space).
-       If the fieldCache is nil, then we are dumping the bytecode on the invocation site, since
-       we have no way to get a hand on the field cache to do better. */
+    if (syntheticFieldBinding != null) { // non interface case
+      this.getstatic(syntheticFieldBinding);
+      this.dup();
+      this.ifnonnull(endLabel);
+      this.pop();
+    }
 
+    /* Macro for building a class descriptor object... using or not a field cache to store it into...
+    this sequence is responsible for building the actual class descriptor.
+    
+    If the fieldCache is set, then it is supposed to be the body of a synthetic access method
+    factoring the actual descriptor creation out of the invocation site (saving space).
+    If the fieldCache is nil, then we are dumping the bytecode on the invocation site, since
+    we have no way to get a hand on the field cache to do better. */
 
-       // Wrap the code in an exception handler to convert a ClassNotFoundException into a NoClassDefError
+    // Wrap the code in an exception handler to convert a ClassNotFoundException into a NoClassDefError
 
-       anyExceptionHandler = new ExceptionLabel(this, TypeBinding.NullBinding /* represents ClassNotFoundException*/);
-       this.ldc(accessedType == TypeBinding.NullBinding ? "java.lang.Object" : String.valueOf(accessedType.constantPoolName()).replace('/', '.')); //$NON-NLS-1$
-       this.invokeClassForName();
+    anyExceptionHandler = new ExceptionLabel(this, TypeBinding.NullBinding /* represents ClassNotFoundException*/
+    );
+    this.ldc(accessedType == TypeBinding.NullBinding ? "java.lang.Object" : String.valueOf(accessedType.constantPoolName()).replace('/', '.')); //$NON-NLS-1$
+    this.invokeClassForName();
 
-       /* We need to protect the runtime code from binary inconsistencies
-       in case the accessedType is missing, the ClassNotFoundException has to be converted
-       into a NoClassDefError(old ex message), we thus need to build an exception handler for this one. */
-       anyExceptionHandler.placeEnd();
+    /* We need to protect the runtime code from binary inconsistencies
+    in case the accessedType is missing, the ClassNotFoundException has to be converted
+    into a NoClassDefError(old ex message), we thus need to build an exception handler for this one. */
+    anyExceptionHandler.placeEnd();
 
-       if (syntheticFieldBinding != null) { // non interface case
-               this.dup();
-               this.putstatic(syntheticFieldBinding);
-       }
-       this.goto_(endLabel);
+    if (syntheticFieldBinding != null) { // non interface case
+      this.dup();
+      this.putstatic(syntheticFieldBinding);
+    }
+    this.goto_(endLabel);
 
+    // Generate the body of the exception handler
+    saveStackSize = stackDepth;
+    stackDepth = 1;
+    /* ClassNotFoundException on stack -- the class literal could be doing more things
+    on the stack, which means that the stack may not be empty at this point in the
+    above code gen. So we save its state and restart it from 1. */
 
-       // Generate the body of the exception handler
-       saveStackSize = stackDepth;
-       stackDepth = 1;
-       /* ClassNotFoundException on stack -- the class literal could be doing more things
-       on the stack, which means that the stack may not be empty at this point in the
-       above code gen. So we save its state and restart it from 1. */
+    anyExceptionHandler.place();
 
-       anyExceptionHandler.place();
+    // Transform the current exception, and repush and throw a 
+    // NoClassDefFoundError(ClassNotFound.getMessage())
 
-       // Transform the current exception, and repush and throw a 
-       // NoClassDefFoundError(ClassNotFound.getMessage())
+    this.newNoClassDefFoundError();
+    this.dup_x1();
+    this.swap();
 
-       this.newNoClassDefFoundError();
-       this.dup_x1();
-       this.swap();
+    // Retrieve the message from the old exception
+    this.invokeThrowableGetMessage();
 
-       // Retrieve the message from the old exception
-       this.invokeThrowableGetMessage();
+    // Send the constructor taking a message string as an argument
+    this.invokeNoClassDefFoundErrorStringConstructor();
+    this.athrow();
+    endLabel.place();
+    stackDepth = saveStackSize;
+  }
+  /**
+   * This method returns the exception handler to be able to generate the exception handler
+   * attribute.
+   */
+  final public int[] generateCodeAttributeForProblemMethod(String errorName, String problemMessage) {
+    /**
+     * Equivalent code:
+     * try {
+     *         throw ((Error) (Class.forName(errorName).getConstructor(new Class[] {Class.forName("java.lang.String")})).newInstance(new Object[] {problemMessage}));
+     * } catch (Exception e) {
+     *         throw (NullPointerException) null;
+     * }
+     */
+    int endPC, handlerPC;
+    ldc(errorName);
+    invokeClassForName();
+    iconst_1();
+    anewarrayJavaLangClass();
+    dup();
+    iconst_0();
+    ldc("java.lang.String"); //$NON-NLS-1$
+    invokeClassForName();
+    aastore();
+    invokeConstructorGetConstructor();
+    iconst_1();
+    anewarrayJavaLangObject();
+    dup();
+    iconst_0();
+    ldc(problemMessage);
+    aastore();
+    invokeObjectNewInstance();
+    checkcastJavaLangError();
+    athrow();
+    endPC = handlerPC = position;
+    pop();
+    aconst_null();
+    athrow();
+    return_();
+    return new int[] { 0, endPC, handlerPC };
+  }
+  public void generateConstant(Constant constant, int implicitConversionCode) {
+    int targetTypeID = implicitConversionCode >> 4;
+    switch (targetTypeID) {
+      case T_boolean :
+        generateInlinedValue(constant.booleanValue());
+        break;
+      case T_char :
+        generateInlinedValue(constant.charValue());
+        break;
+      case T_byte :
+        generateInlinedValue(constant.byteValue());
+        break;
+      case T_short :
+        generateInlinedValue(constant.shortValue());
+        break;
+      case T_int :
+        generateInlinedValue(constant.intValue());
+        break;
+      case T_long :
+        generateInlinedValue(constant.longValue());
+        break;
+      case T_float :
+        generateInlinedValue(constant.floatValue());
+        break;
+      case T_double :
+        generateInlinedValue(constant.doubleValue());
+        break;
+      case T_String :
+        this.ldc(constant.stringValue());
+        break;
+      default : //reference object (constant can be from T_null or T_String)
+        if (constant.typeID() == T_String)
+          ldc(constant.stringValue());
+        else
+          aconst_null();
+    }
+  }
+  /**
+   * @param implicitConversionCode int
+   */
+  public void generateImplicitConversion(int implicitConversionCode) {
+    switch (implicitConversionCode) {
+      case Float2Char :
+        this.f2i();
+        this.i2c();
+        break;
+      case Double2Char :
+        this.d2i();
+        this.i2c();
+        break;
+      case Int2Char :
+      case Short2Char :
+      case Byte2Char :
+        this.i2c();
+        break;
+      case Long2Char :
+        this.l2i();
+        this.i2c();
+        break;
+      case Char2Float :
+      case Short2Float :
+      case Int2Float :
+      case Byte2Float :
+        this.i2f();
+        break;
+      case Double2Float :
+        this.d2f();
+        break;
+      case Long2Float :
+        this.l2f();
+        break;
+      case Float2Byte :
+        this.f2i();
+        this.i2b();
+        break;
+      case Double2Byte :
+        this.d2i();
+        this.i2b();
+        break;
+      case Int2Byte :
+      case Short2Byte :
+      case Char2Byte :
+        this.i2b();
+        break;
+      case Long2Byte :
+        this.l2i();
+        this.i2b();
+        break;
+      case Byte2Double :
+      case Char2Double :
+      case Short2Double :
+      case Int2Double :
+        this.i2d();
+        break;
+      case Float2Double :
+        this.f2d();
+        break;
+      case Long2Double :
+        this.l2d();
+        break;
+      case Byte2Short :
+      case Char2Short :
+      case Int2Short :
+        this.i2s();
+        break;
+      case Double2Short :
+        this.d2i();
+        this.i2s();
+        break;
+      case Long2Short :
+        this.l2i();
+        this.i2s();
+        break;
+      case Float2Short :
+        this.f2i();
+        this.i2s();
+        break;
+      case Double2Int :
+        this.d2i();
+        break;
+      case Float2Int :
+        this.f2i();
+        break;
+      case Long2Int :
+        this.l2i();
+        break;
+      case Int2Long :
+      case Char2Long :
+      case Byte2Long :
+      case Short2Long :
+        this.i2l();
+        break;
+      case Double2Long :
+        this.d2l();
+        break;
+      case Float2Long :
+        this.f2l();
+    }
+  }
+  public void generateInlinedValue(byte inlinedValue) {
+    switch (inlinedValue) {
+      case -1 :
+        this.iconst_m1();
+        break;
+      case 0 :
+        this.iconst_0();
+        break;
+      case 1 :
+        this.iconst_1();
+        break;
+      case 2 :
+        this.iconst_2();
+        break;
+      case 3 :
+        this.iconst_3();
+        break;
+      case 4 :
+        this.iconst_4();
+        break;
+      case 5 :
+        this.iconst_5();
+        break;
+      default :
+        if ((-128 <= inlinedValue) && (inlinedValue <= 127)) {
+          this.bipush((byte) inlinedValue);
+          return;
+        }
+    }
+  }
+  public void generateInlinedValue(char inlinedValue) {
+    switch (inlinedValue) {
+      case 0 :
+        this.iconst_0();
+        break;
+      case 1 :
+        this.iconst_1();
+        break;
+      case 2 :
+        this.iconst_2();
+        break;
+      case 3 :
+        this.iconst_3();
+        break;
+      case 4 :
+        this.iconst_4();
+        break;
+      case 5 :
+        this.iconst_5();
+        break;
+      default :
+        if ((6 <= inlinedValue) && (inlinedValue <= 127)) {
+          this.bipush((byte) inlinedValue);
+          return;
+        }
+        if ((128 <= inlinedValue) && (inlinedValue <= 32767)) {
+          this.sipush(inlinedValue);
+          return;
+        }
+        this.ldc(inlinedValue);
+    }
+  }
+  public void generateInlinedValue(double inlinedValue) {
+    if (inlinedValue == 0.0) {
+      if (Double.doubleToLongBits(inlinedValue) != 0L)
+        this.ldc2_w(inlinedValue);
+      else
+        this.dconst_0();
+      return;
+    }
+    if (inlinedValue == 1.0) {
+      this.dconst_1();
+      return;
+    }
+    this.ldc2_w(inlinedValue);
+  }
+  public void generateInlinedValue(float inlinedValue) {
+    if (inlinedValue == 0.0f) {
+      if (Float.floatToIntBits(inlinedValue) != 0)
+        this.ldc(inlinedValue);
+      else
+        this.fconst_0();
+      return;
+    }
+    if (inlinedValue == 1.0f) {
+      this.fconst_1();
+      return;
+    }
+    if (inlinedValue == 2.0f) {
+      this.fconst_2();
+      return;
+    }
+    this.ldc(inlinedValue);
+  }
+  public void generateInlinedValue(int inlinedValue) {
+    switch (inlinedValue) {
+      case -1 :
+        this.iconst_m1();
+        break;
+      case 0 :
+        this.iconst_0();
+        break;
+      case 1 :
+        this.iconst_1();
+        break;
+      case 2 :
+        this.iconst_2();
+        break;
+      case 3 :
+        this.iconst_3();
+        break;
+      case 4 :
+        this.iconst_4();
+        break;
+      case 5 :
+        this.iconst_5();
+        break;
+      default :
+        if ((-128 <= inlinedValue) && (inlinedValue <= 127)) {
+          this.bipush((byte) inlinedValue);
+          return;
+        }
+        if ((-32768 <= inlinedValue) && (inlinedValue <= 32767)) {
+          this.sipush(inlinedValue);
+          return;
+        }
+        this.ldc(inlinedValue);
+    }
+  }
+  public void generateInlinedValue(long inlinedValue) {
+    if (inlinedValue == 0) {
+      this.lconst_0();
+      return;
+    }
+    if (inlinedValue == 1) {
+      this.lconst_1();
+      return;
+    }
+    this.ldc2_w(inlinedValue);
+  }
+  public void generateInlinedValue(short inlinedValue) {
+    switch (inlinedValue) {
+      case -1 :
+        this.iconst_m1();
+        break;
+      case 0 :
+        this.iconst_0();
+        break;
+      case 1 :
+        this.iconst_1();
+        break;
+      case 2 :
+        this.iconst_2();
+        break;
+      case 3 :
+        this.iconst_3();
+        break;
+      case 4 :
+        this.iconst_4();
+        break;
+      case 5 :
+        this.iconst_5();
+        break;
+      default :
+        if ((-128 <= inlinedValue) && (inlinedValue <= 127)) {
+          this.bipush((byte) inlinedValue);
+          return;
+        }
+        this.sipush(inlinedValue);
+    }
+  }
+  public void generateInlinedValue(boolean inlinedValue) {
+    if (inlinedValue)
+      this.iconst_1();
+    else
+      this.iconst_0();
+  }
+  public void generateOuterAccess(Object[] mappingSequence, AstNode invocationSite, Scope scope) {
+    if (mappingSequence == null)
+      return;
+    if (mappingSequence == BlockScope.EmulationPathToImplicitThis) {
+      if (scope.methodScope().isConstructorCall) {
+        scope.problemReporter().errorThisSuperInStatic(invocationSite);
+      }
+      this.aload_0();
+      return;
+    }
+    if (mappingSequence[0] instanceof FieldBinding) {
+      FieldBinding fieldBinding = (FieldBinding) mappingSequence[0];
+      if (scope.methodScope().isConstructorCall) {
+        scope.problemReporter().errorThisSuperInStatic(invocationSite);
+      }
+      this.aload_0();
+      this.getfield(fieldBinding);
+    } else {
+      load((LocalVariableBinding) mappingSequence[0]);
+    }
+    for (int i = 1, length = mappingSequence.length; i < length; i++) {
+      if (mappingSequence[i] instanceof FieldBinding) {
+        FieldBinding fieldBinding = (FieldBinding) mappingSequence[i];
+        this.getfield(fieldBinding);
+      } else {
+        this.invokestatic((MethodBinding) mappingSequence[i]);
+      }
+    }
+  }
+  /**
+   * The equivalent code performs a string conversion:
+   *
+   * @param oper1 org.eclipse.jdt.internal.compiler.lookup.BlockScope
+   * @param oper1 org.eclipse.jdt.internal.compiler.ast.Expression
+   * @param oper2 org.eclipse.jdt.internal.compiler.ast.Expression
+   */
+  public void generateStringAppend(BlockScope blockScope, Expression oper1, Expression oper2) {
+    int pc;
+    if (oper1 == null) {
+      /* Operand is already on the stack, and maybe nil:
+      note type1 is always to  java.lang.String here.*/
+      this.newStringBuffer();
+      this.dup_x1();
+      this.swap();
+      // If argument is reference type, need to transform it 
+      // into a string (handles null case)
+      this.invokeStringValueOf(T_Object);
+      this.invokeStringBufferStringConstructor();
+    } else {
+      pc = position;
+      oper1.generateOptimizedStringBufferCreation(blockScope, this, oper1.implicitConversion & 0xF);
+      this.recordPositionsFrom(pc, oper1.sourceStart);
+    }
+    pc = position;
+    oper2.generateOptimizedStringBuffer(blockScope, this, oper2.implicitConversion & 0xF);
+    this.recordPositionsFrom(pc, oper2.sourceStart);
+    this.invokeStringBufferToString();
+  }
+  /**
+   * Code responsible to generate the suitable code to supply values for the synthetic arguments of
+   * a constructor invocation of a nested type.
+   */
+  public void generateSyntheticArgumentValues(
+    BlockScope currentScope,
+    ReferenceBinding targetType,
+    Expression enclosingInstance,
+    AstNode invocationSite) {
 
-       // Send the constructor taking a message string as an argument
-       this.invokeNoClassDefFoundErrorStringConstructor();
-       this.athrow();
-       endLabel.place();
-       stackDepth = saveStackSize;
-}
-/**
- * This method returns the exception handler to be able to generate the exception handler
- * attribute.
- */
-final public int[] generateCodeAttributeForProblemMethod(String errorName, String problemMessage) {
-       /**
-        * Equivalent code:
-        *      try {
-        *              throw ((Error) (Class.forName(errorName).getConstructor(new Class[] {Class.forName("java.lang.String")})).newInstance(new Object[] {problemMessage}));
-        *      } catch (Exception e) {
-        *              throw (NullPointerException) null;
-        *      }
-        */
-       int endPC, handlerPC;
-       ldc(errorName);
-       invokeClassForName();
-       iconst_1();
-       anewarrayJavaLangClass();
-       dup();
-       iconst_0();
-       ldc("java.lang.String"); //$NON-NLS-1$
-       invokeClassForName();
-       aastore();
-       invokeConstructorGetConstructor();
-       iconst_1();
-       anewarrayJavaLangObject();
-       dup();
-       iconst_0();
-       ldc(problemMessage);
-       aastore();
-       invokeObjectNewInstance();
-       checkcastJavaLangError();
-       athrow();
-       endPC = handlerPC = position;
-       pop();
-       aconst_null();
-       athrow();
-       return_();
-       return new int[] {0, endPC, handlerPC};
-}
-public void generateConstant(Constant constant, int implicitConversionCode) {
-       int targetTypeID = implicitConversionCode >> 4;
-       switch (targetTypeID) {
-               case T_boolean :
-                       generateInlinedValue(constant.booleanValue());
-                       break;
-               case T_char :
-                       generateInlinedValue(constant.charValue());
-                       break;
-               case T_byte :
-                       generateInlinedValue(constant.byteValue());
-                       break;
-               case T_short :
-                       generateInlinedValue(constant.shortValue());
-                       break;
-               case T_int :
-                       generateInlinedValue(constant.intValue());
-                       break;
-               case T_long :
-                       generateInlinedValue(constant.longValue());
-                       break;
-               case T_float :
-                       generateInlinedValue(constant.floatValue());
-                       break;
-               case T_double :
-                       generateInlinedValue(constant.doubleValue());
-                       break;
-               case T_String :
-                       this.ldc(constant.stringValue());
-                       break;
-               default : //reference object (constant can be from T_null or T_String)
-                       if (constant.typeID() == T_String)
-                               ldc(constant.stringValue());
-                       else
-                               aconst_null();
-       }
-}
-/**
- * @param implicitConversionCode int
- */
-public void generateImplicitConversion(int implicitConversionCode) {
-       switch (implicitConversionCode) {
-               case Float2Char :
-                       this.f2i();
-                       this.i2c();
-                       break;
-               case Double2Char :
-                       this.d2i();
-                       this.i2c();
-                       break;
-               case Int2Char :
-               case Short2Char :
-               case Byte2Char :
-                       this.i2c();
-                       break;
-               case Long2Char :
-                       this.l2i();
-                       this.i2c();
-                       break;
-               case Char2Float :
-               case Short2Float :
-               case Int2Float :
-               case Byte2Float :
-                       this.i2f();
-                       break;
-               case Double2Float :
-                       this.d2f();
-                       break;
-               case Long2Float :
-                       this.l2f();
-                       break;
-               case Float2Byte :
-                       this.f2i();
-                       this.i2b();
-                       break;
-               case Double2Byte :
-                       this.d2i();
-                       this.i2b();
-                       break;
-               case Int2Byte :
-               case Short2Byte :
-               case Char2Byte :
-                       this.i2b();
-                       break;
-               case Long2Byte :
-                       this.l2i();
-                       this.i2b();
-                       break;
-               case Byte2Double :
-               case Char2Double :
-               case Short2Double :
-               case Int2Double :
-                       this.i2d();
-                       break;
-               case Float2Double :
-                       this.f2d();
-                       break;
-               case Long2Double :
-                       this.l2d();
-                       break;
-               case Byte2Short :
-               case Char2Short :
-               case Int2Short :
-                       this.i2s();
-                       break;
-               case Double2Short :
-                       this.d2i();
-                       this.i2s();
-                       break;
-               case Long2Short :
-                       this.l2i();
-                       this.i2s();
-                       break;
-               case Float2Short :
-                       this.f2i();
-                       this.i2s();
-                       break;
-               case Double2Int :
-                       this.d2i();
-                       break;
-               case Float2Int :
-                       this.f2i();
-                       break;
-               case Long2Int :
-                       this.l2i();
-                       break;
-               case Int2Long :
-               case Char2Long :
-               case Byte2Long :
-               case Short2Long :
-                       this.i2l();
-                       break;
-               case Double2Long :
-                       this.d2l();
-                       break;
-               case Float2Long :
-                       this.f2l();
-       }
-}
-public void generateInlinedValue(byte inlinedValue) {
-       switch (inlinedValue) {
-               case -1 :
-                       this.iconst_m1();
-                       break;
-               case 0 :
-                       this.iconst_0();
-                       break;
-               case 1 :
-                       this.iconst_1();
-                       break;
-               case 2 :
-                       this.iconst_2();
-                       break;
-               case 3 :
-                       this.iconst_3();
-                       break;
-               case 4 :
-                       this.iconst_4();
-                       break;
-               case 5 :
-                       this.iconst_5();
-                       break;
-               default :
-                       if ((-128 <= inlinedValue) && (inlinedValue <= 127)) {
-                               this.bipush((byte) inlinedValue);
-                               return;
-                       }
-       }
-}
-public void generateInlinedValue(char inlinedValue) {
-       switch (inlinedValue) {
-               case 0 :
-                       this.iconst_0();
-                       break;
-               case 1 :
-                       this.iconst_1();
-                       break;
-               case 2 :
-                       this.iconst_2();
-                       break;
-               case 3 :
-                       this.iconst_3();
-                       break;
-               case 4 :
-                       this.iconst_4();
-                       break;
-               case 5 :
-                       this.iconst_5();
-                       break;
-               default :
-                       if ((6 <= inlinedValue) && (inlinedValue <= 127)) {
-                               this.bipush((byte) inlinedValue);
-                               return;
-                       }
-                       if ((128 <= inlinedValue) && (inlinedValue <= 32767)) {
-                               this.sipush(inlinedValue);
-                               return;
-                       }
-                       this.ldc(inlinedValue);
-       }
-}
-public void generateInlinedValue(double inlinedValue) {
-       if (inlinedValue == 0.0) {
-               if (Double.doubleToLongBits(inlinedValue) != 0L)
-                       this.ldc2_w(inlinedValue);
-               else
-                       this.dconst_0();
-               return;
-       }
-       if (inlinedValue == 1.0) {
-               this.dconst_1();
-               return;
-       }
-       this.ldc2_w(inlinedValue);
-}
-public void generateInlinedValue(float inlinedValue) {
-       if (inlinedValue == 0.0f) {
-               if (Float.floatToIntBits(inlinedValue) != 0)
-                       this.ldc(inlinedValue);
-               else
-                       this.fconst_0();
-               return;
-       }
-       if (inlinedValue == 1.0f) {
-               this.fconst_1();
-               return;
-       }
-       if (inlinedValue == 2.0f) {
-               this.fconst_2();
-               return;
-       }
-       this.ldc(inlinedValue);
-}
-public void generateInlinedValue(int inlinedValue) {
-       switch (inlinedValue) {
-               case -1 :
-                       this.iconst_m1();
-                       break;
-               case 0 :
-                       this.iconst_0();
-                       break;
-               case 1 :
-                       this.iconst_1();
-                       break;
-               case 2 :
-                       this.iconst_2();
-                       break;
-               case 3 :
-                       this.iconst_3();
-                       break;
-               case 4 :
-                       this.iconst_4();
-                       break;
-               case 5 :
-                       this.iconst_5();
-                       break;
-               default :
-                       if ((-128 <= inlinedValue) && (inlinedValue <= 127)) {
-                               this.bipush((byte) inlinedValue);
-                               return;
-                       }
-                       if ((-32768 <= inlinedValue) && (inlinedValue <= 32767)) {
-                               this.sipush(inlinedValue);
-                               return;
-                       }
-                       this.ldc(inlinedValue);
-       }
-}
-public void generateInlinedValue(long inlinedValue) {
-       if (inlinedValue == 0) {
-               this.lconst_0();
-               return;
-       }
-       if (inlinedValue == 1) {
-               this.lconst_1();
-               return;
-       }
-       this.ldc2_w(inlinedValue);
-}
-public void generateInlinedValue(short inlinedValue) {
-       switch (inlinedValue) {
-               case -1 :
-                       this.iconst_m1();
-                       break;
-               case 0 :
-                       this.iconst_0();
-                       break;
-               case 1 :
-                       this.iconst_1();
-                       break;
-               case 2 :
-                       this.iconst_2();
-                       break;
-               case 3 :
-                       this.iconst_3();
-                       break;
-               case 4 :
-                       this.iconst_4();
-                       break;
-               case 5 :
-                       this.iconst_5();
-                       break;
-               default :
-                       if ((-128 <= inlinedValue) && (inlinedValue <= 127)) {
-                               this.bipush((byte) inlinedValue);
-                               return;
-                       }
-                       this.sipush(inlinedValue);
-       }
-}
-public void generateInlinedValue(boolean inlinedValue) {
-       if (inlinedValue)
-               this.iconst_1();
-       else
-               this.iconst_0();
-}
-public void generateOuterAccess(Object[] mappingSequence, AstNode invocationSite, Scope scope) {
-       if (mappingSequence == null)
-               return;
-       if (mappingSequence == BlockScope.EmulationPathToImplicitThis) {
-               if (scope.methodScope().isConstructorCall){
-                       scope.problemReporter().errorThisSuperInStatic(invocationSite);
-               }
-               this.aload_0();
-               return;
-       }
-       if (mappingSequence[0] instanceof FieldBinding) {
-               FieldBinding fieldBinding = (FieldBinding) mappingSequence[0];
-               if (scope.methodScope().isConstructorCall){
-                       scope.problemReporter().errorThisSuperInStatic(invocationSite);
-               }
-               this.aload_0();
-               this.getfield(fieldBinding);
-       } else {
-               load((LocalVariableBinding) mappingSequence[0]);
-       }
-       for (int i = 1, length = mappingSequence.length; i < length; i++) {
-               if (mappingSequence[i] instanceof FieldBinding) {
-                       FieldBinding fieldBinding = (FieldBinding) mappingSequence[i];
-                       this.getfield(fieldBinding);
-               } else {
-                       this.invokestatic((MethodBinding) mappingSequence[i]);
-               }
-       }
-}
-/**
- * The equivalent code performs a string conversion:
- *
- * @param oper1 org.eclipse.jdt.internal.compiler.lookup.BlockScope
- * @param oper1 org.eclipse.jdt.internal.compiler.ast.Expression
- * @param oper2 org.eclipse.jdt.internal.compiler.ast.Expression
- */
-public void generateStringAppend(BlockScope blockScope, Expression oper1, Expression oper2) {
-       int pc;
-       if (oper1 == null) {
-               /* Operand is already on the stack, and maybe nil:
-               note type1 is always to  java.lang.String here.*/
-               this.newStringBuffer();
-               this.dup_x1();
-               this.swap();
-               // If argument is reference type, need to transform it 
-               // into a string (handles null case)
-               this.invokeStringValueOf(T_Object);
-               this.invokeStringBufferStringConstructor();
-       } else {
-               pc = position;
-               oper1.generateOptimizedStringBufferCreation(blockScope, this, oper1.implicitConversion & 0xF);
-               this.recordPositionsFrom(pc, oper1.sourceStart);
-       }
-       pc = position;
-       oper2.generateOptimizedStringBuffer(blockScope, this, oper2.implicitConversion & 0xF);
-       this.recordPositionsFrom(pc, oper2.sourceStart);
-       this.invokeStringBufferToString();
-}
-/**
- * Code responsible to generate the suitable code to supply values for the synthetic arguments of
- * a constructor invocation of a nested type.
- */
-public void generateSyntheticArgumentValues(BlockScope currentScope, ReferenceBinding targetType, Expression enclosingInstance, AstNode invocationSite) {
+    // perform some emulation work in case there is some and we are inside a local type only
+    ReferenceBinding[] syntheticArgumentTypes;
 
-       // perform some emulation work in case there is some and we are inside a local type only
-       ReferenceBinding[] syntheticArgumentTypes;
+    // generate the enclosing instance first
+    if ((syntheticArgumentTypes = targetType.syntheticEnclosingInstanceTypes()) != null) {
 
-       // generate the enclosing instance first
-       if ((syntheticArgumentTypes = targetType.syntheticEnclosingInstanceTypes()) != null) {
+        ReferenceBinding targetEnclosingType =
+          targetType.isAnonymousType()
+            ? targetType.superclass().enclosingType() // supplying enclosing instance for the anonymous type's superclass
+  : targetType.enclosingType();
 
-               ReferenceBinding targetEnclosingType = targetType.isAnonymousType() ? 
-                               targetType.superclass().enclosingType() // supplying enclosing instance for the anonymous type's superclass
-                               : targetType.enclosingType();
-                               
-               for (int i = 0, max = syntheticArgumentTypes.length; i < max; i++) {
-                       ReferenceBinding syntheticArgType = syntheticArgumentTypes[i];
-                       if (enclosingInstance != null && i == 0) {
-                               if (syntheticArgType != targetEnclosingType) {
-                                       currentScope.problemReporter().unnecessaryEnclosingInstanceSpecification(enclosingInstance, targetType);
-                               }
-                               //if (currentScope.environment().options.complianceLevel >= CompilerOptions.JDK1_4){
-                               enclosingInstance.generateCode(currentScope, this, true);
-                               if (syntheticArgType == targetEnclosingType){
-                                       this.dup();
-                               } 
-                               this.invokeObjectGetClass(); // causes null check for all explicit enclosing instances
-                               this.pop();
-                               //} else {
-                               //      enclosingInstance.generateCode(currentScope, this, syntheticArgType == targetEnclosingType);
-                               //}                     
-                       } else {
-                               Object[] emulationPath = currentScope.getCompatibleEmulationPath(syntheticArgType);
-                               if (emulationPath == null) {
-                                       currentScope.problemReporter().missingEnclosingInstanceSpecification(syntheticArgType, invocationSite);
-                               } else {
-                                       this.generateOuterAccess(emulationPath, invocationSite, currentScope);
-                               }
-                       }
-               }
-       } else { // we may still have an enclosing instance to consider
-               if (enclosingInstance != null) {
-                       currentScope.problemReporter().unnecessaryEnclosingInstanceSpecification(enclosingInstance, targetType);
-                       //if (currentScope.environment().options.complianceLevel >= CompilerOptions.JDK1_4){
-                       enclosingInstance.generateCode(currentScope, this, true);
-                       this.invokeObjectGetClass(); // causes null check for all explicit enclosing instances
-                       this.pop();
-                       //} else {
-                       //      enclosingInstance.generateCode(currentScope, this, false); // do not want the value
-                       //}                     
-               }
-       }
-       // generate the synthetic outer arguments then
-       SyntheticArgumentBinding syntheticArguments[];
-       if ((syntheticArguments = targetType.syntheticOuterLocalVariables()) != null) {
-               for (int i = 0, max = syntheticArguments.length; i < max; i++) {
-                       VariableBinding[] emulationPath = currentScope.getEmulationPath(syntheticArguments[i].actualOuterLocalVariable);
-                       if (emulationPath == null) {
-                               // could not emulate a path to a given outer local variable (internal error)
-                               currentScope.problemReporter().needImplementation();
-                       } else {
-                               this.generateOuterAccess(emulationPath, invocationSite, currentScope);
-                       }
-               }
-       }
-}
-/**
- * @param parameters org.eclipse.jdt.internal.compiler.lookup.TypeBinding[]
- * @param constructorBinding org.eclipse.jdt.internal.compiler.lookup.MethodBinding
- */
-public void generateSyntheticBodyForConstructorAccess(SyntheticAccessMethodBinding accessBinding) {
+      for (int i = 0, max = syntheticArgumentTypes.length; i < max; i++) {
+        ReferenceBinding syntheticArgType = syntheticArgumentTypes[i];
+        if (enclosingInstance != null && i == 0) {
+          if (syntheticArgType != targetEnclosingType) {
+            currentScope.problemReporter().unnecessaryEnclosingInstanceSpecification(enclosingInstance, targetType);
+          }
+          //if (currentScope.environment().options.complianceLevel >= CompilerOptions.JDK1_4){
+          enclosingInstance.generateCode(currentScope, this, true);
+          if (syntheticArgType == targetEnclosingType) {
+            this.dup();
+          }
+          this.invokeObjectGetClass(); // causes null check for all explicit enclosing instances
+          this.pop();
+          //} else {
+          //   enclosingInstance.generateCode(currentScope, this, syntheticArgType == targetEnclosingType);
+          //}                  
+        } else {
+          Object[] emulationPath = currentScope.getCompatibleEmulationPath(syntheticArgType);
+          if (emulationPath == null) {
+            currentScope.problemReporter().missingEnclosingInstanceSpecification(syntheticArgType, invocationSite);
+          } else {
+            this.generateOuterAccess(emulationPath, invocationSite, currentScope);
+          }
+        }
+      }
+    } else { // we may still have an enclosing instance to consider
+      if (enclosingInstance != null) {
+        currentScope.problemReporter().unnecessaryEnclosingInstanceSpecification(enclosingInstance, targetType);
+        //if (currentScope.environment().options.complianceLevel >= CompilerOptions.JDK1_4){
+        enclosingInstance.generateCode(currentScope, this, true);
+        this.invokeObjectGetClass(); // causes null check for all explicit enclosing instances
+        this.pop();
+        //} else {
+        //     enclosingInstance.generateCode(currentScope, this, false); // do not want the value
+        //}                    
+      }
+    }
+    // generate the synthetic outer arguments then
+    SyntheticArgumentBinding syntheticArguments[];
+    if ((syntheticArguments = targetType.syntheticOuterLocalVariables()) != null) {
+      for (int i = 0, max = syntheticArguments.length; i < max; i++) {
+        VariableBinding[] emulationPath = currentScope.getEmulationPath(syntheticArguments[i].actualOuterLocalVariable);
+        if (emulationPath == null) {
+          // could not emulate a path to a given outer local variable (internal error)
+          currentScope.problemReporter().needImplementation();
+        } else {
+          this.generateOuterAccess(emulationPath, invocationSite, currentScope);
+        }
+      }
+    }
+  }
+  /**
+   * @param parameters org.eclipse.jdt.internal.compiler.lookup.TypeBinding[]
+   * @param constructorBinding org.eclipse.jdt.internal.compiler.lookup.MethodBinding
+   */
+  public void generateSyntheticBodyForConstructorAccess(SyntheticAccessMethodBinding accessBinding) {
 
-       initializeMaxLocals(accessBinding);
+    initializeMaxLocals(accessBinding);
 
-       MethodBinding constructorBinding = accessBinding.targetMethod;
-       TypeBinding[] parameters = constructorBinding.parameters;
-       int length = parameters.length;
-       int resolvedPosition = 1;
-       this.aload_0();
-       if (constructorBinding.declaringClass.isNestedType()) {
-               NestedTypeBinding nestedType = (NestedTypeBinding) constructorBinding.declaringClass;
-               SyntheticArgumentBinding[] syntheticArguments = nestedType.syntheticEnclosingInstances();
-               for (int i = 0; i < (syntheticArguments == null ? 0 : syntheticArguments.length); i++) {
-                       TypeBinding type;
-                       load((type = syntheticArguments[i].type), resolvedPosition);
-                       if ((type == DoubleBinding) || (type == LongBinding))
-                               resolvedPosition += 2;
-                       else
-                               resolvedPosition++;
-               }
-               syntheticArguments = nestedType.syntheticOuterLocalVariables();
-               for (int i = 0; i < (syntheticArguments == null ? 0 : syntheticArguments.length); i++) {
-                       TypeBinding type;
-                       load((type = syntheticArguments[i].type), resolvedPosition);
-                       if ((type == DoubleBinding) || (type == LongBinding))
-                               resolvedPosition += 2;
-                       else
-                               resolvedPosition++;
-               }
-       }
-       for (int i = 0; i < length; i++) {
-               load(parameters[i], resolvedPosition);
-               if ((parameters[i] == DoubleBinding) || (parameters[i] == LongBinding))
-                       resolvedPosition += 2;
-               else
-                       resolvedPosition++;
-       }
-       this.invokespecial(constructorBinding);
-       this.return_();
-}
-public void generateSyntheticBodyForFieldReadAccess(SyntheticAccessMethodBinding accessBinding) {
-       initializeMaxLocals(accessBinding);
-       FieldBinding fieldBinding = accessBinding.targetReadField;
-       TypeBinding type;
-       if (fieldBinding.isStatic())
-               this.getstatic(fieldBinding);
-       else {
-               this.aload_0();
-               this.getfield(fieldBinding);
-       }
-       if ((type = fieldBinding.type).isBaseType()) {
-               if (type == IntBinding)
-                       this.ireturn();
-               else
-                       if (type == FloatBinding)
-                               this.freturn();
-                       else
-                               if (type == LongBinding)
-                                       this.lreturn();
-                               else
-                                       if (type == DoubleBinding)
-                                               this.dreturn();
-                                       else
-                                               this.ireturn();
-       } else
-               this.areturn();
-}
-public void generateSyntheticBodyForFieldWriteAccess(SyntheticAccessMethodBinding accessBinding) {
-       initializeMaxLocals(accessBinding);
-       FieldBinding fieldBinding = accessBinding.targetWriteField;
-       if (fieldBinding.isStatic()) {
-               load(fieldBinding.type, 0);
-               this.putstatic(fieldBinding);
-       } else {
-               this.aload_0();
-               load(fieldBinding.type, 1);
-               this.putfield(fieldBinding);
-       }
-       this.return_();
-}
-public void generateSyntheticBodyForMethodAccess(SyntheticAccessMethodBinding accessBinding) {
+    MethodBinding constructorBinding = accessBinding.targetMethod;
+    TypeBinding[] parameters = constructorBinding.parameters;
+    int length = parameters.length;
+    int resolvedPosition = 1;
+    this.aload_0();
+    if (constructorBinding.declaringClass.isNestedType()) {
+      NestedTypeBinding nestedType = (NestedTypeBinding) constructorBinding.declaringClass;
+      SyntheticArgumentBinding[] syntheticArguments = nestedType.syntheticEnclosingInstances();
+      for (int i = 0; i < (syntheticArguments == null ? 0 : syntheticArguments.length); i++) {
+        TypeBinding type;
+        load((type = syntheticArguments[i].type), resolvedPosition);
+        if ((type == DoubleBinding) || (type == LongBinding))
+          resolvedPosition += 2;
+        else
+          resolvedPosition++;
+      }
+      syntheticArguments = nestedType.syntheticOuterLocalVariables();
+      for (int i = 0; i < (syntheticArguments == null ? 0 : syntheticArguments.length); i++) {
+        TypeBinding type;
+        load((type = syntheticArguments[i].type), resolvedPosition);
+        if ((type == DoubleBinding) || (type == LongBinding))
+          resolvedPosition += 2;
+        else
+          resolvedPosition++;
+      }
+    }
+    for (int i = 0; i < length; i++) {
+      load(parameters[i], resolvedPosition);
+      if ((parameters[i] == DoubleBinding) || (parameters[i] == LongBinding))
+        resolvedPosition += 2;
+      else
+        resolvedPosition++;
+    }
+    this.invokespecial(constructorBinding);
+    this.return_();
+  }
+  public void generateSyntheticBodyForFieldReadAccess(SyntheticAccessMethodBinding accessBinding) {
+    initializeMaxLocals(accessBinding);
+    FieldBinding fieldBinding = accessBinding.targetReadField;
+    TypeBinding type;
+    if (fieldBinding.isStatic())
+      this.getstatic(fieldBinding);
+    else {
+      this.aload_0();
+      this.getfield(fieldBinding);
+    }
+    if ((type = fieldBinding.type).isBaseType()) {
+      if (type == IntBinding)
+        this.ireturn();
+      else if (type == FloatBinding)
+        this.freturn();
+      else if (type == LongBinding)
+        this.lreturn();
+      else if (type == DoubleBinding)
+        this.dreturn();
+      else
+        this.ireturn();
+    } else
+      this.areturn();
+  }
+  public void generateSyntheticBodyForFieldWriteAccess(SyntheticAccessMethodBinding accessBinding) {
+    initializeMaxLocals(accessBinding);
+    FieldBinding fieldBinding = accessBinding.targetWriteField;
+    if (fieldBinding.isStatic()) {
+      load(fieldBinding.type, 0);
+      this.putstatic(fieldBinding);
+    } else {
+      this.aload_0();
+      load(fieldBinding.type, 1);
+      this.putfield(fieldBinding);
+    }
+    this.return_();
+  }
+  public void generateSyntheticBodyForMethodAccess(SyntheticAccessMethodBinding accessBinding) {
 
-       initializeMaxLocals(accessBinding);
-       MethodBinding methodBinding = accessBinding.targetMethod;
-       TypeBinding[] parameters = methodBinding.parameters;
-       int length = parameters.length;
-       int resolvedPosition;
-       if (methodBinding.isStatic())
-               resolvedPosition = 0;
-       else {
-               this.aload_0();
-               resolvedPosition = 1;
-       }
-       for (int i = 0; i < length; i++) {
-               load(parameters[i], resolvedPosition);
-               if ((parameters[i] == DoubleBinding) || (parameters[i] == LongBinding))
-                       resolvedPosition += 2;
-               else
-                       resolvedPosition++;
-       }
-       TypeBinding type;
-       if (methodBinding.isStatic())
-               this.invokestatic(methodBinding);
-       else {
-               if (methodBinding.isConstructor()
-                       || methodBinding.isPrivate()
-                       // qualified super "X.super.foo()" targets methods from superclass
-                       || (methodBinding.declaringClass != methodDeclaration.binding.declaringClass)){
-                       this.invokespecial(methodBinding);
-               } else {
-                       if (methodBinding.declaringClass.isInterface()){
-                               this.invokeinterface(methodBinding);
-                       } else {
-                               this.invokevirtual(methodBinding);
-                       }
-               }
-       }
-       if ((type = methodBinding.returnType).isBaseType())
-               if (type == VoidBinding)
-                       this.return_();
-               else
-                       if (type == IntBinding)
-                               this.ireturn();
-                       else
-                               if (type == FloatBinding)
-                                       this.freturn();
-                               else
-                                       if (type == LongBinding)
-                                               this.lreturn();
-                                       else
-                                               if (type == DoubleBinding)
-                                                       this.dreturn();
-                                               else
-                                                       this.ireturn();
-       else
-               this.areturn();
-}
-final public byte[] getContents() {
-       byte[] contents;
-       System.arraycopy(bCodeStream, 0, contents = new byte[position], 0, position);
-       return contents;
-}
-final public void getfield(FieldBinding fieldBinding) {
-       countLabels = 0;
-       if ((fieldBinding.type.id == T_double) || (fieldBinding.type.id == T_long)) {
-               if (++stackDepth > stackMax)
-                       stackMax = stackDepth;
-       }
-       try {
-               position++;
-               bCodeStream[classFileOffset++] = OPC_getfield;
-       } catch (IndexOutOfBoundsException e) {
-               resizeByteArray(OPC_getfield);
-       }
-       writeUnsignedShort(constantPool.literalIndex(fieldBinding));
-}
-final public void getstatic(FieldBinding fieldBinding) {
-       countLabels = 0;
-       if ((fieldBinding.type.id == T_double) || (fieldBinding.type.id == T_long))
-               stackDepth += 2;
-       else
-               stackDepth += 1;
-       if (stackDepth > stackMax)
-               stackMax = stackDepth;
-       try {
-               position++;
-               bCodeStream[classFileOffset++] = OPC_getstatic;
-       } catch (IndexOutOfBoundsException e) {
-               resizeByteArray(OPC_getstatic);
-       }
-       writeUnsignedShort(constantPool.literalIndex(fieldBinding));
-}
-public void getSystemOut() {
-       countLabels = 0;
-       if (++stackDepth > stackMax)
-               stackMax = stackDepth;
-       try {
-               position++;
-               bCodeStream[classFileOffset++] = OPC_getstatic;
-       } catch (IndexOutOfBoundsException e) {
-               resizeByteArray(OPC_getstatic);
-       }
-       writeUnsignedShort(constantPool.literalIndexForJavaLangSystemOut());
-}
-public void getTYPE(int baseTypeID) {
-       countLabels = 0;
-       if (++stackDepth > stackMax)
-               stackMax = stackDepth;
-       try {
-               position++;
-               bCodeStream[classFileOffset++] = OPC_getstatic;
-       } catch (IndexOutOfBoundsException e) {
-               resizeByteArray(OPC_getstatic);
-       }
-       switch (baseTypeID) {
-               // getstatic: java.lang.Byte.TYPE                       
-               case T_byte :
-                       writeUnsignedShort(constantPool.literalIndexForJavaLangByteTYPE());
-                       break;
-                       // getstatic: java.lang.Short.TYPE                      
-               case T_short :
-                       writeUnsignedShort(constantPool.literalIndexForJavaLangShortTYPE());
-                       break;
-                       // getstatic: java.lang.Character.TYPE                  
-               case T_char :
-                       writeUnsignedShort(constantPool.literalIndexForJavaLangCharacterTYPE());
-                       break;
-                       // getstatic: java.lang.Integer.TYPE                    
-               case T_int :
-                       writeUnsignedShort(constantPool.literalIndexForJavaLangIntegerTYPE());
-                       break;
-                       // getstatic: java.lang.Long.TYPE                       
-               case T_long :
-                       writeUnsignedShort(constantPool.literalIndexForJavaLangLongTYPE());
-                       break;
-                       // getstatic: java.lang.Float.TYPE                      
-               case T_float :
-                       writeUnsignedShort(constantPool.literalIndexForJavaLangFloatTYPE());
-                       break;
-                       // getstatic: java.lang.Double.TYPE                     
-               case T_double :
-                       writeUnsignedShort(constantPool.literalIndexForJavaLangDoubleTYPE());
-                       break;
-                       // getstatic: java.lang.Boolean.TYPE                    
-               case T_boolean :
-                       writeUnsignedShort(constantPool.literalIndexForJavaLangBooleanTYPE());
-                       break;
-                       // getstatic: java.lang.Void.TYPE
-               case T_void :
-                       writeUnsignedShort(constantPool.literalIndexForJavaLangVoidTYPE());
-                       break;
-       }
-}
-/**
- * We didn't call it goto, because there is a conflit with the goto keyword
- */
-final public void goto_(Label lbl) {
-       if (this.wideMode) {
-               this.goto_w(lbl);
-               return;
-       }
-       try {
-               lbl.inlineForwardReferencesFromLabelsTargeting(position);
-               /*
-                Possible optimization for code such as:
-                public Object foo() {
-                       boolean b = true;
-                       if (b) {
-                               if (b)
-                                       return null;
-                       } else {
-                               if (b) {
-                                       return null;
-                               }
-                       }
-                       return null;
-               }
-               The goto around the else block for the first if will
-               be unreachable, because the thenClause of the second if
-               returns.
-               See inlineForwardReferencesFromLabelsTargeting defined
-               on the Label class for the remaining part of this
-               optimization.
-                if (!lbl.isBranchTarget(position)) {
-                       switch(bCodeStream[classFileOffset-1]) {
-                               case OPC_return :
-                               case OPC_areturn:
-                                       return;
-                       }
-               }*/
-               position++;
-               bCodeStream[classFileOffset++] = OPC_goto;
-       } catch (IndexOutOfBoundsException e) {
-               resizeByteArray(OPC_goto);
-       }
-       lbl.branch();
-}
+    initializeMaxLocals(accessBinding);
+    MethodBinding methodBinding = accessBinding.targetMethod;
+    TypeBinding[] parameters = methodBinding.parameters;
+    int length = parameters.length;
+    int resolvedPosition;
+    if (methodBinding.isStatic())
+      resolvedPosition = 0;
+    else {
+      this.aload_0();
+      resolvedPosition = 1;
+    }
+    for (int i = 0; i < length; i++) {
+      load(parameters[i], resolvedPosition);
+      if ((parameters[i] == DoubleBinding) || (parameters[i] == LongBinding))
+        resolvedPosition += 2;
+      else
+        resolvedPosition++;
+    }
+    TypeBinding type;
+    if (methodBinding.isStatic())
+      this.invokestatic(methodBinding);
+    else {
+      if (methodBinding.isConstructor()
+        || methodBinding.isPrivate() // qualified super "X.super.foo()" targets methods from superclass
+        || (methodBinding.declaringClass != methodDeclaration.binding.declaringClass)) {
+        this.invokespecial(methodBinding);
+      } else {
+        if (methodBinding.declaringClass.isInterface()) {
+          this.invokeinterface(methodBinding);
+        } else {
+          this.invokevirtual(methodBinding);
+        }
+      }
+    }
+    if ((type = methodBinding.returnType).isBaseType())
+      if (type == VoidBinding)
+        this.return_();
+      else if (type == IntBinding)
+        this.ireturn();
+      else if (type == FloatBinding)
+        this.freturn();
+      else if (type == LongBinding)
+        this.lreturn();
+      else if (type == DoubleBinding)
+        this.dreturn();
+      else
+        this.ireturn();
+    else
+      this.areturn();
+  }
+  final public byte[] getContents() {
+    byte[] contents;
+    System.arraycopy(bCodeStream, 0, contents = new byte[position], 0, position);
+    return contents;
+  }
+  final public void getfield(FieldBinding fieldBinding) {
+    countLabels = 0;
+    if ((fieldBinding.type.id == T_double) || (fieldBinding.type.id == T_long)) {
+      if (++stackDepth > stackMax)
+        stackMax = stackDepth;
+    }
+    try {
+      position++;
+      bCodeStream[classFileOffset++] = OPC_getfield;
+    } catch (IndexOutOfBoundsException e) {
+      resizeByteArray(OPC_getfield);
+    }
+    writeUnsignedShort(constantPool.literalIndex(fieldBinding));
+  }
+  final public void getstatic(FieldBinding fieldBinding) {
+    countLabels = 0;
+    if ((fieldBinding.type.id == T_double) || (fieldBinding.type.id == T_long))
+      stackDepth += 2;
+    else
+      stackDepth += 1;
+    if (stackDepth > stackMax)
+      stackMax = stackDepth;
+    try {
+      position++;
+      bCodeStream[classFileOffset++] = OPC_getstatic;
+    } catch (IndexOutOfBoundsException e) {
+      resizeByteArray(OPC_getstatic);
+    }
+    writeUnsignedShort(constantPool.literalIndex(fieldBinding));
+  }
+  public void getSystemOut() {
+    countLabels = 0;
+    if (++stackDepth > stackMax)
+      stackMax = stackDepth;
+    try {
+      position++;
+      bCodeStream[classFileOffset++] = OPC_getstatic;
+    } catch (IndexOutOfBoundsException e) {
+      resizeByteArray(OPC_getstatic);
+    }
+    writeUnsignedShort(constantPool.literalIndexForJavaLangSystemOut());
+  }
+  public void getTYPE(int baseTypeID) {
+    countLabels = 0;
+    if (++stackDepth > stackMax)
+      stackMax = stackDepth;
+    try {
+      position++;
+      bCodeStream[classFileOffset++] = OPC_getstatic;
+    } catch (IndexOutOfBoundsException e) {
+      resizeByteArray(OPC_getstatic);
+    }
+    switch (baseTypeID) {
+      // getstatic: java.lang.Byte.TYPE                        
+      case T_byte :
+        writeUnsignedShort(constantPool.literalIndexForJavaLangByteTYPE());
+        break;
+        // getstatic: java.lang.Short.TYPE                     
+      case T_short :
+        writeUnsignedShort(constantPool.literalIndexForJavaLangShortTYPE());
+        break;
+        // getstatic: java.lang.Character.TYPE                 
+      case T_char :
+        writeUnsignedShort(constantPool.literalIndexForJavaLangCharacterTYPE());
+        break;
+        // getstatic: java.lang.Integer.TYPE                   
+      case T_int :
+        writeUnsignedShort(constantPool.literalIndexForJavaLangIntegerTYPE());
+        break;
+        // getstatic: java.lang.Long.TYPE                      
+      case T_long :
+        writeUnsignedShort(constantPool.literalIndexForJavaLangLongTYPE());
+        break;
+        // getstatic: java.lang.Float.TYPE                     
+      case T_float :
+        writeUnsignedShort(constantPool.literalIndexForJavaLangFloatTYPE());
+        break;
+        // getstatic: java.lang.Double.TYPE                    
+      case T_double :
+        writeUnsignedShort(constantPool.literalIndexForJavaLangDoubleTYPE());
+        break;
+        // getstatic: java.lang.Boolean.TYPE                   
+      case T_boolean :
+        writeUnsignedShort(constantPool.literalIndexForJavaLangBooleanTYPE());
+        break;
+        // getstatic: java.lang.Void.TYPE
+      case T_void :
+        writeUnsignedShort(constantPool.literalIndexForJavaLangVoidTYPE());
+        break;
+    }
+  }
+  /**
+   * We didn't call it goto, because there is a conflit with the goto keyword
+   */
+  final public void goto_(Label lbl) {
+    if (this.wideMode) {
+      this.goto_w(lbl);
+      return;
+    }
+    try {
+      lbl.inlineForwardReferencesFromLabelsTargeting(position);
+      /*
+       Possible optimization for code such as:
+       public Object foo() {
+       boolean b = true;
+       if (b) {
+               if (b)
+                       return null;
+       } else {
+               if (b) {
+                       return null;
+               }
+       }
+       return null;
+      }
+      The goto around the else block for the first if will
+      be unreachable, because the thenClause of the second if
+      returns.
+      See inlineForwardReferencesFromLabelsTargeting defined
+      on the Label class for the remaining part of this
+      optimization.
+       if (!lbl.isBranchTarget(position)) {
+       switch(bCodeStream[classFileOffset-1]) {
+               case OPC_return :
+               case OPC_areturn:
+                       return;
+       }
+      }*/
+      position++;
+      bCodeStream[classFileOffset++] = OPC_goto;
+    } catch (IndexOutOfBoundsException e) {
+      resizeByteArray(OPC_goto);
+    }
+    lbl.branch();
+  }
 
-/**
- * We didn't call it goto, because there is a conflit with the goto keyword
- */
-final public void internal_goto_(Label lbl) {
-       try {
-               lbl.inlineForwardReferencesFromLabelsTargeting(position);
-               /*
-                Possible optimization for code such as:
-                public Object foo() {
-                       boolean b = true;
-                       if (b) {
-                               if (b)
-                                       return null;
-                       } else {
-                               if (b) {
-                                       return null;
-                               }
-                       }
-                       return null;
-               }
-               The goto around the else block for the first if will
-               be unreachable, because the thenClause of the second if
-               returns.
-               See inlineForwardReferencesFromLabelsTargeting defined
-               on the Label class for the remaining part of this
-               optimization.
-                if (!lbl.isBranchTarget(position)) {
-                       switch(bCodeStream[classFileOffset-1]) {
-                               case OPC_return :
-                               case OPC_areturn:
-                                       return;
-                       }
-               }*/
-               position++;
-               bCodeStream[classFileOffset++] = OPC_goto;
-       } catch (IndexOutOfBoundsException e) {
-               resizeByteArray(OPC_goto);
-       }
-       lbl.branch();
-}
-final public void goto_w(Label lbl) {
-       try {
-               position++;
-               bCodeStream[classFileOffset++] = OPC_goto_w;
-       } catch (IndexOutOfBoundsException e) {
-               resizeByteArray(OPC_goto_w);
-       }
-       lbl.branchWide();
-}
-final public void i2b() {
-       countLabels = 0;
-       try {
-               position++;
-               bCodeStream[classFileOffset++] = OPC_i2b;
-       } catch (IndexOutOfBoundsException e) {
-               resizeByteArray(OPC_i2b);
-       }
-}
-final public void i2c() {
-       countLabels = 0;
-       try {
-               position++;
-               bCodeStream[classFileOffset++] = OPC_i2c;
-       } catch (IndexOutOfBoundsException e) {
-               resizeByteArray(OPC_i2c);
-       }
-}
-final public void i2d() {
-       countLabels = 0;
-       stackDepth++;
-       if (stackDepth > stackMax)
-               stackMax = stackDepth;
-       try {
-               position++;
-               bCodeStream[classFileOffset++] = OPC_i2d;
-       } catch (IndexOutOfBoundsException e) {
-               resizeByteArray(OPC_i2d);
-       }
-}
-final public void i2f() {
-       countLabels = 0;
-       try {
-               position++;
-               bCodeStream[classFileOffset++] = OPC_i2f;
-       } catch (IndexOutOfBoundsException e) {
-               resizeByteArray(OPC_i2f);
-       }
-}
-final public void i2l() {
-       countLabels = 0;
-       stackDepth++;
-       if (stackDepth > stackMax)
-               stackMax = stackDepth;
-       try {
-               position++;
-               bCodeStream[classFileOffset++] = OPC_i2l;
-       } catch (IndexOutOfBoundsException e) {
-               resizeByteArray(OPC_i2l);
-       }
-}
-final public void i2s() {
-       countLabels = 0;
-       try {
-               position++;
-               bCodeStream[classFileOffset++] = OPC_i2s;
-       } catch (IndexOutOfBoundsException e) {
-               resizeByteArray(OPC_i2s);
-       }
-}
-final public void iadd() {
-       countLabels = 0;
-       stackDepth--;
-       try {
-               position++;
-               bCodeStream[classFileOffset++] = OPC_iadd;
-       } catch (IndexOutOfBoundsException e) {
-               resizeByteArray(OPC_iadd);
-       }
-}
-final public void iaload() {
-       countLabels = 0;
-       stackDepth--;
-       try {
-               position++;
-               bCodeStream[classFileOffset++] = OPC_iaload;
-       } catch (IndexOutOfBoundsException e) {
-               resizeByteArray(OPC_iaload);
-       }
-}
-final public void iand() {
-       countLabels = 0;
-       stackDepth--;
-       try {
-               position++;
-               bCodeStream[classFileOffset++] = OPC_iand;
-       } catch (IndexOutOfBoundsException e) {
-               resizeByteArray(OPC_iand);
-       }
-}
-final public void iastore() {
-       countLabels = 0;
-       stackDepth -= 3;
-       try {
-               position++;
-               bCodeStream[classFileOffset++] = OPC_iastore;
-       } catch (IndexOutOfBoundsException e) {
-               resizeByteArray(OPC_iastore);
-       }
-}
-final public void iconst_0() {
-       countLabels = 0;
-       stackDepth++;
-       if (stackDepth > stackMax)
-               stackMax = stackDepth;
-       try {
-               position++;
-               bCodeStream[classFileOffset++] = OPC_iconst_0;
-       } catch (IndexOutOfBoundsException e) {
-               resizeByteArray(OPC_iconst_0);
-       }
-}
-final public void iconst_1() {
-       countLabels = 0;
-       stackDepth++;
-       if (stackDepth > stackMax)
-               stackMax = stackDepth;
-       try {
-               position++;
-               bCodeStream[classFileOffset++] = OPC_iconst_1;
-       } catch (IndexOutOfBoundsException e) {
-               resizeByteArray(OPC_iconst_1);
-       }
-}
-final public void iconst_2() {
-       countLabels = 0;
-       stackDepth++;
-       if (stackDepth > stackMax)
-               stackMax = stackDepth;
-       try {
-               position++;
-               bCodeStream[classFileOffset++] = OPC_iconst_2;
-       } catch (IndexOutOfBoundsException e) {
-               resizeByteArray(OPC_iconst_2);
-       }
-}
-final public void iconst_3() {
-       countLabels = 0;
-       stackDepth++;
-       if (stackDepth > stackMax)
-               stackMax = stackDepth;
-       try {
-               position++;
-               bCodeStream[classFileOffset++] = OPC_iconst_3;
-       } catch (IndexOutOfBoundsException e) {
-               resizeByteArray(OPC_iconst_3);
-       }
-}
-final public void iconst_4() {
-       countLabels = 0;
-       stackDepth++;
-       if (stackDepth > stackMax)
-               stackMax = stackDepth;
-       try {
-               position++;
-               bCodeStream[classFileOffset++] = OPC_iconst_4;
-       } catch (IndexOutOfBoundsException e) {
-               resizeByteArray(OPC_iconst_4);
-       }
-}
-final public void iconst_5() {
-       countLabels = 0;
-       stackDepth++;
-       if (stackDepth > stackMax)
-               stackMax = stackDepth;
-       try {
-               position++;
-               bCodeStream[classFileOffset++] = OPC_iconst_5;
-       } catch (IndexOutOfBoundsException e) {
-               resizeByteArray(OPC_iconst_5);
-       }
-}
-final public void iconst_m1() {
-       countLabels = 0;
-       stackDepth++;
-       if (stackDepth > stackMax)
-               stackMax = stackDepth;
-       try {
-               position++;
-               bCodeStream[classFileOffset++] = OPC_iconst_m1;
-       } catch (IndexOutOfBoundsException e) {
-               resizeByteArray(OPC_iconst_m1);
-       }
-}
-final public void idiv() {
-       countLabels = 0;
-       stackDepth--;
-       try {
-               position++;
-               bCodeStream[classFileOffset++] = OPC_idiv;
-       } catch (IndexOutOfBoundsException e) {
-               resizeByteArray(OPC_idiv);
-       }
-}
-final public void if_acmpeq(Label lbl) {
-       countLabels = 0;
-       stackDepth-=2;
-       if (this.wideMode) {
-               generateWideConditionalBranch(OPC_if_acmpeq, lbl);
-       } else {        
-               try {
-                       position++;
-                       bCodeStream[classFileOffset++] = OPC_if_acmpeq;
-               } catch (IndexOutOfBoundsException e) {
-                       resizeByteArray(OPC_if_acmpeq);
-               }
-               lbl.branch();
-       }
-}
-final public void if_acmpne(Label lbl) {
-       countLabels = 0;
-       stackDepth-=2;
-       if (this.wideMode) {
-               generateWideConditionalBranch(OPC_if_acmpne, lbl);
-       } else {        
-               try {
-                       position++;
-                       bCodeStream[classFileOffset++] = OPC_if_acmpne;
-               } catch (IndexOutOfBoundsException e) {
-                       resizeByteArray(OPC_if_acmpne);
-               }
-               lbl.branch();
-       }
-}
-final public void if_icmpeq(Label lbl) {
-       countLabels = 0;
-       stackDepth -= 2;
-       if (this.wideMode) {
-               generateWideConditionalBranch(OPC_if_icmpeq, lbl);
-       } else {        
-               try {
-                       position++;
-                       bCodeStream[classFileOffset++] = OPC_if_icmpeq;
-               } catch (IndexOutOfBoundsException e) {
-                       resizeByteArray(OPC_if_icmpeq);
-               }
-               lbl.branch();
-       }
-}
-final public void if_icmpge(Label lbl) {
-       countLabels = 0;
-       stackDepth -= 2;
-       if (this.wideMode) {
-               generateWideConditionalBranch(OPC_if_icmpge, lbl);
-       } else {        
-               try {
-                       position++;
-                       bCodeStream[classFileOffset++] = OPC_if_icmpge;
-               } catch (IndexOutOfBoundsException e) {
-                       resizeByteArray(OPC_if_icmpge);
-               }
-               lbl.branch();
-       }
-}
-final public void if_icmpgt(Label lbl) {
-       countLabels = 0;
-       stackDepth -= 2;
-       if (this.wideMode) {
-               generateWideConditionalBranch(OPC_if_icmpgt, lbl);
-       } else {        
-               try {
-                       position++;
-                       bCodeStream[classFileOffset++] = OPC_if_icmpgt;
-               } catch (IndexOutOfBoundsException e) {
-                       resizeByteArray(OPC_if_icmpgt);
-               }
-               lbl.branch();
-       }
-}
-final public void if_icmple(Label lbl) {
-       countLabels = 0;
-       stackDepth -= 2;
-       if (this.wideMode) {
-               generateWideConditionalBranch(OPC_if_icmple, lbl);
-       } else {        
-               try {
-                       position++;
-                       bCodeStream[classFileOffset++] = OPC_if_icmple;
-               } catch (IndexOutOfBoundsException e) {
-                       resizeByteArray(OPC_if_icmple);
-               }
-               lbl.branch();
-       }
-}
-final public void if_icmplt(Label lbl) {
-       countLabels = 0;
-       stackDepth -= 2;
-       if (this.wideMode) {
-               generateWideConditionalBranch(OPC_if_icmplt, lbl);
-       } else {
-               try {
-                       position++;
-                       bCodeStream[classFileOffset++] = OPC_if_icmplt;
-               } catch (IndexOutOfBoundsException e) {
-                       resizeByteArray(OPC_if_icmplt);
-               }
-               lbl.branch();
-       }
-}
-final public void if_icmpne(Label lbl) {
-       countLabels = 0;
-       stackDepth -= 2;
-       if (this.wideMode) {
-               generateWideConditionalBranch(OPC_if_icmpne, lbl);
-       } else {
-               try {
-                       position++;
-                       bCodeStream[classFileOffset++] = OPC_if_icmpne;
-               } catch (IndexOutOfBoundsException e) {
-                       resizeByteArray(OPC_if_icmpne);
-               }
-               lbl.branch();
-       }
-}
-final public void ifeq(Label lbl) {
-       countLabels = 0;
-       stackDepth--;
-       if (this.wideMode) {
-               generateWideConditionalBranch(OPC_ifeq, lbl);
-       } else {
-               try {
-                       position++;
-                       bCodeStream[classFileOffset++] = OPC_ifeq;
-               } catch (IndexOutOfBoundsException e) {
-                       resizeByteArray(OPC_ifeq);
-               }
-               lbl.branch();
-       }
-}
-final public void ifge(Label lbl) {
-       countLabels = 0;
-       stackDepth--;
-       if (this.wideMode) {
-               generateWideConditionalBranch(OPC_ifge, lbl);
-       } else {
-               try {
-                       position++;
-                       bCodeStream[classFileOffset++] = OPC_ifge;
-               } catch (IndexOutOfBoundsException e) {
-                       resizeByteArray(OPC_ifge);
-               }
-               lbl.branch();
-       }
-}
-final public void ifgt(Label lbl) {
-       countLabels = 0;
-       stackDepth--;
-       if (this.wideMode) {
-               generateWideConditionalBranch(OPC_ifgt, lbl);
-       } else {
-               try {
-                       position++;
-                       bCodeStream[classFileOffset++] = OPC_ifgt;
-               } catch (IndexOutOfBoundsException e) {
-                       resizeByteArray(OPC_ifgt);
-               }
-               lbl.branch();
-       }
-}
-final public void ifle(Label lbl) {
-       countLabels = 0;
-       stackDepth--;
-       if (this.wideMode) {
-               generateWideConditionalBranch(OPC_ifle, lbl);
-       } else {
-               try {
-                       position++;
-                       bCodeStream[classFileOffset++] = OPC_ifle;
-               } catch (IndexOutOfBoundsException e) {
-                       resizeByteArray(OPC_ifle);
-               }
-               lbl.branch();
-       }
-}
-final public void iflt(Label lbl) {
-       countLabels = 0;
-       stackDepth--;
-       if (this.wideMode) {
-               generateWideConditionalBranch(OPC_iflt, lbl);
-       } else {
-               try {
-                       position++;
-                       bCodeStream[classFileOffset++] = OPC_iflt;
-               } catch (IndexOutOfBoundsException e) {
-                       resizeByteArray(OPC_iflt);
-               }
-               lbl.branch();
-       }
-}
-final public void ifne(Label lbl) {
-       countLabels = 0;
-       stackDepth--;
-       if (this.wideMode) {
-               generateWideConditionalBranch(OPC_ifne, lbl);
-       } else {
-               try {
-                       position++;
-                       bCodeStream[classFileOffset++] = OPC_ifne;
-               } catch (IndexOutOfBoundsException e) {
-                       resizeByteArray(OPC_ifne);
-               }
-               lbl.branch();
-       }
-}
-final public void ifnonnull(Label lbl) {
-       countLabels = 0;
-       stackDepth--;
-       if (this.wideMode) {
-               generateWideConditionalBranch(OPC_ifnonnull, lbl);
-       } else {
-               try {
-                       position++;
-                       bCodeStream[classFileOffset++] = OPC_ifnonnull;
-               } catch (IndexOutOfBoundsException e) {
-                       resizeByteArray(OPC_ifnonnull);
-               }
-               lbl.branch();
-       }
-}
-final public void ifnull(Label lbl) {
-       countLabels = 0;
-       stackDepth--;
-       if (this.wideMode) {
-               generateWideConditionalBranch(OPC_ifnull, lbl);
-       } else {
-               try {
-                       position++;
-                       bCodeStream[classFileOffset++] = OPC_ifnull;
-               } catch (IndexOutOfBoundsException e) {
-                       resizeByteArray(OPC_ifnull);
-               }
-               lbl.branch();
-       }
-}
-final public void iinc(int index, int value) {
-       countLabels = 0;
-       if ((index > 255) || (value < -128 || value > 127)) { // have to widen
-               try {
-                       position++;
-                       bCodeStream[classFileOffset++] = OPC_wide;
-               } catch (IndexOutOfBoundsException e) {
-                       resizeByteArray(OPC_wide);
-               }
-               try {
-                       position++;
-                       bCodeStream[classFileOffset++] = OPC_iinc;
-               } catch (IndexOutOfBoundsException e) {
-                       resizeByteArray(OPC_iinc);
-               }
-               writeUnsignedShort(index);
-               writeSignedShort(value);
-       } else {
-               try {
-                       position++;
-                       bCodeStream[classFileOffset++] = OPC_iinc;
-               } catch (IndexOutOfBoundsException e) {
-                       resizeByteArray(OPC_iinc);
-               }
-               writeUnsignedByte(index);
-               writeSignedByte(value);
-       }
-}
-final public void iload(int iArg) {
-       countLabels = 0;
-       stackDepth++;
-       if (maxLocals <= iArg) {
-               maxLocals = iArg + 1;
-       }
-       if (stackDepth > stackMax)
-               stackMax = stackDepth;
-       if (iArg > 255) { // Widen
-               try {
-                       position++;
-                       bCodeStream[classFileOffset++] = OPC_wide;
-               } catch (IndexOutOfBoundsException e) {
-                       resizeByteArray(OPC_wide);
-               }
-               try {
-                       position++;
-                       bCodeStream[classFileOffset++] = OPC_iload;
-               } catch (IndexOutOfBoundsException e) {
-                       resizeByteArray(OPC_iload);
-               }
-               writeUnsignedShort(iArg);
-       } else {
-               try {
-                       position++;
-                       bCodeStream[classFileOffset++] = OPC_iload;
-               } catch (IndexOutOfBoundsException e) {
-                       resizeByteArray(OPC_iload);
-               }
-               try {
-                       position++;
-                       bCodeStream[classFileOffset++] = (byte) iArg;
-               } catch (IndexOutOfBoundsException e) {
-                       resizeByteArray((byte) iArg);
-               }
-       }
-}
-final public void iload_0() {
-       countLabels = 0;
-       stackDepth++;
-       if (maxLocals <= 0) {
-               maxLocals = 1;
-       }
-       if (stackDepth > stackMax)
-               stackMax = stackDepth;
-       try {
-               position++;
-               bCodeStream[classFileOffset++] = OPC_iload_0;
-       } catch (IndexOutOfBoundsException e) {
-               resizeByteArray(OPC_iload_0);
-       }
-}
-final public void iload_1() {
-       countLabels = 0;
-       stackDepth++;
-       if (maxLocals <= 1) {
-               maxLocals = 2;
-       }
-       if (stackDepth > stackMax)
-               stackMax = stackDepth;
-       try {
-               position++;
-               bCodeStream[classFileOffset++] = OPC_iload_1;
-       } catch (IndexOutOfBoundsException e) {
-               resizeByteArray(OPC_iload_1);
-       }
-}
-final public void iload_2() {
-       countLabels = 0;
-       stackDepth++;
-       if (maxLocals <= 2) {
-               maxLocals = 3;
-       }
-       if (stackDepth > stackMax)
-               stackMax = stackDepth;
-       try {
-               position++;
-               bCodeStream[classFileOffset++] = OPC_iload_2;
-       } catch (IndexOutOfBoundsException e) {
-               resizeByteArray(OPC_iload_2);
-       }
-}
-final public void iload_3() {
-       countLabels = 0;
-       stackDepth++;
-       if (maxLocals <= 3) {
-               maxLocals = 4;
-       }
-       if (stackDepth > stackMax)
-               stackMax = stackDepth;
-       try {
-               position++;
-               bCodeStream[classFileOffset++] = OPC_iload_3;
-       } catch (IndexOutOfBoundsException e) {
-               resizeByteArray(OPC_iload_3);
-       }
-}
-final public void imul() {
-       countLabels = 0;
-       stackDepth--;
-       try {
-               position++;
-               bCodeStream[classFileOffset++] = OPC_imul;
-       } catch (IndexOutOfBoundsException e) {
-               resizeByteArray(OPC_imul);
-       }
-}
-public void incrementTemp(LocalVariableBinding localBinding, int value) {
-       if (value == (short) value) {
-               this.iinc(localBinding.resolvedPosition, value);
-               return;
-       }
-       load(localBinding);
-       this.ldc(value);
-       this.iadd();
-       store(localBinding, false);
-}
-public void incrStackSize(int offset) {
-       if ((stackDepth += offset) > stackMax)
-               stackMax = stackDepth;
-}
-public int indexOfSameLineEntrySincePC(int pc, int line) {
-       for (int index = pc, max = pcToSourceMapSize; index < max; index+=2) {
-               if (pcToSourceMap[index+1] == line)
-                       return index;
-       }
-       return -1;
-}
-final public void ineg() {
-       countLabels = 0;
-       try {
-               position++;
-               bCodeStream[classFileOffset++] = OPC_ineg;
-       } catch (IndexOutOfBoundsException e) {
-               resizeByteArray(OPC_ineg);
-       }
-}
-public void init(ClassFile classFile) {
-       this.classFile = classFile;
-       this.constantPool = classFile.constantPool;
-       this.bCodeStream = classFile.contents;
-       this.classFileOffset = classFile.contentsOffset;
-       this.startingClassFileOffset = this.classFileOffset;
-       pcToSourceMapSize = 0;
-       lastEntryPC = 0;
-       int length = visibleLocals.length;
-       if (noVisibleLocals.length < length) {
-               noVisibleLocals = new LocalVariableBinding[length];
-       }
-       System.arraycopy(noVisibleLocals, 0, visibleLocals, 0, length);
-       visibleLocalsCount = 0;
-       
-       length = locals.length;
-       if (noLocals.length < length) {
-               noLocals = new LocalVariableBinding[length];
-       }
-       System.arraycopy(noLocals, 0, locals, 0, length);
-       allLocalsCounter = 0;
+  /**
+   * We didn't call it goto, because there is a conflit with the goto keyword
+   */
+  final public void internal_goto_(Label lbl) {
+    try {
+      lbl.inlineForwardReferencesFromLabelsTargeting(position);
+      /*
+       Possible optimization for code such as:
+       public Object foo() {
+       boolean b = true;
+       if (b) {
+               if (b)
+                       return null;
+       } else {
+               if (b) {
+                       return null;
+               }
+       }
+       return null;
+      }
+      The goto around the else block for the first if will
+      be unreachable, because the thenClause of the second if
+      returns.
+      See inlineForwardReferencesFromLabelsTargeting defined
+      on the Label class for the remaining part of this
+      optimization.
+       if (!lbl.isBranchTarget(position)) {
+       switch(bCodeStream[classFileOffset-1]) {
+               case OPC_return :
+               case OPC_areturn:
+                       return;
+       }
+      }*/
+      position++;
+      bCodeStream[classFileOffset++] = OPC_goto;
+    } catch (IndexOutOfBoundsException e) {
+      resizeByteArray(OPC_goto);
+    }
+    lbl.branch();
+  }
+  final public void goto_w(Label lbl) {
+    try {
+      position++;
+      bCodeStream[classFileOffset++] = OPC_goto_w;
+    } catch (IndexOutOfBoundsException e) {
+      resizeByteArray(OPC_goto_w);
+    }
+    lbl.branchWide();
+  }
+  final public void i2b() {
+    countLabels = 0;
+    try {
+      position++;
+      bCodeStream[classFileOffset++] = OPC_i2b;
+    } catch (IndexOutOfBoundsException e) {
+      resizeByteArray(OPC_i2b);
+    }
+  }
+  final public void i2c() {
+    countLabels = 0;
+    try {
+      position++;
+      bCodeStream[classFileOffset++] = OPC_i2c;
+    } catch (IndexOutOfBoundsException e) {
+      resizeByteArray(OPC_i2c);
+    }
+  }
+  final public void i2d() {
+    countLabels = 0;
+    stackDepth++;
+    if (stackDepth > stackMax)
+      stackMax = stackDepth;
+    try {
+      position++;
+      bCodeStream[classFileOffset++] = OPC_i2d;
+    } catch (IndexOutOfBoundsException e) {
+      resizeByteArray(OPC_i2d);
+    }
+  }
+  final public void i2f() {
+    countLabels = 0;
+    try {
+      position++;
+      bCodeStream[classFileOffset++] = OPC_i2f;
+    } catch (IndexOutOfBoundsException e) {
+      resizeByteArray(OPC_i2f);
+    }
+  }
+  final public void i2l() {
+    countLabels = 0;
+    stackDepth++;
+    if (stackDepth > stackMax)
+      stackMax = stackDepth;
+    try {
+      position++;
+      bCodeStream[classFileOffset++] = OPC_i2l;
+    } catch (IndexOutOfBoundsException e) {
+      resizeByteArray(OPC_i2l);
+    }
+  }
+  final public void i2s() {
+    countLabels = 0;
+    try {
+      position++;
+      bCodeStream[classFileOffset++] = OPC_i2s;
+    } catch (IndexOutOfBoundsException e) {
+      resizeByteArray(OPC_i2s);
+    }
+  }
+  final public void iadd() {
+    countLabels = 0;
+    stackDepth--;
+    try {
+      position++;
+      bCodeStream[classFileOffset++] = OPC_iadd;
+    } catch (IndexOutOfBoundsException e) {
+      resizeByteArray(OPC_iadd);
+    }
+  }
+  final public void iaload() {
+    countLabels = 0;
+    stackDepth--;
+    try {
+      position++;
+      bCodeStream[classFileOffset++] = OPC_iaload;
+    } catch (IndexOutOfBoundsException e) {
+      resizeByteArray(OPC_iaload);
+    }
+  }
+  final public void iand() {
+    countLabels = 0;
+    stackDepth--;
+    try {
+      position++;
+      bCodeStream[classFileOffset++] = OPC_iand;
+    } catch (IndexOutOfBoundsException e) {
+      resizeByteArray(OPC_iand);
+    }
+  }
+  final public void iastore() {
+    countLabels = 0;
+    stackDepth -= 3;
+    try {
+      position++;
+      bCodeStream[classFileOffset++] = OPC_iastore;
+    } catch (IndexOutOfBoundsException e) {
+      resizeByteArray(OPC_iastore);
+    }
+  }
+  final public void iconst_0() {
+    countLabels = 0;
+    stackDepth++;
+    if (stackDepth > stackMax)
+      stackMax = stackDepth;
+    try {
+      position++;
+      bCodeStream[classFileOffset++] = OPC_iconst_0;
+    } catch (IndexOutOfBoundsException e) {
+      resizeByteArray(OPC_iconst_0);
+    }
+  }
+  final public void iconst_1() {
+    countLabels = 0;
+    stackDepth++;
+    if (stackDepth > stackMax)
+      stackMax = stackDepth;
+    try {
+      position++;
+      bCodeStream[classFileOffset++] = OPC_iconst_1;
+    } catch (IndexOutOfBoundsException e) {
+      resizeByteArray(OPC_iconst_1);
+    }
+  }
+  final public void iconst_2() {
+    countLabels = 0;
+    stackDepth++;
+    if (stackDepth > stackMax)
+      stackMax = stackDepth;
+    try {
+      position++;
+      bCodeStream[classFileOffset++] = OPC_iconst_2;
+    } catch (IndexOutOfBoundsException e) {
+      resizeByteArray(OPC_iconst_2);
+    }
+  }
+  final public void iconst_3() {
+    countLabels = 0;
+    stackDepth++;
+    if (stackDepth > stackMax)
+      stackMax = stackDepth;
+    try {
+      position++;
+      bCodeStream[classFileOffset++] = OPC_iconst_3;
+    } catch (IndexOutOfBoundsException e) {
+      resizeByteArray(OPC_iconst_3);
+    }
+  }
+  final public void iconst_4() {
+    countLabels = 0;
+    stackDepth++;
+    if (stackDepth > stackMax)
+      stackMax = stackDepth;
+    try {
+      position++;
+      bCodeStream[classFileOffset++] = OPC_iconst_4;
+    } catch (IndexOutOfBoundsException e) {
+      resizeByteArray(OPC_iconst_4);
+    }
+  }
+  final public void iconst_5() {
+    countLabels = 0;
+    stackDepth++;
+    if (stackDepth > stackMax)
+      stackMax = stackDepth;
+    try {
+      position++;
+      bCodeStream[classFileOffset++] = OPC_iconst_5;
+    } catch (IndexOutOfBoundsException e) {
+      resizeByteArray(OPC_iconst_5);
+    }
+  }
+  final public void iconst_m1() {
+    countLabels = 0;
+    stackDepth++;
+    if (stackDepth > stackMax)
+      stackMax = stackDepth;
+    try {
+      position++;
+      bCodeStream[classFileOffset++] = OPC_iconst_m1;
+    } catch (IndexOutOfBoundsException e) {
+      resizeByteArray(OPC_iconst_m1);
+    }
+  }
+  final public void idiv() {
+    countLabels = 0;
+    stackDepth--;
+    try {
+      position++;
+      bCodeStream[classFileOffset++] = OPC_idiv;
+    } catch (IndexOutOfBoundsException e) {
+      resizeByteArray(OPC_idiv);
+    }
+  }
+  final public void if_acmpeq(Label lbl) {
+    countLabels = 0;
+    stackDepth -= 2;
+    if (this.wideMode) {
+      generateWideConditionalBranch(OPC_if_acmpeq, lbl);
+    } else {
+      try {
+        position++;
+        bCodeStream[classFileOffset++] = OPC_if_acmpeq;
+      } catch (IndexOutOfBoundsException e) {
+        resizeByteArray(OPC_if_acmpeq);
+      }
+      lbl.branch();
+    }
+  }
+  final public void if_acmpne(Label lbl) {
+    countLabels = 0;
+    stackDepth -= 2;
+    if (this.wideMode) {
+      generateWideConditionalBranch(OPC_if_acmpne, lbl);
+    } else {
+      try {
+        position++;
+        bCodeStream[classFileOffset++] = OPC_if_acmpne;
+      } catch (IndexOutOfBoundsException e) {
+        resizeByteArray(OPC_if_acmpne);
+      }
+      lbl.branch();
+    }
+  }
+  final public void if_icmpeq(Label lbl) {
+    countLabels = 0;
+    stackDepth -= 2;
+    if (this.wideMode) {
+      generateWideConditionalBranch(OPC_if_icmpeq, lbl);
+    } else {
+      try {
+        position++;
+        bCodeStream[classFileOffset++] = OPC_if_icmpeq;
+      } catch (IndexOutOfBoundsException e) {
+        resizeByteArray(OPC_if_icmpeq);
+      }
+      lbl.branch();
+    }
+  }
+  final public void if_icmpge(Label lbl) {
+    countLabels = 0;
+    stackDepth -= 2;
+    if (this.wideMode) {
+      generateWideConditionalBranch(OPC_if_icmpge, lbl);
+    } else {
+      try {
+        position++;
+        bCodeStream[classFileOffset++] = OPC_if_icmpge;
+      } catch (IndexOutOfBoundsException e) {
+        resizeByteArray(OPC_if_icmpge);
+      }
+      lbl.branch();
+    }
+  }
+  final public void if_icmpgt(Label lbl) {
+    countLabels = 0;
+    stackDepth -= 2;
+    if (this.wideMode) {
+      generateWideConditionalBranch(OPC_if_icmpgt, lbl);
+    } else {
+      try {
+        position++;
+        bCodeStream[classFileOffset++] = OPC_if_icmpgt;
+      } catch (IndexOutOfBoundsException e) {
+        resizeByteArray(OPC_if_icmpgt);
+      }
+      lbl.branch();
+    }
+  }
+  final public void if_icmple(Label lbl) {
+    countLabels = 0;
+    stackDepth -= 2;
+    if (this.wideMode) {
+      generateWideConditionalBranch(OPC_if_icmple, lbl);
+    } else {
+      try {
+        position++;
+        bCodeStream[classFileOffset++] = OPC_if_icmple;
+      } catch (IndexOutOfBoundsException e) {
+        resizeByteArray(OPC_if_icmple);
+      }
+      lbl.branch();
+    }
+  }
+  final public void if_icmplt(Label lbl) {
+    countLabels = 0;
+    stackDepth -= 2;
+    if (this.wideMode) {
+      generateWideConditionalBranch(OPC_if_icmplt, lbl);
+    } else {
+      try {
+        position++;
+        bCodeStream[classFileOffset++] = OPC_if_icmplt;
+      } catch (IndexOutOfBoundsException e) {
+        resizeByteArray(OPC_if_icmplt);
+      }
+      lbl.branch();
+    }
+  }
+  final public void if_icmpne(Label lbl) {
+    countLabels = 0;
+    stackDepth -= 2;
+    if (this.wideMode) {
+      generateWideConditionalBranch(OPC_if_icmpne, lbl);
+    } else {
+      try {
+        position++;
+        bCodeStream[classFileOffset++] = OPC_if_icmpne;
+      } catch (IndexOutOfBoundsException e) {
+        resizeByteArray(OPC_if_icmpne);
+      }
+      lbl.branch();
+    }
+  }
+  final public void ifeq(Label lbl) {
+    countLabels = 0;
+    stackDepth--;
+    if (this.wideMode) {
+      generateWideConditionalBranch(OPC_ifeq, lbl);
+    } else {
+      try {
+        position++;
+        bCodeStream[classFileOffset++] = OPC_ifeq;
+      } catch (IndexOutOfBoundsException e) {
+        resizeByteArray(OPC_ifeq);
+      }
+      lbl.branch();
+    }
+  }
+  final public void ifge(Label lbl) {
+    countLabels = 0;
+    stackDepth--;
+    if (this.wideMode) {
+      generateWideConditionalBranch(OPC_ifge, lbl);
+    } else {
+      try {
+        position++;
+        bCodeStream[classFileOffset++] = OPC_ifge;
+      } catch (IndexOutOfBoundsException e) {
+        resizeByteArray(OPC_ifge);
+      }
+      lbl.branch();
+    }
+  }
+  final public void ifgt(Label lbl) {
+    countLabels = 0;
+    stackDepth--;
+    if (this.wideMode) {
+      generateWideConditionalBranch(OPC_ifgt, lbl);
+    } else {
+      try {
+        position++;
+        bCodeStream[classFileOffset++] = OPC_ifgt;
+      } catch (IndexOutOfBoundsException e) {
+        resizeByteArray(OPC_ifgt);
+      }
+      lbl.branch();
+    }
+  }
+  final public void ifle(Label lbl) {
+    countLabels = 0;
+    stackDepth--;
+    if (this.wideMode) {
+      generateWideConditionalBranch(OPC_ifle, lbl);
+    } else {
+      try {
+        position++;
+        bCodeStream[classFileOffset++] = OPC_ifle;
+      } catch (IndexOutOfBoundsException e) {
+        resizeByteArray(OPC_ifle);
+      }
+      lbl.branch();
+    }
+  }
+  final public void iflt(Label lbl) {
+    countLabels = 0;
+    stackDepth--;
+    if (this.wideMode) {
+      generateWideConditionalBranch(OPC_iflt, lbl);
+    } else {
+      try {
+        position++;
+        bCodeStream[classFileOffset++] = OPC_iflt;
+      } catch (IndexOutOfBoundsException e) {
+        resizeByteArray(OPC_iflt);
+      }
+      lbl.branch();
+    }
+  }
+  final public void ifne(Label lbl) {
+    countLabels = 0;
+    stackDepth--;
+    if (this.wideMode) {
+      generateWideConditionalBranch(OPC_ifne, lbl);
+    } else {
+      try {
+        position++;
+        bCodeStream[classFileOffset++] = OPC_ifne;
+      } catch (IndexOutOfBoundsException e) {
+        resizeByteArray(OPC_ifne);
+      }
+      lbl.branch();
+    }
+  }
+  final public void ifnonnull(Label lbl) {
+    countLabels = 0;
+    stackDepth--;
+    if (this.wideMode) {
+      generateWideConditionalBranch(OPC_ifnonnull, lbl);
+    } else {
+      try {
+        position++;
+        bCodeStream[classFileOffset++] = OPC_ifnonnull;
+      } catch (IndexOutOfBoundsException e) {
+        resizeByteArray(OPC_ifnonnull);
+      }
+      lbl.branch();
+    }
+  }
+  final public void ifnull(Label lbl) {
+    countLabels = 0;
+    stackDepth--;
+    if (this.wideMode) {
+      generateWideConditionalBranch(OPC_ifnull, lbl);
+    } else {
+      try {
+        position++;
+        bCodeStream[classFileOffset++] = OPC_ifnull;
+      } catch (IndexOutOfBoundsException e) {
+        resizeByteArray(OPC_ifnull);
+      }
+      lbl.branch();
+    }
+  }
+  final public void iinc(int index, int value) {
+    countLabels = 0;
+    if ((index > 255) || (value < -128 || value > 127)) { // have to widen
+      try {
+        position++;
+        bCodeStream[classFileOffset++] = OPC_wide;
+      } catch (IndexOutOfBoundsException e) {
+        resizeByteArray(OPC_wide);
+      }
+      try {
+        position++;
+        bCodeStream[classFileOffset++] = OPC_iinc;
+      } catch (IndexOutOfBoundsException e) {
+        resizeByteArray(OPC_iinc);
+      }
+      writeUnsignedShort(index);
+      writeSignedShort(value);
+    } else {
+      try {
+        position++;
+        bCodeStream[classFileOffset++] = OPC_iinc;
+      } catch (IndexOutOfBoundsException e) {
+        resizeByteArray(OPC_iinc);
+      }
+      writeUnsignedByte(index);
+      writeSignedByte(value);
+    }
+  }
+  final public void iload(int iArg) {
+    countLabels = 0;
+    stackDepth++;
+    if (maxLocals <= iArg) {
+      maxLocals = iArg + 1;
+    }
+    if (stackDepth > stackMax)
+      stackMax = stackDepth;
+    if (iArg > 255) { // Widen
+      try {
+        position++;
+        bCodeStream[classFileOffset++] = OPC_wide;
+      } catch (IndexOutOfBoundsException e) {
+        resizeByteArray(OPC_wide);
+      }
+      try {
+        position++;
+        bCodeStream[classFileOffset++] = OPC_iload;
+      } catch (IndexOutOfBoundsException e) {
+        resizeByteArray(OPC_iload);
+      }
+      writeUnsignedShort(iArg);
+    } else {
+      try {
+        position++;
+        bCodeStream[classFileOffset++] = OPC_iload;
+      } catch (IndexOutOfBoundsException e) {
+        resizeByteArray(OPC_iload);
+      }
+      try {
+        position++;
+        bCodeStream[classFileOffset++] = (byte) iArg;
+      } catch (IndexOutOfBoundsException e) {
+        resizeByteArray((byte) iArg);
+      }
+    }
+  }
+  final public void iload_0() {
+    countLabels = 0;
+    stackDepth++;
+    if (maxLocals <= 0) {
+      maxLocals = 1;
+    }
+    if (stackDepth > stackMax)
+      stackMax = stackDepth;
+    try {
+      position++;
+      bCodeStream[classFileOffset++] = OPC_iload_0;
+    } catch (IndexOutOfBoundsException e) {
+      resizeByteArray(OPC_iload_0);
+    }
+  }
+  final public void iload_1() {
+    countLabels = 0;
+    stackDepth++;
+    if (maxLocals <= 1) {
+      maxLocals = 2;
+    }
+    if (stackDepth > stackMax)
+      stackMax = stackDepth;
+    try {
+      position++;
+      bCodeStream[classFileOffset++] = OPC_iload_1;
+    } catch (IndexOutOfBoundsException e) {
+      resizeByteArray(OPC_iload_1);
+    }
+  }
+  final public void iload_2() {
+    countLabels = 0;
+    stackDepth++;
+    if (maxLocals <= 2) {
+      maxLocals = 3;
+    }
+    if (stackDepth > stackMax)
+      stackMax = stackDepth;
+    try {
+      position++;
+      bCodeStream[classFileOffset++] = OPC_iload_2;
+    } catch (IndexOutOfBoundsException e) {
+      resizeByteArray(OPC_iload_2);
+    }
+  }
+  final public void iload_3() {
+    countLabels = 0;
+    stackDepth++;
+    if (maxLocals <= 3) {
+      maxLocals = 4;
+    }
+    if (stackDepth > stackMax)
+      stackMax = stackDepth;
+    try {
+      position++;
+      bCodeStream[classFileOffset++] = OPC_iload_3;
+    } catch (IndexOutOfBoundsException e) {
+      resizeByteArray(OPC_iload_3);
+    }
+  }
+  final public void imul() {
+    countLabels = 0;
+    stackDepth--;
+    try {
+      position++;
+      bCodeStream[classFileOffset++] = OPC_imul;
+    } catch (IndexOutOfBoundsException e) {
+      resizeByteArray(OPC_imul);
+    }
+  }
+  public void incrementTemp(LocalVariableBinding localBinding, int value) {
+    if (value == (short) value) {
+      this.iinc(localBinding.resolvedPosition, value);
+      return;
+    }
+    load(localBinding);
+    this.ldc(value);
+    this.iadd();
+    store(localBinding, false);
+  }
+  public void incrStackSize(int offset) {
+    if ((stackDepth += offset) > stackMax)
+      stackMax = stackDepth;
+  }
+  public int indexOfSameLineEntrySincePC(int pc, int line) {
+    for (int index = pc, max = pcToSourceMapSize; index < max; index += 2) {
+      if (pcToSourceMap[index + 1] == line)
+        return index;
+    }
+    return -1;
+  }
+  final public void ineg() {
+    countLabels = 0;
+    try {
+      position++;
+      bCodeStream[classFileOffset++] = OPC_ineg;
+    } catch (IndexOutOfBoundsException e) {
+      resizeByteArray(OPC_ineg);
+    }
+  }
+  public void init(ClassFile classFile) {
+    this.classFile = classFile;
+    this.constantPool = classFile.constantPool;
+    this.bCodeStream = classFile.contents;
+    this.classFileOffset = classFile.contentsOffset;
+    this.startingClassFileOffset = this.classFileOffset;
+    pcToSourceMapSize = 0;
+    lastEntryPC = 0;
+    int length = visibleLocals.length;
+    if (noVisibleLocals.length < length) {
+      noVisibleLocals = new LocalVariableBinding[length];
+    }
+    System.arraycopy(noVisibleLocals, 0, visibleLocals, 0, length);
+    visibleLocalsCount = 0;
 
-       length = exceptionHandlers.length;
-       if (noExceptionHandlers.length < length) {
-               noExceptionHandlers = new ExceptionLabel[length];
-       }
-       System.arraycopy(noExceptionHandlers, 0, exceptionHandlers, 0, length);
-       exceptionHandlersNumber = 0;
-       
-       length = labels.length;
-       if (noLabels.length < length) {
-               noLabels = new Label[length];
-       }
-       System.arraycopy(noLabels, 0, labels, 0, length);
-       countLabels = 0;
+    length = locals.length;
+    if (noLocals.length < length) {
+      noLocals = new LocalVariableBinding[length];
+    }
+    System.arraycopy(noLocals, 0, locals, 0, length);
+    allLocalsCounter = 0;
 
-       stackMax = 0;
-       stackDepth = 0;
-       maxLocals = 0;
-       position = 0;
-}
-/**
- * @param methodDeclaration org.eclipse.jdt.internal.compiler.ast.AbstractMethodDeclaration
- * @param classFile org.eclipse.jdt.internal.compiler.codegen.ClassFile
- */
-public void initializeMaxLocals(MethodBinding methodBinding) {
+    length = exceptionHandlers.length;
+    if (noExceptionHandlers.length < length) {
+      noExceptionHandlers = new ExceptionLabel[length];
+    }
+    System.arraycopy(noExceptionHandlers, 0, exceptionHandlers, 0, length);
+    exceptionHandlersNumber = 0;
 
-       maxLocals = (methodBinding == null || methodBinding.isStatic()) ? 0 : 1;
-       // take into account the synthetic parameters
-       if (methodBinding != null) {
-               if (methodBinding.isConstructor() && methodBinding.declaringClass.isNestedType()) {
-                       ReferenceBinding enclosingInstanceTypes[];
-                       if ((enclosingInstanceTypes = methodBinding.declaringClass.syntheticEnclosingInstanceTypes()) != null) {
-                               for (int i = 0, max = enclosingInstanceTypes.length; i < max; i++) {
-                                       maxLocals++; // an enclosingInstanceType can only be a reference binding. It cannot be
-                                       // LongBinding or DoubleBinding
-                               }
-                       }
-                       SyntheticArgumentBinding syntheticArguments[];
-                       if ((syntheticArguments = methodBinding.declaringClass.syntheticOuterLocalVariables()) != null) {
-                               for (int i = 0, max = syntheticArguments.length; i < max; i++) {
-                                       TypeBinding argType;
-                                       if (((argType = syntheticArguments[i].type) == LongBinding) || (argType == DoubleBinding)) {
-                                               maxLocals += 2;
-                                       } else {
-                                               maxLocals++;
-                                       }
-                               }
-                       }
-               }
-               TypeBinding[] arguments;
-               if ((arguments = methodBinding.parameters) != null) {
-                       for (int i = 0, max = arguments.length; i < max; i++) {
-                               TypeBinding argType;
-                               if (((argType = arguments[i]) == LongBinding) || (argType == DoubleBinding)) {
-                                       maxLocals += 2;
-                               } else {
-                                       maxLocals++;
-                               }
-                       }
-               }
-       }
-}
-/**
- * This methods searches for an existing entry inside the pcToSourceMap table with a pc equals to @pc.
- * If there is an existing entry it returns -1 (no insertion required).
- * Otherwise it returns the index where the entry for the pc has to be inserted.
- * This is based on the fact that the pcToSourceMap table is sorted according to the pc.
- *
- * @param int pc
- * @return int
- */
-public static int insertionIndex(int[] pcToSourceMap, int length, int pc) {
-       int g = 0;
-       int d = length - 2;
-       int m = 0;
-       while (g <= d) {
-               m = (g + d) / 2;
-               // we search only on even indexes
-               if ((m % 2) != 0)
-                       m--;
-               int currentPC = pcToSourceMap[m];
-               if (pc < currentPC) {
-                       d = m - 2;
-               } else
-                       if (pc > currentPC) {
-                               g = m + 2;
-                       } else {
-                               return -1;
-                       }
-       }
-       if (pc < pcToSourceMap[m])
-               return m;
-       return m + 2;
-}
-/**
- * We didn't call it instanceof because there is a conflit with the
- * instanceof keyword
- */
-final public void instance_of(TypeBinding typeBinding) {
-       countLabels = 0;
-       try {
-               position++;
-               bCodeStream[classFileOffset++] = OPC_instanceof;
-       } catch (IndexOutOfBoundsException e) {
-               resizeByteArray(OPC_instanceof);
-       }
-       writeUnsignedShort(constantPool.literalIndex(typeBinding));
-}
-public void invokeClassForName() {
-       // invokestatic: java.lang.Class.forName(Ljava.lang.String;)Ljava.lang.Class;
-       countLabels = 0;
-       try {
-               position++;
-               bCodeStream[classFileOffset++] = OPC_invokestatic;
-       } catch (IndexOutOfBoundsException e) {
-               resizeByteArray(OPC_invokestatic);
-       }
-       writeUnsignedShort(constantPool.literalIndexForJavaLangClassForName());
-}
+    length = labels.length;
+    if (noLabels.length < length) {
+      noLabels = new Label[length];
+    }
+    System.arraycopy(noLabels, 0, labels, 0, length);
+    countLabels = 0;
 
-public void invokeJavaLangClassDesiredAssertionStatus() {
-       // invokevirtual: java.lang.Class.desiredAssertionStatus()Z;
-       countLabels = 0;
-       stackDepth--;
-       try {
-               position++;
-               bCodeStream[classFileOffset++] = OPC_invokevirtual;
-       } catch (IndexOutOfBoundsException e) {
-               resizeByteArray(OPC_invokevirtual);
-       }
-       writeUnsignedShort(constantPool.literalIndexForJavaLangClassDesiredAssertionStatus());
-}
+    stackMax = 0;
+    stackDepth = 0;
+    maxLocals = 0;
+    position = 0;
+  }
+  /**
+   * @param methodDeclaration org.eclipse.jdt.internal.compiler.ast.AbstractMethodDeclaration
+   * @param classFile org.eclipse.jdt.internal.compiler.codegen.ClassFile
+   */
+  public void initializeMaxLocals(MethodBinding methodBinding) {
 
-public void invokeConstructorGetConstructor() {
-       // invokevirtual: java.lang.Class.getConstructor(java.lang.Class[])Ljava.lang.reflect.Constructor;
-       countLabels = 0;
-       stackDepth--;
-       try {
-               position++;
-               bCodeStream[classFileOffset++] = OPC_invokevirtual;
-       } catch (IndexOutOfBoundsException e) {
-               resizeByteArray(OPC_invokevirtual);
-       }
-       writeUnsignedShort(constantPool.literalIndexForJavaLangClassGetConstructor());
-}
-final public void invokeinterface(MethodBinding methodBinding) {
-       // initialized to 1 to take into account this  immediately
-       countLabels = 0;
-       int argCount = 1;
-       int id;
-       try {
-               position++;
-               bCodeStream[classFileOffset++] = OPC_invokeinterface;
-       } catch (IndexOutOfBoundsException e) {
-               resizeByteArray(OPC_invokeinterface);
-       }
-       writeUnsignedShort(constantPool.literalIndex(methodBinding));
-       for (int i = methodBinding.parameters.length - 1; i >= 0; i--)
-               if (((id = methodBinding.parameters[i].id) == T_double) || (id == T_long))
-                       argCount += 2;
-               else
-                       argCount += 1;
-       writeUnsignedByte(argCount);
-       // Generate a  0 into the byte array. Like the array is already fill with 0, we just need to increment
-       // the number of bytes.
-       position++;
-       classFileOffset++;
-       if (((id = methodBinding.returnType.id) == T_double) || (id == T_long))
-               stackDepth += (2 - argCount);
-       else
-               if (id == T_void)
-                       stackDepth -= argCount;
-               else
-                       stackDepth += (1 - argCount);
-       if (stackDepth > stackMax)
-               stackMax = stackDepth;
-}
-public void invokeJavaLangErrorConstructor() {
-       // invokespecial: java.lang.Error<init>(Ljava.lang.String;)V
-       countLabels = 0;
-       try {
-               position++;
-               bCodeStream[classFileOffset++] = OPC_invokespecial;
-       } catch (IndexOutOfBoundsException e) {
-               resizeByteArray(OPC_invokespecial);
-       }
-       stackDepth -= 2;
-       writeUnsignedShort(constantPool.literalIndexForJavaLangErrorConstructor());
-}
-public void invokeNoClassDefFoundErrorStringConstructor() {
-       // invokespecial: java.lang.NoClassDefFoundError.<init>(Ljava.lang.String;)V
-       countLabels = 0;
-       try {
-               position++;
-               bCodeStream[classFileOffset++] = OPC_invokespecial;
-       } catch (IndexOutOfBoundsException e) {
-               resizeByteArray(OPC_invokespecial);
-       }
-       writeUnsignedShort(constantPool.literalIndexForJavaLangNoClassDefFoundErrorStringConstructor());
-       stackDepth -= 2;
-}
-public void invokeObjectNewInstance() {
-       // invokevirtual: java.lang.reflect.Constructor.newInstance(java.lang.Object[])Ljava.lang.Object;
-       countLabels = 0;
-       stackDepth--;
-       try {
-               position++;
-               bCodeStream[classFileOffset++] = OPC_invokevirtual;
-       } catch (IndexOutOfBoundsException e) {
-               resizeByteArray(OPC_invokevirtual);
-       }
-       writeUnsignedShort(constantPool.literalIndexForJavaLangReflectConstructorNewInstance());
-}
+    maxLocals = (methodBinding == null || methodBinding.isStatic()) ? 0 : 1;
+    // take into account the synthetic parameters
+    if (methodBinding != null) {
+      if (methodBinding.isConstructor() && methodBinding.declaringClass.isNestedType()) {
+        ReferenceBinding enclosingInstanceTypes[];
+        if ((enclosingInstanceTypes = methodBinding.declaringClass.syntheticEnclosingInstanceTypes()) != null) {
+          for (int i = 0, max = enclosingInstanceTypes.length; i < max; i++) {
+            maxLocals++; // an enclosingInstanceType can only be a reference binding. It cannot be
+            // LongBinding or DoubleBinding
+          }
+        }
+        SyntheticArgumentBinding syntheticArguments[];
+        if ((syntheticArguments = methodBinding.declaringClass.syntheticOuterLocalVariables()) != null) {
+          for (int i = 0, max = syntheticArguments.length; i < max; i++) {
+            TypeBinding argType;
+            if (((argType = syntheticArguments[i].type) == LongBinding) || (argType == DoubleBinding)) {
+              maxLocals += 2;
+            } else {
+              maxLocals++;
+            }
+          }
+        }
+      }
+      TypeBinding[] arguments;
+      if ((arguments = methodBinding.parameters) != null) {
+        for (int i = 0, max = arguments.length; i < max; i++) {
+          TypeBinding argType;
+          if (((argType = arguments[i]) == LongBinding) || (argType == DoubleBinding)) {
+            maxLocals += 2;
+          } else {
+            maxLocals++;
+          }
+        }
+      }
+    }
+  }
+  /**
+   * This methods searches for an existing entry inside the pcToSourceMap table with a pc equals to @pc.
+   * If there is an existing entry it returns -1 (no insertion required).
+   * Otherwise it returns the index where the entry for the pc has to be inserted.
+   * This is based on the fact that the pcToSourceMap table is sorted according to the pc.
+   *
+   * @param int pc
+   * @return int
+   */
+  public static int insertionIndex(int[] pcToSourceMap, int length, int pc) {
+    int g = 0;
+    int d = length - 2;
+    int m = 0;
+    while (g <= d) {
+      m = (g + d) / 2;
+      // we search only on even indexes
+      if ((m % 2) != 0)
+        m--;
+      int currentPC = pcToSourceMap[m];
+      if (pc < currentPC) {
+        d = m - 2;
+      } else if (pc > currentPC) {
+        g = m + 2;
+      } else {
+        return -1;
+      }
+    }
+    if (pc < pcToSourceMap[m])
+      return m;
+    return m + 2;
+  }
+  /**
+   * We didn't call it instanceof because there is a conflit with the
+   * instanceof keyword
+   */
+  final public void instance_of(TypeBinding typeBinding) {
+    countLabels = 0;
+    try {
+      position++;
+      bCodeStream[classFileOffset++] = OPC_instanceof;
+    } catch (IndexOutOfBoundsException e) {
+      resizeByteArray(OPC_instanceof);
+    }
+    writeUnsignedShort(constantPool.literalIndex(typeBinding));
+  }
+  public void invokeClassForName() {
+    // invokestatic: java.lang.Class.forName(Ljava.lang.String;)Ljava.lang.Class;
+    countLabels = 0;
+    try {
+      position++;
+      bCodeStream[classFileOffset++] = OPC_invokestatic;
+    } catch (IndexOutOfBoundsException e) {
+      resizeByteArray(OPC_invokestatic);
+    }
+    writeUnsignedShort(constantPool.literalIndexForJavaLangClassForName());
+  }
 
-public void invokeObjectGetClass() {
-       // invokevirtual: java.lang.Object.getClass()Ljava.lang.Class;
-       countLabels = 0;
-       try {
-               position++;
-               bCodeStream[classFileOffset++] = OPC_invokevirtual;
-       } catch (IndexOutOfBoundsException e) {
-               resizeByteArray(OPC_invokevirtual);
-       }
-       writeUnsignedShort(constantPool.literalIndexForJavaLangObjectGetClass());
-}
+  public void invokeJavaLangClassDesiredAssertionStatus() {
+    // invokevirtual: java.lang.Class.desiredAssertionStatus()Z;
+    countLabels = 0;
+    stackDepth--;
+    try {
+      position++;
+      bCodeStream[classFileOffset++] = OPC_invokevirtual;
+    } catch (IndexOutOfBoundsException e) {
+      resizeByteArray(OPC_invokevirtual);
+    }
+    writeUnsignedShort(constantPool.literalIndexForJavaLangClassDesiredAssertionStatus());
+  }
 
-final public void invokespecial(MethodBinding methodBinding) {
-       // initialized to 1 to take into account this  immediately
-       countLabels = 0;
-       int argCount = 1;
-       int id;
-       try {
-               position++;
-               bCodeStream[classFileOffset++] = OPC_invokespecial;
-       } catch (IndexOutOfBoundsException e) {
-               resizeByteArray(OPC_invokespecial);
-       }
-       writeUnsignedShort(constantPool.literalIndex(methodBinding));
-       if (methodBinding.isConstructor() && methodBinding.declaringClass.isNestedType()) {
-               // enclosing instances
-               TypeBinding[] syntheticArgumentTypes = methodBinding.declaringClass.syntheticEnclosingInstanceTypes();
-               if (syntheticArgumentTypes != null) {
-                       for (int i = 0, max = syntheticArgumentTypes.length; i < max; i++) {
-                               if (((id = syntheticArgumentTypes[i].id) == T_double) || (id == T_long)) {
-                                       argCount += 2;
-                               } else {
-                                       argCount++;
-                               }
-                       }
-               }
-               // outer local variables
-               SyntheticArgumentBinding[] syntheticArguments = methodBinding.declaringClass.syntheticOuterLocalVariables();
-               if (syntheticArguments != null) {
-                       for (int i = 0, max = syntheticArguments.length; i < max; i++) {
-                               if (((id = syntheticArguments[i].type.id) == T_double) || (id == T_long)) {
-                                       argCount += 2;
-                               } else {
-                                       argCount++;
-                               }
-                       }
-               }
-       }
-       for (int i = methodBinding.parameters.length - 1; i >= 0; i--)
-               if (((id = methodBinding.parameters[i].id) == T_double) || (id == T_long))
-                       argCount += 2;
-               else
-                       argCount++;
-       if (((id = methodBinding.returnType.id) == T_double) || (id == T_long))
-               stackDepth += (2 - argCount);
-       else
-               if (id == T_void)
-                       stackDepth -= argCount;
-               else
-                       stackDepth += (1 - argCount);
-       if (stackDepth > stackMax)
-               stackMax = stackDepth;
-}
-final public void invokestatic(MethodBinding methodBinding) {
-       // initialized to 0 to take into account that there is no this for
-       // a static method
-       countLabels = 0;
-       int argCount = 0;
-       int id;
-       try {
-               position++;
-               bCodeStream[classFileOffset++] = OPC_invokestatic;
-       } catch (IndexOutOfBoundsException e) {
-               resizeByteArray(OPC_invokestatic);
-       }
-       writeUnsignedShort(constantPool.literalIndex(methodBinding));
-       for (int i = methodBinding.parameters.length - 1; i >= 0; i--)
-               if (((id = methodBinding.parameters[i].id) == T_double) || (id == T_long))
-                       argCount += 2;
-               else
-                       argCount += 1;
-       if (((id = methodBinding.returnType.id) == T_double) || (id == T_long))
-               stackDepth += (2 - argCount);
-       else
-               if (id == T_void)
-                       stackDepth -= argCount;
-               else
-                       stackDepth += (1 - argCount);
-       if (stackDepth > stackMax)
-               stackMax = stackDepth;
-}
-/**
- * The equivalent code performs a string conversion of the TOS
- * @param typeID <CODE>int</CODE>
- */
-public void invokeStringBufferAppendForType(int typeID) {
-       countLabels = 0;
-       int usedTypeID;
-       if (typeID == T_null)
-               usedTypeID = T_String;
-       else
-               usedTypeID = typeID;
-       // invokevirtual
-       try {
-               position++;
-               bCodeStream[classFileOffset++] = OPC_invokevirtual;
-       } catch (IndexOutOfBoundsException e) {
-               resizeByteArray(OPC_invokevirtual);
-       }
-       writeUnsignedShort(constantPool.literalIndexForJavaLangStringBufferAppend(typeID));
-       if ((usedTypeID == T_long) || (usedTypeID == T_double))
-               stackDepth -= 2;
-       else
-               stackDepth--;
-}
+  public void invokeConstructorGetConstructor() {
+    // invokevirtual: java.lang.Class.getConstructor(java.lang.Class[])Ljava.lang.reflect.Constructor;
+    countLabels = 0;
+    stackDepth--;
+    try {
+      position++;
+      bCodeStream[classFileOffset++] = OPC_invokevirtual;
+    } catch (IndexOutOfBoundsException e) {
+      resizeByteArray(OPC_invokevirtual);
+    }
+    writeUnsignedShort(constantPool.literalIndexForJavaLangClassGetConstructor());
+  }
+  final public void invokeinterface(MethodBinding methodBinding) {
+    // initialized to 1 to take into account this  immediately
+    countLabels = 0;
+    int argCount = 1;
+    int id;
+    try {
+      position++;
+      bCodeStream[classFileOffset++] = OPC_invokeinterface;
+    } catch (IndexOutOfBoundsException e) {
+      resizeByteArray(OPC_invokeinterface);
+    }
+    writeUnsignedShort(constantPool.literalIndex(methodBinding));
+    for (int i = methodBinding.parameters.length - 1; i >= 0; i--)
+      if (((id = methodBinding.parameters[i].id) == T_double) || (id == T_long))
+        argCount += 2;
+      else
+        argCount += 1;
+    writeUnsignedByte(argCount);
+    // Generate a  0 into the byte array. Like the array is already fill with 0, we just need to increment
+    // the number of bytes.
+    position++;
+    classFileOffset++;
+    if (((id = methodBinding.returnType.id) == T_double) || (id == T_long))
+      stackDepth += (2 - argCount);
+    else if (id == T_void)
+      stackDepth -= argCount;
+    else
+      stackDepth += (1 - argCount);
+    if (stackDepth > stackMax)
+      stackMax = stackDepth;
+  }
+  public void invokeJavaLangErrorConstructor() {
+    // invokespecial: java.lang.Error<init>(Ljava.lang.String;)V
+    countLabels = 0;
+    try {
+      position++;
+      bCodeStream[classFileOffset++] = OPC_invokespecial;
+    } catch (IndexOutOfBoundsException e) {
+      resizeByteArray(OPC_invokespecial);
+    }
+    stackDepth -= 2;
+    writeUnsignedShort(constantPool.literalIndexForJavaLangErrorConstructor());
+  }
+  public void invokeNoClassDefFoundErrorStringConstructor() {
+    // invokespecial: java.lang.NoClassDefFoundError.<init>(Ljava.lang.String;)V
+    countLabels = 0;
+    try {
+      position++;
+      bCodeStream[classFileOffset++] = OPC_invokespecial;
+    } catch (IndexOutOfBoundsException e) {
+      resizeByteArray(OPC_invokespecial);
+    }
+    writeUnsignedShort(constantPool.literalIndexForJavaLangNoClassDefFoundErrorStringConstructor());
+    stackDepth -= 2;
+  }
+  public void invokeObjectNewInstance() {
+    // invokevirtual: java.lang.reflect.Constructor.newInstance(java.lang.Object[])Ljava.lang.Object;
+    countLabels = 0;
+    stackDepth--;
+    try {
+      position++;
+      bCodeStream[classFileOffset++] = OPC_invokevirtual;
+    } catch (IndexOutOfBoundsException e) {
+      resizeByteArray(OPC_invokevirtual);
+    }
+    writeUnsignedShort(constantPool.literalIndexForJavaLangReflectConstructorNewInstance());
+  }
 
-public void invokeJavaLangAssertionErrorConstructor(int typeBindingID) {
-       // invokespecial: java.lang.AssertionError.<init>(typeBindingID)V
-       countLabels = 0;
-       try {
-               position++;
-               bCodeStream[classFileOffset++] = OPC_invokespecial;
-       } catch (IndexOutOfBoundsException e) {
-               resizeByteArray(OPC_invokespecial);
-       }
-       writeUnsignedShort(constantPool.literalIndexForJavaLangAssertionErrorConstructor(typeBindingID));
-       stackDepth -= 2;
-}
+  public void invokeObjectGetClass() {
+    // invokevirtual: java.lang.Object.getClass()Ljava.lang.Class;
+    countLabels = 0;
+    try {
+      position++;
+      bCodeStream[classFileOffset++] = OPC_invokevirtual;
+    } catch (IndexOutOfBoundsException e) {
+      resizeByteArray(OPC_invokevirtual);
+    }
+    writeUnsignedShort(constantPool.literalIndexForJavaLangObjectGetClass());
+  }
 
-public void invokeJavaLangAssertionErrorDefaultConstructor() {
-       // invokespecial: java.lang.AssertionError.<init>()V
-       countLabels = 0;
-       try {
-               position++;
-               bCodeStream[classFileOffset++] = OPC_invokespecial;
-       } catch (IndexOutOfBoundsException e) {
-               resizeByteArray(OPC_invokespecial);
-       }
-       writeUnsignedShort(constantPool.literalIndexForJavaLangAssertionErrorDefaultConstructor());
-       stackDepth --;
-}
+  final public void invokespecial(MethodBinding methodBinding) {
+    // initialized to 1 to take into account this  immediately
+    countLabels = 0;
+    int argCount = 1;
+    int id;
+    try {
+      position++;
+      bCodeStream[classFileOffset++] = OPC_invokespecial;
+    } catch (IndexOutOfBoundsException e) {
+      resizeByteArray(OPC_invokespecial);
+    }
+    writeUnsignedShort(constantPool.literalIndex(methodBinding));
+    if (methodBinding.isConstructor() && methodBinding.declaringClass.isNestedType()) {
+      // enclosing instances
+      TypeBinding[] syntheticArgumentTypes = methodBinding.declaringClass.syntheticEnclosingInstanceTypes();
+      if (syntheticArgumentTypes != null) {
+        for (int i = 0, max = syntheticArgumentTypes.length; i < max; i++) {
+          if (((id = syntheticArgumentTypes[i].id) == T_double) || (id == T_long)) {
+            argCount += 2;
+          } else {
+            argCount++;
+          }
+        }
+      }
+      // outer local variables
+      SyntheticArgumentBinding[] syntheticArguments = methodBinding.declaringClass.syntheticOuterLocalVariables();
+      if (syntheticArguments != null) {
+        for (int i = 0, max = syntheticArguments.length; i < max; i++) {
+          if (((id = syntheticArguments[i].type.id) == T_double) || (id == T_long)) {
+            argCount += 2;
+          } else {
+            argCount++;
+          }
+        }
+      }
+    }
+    for (int i = methodBinding.parameters.length - 1; i >= 0; i--)
+      if (((id = methodBinding.parameters[i].id) == T_double) || (id == T_long))
+        argCount += 2;
+      else
+        argCount++;
+    if (((id = methodBinding.returnType.id) == T_double) || (id == T_long))
+      stackDepth += (2 - argCount);
+    else if (id == T_void)
+      stackDepth -= argCount;
+    else
+      stackDepth += (1 - argCount);
+    if (stackDepth > stackMax)
+      stackMax = stackDepth;
+  }
+  final public void invokestatic(MethodBinding methodBinding) {
+    // initialized to 0 to take into account that there is no this for
+    // a static method
+    countLabels = 0;
+    int argCount = 0;
+    int id;
+    try {
+      position++;
+      bCodeStream[classFileOffset++] = OPC_invokestatic;
+    } catch (IndexOutOfBoundsException e) {
+      resizeByteArray(OPC_invokestatic);
+    }
+    writeUnsignedShort(constantPool.literalIndex(methodBinding));
+    for (int i = methodBinding.parameters.length - 1; i >= 0; i--)
+      if (((id = methodBinding.parameters[i].id) == T_double) || (id == T_long))
+        argCount += 2;
+      else
+        argCount += 1;
+    if (((id = methodBinding.returnType.id) == T_double) || (id == T_long))
+      stackDepth += (2 - argCount);
+    else if (id == T_void)
+      stackDepth -= argCount;
+    else
+      stackDepth += (1 - argCount);
+    if (stackDepth > stackMax)
+      stackMax = stackDepth;
+  }
+  /**
+   * The equivalent code performs a string conversion of the TOS
+   * @param typeID <CODE>int</CODE>
+   */
+  public void invokeStringBufferAppendForType(int typeID) {
+    countLabels = 0;
+    int usedTypeID;
+    if (typeID == T_null)
+      usedTypeID = T_String;
+    else
+      usedTypeID = typeID;
+    // invokevirtual
+    try {
+      position++;
+      bCodeStream[classFileOffset++] = OPC_invokevirtual;
+    } catch (IndexOutOfBoundsException e) {
+      resizeByteArray(OPC_invokevirtual);
+    }
+    writeUnsignedShort(constantPool.literalIndexForJavaLangStringBufferAppend(typeID));
+    if ((usedTypeID == T_long) || (usedTypeID == T_double))
+      stackDepth -= 2;
+    else
+      stackDepth--;
+  }
 
-public void invokeStringBufferDefaultConstructor() {
-       // invokespecial: java.lang.StringBuffer.<init>()V
-       countLabels = 0;
-       try {
-               position++;
-               bCodeStream[classFileOffset++] = OPC_invokespecial;
-       } catch (IndexOutOfBoundsException e) {
-               resizeByteArray(OPC_invokespecial);
-       }
-       writeUnsignedShort(constantPool.literalIndexForJavaLangStringBufferDefaultConstructor());
-       stackDepth--;
-}
-public void invokeStringBufferStringConstructor() {
-       // invokespecial: java.lang.StringBuffer.<init>(Ljava.lang.String;)V
-       countLabels = 0;
-       try {
-               position++;
-               bCodeStream[classFileOffset++] = OPC_invokespecial;
-       } catch (IndexOutOfBoundsException e) {
-               resizeByteArray(OPC_invokespecial);
-       }
-       writeUnsignedShort(constantPool.literalIndexForJavaLangStringBufferConstructor());
-       stackDepth -= 2;
-}
+  public void invokeJavaLangAssertionErrorConstructor(int typeBindingID) {
+    // invokespecial: java.lang.AssertionError.<init>(typeBindingID)V
+    countLabels = 0;
+    try {
+      position++;
+      bCodeStream[classFileOffset++] = OPC_invokespecial;
+    } catch (IndexOutOfBoundsException e) {
+      resizeByteArray(OPC_invokespecial);
+    }
+    writeUnsignedShort(constantPool.literalIndexForJavaLangAssertionErrorConstructor(typeBindingID));
+    stackDepth -= 2;
+  }
 
-public void invokeStringBufferToString() {
-       // invokevirtual: StringBuffer.toString()Ljava.lang.String;
-       countLabels = 0;
-       try {
-               position++;
-               bCodeStream[classFileOffset++] = OPC_invokevirtual;
-       } catch (IndexOutOfBoundsException e) {
-               resizeByteArray(OPC_invokevirtual);
-       }
-       writeUnsignedShort(constantPool.literalIndexForJavaLangStringBufferToString());
-}
-public void invokeStringIntern() {
-       // invokevirtual: java.lang.String.intern()
-       countLabels = 0;
-       try {
-               position++;
-               bCodeStream[classFileOffset++] = OPC_invokevirtual;
-       } catch (IndexOutOfBoundsException e) {
-               resizeByteArray(OPC_invokevirtual);
-       }
-       writeUnsignedShort(constantPool.literalIndexForJavaLangStringIntern());
-}
-public void invokeStringValueOf(int typeID) {
-       // invokestatic: java.lang.String.valueOf(argumentType)
-       countLabels = 0;
-       try {
-               position++;
-               bCodeStream[classFileOffset++] = OPC_invokestatic;
-       } catch (IndexOutOfBoundsException e) {
-               resizeByteArray(OPC_invokestatic);
-       }
-       writeUnsignedShort(constantPool.literalIndexForJavaLangStringValueOf(typeID));
-}
-public void invokeSystemExit() {
-       // invokestatic: java.lang.System.exit(I)
-       countLabels = 0;
-       try {
-               position++;
-               bCodeStream[classFileOffset++] = OPC_invokestatic;
-       } catch (IndexOutOfBoundsException e) {
-               resizeByteArray(OPC_invokestatic);
-       }
-       writeUnsignedShort(constantPool.literalIndexForJavaLangSystemExitInt());
-       stackDepth--; // int argument
-}
-public void invokeThrowableGetMessage() {
-       // invokevirtual: java.lang.Throwable.getMessage()Ljava.lang.String;
-       countLabels = 0;
-       try {
-               position++;
-               bCodeStream[classFileOffset++] = OPC_invokevirtual;
-       } catch (IndexOutOfBoundsException e) {
-               resizeByteArray(OPC_invokevirtual);
-       }
-       writeUnsignedShort(constantPool.literalIndexForJavaLangThrowableGetMessage());
-}
-final public void invokevirtual(MethodBinding methodBinding) {
-       // initialized to 1 to take into account this  immediately
-       countLabels = 0;
-       int argCount = 1;
-       int id;
-       try {
-               position++;
-               bCodeStream[classFileOffset++] = OPC_invokevirtual;
-       } catch (IndexOutOfBoundsException e) {
-               resizeByteArray(OPC_invokevirtual);
-       }
-       writeUnsignedShort(constantPool.literalIndex(methodBinding));
-       for (int i = methodBinding.parameters.length - 1; i >= 0; i--)
-               if (((id = methodBinding.parameters[i].id) == T_double) || (id == T_long))
-                       argCount += 2;
-               else
-                       argCount++;
-       if (((id = methodBinding.returnType.id) == T_double) || (id == T_long))
-               stackDepth += (2 - argCount);
-       else
-               if (id == T_void)
-                       stackDepth -= argCount;
-               else
-                       stackDepth += (1 - argCount);
-       if (stackDepth > stackMax)
-               stackMax = stackDepth;
-}
-final public void ior() {
-       countLabels = 0;
-       stackDepth--;
-       try {
-               position++;
-               bCodeStream[classFileOffset++] = OPC_ior;
-       } catch (IndexOutOfBoundsException e) {
-               resizeByteArray(OPC_ior);
-       }
-}
-final public void irem() {
-       countLabels = 0;
-       stackDepth--;
-       try {
-               position++;
-               bCodeStream[classFileOffset++] = OPC_irem;
-       } catch (IndexOutOfBoundsException e) {
-               resizeByteArray(OPC_irem);
-       }
-}
-final public void ireturn() {
-       countLabels = 0;
-       stackDepth--;
-       // the stackDepth should be equal to 0 
-       try {
-               position++;
-               bCodeStream[classFileOffset++] = OPC_ireturn;
-       } catch (IndexOutOfBoundsException e) {
-               resizeByteArray(OPC_ireturn);
-       }
-}
-public boolean isDefinitelyAssigned(Scope scope, int initStateIndex, LocalVariableBinding local) {
-       // Dependant of UnconditionalFlowInfo.isDefinitelyAssigned(..)
-       if (initStateIndex == -1)
-               return false;
-       if (local.isArgument) {
-               return true;
-       }
-       int position = local.id + maxFieldCount;
-       MethodScope methodScope = scope.methodScope();
-       // id is zero-based
-       if (position < UnconditionalFlowInfo.BitCacheSize) {
-               return (methodScope.definiteInits[initStateIndex] & (1L << position)) != 0; // use bits
-       }
-       // use extra vector
-       long[] extraInits = methodScope.extraDefiniteInits[initStateIndex];
-       if (extraInits == null)
-               return false; // if vector not yet allocated, then not initialized
-       int vectorIndex;
-       if ((vectorIndex = (position / UnconditionalFlowInfo.BitCacheSize) - 1) >= extraInits.length)
-               return false; // if not enough room in vector, then not initialized 
-       return ((extraInits[vectorIndex]) & (1L << (position % UnconditionalFlowInfo.BitCacheSize))) != 0;
-}
-final public void ishl() {
-       countLabels = 0;
-       stackDepth--;
-       try {
-               position++;
-               bCodeStream[classFileOffset++] = OPC_ishl;
-       } catch (IndexOutOfBoundsException e) {
-               resizeByteArray(OPC_ishl);
-       }
-}
-final public void ishr() {
-       countLabels = 0;
-       stackDepth--;
-       try {
-               position++;
-               bCodeStream[classFileOffset++] = OPC_ishr;
-       } catch (IndexOutOfBoundsException e) {
-               resizeByteArray(OPC_ishr);
-       }
-}
-final public void istore(int iArg) {
-       countLabels = 0;
-       stackDepth--;
-       if (maxLocals <= iArg) {
-               maxLocals = iArg + 1;
-       }
-       if (iArg > 255) { // Widen
-               try {
-                       position++;
-                       bCodeStream[classFileOffset++] = OPC_wide;
-               } catch (IndexOutOfBoundsException e) {
-                       resizeByteArray(OPC_wide);
-               }
-               try {
-                       position++;
-                       bCodeStream[classFileOffset++] = OPC_istore;
-               } catch (IndexOutOfBoundsException e) {
-                       resizeByteArray(OPC_istore);
-               }
-               writeUnsignedShort(iArg);
-       } else {
-               try {
-                       position++;
-                       bCodeStream[classFileOffset++] = OPC_istore;
-               } catch (IndexOutOfBoundsException e) {
-                       resizeByteArray(OPC_istore);
-               }
-               try {
-                       position++;
-                       bCodeStream[classFileOffset++] = (byte) iArg;
-               } catch (IndexOutOfBoundsException e) {
-                       resizeByteArray((byte) iArg);
-               }
-       }
-}
-final public void istore_0() {
-       countLabels = 0;
-       stackDepth--;
-       if (maxLocals == 0) {
-               maxLocals = 1;
-       }
-       try {
-               position++;
-               bCodeStream[classFileOffset++] = OPC_istore_0;
-       } catch (IndexOutOfBoundsException e) {
-               resizeByteArray(OPC_istore_0);
-       }
-}
-final public void istore_1() {
-       countLabels = 0;
-       stackDepth--;
-       if (maxLocals <= 1) {
-               maxLocals = 2;
-       }
-       try {
-               position++;
-               bCodeStream[classFileOffset++] = OPC_istore_1;
-       } catch (IndexOutOfBoundsException e) {
-               resizeByteArray(OPC_istore_1);
-       }
-}
-final public void istore_2() {
-       countLabels = 0;
-       stackDepth--;
-       if (maxLocals <= 2) {
-               maxLocals = 3;
-       }
-       try {
-               position++;
-               bCodeStream[classFileOffset++] = OPC_istore_2;
-       } catch (IndexOutOfBoundsException e) {
-               resizeByteArray(OPC_istore_2);
-       }
-}
-final public void istore_3() {
-       countLabels = 0;
-       stackDepth--;
-       if (maxLocals <= 3) {
-               maxLocals = 4;
-       }
-       try {
-               position++;
-               bCodeStream[classFileOffset++] = OPC_istore_3;
-       } catch (IndexOutOfBoundsException e) {
-               resizeByteArray(OPC_istore_3);
-       }
-}
-final public void isub() {
-       countLabels = 0;
-       stackDepth--;
-       try {
-               position++;
-               bCodeStream[classFileOffset++] = OPC_isub;
-       } catch (IndexOutOfBoundsException e) {
-               resizeByteArray(OPC_isub);
-       }
-}
-final public void iushr() {
-       countLabels = 0;
-       stackDepth--;
-       try {
-               position++;
-               bCodeStream[classFileOffset++] = OPC_iushr;
-       } catch (IndexOutOfBoundsException e) {
-               resizeByteArray(OPC_iushr);
-       }
-}
-final public void ixor() {
-       countLabels = 0;
-       stackDepth--;
-       try {
-               position++;
-               bCodeStream[classFileOffset++] = OPC_ixor;
-       } catch (IndexOutOfBoundsException e) {
-               resizeByteArray(OPC_ixor);
-       }
-}
-final public void jsr(Label lbl) {
-       countLabels = 0;
-       try {
-               position++;
-               bCodeStream[classFileOffset++] = OPC_jsr;
-       } catch (IndexOutOfBoundsException e) {
-               resizeByteArray(OPC_jsr);
-       }
-       lbl.branch();
-}
-final public void jsr_w(Label lbl) {
-       countLabels = 0;
-       try {
-               position++;
-               bCodeStream[classFileOffset++] = OPC_jsr_w;
-       } catch (IndexOutOfBoundsException e) {
-               resizeByteArray(OPC_jsr_w);
-       }
-       lbl.branchWide();
-}
-final public void l2d() {
-       countLabels = 0;
-       try {
-               position++;
-               bCodeStream[classFileOffset++] = OPC_l2d;
-       } catch (IndexOutOfBoundsException e) {
-               resizeByteArray(OPC_l2d);
-       }
-}
-final public void l2f() {
-       countLabels = 0;
-       stackDepth--;
-       try {
-               position++;
-               bCodeStream[classFileOffset++] = OPC_l2f;
-       } catch (IndexOutOfBoundsException e) {
-               resizeByteArray(OPC_l2f);
-       }
-}
-final public void l2i() {
-       countLabels = 0;
-       stackDepth--;
-       try {
-               position++;
-               bCodeStream[classFileOffset++] = OPC_l2i;
-       } catch (IndexOutOfBoundsException e) {
-               resizeByteArray(OPC_l2i);
-       }
-}
-final public void ladd() {
-       countLabels = 0;
-       stackDepth -= 2;
-       try {
-               position++;
-               bCodeStream[classFileOffset++] = OPC_ladd;
-       } catch (IndexOutOfBoundsException e) {
-               resizeByteArray(OPC_ladd);
-       }
-}
-final public void laload() {
-       countLabels = 0;
-       try {
-               position++;
-               bCodeStream[classFileOffset++] = OPC_laload;
-       } catch (IndexOutOfBoundsException e) {
-               resizeByteArray(OPC_laload);
-       }
-}
-final public void land() {
-       countLabels = 0;
-       stackDepth -= 2;
-       try {
-               position++;
-               bCodeStream[classFileOffset++] = OPC_land;
-       } catch (IndexOutOfBoundsException e) {
-               resizeByteArray(OPC_land);
-       }
-}
-final public void lastore() {
-       countLabels = 0;
-       stackDepth -= 4;
-       try {
-               position++;
-               bCodeStream[classFileOffset++] = OPC_lastore;
-       } catch (IndexOutOfBoundsException e) {
-               resizeByteArray(OPC_lastore);
-       }
-}
-final public void lcmp() {
-       countLabels = 0;
-       stackDepth -= 3;
-       try {
-               position++;
-               bCodeStream[classFileOffset++] = OPC_lcmp;
-       } catch (IndexOutOfBoundsException e) {
-               resizeByteArray(OPC_lcmp);
-       }
-}
-final public void lconst_0() {
-       countLabels = 0;
-       stackDepth += 2;
-       if (stackDepth > stackMax)
-               stackMax = stackDepth;
-       try {
-               position++;
-               bCodeStream[classFileOffset++] = OPC_lconst_0;
-       } catch (IndexOutOfBoundsException e) {
-               resizeByteArray(OPC_lconst_0);
-       }
-}
-final public void lconst_1() {
-       countLabels = 0;
-       stackDepth += 2;
-       if (stackDepth > stackMax)
-               stackMax = stackDepth;
-       try {
-               position++;
-               bCodeStream[classFileOffset++] = OPC_lconst_1;
-       } catch (IndexOutOfBoundsException e) {
-               resizeByteArray(OPC_lconst_1);
-       }
-}
-final public void ldc(float constant) {
-       countLabels = 0;
-       int index = constantPool.literalIndex(constant);
-       stackDepth++;
-       if (stackDepth > stackMax)
-               stackMax = stackDepth;
-       if (index > 255) {
-               // Generate a ldc_w
-               try {
-                       position++;
-                       bCodeStream[classFileOffset++] = OPC_ldc_w;
-               } catch (IndexOutOfBoundsException e) {
-                       resizeByteArray(OPC_ldc_w);
-               }
-               writeUnsignedShort(index);
-       } else {
-               // Generate a ldc
-               try {
-                       position++;
-                       bCodeStream[classFileOffset++] = OPC_ldc;
-               } catch (IndexOutOfBoundsException e) {
-                       resizeByteArray(OPC_ldc);
-               }
-               writeUnsignedByte(index);
-       }
-}
-final public void ldc(int constant) {
-       countLabels = 0;
-       int index = constantPool.literalIndex(constant);
-       stackDepth++;
-       if (stackDepth > stackMax)
-               stackMax = stackDepth;
-       if (index > 255) {
-               // Generate a ldc_w
-               try {
-                       position++;
-                       bCodeStream[classFileOffset++] = OPC_ldc_w;
-               } catch (IndexOutOfBoundsException e) {
-                       resizeByteArray(OPC_ldc_w);
-               }
-               writeUnsignedShort(index);
-       } else {
-               // Generate a ldc
-               try {
-                       position++;
-                       bCodeStream[classFileOffset++] = OPC_ldc;
-               } catch (IndexOutOfBoundsException e) {
-                       resizeByteArray(OPC_ldc);
-               }
-               writeUnsignedByte(index);
-       }
-}
-final public void ldc(String constant) {
-       countLabels = 0;
-       int currentConstantPoolIndex = constantPool.currentIndex;
-       int currentConstantPoolOffset = constantPool.currentOffset;
-       int currentCodeStreamPosition = position;
-       int index = constantPool.literalIndexForLdc(constant.toCharArray());
-       if (index > 0) {
-               // the string already exists inside the constant pool
-               // we reuse the same index
-               stackDepth++;
-               if (stackDepth > stackMax)
-                       stackMax = stackDepth;
-               if (index > 255) {
-                       // Generate a ldc_w
-                       try {
-                               position++;
-                               bCodeStream[classFileOffset++] = OPC_ldc_w;
-                       } catch (IndexOutOfBoundsException e) {
-                               resizeByteArray(OPC_ldc_w);
-                       }
-                       writeUnsignedShort(index);
-               } else {
-                       // Generate a ldc
-                       try {
-                               position++;
-                               bCodeStream[classFileOffset++] = OPC_ldc;
-                       } catch (IndexOutOfBoundsException e) {
-                               resizeByteArray(OPC_ldc);
-                       }
-                       writeUnsignedByte(index);
-               }
-       } else {
-               // the string is too big to be utf8-encoded in one pass.
-               // we have to split it into different pieces.
-               // first we clean all side-effects due to the code above
-               // this case is very rare, so we can afford to lose time to handle it
-               char[] constantChars = constant.toCharArray();
-               position = currentCodeStreamPosition;
-               constantPool.currentIndex = currentConstantPoolIndex;
-               constantPool.currentOffset = currentConstantPoolOffset;
-               constantPool.stringCache.remove(constantChars);
-               constantPool.UTF8Cache.remove(constantChars);
-               int i = 0;
-               int length = 0;
-               int constantLength = constant.length();
-               byte[] utf8encoding = new byte[Math.min(constantLength + 100, 65535)];
-               int utf8encodingLength = 0;
-               while ((length < 65532) && (i < constantLength)) {
-                       char current = constantChars[i];
-                       // we resize the byte array immediately if necessary
-                       if (length + 3 > (utf8encodingLength = utf8encoding.length)) {
-                               System.arraycopy(utf8encoding, 0, (utf8encoding = new byte[Math.min(utf8encodingLength + 100, 65535)]), 0, length);
-                       }
-                       if ((current >= 0x0001) && (current <= 0x007F)) {
-                               // we only need one byte: ASCII table
-                               utf8encoding[length++] = (byte) current;
-                       } else {
-                               if (current > 0x07FF) {
-                                       // we need 3 bytes
-                                       utf8encoding[length++] = (byte) (0xE0 | ((current >> 12) & 0x0F)); // 0xE0 = 1110 0000
-                                       utf8encoding[length++] = (byte) (0x80 | ((current >> 6) & 0x3F)); // 0x80 = 1000 0000
-                                       utf8encoding[length++] = (byte) (0x80 | (current & 0x3F)); // 0x80 = 1000 0000
-                               } else {
-                                       // we can be 0 or between 0x0080 and 0x07FF
-                                       // In that case we only need 2 bytes
-                                       utf8encoding[length++] = (byte) (0xC0 | ((current >> 6) & 0x1F)); // 0xC0 = 1100 0000
-                                       utf8encoding[length++] = (byte) (0x80 | (current & 0x3F)); // 0x80 = 1000 0000
-                               }
-                       }
-                       i++;
-               }
-               // check if all the string is encoded (PR 1PR2DWJ)
-               // the string is too big to be encoded in one pass
-               newStringBuffer();
-               dup();
-               // write the first part
-               char[] subChars = new char[i];
-               System.arraycopy(constantChars, 0, subChars, 0, i);
-               System.arraycopy(utf8encoding, 0, (utf8encoding = new byte[length]), 0, length);
-               index = constantPool.literalIndex(subChars, utf8encoding);
-               stackDepth++;
-               if (stackDepth > stackMax)
-                       stackMax = stackDepth;
-               if (index > 255) {
-                       // Generate a ldc_w
-                       try {
-                               position++;
-                               bCodeStream[classFileOffset++] = OPC_ldc_w;
-                       } catch (IndexOutOfBoundsException e) {
-                               resizeByteArray(OPC_ldc_w);
-                       }
-                       writeUnsignedShort(index);
-               } else {
-                       // Generate a ldc
-                       try {
-                               position++;
-                               bCodeStream[classFileOffset++] = OPC_ldc;
-                       } catch (IndexOutOfBoundsException e) {
-                               resizeByteArray(OPC_ldc);
-                       }
-                       writeUnsignedByte(index);
-               }
-               // write the remaining part
-               invokeStringBufferStringConstructor();
-               while (i < constantLength) {
-                       length = 0;
-                       utf8encoding = new byte[Math.min(constantLength - i + 100, 65535)];
-                       int startIndex = i;
-                       while ((length < 65532) && (i < constantLength)) {
-                               char current = constantChars[i];
-                               // we resize the byte array immediately if necessary
-                               if (constantLength + 2 > (utf8encodingLength = utf8encoding.length)) {
-                                       System.arraycopy(utf8encoding, 0, (utf8encoding = new byte[Math.min(utf8encodingLength + 100, 65535)]), 0, length);
-                               }
-                               if ((current >= 0x0001) && (current <= 0x007F)) {
-                                       // we only need one byte: ASCII table
-                                       utf8encoding[length++] = (byte) current;
-                               } else {
-                                       if (current > 0x07FF) {
-                                               // we need 3 bytes
-                                               utf8encoding[length++] = (byte) (0xE0 | ((current >> 12) & 0x0F)); // 0xE0 = 1110 0000
-                                               utf8encoding[length++] = (byte) (0x80 | ((current >> 6) & 0x3F)); // 0x80 = 1000 0000
-                                               utf8encoding[length++] = (byte) (0x80 | (current & 0x3F)); // 0x80 = 1000 0000
-                                       } else {
-                                               // we can be 0 or between 0x0080 and 0x07FF
-                                               // In that case we only need 2 bytes
-                                               utf8encoding[length++] = (byte) (0xC0 | ((current >> 6) & 0x1F)); // 0xC0 = 1100 0000
-                                               utf8encoding[length++] = (byte) (0x80 | (current & 0x3F)); // 0x80 = 1000 0000
-                                       }
-                               }
-                               i++;
-                       }
-                       // the next part is done
-                       subChars = new char[i - startIndex];
-                       System.arraycopy(constantChars, startIndex, subChars, 0, i - startIndex);
-                       System.arraycopy(utf8encoding, 0, (utf8encoding = new byte[length]), 0, length);
-                       index = constantPool.literalIndex(subChars, utf8encoding);
-                       stackDepth++;
-                       if (stackDepth > stackMax)
-                               stackMax = stackDepth;
-                       if (index > 255) {
-                               // Generate a ldc_w
-                               try {
-                                       position++;
-                                       bCodeStream[classFileOffset++] = OPC_ldc_w;
-                               } catch (IndexOutOfBoundsException e) {
-                                       resizeByteArray(OPC_ldc_w);
-                               }
-                               writeUnsignedShort(index);
-                       } else {
-                               // Generate a ldc
-                               try {
-                                       position++;
-                                       bCodeStream[classFileOffset++] = OPC_ldc;
-                               } catch (IndexOutOfBoundsException e) {
-                                       resizeByteArray(OPC_ldc);
-                               }
-                               writeUnsignedByte(index);
-                       }
-                       // now on the stack it should be a StringBuffer and a string.
-                       invokeStringBufferAppendForType(T_String);
-               }
-               invokeStringBufferToString();
-               invokeStringIntern();
-       }
-}
-final public void ldc2_w(double constant) {
-       countLabels = 0;
-       int index = constantPool.literalIndex(constant);
-       stackDepth += 2;
-       if (stackDepth > stackMax)
-               stackMax = stackDepth;
-       // Generate a ldc2_w
-       try {
-               position++;
-               bCodeStream[classFileOffset++] = OPC_ldc2_w;
-       } catch (IndexOutOfBoundsException e) {
-               resizeByteArray(OPC_ldc2_w);
-       }
-       writeUnsignedShort(index);
-}
-final public void ldc2_w(long constant) {
-       countLabels = 0;
-       int index = constantPool.literalIndex(constant);
-       stackDepth += 2;
-       if (stackDepth > stackMax)
-               stackMax = stackDepth;
-       // Generate a ldc2_w
-       try {
-               position++;
-               bCodeStream[classFileOffset++] = OPC_ldc2_w;
-       } catch (IndexOutOfBoundsException e) {
-               resizeByteArray(OPC_ldc2_w);
-       }
-       writeUnsignedShort(index);
-}
-final public void ldiv() {
-       countLabels = 0;
-       stackDepth -= 2;
-       try {
-               position++;
-               bCodeStream[classFileOffset++] = OPC_ldiv;
-       } catch (IndexOutOfBoundsException e) {
-               resizeByteArray(OPC_ldiv);
-       }
-}
-final public void lload(int iArg) {
-       countLabels = 0;
-       stackDepth += 2;
-       if (maxLocals <= iArg + 1) {
-               maxLocals = iArg + 2;
-       }
-       if (stackDepth > stackMax)
-               stackMax = stackDepth;
-       if (iArg > 255) { // Widen
-               try {
-                       position++;
-                       bCodeStream[classFileOffset++] = OPC_wide;
-               } catch (IndexOutOfBoundsException e) {
-                       resizeByteArray(OPC_wide);
-               }
-               try {
-                       position++;
-                       bCodeStream[classFileOffset++] = OPC_lload;
-               } catch (IndexOutOfBoundsException e) {
-                       resizeByteArray(OPC_lload);
-               }
-               writeUnsignedShort(iArg);
-       } else {
-               try {
-                       position++;
-                       bCodeStream[classFileOffset++] = OPC_lload;
-               } catch (IndexOutOfBoundsException e) {
-                       resizeByteArray(OPC_lload);
-               }
-               try {
-                       position++;
-                       bCodeStream[classFileOffset++] = (byte) iArg;
-               } catch (IndexOutOfBoundsException e) {
-                       resizeByteArray((byte) iArg);
-               }
-       }
-}
-final public void lload_0() {
-       countLabels = 0;
-       stackDepth += 2;
-       if (maxLocals < 2) {
-               maxLocals = 2;
-       }
-       if (stackDepth > stackMax)
-               stackMax = stackDepth;
-       try {
-               position++;
-               bCodeStream[classFileOffset++] = OPC_lload_0;
-       } catch (IndexOutOfBoundsException e) {
-               resizeByteArray(OPC_lload_0);
-       }
-}
-final public void lload_1() {
-       countLabels = 0;
-       stackDepth += 2;
-       if (maxLocals < 3) {
-               maxLocals = 3;
-       }
-       if (stackDepth > stackMax)
-               stackMax = stackDepth;
-       try {
-               position++;
-               bCodeStream[classFileOffset++] = OPC_lload_1;
-       } catch (IndexOutOfBoundsException e) {
-               resizeByteArray(OPC_lload_1);
-       }
-}
-final public void lload_2() {
-       countLabels = 0;
-       stackDepth += 2;
-       if (maxLocals < 4) {
-               maxLocals = 4;
-       }
-       if (stackDepth > stackMax)
-               stackMax = stackDepth;
-       try {
-               position++;
-               bCodeStream[classFileOffset++] = OPC_lload_2;
-       } catch (IndexOutOfBoundsException e) {
-               resizeByteArray(OPC_lload_2);
-       }
-}
-final public void lload_3() {
-       countLabels = 0;
-       stackDepth += 2;
-       if (maxLocals < 5) {
-               maxLocals = 5;
-       }
-       if (stackDepth > stackMax)
-               stackMax = stackDepth;
-       try {
-               position++;
-               bCodeStream[classFileOffset++] = OPC_lload_3;
-       } catch (IndexOutOfBoundsException e) {
-               resizeByteArray(OPC_lload_3);
-       }
-}
-final public void lmul() {
-       countLabels = 0;
-       stackDepth -= 2;
-       try {
-               position++;
-               bCodeStream[classFileOffset++] = OPC_lmul;
-       } catch (IndexOutOfBoundsException e) {
-               resizeByteArray(OPC_lmul);
-       }
-}
-final public void lneg() {
-       countLabels = 0;
-       try {
-               position++;
-               bCodeStream[classFileOffset++] = OPC_lneg;
-       } catch (IndexOutOfBoundsException e) {
-               resizeByteArray(OPC_lneg);
-       }
-}
-public final void load(LocalVariableBinding localBinding) {
-       countLabels = 0;
-       TypeBinding typeBinding = localBinding.type;
-       int resolvedPosition = localBinding.resolvedPosition;
-       // Using dedicated int bytecode
-       if (typeBinding == IntBinding) {
-               switch (resolvedPosition) {
-                       case 0 :
-                               this.iload_0();
-                               break;
-                       case 1 :
-                               this.iload_1();
-                               break;
-                       case 2 :
-                               this.iload_2();
-                               break;
-                       case 3 :
-                               this.iload_3();
-                               break;
-                       default :
-                               this.iload(resolvedPosition);
-               }
-               return;
-       }
-       // Using dedicated float bytecode
-       if (typeBinding == FloatBinding) {
-               switch (resolvedPosition) {
-                       case 0 :
-                               this.fload_0();
-                               break;
-                       case 1 :
-                               this.fload_1();
-                               break;
-                       case 2 :
-                               this.fload_2();
-                               break;
-                       case 3 :
-                               this.fload_3();
-                               break;
-                       default :
-                               this.fload(resolvedPosition);
-               }
-               return;
-       }
-       // Using dedicated long bytecode
-       if (typeBinding == LongBinding) {
-               switch (resolvedPosition) {
-                       case 0 :
-                               this.lload_0();
-                               break;
-                       case 1 :
-                               this.lload_1();
-                               break;
-                       case 2 :
-                               this.lload_2();
-                               break;
-                       case 3 :
-                               this.lload_3();
-                               break;
-                       default :
-                               this.lload(resolvedPosition);
-               }
-               return;
-       }
-       // Using dedicated double bytecode
-       if (typeBinding == DoubleBinding) {
-               switch (resolvedPosition) {
-                       case 0 :
-                               this.dload_0();
-                               break;
-                       case 1 :
-                               this.dload_1();
-                               break;
-                       case 2 :
-                               this.dload_2();
-                               break;
-                       case 3 :
-                               this.dload_3();
-                               break;
-                       default :
-                               this.dload(resolvedPosition);
-               }
-               return;
-       }
-       // boolean, byte, char and short are handled as int
-       if ((typeBinding == ByteBinding) || (typeBinding == CharBinding) || (typeBinding == BooleanBinding) || (typeBinding == ShortBinding)) {
-               switch (resolvedPosition) {
-                       case 0 :
-                               this.iload_0();
-                               break;
-                       case 1 :
-                               this.iload_1();
-                               break;
-                       case 2 :
-                               this.iload_2();
-                               break;
-                       case 3 :
-                               this.iload_3();
-                               break;
-                       default :
-                               this.iload(resolvedPosition);
-               }
-               return;
-       }
+  public void invokeJavaLangAssertionErrorDefaultConstructor() {
+    // invokespecial: java.lang.AssertionError.<init>()V
+    countLabels = 0;
+    try {
+      position++;
+      bCodeStream[classFileOffset++] = OPC_invokespecial;
+    } catch (IndexOutOfBoundsException e) {
+      resizeByteArray(OPC_invokespecial);
+    }
+    writeUnsignedShort(constantPool.literalIndexForJavaLangAssertionErrorDefaultConstructor());
+    stackDepth--;
+  }
 
-       // Reference object
-       switch (resolvedPosition) {
-               case 0 :
-                       this.aload_0();
-                       break;
-               case 1 :
-                       this.aload_1();
-                       break;
-               case 2 :
-                       this.aload_2();
-                       break;
-               case 3 :
-                       this.aload_3();
-                       break;
-               default :
-                       this.aload(resolvedPosition);
-       }
-}
-public final void load(TypeBinding typeBinding, int resolvedPosition) {
-       countLabels = 0;
-       // Using dedicated int bytecode
-       if (typeBinding == IntBinding) {
-               switch (resolvedPosition) {
-                       case 0 :
-                               this.iload_0();
-                               break;
-                       case 1 :
-                               this.iload_1();
-                               break;
-                       case 2 :
-                               this.iload_2();
-                               break;
-                       case 3 :
-                               this.iload_3();
-                               break;
-                       default :
-                               this.iload(resolvedPosition);
-               }
-               return;
-       }
-       // Using dedicated float bytecode
-       if (typeBinding == FloatBinding) {
-               switch (resolvedPosition) {
-                       case 0 :
-                               this.fload_0();
-                               break;
-                       case 1 :
-                               this.fload_1();
-                               break;
-                       case 2 :
-                               this.fload_2();
-                               break;
-                       case 3 :
-                               this.fload_3();
-                               break;
-                       default :
-                               this.fload(resolvedPosition);
-               }
-               return;
-       }
-       // Using dedicated long bytecode
-       if (typeBinding == LongBinding) {
-               switch (resolvedPosition) {
-                       case 0 :
-                               this.lload_0();
-                               break;
-                       case 1 :
-                               this.lload_1();
-                               break;
-                       case 2 :
-                               this.lload_2();
-                               break;
-                       case 3 :
-                               this.lload_3();
-                               break;
-                       default :
-                               this.lload(resolvedPosition);
-               }
-               return;
-       }
-       // Using dedicated double bytecode
-       if (typeBinding == DoubleBinding) {
-               switch (resolvedPosition) {
-                       case 0 :
-                               this.dload_0();
-                               break;
-                       case 1 :
-                               this.dload_1();
-                               break;
-                       case 2 :
-                               this.dload_2();
-                               break;
-                       case 3 :
-                               this.dload_3();
-                               break;
-                       default :
-                               this.dload(resolvedPosition);
-               }
-               return;
-       }
-       // boolean, byte, char and short are handled as int
-       if ((typeBinding == ByteBinding) || (typeBinding == CharBinding) || (typeBinding == BooleanBinding) || (typeBinding == ShortBinding)) {
-               switch (resolvedPosition) {
-                       case 0 :
-                               this.iload_0();
-                               break;
-                       case 1 :
-                               this.iload_1();
-                               break;
-                       case 2 :
-                               this.iload_2();
-                               break;
-                       case 3 :
-                               this.iload_3();
-                               break;
-                       default :
-                               this.iload(resolvedPosition);
-               }
-               return;
-       }
+  public void invokeStringBufferDefaultConstructor() {
+    // invokespecial: java.lang.StringBuffer.<init>()V
+    countLabels = 0;
+    try {
+      position++;
+      bCodeStream[classFileOffset++] = OPC_invokespecial;
+    } catch (IndexOutOfBoundsException e) {
+      resizeByteArray(OPC_invokespecial);
+    }
+    writeUnsignedShort(constantPool.literalIndexForJavaLangStringBufferDefaultConstructor());
+    stackDepth--;
+  }
+  public void invokeStringBufferStringConstructor() {
+    // invokespecial: java.lang.StringBuffer.<init>(Ljava.lang.String;)V
+    countLabels = 0;
+    try {
+      position++;
+      bCodeStream[classFileOffset++] = OPC_invokespecial;
+    } catch (IndexOutOfBoundsException e) {
+      resizeByteArray(OPC_invokespecial);
+    }
+    writeUnsignedShort(constantPool.literalIndexForJavaLangStringBufferConstructor());
+    stackDepth -= 2;
+  }
 
-       // Reference object
-       switch (resolvedPosition) {
-               case 0 :
-                       this.aload_0();
-                       break;
-               case 1 :
-                       this.aload_1();
-                       break;
-               case 2 :
-                       this.aload_2();
-                       break;
-               case 3 :
-                       this.aload_3();
-                       break;
-               default :
-                       this.aload(resolvedPosition);
-       }
-}
-public final void loadInt(int resolvedPosition) {
-       // Using dedicated int bytecode
-       switch (resolvedPosition) {
-               case 0 :
-                       this.iload_0();
-                       break;
-               case 1 :
-                       this.iload_1();
-                       break;
-               case 2 :
-                       this.iload_2();
-                       break;
-               case 3 :
-                       this.iload_3();
-                       break;
-               default :
-                       this.iload(resolvedPosition);
-       }
-}
-public final void loadObject(int resolvedPosition) {
-       switch (resolvedPosition) {
-               case 0 :
-                       this.aload_0();
-                       break;
-               case 1 :
-                       this.aload_1();
-                       break;
-               case 2 :
-                       this.aload_2();
-                       break;
-               case 3 :
-                       this.aload_3();
-                       break;
-               default :
-                       this.aload(resolvedPosition);
-       }
-}
-final public void lookupswitch(CaseLabel defaultLabel, int[] keys, int[] sortedIndexes, CaseLabel[] casesLabel) {
-       countLabels = 0;
-       stackDepth--;
-       int length = keys.length;
-       int pos = position;
-       defaultLabel.placeInstruction();
-       for (int i = 0; i < length; i++) {
-               casesLabel[i].placeInstruction();
-       }
-       try {
-               position++;
-               bCodeStream[classFileOffset++] = OPC_lookupswitch;
-       } catch (IndexOutOfBoundsException e) {
-               resizeByteArray(OPC_lookupswitch);
-       }
-       for (int i = (3 - (pos % 4)); i > 0; i--) {
-               position++; // Padding
-               classFileOffset++;
-       }
-       defaultLabel.branch();
-       writeSignedWord(length);
-       for (int i = 0; i < length; i++) {
-               writeSignedWord(keys[sortedIndexes[i]]);
-               casesLabel[sortedIndexes[i]].branch();
-       }
-}
-final public void lor() {
-       countLabels = 0;
-       stackDepth -= 2;
-       try {
-               position++;
-               bCodeStream[classFileOffset++] = OPC_lor;
-       } catch (IndexOutOfBoundsException e) {
-               resizeByteArray(OPC_lor);
-       }
-}
-final public void lrem() {
-       countLabels = 0;
-       stackDepth -= 2;
-       try {
-               position++;
-               bCodeStream[classFileOffset++] = OPC_lrem;
-       } catch (IndexOutOfBoundsException e) {
-               resizeByteArray(OPC_lrem);
-       }
-}
-final public void lreturn() {
-       countLabels = 0;
-       stackDepth -= 2;
-       // the stackDepth should be equal to 0 
-       try {
-               position++;
-               bCodeStream[classFileOffset++] = OPC_lreturn;
-       } catch (IndexOutOfBoundsException e) {
-               resizeByteArray(OPC_lreturn);
-       }
-}
-final public void lshl() {
-       countLabels = 0;
-       stackDepth--;
-       try {
-               position++;
-               bCodeStream[classFileOffset++] = OPC_lshl;
-       } catch (IndexOutOfBoundsException e) {
-               resizeByteArray(OPC_lshl);
-       }
-}
-final public void lshr() {
-       countLabels = 0;
-       stackDepth--;
-       try {
-               position++;
-               bCodeStream[classFileOffset++] = OPC_lshr;
-       } catch (IndexOutOfBoundsException e) {
-               resizeByteArray(OPC_lshr);
-       }
-}
-final public void lstore(int iArg) {
-       countLabels = 0;
-       stackDepth -= 2;
-       if (maxLocals <= iArg + 1) {
-               maxLocals = iArg + 2;
-       }
-       if (iArg > 255) { // Widen
-               try {
-                       position++;
-                       bCodeStream[classFileOffset++] = OPC_wide;
-               } catch (IndexOutOfBoundsException e) {
-                       resizeByteArray(OPC_wide);
-               }
-               try {
-                       position++;
-                       bCodeStream[classFileOffset++] = OPC_lstore;
-               } catch (IndexOutOfBoundsException e) {
-                       resizeByteArray(OPC_lstore);
-               }
-               writeUnsignedShort(iArg);
-       } else {
-               try {
-                       position++;
-                       bCodeStream[classFileOffset++] = OPC_lstore;
-               } catch (IndexOutOfBoundsException e) {
-                       resizeByteArray(OPC_lstore);
-               }
-               try {
-                       position++;
-                       bCodeStream[classFileOffset++] = (byte) iArg;
-               } catch (IndexOutOfBoundsException e) {
-                       resizeByteArray((byte) iArg);
-               }
-       }
-}
-final public void lstore_0() {
-       countLabels = 0;
-       stackDepth -= 2;
-       if (maxLocals < 2) {
-               maxLocals = 2;
-       }
-       try {
-               position++;
-               bCodeStream[classFileOffset++] = OPC_lstore_0;
-       } catch (IndexOutOfBoundsException e) {
-               resizeByteArray(OPC_lstore_0);
-       }
-}
-final public void lstore_1() {
-       countLabels = 0;
-       stackDepth -= 2;
-       if (maxLocals < 3) {
-               maxLocals = 3;
-       }
-       try {
-               position++;
-               bCodeStream[classFileOffset++] = OPC_lstore_1;
-       } catch (IndexOutOfBoundsException e) {
-               resizeByteArray(OPC_lstore_1);
-       }
-}
-final public void lstore_2() {
-       countLabels = 0;
-       stackDepth -= 2;
-       if (maxLocals < 4) {
-               maxLocals = 4;
-       }
-       try {
-               position++;
-               bCodeStream[classFileOffset++] = OPC_lstore_2;
-       } catch (IndexOutOfBoundsException e) {
-               resizeByteArray(OPC_lstore_2);
-       }
-}
-final public void lstore_3() {
-       countLabels = 0;
-       stackDepth -= 2;
-       if (maxLocals < 5) {
-               maxLocals = 5;
-       }
-       try {
-               position++;
-               bCodeStream[classFileOffset++] = OPC_lstore_3;
-       } catch (IndexOutOfBoundsException e) {
-               resizeByteArray(OPC_lstore_3);
-       }
-}
-final public void lsub() {
-       countLabels = 0;
-       stackDepth -= 2;
-       try {
-               position++;
-               bCodeStream[classFileOffset++] = OPC_lsub;
-       } catch (IndexOutOfBoundsException e) {
-               resizeByteArray(OPC_lsub);
-       }
-}
-final public void lushr() {
-       countLabels = 0;
-       stackDepth--;
-       try {
-               position++;
-               bCodeStream[classFileOffset++] = OPC_lushr;
-       } catch (IndexOutOfBoundsException e) {
-               resizeByteArray(OPC_lushr);
-       }
-}
-final public void lxor() {
-       countLabels = 0;
-       stackDepth -= 2;
-       try {
-               position++;
-               bCodeStream[classFileOffset++] = OPC_lxor;
-       } catch (IndexOutOfBoundsException e) {
-               resizeByteArray(OPC_lxor);
-       }
-}
-final public void monitorenter() {
-       countLabels = 0;
-       stackDepth--;
-       try {
-               position++;
-               bCodeStream[classFileOffset++] = OPC_monitorenter;
-       } catch (IndexOutOfBoundsException e) {
-               resizeByteArray(OPC_monitorenter);
-       }
-}
-final public void monitorexit() {
-       countLabels = 0;
-       stackDepth--;
-       try {
-               position++;
-               bCodeStream[classFileOffset++] = OPC_monitorexit;
-       } catch (IndexOutOfBoundsException e) {
-               resizeByteArray(OPC_monitorexit);
-       }
-}
-final public void multianewarray(TypeBinding typeBinding, int dimensions) {
-       countLabels = 0;
-       stackDepth += (1 - dimensions);
-       try {
-               position++;
-               bCodeStream[classFileOffset++] = OPC_multianewarray;
-       } catch (IndexOutOfBoundsException e) {
-               resizeByteArray(OPC_multianewarray);
-       }
-       writeUnsignedShort(constantPool.literalIndex(typeBinding));
-       writeUnsignedByte(dimensions);
-}
-public static void needImplementation() {
-}
-/**
- * We didn't call it new, because there is a conflit with the new keyword
- */
-final public void new_(TypeBinding typeBinding) {
-       countLabels = 0;
-       stackDepth++;
-       if (stackDepth > stackMax)
-               stackMax = stackDepth;
-       try {
-               position++;
-               bCodeStream[classFileOffset++] = OPC_new;
-       } catch (IndexOutOfBoundsException e) {
-               resizeByteArray(OPC_new);
-       }
-       writeUnsignedShort(constantPool.literalIndex(typeBinding));
-}
-final public void newarray(int array_Type) {
-       countLabels = 0;
-       try {
-               position++;
-               bCodeStream[classFileOffset++] = OPC_newarray;
-       } catch (IndexOutOfBoundsException e) {
-               resizeByteArray(OPC_newarray);
-       }
-       writeUnsignedByte(array_Type);
-}
-public void newArray(Scope scope, ArrayBinding arrayBinding) {
-       TypeBinding component = arrayBinding.elementsType(scope);
-       switch (component.id) {
-               case T_int :
-                       this.newarray(10);
-                       break;
-               case T_byte :
-                       this.newarray(8);
-                       break;
-               case T_boolean :
-                       this.newarray(4);
-                       break;
-               case T_short :
-                       this.newarray(9);
-                       break;
-               case T_char :
-                       this.newarray(5);
-                       break;
-               case T_long :
-                       this.newarray(11);
-                       break;
-               case T_float :
-                       this.newarray(6);
-                       break;
-               case T_double :
-                       this.newarray(7);
-                       break;
-               default :
-                       this.anewarray(component);
-       }
-}
-public void newJavaLangError() {
-       // new: java.lang.Error
-       countLabels = 0;
-       stackDepth++;
-       if (stackDepth > stackMax)
-               stackMax = stackDepth;
-       try {
-               position++;
-               bCodeStream[classFileOffset++] = OPC_new;
-       } catch (IndexOutOfBoundsException e) {
-               resizeByteArray(OPC_new);
-       }
-       writeUnsignedShort(constantPool.literalIndexForJavaLangError());
-}
+  public void invokeStringBufferToString() {
+    // invokevirtual: StringBuffer.toString()Ljava.lang.String;
+    countLabels = 0;
+    try {
+      position++;
+      bCodeStream[classFileOffset++] = OPC_invokevirtual;
+    } catch (IndexOutOfBoundsException e) {
+      resizeByteArray(OPC_invokevirtual);
+    }
+    writeUnsignedShort(constantPool.literalIndexForJavaLangStringBufferToString());
+  }
+  public void invokeStringIntern() {
+    // invokevirtual: java.lang.String.intern()
+    countLabels = 0;
+    try {
+      position++;
+      bCodeStream[classFileOffset++] = OPC_invokevirtual;
+    } catch (IndexOutOfBoundsException e) {
+      resizeByteArray(OPC_invokevirtual);
+    }
+    writeUnsignedShort(constantPool.literalIndexForJavaLangStringIntern());
+  }
+  public void invokeStringValueOf(int typeID) {
+    // invokestatic: java.lang.String.valueOf(argumentType)
+    countLabels = 0;
+    try {
+      position++;
+      bCodeStream[classFileOffset++] = OPC_invokestatic;
+    } catch (IndexOutOfBoundsException e) {
+      resizeByteArray(OPC_invokestatic);
+    }
+    writeUnsignedShort(constantPool.literalIndexForJavaLangStringValueOf(typeID));
+  }
+  public void invokeSystemExit() {
+    // invokestatic: java.lang.System.exit(I)
+    countLabels = 0;
+    try {
+      position++;
+      bCodeStream[classFileOffset++] = OPC_invokestatic;
+    } catch (IndexOutOfBoundsException e) {
+      resizeByteArray(OPC_invokestatic);
+    }
+    writeUnsignedShort(constantPool.literalIndexForJavaLangSystemExitInt());
+    stackDepth--; // int argument
+  }
+  public void invokeThrowableGetMessage() {
+    // invokevirtual: java.lang.Throwable.getMessage()Ljava.lang.String;
+    countLabels = 0;
+    try {
+      position++;
+      bCodeStream[classFileOffset++] = OPC_invokevirtual;
+    } catch (IndexOutOfBoundsException e) {
+      resizeByteArray(OPC_invokevirtual);
+    }
+    writeUnsignedShort(constantPool.literalIndexForJavaLangThrowableGetMessage());
+  }
+  final public void invokevirtual(MethodBinding methodBinding) {
+    // initialized to 1 to take into account this  immediately
+    countLabels = 0;
+    int argCount = 1;
+    int id;
+    try {
+      position++;
+      bCodeStream[classFileOffset++] = OPC_invokevirtual;
+    } catch (IndexOutOfBoundsException e) {
+      resizeByteArray(OPC_invokevirtual);
+    }
+    writeUnsignedShort(constantPool.literalIndex(methodBinding));
+    for (int i = methodBinding.parameters.length - 1; i >= 0; i--)
+      if (((id = methodBinding.parameters[i].id) == T_double) || (id == T_long))
+        argCount += 2;
+      else
+        argCount++;
+    if (((id = methodBinding.returnType.id) == T_double) || (id == T_long))
+      stackDepth += (2 - argCount);
+    else if (id == T_void)
+      stackDepth -= argCount;
+    else
+      stackDepth += (1 - argCount);
+    if (stackDepth > stackMax)
+      stackMax = stackDepth;
+  }
+  final public void ior() {
+    countLabels = 0;
+    stackDepth--;
+    try {
+      position++;
+      bCodeStream[classFileOffset++] = OPC_ior;
+    } catch (IndexOutOfBoundsException e) {
+      resizeByteArray(OPC_ior);
+    }
+  }
+  final public void irem() {
+    countLabels = 0;
+    stackDepth--;
+    try {
+      position++;
+      bCodeStream[classFileOffset++] = OPC_irem;
+    } catch (IndexOutOfBoundsException e) {
+      resizeByteArray(OPC_irem);
+    }
+  }
+  final public void ireturn() {
+    countLabels = 0;
+    stackDepth--;
+    // the stackDepth should be equal to 0 
+    try {
+      position++;
+      bCodeStream[classFileOffset++] = OPC_ireturn;
+    } catch (IndexOutOfBoundsException e) {
+      resizeByteArray(OPC_ireturn);
+    }
+  }
+  public boolean isDefinitelyAssigned(Scope scope, int initStateIndex, LocalVariableBinding local) {
+    // Dependant of UnconditionalFlowInfo.isDefinitelyAssigned(..)
+    if (initStateIndex == -1)
+      return false;
+    if (local.isArgument) {
+      return true;
+    }
+    int position = local.id + maxFieldCount;
+    MethodScope methodScope = scope.methodScope();
+    // id is zero-based
+    if (position < UnconditionalFlowInfo.BitCacheSize) {
+      return (methodScope.definiteInits[initStateIndex] & (1L << position)) != 0; // use bits
+    }
+    // use extra vector
+    long[] extraInits = methodScope.extraDefiniteInits[initStateIndex];
+    if (extraInits == null)
+      return false; // if vector not yet allocated, then not initialized
+    int vectorIndex;
+    if ((vectorIndex = (position / UnconditionalFlowInfo.BitCacheSize) - 1) >= extraInits.length)
+      return false; // if not enough room in vector, then not initialized 
+    return ((extraInits[vectorIndex]) & (1L << (position % UnconditionalFlowInfo.BitCacheSize))) != 0;
+  }
+  final public void ishl() {
+    countLabels = 0;
+    stackDepth--;
+    try {
+      position++;
+      bCodeStream[classFileOffset++] = OPC_ishl;
+    } catch (IndexOutOfBoundsException e) {
+      resizeByteArray(OPC_ishl);
+    }
+  }
+  final public void ishr() {
+    countLabels = 0;
+    stackDepth--;
+    try {
+      position++;
+      bCodeStream[classFileOffset++] = OPC_ishr;
+    } catch (IndexOutOfBoundsException e) {
+      resizeByteArray(OPC_ishr);
+    }
+  }
+  final public void istore(int iArg) {
+    countLabels = 0;
+    stackDepth--;
+    if (maxLocals <= iArg) {
+      maxLocals = iArg + 1;
+    }
+    if (iArg > 255) { // Widen
+      try {
+        position++;
+        bCodeStream[classFileOffset++] = OPC_wide;
+      } catch (IndexOutOfBoundsException e) {
+        resizeByteArray(OPC_wide);
+      }
+      try {
+        position++;
+        bCodeStream[classFileOffset++] = OPC_istore;
+      } catch (IndexOutOfBoundsException e) {
+        resizeByteArray(OPC_istore);
+      }
+      writeUnsignedShort(iArg);
+    } else {
+      try {
+        position++;
+        bCodeStream[classFileOffset++] = OPC_istore;
+      } catch (IndexOutOfBoundsException e) {
+        resizeByteArray(OPC_istore);
+      }
+      try {
+        position++;
+        bCodeStream[classFileOffset++] = (byte) iArg;
+      } catch (IndexOutOfBoundsException e) {
+        resizeByteArray((byte) iArg);
+      }
+    }
+  }
+  final public void istore_0() {
+    countLabels = 0;
+    stackDepth--;
+    if (maxLocals == 0) {
+      maxLocals = 1;
+    }
+    try {
+      position++;
+      bCodeStream[classFileOffset++] = OPC_istore_0;
+    } catch (IndexOutOfBoundsException e) {
+      resizeByteArray(OPC_istore_0);
+    }
+  }
+  final public void istore_1() {
+    countLabels = 0;
+    stackDepth--;
+    if (maxLocals <= 1) {
+      maxLocals = 2;
+    }
+    try {
+      position++;
+      bCodeStream[classFileOffset++] = OPC_istore_1;
+    } catch (IndexOutOfBoundsException e) {
+      resizeByteArray(OPC_istore_1);
+    }
+  }
+  final public void istore_2() {
+    countLabels = 0;
+    stackDepth--;
+    if (maxLocals <= 2) {
+      maxLocals = 3;
+    }
+    try {
+      position++;
+      bCodeStream[classFileOffset++] = OPC_istore_2;
+    } catch (IndexOutOfBoundsException e) {
+      resizeByteArray(OPC_istore_2);
+    }
+  }
+  final public void istore_3() {
+    countLabels = 0;
+    stackDepth--;
+    if (maxLocals <= 3) {
+      maxLocals = 4;
+    }
+    try {
+      position++;
+      bCodeStream[classFileOffset++] = OPC_istore_3;
+    } catch (IndexOutOfBoundsException e) {
+      resizeByteArray(OPC_istore_3);
+    }
+  }
+  final public void isub() {
+    countLabels = 0;
+    stackDepth--;
+    try {
+      position++;
+      bCodeStream[classFileOffset++] = OPC_isub;
+    } catch (IndexOutOfBoundsException e) {
+      resizeByteArray(OPC_isub);
+    }
+  }
+  final public void iushr() {
+    countLabels = 0;
+    stackDepth--;
+    try {
+      position++;
+      bCodeStream[classFileOffset++] = OPC_iushr;
+    } catch (IndexOutOfBoundsException e) {
+      resizeByteArray(OPC_iushr);
+    }
+  }
+  final public void ixor() {
+    countLabels = 0;
+    stackDepth--;
+    try {
+      position++;
+      bCodeStream[classFileOffset++] = OPC_ixor;
+    } catch (IndexOutOfBoundsException e) {
+      resizeByteArray(OPC_ixor);
+    }
+  }
+  final public void jsr(Label lbl) {
+    countLabels = 0;
+    try {
+      position++;
+      bCodeStream[classFileOffset++] = OPC_jsr;
+    } catch (IndexOutOfBoundsException e) {
+      resizeByteArray(OPC_jsr);
+    }
+    lbl.branch();
+  }
+  final public void jsr_w(Label lbl) {
+    countLabels = 0;
+    try {
+      position++;
+      bCodeStream[classFileOffset++] = OPC_jsr_w;
+    } catch (IndexOutOfBoundsException e) {
+      resizeByteArray(OPC_jsr_w);
+    }
+    lbl.branchWide();
+  }
+  final public void l2d() {
+    countLabels = 0;
+    try {
+      position++;
+      bCodeStream[classFileOffset++] = OPC_l2d;
+    } catch (IndexOutOfBoundsException e) {
+      resizeByteArray(OPC_l2d);
+    }
+  }
+  final public void l2f() {
+    countLabels = 0;
+    stackDepth--;
+    try {
+      position++;
+      bCodeStream[classFileOffset++] = OPC_l2f;
+    } catch (IndexOutOfBoundsException e) {
+      resizeByteArray(OPC_l2f);
+    }
+  }
+  final public void l2i() {
+    countLabels = 0;
+    stackDepth--;
+    try {
+      position++;
+      bCodeStream[classFileOffset++] = OPC_l2i;
+    } catch (IndexOutOfBoundsException e) {
+      resizeByteArray(OPC_l2i);
+    }
+  }
+  final public void ladd() {
+    countLabels = 0;
+    stackDepth -= 2;
+    try {
+      position++;
+      bCodeStream[classFileOffset++] = OPC_ladd;
+    } catch (IndexOutOfBoundsException e) {
+      resizeByteArray(OPC_ladd);
+    }
+  }
+  final public void laload() {
+    countLabels = 0;
+    try {
+      position++;
+      bCodeStream[classFileOffset++] = OPC_laload;
+    } catch (IndexOutOfBoundsException e) {
+      resizeByteArray(OPC_laload);
+    }
+  }
+  final public void land() {
+    countLabels = 0;
+    stackDepth -= 2;
+    try {
+      position++;
+      bCodeStream[classFileOffset++] = OPC_land;
+    } catch (IndexOutOfBoundsException e) {
+      resizeByteArray(OPC_land);
+    }
+  }
+  final public void lastore() {
+    countLabels = 0;
+    stackDepth -= 4;
+    try {
+      position++;
+      bCodeStream[classFileOffset++] = OPC_lastore;
+    } catch (IndexOutOfBoundsException e) {
+      resizeByteArray(OPC_lastore);
+    }
+  }
+  final public void lcmp() {
+    countLabels = 0;
+    stackDepth -= 3;
+    try {
+      position++;
+      bCodeStream[classFileOffset++] = OPC_lcmp;
+    } catch (IndexOutOfBoundsException e) {
+      resizeByteArray(OPC_lcmp);
+    }
+  }
+  final public void lconst_0() {
+    countLabels = 0;
+    stackDepth += 2;
+    if (stackDepth > stackMax)
+      stackMax = stackDepth;
+    try {
+      position++;
+      bCodeStream[classFileOffset++] = OPC_lconst_0;
+    } catch (IndexOutOfBoundsException e) {
+      resizeByteArray(OPC_lconst_0);
+    }
+  }
+  final public void lconst_1() {
+    countLabels = 0;
+    stackDepth += 2;
+    if (stackDepth > stackMax)
+      stackMax = stackDepth;
+    try {
+      position++;
+      bCodeStream[classFileOffset++] = OPC_lconst_1;
+    } catch (IndexOutOfBoundsException e) {
+      resizeByteArray(OPC_lconst_1);
+    }
+  }
+  final public void ldc(float constant) {
+    countLabels = 0;
+    int index = constantPool.literalIndex(constant);
+    stackDepth++;
+    if (stackDepth > stackMax)
+      stackMax = stackDepth;
+    if (index > 255) {
+      // Generate a ldc_w
+      try {
+        position++;
+        bCodeStream[classFileOffset++] = OPC_ldc_w;
+      } catch (IndexOutOfBoundsException e) {
+        resizeByteArray(OPC_ldc_w);
+      }
+      writeUnsignedShort(index);
+    } else {
+      // Generate a ldc
+      try {
+        position++;
+        bCodeStream[classFileOffset++] = OPC_ldc;
+      } catch (IndexOutOfBoundsException e) {
+        resizeByteArray(OPC_ldc);
+      }
+      writeUnsignedByte(index);
+    }
+  }
+  final public void ldc(int constant) {
+    countLabels = 0;
+    int index = constantPool.literalIndex(constant);
+    stackDepth++;
+    if (stackDepth > stackMax)
+      stackMax = stackDepth;
+    if (index > 255) {
+      // Generate a ldc_w
+      try {
+        position++;
+        bCodeStream[classFileOffset++] = OPC_ldc_w;
+      } catch (IndexOutOfBoundsException e) {
+        resizeByteArray(OPC_ldc_w);
+      }
+      writeUnsignedShort(index);
+    } else {
+      // Generate a ldc
+      try {
+        position++;
+        bCodeStream[classFileOffset++] = OPC_ldc;
+      } catch (IndexOutOfBoundsException e) {
+        resizeByteArray(OPC_ldc);
+      }
+      writeUnsignedByte(index);
+    }
+  }
+  final public void ldc(String constant) {
+    countLabels = 0;
+    int currentConstantPoolIndex = constantPool.currentIndex;
+    int currentConstantPoolOffset = constantPool.currentOffset;
+    int currentCodeStreamPosition = position;
+    int index = constantPool.literalIndexForLdc(constant.toCharArray());
+    if (index > 0) {
+      // the string already exists inside the constant pool
+      // we reuse the same index
+      stackDepth++;
+      if (stackDepth > stackMax)
+        stackMax = stackDepth;
+      if (index > 255) {
+        // Generate a ldc_w
+        try {
+          position++;
+          bCodeStream[classFileOffset++] = OPC_ldc_w;
+        } catch (IndexOutOfBoundsException e) {
+          resizeByteArray(OPC_ldc_w);
+        }
+        writeUnsignedShort(index);
+      } else {
+        // Generate a ldc
+        try {
+          position++;
+          bCodeStream[classFileOffset++] = OPC_ldc;
+        } catch (IndexOutOfBoundsException e) {
+          resizeByteArray(OPC_ldc);
+        }
+        writeUnsignedByte(index);
+      }
+    } else {
+      // the string is too big to be utf8-encoded in one pass.
+      // we have to split it into different pieces.
+      // first we clean all side-effects due to the code above
+      // this case is very rare, so we can afford to lose time to handle it
+      char[] constantChars = constant.toCharArray();
+      position = currentCodeStreamPosition;
+      constantPool.currentIndex = currentConstantPoolIndex;
+      constantPool.currentOffset = currentConstantPoolOffset;
+      constantPool.stringCache.remove(constantChars);
+      constantPool.UTF8Cache.remove(constantChars);
+      int i = 0;
+      int length = 0;
+      int constantLength = constant.length();
+      byte[] utf8encoding = new byte[Math.min(constantLength + 100, 65535)];
+      int utf8encodingLength = 0;
+      while ((length < 65532) && (i < constantLength)) {
+        char current = constantChars[i];
+        // we resize the byte array immediately if necessary
+        if (length + 3 > (utf8encodingLength = utf8encoding.length)) {
+          System.arraycopy(utf8encoding, 0, (utf8encoding = new byte[Math.min(utf8encodingLength + 100, 65535)]), 0, length);
+        }
+        if ((current >= 0x0001) && (current <= 0x007F)) {
+          // we only need one byte: ASCII table
+          utf8encoding[length++] = (byte) current;
+        } else {
+          if (current > 0x07FF) {
+            // we need 3 bytes
+            utf8encoding[length++] = (byte) (0xE0 | ((current >> 12) & 0x0F)); // 0xE0 = 1110 0000
+            utf8encoding[length++] = (byte) (0x80 | ((current >> 6) & 0x3F)); // 0x80 = 1000 0000
+            utf8encoding[length++] = (byte) (0x80 | (current & 0x3F)); // 0x80 = 1000 0000
+          } else {
+            // we can be 0 or between 0x0080 and 0x07FF
+            // In that case we only need 2 bytes
+            utf8encoding[length++] = (byte) (0xC0 | ((current >> 6) & 0x1F)); // 0xC0 = 1100 0000
+            utf8encoding[length++] = (byte) (0x80 | (current & 0x3F)); // 0x80 = 1000 0000
+          }
+        }
+        i++;
+      }
+      // check if all the string is encoded (PR 1PR2DWJ)
+      // the string is too big to be encoded in one pass
+      newStringBuffer();
+      dup();
+      // write the first part
+      char[] subChars = new char[i];
+      System.arraycopy(constantChars, 0, subChars, 0, i);
+      System.arraycopy(utf8encoding, 0, (utf8encoding = new byte[length]), 0, length);
+      index = constantPool.literalIndex(subChars, utf8encoding);
+      stackDepth++;
+      if (stackDepth > stackMax)
+        stackMax = stackDepth;
+      if (index > 255) {
+        // Generate a ldc_w
+        try {
+          position++;
+          bCodeStream[classFileOffset++] = OPC_ldc_w;
+        } catch (IndexOutOfBoundsException e) {
+          resizeByteArray(OPC_ldc_w);
+        }
+        writeUnsignedShort(index);
+      } else {
+        // Generate a ldc
+        try {
+          position++;
+          bCodeStream[classFileOffset++] = OPC_ldc;
+        } catch (IndexOutOfBoundsException e) {
+          resizeByteArray(OPC_ldc);
+        }
+        writeUnsignedByte(index);
+      }
+      // write the remaining part
+      invokeStringBufferStringConstructor();
+      while (i < constantLength) {
+        length = 0;
+        utf8encoding = new byte[Math.min(constantLength - i + 100, 65535)];
+        int startIndex = i;
+        while ((length < 65532) && (i < constantLength)) {
+          char current = constantChars[i];
+          // we resize the byte array immediately if necessary
+          if (constantLength + 2 > (utf8encodingLength = utf8encoding.length)) {
+            System.arraycopy(utf8encoding, 0, (utf8encoding = new byte[Math.min(utf8encodingLength + 100, 65535)]), 0, length);
+          }
+          if ((current >= 0x0001) && (current <= 0x007F)) {
+            // we only need one byte: ASCII table
+            utf8encoding[length++] = (byte) current;
+          } else {
+            if (current > 0x07FF) {
+              // we need 3 bytes
+              utf8encoding[length++] = (byte) (0xE0 | ((current >> 12) & 0x0F)); // 0xE0 = 1110 0000
+              utf8encoding[length++] = (byte) (0x80 | ((current >> 6) & 0x3F)); // 0x80 = 1000 0000
+              utf8encoding[length++] = (byte) (0x80 | (current & 0x3F)); // 0x80 = 1000 0000
+            } else {
+              // we can be 0 or between 0x0080 and 0x07FF
+              // In that case we only need 2 bytes
+              utf8encoding[length++] = (byte) (0xC0 | ((current >> 6) & 0x1F)); // 0xC0 = 1100 0000
+              utf8encoding[length++] = (byte) (0x80 | (current & 0x3F)); // 0x80 = 1000 0000
+            }
+          }
+          i++;
+        }
+        // the next part is done
+        subChars = new char[i - startIndex];
+        System.arraycopy(constantChars, startIndex, subChars, 0, i - startIndex);
+        System.arraycopy(utf8encoding, 0, (utf8encoding = new byte[length]), 0, length);
+        index = constantPool.literalIndex(subChars, utf8encoding);
+        stackDepth++;
+        if (stackDepth > stackMax)
+          stackMax = stackDepth;
+        if (index > 255) {
+          // Generate a ldc_w
+          try {
+            position++;
+            bCodeStream[classFileOffset++] = OPC_ldc_w;
+          } catch (IndexOutOfBoundsException e) {
+            resizeByteArray(OPC_ldc_w);
+          }
+          writeUnsignedShort(index);
+        } else {
+          // Generate a ldc
+          try {
+            position++;
+            bCodeStream[classFileOffset++] = OPC_ldc;
+          } catch (IndexOutOfBoundsException e) {
+            resizeByteArray(OPC_ldc);
+          }
+          writeUnsignedByte(index);
+        }
+        // now on the stack it should be a StringBuffer and a string.
+        invokeStringBufferAppendForType(T_String);
+      }
+      invokeStringBufferToString();
+      invokeStringIntern();
+    }
+  }
+  final public void ldc2_w(double constant) {
+    countLabels = 0;
+    int index = constantPool.literalIndex(constant);
+    stackDepth += 2;
+    if (stackDepth > stackMax)
+      stackMax = stackDepth;
+    // Generate a ldc2_w
+    try {
+      position++;
+      bCodeStream[classFileOffset++] = OPC_ldc2_w;
+    } catch (IndexOutOfBoundsException e) {
+      resizeByteArray(OPC_ldc2_w);
+    }
+    writeUnsignedShort(index);
+  }
+  final public void ldc2_w(long constant) {
+    countLabels = 0;
+    int index = constantPool.literalIndex(constant);
+    stackDepth += 2;
+    if (stackDepth > stackMax)
+      stackMax = stackDepth;
+    // Generate a ldc2_w
+    try {
+      position++;
+      bCodeStream[classFileOffset++] = OPC_ldc2_w;
+    } catch (IndexOutOfBoundsException e) {
+      resizeByteArray(OPC_ldc2_w);
+    }
+    writeUnsignedShort(index);
+  }
+  final public void ldiv() {
+    countLabels = 0;
+    stackDepth -= 2;
+    try {
+      position++;
+      bCodeStream[classFileOffset++] = OPC_ldiv;
+    } catch (IndexOutOfBoundsException e) {
+      resizeByteArray(OPC_ldiv);
+    }
+  }
+  final public void lload(int iArg) {
+    countLabels = 0;
+    stackDepth += 2;
+    if (maxLocals <= iArg + 1) {
+      maxLocals = iArg + 2;
+    }
+    if (stackDepth > stackMax)
+      stackMax = stackDepth;
+    if (iArg > 255) { // Widen
+      try {
+        position++;
+        bCodeStream[classFileOffset++] = OPC_wide;
+      } catch (IndexOutOfBoundsException e) {
+        resizeByteArray(OPC_wide);
+      }
+      try {
+        position++;
+        bCodeStream[classFileOffset++] = OPC_lload;
+      } catch (IndexOutOfBoundsException e) {
+        resizeByteArray(OPC_lload);
+      }
+      writeUnsignedShort(iArg);
+    } else {
+      try {
+        position++;
+        bCodeStream[classFileOffset++] = OPC_lload;
+      } catch (IndexOutOfBoundsException e) {
+        resizeByteArray(OPC_lload);
+      }
+      try {
+        position++;
+        bCodeStream[classFileOffset++] = (byte) iArg;
+      } catch (IndexOutOfBoundsException e) {
+        resizeByteArray((byte) iArg);
+      }
+    }
+  }
+  final public void lload_0() {
+    countLabels = 0;
+    stackDepth += 2;
+    if (maxLocals < 2) {
+      maxLocals = 2;
+    }
+    if (stackDepth > stackMax)
+      stackMax = stackDepth;
+    try {
+      position++;
+      bCodeStream[classFileOffset++] = OPC_lload_0;
+    } catch (IndexOutOfBoundsException e) {
+      resizeByteArray(OPC_lload_0);
+    }
+  }
+  final public void lload_1() {
+    countLabels = 0;
+    stackDepth += 2;
+    if (maxLocals < 3) {
+      maxLocals = 3;
+    }
+    if (stackDepth > stackMax)
+      stackMax = stackDepth;
+    try {
+      position++;
+      bCodeStream[classFileOffset++] = OPC_lload_1;
+    } catch (IndexOutOfBoundsException e) {
+      resizeByteArray(OPC_lload_1);
+    }
+  }
+  final public void lload_2() {
+    countLabels = 0;
+    stackDepth += 2;
+    if (maxLocals < 4) {
+      maxLocals = 4;
+    }
+    if (stackDepth > stackMax)
+      stackMax = stackDepth;
+    try {
+      position++;
+      bCodeStream[classFileOffset++] = OPC_lload_2;
+    } catch (IndexOutOfBoundsException e) {
+      resizeByteArray(OPC_lload_2);
+    }
+  }
+  final public void lload_3() {
+    countLabels = 0;
+    stackDepth += 2;
+    if (maxLocals < 5) {
+      maxLocals = 5;
+    }
+    if (stackDepth > stackMax)
+      stackMax = stackDepth;
+    try {
+      position++;
+      bCodeStream[classFileOffset++] = OPC_lload_3;
+    } catch (IndexOutOfBoundsException e) {
+      resizeByteArray(OPC_lload_3);
+    }
+  }
+  final public void lmul() {
+    countLabels = 0;
+    stackDepth -= 2;
+    try {
+      position++;
+      bCodeStream[classFileOffset++] = OPC_lmul;
+    } catch (IndexOutOfBoundsException e) {
+      resizeByteArray(OPC_lmul);
+    }
+  }
+  final public void lneg() {
+    countLabels = 0;
+    try {
+      position++;
+      bCodeStream[classFileOffset++] = OPC_lneg;
+    } catch (IndexOutOfBoundsException e) {
+      resizeByteArray(OPC_lneg);
+    }
+  }
+  public final void load(LocalVariableBinding localBinding) {
+    countLabels = 0;
+    TypeBinding typeBinding = localBinding.type;
+    int resolvedPosition = localBinding.resolvedPosition;
+    // Using dedicated int bytecode
+    if (typeBinding == IntBinding) {
+      switch (resolvedPosition) {
+        case 0 :
+          this.iload_0();
+          break;
+        case 1 :
+          this.iload_1();
+          break;
+        case 2 :
+          this.iload_2();
+          break;
+        case 3 :
+          this.iload_3();
+          break;
+        default :
+          this.iload(resolvedPosition);
+      }
+      return;
+    }
+    // Using dedicated float bytecode
+    if (typeBinding == FloatBinding) {
+      switch (resolvedPosition) {
+        case 0 :
+          this.fload_0();
+          break;
+        case 1 :
+          this.fload_1();
+          break;
+        case 2 :
+          this.fload_2();
+          break;
+        case 3 :
+          this.fload_3();
+          break;
+        default :
+          this.fload(resolvedPosition);
+      }
+      return;
+    }
+    // Using dedicated long bytecode
+    if (typeBinding == LongBinding) {
+      switch (resolvedPosition) {
+        case 0 :
+          this.lload_0();
+          break;
+        case 1 :
+          this.lload_1();
+          break;
+        case 2 :
+          this.lload_2();
+          break;
+        case 3 :
+          this.lload_3();
+          break;
+        default :
+          this.lload(resolvedPosition);
+      }
+      return;
+    }
+    // Using dedicated double bytecode
+    if (typeBinding == DoubleBinding) {
+      switch (resolvedPosition) {
+        case 0 :
+          this.dload_0();
+          break;
+        case 1 :
+          this.dload_1();
+          break;
+        case 2 :
+          this.dload_2();
+          break;
+        case 3 :
+          this.dload_3();
+          break;
+        default :
+          this.dload(resolvedPosition);
+      }
+      return;
+    }
+    // boolean, byte, char and short are handled as int
+    if ((typeBinding == ByteBinding)
+      || (typeBinding == CharBinding)
+      || (typeBinding == BooleanBinding)
+      || (typeBinding == ShortBinding)) {
+      switch (resolvedPosition) {
+        case 0 :
+          this.iload_0();
+          break;
+        case 1 :
+          this.iload_1();
+          break;
+        case 2 :
+          this.iload_2();
+          break;
+        case 3 :
+          this.iload_3();
+          break;
+        default :
+          this.iload(resolvedPosition);
+      }
+      return;
+    }
 
-public void newJavaLangAssertionError() {
-       // new: java.lang.AssertionError
-       countLabels = 0;
-       stackDepth++;
-       if (stackDepth > stackMax)
-               stackMax = stackDepth;
-       try {
-               position++;
-               bCodeStream[classFileOffset++] = OPC_new;
-       } catch (IndexOutOfBoundsException e) {
-               resizeByteArray(OPC_new);
-       }
-       writeUnsignedShort(constantPool.literalIndexForJavaLangAssertionError());
-}
+    // Reference object
+    switch (resolvedPosition) {
+      case 0 :
+        this.aload_0();
+        break;
+      case 1 :
+        this.aload_1();
+        break;
+      case 2 :
+        this.aload_2();
+        break;
+      case 3 :
+        this.aload_3();
+        break;
+      default :
+        this.aload(resolvedPosition);
+    }
+  }
+  public final void load(TypeBinding typeBinding, int resolvedPosition) {
+    countLabels = 0;
+    // Using dedicated int bytecode
+    if (typeBinding == IntBinding) {
+      switch (resolvedPosition) {
+        case 0 :
+          this.iload_0();
+          break;
+        case 1 :
+          this.iload_1();
+          break;
+        case 2 :
+          this.iload_2();
+          break;
+        case 3 :
+          this.iload_3();
+          break;
+        default :
+          this.iload(resolvedPosition);
+      }
+      return;
+    }
+    // Using dedicated float bytecode
+    if (typeBinding == FloatBinding) {
+      switch (resolvedPosition) {
+        case 0 :
+          this.fload_0();
+          break;
+        case 1 :
+          this.fload_1();
+          break;
+        case 2 :
+          this.fload_2();
+          break;
+        case 3 :
+          this.fload_3();
+          break;
+        default :
+          this.fload(resolvedPosition);
+      }
+      return;
+    }
+    // Using dedicated long bytecode
+    if (typeBinding == LongBinding) {
+      switch (resolvedPosition) {
+        case 0 :
+          this.lload_0();
+          break;
+        case 1 :
+          this.lload_1();
+          break;
+        case 2 :
+          this.lload_2();
+          break;
+        case 3 :
+          this.lload_3();
+          break;
+        default :
+          this.lload(resolvedPosition);
+      }
+      return;
+    }
+    // Using dedicated double bytecode
+    if (typeBinding == DoubleBinding) {
+      switch (resolvedPosition) {
+        case 0 :
+          this.dload_0();
+          break;
+        case 1 :
+          this.dload_1();
+          break;
+        case 2 :
+          this.dload_2();
+          break;
+        case 3 :
+          this.dload_3();
+          break;
+        default :
+          this.dload(resolvedPosition);
+      }
+      return;
+    }
+    // boolean, byte, char and short are handled as int
+    if ((typeBinding == ByteBinding)
+      || (typeBinding == CharBinding)
+      || (typeBinding == BooleanBinding)
+      || (typeBinding == ShortBinding)) {
+      switch (resolvedPosition) {
+        case 0 :
+          this.iload_0();
+          break;
+        case 1 :
+          this.iload_1();
+          break;
+        case 2 :
+          this.iload_2();
+          break;
+        case 3 :
+          this.iload_3();
+          break;
+        default :
+          this.iload(resolvedPosition);
+      }
+      return;
+    }
 
-public void newNoClassDefFoundError() { // new: java.lang.NoClassDefFoundError
-       countLabels = 0;
-       stackDepth++;
-       if (stackDepth > stackMax)
-               stackMax = stackDepth;
-       try {
-               position++;
-               bCodeStream[classFileOffset++] = OPC_new;
-       } catch (IndexOutOfBoundsException e) {
-               resizeByteArray(OPC_new);
-       }
-       writeUnsignedShort(constantPool.literalIndexForJavaLangNoClassDefFoundError());
-}
-public void newStringBuffer() { // new: java.lang.StringBuffer
-       countLabels = 0;
-       stackDepth++;
-       if (stackDepth > stackMax)
-               stackMax = stackDepth;
-       try {
-               position++;
-               bCodeStream[classFileOffset++] = OPC_new;
-       } catch (IndexOutOfBoundsException e) {
-               resizeByteArray(OPC_new);
-       }
-       writeUnsignedShort(constantPool.literalIndexForJavaLangStringBuffer());
-}
-public void newWrapperFor(int typeID) {
-       countLabels = 0;
-       stackDepth++;
-       if (stackDepth > stackMax)
-               stackMax = stackDepth;
-       try {
-               position++;
-               bCodeStream[classFileOffset++] = OPC_new;
-       } catch (IndexOutOfBoundsException e) {
-               resizeByteArray(OPC_new);
-       }
-       switch (typeID) {
-               case T_int : // new: java.lang.Integer
-                       writeUnsignedShort(constantPool.literalIndexForJavaLangInteger());
-                       break;
-               case T_boolean : // new: java.lang.Boolean
-                       writeUnsignedShort(constantPool.literalIndexForJavaLangBoolean());
-                       break;
-               case T_byte : // new: java.lang.Byte
-                       writeUnsignedShort(constantPool.literalIndexForJavaLangByte());
-                       break;
-               case T_char : // new: java.lang.Character
-                       writeUnsignedShort(constantPool.literalIndexForJavaLangCharacter());
-                       break;
-               case T_float : // new: java.lang.Float
-                       writeUnsignedShort(constantPool.literalIndexForJavaLangFloat());
-                       break;
-               case T_double : // new: java.lang.Double
-                       writeUnsignedShort(constantPool.literalIndexForJavaLangDouble());
-                       break;
-               case T_short : // new: java.lang.Short
-                       writeUnsignedShort(constantPool.literalIndexForJavaLangShort());
-                       break;
-               case T_long : // new: java.lang.Long
-                       writeUnsignedShort(constantPool.literalIndexForJavaLangLong());
-                       break;
-               case T_void : // new: java.lang.Void
-                       writeUnsignedShort(constantPool.literalIndexForJavaLangVoid());
-       }
-}
-final public void nop() {
-       countLabels = 0;
-       try {
-               position++;
-               bCodeStream[classFileOffset++] = OPC_nop;
-       } catch (IndexOutOfBoundsException e) {
-               resizeByteArray(OPC_nop);
-       }
-}
-final public void pop() {
-       countLabels = 0;
-       stackDepth--;
-       try {
-               position++;
-               bCodeStream[classFileOffset++] = OPC_pop;
-       } catch (IndexOutOfBoundsException e) {
-               resizeByteArray(OPC_pop);
-       }
-}
-final public void pop2() {
-       countLabels = 0;
-       stackDepth -= 2;
-       try {
-               position++;
-               bCodeStream[classFileOffset++] = OPC_pop2;
-       } catch (IndexOutOfBoundsException e) {
-               resizeByteArray(OPC_pop2);
-       }
-}
-final public void putfield(FieldBinding fieldBinding) {
-       countLabels = 0;
-       int id;
-       if (((id = fieldBinding.type.id) == T_double) || (id == T_long))
-               stackDepth -= 3;
-       else
-               stackDepth -= 2;
-       if (stackDepth > stackMax)
-               stackMax = stackDepth;
-       try {
-               position++;
-               bCodeStream[classFileOffset++] = OPC_putfield;
-       } catch (IndexOutOfBoundsException e) {
-               resizeByteArray(OPC_putfield);
-       }
-       writeUnsignedShort(constantPool.literalIndex(fieldBinding));
-}
-final public void putstatic(FieldBinding fieldBinding) {
-       countLabels = 0;
-       int id;
-       if (((id = fieldBinding.type.id) == T_double) || (id == T_long))
-               stackDepth -= 2;
-       else
-               stackDepth -= 1;
-       if (stackDepth > stackMax)
-               stackMax = stackDepth;
-       try {
-               position++;
-               bCodeStream[classFileOffset++] = OPC_putstatic;
-       } catch (IndexOutOfBoundsException e) {
-               resizeByteArray(OPC_putstatic);
-       }
-       writeUnsignedShort(constantPool.literalIndex(fieldBinding));
-}
-public void record(LocalVariableBinding local) {
-       if (!generateLocalVariableTableAttributes)
-               return;
-       if (allLocalsCounter == locals.length) {
-               // resize the collection
-               System.arraycopy(locals, 0, (locals = new LocalVariableBinding[allLocalsCounter + LOCALS_INCREMENT]), 0, allLocalsCounter);
-       }
-       locals[allLocalsCounter++] = local;
-       local.initializationPCs = new int[4];
-       local.initializationCount = 0;
-}
-public void recordPositionsFrom(int startPC, int sourcePos) {
+    // Reference object
+    switch (resolvedPosition) {
+      case 0 :
+        this.aload_0();
+        break;
+      case 1 :
+        this.aload_1();
+        break;
+      case 2 :
+        this.aload_2();
+        break;
+      case 3 :
+        this.aload_3();
+        break;
+      default :
+        this.aload(resolvedPosition);
+    }
+  }
+  public final void loadInt(int resolvedPosition) {
+    // Using dedicated int bytecode
+    switch (resolvedPosition) {
+      case 0 :
+        this.iload_0();
+        break;
+      case 1 :
+        this.iload_1();
+        break;
+      case 2 :
+        this.iload_2();
+        break;
+      case 3 :
+        this.iload_3();
+        break;
+      default :
+        this.iload(resolvedPosition);
+    }
+  }
+  public final void loadObject(int resolvedPosition) {
+    switch (resolvedPosition) {
+      case 0 :
+        this.aload_0();
+        break;
+      case 1 :
+        this.aload_1();
+        break;
+      case 2 :
+        this.aload_2();
+        break;
+      case 3 :
+        this.aload_3();
+        break;
+      default :
+        this.aload(resolvedPosition);
+    }
+  }
+  final public void lookupswitch(CaseLabel defaultLabel, int[] keys, int[] sortedIndexes, CaseLabel[] casesLabel) {
+    countLabels = 0;
+    stackDepth--;
+    int length = keys.length;
+    int pos = position;
+    defaultLabel.placeInstruction();
+    for (int i = 0; i < length; i++) {
+      casesLabel[i].placeInstruction();
+    }
+    try {
+      position++;
+      bCodeStream[classFileOffset++] = OPC_lookupswitch;
+    } catch (IndexOutOfBoundsException e) {
+      resizeByteArray(OPC_lookupswitch);
+    }
+    for (int i = (3 - (pos % 4)); i > 0; i--) {
+      position++; // Padding
+      classFileOffset++;
+    }
+    defaultLabel.branch();
+    writeSignedWord(length);
+    for (int i = 0; i < length; i++) {
+      writeSignedWord(keys[sortedIndexes[i]]);
+      casesLabel[sortedIndexes[i]].branch();
+    }
+  }
+  final public void lor() {
+    countLabels = 0;
+    stackDepth -= 2;
+    try {
+      position++;
+      bCodeStream[classFileOffset++] = OPC_lor;
+    } catch (IndexOutOfBoundsException e) {
+      resizeByteArray(OPC_lor);
+    }
+  }
+  final public void lrem() {
+    countLabels = 0;
+    stackDepth -= 2;
+    try {
+      position++;
+      bCodeStream[classFileOffset++] = OPC_lrem;
+    } catch (IndexOutOfBoundsException e) {
+      resizeByteArray(OPC_lrem);
+    }
+  }
+  final public void lreturn() {
+    countLabels = 0;
+    stackDepth -= 2;
+    // the stackDepth should be equal to 0 
+    try {
+      position++;
+      bCodeStream[classFileOffset++] = OPC_lreturn;
+    } catch (IndexOutOfBoundsException e) {
+      resizeByteArray(OPC_lreturn);
+    }
+  }
+  final public void lshl() {
+    countLabels = 0;
+    stackDepth--;
+    try {
+      position++;
+      bCodeStream[classFileOffset++] = OPC_lshl;
+    } catch (IndexOutOfBoundsException e) {
+      resizeByteArray(OPC_lshl);
+    }
+  }
+  final public void lshr() {
+    countLabels = 0;
+    stackDepth--;
+    try {
+      position++;
+      bCodeStream[classFileOffset++] = OPC_lshr;
+    } catch (IndexOutOfBoundsException e) {
+      resizeByteArray(OPC_lshr);
+    }
+  }
+  final public void lstore(int iArg) {
+    countLabels = 0;
+    stackDepth -= 2;
+    if (maxLocals <= iArg + 1) {
+      maxLocals = iArg + 2;
+    }
+    if (iArg > 255) { // Widen
+      try {
+        position++;
+        bCodeStream[classFileOffset++] = OPC_wide;
+      } catch (IndexOutOfBoundsException e) {
+        resizeByteArray(OPC_wide);
+      }
+      try {
+        position++;
+        bCodeStream[classFileOffset++] = OPC_lstore;
+      } catch (IndexOutOfBoundsException e) {
+        resizeByteArray(OPC_lstore);
+      }
+      writeUnsignedShort(iArg);
+    } else {
+      try {
+        position++;
+        bCodeStream[classFileOffset++] = OPC_lstore;
+      } catch (IndexOutOfBoundsException e) {
+        resizeByteArray(OPC_lstore);
+      }
+      try {
+        position++;
+        bCodeStream[classFileOffset++] = (byte) iArg;
+      } catch (IndexOutOfBoundsException e) {
+        resizeByteArray((byte) iArg);
+      }
+    }
+  }
+  final public void lstore_0() {
+    countLabels = 0;
+    stackDepth -= 2;
+    if (maxLocals < 2) {
+      maxLocals = 2;
+    }
+    try {
+      position++;
+      bCodeStream[classFileOffset++] = OPC_lstore_0;
+    } catch (IndexOutOfBoundsException e) {
+      resizeByteArray(OPC_lstore_0);
+    }
+  }
+  final public void lstore_1() {
+    countLabels = 0;
+    stackDepth -= 2;
+    if (maxLocals < 3) {
+      maxLocals = 3;
+    }
+    try {
+      position++;
+      bCodeStream[classFileOffset++] = OPC_lstore_1;
+    } catch (IndexOutOfBoundsException e) {
+      resizeByteArray(OPC_lstore_1);
+    }
+  }
+  final public void lstore_2() {
+    countLabels = 0;
+    stackDepth -= 2;
+    if (maxLocals < 4) {
+      maxLocals = 4;
+    }
+    try {
+      position++;
+      bCodeStream[classFileOffset++] = OPC_lstore_2;
+    } catch (IndexOutOfBoundsException e) {
+      resizeByteArray(OPC_lstore_2);
+    }
+  }
+  final public void lstore_3() {
+    countLabels = 0;
+    stackDepth -= 2;
+    if (maxLocals < 5) {
+      maxLocals = 5;
+    }
+    try {
+      position++;
+      bCodeStream[classFileOffset++] = OPC_lstore_3;
+    } catch (IndexOutOfBoundsException e) {
+      resizeByteArray(OPC_lstore_3);
+    }
+  }
+  final public void lsub() {
+    countLabels = 0;
+    stackDepth -= 2;
+    try {
+      position++;
+      bCodeStream[classFileOffset++] = OPC_lsub;
+    } catch (IndexOutOfBoundsException e) {
+      resizeByteArray(OPC_lsub);
+    }
+  }
+  final public void lushr() {
+    countLabels = 0;
+    stackDepth--;
+    try {
+      position++;
+      bCodeStream[classFileOffset++] = OPC_lushr;
+    } catch (IndexOutOfBoundsException e) {
+      resizeByteArray(OPC_lushr);
+    }
+  }
+  final public void lxor() {
+    countLabels = 0;
+    stackDepth -= 2;
+    try {
+      position++;
+      bCodeStream[classFileOffset++] = OPC_lxor;
+    } catch (IndexOutOfBoundsException e) {
+      resizeByteArray(OPC_lxor);
+    }
+  }
+  final public void monitorenter() {
+    countLabels = 0;
+    stackDepth--;
+    try {
+      position++;
+      bCodeStream[classFileOffset++] = OPC_monitorenter;
+    } catch (IndexOutOfBoundsException e) {
+      resizeByteArray(OPC_monitorenter);
+    }
+  }
+  final public void monitorexit() {
+    countLabels = 0;
+    stackDepth--;
+    try {
+      position++;
+      bCodeStream[classFileOffset++] = OPC_monitorexit;
+    } catch (IndexOutOfBoundsException e) {
+      resizeByteArray(OPC_monitorexit);
+    }
+  }
+  final public void multianewarray(TypeBinding typeBinding, int dimensions) {
+    countLabels = 0;
+    stackDepth += (1 - dimensions);
+    try {
+      position++;
+      bCodeStream[classFileOffset++] = OPC_multianewarray;
+    } catch (IndexOutOfBoundsException e) {
+      resizeByteArray(OPC_multianewarray);
+    }
+    writeUnsignedShort(constantPool.literalIndex(typeBinding));
+    writeUnsignedByte(dimensions);
+  }
+  public static void needImplementation() {
+  }
+  /**
+   * We didn't call it new, because there is a conflit with the new keyword
+   */
+  final public void new_(TypeBinding typeBinding) {
+    countLabels = 0;
+    stackDepth++;
+    if (stackDepth > stackMax)
+      stackMax = stackDepth;
+    try {
+      position++;
+      bCodeStream[classFileOffset++] = OPC_new;
+    } catch (IndexOutOfBoundsException e) {
+      resizeByteArray(OPC_new);
+    }
+    writeUnsignedShort(constantPool.literalIndex(typeBinding));
+  }
+  final public void newarray(int array_Type) {
+    countLabels = 0;
+    try {
+      position++;
+      bCodeStream[classFileOffset++] = OPC_newarray;
+    } catch (IndexOutOfBoundsException e) {
+      resizeByteArray(OPC_newarray);
+    }
+    writeUnsignedByte(array_Type);
+  }
+  public void newArray(Scope scope, ArrayBinding arrayBinding) {
+    TypeBinding component = arrayBinding.elementsType(scope);
+    switch (component.id) {
+      case T_int :
+        this.newarray(10);
+        break;
+      case T_byte :
+        this.newarray(8);
+        break;
+      case T_boolean :
+        this.newarray(4);
+        break;
+      case T_short :
+        this.newarray(9);
+        break;
+      case T_char :
+        this.newarray(5);
+        break;
+      case T_long :
+        this.newarray(11);
+        break;
+      case T_float :
+        this.newarray(6);
+        break;
+      case T_double :
+        this.newarray(7);
+        break;
+      default :
+        this.anewarray(component);
+    }
+  }
+  public void newJavaLangError() {
+    // new: java.lang.Error
+    countLabels = 0;
+    stackDepth++;
+    if (stackDepth > stackMax)
+      stackMax = stackDepth;
+    try {
+      position++;
+      bCodeStream[classFileOffset++] = OPC_new;
+    } catch (IndexOutOfBoundsException e) {
+      resizeByteArray(OPC_new);
+    }
+    writeUnsignedShort(constantPool.literalIndexForJavaLangError());
+  }
 
-       /* Record positions in the table, only if nothing has 
-        * already been recorded. Since we output them on the way 
-        * up (children first for more specific info)
-        * The pcToSourceMap table is always sorted.
-        */
+  public void newJavaLangAssertionError() {
+    // new: java.lang.AssertionError
+    countLabels = 0;
+    stackDepth++;
+    if (stackDepth > stackMax)
+      stackMax = stackDepth;
+    try {
+      position++;
+      bCodeStream[classFileOffset++] = OPC_new;
+    } catch (IndexOutOfBoundsException e) {
+      resizeByteArray(OPC_new);
+    }
+    writeUnsignedShort(constantPool.literalIndexForJavaLangAssertionError());
+  }
 
-       if (!generateLineNumberAttributes)
-               return;
-       if (sourcePos == 0)
-               return;
+  public void newNoClassDefFoundError() { // new: java.lang.NoClassDefFoundError
+    countLabels = 0;
+    stackDepth++;
+    if (stackDepth > stackMax)
+      stackMax = stackDepth;
+    try {
+      position++;
+      bCodeStream[classFileOffset++] = OPC_new;
+    } catch (IndexOutOfBoundsException e) {
+      resizeByteArray(OPC_new);
+    }
+    writeUnsignedShort(constantPool.literalIndexForJavaLangNoClassDefFoundError());
+  }
+  public void newStringBuffer() { // new: java.lang.StringBuffer
+    countLabels = 0;
+    stackDepth++;
+    if (stackDepth > stackMax)
+      stackMax = stackDepth;
+    try {
+      position++;
+      bCodeStream[classFileOffset++] = OPC_new;
+    } catch (IndexOutOfBoundsException e) {
+      resizeByteArray(OPC_new);
+    }
+    writeUnsignedShort(constantPool.literalIndexForJavaLangStringBuffer());
+  }
+  public void newWrapperFor(int typeID) {
+    countLabels = 0;
+    stackDepth++;
+    if (stackDepth > stackMax)
+      stackMax = stackDepth;
+    try {
+      position++;
+      bCodeStream[classFileOffset++] = OPC_new;
+    } catch (IndexOutOfBoundsException e) {
+      resizeByteArray(OPC_new);
+    }
+    switch (typeID) {
+      case T_int : // new: java.lang.Integer
+        writeUnsignedShort(constantPool.literalIndexForJavaLangInteger());
+        break;
+      case T_boolean : // new: java.lang.Boolean
+        writeUnsignedShort(constantPool.literalIndexForJavaLangBoolean());
+        break;
+      case T_byte : // new: java.lang.Byte
+        writeUnsignedShort(constantPool.literalIndexForJavaLangByte());
+        break;
+      case T_char : // new: java.lang.Character
+        writeUnsignedShort(constantPool.literalIndexForJavaLangCharacter());
+        break;
+      case T_float : // new: java.lang.Float
+        writeUnsignedShort(constantPool.literalIndexForJavaLangFloat());
+        break;
+      case T_double : // new: java.lang.Double
+        writeUnsignedShort(constantPool.literalIndexForJavaLangDouble());
+        break;
+      case T_short : // new: java.lang.Short
+        writeUnsignedShort(constantPool.literalIndexForJavaLangShort());
+        break;
+      case T_long : // new: java.lang.Long
+        writeUnsignedShort(constantPool.literalIndexForJavaLangLong());
+        break;
+      case T_void : // new: java.lang.Void
+        writeUnsignedShort(constantPool.literalIndexForJavaLangVoid());
+    }
+  }
+  final public void nop() {
+    countLabels = 0;
+    try {
+      position++;
+      bCodeStream[classFileOffset++] = OPC_nop;
+    } catch (IndexOutOfBoundsException e) {
+      resizeByteArray(OPC_nop);
+    }
+  }
+  final public void pop() {
+    countLabels = 0;
+    stackDepth--;
+    try {
+      position++;
+      bCodeStream[classFileOffset++] = OPC_pop;
+    } catch (IndexOutOfBoundsException e) {
+      resizeByteArray(OPC_pop);
+    }
+  }
+  final public void pop2() {
+    countLabels = 0;
+    stackDepth -= 2;
+    try {
+      position++;
+      bCodeStream[classFileOffset++] = OPC_pop2;
+    } catch (IndexOutOfBoundsException e) {
+      resizeByteArray(OPC_pop2);
+    }
+  }
+  final public void putfield(FieldBinding fieldBinding) {
+    countLabels = 0;
+    int id;
+    if (((id = fieldBinding.type.id) == T_double) || (id == T_long))
+      stackDepth -= 3;
+    else
+      stackDepth -= 2;
+    if (stackDepth > stackMax)
+      stackMax = stackDepth;
+    try {
+      position++;
+      bCodeStream[classFileOffset++] = OPC_putfield;
+    } catch (IndexOutOfBoundsException e) {
+      resizeByteArray(OPC_putfield);
+    }
+    writeUnsignedShort(constantPool.literalIndex(fieldBinding));
+  }
+  final public void putstatic(FieldBinding fieldBinding) {
+    countLabels = 0;
+    int id;
+    if (((id = fieldBinding.type.id) == T_double) || (id == T_long))
+      stackDepth -= 2;
+    else
+      stackDepth -= 1;
+    if (stackDepth > stackMax)
+      stackMax = stackDepth;
+    try {
+      position++;
+      bCodeStream[classFileOffset++] = OPC_putstatic;
+    } catch (IndexOutOfBoundsException e) {
+      resizeByteArray(OPC_putstatic);
+    }
+    writeUnsignedShort(constantPool.literalIndex(fieldBinding));
+  }
+  public void record(LocalVariableBinding local) {
+    if (!generateLocalVariableTableAttributes)
+      return;
+    if (allLocalsCounter == locals.length) {
+      // resize the collection
+      System.arraycopy(locals, 0, (locals = new LocalVariableBinding[allLocalsCounter + LOCALS_INCREMENT]), 0, allLocalsCounter);
+    }
+    locals[allLocalsCounter++] = local;
+    local.initializationPCs = new int[4];
+    local.initializationCount = 0;
+  }
+  public void recordPositionsFrom(int startPC, int sourcePos) {
 
-       // no code generated for this node. e.g. field without any initialization
-       if (position == startPC)
-               return;
+    /* Record positions in the table, only if nothing has 
+     * already been recorded. Since we output them on the way 
+     * up (children first for more specific info)
+     * The pcToSourceMap table is always sorted.
+     */
 
-       // Widening an existing entry that already has the same source positions
-       if (pcToSourceMapSize + 4 > pcToSourceMap.length) {
-               // resize the array pcToSourceMap
-               System.arraycopy(pcToSourceMap, 0, (pcToSourceMap = new int[pcToSourceMapSize << 1]), 0, pcToSourceMapSize);
-       }
-       int newLine = ClassFile.searchLineNumber(lineSeparatorPositions, sourcePos);
-       // lastEntryPC represents the endPC of the lastEntry.
-       if (pcToSourceMapSize > 0) {
-               // in this case there is already an entry in the table
-               if (pcToSourceMap[pcToSourceMapSize - 1] != newLine) {
-                       if (startPC < lastEntryPC) {
-                               // we forgot to add an entry.
-                               // search if an existing entry exists for startPC
-                               int insertionIndex = insertionIndex(pcToSourceMap, pcToSourceMapSize, startPC);
-                               if (insertionIndex != -1) {
-                                       // there is no existing entry starting with startPC.
-                                       int existingEntryIndex = indexOfSameLineEntrySincePC(startPC, newLine); // index for PC
-                                       /* the existingEntryIndex corresponds to en entry with the same line and a PC >= startPC.
-                                               in this case it is relevant to widen this entry instead of creating a new one.
-                                               line1: this(a,
-                                                 b,
-                                                 c);
-                                               with this code we generate each argument. We generate a aload0 to invoke the constructor. There is no entry for this
-                                               aload0 bytecode. The first entry is the one for the argument a.
-                                               But we want the constructor call to start at the aload0 pc and not just at the pc of the first argument.
-                                               So we widen the existing entry (if there is one) or we create a new entry with the startPC.
-                                       */
-                                       if (existingEntryIndex != -1) {
-                                               // widen existing entry
-                                               pcToSourceMap[existingEntryIndex] = startPC;
-                                       } else {
-                                               // we have to add an entry that won't be sorted. So we sort the pcToSourceMap.
-                                               System.arraycopy(pcToSourceMap, insertionIndex, pcToSourceMap, insertionIndex + 2, pcToSourceMapSize - insertionIndex);
-                                               pcToSourceMap[insertionIndex++] = startPC;
-                                               pcToSourceMap[insertionIndex] = newLine;
-                                               pcToSourceMapSize += 2;
-                                       }
-                               }
-                               if (position != lastEntryPC) { // no bytecode since last entry pc
-                                       pcToSourceMap[pcToSourceMapSize++] = lastEntryPC;
-                                       pcToSourceMap[pcToSourceMapSize++] = newLine;
-                               }
-                       } else {
-                               // we can safely add the new entry. The endPC of the previous entry is not in conflit with the startPC of the new entry.
-                               pcToSourceMap[pcToSourceMapSize++] = startPC;
-                               pcToSourceMap[pcToSourceMapSize++] = newLine;
-                       }
-               } else {
-                       /* the last recorded entry is on the same line. But it could be relevant to widen this entry.
-                          we want to extend this entry forward in case we generated some bytecode before the last entry that are not related to any statement
-                       */      
-                       if (startPC < pcToSourceMap[pcToSourceMapSize - 2]) {
-                               int insertionIndex = insertionIndex(pcToSourceMap, pcToSourceMapSize, startPC);
-                               if (insertionIndex != -1) {
-                                       // widen the existing entry
-                                       // we have to figure out if we need to move the last entry at another location to keep a sorted table
-                                       if ((pcToSourceMapSize > 4) && (pcToSourceMap[pcToSourceMapSize - 4] > startPC)) {
-                                               System.arraycopy(pcToSourceMap, insertionIndex, pcToSourceMap, insertionIndex + 2, pcToSourceMapSize - 2 - insertionIndex);
-                                               pcToSourceMap[insertionIndex++] = startPC;
-                                               pcToSourceMap[insertionIndex] = newLine;                                                
-                                       } else {
-                                               pcToSourceMap[pcToSourceMapSize - 2] = startPC;
-                                       }
-                               }
-                       }
-               }
-               lastEntryPC = position;
-       } else {
-               // record the first entry
-               pcToSourceMap[pcToSourceMapSize++] = startPC;
-               pcToSourceMap[pcToSourceMapSize++] = newLine;
-               lastEntryPC = position;
-       }
-}
-/**
- * @param anExceptionLabel org.eclipse.jdt.internal.compiler.codegen.ExceptionLabel
- */
-public void registerExceptionHandler(ExceptionLabel anExceptionLabel) {
-       int length;
-       if (exceptionHandlersNumber >= (length = exceptionHandlers.length)) {
-               // resize the exception handlers table
-               System.arraycopy(exceptionHandlers, 0, exceptionHandlers = new ExceptionLabel[length + LABELS_INCREMENT], 0, length);
-       }
-       // no need to resize. So just add the new exception label
-       exceptionHandlers[exceptionHandlersNumber++] = anExceptionLabel;
-}
-public final void removeNotDefinitelyAssignedVariables(Scope scope, int initStateIndex) {
-       // given some flow info, make sure we did not loose some variables initialization
-       // if this happens, then we must update their pc entries to reflect it in debug attributes
-       if (!generateLocalVariableTableAttributes)
-               return;
-/*     if (initStateIndex == lastInitStateIndexWhenRemovingInits)
-               return;
-               
-       lastInitStateIndexWhenRemovingInits = initStateIndex;
-       if (lastInitStateIndexWhenAddingInits != initStateIndex){
-               lastInitStateIndexWhenAddingInits = -2;// reinitialize add index 
-               // add(1)-remove(1)-add(1) -> ignore second add
-               // add(1)-remove(2)-add(1) -> perform second add
-       }*/
-       for (int i = 0; i < visibleLocalsCount; i++) {
-               LocalVariableBinding localBinding = visibleLocals[i];
-               if (localBinding != null) {
-                       if (initStateIndex == -1 || !isDefinitelyAssigned(scope, initStateIndex, localBinding)) {
-                               if (localBinding.initializationCount > 0) {
-                                       localBinding.recordInitializationEndPC(position);
-                               }
-                       }
-               }
-       }
-}
-/**
- * @param methodDeclaration org.eclipse.jdt.internal.compiler.ast.AbstractMethodDeclaration
- * @param classFile org.eclipse.jdt.internal.compiler.codegen.ClassFile
- */
-public void reset(AbstractMethodDeclaration methodDeclaration, ClassFile classFile) {
-       init(classFile);
-       this.methodDeclaration = methodDeclaration;
-       preserveUnusedLocals = methodDeclaration.scope.problemReporter().options.preserveAllLocalVariables;
-       initializeMaxLocals(methodDeclaration.binding);
-}
-/**
- * @param methodDeclaration org.eclipse.jdt.internal.compiler.ast.AbstractMethodDeclaration
- * @param classFile org.eclipse.jdt.internal.compiler.codegen.ClassFile
- */
-public void resetForProblemClinit(ClassFile classFile) {
-       init(classFile);
-       maxLocals = 0;
-}
-protected final void resizeByteArray() {
-       int actualLength = bCodeStream.length;
-       int requiredSize = actualLength + growFactor;
-       if (classFileOffset > requiredSize) {
-               requiredSize = classFileOffset + growFactor;
-       }
-       System.arraycopy(bCodeStream, 0, (bCodeStream = new byte[requiredSize]), 0, actualLength);
-}
-/**
- * This method is used to resize the internal byte array in 
- * case of a ArrayOutOfBoundsException when adding the value b.
- * Resize and add the new byte b inside the array.
- * @param b byte
- */
-protected final void resizeByteArray(byte b) {
-       resizeByteArray();
-       bCodeStream[classFileOffset - 1] = b;
-}
-final public void ret(int index) {
-       countLabels = 0;
-       if (index > 255) { // Widen
-               try {
-                       position++;
-                       bCodeStream[classFileOffset++] = OPC_wide;
-               } catch (IndexOutOfBoundsException e) {
-                       resizeByteArray(OPC_wide);
-               }
-               try {
-                       position++;
-                       bCodeStream[classFileOffset++] = OPC_ret;
-               } catch (IndexOutOfBoundsException e) {
-                       resizeByteArray(OPC_ret);
-               }
-               writeUnsignedShort(index);
-       } else { // Don't Widen
-               try {
-                       position++;
-                       bCodeStream[classFileOffset++] = OPC_ret;
-               } catch (IndexOutOfBoundsException e) {
-                       resizeByteArray(OPC_ret);
-               }
-               try {
-                       position++;
-                       bCodeStream[classFileOffset++] = (byte) index;
-               } catch (IndexOutOfBoundsException e) {
-                       resizeByteArray((byte) index);
-               }
-       }
-}
-final public void return_() {
-       countLabels = 0;
-       // the stackDepth should be equal to 0 
-       try {
-               position++;
-               bCodeStream[classFileOffset++] = OPC_return;
-       } catch (IndexOutOfBoundsException e) {
-               resizeByteArray(OPC_return);
-       }
-}
-final public void saload() {
-       countLabels = 0;
-       stackDepth--;
-       try {
-               position++;
-               bCodeStream[classFileOffset++] = OPC_saload;
-       } catch (IndexOutOfBoundsException e) {
-               resizeByteArray(OPC_saload);
-       }
-}
-final public void sastore() {
-       countLabels = 0;
-       stackDepth -= 3;
-       try {
-               position++;
-               bCodeStream[classFileOffset++] = OPC_sastore;
-       } catch (IndexOutOfBoundsException e) {
-               resizeByteArray(OPC_sastore);
-       }
-}
-/**
- * @param operatorConstant int
- * @param type_ID int
- */
-public void sendOperator(int operatorConstant, int type_ID) {
-       switch (type_ID) {
-               case T_int :
-               case T_boolean :
-               case T_char :
-               case T_byte :
-               case T_short :
-                       switch (operatorConstant) {
-                               case PLUS :
-                                       this.iadd();
-                                       break;
-                               case MINUS :
-                                       this.isub();
-                                       break;
-                               case MULTIPLY :
-                                       this.imul();
-                                       break;
-                               case DIVIDE :
-                                       this.idiv();
-                                       break;
-                               case REMAINDER :
-                                       this.irem();
-                                       break;
-                               case LEFT_SHIFT :
-                                       this.ishl();
-                                       break;
-                               case RIGHT_SHIFT :
-                                       this.ishr();
-                                       break;
-                               case UNSIGNED_RIGHT_SHIFT :
-                                       this.iushr();
-                                       break;
-                               case AND :
-                                       this.iand();
-                                       break;
-                               case OR :
-                                       this.ior();
-                                       break;
-                               case XOR :
-                                       this.ixor();
-                                       break;
-                       }
-                       break;
-               case T_long :
-                       switch (operatorConstant) {
-                               case PLUS :
-                                       this.ladd();
-                                       break;
-                               case MINUS :
-                                       this.lsub();
-                                       break;
-                               case MULTIPLY :
-                                       this.lmul();
-                                       break;
-                               case DIVIDE :
-                                       this.ldiv();
-                                       break;
-                               case REMAINDER :
-                                       this.lrem();
-                                       break;
-                               case LEFT_SHIFT :
-                                       this.lshl();
-                                       break;
-                               case RIGHT_SHIFT :
-                                       this.lshr();
-                                       break;
-                               case UNSIGNED_RIGHT_SHIFT :
-                                       this.lushr();
-                                       break;
-                               case AND :
-                                       this.land();
-                                       break;
-                               case OR :
-                                       this.lor();
-                                       break;
-                               case XOR :
-                                       this.lxor();
-                                       break;
-                       }
-                       break;
-               case T_float :
-                       switch (operatorConstant) {
-                               case PLUS :
-                                       this.fadd();
-                                       break;
-                               case MINUS :
-                                       this.fsub();
-                                       break;
-                               case MULTIPLY :
-                                       this.fmul();
-                                       break;
-                               case DIVIDE :
-                                       this.fdiv();
-                                       break;
-                               case REMAINDER :
-                                       this.frem();
-                       }
-                       break;
-               case T_double :
-                       switch (operatorConstant) {
-                               case PLUS :
-                                       this.dadd();
-                                       break;
-                               case MINUS :
-                                       this.dsub();
-                                       break;
-                               case MULTIPLY :
-                                       this.dmul();
-                                       break;
-                               case DIVIDE :
-                                       this.ddiv();
-                                       break;
-                               case REMAINDER :
-                                       this.drem();
-                       }
-       }
-}
-final public void sipush(int s) {
-       countLabels = 0;
-       stackDepth++;
-       if (stackDepth > stackMax)
-               stackMax = stackDepth;
-       try {
-               position++;
-               bCodeStream[classFileOffset++] = OPC_sipush;
-       } catch (IndexOutOfBoundsException e) {
-               resizeByteArray(OPC_sipush);
-       }
-       writeSignedShort(s);
-}
-public static final void sort(int[] tab, int lo0, int hi0, int[] result) {
-       int lo = lo0;
-       int hi = hi0;
-       int mid;
-       if (hi0 > lo0) {
-               /* Arbitrarily establishing partition element as the midpoint of
-                 * the array.
-                 */
-               mid = tab[ (lo0 + hi0) / 2];
-               // loop through the array until indices cross
-               while (lo <= hi) {
-                       /* find the first element that is greater than or equal to 
-                        * the partition element starting from the left Index.
-                        */
-                       while ((lo < hi0) && (tab[lo] < mid))
-                               ++lo;
-                       /* find an element that is smaller than or equal to 
-                        * the partition element starting from the right Index.
-                        */
-                       while ((hi > lo0) && (tab[hi] > mid))
-                               --hi;
-                       // if the indexes have not crossed, swap
-                       if (lo <= hi) {
-                               swap(tab, lo, hi, result);
-                               ++lo;
-                               --hi;
-                       }
-               }
-               /* If the right index has not reached the left side of array
-                 * must now sort the left partition.
-                 */
-               if (lo0 < hi)
-                       sort(tab, lo0, hi, result);
-               /* If the left index has not reached the right side of array
-                 * must now sort the right partition.
-                 */
-               if (lo < hi0)
-                       sort(tab, lo, hi0, result);
-       }
-}
-public final void store(LocalVariableBinding localBinding, boolean valueRequired) {
-       TypeBinding type = localBinding.type;
-       int position = localBinding.resolvedPosition;
-       // Using dedicated int bytecode
-       if ((type == IntBinding) || (type == CharBinding) || (type == ByteBinding) || (type == ShortBinding) || (type == BooleanBinding)) {
-               if (valueRequired)
-                       this.dup();
-               switch (position) {
-                       case 0 :
-                               this.istore_0();
-                               break;
-                       case 1 :
-                               this.istore_1();
-                               break;
-                       case 2 :
-                               this.istore_2();
-                               break;
-                       case 3 :
-                               this.istore_3();
-                               break;
-                       default :
-                               this.istore(position);
-               }
-               return;
-       }
-       // Using dedicated float bytecode
-       if (type == FloatBinding) {
-               if (valueRequired)
-                       this.dup();
-               switch (position) {
-                       case 0 :
-                               this.fstore_0();
-                               break;
-                       case 1 :
-                               this.fstore_1();
-                               break;
-                       case 2 :
-                               this.fstore_2();
-                               break;
-                       case 3 :
-                               this.fstore_3();
-                               break;
-                       default :
-                               this.fstore(position);
-               }
-               return;
-       }
-       // Using dedicated long bytecode
-       if (type == LongBinding) {
-               if (valueRequired)
-                       this.dup2();
-               switch (position) {
-                       case 0 :
-                               this.lstore_0();
-                               break;
-                       case 1 :
-                               this.lstore_1();
-                               break;
-                       case 2 :
-                               this.lstore_2();
-                               break;
-                       case 3 :
-                               this.lstore_3();
-                               break;
-                       default :
-                               this.lstore(position);
-               }
-               return;
-       }
-       // Using dedicated double bytecode
-       if (type == DoubleBinding) {
-               if (valueRequired)
-                       this.dup2();
-               switch (position) {
-                       case 0 :
-                               this.dstore_0();
-                               break;
-                       case 1 :
-                               this.dstore_1();
-                               break;
-                       case 2 :
-                               this.dstore_2();
-                               break;
-                       case 3 :
-                               this.dstore_3();
-                               break;
-                       default :
-                               this.dstore(position);
-               }
-               return;
-       }
-       // Reference object
-       if (valueRequired)
-               this.dup();
-       switch (position) {
-               case 0 :
-                       this.astore_0();
-                       break;
-               case 1 :
-                       this.astore_1();
-                       break;
-               case 2 :
-                       this.astore_2();
-                       break;
-               case 3 :
-                       this.astore_3();
-                       break;
-               default :
-                       this.astore(position);
-       }
-}
-public final void store(TypeBinding type, int position) {
-       // Using dedicated int bytecode
-       if ((type == IntBinding) || (type == CharBinding) || (type == ByteBinding) || (type == ShortBinding) || (type == BooleanBinding)) {
-               switch (position) {
-                       case 0 :
-                               this.istore_0();
-                               break;
-                       case 1 :
-                               this.istore_1();
-                               break;
-                       case 2 :
-                               this.istore_2();
-                               break;
-                       case 3 :
-                               this.istore_3();
-                               break;
-                       default :
-                               this.istore(position);
-               }
-               return;
-       }
-       // Using dedicated float bytecode
-       if (type == FloatBinding) {
-               switch (position) {
-                       case 0 :
-                               this.fstore_0();
-                               break;
-                       case 1 :
-                               this.fstore_1();
-                               break;
-                       case 2 :
-                               this.fstore_2();
-                               break;
-                       case 3 :
-                               this.fstore_3();
-                               break;
-                       default :
-                               this.fstore(position);
-               }
-               return;
-       }
-       // Using dedicated long bytecode
-       if (type == LongBinding) {
-               switch (position) {
-                       case 0 :
-                               this.lstore_0();
-                               break;
-                       case 1 :
-                               this.lstore_1();
-                               break;
-                       case 2 :
-                               this.lstore_2();
-                               break;
-                       case 3 :
-                               this.lstore_3();
-                               break;
-                       default :
-                               this.lstore(position);
-               }
-               return;
-       }
-       // Using dedicated double bytecode
-       if (type == DoubleBinding) {
-               switch (position) {
-                       case 0 :
-                               this.dstore_0();
-                               break;
-                       case 1 :
-                               this.dstore_1();
-                               break;
-                       case 2 :
-                               this.dstore_2();
-                               break;
-                       case 3 :
-                               this.dstore_3();
-                               break;
-                       default :
-                               this.dstore(position);
-               }
-               return;
-       }
-       // Reference object
-       switch (position) {
-               case 0 :
-                       this.astore_0();
-                       break;
-               case 1 :
-                       this.astore_1();
-                       break;
-               case 2 :
-                       this.astore_2();
-                       break;
-               case 3 :
-                       this.astore_3();
-                       break;
-               default :
-                       this.astore(position);
-       }
-}
-public final void storeInt(int position) {
-       switch (position) {
-               case 0 :
-                       this.istore_0();
-                       break;
-               case 1 :
-                       this.istore_1();
-                       break;
-               case 2 :
-                       this.istore_2();
-                       break;
-               case 3 :
-                       this.istore_3();
-                       break;
-               default :
-                       this.istore(position);
-       }
-}
-public final void storeObject(int position) {
-       switch (position) {
-               case 0 :
-                       this.astore_0();
-                       break;
-               case 1 :
-                       this.astore_1();
-                       break;
-               case 2 :
-                       this.astore_2();
-                       break;
-               case 3 :
-                       this.astore_3();
-                       break;
-               default :
-                       this.astore(position);
-       }
-}
-final public void swap() {
-       countLabels = 0;
-       try {
-               position++;
-               bCodeStream[classFileOffset++] = OPC_swap;
-       } catch (IndexOutOfBoundsException e) {
-               resizeByteArray(OPC_swap);
-       }
-}
-private static final void swap(int a[], int i, int j, int result[]) {
-       int T;
-       T = a[i];
-       a[i] = a[j];
-       a[j] = T;
-       T = result[j];
-       result[j] = result[i];
-       result[i] = T;
-}
-final public void tableswitch(CaseLabel defaultLabel, int low, int high, int[] keys, int[] sortedIndexes, CaseLabel[] casesLabel) {
-       countLabels = 0;
-       stackDepth--;
-       int length = casesLabel.length;
-       int pos = position;
-       defaultLabel.placeInstruction();
-       for (int i = 0; i < length; i++)
-               casesLabel[i].placeInstruction();
-       try {
-               position++;
-               bCodeStream[classFileOffset++] = OPC_tableswitch;
-       } catch (IndexOutOfBoundsException e) {
-               resizeByteArray(OPC_tableswitch);
-       }
-       for (int i = (3 - (pos % 4)); i > 0; i--) {
-               position++; // Padding
-               classFileOffset++;
-       }
-       defaultLabel.branch();
-       writeSignedWord(low);
-       writeSignedWord(high);
-       int i = low, j = low;
-       // the index j is used to know if the index i is one of the missing entries in case of an 
-       // optimized tableswitch
-       while (true) {
-               int index;
-               int key = keys[index = sortedIndexes[j - low]];
-               if (key == i) {
-                       casesLabel[index].branch();
-                       j++;
-                       if (i == high) break; // if high is maxint, then avoids wrapping to minint.
-               } else {
-                       defaultLabel.branch();
-               }
-               i++;
-       }
-}
-public String toString() {
-       StringBuffer buffer = new StringBuffer("( position:"); //$NON-NLS-1$
-       buffer.append(position);
-       buffer.append(",\nstackDepth:"); //$NON-NLS-1$
-       buffer.append(stackDepth);
-       buffer.append(",\nmaxStack:"); //$NON-NLS-1$
-       buffer.append(stackMax);
-       buffer.append(",\nmaxLocals:"); //$NON-NLS-1$
-       buffer.append(maxLocals);
-       buffer.append(")"); //$NON-NLS-1$
-       return buffer.toString();
-}
-public void updateLastRecordedEndPC(int pos) {
+    if (!generateLineNumberAttributes)
+      return;
+    if (sourcePos == 0)
+      return;
 
-       /* Tune positions in the table, this is due to some 
-        * extra bytecodes being
-        * added to some user code (jumps). */
-       /** OLD CODE
-               if (!generateLineNumberAttributes)
-                       return;
-               pcToSourceMap[pcToSourceMapSize - 1][1] = position;
-               // need to update the initialization endPC in case of generation of local variable attributes.
-               updateLocalVariablesAttribute(pos);     
-       */      
+    // no code generated for this node. e.g. field without any initialization
+    if (position == startPC)
+      return;
 
-       if (!generateLineNumberAttributes)
-               return;
-       // need to update the initialization endPC in case of generation of local variable attributes.
-       updateLocalVariablesAttribute(pos);
-}
-public void updateLocalVariablesAttribute(int pos) {
-       // need to update the initialization endPC in case of generation of local variable attributes.
-       if (generateLocalVariableTableAttributes) {
-               for (int i = 0, max = locals.length; i < max; i++) {
-                       LocalVariableBinding local = locals[i];
-                       if ((local != null) && (local.initializationCount > 0)) {
-                               if (local.initializationPCs[((local.initializationCount - 1) << 1) + 1] == pos) {
-                                       local.initializationPCs[((local.initializationCount - 1) << 1) + 1] = position;
-                               }
-                       }
-               }
-       }
-}
-final public void wide() {
-       countLabels = 0;
-       try {
-               position++;
-               bCodeStream[classFileOffset++] = OPC_wide;
-       } catch (IndexOutOfBoundsException e) {
-               resizeByteArray(OPC_wide);
-       }
-}
-public final void writeByte(byte b) {
-       try {
-               position++;
-               bCodeStream[classFileOffset++] = b;
-       } catch (IndexOutOfBoundsException e) {
-               resizeByteArray(b);
-       }
-}
-public final void writeByteAtPos(int pos, byte b) {
-       try {
-               bCodeStream[pos] = b;
-       } catch (IndexOutOfBoundsException ex) {
-               resizeByteArray();
-               bCodeStream[pos] = b;
-       }
-}
-/**
- * Write a unsigned 8 bits value into the byte array
- * @param b the signed byte
- */
-public final void writeSignedByte(int b) {
-       try {
-               position++;
-               bCodeStream[classFileOffset++] = (byte) b;
-       } catch (IndexOutOfBoundsException e) {
-               resizeByteArray((byte) b);
-       }
-}
-/**
- * Write a signed 16 bits value into the byte array
- * @param b the signed short
- */
-public final void writeSignedShort(int b) {
-       try {
-               position++;
-               bCodeStream[classFileOffset++] = (byte) (b >> 8);
-       } catch (IndexOutOfBoundsException e) {
-               resizeByteArray((byte) (b >> 8));
-       }
-       try {
-               position++;
-               bCodeStream[classFileOffset++] = (byte) b;
-       } catch (IndexOutOfBoundsException e) {
-               resizeByteArray((byte) b);
-       }
-}
-public final void writeSignedShort(int pos, int b) {
-       int currentOffset = startingClassFileOffset + pos;
-       try {
-               bCodeStream[currentOffset] = (byte) (b >> 8);
-       } catch (IndexOutOfBoundsException e) {
-               resizeByteArray();
-               bCodeStream[currentOffset] = (byte) (b >> 8);
-       }
-       try {
-               bCodeStream[currentOffset + 1] = (byte) b;
-       } catch (IndexOutOfBoundsException e) {
-               resizeByteArray();
-               bCodeStream[currentOffset + 1] = (byte) b;
-       }
-}
-public final void writeSignedWord(int value) {
-       try {
-               position++;
-               bCodeStream[classFileOffset++] = (byte) ((value & 0xFF000000) >> 24);
-       } catch (IndexOutOfBoundsException e) {
-               resizeByteArray((byte) ((value & 0xFF000000) >> 24));
-       }
-       try {
-               position++;
-               bCodeStream[classFileOffset++] = (byte) ((value & 0xFF0000) >> 16);
-       } catch (IndexOutOfBoundsException e) {
-               resizeByteArray((byte) ((value & 0xFF0000) >> 16));
-       }
-       try {
-               position++;
-               bCodeStream[classFileOffset++] = (byte) ((value & 0xFF00) >> 8);
-       } catch (IndexOutOfBoundsException e) {
-               resizeByteArray((byte) ((value & 0xFF00) >> 8));
-       }
-       try {
-               position++;
-               bCodeStream[classFileOffset++] = (byte) (value & 0xFF);
-       } catch (IndexOutOfBoundsException e) {
-               resizeByteArray((byte) (value & 0xFF));
-       }
-}
-public final void writeSignedWord(int pos, int value) {
-       int currentOffset = startingClassFileOffset + pos;
-       try {
-               bCodeStream[currentOffset++] = (byte) ((value & 0xFF000000) >> 24);
-       } catch (IndexOutOfBoundsException e) {
-               resizeByteArray();
-               bCodeStream[currentOffset-1] = (byte) ((value & 0xFF000000) >> 24);
-       }
-       try {
-               bCodeStream[currentOffset++] = (byte) ((value & 0xFF0000) >> 16);
-       } catch (IndexOutOfBoundsException e) {
-               resizeByteArray();
-               bCodeStream[currentOffset-1] = (byte) ((value & 0xFF0000) >> 16);
-       }
-       try {
-               bCodeStream[currentOffset++] = (byte) ((value & 0xFF00) >> 8);
-       } catch (IndexOutOfBoundsException e) {
-               resizeByteArray();
-               bCodeStream[currentOffset-1] = (byte) ((value & 0xFF00) >> 8);
-       }
-       try {
-               bCodeStream[currentOffset++] = (byte) (value & 0xFF);
-       } catch (IndexOutOfBoundsException e) {
-               resizeByteArray();
-               bCodeStream[currentOffset-1] = (byte) (value & 0xFF);
-       }
-}
-/**
- * Write a unsigned 8 bits value into the byte array
- * @param b the unsigned byte
- */
-public final void writeUnsignedByte(int b) {
-       try {
-               position++;
-               bCodeStream[classFileOffset++] = (byte) b;
-       } catch (IndexOutOfBoundsException e) {
-               resizeByteArray((byte) b);
-       }
-}
-/**
- * Write a unsigned 16 bits value into the byte array
- * @param b the unsigned short
- */
-public final void writeUnsignedShort(int b) {
-       try {
-               position++;
-               bCodeStream[classFileOffset++] = (byte) (b >>> 8);
-       } catch (IndexOutOfBoundsException e) {
-               resizeByteArray((byte) (b >>> 8));
-       }
-       try {
-               position++;
-               bCodeStream[classFileOffset++] = (byte) b;
-       } catch (IndexOutOfBoundsException e) {
-               resizeByteArray((byte) b);
-       }
-}
-/**
- * Write a unsigned 32 bits value into the byte array
- * @param value the unsigned word
- */
-public final void writeUnsignedWord(int value) {
-       try {
-               position++;
-               bCodeStream[classFileOffset++] = (byte) (value >>> 24);
-       } catch (IndexOutOfBoundsException e) {
-               resizeByteArray((byte) (value >>> 24));
-       }
-       try {
-               position++;
-               bCodeStream[classFileOffset++] = (byte) (value >>> 16);
-       } catch (IndexOutOfBoundsException e) {
-               resizeByteArray((byte) (value >>> 16));
-       }
-       try {
-               position++;
-               bCodeStream[classFileOffset++] = (byte) (value >>> 8);
-       } catch (IndexOutOfBoundsException e) {
-               resizeByteArray((byte) (value >>> 8));
-       }
-       try {
-               position++;
-               bCodeStream[classFileOffset++] = (byte) value;
-       } catch (IndexOutOfBoundsException e) {
-               resizeByteArray((byte) value);
-       }
-}
+    // Widening an existing entry that already has the same source positions
+    if (pcToSourceMapSize + 4 > pcToSourceMap.length) {
+      // resize the array pcToSourceMap
+      System.arraycopy(pcToSourceMap, 0, (pcToSourceMap = new int[pcToSourceMapSize << 1]), 0, pcToSourceMapSize);
+    }
+    int newLine = ClassFile.searchLineNumber(lineSeparatorPositions, sourcePos);
+    // lastEntryPC represents the endPC of the lastEntry.
+    if (pcToSourceMapSize > 0) {
+      // in this case there is already an entry in the table
+      if (pcToSourceMap[pcToSourceMapSize - 1] != newLine) {
+        if (startPC < lastEntryPC) {
+          // we forgot to add an entry.
+          // search if an existing entry exists for startPC
+          int insertionIndex = insertionIndex(pcToSourceMap, pcToSourceMapSize, startPC);
+          if (insertionIndex != -1) {
+            // there is no existing entry starting with startPC.
+            int existingEntryIndex = indexOfSameLineEntrySincePC(startPC, newLine); // index for PC
+            /* the existingEntryIndex corresponds to en entry with the same line and a PC >= startPC.
+               in this case it is relevant to widen this entry instead of creating a new one.
+               line1: this(a,
+                 b,
+                 c);
+               with this code we generate each argument. We generate a aload0 to invoke the constructor. There is no entry for this
+               aload0 bytecode. The first entry is the one for the argument a.
+               But we want the constructor call to start at the aload0 pc and not just at the pc of the first argument.
+               So we widen the existing entry (if there is one) or we create a new entry with the startPC.
+            */
+            if (existingEntryIndex != -1) {
+              // widen existing entry
+              pcToSourceMap[existingEntryIndex] = startPC;
+            } else {
+              // we have to add an entry that won't be sorted. So we sort the pcToSourceMap.
+              System.arraycopy(
+                pcToSourceMap,
+                insertionIndex,
+                pcToSourceMap,
+                insertionIndex + 2,
+                pcToSourceMapSize - insertionIndex);
+              pcToSourceMap[insertionIndex++] = startPC;
+              pcToSourceMap[insertionIndex] = newLine;
+              pcToSourceMapSize += 2;
+            }
+          }
+          if (position != lastEntryPC) { // no bytecode since last entry pc
+            pcToSourceMap[pcToSourceMapSize++] = lastEntryPC;
+            pcToSourceMap[pcToSourceMapSize++] = newLine;
+          }
+        } else {
+          // we can safely add the new entry. The endPC of the previous entry is not in conflit with the startPC of the new entry.
+          pcToSourceMap[pcToSourceMapSize++] = startPC;
+          pcToSourceMap[pcToSourceMapSize++] = newLine;
+        }
+      } else {
+        /* the last recorded entry is on the same line. But it could be relevant to widen this entry.
+           we want to extend this entry forward in case we generated some bytecode before the last entry that are not related to any statement
+        */
+        if (startPC < pcToSourceMap[pcToSourceMapSize - 2]) {
+          int insertionIndex = insertionIndex(pcToSourceMap, pcToSourceMapSize, startPC);
+          if (insertionIndex != -1) {
+            // widen the existing entry
+            // we have to figure out if we need to move the last entry at another location to keep a sorted table
+            if ((pcToSourceMapSize > 4) && (pcToSourceMap[pcToSourceMapSize - 4] > startPC)) {
+              System.arraycopy(
+                pcToSourceMap,
+                insertionIndex,
+                pcToSourceMap,
+                insertionIndex + 2,
+                pcToSourceMapSize - 2 - insertionIndex);
+              pcToSourceMap[insertionIndex++] = startPC;
+              pcToSourceMap[insertionIndex] = newLine;
+            } else {
+              pcToSourceMap[pcToSourceMapSize - 2] = startPC;
+            }
+          }
+        }
+      }
+      lastEntryPC = position;
+    } else {
+      // record the first entry
+      pcToSourceMap[pcToSourceMapSize++] = startPC;
+      pcToSourceMap[pcToSourceMapSize++] = newLine;
+      lastEntryPC = position;
+    }
+  }
+  /**
+   * @param anExceptionLabel org.eclipse.jdt.internal.compiler.codegen.ExceptionLabel
+   */
+  public void registerExceptionHandler(ExceptionLabel anExceptionLabel) {
+    int length;
+    if (exceptionHandlersNumber >= (length = exceptionHandlers.length)) {
+      // resize the exception handlers table
+      System.arraycopy(exceptionHandlers, 0, exceptionHandlers = new ExceptionLabel[length + LABELS_INCREMENT], 0, length);
+    }
+    // no need to resize. So just add the new exception label
+    exceptionHandlers[exceptionHandlersNumber++] = anExceptionLabel;
+  }
+  public final void removeNotDefinitelyAssignedVariables(Scope scope, int initStateIndex) {
+    // given some flow info, make sure we did not loose some variables initialization
+    // if this happens, then we must update their pc entries to reflect it in debug attributes
+    if (!generateLocalVariableTableAttributes)
+      return;
+    /* if (initStateIndex == lastInitStateIndexWhenRemovingInits)
+               return;
+               
+       lastInitStateIndexWhenRemovingInits = initStateIndex;
+       if (lastInitStateIndexWhenAddingInits != initStateIndex){
+               lastInitStateIndexWhenAddingInits = -2;// reinitialize add index 
+               // add(1)-remove(1)-add(1) -> ignore second add
+               // add(1)-remove(2)-add(1) -> perform second add
+       }*/
+    for (int i = 0; i < visibleLocalsCount; i++) {
+      LocalVariableBinding localBinding = visibleLocals[i];
+      if (localBinding != null) {
+        if (initStateIndex == -1 || !isDefinitelyAssigned(scope, initStateIndex, localBinding)) {
+          if (localBinding.initializationCount > 0) {
+            localBinding.recordInitializationEndPC(position);
+          }
+        }
+      }
+    }
+  }
+  /**
+   * @param methodDeclaration org.eclipse.jdt.internal.compiler.ast.AbstractMethodDeclaration
+   * @param classFile org.eclipse.jdt.internal.compiler.codegen.ClassFile
+   */
+  public void reset(AbstractMethodDeclaration methodDeclaration, ClassFile classFile) {
+    init(classFile);
+    this.methodDeclaration = methodDeclaration;
+    preserveUnusedLocals = methodDeclaration.scope.problemReporter().options.preserveAllLocalVariables;
+    initializeMaxLocals(methodDeclaration.binding);
+  }
+  /**
+   * @param methodDeclaration org.eclipse.jdt.internal.compiler.ast.AbstractMethodDeclaration
+   * @param classFile org.eclipse.jdt.internal.compiler.codegen.ClassFile
+   */
+  public void resetForProblemClinit(ClassFile classFile) {
+    init(classFile);
+    maxLocals = 0;
+  }
+  protected final void resizeByteArray() {
+    int actualLength = bCodeStream.length;
+    int requiredSize = actualLength + growFactor;
+    if (classFileOffset > requiredSize) {
+      requiredSize = classFileOffset + growFactor;
+    }
+    System.arraycopy(bCodeStream, 0, (bCodeStream = new byte[requiredSize]), 0, actualLength);
+  }
+  /**
+   * This method is used to resize the internal byte array in 
+   * case of a ArrayOutOfBoundsException when adding the value b.
+   * Resize and add the new byte b inside the array.
+   * @param b byte
+   */
+  protected final void resizeByteArray(byte b) {
+    resizeByteArray();
+    bCodeStream[classFileOffset - 1] = b;
+  }
+  final public void ret(int index) {
+    countLabels = 0;
+    if (index > 255) { // Widen
+      try {
+        position++;
+        bCodeStream[classFileOffset++] = OPC_wide;
+      } catch (IndexOutOfBoundsException e) {
+        resizeByteArray(OPC_wide);
+      }
+      try {
+        position++;
+        bCodeStream[classFileOffset++] = OPC_ret;
+      } catch (IndexOutOfBoundsException e) {
+        resizeByteArray(OPC_ret);
+      }
+      writeUnsignedShort(index);
+    } else { // Don't Widen
+      try {
+        position++;
+        bCodeStream[classFileOffset++] = OPC_ret;
+      } catch (IndexOutOfBoundsException e) {
+        resizeByteArray(OPC_ret);
+      }
+      try {
+        position++;
+        bCodeStream[classFileOffset++] = (byte) index;
+      } catch (IndexOutOfBoundsException e) {
+        resizeByteArray((byte) index);
+      }
+    }
+  }
+  final public void return_() {
+    countLabels = 0;
+    // the stackDepth should be equal to 0 
+    try {
+      position++;
+      bCodeStream[classFileOffset++] = OPC_return;
+    } catch (IndexOutOfBoundsException e) {
+      resizeByteArray(OPC_return);
+    }
+  }
+  final public void saload() {
+    countLabels = 0;
+    stackDepth--;
+    try {
+      position++;
+      bCodeStream[classFileOffset++] = OPC_saload;
+    } catch (IndexOutOfBoundsException e) {
+      resizeByteArray(OPC_saload);
+    }
+  }
+  final public void sastore() {
+    countLabels = 0;
+    stackDepth -= 3;
+    try {
+      position++;
+      bCodeStream[classFileOffset++] = OPC_sastore;
+    } catch (IndexOutOfBoundsException e) {
+      resizeByteArray(OPC_sastore);
+    }
+  }
+  /**
+   * @param operatorConstant int
+   * @param type_ID int
+   */
+  public void sendOperator(int operatorConstant, int type_ID) {
+    switch (type_ID) {
+      case T_int :
+      case T_boolean :
+      case T_char :
+      case T_byte :
+      case T_short :
+        switch (operatorConstant) {
+          case PLUS :
+            this.iadd();
+            break;
+          case MINUS :
+            this.isub();
+            break;
+          case MULTIPLY :
+            this.imul();
+            break;
+          case DIVIDE :
+            this.idiv();
+            break;
+          case REMAINDER :
+            this.irem();
+            break;
+          case LEFT_SHIFT :
+            this.ishl();
+            break;
+          case RIGHT_SHIFT :
+            this.ishr();
+            break;
+          case UNSIGNED_RIGHT_SHIFT :
+            this.iushr();
+            break;
+          case AND :
+            this.iand();
+            break;
+          case OR :
+            this.ior();
+            break;
+          case XOR :
+            this.ixor();
+            break;
+        }
+        break;
+      case T_long :
+        switch (operatorConstant) {
+          case PLUS :
+            this.ladd();
+            break;
+          case MINUS :
+            this.lsub();
+            break;
+          case MULTIPLY :
+            this.lmul();
+            break;
+          case DIVIDE :
+            this.ldiv();
+            break;
+          case REMAINDER :
+            this.lrem();
+            break;
+          case LEFT_SHIFT :
+            this.lshl();
+            break;
+          case RIGHT_SHIFT :
+            this.lshr();
+            break;
+          case UNSIGNED_RIGHT_SHIFT :
+            this.lushr();
+            break;
+          case AND :
+            this.land();
+            break;
+          case OR :
+            this.lor();
+            break;
+          case XOR :
+            this.lxor();
+            break;
+        }
+        break;
+      case T_float :
+        switch (operatorConstant) {
+          case PLUS :
+            this.fadd();
+            break;
+          case MINUS :
+            this.fsub();
+            break;
+          case MULTIPLY :
+            this.fmul();
+            break;
+          case DIVIDE :
+            this.fdiv();
+            break;
+          case REMAINDER :
+            this.frem();
+        }
+        break;
+      case T_double :
+        switch (operatorConstant) {
+          case PLUS :
+            this.dadd();
+            break;
+          case MINUS :
+            this.dsub();
+            break;
+          case MULTIPLY :
+            this.dmul();
+            break;
+          case DIVIDE :
+            this.ddiv();
+            break;
+          case REMAINDER :
+            this.drem();
+        }
+    }
+  }
+  final public void sipush(int s) {
+    countLabels = 0;
+    stackDepth++;
+    if (stackDepth > stackMax)
+      stackMax = stackDepth;
+    try {
+      position++;
+      bCodeStream[classFileOffset++] = OPC_sipush;
+    } catch (IndexOutOfBoundsException e) {
+      resizeByteArray(OPC_sipush);
+    }
+    writeSignedShort(s);
+  }
+  public static final void sort(int[] tab, int lo0, int hi0, int[] result) {
+    int lo = lo0;
+    int hi = hi0;
+    int mid;
+    if (hi0 > lo0) {
+      /* Arbitrarily establishing partition element as the midpoint of
+        * the array.
+        */
+      mid = tab[(lo0 + hi0) / 2];
+      // loop through the array until indices cross
+      while (lo <= hi) {
+        /* find the first element that is greater than or equal to 
+         * the partition element starting from the left Index.
+         */
+        while ((lo < hi0) && (tab[lo] < mid))
+          ++lo;
+        /* find an element that is smaller than or equal to 
+         * the partition element starting from the right Index.
+         */
+        while ((hi > lo0) && (tab[hi] > mid))
+          --hi;
+        // if the indexes have not crossed, swap
+        if (lo <= hi) {
+          swap(tab, lo, hi, result);
+          ++lo;
+          --hi;
+        }
+      }
+      /* If the right index has not reached the left side of array
+        * must now sort the left partition.
+        */
+      if (lo0 < hi)
+        sort(tab, lo0, hi, result);
+      /* If the left index has not reached the right side of array
+        * must now sort the right partition.
+        */
+      if (lo < hi0)
+        sort(tab, lo, hi0, result);
+    }
+  }
+  public final void store(LocalVariableBinding localBinding, boolean valueRequired) {
+    TypeBinding type = localBinding.type;
+    int position = localBinding.resolvedPosition;
+    // Using dedicated int bytecode
+    if ((type == IntBinding)
+      || (type == CharBinding)
+      || (type == ByteBinding)
+      || (type == ShortBinding)
+      || (type == BooleanBinding)) {
+      if (valueRequired)
+        this.dup();
+      switch (position) {
+        case 0 :
+          this.istore_0();
+          break;
+        case 1 :
+          this.istore_1();
+          break;
+        case 2 :
+          this.istore_2();
+          break;
+        case 3 :
+          this.istore_3();
+          break;
+        default :
+          this.istore(position);
+      }
+      return;
+    }
+    // Using dedicated float bytecode
+    if (type == FloatBinding) {
+      if (valueRequired)
+        this.dup();
+      switch (position) {
+        case 0 :
+          this.fstore_0();
+          break;
+        case 1 :
+          this.fstore_1();
+          break;
+        case 2 :
+          this.fstore_2();
+          break;
+        case 3 :
+          this.fstore_3();
+          break;
+        default :
+          this.fstore(position);
+      }
+      return;
+    }
+    // Using dedicated long bytecode
+    if (type == LongBinding) {
+      if (valueRequired)
+        this.dup2();
+      switch (position) {
+        case 0 :
+          this.lstore_0();
+          break;
+        case 1 :
+          this.lstore_1();
+          break;
+        case 2 :
+          this.lstore_2();
+          break;
+        case 3 :
+          this.lstore_3();
+          break;
+        default :
+          this.lstore(position);
+      }
+      return;
+    }
+    // Using dedicated double bytecode
+    if (type == DoubleBinding) {
+      if (valueRequired)
+        this.dup2();
+      switch (position) {
+        case 0 :
+          this.dstore_0();
+          break;
+        case 1 :
+          this.dstore_1();
+          break;
+        case 2 :
+          this.dstore_2();
+          break;
+        case 3 :
+          this.dstore_3();
+          break;
+        default :
+          this.dstore(position);
+      }
+      return;
+    }
+    // Reference object
+    if (valueRequired)
+      this.dup();
+    switch (position) {
+      case 0 :
+        this.astore_0();
+        break;
+      case 1 :
+        this.astore_1();
+        break;
+      case 2 :
+        this.astore_2();
+        break;
+      case 3 :
+        this.astore_3();
+        break;
+      default :
+        this.astore(position);
+    }
+  }
+  public final void store(TypeBinding type, int position) {
+    // Using dedicated int bytecode
+    if ((type == IntBinding)
+      || (type == CharBinding)
+      || (type == ByteBinding)
+      || (type == ShortBinding)
+      || (type == BooleanBinding)) {
+      switch (position) {
+        case 0 :
+          this.istore_0();
+          break;
+        case 1 :
+          this.istore_1();
+          break;
+        case 2 :
+          this.istore_2();
+          break;
+        case 3 :
+          this.istore_3();
+          break;
+        default :
+          this.istore(position);
+      }
+      return;
+    }
+    // Using dedicated float bytecode
+    if (type == FloatBinding) {
+      switch (position) {
+        case 0 :
+          this.fstore_0();
+          break;
+        case 1 :
+          this.fstore_1();
+          break;
+        case 2 :
+          this.fstore_2();
+          break;
+        case 3 :
+          this.fstore_3();
+          break;
+        default :
+          this.fstore(position);
+      }
+      return;
+    }
+    // Using dedicated long bytecode
+    if (type == LongBinding) {
+      switch (position) {
+        case 0 :
+          this.lstore_0();
+          break;
+        case 1 :
+          this.lstore_1();
+          break;
+        case 2 :
+          this.lstore_2();
+          break;
+        case 3 :
+          this.lstore_3();
+          break;
+        default :
+          this.lstore(position);
+      }
+      return;
+    }
+    // Using dedicated double bytecode
+    if (type == DoubleBinding) {
+      switch (position) {
+        case 0 :
+          this.dstore_0();
+          break;
+        case 1 :
+          this.dstore_1();
+          break;
+        case 2 :
+          this.dstore_2();
+          break;
+        case 3 :
+          this.dstore_3();
+          break;
+        default :
+          this.dstore(position);
+      }
+      return;
+    }
+    // Reference object
+    switch (position) {
+      case 0 :
+        this.astore_0();
+        break;
+      case 1 :
+        this.astore_1();
+        break;
+      case 2 :
+        this.astore_2();
+        break;
+      case 3 :
+        this.astore_3();
+        break;
+      default :
+        this.astore(position);
+    }
+  }
+  public final void storeInt(int position) {
+    switch (position) {
+      case 0 :
+        this.istore_0();
+        break;
+      case 1 :
+        this.istore_1();
+        break;
+      case 2 :
+        this.istore_2();
+        break;
+      case 3 :
+        this.istore_3();
+        break;
+      default :
+        this.istore(position);
+    }
+  }
+  public final void storeObject(int position) {
+    switch (position) {
+      case 0 :
+        this.astore_0();
+        break;
+      case 1 :
+        this.astore_1();
+        break;
+      case 2 :
+        this.astore_2();
+        break;
+      case 3 :
+        this.astore_3();
+        break;
+      default :
+        this.astore(position);
+    }
+  }
+  final public void swap() {
+    countLabels = 0;
+    try {
+      position++;
+      bCodeStream[classFileOffset++] = OPC_swap;
+    } catch (IndexOutOfBoundsException e) {
+      resizeByteArray(OPC_swap);
+    }
+  }
+  private static final void swap(int a[], int i, int j, int result[]) {
+    int T;
+    T = a[i];
+    a[i] = a[j];
+    a[j] = T;
+    T = result[j];
+    result[j] = result[i];
+    result[i] = T;
+  }
+  final public void tableswitch(
+    CaseLabel defaultLabel,
+    int low,
+    int high,
+    int[] keys,
+    int[] sortedIndexes,
+    CaseLabel[] casesLabel) {
+    countLabels = 0;
+    stackDepth--;
+    int length = casesLabel.length;
+    int pos = position;
+    defaultLabel.placeInstruction();
+    for (int i = 0; i < length; i++)
+      casesLabel[i].placeInstruction();
+    try {
+      position++;
+      bCodeStream[classFileOffset++] = OPC_tableswitch;
+    } catch (IndexOutOfBoundsException e) {
+      resizeByteArray(OPC_tableswitch);
+    }
+    for (int i = (3 - (pos % 4)); i > 0; i--) {
+      position++; // Padding
+      classFileOffset++;
+    }
+    defaultLabel.branch();
+    writeSignedWord(low);
+    writeSignedWord(high);
+    int i = low, j = low;
+    // the index j is used to know if the index i is one of the missing entries in case of an 
+    // optimized tableswitch
+    while (true) {
+      int index;
+      int key = keys[index = sortedIndexes[j - low]];
+      if (key == i) {
+        casesLabel[index].branch();
+        j++;
+        if (i == high)
+          break; // if high is maxint, then avoids wrapping to minint.
+      } else {
+        defaultLabel.branch();
+      }
+      i++;
+    }
+  }
+  public String toString() {
+    StringBuffer buffer = new StringBuffer("( position:"); //$NON-NLS-1$
+    buffer.append(position);
+    buffer.append(",\nstackDepth:"); //$NON-NLS-1$
+    buffer.append(stackDepth);
+    buffer.append(",\nmaxStack:"); //$NON-NLS-1$
+    buffer.append(stackMax);
+    buffer.append(",\nmaxLocals:"); //$NON-NLS-1$
+    buffer.append(maxLocals);
+    buffer.append(")"); //$NON-NLS-1$
+    return buffer.toString();
+  }
+  public void updateLastRecordedEndPC(int pos) {
 
-public void generateWideConditionalBranch(byte opcode, Label lbl) {
-               /* we handle the goto_w problem inside an if.... with some macro expansion
-                * at the bytecode level
-                * instead of:
-                * if_...... lbl
-                * we have:
-                *    ifne <l1>
-                *    goto <l2>
-                * l1 gotow <l3> // l3 is a wide target
-                * l2 ....
-                */
-               Label l1 = new Label(this);
-               try {
-                       position++;
-                       bCodeStream[classFileOffset++] = opcode;
-               } catch (IndexOutOfBoundsException e) {
-                       resizeByteArray(opcode);
-               }
-               l1.branch();
-               Label l2 = new Label(this);
-               this.internal_goto_(l2);
-               l1.place();
-               this.goto_w(lbl);
-               l2.place();
-}
+    /* Tune positions in the table, this is due to some 
+     * extra bytecodes being
+     * added to some user code (jumps). */
+    /** OLD CODE
+       if (!generateLineNumberAttributes)
+               return;
+       pcToSourceMap[pcToSourceMapSize - 1][1] = position;
+       // need to update the initialization endPC in case of generation of local variable attributes.
+       updateLocalVariablesAttribute(pos);     
+    */
+
+    if (!generateLineNumberAttributes)
+      return;
+    // need to update the initialization endPC in case of generation of local variable attributes.
+    updateLocalVariablesAttribute(pos);
+  }
+  public void updateLocalVariablesAttribute(int pos) {
+    // need to update the initialization endPC in case of generation of local variable attributes.
+    if (generateLocalVariableTableAttributes) {
+      for (int i = 0, max = locals.length; i < max; i++) {
+        LocalVariableBinding local = locals[i];
+        if ((local != null) && (local.initializationCount > 0)) {
+          if (local.initializationPCs[((local.initializationCount - 1) << 1) + 1] == pos) {
+            local.initializationPCs[((local.initializationCount - 1) << 1) + 1] = position;
+          }
+        }
+      }
+    }
+  }
+  final public void wide() {
+    countLabels = 0;
+    try {
+      position++;
+      bCodeStream[classFileOffset++] = OPC_wide;
+    } catch (IndexOutOfBoundsException e) {
+      resizeByteArray(OPC_wide);
+    }
+  }
+  public final void writeByte(byte b) {
+    try {
+      position++;
+      bCodeStream[classFileOffset++] = b;
+    } catch (IndexOutOfBoundsException e) {
+      resizeByteArray(b);
+    }
+  }
+  public final void writeByteAtPos(int pos, byte b) {
+    try {
+      bCodeStream[pos] = b;
+    } catch (IndexOutOfBoundsException ex) {
+      resizeByteArray();
+      bCodeStream[pos] = b;
+    }
+  }
+  /**
+   * Write a unsigned 8 bits value into the byte array
+   * @param b the signed byte
+   */
+  public final void writeSignedByte(int b) {
+    try {
+      position++;
+      bCodeStream[classFileOffset++] = (byte) b;
+    } catch (IndexOutOfBoundsException e) {
+      resizeByteArray((byte) b);
+    }
+  }
+  /**
+   * Write a signed 16 bits value into the byte array
+   * @param b the signed short
+   */
+  public final void writeSignedShort(int b) {
+    try {
+      position++;
+      bCodeStream[classFileOffset++] = (byte) (b >> 8);
+    } catch (IndexOutOfBoundsException e) {
+      resizeByteArray((byte) (b >> 8));
+    }
+    try {
+      position++;
+      bCodeStream[classFileOffset++] = (byte) b;
+    } catch (IndexOutOfBoundsException e) {
+      resizeByteArray((byte) b);
+    }
+  }
+  public final void writeSignedShort(int pos, int b) {
+    int currentOffset = startingClassFileOffset + pos;
+    try {
+      bCodeStream[currentOffset] = (byte) (b >> 8);
+    } catch (IndexOutOfBoundsException e) {
+      resizeByteArray();
+      bCodeStream[currentOffset] = (byte) (b >> 8);
+    }
+    try {
+      bCodeStream[currentOffset + 1] = (byte) b;
+    } catch (IndexOutOfBoundsException e) {
+      resizeByteArray();
+      bCodeStream[currentOffset + 1] = (byte) b;
+    }
+  }
+  public final void writeSignedWord(int value) {
+    try {
+      position++;
+      bCodeStream[classFileOffset++] = (byte) ((value & 0xFF000000) >> 24);
+    } catch (IndexOutOfBoundsException e) {
+      resizeByteArray((byte) ((value & 0xFF000000) >> 24));
+    }
+    try {
+      position++;
+      bCodeStream[classFileOffset++] = (byte) ((value & 0xFF0000) >> 16);
+    } catch (IndexOutOfBoundsException e) {
+      resizeByteArray((byte) ((value & 0xFF0000) >> 16));
+    }
+    try {
+      position++;
+      bCodeStream[classFileOffset++] = (byte) ((value & 0xFF00) >> 8);
+    } catch (IndexOutOfBoundsException e) {
+      resizeByteArray((byte) ((value & 0xFF00) >> 8));
+    }
+    try {
+      position++;
+      bCodeStream[classFileOffset++] = (byte) (value & 0xFF);
+    } catch (IndexOutOfBoundsException e) {
+      resizeByteArray((byte) (value & 0xFF));
+    }
+  }
+  public final void writeSignedWord(int pos, int value) {
+    int currentOffset = startingClassFileOffset + pos;
+    try {
+      bCodeStream[currentOffset++] = (byte) ((value & 0xFF000000) >> 24);
+    } catch (IndexOutOfBoundsException e) {
+      resizeByteArray();
+      bCodeStream[currentOffset - 1] = (byte) ((value & 0xFF000000) >> 24);
+    }
+    try {
+      bCodeStream[currentOffset++] = (byte) ((value & 0xFF0000) >> 16);
+    } catch (IndexOutOfBoundsException e) {
+      resizeByteArray();
+      bCodeStream[currentOffset - 1] = (byte) ((value & 0xFF0000) >> 16);
+    }
+    try {
+      bCodeStream[currentOffset++] = (byte) ((value & 0xFF00) >> 8);
+    } catch (IndexOutOfBoundsException e) {
+      resizeByteArray();
+      bCodeStream[currentOffset - 1] = (byte) ((value & 0xFF00) >> 8);
+    }
+    try {
+      bCodeStream[currentOffset++] = (byte) (value & 0xFF);
+    } catch (IndexOutOfBoundsException e) {
+      resizeByteArray();
+      bCodeStream[currentOffset - 1] = (byte) (value & 0xFF);
+    }
+  }
+  /**
+   * Write a unsigned 8 bits value into the byte array
+   * @param b the unsigned byte
+   */
+  public final void writeUnsignedByte(int b) {
+    try {
+      position++;
+      bCodeStream[classFileOffset++] = (byte) b;
+    } catch (IndexOutOfBoundsException e) {
+      resizeByteArray((byte) b);
+    }
+  }
+  /**
+   * Write a unsigned 16 bits value into the byte array
+   * @param b the unsigned short
+   */
+  public final void writeUnsignedShort(int b) {
+    try {
+      position++;
+      bCodeStream[classFileOffset++] = (byte) (b >>> 8);
+    } catch (IndexOutOfBoundsException e) {
+      resizeByteArray((byte) (b >>> 8));
+    }
+    try {
+      position++;
+      bCodeStream[classFileOffset++] = (byte) b;
+    } catch (IndexOutOfBoundsException e) {
+      resizeByteArray((byte) b);
+    }
+  }
+  /**
+   * Write a unsigned 32 bits value into the byte array
+   * @param value the unsigned word
+   */
+  public final void writeUnsignedWord(int value) {
+    try {
+      position++;
+      bCodeStream[classFileOffset++] = (byte) (value >>> 24);
+    } catch (IndexOutOfBoundsException e) {
+      resizeByteArray((byte) (value >>> 24));
+    }
+    try {
+      position++;
+      bCodeStream[classFileOffset++] = (byte) (value >>> 16);
+    } catch (IndexOutOfBoundsException e) {
+      resizeByteArray((byte) (value >>> 16));
+    }
+    try {
+      position++;
+      bCodeStream[classFileOffset++] = (byte) (value >>> 8);
+    } catch (IndexOutOfBoundsException e) {
+      resizeByteArray((byte) (value >>> 8));
+    }
+    try {
+      position++;
+      bCodeStream[classFileOffset++] = (byte) value;
+    } catch (IndexOutOfBoundsException e) {
+      resizeByteArray((byte) value);
+    }
+  }
+
+  public void generateWideConditionalBranch(byte opcode, Label lbl) {
+    /* we handle the goto_w problem inside an if.... with some macro expansion
+     * at the bytecode level
+     * instead of:
+     * if_...... lbl
+     * we have:
+     *    ifne <l1>
+     *    goto <l2>
+     * l1 gotow <l3> // l3 is a wide target
+     * l2 ....
+     */
+    Label l1 = new Label(this);
+    try {
+      position++;
+      bCodeStream[classFileOffset++] = opcode;
+    } catch (IndexOutOfBoundsException e) {
+      resizeByteArray(opcode);
+    }
+    l1.branch();
+    Label l2 = new Label(this);
+    this.internal_goto_(l2);
+    l1.place();
+    this.goto_w(lbl);
+    l2.place();
+  }
 }
index d46b0a2..299d267 100644 (file)
@@ -13,9 +13,9 @@ package net.sourceforge.phpdt.internal.compiler.parser;
 import net.sourceforge.phpdt.core.compiler.*;
 import net.sourceforge.phpdt.core.compiler.InvalidInputException;
 import net.sourceforge.phpdt.internal.compiler.*;
-import net.sourceforge.phpdt.internal.compiler.env.*; 
+import net.sourceforge.phpdt.internal.compiler.env.*;
 import net.sourceforge.phpdt.internal.compiler.impl.*;
-import net.sourceforge.phpdt.internal.compiler.ast.*; 
+import net.sourceforge.phpdt.internal.compiler.ast.*;
 import net.sourceforge.phpdt.internal.compiler.lookup.*;
 import net.sourceforge.phpdt.internal.compiler.problem.*;
 import net.sourceforge.phpdt.internal.compiler.util.*;
@@ -24,7430 +24,7531 @@ import java.io.*;
 import java.util.ArrayList;
 
 public class Parser implements BindingIds, ParserBasicInformation, ITerminalSymbols, CompilerModifiers, OperatorIds, TypeIds {
-       protected ProblemReporter problemReporter;
-       public int firstToken ; // handle for multiple parsing goals
-       public int lastAct ; //handle for multiple parsing goals
-       protected ReferenceContext referenceContext;
-       public int currentToken;
-       private int synchronizedBlockSourceStart;
-
-       //error recovery management
-       protected int lastCheckPoint;
-       protected RecoveredElement currentElement;
-       public static boolean VERBOSE_RECOVERY = false;
-       protected boolean restartRecovery;
-       protected int listLength; // for recovering some incomplete list (interfaces, throws or parameters)
-       protected boolean hasReportedError;
-       protected int recoveredStaticInitializerStart;
-       protected int lastIgnoredToken, nextIgnoredToken;
-       protected int lastErrorEndPosition;
-               
-       // 1.4 feature
-       protected boolean assertMode = false;
-       
-       //internal data for the automat 
-       protected final static int StackIncrement = 255;
-       protected int stateStackTop;
-       protected int[] stack = new int[StackIncrement];
-       //scanner token 
-       public Scanner scanner;
-       //ast stack
-       final static int AstStackIncrement = 100;
-       protected int astPtr;
-       protected AstNode[] astStack = new AstNode[AstStackIncrement];
-       protected int astLengthPtr;
-       protected int[] astLengthStack;
-       public CompilationUnitDeclaration compilationUnit; /*the result from parse()*/
-       AstNode [] noAstNodes = new AstNode[AstStackIncrement];
-       //expression stack
-       final static int ExpressionStackIncrement = 100;
-       protected int expressionPtr;
-       protected Expression[] expressionStack = new Expression[ExpressionStackIncrement];
-       protected int expressionLengthPtr;
-       protected int[] expressionLengthStack;
-       Expression [] noExpressions = new Expression[ExpressionStackIncrement];
-       //identifiers stacks 
-       protected int identifierPtr;
-       protected char[][] identifierStack;
-       protected int identifierLengthPtr;
-       protected int[] identifierLengthStack;
-       protected long[] identifierPositionStack;
-       //positions , dimensions , .... (what ever is int) ..... stack
-       protected int intPtr;
-       protected int[] intStack;
-       protected int endPosition; //accurate only when used ! (the start position is pushed into intStack while the end the current one)
-       protected int endStatementPosition;
-       protected int lParenPos,rParenPos; //accurate only when used !
-       //modifiers dimensions nestedType etc.......
-       protected boolean optimizeStringLiterals =true;
-       protected int modifiers;
-       protected int modifiersSourceStart;
-       protected int nestedType, dimensions;
-       protected int[] nestedMethod; //the ptr is nestedType
-       protected int[] realBlockStack;
-       protected int realBlockPtr;
-       protected boolean diet = false; //tells the scanner to jump over some parts of the code/expressions like method bodies
-       protected int dietInt = 0; // if > 0 force the none-diet-parsing mode (even if diet if requested) [field parsing with anonymous inner classes...]
-       protected int[] variablesCounter;
-       //===DATA===DATA===DATA===DATA===DATA===DATA===//
-    public final static byte rhs[] = {0,
-            2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,
-            2,2,2,1,1,1,1,1,1,1,1,1,1,1,1,
-            1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,
-            2,2,1,1,1,1,3,4,0,1,2,1,1,1,1,
-            1,1,1,1,1,5,1,2,1,2,2,2,1,1,2,
-            2,2,4,1,1,1,1,2,1,1,1,1,1,1,1,
-            1,1,1,1,2,3,3,2,2,1,3,1,3,1,2,
-            1,1,1,3,0,3,1,1,1,1,1,1,1,4,1,
-            3,3,7,0,0,0,0,0,2,1,1,1,2,2,4,
-            4,5,4,4,2,1,2,3,3,1,3,3,1,3,1,
-            4,0,2,1,2,2,4,1,1,2,5,5,7,7,7,
-            7,2,2,3,2,2,3,1,2,1,2,1,1,2,2,
-            1,1,1,1,1,3,3,4,1,3,4,0,1,2,1,
-            1,1,1,2,3,4,0,1,1,1,1,1,1,1,1,
-            1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,
-            1,3,3,2,1,1,1,1,1,1,1,5,7,7,6,
-            2,3,3,4,1,2,2,1,2,3,2,5,5,7,9,
-            9,1,1,1,1,3,3,5,2,3,2,3,3,3,5,
-            1,3,4,1,2,5,2,1,1,1,1,1,1,3,1,
-            1,3,3,3,3,3,1,1,5,6,8,7,2,0,2,
-            0,1,3,4,4,1,2,3,2,1,1,2,2,3,3,
-            4,6,6,4,4,1,1,1,1,2,2,0,1,1,3,
-            3,1,3,3,1,3,3,1,5,5,4,1,3,3,3,
-            1,3,3,1,3,3,3,1,3,3,3,3,3,1,3,
-            3,1,3,1,3,1,3,1,3,1,3,1,5,1,1,
-            3,3,1,1,1,1,1,1,1,1,1,1,1,1,1,
-            1,1,1,1,1,0,1,0,1,0,1,0,1,0,1,
-            0,1,0,2,0,1,0,1,0,1,0,1,0,1,0,
-            1,0,1,0,2,0,0,1,0,1,0,1,0,1,0,
-            1
+  protected ProblemReporter problemReporter;
+  public int firstToken; // handle for multiple parsing goals
+  public int lastAct; //handle for multiple parsing goals
+  protected ReferenceContext referenceContext;
+  public int currentToken;
+  private int synchronizedBlockSourceStart;
+
+  //error recovery management
+  protected int lastCheckPoint;
+  protected RecoveredElement currentElement;
+  public static boolean VERBOSE_RECOVERY = false;
+  protected boolean restartRecovery;
+  protected int listLength; // for recovering some incomplete list (interfaces, throws or parameters)
+  protected boolean hasReportedError;
+  protected int recoveredStaticInitializerStart;
+  protected int lastIgnoredToken, nextIgnoredToken;
+  protected int lastErrorEndPosition;
+
+  // 1.4 feature
+  protected boolean assertMode = false;
+
+  //internal data for the automat 
+  protected final static int StackIncrement = 255;
+  protected int stateStackTop;
+  protected int[] stack = new int[StackIncrement];
+  //scanner token 
+  public Scanner scanner;
+  //ast stack
+  final static int AstStackIncrement = 100;
+  protected int astPtr;
+  protected AstNode[] astStack = new AstNode[AstStackIncrement];
+  protected int astLengthPtr;
+  protected int[] astLengthStack;
+  public CompilationUnitDeclaration compilationUnit; /*the result from parse()*/
+  AstNode[] noAstNodes = new AstNode[AstStackIncrement];
+  //expression stack
+  final static int ExpressionStackIncrement = 100;
+  protected int expressionPtr;
+  protected Expression[] expressionStack = new Expression[ExpressionStackIncrement];
+  protected int expressionLengthPtr;
+  protected int[] expressionLengthStack;
+  Expression[] noExpressions = new Expression[ExpressionStackIncrement];
+  //identifiers stacks 
+  protected int identifierPtr;
+  protected char[][] identifierStack;
+  protected int identifierLengthPtr;
+  protected int[] identifierLengthStack;
+  protected long[] identifierPositionStack;
+  //positions , dimensions , .... (what ever is int) ..... stack
+  protected int intPtr;
+  protected int[] intStack;
+  protected int endPosition; //accurate only when used ! (the start position is pushed into intStack while the end the current one)
+  protected int endStatementPosition;
+  protected int lParenPos, rParenPos; //accurate only when used !
+  //modifiers dimensions nestedType etc.......
+  protected boolean optimizeStringLiterals = true;
+  protected int modifiers;
+  protected int modifiersSourceStart;
+  protected int nestedType, dimensions;
+  protected int[] nestedMethod; //the ptr is nestedType
+  protected int[] realBlockStack;
+  protected int realBlockPtr;
+  protected boolean diet = false; //tells the scanner to jump over some parts of the code/expressions like method bodies
+  protected int dietInt = 0;
+  // if > 0 force the none-diet-parsing mode (even if diet if requested) [field parsing with anonymous inner classes...]
+  protected int[] variablesCounter;
+  //===DATA===DATA===DATA===DATA===DATA===DATA===//
+  public final static byte rhs[] =
+    {
+      0,
+      2,
+      2,
+      2,
+      2,
+      2,
+      2,
+      2,
+      2,
+      2,
+      2,
+      2,
+      2,
+      2,
+      2,
+      2,
+      2,
+      2,
+      2,
+      1,
+      1,
+      1,
+      1,
+      1,
+      1,
+      1,
+      1,
+      1,
+      1,
+      1,
+      1,
+      1,
+      1,
+      1,
+      1,
+      1,
+      1,
+      1,
+      1,
+      1,
+      1,
+      1,
+      1,
+      1,
+      1,
+      1,
+      2,
+      2,
+      1,
+      1,
+      1,
+      1,
+      3,
+      4,
+      0,
+      1,
+      2,
+      1,
+      1,
+      1,
+      1,
+      1,
+      1,
+      1,
+      1,
+      1,
+      5,
+      1,
+      2,
+      1,
+      2,
+      2,
+      2,
+      1,
+      1,
+      2,
+      2,
+      2,
+      4,
+      1,
+      1,
+      1,
+      1,
+      2,
+      1,
+      1,
+      1,
+      1,
+      1,
+      1,
+      1,
+      1,
+      1,
+      1,
+      1,
+      2,
+      3,
+      3,
+      2,
+      2,
+      1,
+      3,
+      1,
+      3,
+      1,
+      2,
+      1,
+      1,
+      1,
+      3,
+      0,
+      3,
+      1,
+      1,
+      1,
+      1,
+      1,
+      1,
+      1,
+      4,
+      1,
+      3,
+      3,
+      7,
+      0,
+      0,
+      0,
+      0,
+      0,
+      2,
+      1,
+      1,
+      1,
+      2,
+      2,
+      4,
+      4,
+      5,
+      4,
+      4,
+      2,
+      1,
+      2,
+      3,
+      3,
+      1,
+      3,
+      3,
+      1,
+      3,
+      1,
+      4,
+      0,
+      2,
+      1,
+      2,
+      2,
+      4,
+      1,
+      1,
+      2,
+      5,
+      5,
+      7,
+      7,
+      7,
+      7,
+      2,
+      2,
+      3,
+      2,
+      2,
+      3,
+      1,
+      2,
+      1,
+      2,
+      1,
+      1,
+      2,
+      2,
+      1,
+      1,
+      1,
+      1,
+      1,
+      3,
+      3,
+      4,
+      1,
+      3,
+      4,
+      0,
+      1,
+      2,
+      1,
+      1,
+      1,
+      1,
+      2,
+      3,
+      4,
+      0,
+      1,
+      1,
+      1,
+      1,
+      1,
+      1,
+      1,
+      1,
+      1,
+      1,
+      1,
+      1,
+      1,
+      1,
+      1,
+      1,
+      1,
+      1,
+      1,
+      1,
+      1,
+      1,
+      1,
+      1,
+      3,
+      3,
+      2,
+      1,
+      1,
+      1,
+      1,
+      1,
+      1,
+      1,
+      5,
+      7,
+      7,
+      6,
+      2,
+      3,
+      3,
+      4,
+      1,
+      2,
+      2,
+      1,
+      2,
+      3,
+      2,
+      5,
+      5,
+      7,
+      9,
+      9,
+      1,
+      1,
+      1,
+      1,
+      3,
+      3,
+      5,
+      2,
+      3,
+      2,
+      3,
+      3,
+      3,
+      5,
+      1,
+      3,
+      4,
+      1,
+      2,
+      5,
+      2,
+      1,
+      1,
+      1,
+      1,
+      1,
+      1,
+      3,
+      1,
+      1,
+      3,
+      3,
+      3,
+      3,
+      3,
+      1,
+      1,
+      5,
+      6,
+      8,
+      7,
+      2,
+      0,
+      2,
+      0,
+      1,
+      3,
+      4,
+      4,
+      1,
+      2,
+      3,
+      2,
+      1,
+      1,
+      2,
+      2,
+      3,
+      3,
+      4,
+      6,
+      6,
+      4,
+      4,
+      1,
+      1,
+      1,
+      1,
+      2,
+      2,
+      0,
+      1,
+      1,
+      3,
+      3,
+      1,
+      3,
+      3,
+      1,
+      3,
+      3,
+      1,
+      5,
+      5,
+      4,
+      1,
+      3,
+      3,
+      3,
+      1,
+      3,
+      3,
+      1,
+      3,
+      3,
+      3,
+      1,
+      3,
+      3,
+      3,
+      3,
+      3,
+      1,
+      3,
+      3,
+      1,
+      3,
+      1,
+      3,
+      1,
+      3,
+      1,
+      3,
+      1,
+      3,
+      1,
+      5,
+      1,
+      1,
+      3,
+      3,
+      1,
+      1,
+      1,
+      1,
+      1,
+      1,
+      1,
+      1,
+      1,
+      1,
+      1,
+      1,
+      1,
+      1,
+      1,
+      1,
+      1,
+      1,
+      0,
+      1,
+      0,
+      1,
+      0,
+      1,
+      0,
+      1,
+      0,
+      1,
+      0,
+      1,
+      0,
+      2,
+      0,
+      1,
+      0,
+      1,
+      0,
+      1,
+      0,
+      1,
+      0,
+      1,
+      0,
+      1,
+      0,
+      1,
+      0,
+      2,
+      0,
+      0,
+      1,
+      0,
+      1,
+      0,
+      1,
+      0,
+      1,
+      0,
+      1 };
+
+  public static char asb[] = null;
+  public static char asr[] = null;
+  public static char symbol_index[] = null;
+  private static final String UNEXPECTED_EOF = "Unexpected End Of File"; //$NON-NLS-1$
+
+  public final static String name[] = { null, "++",
+    //$NON-NLS-1$
+    "--", //$NON-NLS-1$
+    "==", //$NON-NLS-1$
+    "<=", //$NON-NLS-1$
+    ">=", //$NON-NLS-1$
+    "!=", //$NON-NLS-1$
+    "<<", //$NON-NLS-1$
+    ">>", //$NON-NLS-1$
+    ">>>", //$NON-NLS-1$
+    "+=", //$NON-NLS-1$
+    "-=", //$NON-NLS-1$
+    "*=", //$NON-NLS-1$
+    "/=", //$NON-NLS-1$
+    "&=", //$NON-NLS-1$
+    "|=", //$NON-NLS-1$
+    "^=", //$NON-NLS-1$
+    "%=", //$NON-NLS-1$
+    "<<=", //$NON-NLS-1$
+    ">>=", //$NON-NLS-1$
+    ">>>=", //$NON-NLS-1$
+    "||", //$NON-NLS-1$
+    "&&", //$NON-NLS-1$
+    "+", //$NON-NLS-1$
+    "-", //$NON-NLS-1$
+    "!", //$NON-NLS-1$
+    "%", //$NON-NLS-1$
+    "^", //$NON-NLS-1$
+    "&", //$NON-NLS-1$
+    "*", //$NON-NLS-1$
+    "|", //$NON-NLS-1$
+    "~", //$NON-NLS-1$
+    "/", //$NON-NLS-1$
+    ">", //$NON-NLS-1$
+    "<", //$NON-NLS-1$
+    "(", //$NON-NLS-1$
+    ")", //$NON-NLS-1$
+    "{", //$NON-NLS-1$
+    "}", //$NON-NLS-1$
+    "[", //$NON-NLS-1$
+    "]", //$NON-NLS-1$
+    ";", //$NON-NLS-1$
+    "?", //$NON-NLS-1$
+    ":", //$NON-NLS-1$
+    ",", //$NON-NLS-1$
+    ".", //$NON-NLS-1$
+    "=", //$NON-NLS-1$
+    "", //$NON-NLS-1$
+    "$empty", //$NON-NLS-1$
+    "Identifier", //$NON-NLS-1$
+    "abstract", //$NON-NLS-1$
+    "assert", //$NON-NLS-1$
+    "boolean", //$NON-NLS-1$
+    "break", //$NON-NLS-1$
+    "byte", //$NON-NLS-1$
+    "case", //$NON-NLS-1$
+    "catch", //$NON-NLS-1$
+    "char", //$NON-NLS-1$
+    "class", //$NON-NLS-1$
+    "continue", //$NON-NLS-1$
+    "default", //$NON-NLS-1$
+    "do", //$NON-NLS-1$
+    "double", //$NON-NLS-1$
+    "else", //$NON-NLS-1$
+    "extends", //$NON-NLS-1$
+    "false", //$NON-NLS-1$
+    "final", //$NON-NLS-1$
+    "finally", //$NON-NLS-1$
+    "float", //$NON-NLS-1$
+    "for", //$NON-NLS-1$
+    "if", //$NON-NLS-1$
+    "implements", //$NON-NLS-1$
+    "import", //$NON-NLS-1$
+    "instanceof", //$NON-NLS-1$
+    "int", //$NON-NLS-1$
+    "interface", //$NON-NLS-1$
+    "long", //$NON-NLS-1$
+    "native", //$NON-NLS-1$
+    "new", //$NON-NLS-1$
+    "null", //$NON-NLS-1$
+    "package", //$NON-NLS-1$
+    "private", //$NON-NLS-1$
+    "protected", //$NON-NLS-1$
+    "public", //$NON-NLS-1$
+    "return", //$NON-NLS-1$
+    "short", //$NON-NLS-1$
+    "static", //$NON-NLS-1$
+    "strictfp", //$NON-NLS-1$
+    "super", //$NON-NLS-1$
+    "switch", //$NON-NLS-1$
+    "synchronized", //$NON-NLS-1$
+    "this", //$NON-NLS-1$
+    "throw", //$NON-NLS-1$
+    "throws", //$NON-NLS-1$
+    "transient", //$NON-NLS-1$
+    "true", //$NON-NLS-1$
+    "try", //$NON-NLS-1$
+    "void", //$NON-NLS-1$
+    "volatile", //$NON-NLS-1$
+    "while", //$NON-NLS-1$
+    "IntegerLiteral", //$NON-NLS-1$
+    "LongLiteral", //$NON-NLS-1$
+    "FloatingPointLiteral", //$NON-NLS-1$
+    "DoubleLiteral", //$NON-NLS-1$
+    "CharacterLiteral", //$NON-NLS-1$
+    "StringLiteral", //$NON-NLS-1$
+    UNEXPECTED_EOF, "Invalid Character",
+    //$NON-NLS-1$            
+    "Goal", //$NON-NLS-1$
+    "MethodBody", //$NON-NLS-1$
+    "ConstructorBody", //$NON-NLS-1$
+    "StaticInitializer", //$NON-NLS-1$
+    "Initializer", //$NON-NLS-1$
+    "Headers", //$NON-NLS-1$
+    "BlockStatements", //$NON-NLS-1$
+    "MethodPushModifiersHeader", //$NON-NLS-1$
+    "CatchHeader", //$NON-NLS-1$
+    "FieldDeclaration", //$NON-NLS-1$
+    "ImportDeclaration", //$NON-NLS-1$
+    "PackageDeclaration", //$NON-NLS-1$
+    "TypeDeclaration", //$NON-NLS-1$
+    "GenericMethodDeclaration", //$NON-NLS-1$
+    "ClassBodyDeclaration", //$NON-NLS-1$
+    "Expression", //$NON-NLS-1$
+    "Type", //$NON-NLS-1$
+    "PrimitiveType", //$NON-NLS-1$
+    "ReferenceType", //$NON-NLS-1$
+    "ClassOrInterfaceType", //$NON-NLS-1$
+    "ArrayType", //$NON-NLS-1$
+    "Name", //$NON-NLS-1$
+    "Dims", //$NON-NLS-1$
+    "ClassType", //$NON-NLS-1$
+    "SimpleName", //$NON-NLS-1$
+    "Header", //$NON-NLS-1$
+    "ClassHeader", //$NON-NLS-1$
+    "InterfaceHeader", //$NON-NLS-1$
+    "MethodHeader", //$NON-NLS-1$
+    "ConstructorHeader", //$NON-NLS-1$
+    "FormalParameter", //$NON-NLS-1$
+    "ImportDeclarations", //$NON-NLS-1$
+    "TypeDeclarations", //$NON-NLS-1$
+    "PackageDeclarationName", //$NON-NLS-1$
+    "SingleTypeImportDeclarationName", //$NON-NLS-1$
+    "TypeImportOnDemandDeclarationName", //$NON-NLS-1$
+    "Modifiers", //$NON-NLS-1$
+    "Modifier", //$NON-NLS-1$
+    "ClassBody", //$NON-NLS-1$
+    "ClassHeaderName", //$NON-NLS-1$
+    "InterfaceTypeList", //$NON-NLS-1$
+    "InterfaceType", //$NON-NLS-1$
+    "ClassBodyDeclarations", //$NON-NLS-1$
+    "Block", //$NON-NLS-1$
+    "VariableDeclarators", //$NON-NLS-1$
+    "VariableDeclarator", //$NON-NLS-1$
+    "VariableDeclaratorId", //$NON-NLS-1$
+    "VariableInitializer", //$NON-NLS-1$
+    "ArrayInitializer", //$NON-NLS-1$
+    "MethodHeaderName", //$NON-NLS-1$
+    "MethodHeaderParameters", //$NON-NLS-1$
+    "MethodPushModifiersHeaderName", //$NON-NLS-1$
+    "ClassTypeList", //$NON-NLS-1$
+    "ConstructorHeaderName", //$NON-NLS-1$
+    "FormalParameterList", //$NON-NLS-1$
+    "ClassTypeElt", //$NON-NLS-1$
+    "StaticOnly", //$NON-NLS-1$
+    "ExplicitConstructorInvocation", //$NON-NLS-1$
+    "Primary", //$NON-NLS-1$
+    "InterfaceBody", //$NON-NLS-1$
+    "InterfaceHeaderName", //$NON-NLS-1$
+    "InterfaceMemberDeclarations", //$NON-NLS-1$
+    "InterfaceMemberDeclaration", //$NON-NLS-1$
+    "VariableInitializers", //$NON-NLS-1$
+    "BlockStatement", //$NON-NLS-1$
+    "Statement", //$NON-NLS-1$
+    "LocalVariableDeclaration", //$NON-NLS-1$
+    "StatementWithoutTrailingSubstatement", //$NON-NLS-1$
+    "StatementNoShortIf", //$NON-NLS-1$
+    "StatementExpression", //$NON-NLS-1$
+    "PostIncrementExpression", //$NON-NLS-1$
+    "PostDecrementExpression", //$NON-NLS-1$
+    "MethodInvocation", //$NON-NLS-1$
+    "ClassInstanceCreationExpression", //$NON-NLS-1$
+    "SwitchBlock", //$NON-NLS-1$
+    "SwitchBlockStatements", //$NON-NLS-1$
+    "SwitchLabels", //$NON-NLS-1$
+    "SwitchBlockStatement", //$NON-NLS-1$
+    "SwitchLabel", //$NON-NLS-1$
+    "ConstantExpression", //$NON-NLS-1$
+    "StatementExpressionList", //$NON-NLS-1$
+    "OnlySynchronized", //$NON-NLS-1$
+    "Catches", //$NON-NLS-1$
+    "Finally", //$NON-NLS-1$
+    "CatchClause", //$NON-NLS-1$
+    "PushLPAREN", //$NON-NLS-1$
+    "PushRPAREN", //$NON-NLS-1$
+    "PrimaryNoNewArray", //$NON-NLS-1$
+    "FieldAccess", //$NON-NLS-1$
+    "ArrayAccess", //$NON-NLS-1$
+    "ClassInstanceCreationExpressionName", //$NON-NLS-1$
+    "ArgumentList", //$NON-NLS-1$
+    "DimWithOrWithOutExprs", //$NON-NLS-1$
+    "DimWithOrWithOutExpr", //$NON-NLS-1$
+    "DimsLoop", //$NON-NLS-1$
+    "OneDimLoop", //$NON-NLS-1$
+    "PostfixExpression", //$NON-NLS-1$
+    "UnaryExpression", //$NON-NLS-1$
+    "UnaryExpressionNotPlusMinus", //$NON-NLS-1$
+    "MultiplicativeExpression", //$NON-NLS-1$
+    "AdditiveExpression", //$NON-NLS-1$
+    "ShiftExpression", //$NON-NLS-1$
+    "RelationalExpression", //$NON-NLS-1$
+    "EqualityExpression", //$NON-NLS-1$
+    "AndExpression", //$NON-NLS-1$
+    "ExclusiveOrExpression", //$NON-NLS-1$
+    "InclusiveOrExpression", //$NON-NLS-1$
+    "ConditionalAndExpression", //$NON-NLS-1$
+    "ConditionalOrExpression", //$NON-NLS-1$
+    "ConditionalExpression", //$NON-NLS-1$
+    "AssignmentExpression", //$NON-NLS-1$
+    "LeftHandSide", //$NON-NLS-1$
+    "AssignmentOperator" //$NON-NLS-1$
+  };
+
+  public static short check_table[] = null;
+  public static char lhs[] = null;
+  public static char action[] = lhs;
+  private final static String FILEPREFIX = "parser"; //$NON-NLS-1$
+
+  static {
+    try {
+      initTables();
+    } catch (java.io.IOException ex) {
+      throw new ExceptionInInitializerError(ex.getMessage());
+    }
+  }
+
+  public static final int RoundBracket = 0;
+  public static final int SquareBracket = 1;
+  public static final int CurlyBracket = 2;
+  public static final int BracketKinds = 3;
+
+  public Parser(ProblemReporter problemReporter, boolean optimizeStringLiterals, boolean assertMode) {
+
+    this.problemReporter = problemReporter;
+    this.optimizeStringLiterals = optimizeStringLiterals;
+    this.assertMode = assertMode;
+    this.initializeScanner();
+    astLengthStack = new int[50];
+    expressionLengthStack = new int[30];
+    intStack = new int[50];
+    identifierStack = new char[30][];
+    identifierLengthStack = new int[30];
+    nestedMethod = new int[30];
+    realBlockStack = new int[30];
+    identifierPositionStack = new long[30];
+    variablesCounter = new int[30];
+  }
+  /**
+   *
+   * INTERNAL USE-ONLY
+   */
+  protected void adjustInterfaceModifiers() {
+    intStack[intPtr - 1] |= AccInterface;
+  }
+  public final void arrayInitializer(int length) {
+    //length is the size of the array Initializer
+    //expressionPtr points on the last elt of the arrayInitializer
+    //i.e. it has not been decremented yet.
+
+    ArrayInitializer ai = new ArrayInitializer();
+    if (length != 0) {
+      expressionPtr -= length;
+      System.arraycopy(expressionStack, expressionPtr + 1, ai.expressions = new Expression[length], 0, length);
+    }
+    pushOnExpressionStack(ai);
+    //positionning
+    ai.sourceEnd = endStatementPosition;
+    int searchPosition = length == 0 ? endPosition : ai.expressions[0].sourceStart;
+    try {
+      //does not work with comments(that contain '{') nor '{' describes as a unicode....               
+      while (scanner.source[--searchPosition] != '{') {
+      }
+    } catch (IndexOutOfBoundsException ex) {
+      //should never occur (except for strange cases like whose describe above)
+      searchPosition = (length == 0 ? endPosition : ai.expressions[0].sourceStart) - 1;
+    }
+    ai.sourceStart = searchPosition;
+  }
+  protected static int asi(int state) {
+
+    return asb[original_state(state)];
+  }
+  protected void blockReal() {
+    // See consumeLocalVariableDeclarationStatement in case of change: duplicated code
+    // increment the amount of declared variables for this block
+    realBlockStack[realBlockPtr]++;
+  }
+  private final static void buildFileFor(String filename, String tag, String[] tokens, boolean isShort)
+    throws java.io.IOException {
+
+    //transform the String tokens into chars before dumping then into file
+
+    int i = 0;
+    //read upto the tag
+    while (!tokens[i++].equals(tag)) {
+    }
+    //read upto the }
+    char[] chars = new char[tokens.length]; //can't be bigger
+    int ic = 0;
+    String token;
+    while (!(token = tokens[i++]).equals("}")) { //$NON-NLS-1$
+      int c = Integer.parseInt(token);
+      if (isShort)
+        c += 32768;
+      chars[ic++] = (char) c;
+    }
+
+    //resize
+    System.arraycopy(chars, 0, chars = new char[ic], 0, ic);
+
+    buildFileForTable(filename, chars);
+  }
+  private final static void buildFileForTable(String filename, char[] chars) throws java.io.IOException {
+
+    byte[] bytes = new byte[chars.length * 2];
+    for (int i = 0; i < chars.length; i++) {
+      bytes[2 * i] = (byte) (chars[i] >>> 8);
+      bytes[2 * i + 1] = (byte) (chars[i] & 0xFF);
+    }
+
+    java.io.FileOutputStream stream = new java.io.FileOutputStream(filename);
+    stream.write(bytes);
+    stream.close();
+    System.out.println(filename + " creation complete"); //$NON-NLS-1$
+  }
+  public final static void buildFilesFromLPG(String dataFilename) throws java.io.IOException {
+
+    //RUN THIS METHOD TO GENERATE PARSER*.RSC FILES
+
+    //build from the lpg javadcl.java files that represents the parser tables
+    //lhs check_table asb asr symbol_index
+
+    //[org.eclipse.jdt.internal.compiler.parser.Parser.buildFilesFromLPG("d:/leapfrog/grammar/javadcl.java")]
+
+    char[] contents = new char[] {
     };
-
-               
-       public  static char asb[] = null;
-       public  static char asr[] = null;
-       public  static char symbol_index[] = null;
-       private static final String UNEXPECTED_EOF = "Unexpected End Of File" ; //$NON-NLS-1$
-
-       public final static String name[] = { null,
-            "++",//$NON-NLS-1$
-            "--",//$NON-NLS-1$
-            "==",//$NON-NLS-1$
-            "<=",//$NON-NLS-1$
-            ">=",//$NON-NLS-1$
-            "!=",//$NON-NLS-1$
-            "<<",//$NON-NLS-1$
-            ">>",//$NON-NLS-1$
-            ">>>",//$NON-NLS-1$
-            "+=",//$NON-NLS-1$
-            "-=",//$NON-NLS-1$
-            "*=",//$NON-NLS-1$
-            "/=",//$NON-NLS-1$
-            "&=",//$NON-NLS-1$
-            "|=",//$NON-NLS-1$
-            "^=",//$NON-NLS-1$
-            "%=",//$NON-NLS-1$
-            "<<=",//$NON-NLS-1$
-            ">>=",//$NON-NLS-1$
-            ">>>=",//$NON-NLS-1$
-            "||",//$NON-NLS-1$
-            "&&",//$NON-NLS-1$
-            "+",//$NON-NLS-1$
-            "-",//$NON-NLS-1$
-            "!",//$NON-NLS-1$
-            "%",//$NON-NLS-1$
-            "^",//$NON-NLS-1$
-            "&",//$NON-NLS-1$
-            "*",//$NON-NLS-1$
-            "|",//$NON-NLS-1$
-            "~",//$NON-NLS-1$
-            "/",//$NON-NLS-1$
-            ">",//$NON-NLS-1$
-            "<",//$NON-NLS-1$
-            "(",//$NON-NLS-1$
-            ")",//$NON-NLS-1$
-            "{",//$NON-NLS-1$
-            "}",//$NON-NLS-1$
-            "[",//$NON-NLS-1$
-            "]",//$NON-NLS-1$
-            ";",//$NON-NLS-1$
-            "?",//$NON-NLS-1$
-            ":",//$NON-NLS-1$
-            ",",//$NON-NLS-1$
-            ".",//$NON-NLS-1$
-            "=",//$NON-NLS-1$
-            "",//$NON-NLS-1$
-            "$empty",//$NON-NLS-1$
-            "Identifier",//$NON-NLS-1$
-            "abstract",//$NON-NLS-1$
-            "assert",//$NON-NLS-1$
-            "boolean",//$NON-NLS-1$
-            "break",//$NON-NLS-1$
-            "byte",//$NON-NLS-1$
-            "case",//$NON-NLS-1$
-            "catch",//$NON-NLS-1$
-            "char",//$NON-NLS-1$
-            "class",//$NON-NLS-1$
-            "continue",//$NON-NLS-1$
-            "default",//$NON-NLS-1$
-            "do",//$NON-NLS-1$
-            "double",//$NON-NLS-1$
-            "else",//$NON-NLS-1$
-            "extends",//$NON-NLS-1$
-            "false",//$NON-NLS-1$
-            "final",//$NON-NLS-1$
-            "finally",//$NON-NLS-1$
-            "float",//$NON-NLS-1$
-            "for",//$NON-NLS-1$
-            "if",//$NON-NLS-1$
-            "implements",//$NON-NLS-1$
-            "import",//$NON-NLS-1$
-            "instanceof",//$NON-NLS-1$
-            "int",//$NON-NLS-1$
-            "interface",//$NON-NLS-1$
-            "long",//$NON-NLS-1$
-            "native",//$NON-NLS-1$
-            "new",//$NON-NLS-1$
-            "null",//$NON-NLS-1$
-            "package",//$NON-NLS-1$
-            "private",//$NON-NLS-1$
-            "protected",//$NON-NLS-1$
-            "public",//$NON-NLS-1$
-            "return",//$NON-NLS-1$
-            "short",//$NON-NLS-1$
-            "static",//$NON-NLS-1$
-            "strictfp",//$NON-NLS-1$
-            "super",//$NON-NLS-1$
-            "switch",//$NON-NLS-1$
-            "synchronized",//$NON-NLS-1$
-            "this",//$NON-NLS-1$
-            "throw",//$NON-NLS-1$
-            "throws",//$NON-NLS-1$
-            "transient",//$NON-NLS-1$
-            "true",//$NON-NLS-1$
-            "try",//$NON-NLS-1$
-            "void",//$NON-NLS-1$
-            "volatile",//$NON-NLS-1$
-            "while",//$NON-NLS-1$
-            "IntegerLiteral",//$NON-NLS-1$
-            "LongLiteral",//$NON-NLS-1$
-            "FloatingPointLiteral",//$NON-NLS-1$
-            "DoubleLiteral",//$NON-NLS-1$
-            "CharacterLiteral",//$NON-NLS-1$
-            "StringLiteral",//$NON-NLS-1$
-            UNEXPECTED_EOF,
-            "Invalid Character",//$NON-NLS-1$            
-            "Goal",//$NON-NLS-1$
-            "MethodBody",//$NON-NLS-1$
-            "ConstructorBody",//$NON-NLS-1$
-            "StaticInitializer",//$NON-NLS-1$
-            "Initializer",//$NON-NLS-1$
-            "Headers",//$NON-NLS-1$
-            "BlockStatements",//$NON-NLS-1$
-            "MethodPushModifiersHeader",//$NON-NLS-1$
-            "CatchHeader",//$NON-NLS-1$
-            "FieldDeclaration",//$NON-NLS-1$
-            "ImportDeclaration",//$NON-NLS-1$
-            "PackageDeclaration",//$NON-NLS-1$
-            "TypeDeclaration",//$NON-NLS-1$
-            "GenericMethodDeclaration",//$NON-NLS-1$
-            "ClassBodyDeclaration",//$NON-NLS-1$
-            "Expression",//$NON-NLS-1$
-            "Type",//$NON-NLS-1$
-            "PrimitiveType",//$NON-NLS-1$
-            "ReferenceType",//$NON-NLS-1$
-            "ClassOrInterfaceType",//$NON-NLS-1$
-            "ArrayType",//$NON-NLS-1$
-            "Name",//$NON-NLS-1$
-            "Dims",//$NON-NLS-1$
-            "ClassType",//$NON-NLS-1$
-            "SimpleName",//$NON-NLS-1$
-            "Header",//$NON-NLS-1$
-            "ClassHeader",//$NON-NLS-1$
-            "InterfaceHeader",//$NON-NLS-1$
-            "MethodHeader",//$NON-NLS-1$
-            "ConstructorHeader",//$NON-NLS-1$
-            "FormalParameter",//$NON-NLS-1$
-            "ImportDeclarations",//$NON-NLS-1$
-            "TypeDeclarations",//$NON-NLS-1$
-            "PackageDeclarationName",//$NON-NLS-1$
-            "SingleTypeImportDeclarationName",//$NON-NLS-1$
-            "TypeImportOnDemandDeclarationName",//$NON-NLS-1$
-            "Modifiers",//$NON-NLS-1$
-            "Modifier",//$NON-NLS-1$
-            "ClassBody",//$NON-NLS-1$
-            "ClassHeaderName",//$NON-NLS-1$
-            "InterfaceTypeList",//$NON-NLS-1$
-            "InterfaceType",//$NON-NLS-1$
-            "ClassBodyDeclarations",//$NON-NLS-1$
-            "Block",//$NON-NLS-1$
-            "VariableDeclarators",//$NON-NLS-1$
-            "VariableDeclarator",//$NON-NLS-1$
-            "VariableDeclaratorId",//$NON-NLS-1$
-            "VariableInitializer",//$NON-NLS-1$
-            "ArrayInitializer",//$NON-NLS-1$
-            "MethodHeaderName",//$NON-NLS-1$
-            "MethodHeaderParameters",//$NON-NLS-1$
-            "MethodPushModifiersHeaderName",//$NON-NLS-1$
-            "ClassTypeList",//$NON-NLS-1$
-            "ConstructorHeaderName",//$NON-NLS-1$
-            "FormalParameterList",//$NON-NLS-1$
-            "ClassTypeElt",//$NON-NLS-1$
-            "StaticOnly",//$NON-NLS-1$
-            "ExplicitConstructorInvocation",//$NON-NLS-1$
-            "Primary",//$NON-NLS-1$
-            "InterfaceBody",//$NON-NLS-1$
-            "InterfaceHeaderName",//$NON-NLS-1$
-            "InterfaceMemberDeclarations",//$NON-NLS-1$
-            "InterfaceMemberDeclaration",//$NON-NLS-1$
-            "VariableInitializers",//$NON-NLS-1$
-            "BlockStatement",//$NON-NLS-1$
-            "Statement",//$NON-NLS-1$
-            "LocalVariableDeclaration",//$NON-NLS-1$
-            "StatementWithoutTrailingSubstatement",//$NON-NLS-1$
-            "StatementNoShortIf",//$NON-NLS-1$
-            "StatementExpression",//$NON-NLS-1$
-            "PostIncrementExpression",//$NON-NLS-1$
-            "PostDecrementExpression",//$NON-NLS-1$
-            "MethodInvocation",//$NON-NLS-1$
-            "ClassInstanceCreationExpression",//$NON-NLS-1$
-            "SwitchBlock",//$NON-NLS-1$
-            "SwitchBlockStatements",//$NON-NLS-1$
-            "SwitchLabels",//$NON-NLS-1$
-            "SwitchBlockStatement",//$NON-NLS-1$
-            "SwitchLabel",//$NON-NLS-1$
-            "ConstantExpression",//$NON-NLS-1$
-            "StatementExpressionList",//$NON-NLS-1$
-            "OnlySynchronized",//$NON-NLS-1$
-            "Catches",//$NON-NLS-1$
-            "Finally",//$NON-NLS-1$
-            "CatchClause",//$NON-NLS-1$
-            "PushLPAREN",//$NON-NLS-1$
-            "PushRPAREN",//$NON-NLS-1$
-            "PrimaryNoNewArray",//$NON-NLS-1$
-            "FieldAccess",//$NON-NLS-1$
-            "ArrayAccess",//$NON-NLS-1$
-            "ClassInstanceCreationExpressionName",//$NON-NLS-1$
-            "ArgumentList",//$NON-NLS-1$
-            "DimWithOrWithOutExprs",//$NON-NLS-1$
-            "DimWithOrWithOutExpr",//$NON-NLS-1$
-            "DimsLoop",//$NON-NLS-1$
-            "OneDimLoop",//$NON-NLS-1$
-            "PostfixExpression",//$NON-NLS-1$
-            "UnaryExpression",//$NON-NLS-1$
-            "UnaryExpressionNotPlusMinus",//$NON-NLS-1$
-            "MultiplicativeExpression",//$NON-NLS-1$
-            "AdditiveExpression",//$NON-NLS-1$
-            "ShiftExpression",//$NON-NLS-1$
-            "RelationalExpression",//$NON-NLS-1$
-            "EqualityExpression",//$NON-NLS-1$
-            "AndExpression",//$NON-NLS-1$
-            "ExclusiveOrExpression",//$NON-NLS-1$
-            "InclusiveOrExpression",//$NON-NLS-1$
-            "ConditionalAndExpression",//$NON-NLS-1$
-            "ConditionalOrExpression",//$NON-NLS-1$
-            "ConditionalExpression",//$NON-NLS-1$
-            "AssignmentExpression",//$NON-NLS-1$
-            "LeftHandSide",//$NON-NLS-1$
-            "AssignmentOperator"//$NON-NLS-1$
+    try {
+      contents = Util.getFileCharContent(new File(dataFilename), null);
+    } catch (IOException ex) {
+      System.out.println(Util.bind("parser.incorrectPath")); //$NON-NLS-1$
+      return;
+    }
+    java.util.StringTokenizer st = new java.util.StringTokenizer(new String(contents), " \t\n\r[]={,;"); //$NON-NLS-1$
+    String[] tokens = new String[st.countTokens()];
+    int i = 0;
+    while (st.hasMoreTokens()) {
+      tokens[i++] = st.nextToken();
+    }
+    final String prefix = FILEPREFIX;
+    i = 0;
+    buildFileFor(prefix + (++i) + ".rsc", "lhs", tokens, false); //$NON-NLS-2$ //$NON-NLS-1$
+    buildFileFor(prefix + (++i) + ".rsc", "check_table", tokens, true); //$NON-NLS-2$ //$NON-NLS-1$
+    buildFileFor(prefix + (++i) + ".rsc", "asb", tokens, false); //$NON-NLS-2$ //$NON-NLS-1$
+    buildFileFor(prefix + (++i) + ".rsc", "asr", tokens, false); //$NON-NLS-2$ //$NON-NLS-1$
+    buildFileFor(prefix + (++i) + ".rsc", "symbol_index", tokens, false); //$NON-NLS-2$ //$NON-NLS-1$
+    System.out.println(Util.bind("parser.moveFiles")); //$NON-NLS-1$
+  }
+  /*
+   * Build initial recovery state.
+   * Recovery state is inferred from the current state of the parser (reduced node stack).
+   */
+  public RecoveredElement buildInitialRecoveryState() {
+
+    /* initialize recovery by retrieving available reduced nodes 
+     * also rebuild bracket balance 
+     */
+    lastCheckPoint = 0;
+
+    RecoveredElement element = null;
+    if (referenceContext instanceof CompilationUnitDeclaration) {
+      element = new RecoveredUnit(compilationUnit, 0, this);
+
+      /* ignore current stack state, since restarting from the beginnning 
+         since could not trust simple brace count */
+      if (true) { // experimenting restart recovery from scratch
+        compilationUnit.currentPackage = null;
+        compilationUnit.imports = null;
+        compilationUnit.types = null;
+        currentToken = 0;
+        listLength = 0;
+        return element;
+      }
+      if (compilationUnit.currentPackage != null) {
+        lastCheckPoint = compilationUnit.currentPackage.declarationSourceEnd + 1;
+      }
+      if (compilationUnit.imports != null) {
+        lastCheckPoint = compilationUnit.imports[compilationUnit.imports.length - 1].declarationSourceEnd + 1;
+      }
+    } else {
+      if (referenceContext instanceof AbstractMethodDeclaration) {
+        element = new RecoveredMethod((AbstractMethodDeclaration) referenceContext, null, 0, this);
+        lastCheckPoint = ((AbstractMethodDeclaration) referenceContext).bodyStart;
+      } else {
+        /* Initializer bodies are parsed in the context of the type declaration, we must thus search it inside */
+        if (referenceContext instanceof TypeDeclaration) {
+          TypeDeclaration type = (TypeDeclaration) referenceContext;
+          for (int i = 0; i < type.fields.length; i++) {
+            FieldDeclaration field = type.fields[i];
+            if (!field.isField()
+              && field.declarationSourceStart <= scanner.initialPosition
+              && scanner.initialPosition <= field.declarationSourceEnd
+              && scanner.eofPosition <= field.declarationSourceEnd + 1) {
+              element = new RecoveredInitializer((Initializer) field, null, 1, this);
+              lastCheckPoint = field.declarationSourceStart;
+              break;
+            }
+          }
+        }
+      }
+    }
+
+    if (element == null)
+      return element;
+
+    for (int i = 0; i <= astPtr; i++) {
+      AstNode node = astStack[i];
+      if (node instanceof AbstractMethodDeclaration) {
+        AbstractMethodDeclaration method = (AbstractMethodDeclaration) node;
+        if (method.declarationSourceEnd == 0) {
+          element = element.add(method, 0);
+          lastCheckPoint = method.bodyStart;
+        } else {
+          element = element.add(method, 0);
+          lastCheckPoint = method.declarationSourceEnd + 1;
+        }
+        continue;
+      }
+      if (node instanceof Initializer) {
+        Initializer initializer = (Initializer) node;
+        if (initializer.declarationSourceEnd == 0) {
+          element = element.add(initializer, 1);
+          lastCheckPoint = initializer.bodyStart;
+        } else {
+          element = element.add(initializer, 0);
+          lastCheckPoint = initializer.declarationSourceEnd + 1;
+        }
+        continue;
+      }
+      if (node instanceof FieldDeclaration) {
+        FieldDeclaration field = (FieldDeclaration) node;
+        if (field.declarationSourceEnd == 0) {
+          element = element.add(field, 0);
+          if (field.initialization == null) {
+            lastCheckPoint = field.sourceEnd + 1;
+          } else {
+            lastCheckPoint = field.initialization.sourceEnd + 1;
+          }
+        } else {
+          element = element.add(field, 0);
+          lastCheckPoint = field.declarationSourceEnd + 1;
+        }
+        continue;
+      }
+      if (node instanceof TypeDeclaration) {
+        TypeDeclaration type = (TypeDeclaration) node;
+        if (type.declarationSourceEnd == 0) {
+          element = element.add(type, 0);
+          lastCheckPoint = type.bodyStart;
+        } else {
+          element = element.add(type, 0);
+          lastCheckPoint = type.declarationSourceEnd + 1;
+        }
+        continue;
+      }
+      if (node instanceof ImportReference) {
+        ImportReference importRef = (ImportReference) node;
+        element = element.add(importRef, 0);
+        lastCheckPoint = importRef.declarationSourceEnd + 1;
+      }
+    }
+    return element;
+  }
+  protected static short check(int i) {
+    return check_table[i - (NUM_RULES + 1)];
+  }
+  /*
+   * Reconsider the entire source looking for inconsistencies in {} () []
+   */
+  public boolean checkAndReportBracketAnomalies(ProblemReporter problemReporter) {
+
+    scanner.wasAcr = false;
+    boolean anomaliesDetected = false;
+    try {
+      char[] source = scanner.source;
+      int[] leftCount = { 0, 0, 0 };
+      int[] rightCount = { 0, 0, 0 };
+      int[] depths = { 0, 0, 0 };
+      int[][] leftPositions = new int[][] { new int[10], new int[10], new int[10] };
+      int[][] leftDepths = new int[][] { new int[10], new int[10], new int[10] };
+      int[][] rightPositions = new int[][] { new int[10], new int[10], new int[10] };
+      int[][] rightDepths = new int[][] { new int[10], new int[10], new int[10] };
+      scanner.currentPosition = scanner.initialPosition; //starting point (first-zero-based char)
+      while (scanner.currentPosition < scanner.eofPosition) { //loop for jumping over comments
+        try {
+          // ---------Consume white space and handles startPosition---------
+          boolean isWhiteSpace;
+          do {
+            scanner.startPosition = scanner.currentPosition;
+            if (((scanner.currentCharacter = source[scanner.currentPosition++]) == '\\')
+              && (source[scanner.currentPosition] == 'u')) {
+              isWhiteSpace = scanner.jumpOverUnicodeWhiteSpace();
+            } else {
+              if (scanner.recordLineSeparator && ((scanner.currentCharacter == '\r') || (scanner.currentCharacter == '\n'))) {
+                if (scanner.lineEnds[scanner.linePtr] < scanner.startPosition) {
+                  // only record line positions we have not recorded yet
+                  scanner.pushLineSeparator();
+                }
+              }
+              isWhiteSpace = Character.isWhitespace(scanner.currentCharacter);
+            }
+          } while (isWhiteSpace && (scanner.currentPosition < scanner.eofPosition));
+
+          // -------consume token until } is found---------
+
+          switch (scanner.currentCharacter) {
+            case '{' :
+              {
+                int index = leftCount[CurlyBracket]++;
+                if (index == leftPositions[CurlyBracket].length) {
+                  System.arraycopy(leftPositions[CurlyBracket], 0, (leftPositions[CurlyBracket] = new int[index * 2]), 0, index);
+                  System.arraycopy(leftDepths[CurlyBracket], 0, (leftDepths[CurlyBracket] = new int[index * 2]), 0, index);
+                }
+                leftPositions[CurlyBracket][index] = scanner.startPosition;
+                leftDepths[CurlyBracket][index] = depths[CurlyBracket]++;
+              }
+              break;
+            case '}' :
+              {
+                int index = rightCount[CurlyBracket]++;
+                if (index == rightPositions[CurlyBracket].length) {
+                  System.arraycopy(rightPositions[CurlyBracket], 0, (rightPositions[CurlyBracket] = new int[index * 2]), 0, index);
+                  System.arraycopy(rightDepths[CurlyBracket], 0, (rightDepths[CurlyBracket] = new int[index * 2]), 0, index);
+                }
+                rightPositions[CurlyBracket][index] = scanner.startPosition;
+                rightDepths[CurlyBracket][index] = --depths[CurlyBracket];
+              }
+              break;
+            case '(' :
+              {
+                int index = leftCount[RoundBracket]++;
+                if (index == leftPositions[RoundBracket].length) {
+                  System.arraycopy(leftPositions[RoundBracket], 0, (leftPositions[RoundBracket] = new int[index * 2]), 0, index);
+                  System.arraycopy(leftDepths[RoundBracket], 0, (leftDepths[RoundBracket] = new int[index * 2]), 0, index);
+                }
+                leftPositions[RoundBracket][index] = scanner.startPosition;
+                leftDepths[RoundBracket][index] = depths[RoundBracket]++;
+              }
+              break;
+            case ')' :
+              {
+                int index = rightCount[RoundBracket]++;
+                if (index == rightPositions[RoundBracket].length) {
+                  System.arraycopy(rightPositions[RoundBracket], 0, (rightPositions[RoundBracket] = new int[index * 2]), 0, index);
+                  System.arraycopy(rightDepths[RoundBracket], 0, (rightDepths[RoundBracket] = new int[index * 2]), 0, index);
+                }
+                rightPositions[RoundBracket][index] = scanner.startPosition;
+                rightDepths[RoundBracket][index] = --depths[RoundBracket];
+              }
+              break;
+            case '[' :
+              {
+                int index = leftCount[SquareBracket]++;
+                if (index == leftPositions[SquareBracket].length) {
+                  System.arraycopy(leftPositions[SquareBracket], 0, (leftPositions[SquareBracket] = new int[index * 2]), 0, index);
+                  System.arraycopy(leftDepths[SquareBracket], 0, (leftDepths[SquareBracket] = new int[index * 2]), 0, index);
+                }
+                leftPositions[SquareBracket][index] = scanner.startPosition;
+                leftDepths[SquareBracket][index] = depths[SquareBracket]++;
+              }
+              break;
+            case ']' :
+              {
+                int index = rightCount[SquareBracket]++;
+                if (index == rightPositions[SquareBracket].length) {
+                  System.arraycopy(
+                    rightPositions[SquareBracket],
+                    0,
+                    (rightPositions[SquareBracket] = new int[index * 2]),
+                    0,
+                    index);
+                  System.arraycopy(rightDepths[SquareBracket], 0, (rightDepths[SquareBracket] = new int[index * 2]), 0, index);
+                }
+                rightPositions[SquareBracket][index] = scanner.startPosition;
+                rightDepths[SquareBracket][index] = --depths[SquareBracket];
+              }
+              break;
+            case '\'' :
+              {
+                if (scanner.getNextChar('\\')) {
+                  scanner.scanEscapeCharacter();
+                } else { // consume next character
+                  scanner.unicodeAsBackSlash = false;
+                  if (((scanner.currentCharacter = source[scanner.currentPosition++]) == '\\')
+                    && (source[scanner.currentPosition] == 'u')) {
+                    scanner.getNextUnicodeChar();
+                  } else {
+                    if (scanner.withoutUnicodePtr != 0) {
+                      scanner.withoutUnicodeBuffer[++scanner.withoutUnicodePtr] = scanner.currentCharacter;
+                    }
+                  }
+                }
+                scanner.getNextChar('\'');
+                break;
+              }
+            case '"' : // consume next character
+              scanner.unicodeAsBackSlash = false;
+              if (((scanner.currentCharacter = source[scanner.currentPosition++]) == '\\')
+                && (source[scanner.currentPosition] == 'u')) {
+                scanner.getNextUnicodeChar();
+              } else {
+                if (scanner.withoutUnicodePtr != 0) {
+                  scanner.withoutUnicodeBuffer[++scanner.withoutUnicodePtr] = scanner.currentCharacter;
+                }
+              }
+              while (scanner.currentCharacter != '"') {
+                if (scanner.currentCharacter == '\r') {
+                  if (source[scanner.currentPosition] == '\n')
+                    scanner.currentPosition++;
+                  break; // the string cannot go further that the line
+                }
+                if (scanner.currentCharacter == '\n') {
+                  break; // the string cannot go further that the line
+                }
+                if (scanner.currentCharacter == '\\') {
+                  scanner.scanEscapeCharacter();
+                }
+                // consume next character
+                scanner.unicodeAsBackSlash = false;
+                if (((scanner.currentCharacter = source[scanner.currentPosition++]) == '\\')
+                  && (source[scanner.currentPosition] == 'u')) {
+                  scanner.getNextUnicodeChar();
+                } else {
+                  if (scanner.withoutUnicodePtr != 0) {
+                    scanner.withoutUnicodeBuffer[++scanner.withoutUnicodePtr] = scanner.currentCharacter;
+                  }
+                }
+              }
+              break;
+            case '/' :
+              {
+                int test;
+                if ((test = scanner.getNextChar('/', '*')) == 0) { //line comment 
+                  //get the next char 
+                  if (((scanner.currentCharacter = source[scanner.currentPosition++]) == '\\')
+                    && (source[scanner.currentPosition] == 'u')) {
+                    //-------------unicode traitement ------------
+                    int c1 = 0, c2 = 0, c3 = 0, c4 = 0;
+                    scanner.currentPosition++;
+                    while (source[scanner.currentPosition] == 'u') {
+                      scanner.currentPosition++;
+                    }
+                    if ((c1 = Character.getNumericValue(source[scanner.currentPosition++])) > 15
+                      || c1 < 0
+                      || (c2 = Character.getNumericValue(source[scanner.currentPosition++])) > 15
+                      || c2 < 0
+                      || (c3 = Character.getNumericValue(source[scanner.currentPosition++])) > 15
+                      || c3 < 0
+                      || (c4 = Character.getNumericValue(source[scanner.currentPosition++])) > 15
+                      || c4 < 0) { //error don't care of the value
+                      scanner.currentCharacter = 'A';
+                    } //something different from \n and \r
+                    else {
+                      scanner.currentCharacter = (char) (((c1 * 16 + c2) * 16 + c3) * 16 + c4);
+                    }
+                  }
+                  while (scanner.currentCharacter != '\r' && scanner.currentCharacter != '\n') {
+                    //get the next char
+                    scanner.startPosition = scanner.currentPosition;
+                    if (((scanner.currentCharacter = source[scanner.currentPosition++]) == '\\')
+                      && (source[scanner.currentPosition] == 'u')) {
+                      //-------------unicode traitement ------------
+                      int c1 = 0, c2 = 0, c3 = 0, c4 = 0;
+                      scanner.currentPosition++;
+                      while (source[scanner.currentPosition] == 'u') {
+                        scanner.currentPosition++;
+                      }
+                      if ((c1 = Character.getNumericValue(source[scanner.currentPosition++])) > 15
+                        || c1 < 0
+                        || (c2 = Character.getNumericValue(source[scanner.currentPosition++])) > 15
+                        || c2 < 0
+                        || (c3 = Character.getNumericValue(source[scanner.currentPosition++])) > 15
+                        || c3 < 0
+                        || (c4 = Character.getNumericValue(source[scanner.currentPosition++])) > 15
+                        || c4 < 0) { //error don't care of the value
+                        scanner.currentCharacter = 'A';
+                      } //something different from \n and \r
+                      else {
+                        scanner.currentCharacter = (char) (((c1 * 16 + c2) * 16 + c3) * 16 + c4);
+                      }
+                    }
+                  }
+                  if (scanner.recordLineSeparator && ((scanner.currentCharacter == '\r') || (scanner.currentCharacter == '\n'))) {
+                    if (scanner.lineEnds[scanner.linePtr] < scanner.startPosition) {
+                      // only record line positions we have not recorded yet
+                      scanner.pushLineSeparator();
+                    }
+                  }
+                  break;
+                }
+                if (test > 0) { //traditional and annotation comment
+                  boolean star = false;
+                  // consume next character
+                  scanner.unicodeAsBackSlash = false;
+                  if (((scanner.currentCharacter = source[scanner.currentPosition++]) == '\\')
+                    && (source[scanner.currentPosition] == 'u')) {
+                    scanner.getNextUnicodeChar();
+                  } else {
+                    if (scanner.withoutUnicodePtr != 0) {
+                      scanner.withoutUnicodeBuffer[++scanner.withoutUnicodePtr] = scanner.currentCharacter;
+                    }
+                  }
+                  if (scanner.currentCharacter == '*') {
+                    star = true;
+                  }
+                  //get the next char 
+                  if (((scanner.currentCharacter = source[scanner.currentPosition++]) == '\\')
+                    && (source[scanner.currentPosition] == 'u')) {
+                    //-------------unicode traitement ------------
+                    int c1 = 0, c2 = 0, c3 = 0, c4 = 0;
+                    scanner.currentPosition++;
+                    while (source[scanner.currentPosition] == 'u') {
+                      scanner.currentPosition++;
+                    }
+                    if ((c1 = Character.getNumericValue(source[scanner.currentPosition++])) > 15
+                      || c1 < 0
+                      || (c2 = Character.getNumericValue(source[scanner.currentPosition++])) > 15
+                      || c2 < 0
+                      || (c3 = Character.getNumericValue(source[scanner.currentPosition++])) > 15
+                      || c3 < 0
+                      || (c4 = Character.getNumericValue(source[scanner.currentPosition++])) > 15
+                      || c4 < 0) { //error don't care of the value
+                      scanner.currentCharacter = 'A';
+                    } //something different from * and /
+                    else {
+                      scanner.currentCharacter = (char) (((c1 * 16 + c2) * 16 + c3) * 16 + c4);
+                    }
+                  }
+                  //loop until end of comment */ 
+                  while ((scanner.currentCharacter != '/') || (!star)) {
+                    star = scanner.currentCharacter == '*';
+                    //get next char
+                    if (((scanner.currentCharacter = source[scanner.currentPosition++]) == '\\')
+                      && (source[scanner.currentPosition] == 'u')) {
+                      //-------------unicode traitement ------------
+                      int c1 = 0, c2 = 0, c3 = 0, c4 = 0;
+                      scanner.currentPosition++;
+                      while (source[scanner.currentPosition] == 'u') {
+                        scanner.currentPosition++;
+                      }
+                      if ((c1 = Character.getNumericValue(source[scanner.currentPosition++])) > 15
+                        || c1 < 0
+                        || (c2 = Character.getNumericValue(source[scanner.currentPosition++])) > 15
+                        || c2 < 0
+                        || (c3 = Character.getNumericValue(source[scanner.currentPosition++])) > 15
+                        || c3 < 0
+                        || (c4 = Character.getNumericValue(source[scanner.currentPosition++])) > 15
+                        || c4 < 0) { //error don't care of the value
+                        scanner.currentCharacter = 'A';
+                      } //something different from * and /
+                      else {
+                        scanner.currentCharacter = (char) (((c1 * 16 + c2) * 16 + c3) * 16 + c4);
+                      }
+                    }
+                  }
+                  break;
+                }
+                break;
+              }
+            default :
+              if (Character.isJavaIdentifierStart(scanner.currentCharacter)) {
+                scanner.scanIdentifierOrKeyword();
+                break;
+              }
+              if (Character.isDigit(scanner.currentCharacter)) {
+                scanner.scanNumber(false);
+                break;
+              }
+          }
+          //-----------------end switch while try--------------------
+        } catch (IndexOutOfBoundsException e) {
+          break; // read until EOF
+        } catch (InvalidInputException e) {
+          return false; // no clue
+        }
+      }
+      if (scanner.recordLineSeparator) {
+        compilationUnit.compilationResult.lineSeparatorPositions = scanner.getLineEnds();
+      }
+
+      // check placement anomalies against other kinds of brackets
+      for (int kind = 0; kind < BracketKinds; kind++) {
+        for (int leftIndex = leftCount[kind] - 1; leftIndex >= 0; leftIndex--) {
+          int start = leftPositions[kind][leftIndex]; // deepest first
+          // find matching closing bracket
+          int depth = leftDepths[kind][leftIndex];
+          int end = -1;
+          for (int i = 0; i < rightCount[kind]; i++) {
+            int pos = rightPositions[kind][i];
+            // want matching bracket further in source with same depth
+            if ((pos > start) && (depth == rightDepths[kind][i])) {
+              end = pos;
+              break;
+            }
+          }
+          if (end < 0) { // did not find a good closing match
+            problemReporter.unmatchedBracket(start, referenceContext, compilationUnit.compilationResult);
+            return true;
+          }
+          // check if even number of opening/closing other brackets in between this pair of brackets
+          int balance = 0;
+          for (int otherKind = 0;(balance == 0) && (otherKind < BracketKinds); otherKind++) {
+            for (int i = 0; i < leftCount[otherKind]; i++) {
+              int pos = leftPositions[otherKind][i];
+              if ((pos > start) && (pos < end))
+                balance++;
+            }
+            for (int i = 0; i < rightCount[otherKind]; i++) {
+              int pos = rightPositions[otherKind][i];
+              if ((pos > start) && (pos < end))
+                balance--;
+            }
+            if (balance != 0) {
+              problemReporter.unmatchedBracket(start, referenceContext, compilationUnit.compilationResult); //bracket anomaly
+              return true;
+            }
+          }
+        }
+        // too many opening brackets ?
+        for (int i = rightCount[kind]; i < leftCount[kind]; i++) {
+          anomaliesDetected = true;
+          problemReporter.unmatchedBracket(
+            leftPositions[kind][leftCount[kind] - i - 1],
+            referenceContext,
+            compilationUnit.compilationResult);
+        }
+        // too many closing brackets ?
+        for (int i = leftCount[kind]; i < rightCount[kind]; i++) {
+          anomaliesDetected = true;
+          problemReporter.unmatchedBracket(rightPositions[kind][i], referenceContext, compilationUnit.compilationResult);
+        }
+        if (anomaliesDetected)
+          return true;
+      }
+
+      return anomaliesDetected;
+    } catch (ArrayStoreException e) { // jdk1.2.2 jit bug
+      return anomaliesDetected;
+    } catch (NullPointerException e) { // jdk1.2.2 jit bug
+      return anomaliesDetected;
+    }
+  }
+  public final void checkAndSetModifiers(int flag) {
+    /*modify the current modifiers buffer.
+    When the startPosition of the modifiers is 0
+    it means that the modifier being parsed is the first
+    of a list of several modifiers. The startPosition
+    is zeroed when a copy of modifiers-buffer is push
+    onto the astStack. */
+
+    if ((modifiers & flag) != 0) { // duplicate modifier
+      modifiers |= AccAlternateModifierProblem;
+    }
+    modifiers |= flag;
+
+    if (modifiersSourceStart < 0)
+      modifiersSourceStart = scanner.startPosition;
+  }
+  public void checkAnnotation() {
+
+    boolean deprecated = false;
+    boolean checkDeprecated = false;
+    int lastAnnotationIndex = -1;
+
+    //since jdk1.2 look only in the last java doc comment...
+    found : for (lastAnnotationIndex = scanner.commentPtr; lastAnnotationIndex >= 0; lastAnnotationIndex--) {
+      //look for @deprecated into the first javadoc comment preceeding the declaration
+      int commentSourceStart = scanner.commentStarts[lastAnnotationIndex];
+      // javadoc only (non javadoc comment have negative end positions.)
+      if (modifiersSourceStart != -1 && modifiersSourceStart < commentSourceStart) {
+        continue;
+      }
+      if (scanner.commentStops[lastAnnotationIndex] < 0) {
+        break found;
+      }
+      checkDeprecated = true;
+      int commentSourceEnd = scanner.commentStops[lastAnnotationIndex] - 1; //stop is one over
+      char[] comment = scanner.source;
+
+      for (int i = commentSourceStart + 3; i < commentSourceEnd - 10; i++) {
+        if ((comment[i] == '@')
+          && (comment[i + 1] == 'd')
+          && (comment[i + 2] == 'e')
+          && (comment[i + 3] == 'p')
+          && (comment[i + 4] == 'r')
+          && (comment[i + 5] == 'e')
+          && (comment[i + 6] == 'c')
+          && (comment[i + 7] == 'a')
+          && (comment[i + 8] == 't')
+          && (comment[i + 9] == 'e')
+          && (comment[i + 10] == 'd')) {
+          // ensure the tag is properly ended: either followed by a space, a tab, line end or asterisk.
+          int nextPos = i + 11;
+          deprecated =
+            (comment[nextPos] == ' ')
+              || (comment[nextPos] == '\t')
+              || (comment[nextPos] == '\n')
+              || (comment[nextPos] == '\r')
+              || (comment[nextPos] == '*');
+          break found;
+        }
+      }
+      break found;
+    }
+    if (deprecated) {
+      checkAndSetModifiers(AccDeprecated);
+    }
+    // modify the modifier source start to point at the first comment
+    if (lastAnnotationIndex >= 0 && checkDeprecated) {
+      modifiersSourceStart = scanner.commentStarts[lastAnnotationIndex];
+    }
+  }
+  protected void classInstanceCreation(boolean alwaysQualified) {
+    // ClassInstanceCreationExpression ::= 'new' ClassType '(' ArgumentListopt ')' ClassBodyopt
+
+    // ClassBodyopt produces a null item on the astStak if it produces NO class body
+    // An empty class body produces a 0 on the length stack.....
+
+    AllocationExpression alloc;
+    int length;
+    if (((length = astLengthStack[astLengthPtr--]) == 1) && (astStack[astPtr] == null)) {
+      //NO ClassBody
+      astPtr--;
+      if (alwaysQualified) {
+        alloc = new QualifiedAllocationExpression();
+      } else {
+        alloc = new AllocationExpression();
+      }
+      alloc.sourceEnd = endPosition; //the position has been stored explicitly
+
+      if ((length = expressionLengthStack[expressionLengthPtr--]) != 0) {
+        expressionPtr -= length;
+        System.arraycopy(expressionStack, expressionPtr + 1, alloc.arguments = new Expression[length], 0, length);
+      }
+      alloc.type = getTypeReference(0);
+      //the default constructor with the correct number of argument
+      //will be created and added by the TC (see createsInternalConstructorWithBinding)
+      alloc.sourceStart = intStack[intPtr--];
+      pushOnExpressionStack(alloc);
+    } else {
+      dispatchDeclarationInto(length);
+      AnonymousLocalTypeDeclaration anonymousTypeDeclaration = (AnonymousLocalTypeDeclaration) astStack[astPtr];
+      anonymousTypeDeclaration.declarationSourceEnd = endStatementPosition;
+      anonymousTypeDeclaration.bodyEnd = endStatementPosition;
+      if (anonymousTypeDeclaration.allocation != null) {
+        anonymousTypeDeclaration.allocation.sourceEnd = endStatementPosition;
+      }
+      astPtr--;
+      astLengthPtr--;
+
+      // mark fields and initializer with local type mark if needed
+      markFieldsWithLocalType(anonymousTypeDeclaration);
+    }
+  }
+  protected final void concatExpressionLists() {
+    expressionLengthStack[--expressionLengthPtr]++;
+  }
+  private final void concatNodeLists() {
+    /*
+     * This is a case where you have two sublists into the astStack that you want
+     * to merge in one list. There is no action required on the astStack. The only
+     * thing you need to do is merge the two lengths specified on the astStackLength.
+     * The top two length are for example:
+     * ... p   n
+     * and you want to result in a list like:
+     * ... n+p 
+     * This means that the p could be equals to 0 in case there is no astNode pushed
+     * on the astStack.
+     * Look at the InterfaceMemberDeclarations for an example.
+     */
+
+    astLengthStack[astLengthPtr - 1] += astLengthStack[astLengthPtr--];
+  }
+  protected void consumeAllocationHeader() {
+    // ClassInstanceCreationExpression ::= 'new' ClassType '(' ArgumentListopt ')' ClassBodyopt
+
+    // ClassBodyopt produces a null item on the astStak if it produces NO class body
+    // An empty class body produces a 0 on the length stack.....
+
+    if (currentElement == null) {
+      return; // should never occur, this consumeRule is only used in recovery mode
+    }
+    if (currentToken == TokenNameLBRACE) {
+      // beginning of an anonymous type
+      AnonymousLocalTypeDeclaration anonymousType = new AnonymousLocalTypeDeclaration(this.compilationUnit.compilationResult);
+      anonymousType.sourceStart = intStack[intPtr--];
+      anonymousType.sourceEnd = rParenPos; // closing parenthesis
+      lastCheckPoint = anonymousType.bodyStart = scanner.currentPosition;
+      currentElement = currentElement.add(anonymousType, 0);
+      lastIgnoredToken = -1;
+      currentToken = 0; // opening brace already taken into account
+      return;
+    }
+    lastCheckPoint = scanner.startPosition; // force to restart at this exact position
+    restartRecovery = true; // request to restart from here on
+  }
+  protected void consumeArgumentList() {
+    // ArgumentList ::= ArgumentList ',' Expression
+    concatExpressionLists();
+  }
+  protected void consumeArrayAccess(boolean unspecifiedReference) {
+    // ArrayAccess ::= Name '[' Expression ']' ==> true
+    // ArrayAccess ::= PrimaryNoNewArray '[' Expression ']' ==> false
+
+    //optimize push/pop
+    Expression exp;
+    if (unspecifiedReference) {
+      exp = expressionStack[expressionPtr] = new ArrayReference(getUnspecifiedReferenceOptimized(), expressionStack[expressionPtr]);
+    } else {
+      expressionPtr--;
+      expressionLengthPtr--;
+      exp = expressionStack[expressionPtr] = new ArrayReference(expressionStack[expressionPtr], expressionStack[expressionPtr + 1]);
+    }
+    exp.sourceEnd = endPosition;
+  }
+  protected void consumeArrayCreationExpression() {
+    // ArrayCreationExpression ::= 'new' PrimitiveType DimWithOrWithOutExprs ArrayInitializeropt
+    // ArrayCreationExpression ::= 'new' ClassOrInterfaceType DimWithOrWithOutExprs ArrayInitializeropt
+
+    int length;
+    ArrayAllocationExpression aae = new ArrayAllocationExpression();
+    if (expressionLengthStack[expressionLengthPtr] != 0) {
+      expressionLengthPtr--;
+      aae.initializer = (ArrayInitializer) expressionStack[expressionPtr--];
+    } else {
+      expressionLengthPtr--;
+    }
+
+    aae.type = getTypeReference(0);
+    length = (expressionLengthStack[expressionLengthPtr--]);
+    expressionPtr -= length;
+    System.arraycopy(expressionStack, expressionPtr + 1, aae.dimensions = new Expression[length], 0, length);
+    aae.sourceStart = intStack[intPtr--];
+    if (aae.initializer == null) {
+      aae.sourceEnd = endPosition;
+    } else {
+      aae.sourceEnd = aae.initializer.sourceEnd;
+    }
+    pushOnExpressionStack(aae);
+  }
+  protected void consumeArrayInitializer() {
+    // ArrayInitializer ::= '{' VariableInitializers '}'
+    // ArrayInitializer ::= '{' VariableInitializers , '}'
+
+    arrayInitializer(expressionLengthStack[expressionLengthPtr--]);
+  }
+
+  protected void consumeAssertStatement() {
+    // AssertStatement ::= 'assert' Expression ':' Expression ';'
+    expressionLengthPtr -= 2;
+    pushOnAstStack(new AssertStatement(expressionStack[expressionPtr--], expressionStack[expressionPtr--], intStack[intPtr--]));
+  }
+
+  protected void consumeAssignment() {
+    // Assignment ::= LeftHandSide AssignmentOperator AssignmentExpression
+    //optimize the push/pop
+
+    int op = intStack[intPtr--]; //<--the encoded operator
+
+    expressionPtr--;
+    expressionLengthPtr--;
+    expressionStack[expressionPtr] =
+      (op != EQUAL)
+        ? new CompoundAssignment(expressionStack[expressionPtr], expressionStack[expressionPtr + 1], op, scanner.startPosition - 1)
+        : new Assignment(expressionStack[expressionPtr], expressionStack[expressionPtr + 1], scanner.startPosition - 1);
+  }
+  protected void consumeAssignmentOperator(int pos) {
+    // AssignmentOperator ::= '='
+    // AssignmentOperator ::= '*='
+    // AssignmentOperator ::= '/='
+    // AssignmentOperator ::= '%='
+    // AssignmentOperator ::= '+='
+    // AssignmentOperator ::= '-='
+    // AssignmentOperator ::= '<<='
+    // AssignmentOperator ::= '>>='
+    // AssignmentOperator ::= '>>>='
+    // AssignmentOperator ::= '&='
+    // AssignmentOperator ::= '^='
+    // AssignmentOperator ::= '|='
+
+    try {
+      intStack[++intPtr] = pos;
+    } catch (IndexOutOfBoundsException e) {
+      //intPtr is correct 
+      int oldStackLength = intStack.length;
+      int oldStack[] = intStack;
+      intStack = new int[oldStackLength + StackIncrement];
+      System.arraycopy(oldStack, 0, intStack, 0, oldStackLength);
+      intStack[intPtr] = pos;
+    }
+  }
+  protected void consumeBinaryExpression(int op) {
+    // MultiplicativeExpression ::= MultiplicativeExpression '*' UnaryExpression
+    // MultiplicativeExpression ::= MultiplicativeExpression '/' UnaryExpression
+    // MultiplicativeExpression ::= MultiplicativeExpression '%' UnaryExpression
+    // AdditiveExpression ::= AdditiveExpression '+' MultiplicativeExpression
+    // AdditiveExpression ::= AdditiveExpression '-' MultiplicativeExpression
+    // ShiftExpression ::= ShiftExpression '<<'  AdditiveExpression
+    // ShiftExpression ::= ShiftExpression '>>'  AdditiveExpression
+    // ShiftExpression ::= ShiftExpression '>>>' AdditiveExpression
+    // RelationalExpression ::= RelationalExpression '<'  ShiftExpression
+    // RelationalExpression ::= RelationalExpression '>'  ShiftExpression
+    // RelationalExpression ::= RelationalExpression '<=' ShiftExpression
+    // RelationalExpression ::= RelationalExpression '>=' ShiftExpression
+    // AndExpression ::= AndExpression '&' EqualityExpression
+    // ExclusiveOrExpression ::= ExclusiveOrExpression '^' AndExpression
+    // InclusiveOrExpression ::= InclusiveOrExpression '|' ExclusiveOrExpression
+    // ConditionalAndExpression ::= ConditionalAndExpression '&&' InclusiveOrExpression
+    // ConditionalOrExpression ::= ConditionalOrExpression '||' ConditionalAndExpression
+
+    //optimize the push/pop
+
+    expressionPtr--;
+    expressionLengthPtr--;
+    if (op == OR_OR) {
+      expressionStack[expressionPtr] = new OR_OR_Expression(expressionStack[expressionPtr], expressionStack[expressionPtr + 1], op);
+    } else {
+      if (op == AND_AND) {
+        expressionStack[expressionPtr] =
+          new AND_AND_Expression(expressionStack[expressionPtr], expressionStack[expressionPtr + 1], op);
+      } else {
+        // look for "string1" + "string2"
+        if ((op == PLUS) && optimizeStringLiterals) {
+          Expression expr1, expr2;
+          expr1 = expressionStack[expressionPtr];
+          expr2 = expressionStack[expressionPtr + 1];
+          if (expr1 instanceof StringLiteral) {
+            if (expr2 instanceof CharLiteral) { // string+char
+              expressionStack[expressionPtr] = ((StringLiteral) expr1).extendWith((CharLiteral) expr2);
+            } else if (expr2 instanceof StringLiteral) { //string+string
+              expressionStack[expressionPtr] = ((StringLiteral) expr1).extendWith((StringLiteral) expr2);
+            } else {
+              expressionStack[expressionPtr] = new BinaryExpression(expr1, expr2, PLUS);
+            }
+          } else {
+            expressionStack[expressionPtr] = new BinaryExpression(expr1, expr2, PLUS);
+          }
+        } else {
+          expressionStack[expressionPtr] =
+            new BinaryExpression(expressionStack[expressionPtr], expressionStack[expressionPtr + 1], op);
+        }
+      }
+    }
+  }
+  protected void consumeBlock() {
+    // Block ::= OpenBlock '{' BlockStatementsopt '}'
+    // simpler action for empty blocks
+
+    int length;
+    if ((length = astLengthStack[astLengthPtr--]) == 0) { // empty block 
+      pushOnAstStack(Block.EmptyWith(intStack[intPtr--], endStatementPosition));
+      realBlockPtr--; // still need to pop the block variable counter
+    } else {
+      Block bk = new Block(realBlockStack[realBlockPtr--]);
+      astPtr -= length;
+      System.arraycopy(astStack, astPtr + 1, bk.statements = new Statement[length], 0, length);
+      pushOnAstStack(bk);
+      bk.sourceStart = intStack[intPtr--];
+      bk.sourceEnd = endStatementPosition;
+    }
+  }
+  protected void consumeBlockStatements() {
+    // BlockStatements ::= BlockStatements BlockStatement
+    concatNodeLists();
+  }
+  protected void consumeCaseLabel() {
+    // SwitchLabel ::= 'case' ConstantExpression ':'
+    expressionLengthPtr--;
+    pushOnAstStack(new Case(intStack[intPtr--], expressionStack[expressionPtr--]));
+  }
+  protected void consumeCastExpression() {
+    // CastExpression ::= PushLPAREN PrimitiveType Dimsopt PushRPAREN UnaryExpression
+    // CastExpression ::= PushLPAREN Name Dims PushRPAREN UnaryExpressionNotPlusMinus
+
+    //intStack : posOfLeftParen dim posOfRightParen
+
+    //optimize the push/pop
+
+    Expression exp, cast, castType;
+    int end = intStack[intPtr--];
+    expressionStack[expressionPtr] =
+      cast = new CastExpression(exp = expressionStack[expressionPtr], castType = getTypeReference(intStack[intPtr--]));
+    castType.sourceEnd = end - 1;
+    castType.sourceStart = (cast.sourceStart = intStack[intPtr--]) + 1;
+    cast.sourceEnd = exp.sourceEnd;
+  }
+  protected void consumeCastExpressionLL1() {
+    //CastExpression ::= '(' Expression ')' UnaryExpressionNotPlusMinus
+    // Expression is used in order to make the grammar LL1
+
+    //optimize push/pop
+
+    Expression castType, cast, exp;
+    expressionPtr--;
+    expressionStack[expressionPtr] =
+      cast =
+        new CastExpression(exp = expressionStack[expressionPtr + 1], castType = getTypeReference(expressionStack[expressionPtr]));
+    expressionLengthPtr--;
+    updateSourcePosition(castType);
+    cast.sourceStart = castType.sourceStart;
+    cast.sourceEnd = exp.sourceEnd;
+    castType.sourceStart++;
+    castType.sourceEnd--;
+  }
+  protected void consumeCatches() {
+    // Catches ::= Catches CatchClause
+    optimizedConcatNodeLists();
+  }
+  protected void consumeCatchHeader() {
+    // CatchDeclaration ::= 'catch' '(' FormalParameter ')' '{'
+
+    if (currentElement == null) {
+      return; // should never occur, this consumeRule is only used in recovery mode
+    }
+    // current element should be a block due to the presence of the opening brace
+    if (!(currentElement instanceof RecoveredBlock)) {
+      return;
+    }
+    // exception argument is already on astStack
+    ((RecoveredBlock) currentElement).attach(new RecoveredLocalVariable((Argument) astStack[astPtr--], currentElement, 0));
+    // insert catch variable in catch block
+    lastCheckPoint = scanner.startPosition; // force to restart at this exact position
+    restartRecovery = true; // request to restart from here on
+    lastIgnoredToken = -1;
+  }
+  protected void consumeClassBodyDeclaration() {
+    // ClassBodyDeclaration ::= Diet Block
+    //push an Initializer
+    //optimize the push/pop
+    nestedMethod[nestedType]--;
+    Initializer initializer = new Initializer((Block) astStack[astPtr], 0);
+    intPtr--; // pop sourcestart left on the stack by consumeNestedMethod.
+    realBlockPtr--; // pop the block variable counter left on the stack by consumeNestedMethod
+    int javadocCommentStart = intStack[intPtr--];
+    if (javadocCommentStart != -1) {
+      initializer.declarationSourceStart = javadocCommentStart;
+    }
+    astStack[astPtr] = initializer;
+    initializer.sourceEnd = endStatementPosition;
+    initializer.declarationSourceEnd = flushAnnotationsDefinedPriorTo(endStatementPosition);
+  }
+  protected void consumeClassBodyDeclarations() {
+    // ClassBodyDeclarations ::= ClassBodyDeclarations ClassBodyDeclaration
+    concatNodeLists();
+  }
+  protected void consumeClassBodyDeclarationsopt() {
+    // ClassBodyDeclarationsopt ::= NestedType ClassBodyDeclarations
+    nestedType--;
+  }
+  protected void consumeClassBodyopt() {
+    // ClassBodyopt ::= $empty
+    pushOnAstStack(null);
+    endPosition = scanner.startPosition - 1;
+  }
+  protected void consumeClassDeclaration() {
+    // ClassDeclaration ::= ClassHeader ClassBody
+
+    int length;
+    if ((length = astLengthStack[astLengthPtr--]) != 0) {
+      //there are length declarations
+      //dispatch according to the type of the declarations
+      dispatchDeclarationInto(length);
+    }
+
+    TypeDeclaration typeDecl = (TypeDeclaration) astStack[astPtr];
+
+    // mark fields and initializer with local type mark if needed
+    markFieldsWithLocalType(typeDecl);
+
+    //convert constructor that do not have the type's name into methods
+    boolean hasConstructor = typeDecl.checkConstructors(this);
+
+    //add the default constructor when needed (interface don't have it)
+    if (!hasConstructor) {
+      boolean insideFieldInitializer = false;
+      if (diet) {
+        for (int i = nestedType; i > 0; i--) {
+          if (variablesCounter[i] > 0) {
+            insideFieldInitializer = true;
+            break;
+          }
+        }
+      }
+      typeDecl.createsInternalConstructor(!diet || insideFieldInitializer, true);
+    }
+
+    //always add <clinit> (will be remove at code gen time if empty)
+    if (this.scanner.containsAssertKeyword) {
+      typeDecl.bits |= AstNode.AddAssertionMASK;
+    }
+    typeDecl.addClinit();
+    typeDecl.bodyEnd = endStatementPosition;
+    typeDecl.declarationSourceEnd = flushAnnotationsDefinedPriorTo(endStatementPosition);
+  }
+  protected void consumeClassHeader() {
+    // ClassHeader ::= ClassHeaderName ClassHeaderExtendsopt ClassHeaderImplementsopt
+
+    TypeDeclaration typeDecl = (TypeDeclaration) astStack[astPtr];
+    if (currentToken == TokenNameLBRACE) {
+      typeDecl.bodyStart = scanner.currentPosition;
+    }
+    if (currentElement != null) {
+      restartRecovery = true; // used to avoid branching back into the regular automaton               
+    }
+    // flush the comments related to the class header
+    scanner.commentPtr = -1;
+  }
+  protected void consumeClassHeaderExtends() {
+    // ClassHeaderExtends ::= 'extends' ClassType
+    // There is a class declaration on the top of stack
+    TypeDeclaration typeDecl = (TypeDeclaration) astStack[astPtr];
+    //superclass
+    typeDecl.superclass = getTypeReference(0);
+    typeDecl.bodyStart = typeDecl.superclass.sourceEnd + 1;
+    // recovery
+    if (currentElement != null) {
+      lastCheckPoint = typeDecl.bodyStart;
+    }
+  }
+  protected void consumeClassHeaderImplements() {
+    // ClassHeaderImplements ::= 'implements' InterfaceTypeList
+    int length = astLengthStack[astLengthPtr--];
+    //super interfaces
+    astPtr -= length;
+    // There is a class declaration on the top of stack
+    TypeDeclaration typeDecl = (TypeDeclaration) astStack[astPtr];
+    System.arraycopy(astStack, astPtr + 1, typeDecl.superInterfaces = new TypeReference[length], 0, length);
+    typeDecl.bodyStart = typeDecl.superInterfaces[length - 1].sourceEnd + 1;
+    listLength = 0; // reset after having read super-interfaces
+    // recovery
+    if (currentElement != null) { // is recovering
+      lastCheckPoint = typeDecl.bodyStart;
+    }
+  }
+  protected void consumeClassHeaderName() {
+    // ClassHeaderName ::= Modifiersopt 'class' 'Identifier'
+    TypeDeclaration typeDecl;
+    if (nestedMethod[nestedType] == 0) {
+      if (nestedType != 0) {
+        typeDecl = new MemberTypeDeclaration(this.compilationUnit.compilationResult);
+      } else {
+        typeDecl = new TypeDeclaration(this.compilationUnit.compilationResult);
+      }
+    } else {
+      // Record that the block has a declaration for local types
+      typeDecl = new LocalTypeDeclaration(this.compilationUnit.compilationResult);
+      markCurrentMethodWithLocalType();
+      blockReal();
+    }
+
+    //highlight the name of the type
+    long pos = identifierPositionStack[identifierPtr];
+    typeDecl.sourceEnd = (int) pos;
+    typeDecl.sourceStart = (int) (pos >>> 32);
+    typeDecl.name = identifierStack[identifierPtr--];
+    identifierLengthPtr--;
+
+    //compute the declaration source too
+    // 'class' and 'interface' push two int positions: the beginning of the class token and its end.
+    // we want to keep the beginning position but get rid of the end position
+    // it is only used for the ClassLiteralAccess positions.
+    typeDecl.declarationSourceStart = intStack[intPtr--];
+    intPtr--; // remove the end position of the class token
+
+    typeDecl.modifiersSourceStart = intStack[intPtr--];
+    typeDecl.modifiers = intStack[intPtr--];
+    if (typeDecl.modifiersSourceStart >= 0) {
+      typeDecl.declarationSourceStart = typeDecl.modifiersSourceStart;
+    }
+    typeDecl.bodyStart = typeDecl.sourceEnd + 1;
+    pushOnAstStack(typeDecl);
+
+    listLength = 0; // will be updated when reading super-interfaces
+    // recovery
+    if (currentElement != null) {
+      lastCheckPoint = typeDecl.bodyStart;
+      currentElement = currentElement.add(typeDecl, 0);
+      lastIgnoredToken = -1;
+    }
+  }
+  protected void consumeClassInstanceCreationExpression() {
+    // ClassInstanceCreationExpression ::= 'new' ClassType '(' ArgumentListopt ')' ClassBodyopt
+    classInstanceCreation(false);
+  }
+  protected void consumeClassInstanceCreationExpressionName() {
+    // ClassInstanceCreationExpressionName ::= Name '.'
+    pushOnExpressionStack(getUnspecifiedReferenceOptimized());
+  }
+  protected void consumeClassInstanceCreationExpressionQualified() {
+    // ClassInstanceCreationExpression ::= Primary '.' 'new' SimpleName '(' ArgumentListopt ')' ClassBodyopt
+    // ClassInstanceCreationExpression ::= ClassInstanceCreationExpressionName 'new' SimpleName '(' ArgumentListopt ')' ClassBodyopt
+
+    classInstanceCreation(true); //  <-- push the Qualifed....
+
+    expressionLengthPtr--;
+    QualifiedAllocationExpression qae = (QualifiedAllocationExpression) expressionStack[expressionPtr--];
+    qae.enclosingInstance = expressionStack[expressionPtr];
+    expressionStack[expressionPtr] = qae;
+    qae.sourceStart = qae.enclosingInstance.sourceStart;
+  }
+  protected void consumeClassTypeElt() {
+    // ClassTypeElt ::= ClassType
+    pushOnAstStack(getTypeReference(0));
+    /* if incomplete thrown exception list, listLength counter will not have been reset,
+       indicating that some items are available on the stack */
+    listLength++;
+  }
+  protected void consumeClassTypeList() {
+    // ClassTypeList ::= ClassTypeList ',' ClassTypeElt
+    optimizedConcatNodeLists();
+  }
+  protected void consumeCompilationUnit() {
+    // CompilationUnit ::= EnterCompilationUnit PackageDeclarationopt ImportDeclarationsopt
+    // do nothing by default
+  }
+  protected void consumeConditionalExpression(int op) {
+    // ConditionalExpression ::= ConditionalOrExpression '?' Expression ':' ConditionalExpression
+    //optimize the push/pop
+
+    expressionPtr -= 2;
+    expressionLengthPtr -= 2;
+    expressionStack[expressionPtr] =
+      new ConditionalExpression(
+        expressionStack[expressionPtr],
+        expressionStack[expressionPtr + 1],
+        expressionStack[expressionPtr + 2]);
+  }
+  protected void consumeConstructorBlockStatements() {
+    // ConstructorBody ::= NestedMethod '{' ExplicitConstructorInvocation BlockStatements '}'
+    concatNodeLists(); // explictly add the first statement into the list of statements 
+  }
+  protected void consumeConstructorBody() {
+    // ConstructorBody ::= NestedMethod  '{' BlockStatementsopt '}'
+    // ConstructorBody ::= NestedMethod  '{' ExplicitConstructorInvocation '}'
+    nestedMethod[nestedType]--;
+  }
+  protected void consumeConstructorDeclaration() {
+    // ConstructorDeclaration ::= ConstructorHeader ConstructorBody
+
+    /*
+    astStack : MethodDeclaration statements
+    identifierStack : name
+     ==>
+    astStack : MethodDeclaration
+    identifierStack :
+    */
+
+    //must provide a default constructor call when needed
+
+    int length;
+
+    // pop the position of the {  (body of the method) pushed in block decl
+    intPtr--;
+
+    //statements
+    realBlockPtr--;
+    ExplicitConstructorCall constructorCall = null;
+    Statement[] statements = null;
+    if ((length = astLengthStack[astLengthPtr--]) != 0) {
+      astPtr -= length;
+      if (astStack[astPtr + 1] instanceof ExplicitConstructorCall) {
+        //avoid a isSomeThing that would only be used here BUT what is faster between two alternatives ?
+        System.arraycopy(astStack, astPtr + 2, statements = new Statement[length - 1], 0, length - 1);
+        constructorCall = (ExplicitConstructorCall) astStack[astPtr + 1];
+      } else { //need to add explicitly the super();
+        System.arraycopy(astStack, astPtr + 1, statements = new Statement[length], 0, length);
+        constructorCall = SuperReference.implicitSuperConstructorCall();
+      }
+    } else {
+      if (!diet) {
+        // add it only in non-diet mode, if diet_bodies, then constructor call will be added elsewhere.
+        constructorCall = SuperReference.implicitSuperConstructorCall();
+      }
+    }
+
+    // now we know that the top of stack is a constructorDeclaration
+    ConstructorDeclaration cd = (ConstructorDeclaration) astStack[astPtr];
+    cd.constructorCall = constructorCall;
+    cd.statements = statements;
+
+    //highlight of the implicit call on the method name
+    if (constructorCall != null && cd.constructorCall.sourceEnd == 0) {
+      cd.constructorCall.sourceEnd = cd.sourceEnd;
+      cd.constructorCall.sourceStart = cd.sourceStart;
+    }
+
+    //watch for } that could be given as a unicode ! ( u007D is '}' )
+    // store the endPosition (position just before the '}') in case there is
+    // a trailing comment behind the end of the method
+    cd.bodyEnd = endPosition;
+    cd.declarationSourceEnd = flushAnnotationsDefinedPriorTo(endStatementPosition);
+  }
+
+  protected void consumeInvalidConstructorDeclaration() {
+    // ConstructorDeclaration ::= ConstructorHeader ';'
+    // now we know that the top of stack is a constructorDeclaration
+    ConstructorDeclaration cd = (ConstructorDeclaration) astStack[astPtr];
+
+    cd.bodyEnd = endPosition; // position just before the trailing semi-colon
+    cd.declarationSourceEnd = flushAnnotationsDefinedPriorTo(endStatementPosition);
+    // report the problem and continue the parsing - narrowing the problem onto the method
+  }
+  protected void consumeConstructorHeader() {
+    // ConstructorHeader ::= ConstructorHeaderName MethodHeaderParameters MethodHeaderThrowsClauseopt
+
+    AbstractMethodDeclaration method = (AbstractMethodDeclaration) astStack[astPtr];
+
+    if (currentToken == TokenNameLBRACE) {
+      method.bodyStart = scanner.currentPosition;
+    }
+    // recovery
+    if (currentElement != null) {
+      restartRecovery = true; // used to avoid branching back into the regular automaton
+    }
+  }
+  protected void consumeConstructorHeaderName() {
+
+    /* recovering - might be an empty message send */
+    if (currentElement != null) {
+      if (lastIgnoredToken == TokenNamenew) { // was an allocation expression
+        lastCheckPoint = scanner.startPosition; // force to restart at this exact position                             
+        restartRecovery = true;
+        return;
+      }
+    }
+
+    // ConstructorHeaderName ::=  Modifiersopt 'Identifier' '('
+    ConstructorDeclaration cd = new ConstructorDeclaration(this.compilationUnit.compilationResult);
+
+    //name -- this is not really revelant but we do .....
+    cd.selector = identifierStack[identifierPtr];
+    long selectorSource = identifierPositionStack[identifierPtr--];
+    identifierLengthPtr--;
+
+    //modifiers
+    cd.declarationSourceStart = intStack[intPtr--];
+    cd.modifiers = intStack[intPtr--];
+
+    //highlight starts at the selector starts
+    cd.sourceStart = (int) (selectorSource >>> 32);
+    pushOnAstStack(cd);
+    cd.sourceEnd = lParenPos;
+    cd.bodyStart = lParenPos + 1;
+    listLength = 0; // initialize listLength before reading parameters/throws
+
+    // recovery
+    if (currentElement != null) {
+      lastCheckPoint = cd.bodyStart;
+      if ((currentElement instanceof RecoveredType && lastIgnoredToken != TokenNameDOT) || cd.modifiers != 0) {
+        currentElement = currentElement.add(cd, 0);
+        lastIgnoredToken = -1;
+      }
+    }
+  }
+  protected void consumeDefaultLabel() {
+    // SwitchLabel ::= 'default' ':'
+    pushOnAstStack(new DefaultCase(intStack[intPtr--], intStack[intPtr--]));
+  }
+  protected void consumeDefaultModifiers() {
+    checkAnnotation(); // might update modifiers with AccDeprecated
+    pushOnIntStack(modifiers); // modifiers
+    pushOnIntStack(modifiersSourceStart >= 0 ? modifiersSourceStart : scanner.startPosition);
+    resetModifiers();
+  }
+  protected void consumeDiet() {
+    // Diet ::= $empty
+    checkAnnotation();
+    pushOnIntStack(modifiersSourceStart); // push the start position of a javadoc comment if there is one
+    jumpOverMethodBody();
+  }
+  protected void consumeDims() {
+    // Dims ::= DimsLoop
+    pushOnIntStack(dimensions);
+    dimensions = 0;
+  }
+  protected void consumeDimWithOrWithOutExpr() {
+    // DimWithOrWithOutExpr ::= '[' ']'
+    pushOnExpressionStack(null);
+  }
+  protected void consumeDimWithOrWithOutExprs() {
+    // DimWithOrWithOutExprs ::= DimWithOrWithOutExprs DimWithOrWithOutExpr
+    concatExpressionLists();
+  }
+  protected void consumeEmptyArgumentListopt() {
+    // ArgumentListopt ::= $empty
+    pushOnExpressionStackLengthStack(0);
+  }
+  protected void consumeEmptyArrayInitializer() {
+    // ArrayInitializer ::= '{' ,opt '}'
+    arrayInitializer(0);
+  }
+  protected void consumeEmptyArrayInitializeropt() {
+    // ArrayInitializeropt ::= $empty
+    pushOnExpressionStackLengthStack(0);
+  }
+  protected void consumeEmptyBlockStatementsopt() {
+    // BlockStatementsopt ::= $empty
+    pushOnAstLengthStack(0);
+  }
+  protected void consumeEmptyCatchesopt() {
+    // Catchesopt ::= $empty
+    pushOnAstLengthStack(0);
+  }
+  protected void consumeEmptyClassBodyDeclarationsopt() {
+    // ClassBodyDeclarationsopt ::= $empty
+    pushOnAstLengthStack(0);
+  }
+  protected void consumeEmptyClassMemberDeclaration() {
+    // ClassMemberDeclaration ::= ';'
+    pushOnAstLengthStack(0);
+  }
+  protected void consumeEmptyDimsopt() {
+    // Dimsopt ::= $empty
+    pushOnIntStack(0);
+  }
+  protected void consumeEmptyExpression() {
+    // Expressionopt ::= $empty
+    pushOnExpressionStackLengthStack(0);
+  }
+  protected void consumeEmptyForInitopt() {
+    // ForInitopt ::= $empty
+    pushOnAstLengthStack(0);
+  }
+  protected void consumeEmptyForUpdateopt() {
+    // ForUpdateopt ::= $empty
+    pushOnExpressionStackLengthStack(0);
+  }
+  protected void consumeEmptyImportDeclarationsopt() {
+    // ImportDeclarationsopt ::= $empty
+    pushOnAstLengthStack(0);
+  }
+  protected void consumeEmptyInterfaceMemberDeclaration() {
+    // InterfaceMemberDeclaration ::= ';'
+    pushOnAstLengthStack(0);
+  }
+  protected void consumeEmptyInterfaceMemberDeclarationsopt() {
+    // InterfaceMemberDeclarationsopt ::= $empty
+    pushOnAstLengthStack(0);
+  }
+  protected void consumeEmptyStatement() {
+    // EmptyStatement ::= ';'
+    if (this.scanner.source[endStatementPosition] == ';') {
+      pushOnAstStack(new EmptyStatement(endStatementPosition, endStatementPosition));
+    } else {
+      // we have a Unicode for the ';' (/u003B)
+      pushOnAstStack(new EmptyStatement(endStatementPosition - 5, endStatementPosition));
+    }
+  }
+  protected void consumeEmptySwitchBlock() {
+    // SwitchBlock ::= '{' '}'
+    pushOnAstLengthStack(0);
+  }
+  protected void consumeEmptyTypeDeclaration() {
+    // TypeDeclaration ::= ';' 
+    pushOnAstLengthStack(0);
+  }
+  protected void consumeEmptyTypeDeclarationsopt() {
+    // TypeDeclarationsopt ::= $empty
+    pushOnAstLengthStack(0);
+  }
+  protected void consumeEnterAnonymousClassBody() {
+    // EnterAnonymousClassBody ::= $empty
+    QualifiedAllocationExpression alloc;
+    AnonymousLocalTypeDeclaration anonymousType = new AnonymousLocalTypeDeclaration(this.compilationUnit.compilationResult);
+    alloc = anonymousType.allocation = new QualifiedAllocationExpression(anonymousType);
+    markCurrentMethodWithLocalType();
+    pushOnAstStack(anonymousType);
+
+    alloc.sourceEnd = rParenPos; //the position has been stored explicitly
+    int argumentLength;
+    if ((argumentLength = expressionLengthStack[expressionLengthPtr--]) != 0) {
+      expressionPtr -= argumentLength;
+      System.arraycopy(expressionStack, expressionPtr + 1, alloc.arguments = new Expression[argumentLength], 0, argumentLength);
+    }
+    alloc.type = getTypeReference(0);
+
+    anonymousType.sourceEnd = alloc.sourceEnd;
+    //position at the type while it impacts the anonymous declaration
+    anonymousType.sourceStart = anonymousType.declarationSourceStart = alloc.type.sourceStart;
+    alloc.sourceStart = intStack[intPtr--];
+    pushOnExpressionStack(alloc);
+
+    anonymousType.bodyStart = scanner.currentPosition;
+    listLength = 0; // will be updated when reading super-interfaces
+    // recovery
+    if (currentElement != null) {
+      lastCheckPoint = anonymousType.bodyStart;
+      // the recoveryTokenCheck will deal with the open brace          
+      currentElement = currentElement.add(anonymousType, 0);
+      currentToken = 0; // opening brace already taken into account
+      lastIgnoredToken = -1;
+    }
+  }
+  protected void consumeEnterCompilationUnit() {
+    // EnterCompilationUnit ::= $empty
+    // do nothing by default
+  }
+  protected void consumeEnterVariable() {
+    // EnterVariable ::= $empty
+    // do nothing by default
+
+    char[] name = identifierStack[identifierPtr];
+    long namePosition = identifierPositionStack[identifierPtr];
+    int extendedDimension = intStack[intPtr--];
+    AbstractVariableDeclaration declaration;
+    // create the ast node
+    boolean isLocalDeclaration = nestedMethod[nestedType] != 0;
+    if (isLocalDeclaration) {
+      // create the local variable declarations
+      declaration = this.createLocalDeclaration(null, name, (int) (namePosition >>> 32), (int) namePosition);
+    } else {
+      // create the field declaration
+      declaration = this.createFieldDeclaration(null, name, (int) (namePosition >>> 32), (int) namePosition);
+    }
+
+    identifierPtr--;
+    identifierLengthPtr--;
+    TypeReference type;
+    int variableIndex = variablesCounter[nestedType];
+    int typeDim = 0;
+    if (variableIndex == 0) {
+      // first variable of the declaration (FieldDeclaration or LocalDeclaration)
+      if (isLocalDeclaration) {
+        declaration.declarationSourceStart = intStack[intPtr--];
+        declaration.modifiers = intStack[intPtr--];
+        type = getTypeReference(typeDim = intStack[intPtr--]); // type dimension
+        if (declaration.declarationSourceStart == -1) {
+          // this is true if there is no modifiers for the local variable declaration
+          declaration.declarationSourceStart = type.sourceStart;
+        }
+        pushOnAstStack(type);
+      } else {
+        type = getTypeReference(typeDim = intStack[intPtr--]); // type dimension
+        pushOnAstStack(type);
+        declaration.declarationSourceStart = intStack[intPtr--];
+        declaration.modifiers = intStack[intPtr--];
+      }
+    } else {
+      type = (TypeReference) astStack[astPtr - variableIndex];
+      typeDim = type.dimensions();
+      AbstractVariableDeclaration previousVariable = (AbstractVariableDeclaration) astStack[astPtr];
+      declaration.declarationSourceStart = previousVariable.declarationSourceStart;
+      declaration.modifiers = previousVariable.modifiers;
+    }
+
+    if (extendedDimension == 0) {
+      declaration.type = type;
+    } else {
+      int dimension = typeDim + extendedDimension;
+      //on the identifierLengthStack there is the information about the type....
+      int baseType;
+      if ((baseType = identifierLengthStack[identifierLengthPtr + 1]) < 0) {
+        //it was a baseType
+        int typeSourceStart = type.sourceStart;
+        int typeSourceEnd = type.sourceEnd;
+        type = TypeReference.baseTypeReference(-baseType, dimension);
+        type.sourceStart = typeSourceStart;
+        type.sourceEnd = typeSourceEnd;
+        declaration.type = type;
+      } else {
+        declaration.type = this.copyDims(type, dimension);
+      }
+    }
+    variablesCounter[nestedType]++;
+    pushOnAstStack(declaration);
+    // recovery
+    if (currentElement != null) {
+      if (!(currentElement instanceof RecoveredType)
+        && (currentToken == TokenNameDOT //|| declaration.modifiers != 0
+          || (scanner.getLineNumber(declaration.type.sourceStart) != scanner.getLineNumber((int) (namePosition >>> 32))))) {
+        lastCheckPoint = (int) (namePosition >>> 32);
+        restartRecovery = true;
+        return;
+      }
+      if (isLocalDeclaration) {
+        LocalDeclaration localDecl = (LocalDeclaration) astStack[astPtr];
+        lastCheckPoint = localDecl.sourceEnd + 1;
+        currentElement = currentElement.add(localDecl, 0);
+      } else {
+        FieldDeclaration fieldDecl = (FieldDeclaration) astStack[astPtr];
+        lastCheckPoint = fieldDecl.sourceEnd + 1;
+        currentElement = currentElement.add(fieldDecl, 0);
+      }
+      lastIgnoredToken = -1;
+    }
+  }
+  protected void consumeEqualityExpression(int op) {
+    // EqualityExpression ::= EqualityExpression '==' RelationalExpression
+    // EqualityExpression ::= EqualityExpression '!=' RelationalExpression
+
+    //optimize the push/pop
+
+    expressionPtr--;
+    expressionLengthPtr--;
+    expressionStack[expressionPtr] = new EqualExpression(expressionStack[expressionPtr], expressionStack[expressionPtr + 1], op);
+  }
+  protected void consumeExitVariableWithInitialization() {
+    // ExitVariableWithInitialization ::= $empty
+    // do nothing by default
+    expressionLengthPtr--;
+    AbstractVariableDeclaration variableDecl = (AbstractVariableDeclaration) astStack[astPtr];
+    variableDecl.initialization = expressionStack[expressionPtr--];
+    // we need to update the declarationSourceEnd of the local variable declaration to the
+    // source end position of the initialization expression
+    variableDecl.declarationSourceEnd = variableDecl.initialization.sourceEnd;
+    variableDecl.declarationEnd = variableDecl.initialization.sourceEnd;
+  }
+  protected void consumeExitVariableWithoutInitialization() {
+    // ExitVariableWithoutInitialization ::= $empty
+    // do nothing by default
+  }
+  protected void consumeExplicitConstructorInvocation(int flag, int recFlag) {
+
+    /* flag allows to distinguish 3 cases :
+    (0) :   
+    ExplicitConstructorInvocation ::= 'this' '(' ArgumentListopt ')' ';'
+    ExplicitConstructorInvocation ::= 'super' '(' ArgumentListopt ')' ';'
+    (1) :
+    ExplicitConstructorInvocation ::= Primary '.' 'super' '(' ArgumentListopt ')' ';'
+    ExplicitConstructorInvocation ::= Primary '.' 'this' '(' ArgumentListopt ')' ';'
+    (2) :
+    ExplicitConstructorInvocation ::= Name '.' 'super' '(' ArgumentListopt ')' ';'
+    ExplicitConstructorInvocation ::= Name '.' 'this' '(' ArgumentListopt ')' ';'
+    */
+    int startPosition = intStack[intPtr--];
+    ExplicitConstructorCall ecc = new ExplicitConstructorCall(recFlag);
+    int length;
+    if ((length = expressionLengthStack[expressionLengthPtr--]) != 0) {
+      expressionPtr -= length;
+      System.arraycopy(expressionStack, expressionPtr + 1, ecc.arguments = new Expression[length], 0, length);
+    }
+    switch (flag) {
+      case 0 :
+        ecc.sourceStart = startPosition;
+        break;
+      case 1 :
+        expressionLengthPtr--;
+        ecc.sourceStart = (ecc.qualification = expressionStack[expressionPtr--]).sourceStart;
+        break;
+      case 2 :
+        ecc.sourceStart = (ecc.qualification = getUnspecifiedReferenceOptimized()).sourceStart;
+        break;
     };
-    
-       public  static short check_table[] = null;
-       public  static char lhs[] =  null;
-       public  static char action[] = lhs;
-       private final static String FILEPREFIX = "parser"; //$NON-NLS-1$
-
-       static {
-               try{
-                       initTables();
-               } catch(java.io.IOException ex){
-                       throw new ExceptionInInitializerError(ex.getMessage());
-               }
-       }
-
-       public static final int RoundBracket = 0;
-       public static final int SquareBracket = 1;
-       public static final int CurlyBracket = 2;
-       public static final int BracketKinds = 3;
-
-public Parser(ProblemReporter problemReporter, boolean optimizeStringLiterals, boolean assertMode) {
-               
-       this.problemReporter = problemReporter;
-       this.optimizeStringLiterals = optimizeStringLiterals;
-       this.assertMode = assertMode;
-       this.initializeScanner();
-       astLengthStack = new int[50];
-       expressionLengthStack = new int[30];
-       intStack = new int[50];
-       identifierStack = new char[30][];
-       identifierLengthStack = new int[30];
-       nestedMethod = new int[30];
-       realBlockStack = new int[30];
-       identifierPositionStack = new long[30];
-       variablesCounter = new int[30];
-}
-/**
- *
- * INTERNAL USE-ONLY
- */
-protected void adjustInterfaceModifiers() {
-       intStack[intPtr - 1] |= AccInterface;
-}
-public final void arrayInitializer(int length) {
-       //length is the size of the array Initializer
-       //expressionPtr points on the last elt of the arrayInitializer
-       //i.e. it has not been decremented yet.
-
-       ArrayInitializer ai = new ArrayInitializer();
-       if (length != 0) {
-               expressionPtr -= length;
-               System.arraycopy(expressionStack, expressionPtr + 1, ai.expressions = new Expression[length], 0, length);
-       }
-       pushOnExpressionStack(ai);
-       //positionning
-       ai.sourceEnd = endStatementPosition;
-       int searchPosition = length == 0 ? endPosition : ai.expressions[0].sourceStart;
-       try {
-               //does not work with comments(that contain '{') nor '{' describes as a unicode....              
-               while (scanner.source[--searchPosition] != '{') {
-               }
-       } catch (IndexOutOfBoundsException ex) {
-               //should never occur (except for strange cases like whose describe above)
-               searchPosition = (length == 0 ? endPosition : ai.expressions[0].sourceStart) - 1;
-       }
-       ai.sourceStart = searchPosition;
-}
-protected static int asi(int state) {
+    pushOnAstStack(ecc);
+    ecc.sourceEnd = endPosition;
+  }
+  protected void consumeExpressionStatement() {
+    // ExpressionStatement ::= StatementExpression ';'
+    expressionLengthPtr--;
+    pushOnAstStack(expressionStack[expressionPtr--]);
+  }
+  protected void consumeFieldAccess(boolean isSuperAccess) {
+    // FieldAccess ::= Primary '.' 'Identifier'
+    // FieldAccess ::= 'super' '.' 'Identifier'
+
+    FieldReference fr = new FieldReference(identifierStack[identifierPtr], identifierPositionStack[identifierPtr--]);
+    identifierLengthPtr--;
+    if (isSuperAccess) {
+      //considerates the fieldReference beginning at the 'super' ....  
+      fr.sourceStart = intStack[intPtr--];
+      fr.receiver = new SuperReference(fr.sourceStart, endPosition);
+      pushOnExpressionStack(fr);
+    } else {
+      //optimize push/pop
+      if ((fr.receiver = expressionStack[expressionPtr]).isThis()) {
+        //fieldreference begins at the this
+        fr.sourceStart = fr.receiver.sourceStart;
+      }
+      expressionStack[expressionPtr] = fr;
+    }
+  }
+  protected void consumeFieldDeclaration() {
+    // See consumeLocalVariableDeclarationDefaultModifier() in case of change: duplicated code
+    // FieldDeclaration ::= Modifiersopt Type VariableDeclarators ';'
+
+    /*
+    astStack : 
+    expressionStack: Expression Expression ...... Expression
+    identifierStack : type  identifier identifier ...... identifier
+    intStack : typeDim      dim        dim               dim
+     ==>
+    astStack : FieldDeclaration FieldDeclaration ...... FieldDeclaration
+    expressionStack :
+    identifierStack : 
+    intStack : 
+      
+    */
+    int variableDeclaratorsCounter = astLengthStack[astLengthPtr];
+
+    for (int i = variableDeclaratorsCounter - 1; i >= 0; i--) {
+      FieldDeclaration fieldDeclaration = (FieldDeclaration) astStack[astPtr - i];
+      fieldDeclaration.declarationSourceEnd = endStatementPosition;
+      fieldDeclaration.declarationEnd = endStatementPosition; // semi-colon included
+    }
+    updateSourceDeclarationParts(variableDeclaratorsCounter);
+    int endPos = flushAnnotationsDefinedPriorTo(endStatementPosition);
+    if (endPos != endStatementPosition) {
+      for (int i = 0; i < variableDeclaratorsCounter; i++) {
+        FieldDeclaration fieldDeclaration = (FieldDeclaration) astStack[astPtr - i];
+        fieldDeclaration.declarationSourceEnd = endPos;
+      }
+    }
+    // update the astStack, astPtr and astLengthStack
+    int startIndex = astPtr - variablesCounter[nestedType] + 1;
+    System.arraycopy(astStack, startIndex, astStack, startIndex - 1, variableDeclaratorsCounter);
+    astPtr--; // remove the type reference
+    astLengthStack[--astLengthPtr] = variableDeclaratorsCounter;
+
+    // recovery
+    if (currentElement != null) {
+      lastCheckPoint = endPos + 1;
+      if (currentElement.parent != null && currentElement instanceof RecoveredField) {
+        currentElement = currentElement.parent;
+      }
+      restartRecovery = true;
+    }
+    variablesCounter[nestedType] = 0;
+  }
+  protected void consumeForceNoDiet() {
+    // ForceNoDiet ::= $empty
+    dietInt++;
+  }
+  protected void consumeForInit() {
+    // ForInit ::= StatementExpressionList
+    pushOnAstLengthStack(-1);
+  }
+  protected void consumeFormalParameter() {
+    // FormalParameter ::= Type VariableDeclaratorId ==> false
+    // FormalParameter ::= Modifiers Type VariableDeclaratorId ==> true
+    /*
+    astStack : 
+    identifierStack : type identifier
+    intStack : dim dim
+     ==>
+    astStack : Argument
+    identifierStack :  
+    intStack :  
+    */
+
+    identifierLengthPtr--;
+    char[] name = identifierStack[identifierPtr];
+    long namePositions = identifierPositionStack[identifierPtr--];
+    TypeReference type = getTypeReference(intStack[intPtr--] + intStack[intPtr--]);
+    int modifierPositions = intStack[intPtr--];
+    intPtr--;
+    Argument arg = new Argument(name, namePositions, type, intStack[intPtr + 1] & ~AccDeprecated); // modifiers
+    arg.declarationSourceStart = modifierPositions;
+    pushOnAstStack(arg);
+
+    /* if incomplete method header, listLength counter will not have been reset,
+       indicating that some arguments are available on the stack */
+    listLength++;
+  }
+  protected void consumeFormalParameterList() {
+    // FormalParameterList ::= FormalParameterList ',' FormalParameter
+    optimizedConcatNodeLists();
+  }
+  protected void consumeFormalParameterListopt() {
+    // FormalParameterListopt ::= $empty
+    pushOnAstLengthStack(0);
+  }
+  protected void consumeImportDeclarations() {
+    // ImportDeclarations ::= ImportDeclarations ImportDeclaration 
+    optimizedConcatNodeLists();
+  }
+  protected void consumeImportDeclarationsopt() {
+    // ImportDeclarationsopt ::= ImportDeclarations
+    int length;
+    if ((length = astLengthStack[astLengthPtr--]) != 0) {
+      astPtr -= length;
+      System.arraycopy(astStack, astPtr + 1, compilationUnit.imports = new ImportReference[length], 0, length);
+    }
+  }
+  protected void consumeInstanceOfExpression(int op) {
+    // RelationalExpression ::= RelationalExpression 'instanceof' ReferenceType
+    //optimize the push/pop
+
+    //by construction, no base type may be used in getTypeReference
+    Expression exp;
+    expressionStack[expressionPtr] =
+      exp = new InstanceOfExpression(expressionStack[expressionPtr], getTypeReference(intStack[intPtr--]), op);
+    if (exp.sourceEnd == 0) {
+      //array on base type....
+      exp.sourceEnd = scanner.startPosition - 1;
+    }
+    //the scanner is on the next token already....
+  }
+  protected void consumeInterfaceDeclaration() {
+    // see consumeClassDeclaration in case of changes: duplicated code
+    // InterfaceDeclaration ::= InterfaceHeader InterfaceBody
+    int length;
+    if ((length = astLengthStack[astLengthPtr--]) != 0) {
+      //there are length declarations
+      //dispatch.....according to the type of the declarations
+      dispatchDeclarationInto(length);
+    }
+
+    TypeDeclaration typeDecl = (TypeDeclaration) astStack[astPtr];
+
+    // mark fields and initializer with local type mark if needed
+    markFieldsWithLocalType(typeDecl);
+
+    //convert constructor that do not have the type's name into methods
+    typeDecl.checkConstructors(this);
+
+    //always add <clinit> (will be remove at code gen time if empty)
+    if (this.scanner.containsAssertKeyword) {
+      typeDecl.bits |= AstNode.AddAssertionMASK;
+    }
+    typeDecl.addClinit();
+    typeDecl.bodyEnd = endStatementPosition;
+    typeDecl.declarationSourceEnd = flushAnnotationsDefinedPriorTo(endStatementPosition);
+  }
+  protected void consumeInterfaceHeader() {
+    // InterfaceHeader ::= InterfaceHeaderName InterfaceHeaderExtendsopt
+
+    TypeDeclaration typeDecl = (TypeDeclaration) astStack[astPtr];
+    if (currentToken == TokenNameLBRACE) {
+      typeDecl.bodyStart = scanner.currentPosition;
+    }
+    if (currentElement != null) {
+      restartRecovery = true; // used to avoid branching back into the regular automaton               
+    }
+    // flush the comments related to the interface header
+    scanner.commentPtr = -1;
+  }
+  protected void consumeInterfaceHeaderExtends() {
+    // InterfaceHeaderExtends ::= 'extends' InterfaceTypeList
+    int length = astLengthStack[astLengthPtr--];
+    //super interfaces
+    astPtr -= length;
+    TypeDeclaration typeDecl = (TypeDeclaration) astStack[astPtr];
+    System.arraycopy(astStack, astPtr + 1, typeDecl.superInterfaces = new TypeReference[length], 0, length);
+    typeDecl.bodyStart = typeDecl.superInterfaces[length - 1].sourceEnd + 1;
+    listLength = 0; // reset after having read super-interfaces                
+    // recovery
+    if (currentElement != null) {
+      lastCheckPoint = typeDecl.bodyStart;
+    }
+  }
+  protected void consumeInterfaceHeaderName() {
+    // InterfaceHeaderName ::= Modifiersopt 'interface' 'Identifier'
+    TypeDeclaration typeDecl;
+    if (nestedMethod[nestedType] == 0) {
+      if (nestedType != 0) {
+        typeDecl = new MemberTypeDeclaration(this.compilationUnit.compilationResult);
+      } else {
+        typeDecl = new TypeDeclaration(this.compilationUnit.compilationResult);
+      }
+    } else {
+      // Record that the block has a declaration for local types
+      typeDecl = new LocalTypeDeclaration(this.compilationUnit.compilationResult);
+      markCurrentMethodWithLocalType();
+      blockReal();
+    }
+
+    //highlight the name of the type
+    long pos = identifierPositionStack[identifierPtr];
+    typeDecl.sourceEnd = (int) pos;
+    typeDecl.sourceStart = (int) (pos >>> 32);
+    typeDecl.name = identifierStack[identifierPtr--];
+    identifierLengthPtr--;
+
+    //compute the declaration source too
+    // 'class' and 'interface' push two int positions: the beginning of the class token and its end.
+    // we want to keep the beginning position but get rid of the end position
+    // it is only used for the ClassLiteralAccess positions.
+    typeDecl.declarationSourceStart = intStack[intPtr--];
+    intPtr--; // remove the end position of the class token
+    typeDecl.modifiersSourceStart = intStack[intPtr--];
+    typeDecl.modifiers = intStack[intPtr--];
+    if (typeDecl.modifiersSourceStart >= 0) {
+      typeDecl.declarationSourceStart = typeDecl.modifiersSourceStart;
+    }
+    typeDecl.bodyStart = typeDecl.sourceEnd + 1;
+    pushOnAstStack(typeDecl);
+    listLength = 0; // will be updated when reading super-interfaces
+    // recovery
+    if (currentElement != null) { // is recovering
+      lastCheckPoint = typeDecl.bodyStart;
+      currentElement = currentElement.add(typeDecl, 0);
+      lastIgnoredToken = -1;
+    }
+  }
+  protected void consumeInterfaceMemberDeclarations() {
+    // InterfaceMemberDeclarations ::= InterfaceMemberDeclarations InterfaceMemberDeclaration
+    concatNodeLists();
+  }
+  protected void consumeInterfaceMemberDeclarationsopt() {
+    // InterfaceMemberDeclarationsopt ::= NestedType InterfaceMemberDeclarations
+    nestedType--;
+  }
+  protected void consumeInterfaceType() {
+    // InterfaceType ::= ClassOrInterfaceType
+    pushOnAstStack(getTypeReference(0));
+    /* if incomplete type header, listLength counter will not have been reset,
+       indicating that some interfaces are available on the stack */
+    listLength++;
+  }
+  protected void consumeInterfaceTypeList() {
+    // InterfaceTypeList ::= InterfaceTypeList ',' InterfaceType
+    optimizedConcatNodeLists();
+  }
+  protected void consumeLeftHandSide() {
+    // LeftHandSide ::= Name
+
+    pushOnExpressionStack(getUnspecifiedReferenceOptimized());
+  }
+  protected void consumeLeftParen() {
+    // PushLPAREN ::= '('
+    pushOnIntStack(lParenPos);
+  }
+  protected void consumeLocalVariableDeclaration() {
+    // LocalVariableDeclaration ::= Modifiers Type VariableDeclarators ';'
+
+    /*
+    astStack : 
+    expressionStack: Expression Expression ...... Expression
+    identifierStack : type  identifier identifier ...... identifier
+    intStack : typeDim      dim        dim               dim
+     ==>
+    astStack : FieldDeclaration FieldDeclaration ...... FieldDeclaration
+    expressionStack :
+    identifierStack : 
+    intStack : 
+      
+    */
+    int variableDeclaratorsCounter = astLengthStack[astLengthPtr];
+
+    // update the astStack, astPtr and astLengthStack
+    int startIndex = astPtr - variablesCounter[nestedType] + 1;
+    System.arraycopy(astStack, startIndex, astStack, startIndex - 1, variableDeclaratorsCounter);
+    astPtr--; // remove the type reference
+    astLengthStack[--astLengthPtr] = variableDeclaratorsCounter;
+    variablesCounter[nestedType] = 0;
+  }
+  protected void consumeLocalVariableDeclarationStatement() {
+    // LocalVariableDeclarationStatement ::= LocalVariableDeclaration ';'
+    // see blockReal in case of change: duplicated code
+    // increment the amount of declared variables for this block
+    realBlockStack[realBlockPtr]++;
+  }
+  protected void consumeMethodBody() {
+    // MethodBody ::= NestedMethod '{' BlockStatementsopt '}' 
+    nestedMethod[nestedType]--;
+  }
+  protected void consumeMethodDeclaration(boolean isNotAbstract) {
+    // MethodDeclaration ::= MethodHeader MethodBody
+    // AbstractMethodDeclaration ::= MethodHeader ';'
+
+    /*
+    astStack : modifiers arguments throws statements
+    identifierStack : type name
+    intStack : dim dim dim
+     ==>
+    astStack : MethodDeclaration
+    identifierStack :
+    intStack : 
+    */
+
+    int length;
+    if (isNotAbstract) {
+      // pop the position of the {  (body of the method) pushed in block decl
+      intPtr--;
+    }
+
+    int explicitDeclarations = 0;
+    Statement[] statements = null;
+    if (isNotAbstract) {
+      //statements
+      explicitDeclarations = realBlockStack[realBlockPtr--];
+      if ((length = astLengthStack[astLengthPtr--]) != 0)
+        System.arraycopy(astStack, (astPtr -= length) + 1, statements = new Statement[length], 0, length);
+    }
+
+    // now we know that we have a method declaration at the top of the ast stack
+    MethodDeclaration md = (MethodDeclaration) astStack[astPtr];
+    md.statements = statements;
+    md.explicitDeclarations = explicitDeclarations;
+
+    // cannot be done in consumeMethodHeader because we have no idea whether or not there
+    // is a body when we reduce the method header
+    if (!isNotAbstract) { //remember the fact that the method has a semicolon body
+      md.modifiers |= AccSemicolonBody;
+    }
+    // store the endPosition (position just before the '}') in case there is
+    // a trailing comment behind the end of the method
+    md.bodyEnd = endPosition;
+    md.declarationSourceEnd = flushAnnotationsDefinedPriorTo(endStatementPosition);
+  }
+  protected void consumeMethodHeader() {
+    // MethodHeader ::= MethodHeaderName MethodHeaderParameters MethodHeaderExtendedDims ThrowsClauseopt
+    // retrieve end position of method declarator
+    AbstractMethodDeclaration method = (AbstractMethodDeclaration) astStack[astPtr];
+
+    if (currentToken == TokenNameLBRACE) {
+      method.bodyStart = scanner.currentPosition;
+    }
+    // recovery
+    if (currentElement != null) {
+      if (currentToken == TokenNameSEMICOLON) {
+        method.modifiers |= AccSemicolonBody;
+        method.declarationSourceEnd = scanner.currentPosition - 1;
+        method.bodyEnd = scanner.currentPosition - 1;
+        if (currentElement.parent != null) {
+          currentElement = currentElement.parent;
+        }
+      }
+      restartRecovery = true; // used to avoid branching back into the regular automaton
+    }
+  }
+  protected void consumeMethodHeaderExtendedDims() {
+    // MethodHeaderExtendedDims ::= Dimsopt
+    // now we update the returnType of the method
+    MethodDeclaration md = (MethodDeclaration) astStack[astPtr];
+    int extendedDims = intStack[intPtr--];
+    if (extendedDims != 0) {
+      TypeReference returnType = md.returnType;
+      md.sourceEnd = endPosition;
+      int dims = returnType.dimensions() + extendedDims;
+      int baseType;
+      if ((baseType = identifierLengthStack[identifierLengthPtr + 1]) < 0) {
+        //it was a baseType
+        int sourceStart = returnType.sourceStart;
+        int sourceEnd = returnType.sourceEnd;
+        returnType = TypeReference.baseTypeReference(-baseType, dims);
+        returnType.sourceStart = sourceStart;
+        returnType.sourceEnd = sourceEnd;
+        md.returnType = returnType;
+      } else {
+        md.returnType = this.copyDims(md.returnType, dims);
+      }
+      if (currentToken == TokenNameLBRACE) {
+        md.bodyStart = endPosition + 1;
+      }
+      // recovery
+      if (currentElement != null) {
+        lastCheckPoint = md.bodyStart;
+      }
+    }
+  }
+  protected void consumeMethodHeaderName() {
+    // MethodHeaderName ::= Modifiersopt Type 'Identifier' '('
+    MethodDeclaration md = new MethodDeclaration(this.compilationUnit.compilationResult);
+
+    //name
+    md.selector = identifierStack[identifierPtr];
+    long selectorSource = identifierPositionStack[identifierPtr--];
+    identifierLengthPtr--;
+    //type
+    md.returnType = getTypeReference(intStack[intPtr--]);
+    //modifiers
+    md.declarationSourceStart = intStack[intPtr--];
+    md.modifiers = intStack[intPtr--];
+
+    //highlight starts at selector start
+    md.sourceStart = (int) (selectorSource >>> 32);
+    pushOnAstStack(md);
+    md.sourceEnd = lParenPos;
+    md.bodyStart = lParenPos + 1;
+    listLength = 0; // initialize listLength before reading parameters/throws
+
+    // recovery
+    if (currentElement != null) {
+      if (currentElement instanceof RecoveredType //|| md.modifiers != 0
+        || (scanner.getLineNumber(md.returnType.sourceStart) == scanner.getLineNumber(md.sourceStart))) {
+        lastCheckPoint = md.bodyStart;
+        currentElement = currentElement.add(md, 0);
+        lastIgnoredToken = -1;
+      } else {
+        lastCheckPoint = md.sourceStart;
+        restartRecovery = true;
+      }
+    }
+  }
+  protected void consumeMethodHeaderParameters() {
+    // MethodHeaderParameters ::= FormalParameterListopt ')'
+    int length = astLengthStack[astLengthPtr--];
+    astPtr -= length;
+    AbstractMethodDeclaration md = (AbstractMethodDeclaration) astStack[astPtr];
+    md.sourceEnd = rParenPos;
+    //arguments
+    if (length != 0) {
+      System.arraycopy(astStack, astPtr + 1, md.arguments = new Argument[length], 0, length);
+    }
+    md.bodyStart = rParenPos + 1;
+    listLength = 0; // reset listLength after having read all parameters
+    // recovery
+    if (currentElement != null) {
+      lastCheckPoint = md.bodyStart;
+      if (currentElement.parseTree() == md)
+        return;
+
+      // might not have been attached yet - in some constructor scenarii
+      if (md.isConstructor()) {
+        if ((length != 0) || (currentToken == TokenNameLBRACE) // || (currentToken == TokenNamethrows)
+        ) {
+          currentElement = currentElement.add(md, 0);
+          lastIgnoredToken = -1;
+        }
+      }
+    }
+  }
+  protected void consumeMethodHeaderThrowsClause() {
+    // MethodHeaderThrowsClause ::= 'throws' ClassTypeList
+    int length = astLengthStack[astLengthPtr--];
+    astPtr -= length;
+    AbstractMethodDeclaration md = (AbstractMethodDeclaration) astStack[astPtr];
+    System.arraycopy(astStack, astPtr + 1, md.thrownExceptions = new TypeReference[length], 0, length);
+    md.sourceEnd = md.thrownExceptions[length - 1].sourceEnd;
+    md.bodyStart = md.thrownExceptions[length - 1].sourceEnd + 1;
+    listLength = 0; // reset listLength after having read all thrown exceptions        
+    // recovery
+    if (currentElement != null) {
+      lastCheckPoint = md.bodyStart;
+    }
+  }
+  protected void consumeMethodInvocationName() {
+    // MethodInvocation ::= Name '(' ArgumentListopt ')'
+
+    // when the name is only an identifier...we have a message send to "this" (implicit)
+
+    MessageSend m = newMessageSend();
+    m.sourceEnd = rParenPos;
+    m.sourceStart = (int) ((m.nameSourcePosition = identifierPositionStack[identifierPtr]) >>> 32);
+    m.selector = identifierStack[identifierPtr--];
+    if (identifierLengthStack[identifierLengthPtr] == 1) {
+      m.receiver = ThisReference.ThisImplicit;
+      identifierLengthPtr--;
+    } else {
+      identifierLengthStack[identifierLengthPtr]--;
+      m.receiver = getUnspecifiedReference();
+      m.sourceStart = m.receiver.sourceStart;
+    }
+    pushOnExpressionStack(m);
+  }
+  protected void consumeMethodInvocationPrimary() {
+    //optimize the push/pop
+    //MethodInvocation ::= Primary '.' 'Identifier' '(' ArgumentListopt ')'
+
+    MessageSend m = newMessageSend();
+    m.sourceStart = (int) ((m.nameSourcePosition = identifierPositionStack[identifierPtr]) >>> 32);
+    m.selector = identifierStack[identifierPtr--];
+    identifierLengthPtr--;
+    m.receiver = expressionStack[expressionPtr];
+    m.sourceStart = m.receiver.sourceStart;
+    m.sourceEnd = rParenPos;
+    expressionStack[expressionPtr] = m;
+  }
+  protected void consumeMethodInvocationSuper() {
+    // MethodInvocation ::= 'super' '.' 'Identifier' '(' ArgumentListopt ')'
+
+    MessageSend m = newMessageSend();
+    m.sourceStart = intStack[intPtr--];
+    m.sourceEnd = rParenPos;
+    m.nameSourcePosition = identifierPositionStack[identifierPtr];
+    m.selector = identifierStack[identifierPtr--];
+    identifierLengthPtr--;
+    m.receiver = new SuperReference(m.sourceStart, endPosition);
+    pushOnExpressionStack(m);
+  }
+  protected void consumeMethodPushModifiersHeaderName() {
+    // MethodPushModifiersHeaderName ::= Modifiers Type PushModifiers 'Identifier' '('
+    // MethodPushModifiersHeaderName ::= Type PushModifiers 'Identifier' '(' 
+    MethodDeclaration md = new MethodDeclaration(this.compilationUnit.compilationResult);
+
+    //name
+    md.selector = identifierStack[identifierPtr];
+    long selectorSource = identifierPositionStack[identifierPtr--];
+    identifierLengthPtr--;
+
+    //modifiers
+    md.declarationSourceStart = intStack[intPtr--];
+    md.modifiers = intStack[intPtr--];
+
+    //type
+    md.returnType = getTypeReference(intStack[intPtr--]);
+
+    //highlight starts at selector start
+    md.sourceStart = (int) (selectorSource >>> 32);
+    pushOnAstStack(md);
+    md.sourceEnd = lParenPos;
+    md.bodyStart = lParenPos + 1;
+    listLength = 0; // initialize listLength before reading parameters/throws
+
+    // recovery
+    if (currentElement != null) {
+      lastCheckPoint = md.bodyStart;
+      currentElement = currentElement.add(md, 0);
+      lastIgnoredToken = -1;
+    }
+  }
+  protected void consumeModifiers() {
+    int savedModifiersSourceStart = modifiersSourceStart;
+    checkAnnotation(); // might update modifiers with AccDeprecated
+    pushOnIntStack(modifiers); // modifiers
+    if (modifiersSourceStart >= savedModifiersSourceStart) {
+      modifiersSourceStart = savedModifiersSourceStart;
+    }
+    pushOnIntStack(modifiersSourceStart);
+    resetModifiers();
+  }
+  protected void consumeNestedMethod() {
+    // NestedMethod ::= $empty
+    jumpOverMethodBody();
+    nestedMethod[nestedType]++;
+    consumeOpenBlock();
+  }
+  protected void consumeNestedType() {
+    // NestedType ::= $empty
+    nestedType++;
+    try {
+      nestedMethod[nestedType] = 0;
+    } catch (IndexOutOfBoundsException e) {
+      //except in test's cases, it should never raise
+      int oldL = nestedMethod.length;
+      System.arraycopy(nestedMethod, 0, (nestedMethod = new int[oldL + 30]), 0, oldL);
+      nestedMethod[nestedType] = 0;
+      // increase the size of the fieldsCounter as well. It has to be consistent with the size of the nestedMethod collection
+      System.arraycopy(variablesCounter, 0, (variablesCounter = new int[oldL + 30]), 0, oldL);
+    }
+    variablesCounter[nestedType] = 0;
+  }
+  protected void consumeOneDimLoop() {
+    // OneDimLoop ::= '[' ']'
+    dimensions++;
+  }
+  protected void consumeOnlySynchronized() {
+    // OnlySynchronized ::= 'synchronized'
+    pushOnIntStack(this.synchronizedBlockSourceStart);
+    resetModifiers();
+  }
+  protected void consumeOpenBlock() {
+    // OpenBlock ::= $empty
+
+    pushOnIntStack(scanner.startPosition);
+    try {
+      realBlockStack[++realBlockPtr] = 0;
+    } catch (IndexOutOfBoundsException e) {
+      //realBlockPtr is correct 
+      int oldStackLength = realBlockStack.length;
+      int oldStack[] = realBlockStack;
+      realBlockStack = new int[oldStackLength + StackIncrement];
+      System.arraycopy(oldStack, 0, realBlockStack, 0, oldStackLength);
+      realBlockStack[realBlockPtr] = 0;
+    }
+  }
+  protected void consumePackageDeclaration() {
+    // PackageDeclaration ::= 'package' Name ';'
+    /* build an ImportRef build from the last name 
+    stored in the identifier stack. */
+
+    ImportReference impt = compilationUnit.currentPackage;
+    // flush annotations defined prior to import statements
+    impt.declarationEnd = endStatementPosition;
+    impt.declarationSourceEnd = this.flushAnnotationsDefinedPriorTo(impt.declarationSourceEnd);
+  }
+  protected void consumePackageDeclarationName() {
+    // PackageDeclarationName ::= 'package' Name
+    /* build an ImportRef build from the last name 
+    stored in the identifier stack. */
+
+    ImportReference impt;
+    int length;
+    char[][] tokens = new char[length = identifierLengthStack[identifierLengthPtr--]][];
+    identifierPtr -= length;
+    long[] positions = new long[length];
+    System.arraycopy(identifierStack, ++identifierPtr, tokens, 0, length);
+    System.arraycopy(identifierPositionStack, identifierPtr--, positions, 0, length);
+    compilationUnit.currentPackage = impt = new ImportReference(tokens, positions, true);
+
+    if (currentToken == TokenNameSEMICOLON) {
+      impt.declarationSourceEnd = scanner.currentPosition - 1;
+    } else {
+      impt.declarationSourceEnd = impt.sourceEnd;
+    }
+    impt.declarationEnd = impt.declarationSourceEnd;
+    //endPosition is just before the ;
+    impt.declarationSourceStart = intStack[intPtr--];
+
+    // recovery
+    if (currentElement != null) {
+      lastCheckPoint = impt.declarationSourceEnd + 1;
+      restartRecovery = true; // used to avoid branching back into the regular automaton               
+    }
+  }
+  protected void consumePostfixExpression() {
+    // PostfixExpression ::= Name
+    pushOnExpressionStack(getUnspecifiedReferenceOptimized());
+  }
+  protected void consumePrimaryNoNewArray() {
+    // PrimaryNoNewArray ::=  PushLPAREN Expression PushRPAREN 
+    updateSourcePosition(expressionStack[expressionPtr]);
+  }
+  protected void consumePrimaryNoNewArrayArrayType() {
+    // PrimaryNoNewArray ::= ArrayType '.' 'class'
+    intPtr--;
+    pushOnExpressionStack(new ClassLiteralAccess(intStack[intPtr--], getTypeReference(intStack[intPtr--])));
+  }
+  protected void consumePrimaryNoNewArrayName() {
+    // PrimaryNoNewArray ::= Name '.' 'class'
+    intPtr--;
+    pushOnExpressionStack(new ClassLiteralAccess(intStack[intPtr--], getTypeReference(0)));
+  }
+  protected void consumePrimaryNoNewArrayNameSuper() {
+    // PrimaryNoNewArray ::= Name '.' 'super'
+    pushOnExpressionStack(new QualifiedSuperReference(getTypeReference(0), intStack[intPtr--], endPosition));
+  }
+  protected void consumePrimaryNoNewArrayNameThis() {
+    // PrimaryNoNewArray ::= Name '.' 'this'
+    pushOnExpressionStack(new QualifiedThisReference(getTypeReference(0), intStack[intPtr--], endPosition));
+  }
+  protected void consumePrimaryNoNewArrayPrimitiveType() {
+    // PrimaryNoNewArray ::= PrimitiveType '.' 'class'
+    intPtr--;
+    pushOnExpressionStack(new ClassLiteralAccess(intStack[intPtr--], getTypeReference(0)));
+  }
+  protected void consumePrimaryNoNewArrayThis() {
+    // PrimaryNoNewArray ::= 'this'
+    pushOnExpressionStack(new ThisReference(intStack[intPtr--], endPosition));
+  }
+  protected void consumePrimitiveType() {
+    // Type ::= PrimitiveType
+    pushOnIntStack(0);
+  }
+  protected void consumePushModifiers() {
+    if ((modifiers & AccSynchronized) != 0) {
+      /* remove the starting position of the synchronized keyword
+       * we don't need it when synchronized is part of the modifiers
+       */
+      intPtr--;
+    }
+    pushOnIntStack(modifiers); // modifiers
+    pushOnIntStack(modifiersSourceStart);
+    resetModifiers();
+  }
+  protected void consumePushPosition() {
+    // for source managment purpose
+    // PushPosition ::= $empty
+    pushOnIntStack(endPosition);
+  }
+  protected void consumeQualifiedName() {
+    // QualifiedName ::= Name '.' SimpleName 
+    /*back from the recursive loop of QualifiedName.
+    Updates identifier length into the length stack*/
+
+    identifierLengthStack[--identifierLengthPtr]++;
+  }
+  protected void consumeReferenceType() {
+    // ReferenceType ::= ClassOrInterfaceType
+    pushOnIntStack(0);
+  }
+  protected void consumeRestoreDiet() {
+    // RestoreDiet ::= $empty
+    dietInt--;
+  }
+  protected void consumeRightParen() {
+    // PushRPAREN ::= ')'
+    pushOnIntStack(rParenPos);
+  }
+  // This method is part of an automatic generation : do NOT edit-modify  
+  // This method is part of an automatic generation : do NOT edit-modify  
+  protected void consumeRule(int act) {
+    switch (act) {
+      case 29 : // System.out.println("Type ::= PrimitiveType");
+        consumePrimitiveType();
+        break;
+
+      case 43 : // System.out.println("ReferenceType ::= ClassOrInterfaceType");
+        consumeReferenceType();
+        break;
+
+      case 52 : // System.out.println("QualifiedName ::= Name DOT SimpleName");
+        consumeQualifiedName();
+        break;
+
+      case 53 : // System.out.println("CompilationUnit ::= EnterCompilationUnit PackageDeclarationopt ImportDeclarationsopt");
+        consumeCompilationUnit();
+        break;
+
+      case 54 : // System.out.println("EnterCompilationUnit ::=");
+        consumeEnterCompilationUnit();
+        break;
+
+      case 66 : // System.out.println("CatchHeader ::= catch LPAREN FormalParameter RPAREN LBRACE");
+        consumeCatchHeader();
+        break;
+
+      case 68 : // System.out.println("ImportDeclarations ::= ImportDeclarations ImportDeclaration");
+        consumeImportDeclarations();
+        break;
+
+      case 70 : // System.out.println("TypeDeclarations ::= TypeDeclarations TypeDeclaration");
+        consumeTypeDeclarations();
+        break;
+
+      case 71 : // System.out.println("PackageDeclaration ::= PackageDeclarationName SEMICOLON");
+        consumePackageDeclaration();
+        break;
+
+      case 72 : // System.out.println("PackageDeclarationName ::= package Name");
+        consumePackageDeclarationName();
+        break;
+
+      case 75 : // System.out.println("SingleTypeImportDeclaration ::= SingleTypeImportDeclarationName SEMICOLON");
+        consumeSingleTypeImportDeclaration();
+        break;
+
+      case 76 : // System.out.println("SingleTypeImportDeclarationName ::= import Name");
+        consumeSingleTypeImportDeclarationName();
+        break;
+
+      case 77 : // System.out.println("TypeImportOnDemandDeclaration ::= TypeImportOnDemandDeclarationName SEMICOLON");
+        consumeTypeImportOnDemandDeclaration();
+        break;
+
+      case 78 : // System.out.println("TypeImportOnDemandDeclarationName ::= import Name DOT MULTIPLY");
+        consumeTypeImportOnDemandDeclarationName();
+        break;
+
+      case 81 : // System.out.println("TypeDeclaration ::= SEMICOLON");
+        consumeEmptyTypeDeclaration();
+        break;
+
+      case 95 : // System.out.println("ClassDeclaration ::= ClassHeader ClassBody");
+        consumeClassDeclaration();
+        break;
+
+      case 96 : // System.out.println("ClassHeader ::= ClassHeaderName ClassHeaderExtendsopt ClassHeaderImplementsopt");
+        consumeClassHeader();
+        break;
+
+      case 97 : // System.out.println("ClassHeaderName ::= Modifiersopt class Identifier");
+        consumeClassHeaderName();
+        break;
+
+      case 98 : // System.out.println("ClassHeaderExtends ::= extends ClassType");
+        consumeClassHeaderExtends();
+        break;
+
+      case 99 : // System.out.println("ClassHeaderImplements ::= implements InterfaceTypeList");
+        consumeClassHeaderImplements();
+        break;
+
+      case 101 : // System.out.println("InterfaceTypeList ::= InterfaceTypeList COMMA InterfaceType");
+        consumeInterfaceTypeList();
+        break;
+
+      case 102 : // System.out.println("InterfaceType ::= ClassOrInterfaceType");
+        consumeInterfaceType();
+        break;
+
+      case 105 : // System.out.println("ClassBodyDeclarations ::= ClassBodyDeclarations ClassBodyDeclaration");
+        consumeClassBodyDeclarations();
+        break;
+
+      case 109 : // System.out.println("ClassBodyDeclaration ::= Diet NestedMethod Block");
+        consumeClassBodyDeclaration();
+        break;
+
+      case 110 : // System.out.println("Diet ::=");
+        consumeDiet();
+        break;
+
+      case 111 : // System.out.println("Initializer ::= Diet NestedMethod Block");
+        consumeClassBodyDeclaration();
+        break;
 
-       return asb[original_state(state)];
-}
-protected void blockReal() {
-       // See consumeLocalVariableDeclarationStatement in case of change: duplicated code
-       // increment the amount of declared variables for this block
-       realBlockStack[realBlockPtr]++;
-}
-private final static void buildFileFor(String filename, String tag, String[] tokens, boolean isShort) throws java.io.IOException {
-
-       //transform the String tokens into chars before dumping then into file
-
-       int i = 0;
-       //read upto the tag
-       while (!tokens[i++].equals(tag)) {}
-       //read upto the }
-       char[] chars = new char[tokens.length]; //can't be bigger
-       int ic = 0;
-       String token;
-       while (!(token = tokens[i++]).equals("}")) { //$NON-NLS-1$
-               int c = Integer.parseInt(token);
-               if (isShort)
-                       c += 32768;
-               chars[ic++] = (char) c;
-       }
-
-       //resize
-       System.arraycopy(chars, 0, chars = new char[ic], 0, ic);
-
-       buildFileForTable(filename, chars);
-}
-private final static void buildFileForTable(String filename, char[] chars) throws java.io.IOException {
-
-       byte[] bytes = new byte[chars.length * 2];
-       for (int i = 0; i < chars.length; i++) {
-               bytes[2 * i] = (byte) (chars[i] >>> 8);
-               bytes[2 * i + 1] = (byte) (chars[i] & 0xFF);
-       }
-
-       java.io.FileOutputStream stream = new java.io.FileOutputStream(filename);
-       stream.write(bytes);
-       stream.close();
-       System.out.println(filename + " creation complete"); //$NON-NLS-1$
-}
-public final static void buildFilesFromLPG(String dataFilename)        throws java.io.IOException {
-
-       //RUN THIS METHOD TO GENERATE PARSER*.RSC FILES
-
-       //build from the lpg javadcl.java files that represents the parser tables
-       //lhs check_table asb asr symbol_index
-
-       //[org.eclipse.jdt.internal.compiler.parser.Parser.buildFilesFromLPG("d:/leapfrog/grammar/javadcl.java")]
-
-       char[] contents = new char[] {};
-       try {
-               contents = Util.getFileCharContent(new File(dataFilename), null);
-       } catch (IOException ex) {
-               System.out.println(Util.bind("parser.incorrectPath")); //$NON-NLS-1$
-               return;
-       }
-       java.util.StringTokenizer st = 
-               new java.util.StringTokenizer(new String(contents), " \t\n\r[]={,;");  //$NON-NLS-1$
-       String[] tokens = new String[st.countTokens()];
-       int i = 0;
-       while (st.hasMoreTokens()) {
-               tokens[i++] = st.nextToken();
-       }
-       final String prefix = FILEPREFIX;
-       i = 0;
-       buildFileFor(prefix + (++i) + ".rsc", "lhs", tokens, false); //$NON-NLS-2$ //$NON-NLS-1$
-       buildFileFor(prefix + (++i) + ".rsc", "check_table", tokens, true); //$NON-NLS-2$ //$NON-NLS-1$
-       buildFileFor(prefix + (++i) + ".rsc", "asb", tokens, false); //$NON-NLS-2$ //$NON-NLS-1$
-       buildFileFor(prefix + (++i) + ".rsc", "asr", tokens, false); //$NON-NLS-2$ //$NON-NLS-1$
-       buildFileFor(prefix + (++i) + ".rsc", "symbol_index", tokens, false); //$NON-NLS-2$ //$NON-NLS-1$
-       System.out.println(Util.bind("parser.moveFiles")); //$NON-NLS-1$
-}
-/*
- * Build initial recovery state.
- * Recovery state is inferred from the current state of the parser (reduced node stack).
- */
-public RecoveredElement buildInitialRecoveryState(){
-
-       /* initialize recovery by retrieving available reduced nodes 
-        * also rebuild bracket balance 
-        */
-       lastCheckPoint = 0;
-
-       RecoveredElement element = null;
-       if (referenceContext instanceof CompilationUnitDeclaration){
-               element = new RecoveredUnit(compilationUnit, 0, this);
-               
-               /* ignore current stack state, since restarting from the beginnning 
-                  since could not trust simple brace count */
-               if (true){ // experimenting restart recovery from scratch
-                       compilationUnit.currentPackage = null;
-                       compilationUnit.imports = null;
-                       compilationUnit.types = null;
-                       currentToken = 0;
-                       listLength = 0;
-                       return element;
-               }
-               if (compilationUnit.currentPackage != null){
-                       lastCheckPoint = compilationUnit.currentPackage.declarationSourceEnd+1;
-               }
-               if (compilationUnit.imports != null){
-                       lastCheckPoint = compilationUnit.imports[compilationUnit.imports.length -1].declarationSourceEnd+1;             
-               }
-       } else {
-               if (referenceContext instanceof AbstractMethodDeclaration){
-                       element = new RecoveredMethod((AbstractMethodDeclaration) referenceContext, null, 0, this);
-                       lastCheckPoint = ((AbstractMethodDeclaration) referenceContext).bodyStart;
-               } else {
-                       /* Initializer bodies are parsed in the context of the type declaration, we must thus search it inside */
-                       if (referenceContext instanceof TypeDeclaration){
-                               TypeDeclaration type = (TypeDeclaration) referenceContext;
-                               for (int i = 0; i < type.fields.length; i++){
-                                       FieldDeclaration field = type.fields[i];                                        
-                                       if (!field.isField()
-                                               && field.declarationSourceStart <= scanner.initialPosition
-                                               && scanner.initialPosition <= field.declarationSourceEnd
-                                               && scanner.eofPosition <= field.declarationSourceEnd+1){
-                                               element = new RecoveredInitializer((Initializer) field, null, 1, this);
-                                               lastCheckPoint = field.declarationSourceStart;                                  
-                                               break;
-                                       }
-                               }
-                       } 
-               }
-       }
-
-       if (element == null) return element;
-       
-       for(int i = 0; i <= astPtr; i++){
-               AstNode node = astStack[i];
-               if (node instanceof AbstractMethodDeclaration){
-                       AbstractMethodDeclaration method = (AbstractMethodDeclaration) node;
-                       if (method.declarationSourceEnd == 0){
-                               element = element.add(method, 0);
-                               lastCheckPoint = method.bodyStart;
-                       } else {
-                               element = element.add(method, 0);
-                               lastCheckPoint = method.declarationSourceEnd + 1;
-                       }
-                       continue;
-               }
-               if (node instanceof Initializer){
-                       Initializer initializer = (Initializer) node;
-                       if (initializer.declarationSourceEnd == 0){
-                               element = element.add(initializer, 1);
-                               lastCheckPoint = initializer.bodyStart;                         
-                       } else {
-                               element = element.add(initializer, 0);
-                               lastCheckPoint = initializer.declarationSourceEnd + 1;
-                       }
-                       continue;
-               }               
-               if (node instanceof FieldDeclaration){
-                       FieldDeclaration field = (FieldDeclaration) node;
-                       if (field.declarationSourceEnd == 0){
-                               element = element.add(field, 0);
-                               if (field.initialization == null){
-                                       lastCheckPoint = field.sourceEnd + 1;
-                               } else {
-                                       lastCheckPoint = field.initialization.sourceEnd + 1;
-                               }
-                       } else {
-                               element = element.add(field, 0);
-                               lastCheckPoint = field.declarationSourceEnd + 1;
-                       }
-                       continue;
-               }
-               if (node instanceof TypeDeclaration){
-                       TypeDeclaration type = (TypeDeclaration) node;
-                       if (type.declarationSourceEnd == 0){
-                               element = element.add(type, 0); 
-                               lastCheckPoint = type.bodyStart;
-                       } else {
-                               element = element.add(type, 0);                         
-                               lastCheckPoint = type.declarationSourceEnd + 1;
-                       }
-                       continue;
-               }
-               if (node instanceof ImportReference){
-                       ImportReference importRef = (ImportReference) node;
-                       element = element.add(importRef, 0);
-                       lastCheckPoint = importRef.declarationSourceEnd + 1;
-               }
-       }
-       return element;
-}
-protected static short check(int i) {
-       return check_table[i - (NUM_RULES + 1)];
-}
-/*
- * Reconsider the entire source looking for inconsistencies in {} () []
- */
-public boolean checkAndReportBracketAnomalies(ProblemReporter problemReporter) {
-
-       scanner.wasAcr = false;
-       boolean anomaliesDetected = false;      
-       try {
-               char[] source = scanner.source;
-               int[] leftCount = {0, 0, 0};
-               int[] rightCount = {0, 0, 0};
-               int[] depths = {0, 0, 0};
-               int[][] leftPositions = new int[][] {new int[10], new int[10], new int[10]};
-               int[][] leftDepths = new int[][] {new int[10], new int[10], new int[10]};
-               int[][] rightPositions = new int[][] {new int[10], new int[10], new int[10]};
-               int[][] rightDepths = new int[][] {new int[10], new int[10], new int[10]};
-               scanner.currentPosition = scanner.initialPosition; //starting point (first-zero-based char)
-               while (scanner.currentPosition < scanner.eofPosition) { //loop for jumping over comments
-                       try {
-                               // ---------Consume white space and handles startPosition---------
-                               boolean isWhiteSpace;
-                               do {
-                                       scanner.startPosition = scanner.currentPosition;
-                                       if (((scanner.currentCharacter = source[scanner.currentPosition++]) == '\\') && (source[scanner.currentPosition] == 'u')) {
-                                               isWhiteSpace = scanner.jumpOverUnicodeWhiteSpace();
-                                       } else {
-                                               if (scanner.recordLineSeparator && ((scanner.currentCharacter == '\r') || (scanner.currentCharacter == '\n'))) {
-                                                       if (scanner.lineEnds[scanner.linePtr] < scanner.startPosition) {
-                                                               // only record line positions we have not recorded yet
-                                                               scanner.pushLineSeparator();
-                                                       }
-                                               }
-                                               isWhiteSpace = Character.isWhitespace(scanner.currentCharacter);
-                                       }
-                               } while (isWhiteSpace && (scanner.currentPosition < scanner.eofPosition));
-
-                               // -------consume token until } is found---------
-
-                               switch (scanner.currentCharacter) {
-                                       case '{' :
-                                               {
-                                                       int index = leftCount[CurlyBracket] ++;
-                                                       if (index == leftPositions[CurlyBracket].length) {
-                                                               System.arraycopy(leftPositions[CurlyBracket], 0, (leftPositions[CurlyBracket] = new int[index * 2]), 0, index);
-                                                               System.arraycopy(leftDepths[CurlyBracket], 0, (leftDepths[CurlyBracket] = new int[index * 2]), 0, index);
-                                                       }
-                                                       leftPositions[CurlyBracket][index] = scanner.startPosition;
-                                                       leftDepths[CurlyBracket][index] = depths[CurlyBracket] ++;
-                                               }
-                                               break;
-                                       case '}' :
-                                               {
-                                                       int index = rightCount[CurlyBracket] ++;
-                                                       if (index == rightPositions[CurlyBracket].length) {
-                                                               System.arraycopy(rightPositions[CurlyBracket], 0, (rightPositions[CurlyBracket] = new int[index * 2]), 0, index);
-                                                               System.arraycopy(rightDepths[CurlyBracket], 0, (rightDepths[CurlyBracket] = new int[index * 2]), 0, index);
-                                                       }
-                                                       rightPositions[CurlyBracket][index] = scanner.startPosition;
-                                                       rightDepths[CurlyBracket][index] = --depths[CurlyBracket];
-                                               }
-                                               break;
-                                       case '(' :
-                                               {
-                                                       int index = leftCount[RoundBracket] ++;
-                                                       if (index == leftPositions[RoundBracket].length) {
-                                                               System.arraycopy(leftPositions[RoundBracket], 0, (leftPositions[RoundBracket] = new int[index * 2]), 0, index);
-                                                               System.arraycopy(leftDepths[RoundBracket], 0, (leftDepths[RoundBracket] = new int[index * 2]), 0, index);
-                                                       }
-                                                       leftPositions[RoundBracket][index] = scanner.startPosition;
-                                                       leftDepths[RoundBracket][index] = depths[RoundBracket] ++;
-                                               }
-                                               break;
-                                       case ')' :
-                                               {
-                                                       int index = rightCount[RoundBracket] ++;
-                                                       if (index == rightPositions[RoundBracket].length) {
-                                                               System.arraycopy(rightPositions[RoundBracket], 0, (rightPositions[RoundBracket] = new int[index * 2]), 0, index);
-                                                               System.arraycopy(rightDepths[RoundBracket], 0, (rightDepths[RoundBracket] = new int[index * 2]), 0, index);
-                                                       }
-                                                       rightPositions[RoundBracket][index] = scanner.startPosition;
-                                                       rightDepths[RoundBracket][index] = --depths[RoundBracket];
-                                               }
-                                               break;
-                                       case '[' :
-                                               {
-                                                       int index = leftCount[SquareBracket] ++;
-                                                       if (index == leftPositions[SquareBracket].length) {
-                                                               System.arraycopy(leftPositions[SquareBracket], 0, (leftPositions[SquareBracket] = new int[index * 2]), 0, index);
-                                                               System.arraycopy(leftDepths[SquareBracket], 0, (leftDepths[SquareBracket] = new int[index * 2]), 0, index);
-                                                       }
-                                                       leftPositions[SquareBracket][index] = scanner.startPosition;
-                                                       leftDepths[SquareBracket][index] = depths[SquareBracket] ++;
-                                               }
-                                               break;
-                                       case ']' :
-                                               {
-                                                       int index = rightCount[SquareBracket] ++;
-                                                       if (index == rightPositions[SquareBracket].length) {
-                                                               System.arraycopy(rightPositions[SquareBracket], 0, (rightPositions[SquareBracket] = new int[index * 2]), 0, index);
-                                                               System.arraycopy(rightDepths[SquareBracket], 0, (rightDepths[SquareBracket] = new int[index * 2]), 0, index);
-                                                       }
-                                                       rightPositions[SquareBracket][index] = scanner.startPosition;
-                                                       rightDepths[SquareBracket][index] = --depths[SquareBracket];
-                                               }
-                                               break;
-                                       case '\'' :
-                                               {
-                                                       if (scanner.getNextChar('\\')) {
-                                                               scanner.scanEscapeCharacter();
-                                                       } else { // consume next character
-                                                               scanner.unicodeAsBackSlash = false;
-                                                               if (((scanner.currentCharacter = source[scanner.currentPosition++]) == '\\') && (source[scanner.currentPosition] == 'u')) {
-                                                                       scanner.getNextUnicodeChar();
-                                                               } else {
-                                                                       if (scanner.withoutUnicodePtr != 0) {
-                                                                               scanner.withoutUnicodeBuffer[++scanner.withoutUnicodePtr] = scanner.currentCharacter;
-                                                                       }
-                                                               }
-                                                       }
-                                                       scanner.getNextChar('\'');
-                                                       break;
-                                               }
-                                       case '"' : // consume next character
-                                               scanner.unicodeAsBackSlash = false;
-                                               if (((scanner.currentCharacter = source[scanner.currentPosition++]) == '\\') && (source[scanner.currentPosition] == 'u')) {
-                                                       scanner.getNextUnicodeChar();
-                                               } else {
-                                                       if (scanner.withoutUnicodePtr != 0) {
-                                                               scanner.withoutUnicodeBuffer[++scanner.withoutUnicodePtr] = scanner.currentCharacter;
-                                                       }
-                                               }
-                                               while (scanner.currentCharacter != '"') {
-                                                       if (scanner.currentCharacter == '\r') {
-                                                               if (source[scanner.currentPosition] == '\n')
-                                                                       scanner.currentPosition++;
-                                                               break; // the string cannot go further that the line
-                                                       }
-                                                       if (scanner.currentCharacter == '\n') {
-                                                               break; // the string cannot go further that the line
-                                                       }
-                                                       if (scanner.currentCharacter == '\\') {
-                                                               scanner.scanEscapeCharacter();
-                                                       }
-                                                       // consume next character
-                                                       scanner.unicodeAsBackSlash = false;
-                                                       if (((scanner.currentCharacter = source[scanner.currentPosition++]) == '\\') && (source[scanner.currentPosition] == 'u')) {
-                                                               scanner.getNextUnicodeChar();
-                                                       } else {
-                                                               if (scanner.withoutUnicodePtr != 0) {
-                                                                       scanner.withoutUnicodeBuffer[++scanner.withoutUnicodePtr] = scanner.currentCharacter;
-                                                               }
-                                                       }
-                                               }
-                                               break;
-                                       case '/' :
-                                               {
-                                                       int test;
-                                                       if ((test = scanner.getNextChar('/', '*')) == 0) { //line comment 
-                                                               //get the next char 
-                                                               if (((scanner.currentCharacter = source[scanner.currentPosition++]) == '\\') && (source[scanner.currentPosition] == 'u')) {
-                                                                       //-------------unicode traitement ------------
-                                                                       int c1 = 0, c2 = 0, c3 = 0, c4 = 0;
-                                                                       scanner.currentPosition++;
-                                                                       while (source[scanner.currentPosition] == 'u') {
-                                                                               scanner.currentPosition++;
-                                                                       }
-                                                                       if ((c1 = Character.getNumericValue(source[scanner.currentPosition++])) > 15 || c1 < 0 || (c2 = Character.getNumericValue(source[scanner.currentPosition++])) > 15 || c2 < 0 || (c3 = Character.getNumericValue(source[scanner.currentPosition++])) > 15 || c3 < 0 || (c4 = Character.getNumericValue(source[scanner.currentPosition++])) > 15 || c4 < 0) { //error don't care of the value
-                                                                               scanner.currentCharacter = 'A';
-                                                                       } //something different from \n and \r
-                                                                       else {
-                                                                               scanner.currentCharacter = (char) (((c1 * 16 + c2) * 16 + c3) * 16 + c4);
-                                                                       }
-                                                               }
-                                                               while (scanner.currentCharacter != '\r' && scanner.currentCharacter != '\n') {
-                                                                       //get the next char
-                                                                       scanner.startPosition = scanner.currentPosition;
-                                                                       if (((scanner.currentCharacter = source[scanner.currentPosition++]) == '\\') && (source[scanner.currentPosition] == 'u')) {
-                                                                               //-------------unicode traitement ------------
-                                                                               int c1 = 0, c2 = 0, c3 = 0, c4 = 0;
-                                                                               scanner.currentPosition++;
-                                                                               while (source[scanner.currentPosition] == 'u') {
-                                                                                       scanner.currentPosition++;
-                                                                               }
-                                                                               if ((c1 = Character.getNumericValue(source[scanner.currentPosition++])) > 15 || c1 < 0 || (c2 = Character.getNumericValue(source[scanner.currentPosition++])) > 15 || c2 < 0 || (c3 = Character.getNumericValue(source[scanner.currentPosition++])) > 15 || c3 < 0 || (c4 = Character.getNumericValue(source[scanner.currentPosition++])) > 15 || c4 < 0) { //error don't care of the value
-                                                                                       scanner.currentCharacter = 'A';
-                                                                               } //something different from \n and \r
-                                                                               else {
-                                                                                       scanner.currentCharacter = (char) (((c1 * 16 + c2) * 16 + c3) * 16 + c4);
-                                                                               }
-                                                                       }
-                                                               }
-                                                               if (scanner.recordLineSeparator && ((scanner.currentCharacter == '\r') || (scanner.currentCharacter == '\n'))) {
-                                                                       if (scanner.lineEnds[scanner.linePtr] < scanner.startPosition) {
-                                                                               // only record line positions we have not recorded yet
-                                                                               scanner.pushLineSeparator();
-                                                                       }
-                                                               }
-                                                               break;
-                                                       }
-                                                       if (test > 0) { //traditional and annotation comment
-                                                               boolean star = false;
-                                                               // consume next character
-                                                               scanner.unicodeAsBackSlash = false;
-                                                               if (((scanner.currentCharacter = source[scanner.currentPosition++]) == '\\') && (source[scanner.currentPosition] == 'u')) {
-                                                                       scanner.getNextUnicodeChar();
-                                                               } else {
-                                                                       if (scanner.withoutUnicodePtr != 0) {
-                                                                               scanner.withoutUnicodeBuffer[++scanner.withoutUnicodePtr] = scanner.currentCharacter;
-                                                                       }
-                                                               }
-                                                               if (scanner.currentCharacter == '*') {
-                                                                       star = true;
-                                                               }
-                                                               //get the next char 
-                                                               if (((scanner.currentCharacter = source[scanner.currentPosition++]) == '\\') && (source[scanner.currentPosition] == 'u')) {
-                                                                       //-------------unicode traitement ------------
-                                                                       int c1 = 0, c2 = 0, c3 = 0, c4 = 0;
-                                                                       scanner.currentPosition++;
-                                                                       while (source[scanner.currentPosition] == 'u') {
-                                                                               scanner.currentPosition++;
-                                                                       }
-                                                                       if ((c1 = Character.getNumericValue(source[scanner.currentPosition++])) > 15 || c1 < 0 || (c2 = Character.getNumericValue(source[scanner.currentPosition++])) > 15 || c2 < 0 || (c3 = Character.getNumericValue(source[scanner.currentPosition++])) > 15 || c3 < 0 || (c4 = Character.getNumericValue(source[scanner.currentPosition++])) > 15 || c4 < 0) { //error don't care of the value
-                                                                               scanner.currentCharacter = 'A';
-                                                                       } //something different from * and /
-                                                                       else {
-                                                                               scanner.currentCharacter = (char) (((c1 * 16 + c2) * 16 + c3) * 16 + c4);
-                                                                       }
-                                                               }
-                                                               //loop until end of comment */ 
-                                                               while ((scanner.currentCharacter != '/') || (!star)) {
-                                                                       star = scanner.currentCharacter == '*';
-                                                                       //get next char
-                                                                       if (((scanner.currentCharacter = source[scanner.currentPosition++]) == '\\') && (source[scanner.currentPosition] == 'u')) {
-                                                                               //-------------unicode traitement ------------
-                                                                               int c1 = 0, c2 = 0, c3 = 0, c4 = 0;
-                                                                               scanner.currentPosition++;
-                                                                               while (source[scanner.currentPosition] == 'u') {
-                                                                                       scanner.currentPosition++;
-                                                                               }
-                                                                               if ((c1 = Character.getNumericValue(source[scanner.currentPosition++])) > 15 || c1 < 0 || (c2 = Character.getNumericValue(source[scanner.currentPosition++])) > 15 || c2 < 0 || (c3 = Character.getNumericValue(source[scanner.currentPosition++])) > 15 || c3 < 0 || (c4 = Character.getNumericValue(source[scanner.currentPosition++])) > 15 || c4 < 0) { //error don't care of the value
-                                                                                       scanner.currentCharacter = 'A';
-                                                                               } //something different from * and /
-                                                                               else {
-                                                                                       scanner.currentCharacter = (char) (((c1 * 16 + c2) * 16 + c3) * 16 + c4);
-                                                                               }
-                                                                       }
-                                                               }
-                                                               break;
-                                                       }
-                                                       break;
-                                               }
-                                       default :
-                                               if (Character.isJavaIdentifierStart(scanner.currentCharacter)) {
-                                                       scanner.scanIdentifierOrKeyword();
-                                                       break;
-                                               }
-                                               if (Character.isDigit(scanner.currentCharacter)) {
-                                                       scanner.scanNumber(false);
-                                                       break;
-                                               }
-                               }
-                               //-----------------end switch while try--------------------
-                       } catch (IndexOutOfBoundsException e) {
-                                       break; // read until EOF
-                       } catch (InvalidInputException e) {
-                               return false; // no clue
-                       }
-               }
-               if (scanner.recordLineSeparator) {
-                       compilationUnit.compilationResult.lineSeparatorPositions = scanner.getLineEnds();
-               }
-
-               // check placement anomalies against other kinds of brackets
-               for (int kind = 0; kind < BracketKinds; kind++) {
-                       for (int leftIndex = leftCount[kind] - 1; leftIndex >= 0; leftIndex--) {
-                               int start = leftPositions[kind][leftIndex]; // deepest first
-                               // find matching closing bracket
-                               int depth = leftDepths[kind][leftIndex];
-                               int end = -1;
-                               for (int i = 0; i < rightCount[kind]; i++) {
-                                       int pos = rightPositions[kind][i];
-                                       // want matching bracket further in source with same depth
-                                       if ((pos > start) && (depth == rightDepths[kind][i])) {
-                                               end = pos;
-                                               break;
-                                       }
-                               }
-                               if (end < 0) { // did not find a good closing match
-                                       problemReporter.unmatchedBracket(start, referenceContext, compilationUnit.compilationResult);
-                                       return true;
-                               }
-                               // check if even number of opening/closing other brackets in between this pair of brackets
-                               int balance = 0;
-                               for (int otherKind = 0;(balance == 0) && (otherKind < BracketKinds); otherKind++) {
-                                       for (int i = 0; i < leftCount[otherKind]; i++) {
-                                               int pos = leftPositions[otherKind][i];
-                                               if ((pos > start) && (pos < end))
-                                                       balance++;
-                                       }
-                                       for (int i = 0; i < rightCount[otherKind]; i++) {
-                                               int pos = rightPositions[otherKind][i];
-                                               if ((pos > start) && (pos < end))
-                                                       balance--;
-                                       }
-                                       if (balance != 0) {
-                                               problemReporter.unmatchedBracket(start, referenceContext, compilationUnit.compilationResult); //bracket anomaly
-                                               return true;
-                                       }
-                               }
-                       }
-                       // too many opening brackets ?
-                       for (int i = rightCount[kind]; i < leftCount[kind]; i++) {
-                               anomaliesDetected = true;
-                               problemReporter.unmatchedBracket(leftPositions[kind][leftCount[kind] - i - 1], referenceContext, compilationUnit.compilationResult);
-                       }
-                       // too many closing brackets ?
-                       for (int i = leftCount[kind]; i < rightCount[kind]; i++) {
-                               anomaliesDetected = true;
-                               problemReporter.unmatchedBracket(rightPositions[kind][i], referenceContext, compilationUnit.compilationResult);
-                       }
-                       if (anomaliesDetected) return true;
-               }
-               
-               return anomaliesDetected;
-       } catch (ArrayStoreException e) { // jdk1.2.2 jit bug
-               return anomaliesDetected;
-       } catch (NullPointerException e) { // jdk1.2.2 jit bug
-               return anomaliesDetected;
-       }
-}
-public final void checkAndSetModifiers(int flag){
-       /*modify the current modifiers buffer.
-       When the startPosition of the modifiers is 0
-       it means that the modifier being parsed is the first
-       of a list of several modifiers. The startPosition
-       is zeroed when a copy of modifiers-buffer is push
-       onto the astStack. */
-
-       if ((modifiers & flag) != 0){ // duplicate modifier
-               modifiers |= AccAlternateModifierProblem;
-       }
-       modifiers |= flag;
-                       
-       if (modifiersSourceStart < 0) modifiersSourceStart = scanner.startPosition;
-}
-public void checkAnnotation() {
-
-       boolean deprecated = false;
-       boolean checkDeprecated = false;
-       int lastAnnotationIndex = -1;
-
-       //since jdk1.2 look only in the last java doc comment...
-       found : for (lastAnnotationIndex = scanner.commentPtr; lastAnnotationIndex >= 0; lastAnnotationIndex--){
-               //look for @deprecated into the first javadoc comment preceeding the declaration
-               int commentSourceStart = scanner.commentStarts[lastAnnotationIndex];
-               // javadoc only (non javadoc comment have negative end positions.)
-               if (modifiersSourceStart != -1 && modifiersSourceStart < commentSourceStart) {
-                       continue;
-               }
-               if (scanner.commentStops[lastAnnotationIndex] < 0) {
-                       break found;
-               }
-               checkDeprecated = true;
-               int commentSourceEnd = scanner.commentStops[lastAnnotationIndex] - 1; //stop is one over
-               char[] comment = scanner.source;
-
-               for (int i = commentSourceStart + 3; i < commentSourceEnd - 10; i++) {
-                       if ((comment[i] == '@') 
-                               && (comment[i + 1] == 'd')
-                               && (comment[i + 2] == 'e')
-                               && (comment[i + 3] == 'p')
-                               && (comment[i + 4] == 'r')
-                               && (comment[i + 5] == 'e')
-                               && (comment[i + 6] == 'c')
-                               && (comment[i + 7] == 'a')
-                               && (comment[i + 8] == 't')
-                               && (comment[i + 9] == 'e')
-                               && (comment[i + 10] == 'd')) {
-                               // ensure the tag is properly ended: either followed by a space, a tab, line end or asterisk.
-                               int nextPos = i+11;
-                               deprecated = (comment[nextPos] == ' ') || (comment[nextPos] == '\t') || (comment[nextPos] == '\n') || (comment[nextPos] == '\r') || (comment[nextPos] == '*');
-                               break found;
-                       }
-               }
-               break found;
-       }
-       if (deprecated) {
-               checkAndSetModifiers(AccDeprecated);
-       }
-       // modify the modifier source start to point at the first comment
-       if (lastAnnotationIndex >= 0 && checkDeprecated) {
-               modifiersSourceStart = scanner.commentStarts[lastAnnotationIndex]; 
-       }
-}
-protected void classInstanceCreation(boolean alwaysQualified) {
-       // ClassInstanceCreationExpression ::= 'new' ClassType '(' ArgumentListopt ')' ClassBodyopt
-
-       // ClassBodyopt produces a null item on the astStak if it produces NO class body
-       // An empty class body produces a 0 on the length stack.....
-
-       AllocationExpression alloc;
-       int length;
-       if (((length = astLengthStack[astLengthPtr--]) == 1)
-               && (astStack[astPtr] == null)) {
-               //NO ClassBody
-               astPtr--;
-               if (alwaysQualified) {
-                       alloc = new QualifiedAllocationExpression();
-               } else {
-                       alloc = new AllocationExpression();
-               }
-               alloc.sourceEnd = endPosition; //the position has been stored explicitly
-
-               if ((length = expressionLengthStack[expressionLengthPtr--]) != 0) {
-                       expressionPtr -= length;
-                       System.arraycopy(
-                               expressionStack, 
-                               expressionPtr + 1, 
-                               alloc.arguments = new Expression[length], 
-                               0, 
-                               length); 
-               }
-               alloc.type = getTypeReference(0);
-               //the default constructor with the correct number of argument
-               //will be created and added by the TC (see createsInternalConstructorWithBinding)
-               alloc.sourceStart = intStack[intPtr--];
-               pushOnExpressionStack(alloc);
-       } else {
-               dispatchDeclarationInto(length);
-               AnonymousLocalTypeDeclaration anonymousTypeDeclaration = (AnonymousLocalTypeDeclaration) astStack[astPtr];
-               anonymousTypeDeclaration.declarationSourceEnd = endStatementPosition;
-               anonymousTypeDeclaration.bodyEnd = endStatementPosition;
-               if (anonymousTypeDeclaration.allocation != null) {
-                       anonymousTypeDeclaration.allocation.sourceEnd = endStatementPosition;
-               }
-               astPtr--;
-               astLengthPtr--;
-               
-               // mark fields and initializer with local type mark if needed
-               markFieldsWithLocalType(anonymousTypeDeclaration);
-       }
-}
-protected final void concatExpressionLists() {
-       expressionLengthStack[--expressionLengthPtr]++;
-}
-private final void concatNodeLists() {
-       /*
-        * This is a case where you have two sublists into the astStack that you want
-        * to merge in one list. There is no action required on the astStack. The only
-        * thing you need to do is merge the two lengths specified on the astStackLength.
-        * The top two length are for example:
-        * ... p   n
-        * and you want to result in a list like:
-        * ... n+p 
-        * This means that the p could be equals to 0 in case there is no astNode pushed
-        * on the astStack.
-        * Look at the InterfaceMemberDeclarations for an example.
-        */
-
-       astLengthStack[astLengthPtr - 1] += astLengthStack[astLengthPtr--];
-}
-protected void consumeAllocationHeader() {
-       // ClassInstanceCreationExpression ::= 'new' ClassType '(' ArgumentListopt ')' ClassBodyopt
-
-       // ClassBodyopt produces a null item on the astStak if it produces NO class body
-       // An empty class body produces a 0 on the length stack.....
-
-       if (currentElement == null){
-               return; // should never occur, this consumeRule is only used in recovery mode
-       }
-       if (currentToken == TokenNameLBRACE){
-               // beginning of an anonymous type
-               AnonymousLocalTypeDeclaration anonymousType = new AnonymousLocalTypeDeclaration(this.compilationUnit.compilationResult);
-               anonymousType.sourceStart = intStack[intPtr--];
-               anonymousType.sourceEnd = rParenPos; // closing parenthesis
-               lastCheckPoint = anonymousType.bodyStart = scanner.currentPosition;
-               currentElement = currentElement.add(anonymousType, 0);
-               lastIgnoredToken = -1;
-               currentToken = 0; // opening brace already taken into account
-               return;
-       }
-       lastCheckPoint = scanner.startPosition; // force to restart at this exact position
-       restartRecovery = true; // request to restart from here on
-}
-protected void consumeArgumentList() {
-       // ArgumentList ::= ArgumentList ',' Expression
-       concatExpressionLists();
-}
-protected void consumeArrayAccess(boolean unspecifiedReference) {
-       // ArrayAccess ::= Name '[' Expression ']' ==> true
-       // ArrayAccess ::= PrimaryNoNewArray '[' Expression ']' ==> false
-
-
-       //optimize push/pop
-       Expression exp;
-       if (unspecifiedReference) {
-               exp = 
-                       expressionStack[expressionPtr] = 
-                               new ArrayReference(
-                                       getUnspecifiedReferenceOptimized(),
-                                       expressionStack[expressionPtr]);
-       } else {
-               expressionPtr--;
-               expressionLengthPtr--;
-               exp = 
-                       expressionStack[expressionPtr] = 
-                               new ArrayReference(
-                                       expressionStack[expressionPtr],
-                                       expressionStack[expressionPtr + 1]);
-       }
-       exp.sourceEnd = endPosition;
-}
-protected void consumeArrayCreationExpression() {
-       // ArrayCreationExpression ::= 'new' PrimitiveType DimWithOrWithOutExprs ArrayInitializeropt
-       // ArrayCreationExpression ::= 'new' ClassOrInterfaceType DimWithOrWithOutExprs ArrayInitializeropt
-
-       int length;
-       ArrayAllocationExpression aae = new ArrayAllocationExpression();
-       if (expressionLengthStack[expressionLengthPtr] != 0) {
-               expressionLengthPtr -- ;
-               aae.initializer = (ArrayInitializer) expressionStack[expressionPtr--];
-       } else {
-               expressionLengthPtr--;
-       }
-               
-       aae.type = getTypeReference(0);
-       length = (expressionLengthStack[expressionLengthPtr--]);
-       expressionPtr -= length ;
-       System.arraycopy(
-               expressionStack,
-               expressionPtr+1,
-               aae.dimensions = new Expression[length],
-               0,
-               length);
-       aae.sourceStart = intStack[intPtr--];
-       if (aae.initializer == null) {
-               aae.sourceEnd = endPosition;
-       } else {
-               aae.sourceEnd = aae.initializer.sourceEnd ;
-       }
-       pushOnExpressionStack(aae);
-}
-protected void consumeArrayInitializer() {
-       // ArrayInitializer ::= '{' VariableInitializers '}'
-       // ArrayInitializer ::= '{' VariableInitializers , '}'
+      case 118 : // System.out.println("ClassMemberDeclaration ::= SEMICOLON");
+        consumeEmptyClassMemberDeclaration();
+        break;
 
-       arrayInitializer(expressionLengthStack[expressionLengthPtr--]);
-}
+      case 119 : // System.out.println("FieldDeclaration ::= Modifiersopt Type VariableDeclarators SEMICOLON");
+        consumeFieldDeclaration();
+        break;
 
-protected void consumeAssertStatement() {
-       // AssertStatement ::= 'assert' Expression ':' Expression ';'
-       expressionLengthPtr-=2;
-       pushOnAstStack(new AssertStatement(expressionStack[expressionPtr--], expressionStack[expressionPtr--], intStack[intPtr--]));
-}
+      case 121 : // System.out.println("VariableDeclarators ::= VariableDeclarators COMMA VariableDeclarator");
+        consumeVariableDeclarators();
+        break;
 
-protected void consumeAssignment() {
-       // Assignment ::= LeftHandSide AssignmentOperator AssignmentExpression
-       //optimize the push/pop
-
-       int op = intStack[intPtr--] ; //<--the encoded operator
-       
-       expressionPtr -- ; expressionLengthPtr -- ;
-       expressionStack[expressionPtr] =
-               (op != EQUAL ) ?
-                       new CompoundAssignment(
-                               expressionStack[expressionPtr] ,
-                               expressionStack[expressionPtr+1], 
-                               op,
-                               scanner.startPosition - 1)      :
-                       new Assignment(
-                               expressionStack[expressionPtr] ,
-                               expressionStack[expressionPtr+1],
-                               scanner.startPosition - 1);
-}
-protected void consumeAssignmentOperator(int pos) {
-       // AssignmentOperator ::= '='
-       // AssignmentOperator ::= '*='
-       // AssignmentOperator ::= '/='
-       // AssignmentOperator ::= '%='
-       // AssignmentOperator ::= '+='
-       // AssignmentOperator ::= '-='
-       // AssignmentOperator ::= '<<='
-       // AssignmentOperator ::= '>>='
-       // AssignmentOperator ::= '>>>='
-       // AssignmentOperator ::= '&='
-       // AssignmentOperator ::= '^='
-       // AssignmentOperator ::= '|='
-
-       try {
-               intStack[++intPtr] = pos;
-       } catch (IndexOutOfBoundsException e) {
-               //intPtr is correct 
-               int oldStackLength = intStack.length;
-               int oldStack[] = intStack;
-               intStack = new int[oldStackLength + StackIncrement];
-               System.arraycopy(oldStack, 0, intStack, 0, oldStackLength);
-               intStack[intPtr] = pos;
-       }
-}
-protected void consumeBinaryExpression(int op) {
-       // MultiplicativeExpression ::= MultiplicativeExpression '*' UnaryExpression
-       // MultiplicativeExpression ::= MultiplicativeExpression '/' UnaryExpression
-       // MultiplicativeExpression ::= MultiplicativeExpression '%' UnaryExpression
-       // AdditiveExpression ::= AdditiveExpression '+' MultiplicativeExpression
-       // AdditiveExpression ::= AdditiveExpression '-' MultiplicativeExpression
-       // ShiftExpression ::= ShiftExpression '<<'  AdditiveExpression
-       // ShiftExpression ::= ShiftExpression '>>'  AdditiveExpression
-       // ShiftExpression ::= ShiftExpression '>>>' AdditiveExpression
-       // RelationalExpression ::= RelationalExpression '<'  ShiftExpression
-       // RelationalExpression ::= RelationalExpression '>'  ShiftExpression
-       // RelationalExpression ::= RelationalExpression '<=' ShiftExpression
-       // RelationalExpression ::= RelationalExpression '>=' ShiftExpression
-       // AndExpression ::= AndExpression '&' EqualityExpression
-       // ExclusiveOrExpression ::= ExclusiveOrExpression '^' AndExpression
-       // InclusiveOrExpression ::= InclusiveOrExpression '|' ExclusiveOrExpression
-       // ConditionalAndExpression ::= ConditionalAndExpression '&&' InclusiveOrExpression
-       // ConditionalOrExpression ::= ConditionalOrExpression '||' ConditionalAndExpression
-
-       //optimize the push/pop
-
-       expressionPtr--;
-       expressionLengthPtr--;
-       if (op == OR_OR) {
-               expressionStack[expressionPtr] = 
-                       new OR_OR_Expression(
-                               expressionStack[expressionPtr], 
-                               expressionStack[expressionPtr + 1], 
-                               op); 
-       } else {
-               if (op == AND_AND) {
-                       expressionStack[expressionPtr] = 
-                               new AND_AND_Expression(
-                                       expressionStack[expressionPtr], 
-                                       expressionStack[expressionPtr + 1], 
-                                       op);
-               } else {
-                       // look for "string1" + "string2"
-                       if ((op == PLUS) && optimizeStringLiterals) {
-                               Expression expr1, expr2;
-                               expr1 = expressionStack[expressionPtr];
-                               expr2 = expressionStack[expressionPtr + 1];
-                               if (expr1 instanceof StringLiteral) {
-                                       if (expr2 instanceof CharLiteral) { // string+char
-                                               expressionStack[expressionPtr] = 
-                                                       ((StringLiteral) expr1).extendWith((CharLiteral) expr2); 
-                                       } else if (expr2 instanceof StringLiteral) { //string+string
-                                               expressionStack[expressionPtr] = 
-                                                       ((StringLiteral) expr1).extendWith((StringLiteral) expr2); 
-                                       } else {
-                                               expressionStack[expressionPtr] = new BinaryExpression(expr1, expr2, PLUS);
-                                       }
-                               } else {
-                                       expressionStack[expressionPtr] = new BinaryExpression(expr1, expr2, PLUS);
-                               }
-                       } else {
-                               expressionStack[expressionPtr] = 
-                                       new BinaryExpression(
-                                               expressionStack[expressionPtr], 
-                                               expressionStack[expressionPtr + 1], 
-                                               op);
-                       }
-               }
-       }
-}
-protected void consumeBlock() {
-       // Block ::= OpenBlock '{' BlockStatementsopt '}'
-       // simpler action for empty blocks
-
-       int length;
-       if ((length = astLengthStack[astLengthPtr--]) == 0) { // empty block 
-               pushOnAstStack(Block.EmptyWith(intStack[intPtr--], endStatementPosition));
-               realBlockPtr--; // still need to pop the block variable counter
-       } else {
-               Block bk = new Block(realBlockStack[realBlockPtr--]);
-               astPtr -= length;
-               System.arraycopy(
-                       astStack, 
-                       astPtr + 1, 
-                       bk.statements = new Statement[length], 
-                       0, 
-                       length); 
-               pushOnAstStack(bk);
-               bk.sourceStart = intStack[intPtr--];
-               bk.sourceEnd = endStatementPosition;
-       }
-}
-protected void consumeBlockStatements() {
-       // BlockStatements ::= BlockStatements BlockStatement
-       concatNodeLists();
-}
-protected void consumeCaseLabel() {
-       // SwitchLabel ::= 'case' ConstantExpression ':'
-       expressionLengthPtr--;
-       pushOnAstStack(new Case(intStack[intPtr--], expressionStack[expressionPtr--]));
-}
-protected void consumeCastExpression() {
-       // CastExpression ::= PushLPAREN PrimitiveType Dimsopt PushRPAREN UnaryExpression
-       // CastExpression ::= PushLPAREN Name Dims PushRPAREN UnaryExpressionNotPlusMinus
+      case 124 : // System.out.println("EnterVariable ::=");
+        consumeEnterVariable();
+        break;
 
-       //intStack : posOfLeftParen dim posOfRightParen
+      case 125 : // System.out.println("ExitVariableWithInitialization ::=");
+        consumeExitVariableWithInitialization();
+        break;
 
-       //optimize the push/pop
+      case 126 : // System.out.println("ExitVariableWithoutInitialization ::=");
+        consumeExitVariableWithoutInitialization();
+        break;
 
-       Expression exp, cast, castType;
-       int end = intStack[intPtr--];
-       expressionStack[expressionPtr] = cast = new CastExpression(exp = expressionStack[expressionPtr], castType = getTypeReference(intStack[intPtr--]));
-       castType.sourceEnd = end - 1;
-       castType.sourceStart = (cast.sourceStart = intStack[intPtr--]) + 1;
-       cast.sourceEnd = exp.sourceEnd;
-}
-protected void consumeCastExpressionLL1() {
-       //CastExpression ::= '(' Expression ')' UnaryExpressionNotPlusMinus
-       // Expression is used in order to make the grammar LL1
-
-       //optimize push/pop
-
-       Expression castType,cast,exp;
-       expressionPtr--;
-       expressionStack[expressionPtr] = 
-                       cast = new CastExpression(      exp=expressionStack[expressionPtr+1] ,
-                                                               castType = getTypeReference(expressionStack[expressionPtr]));
-       expressionLengthPtr -- ;
-       updateSourcePosition(castType);
-       cast.sourceStart=castType.sourceStart;
-       cast.sourceEnd=exp.sourceEnd;
-       castType.sourceStart++;
-       castType.sourceEnd--;
-       }
-protected void consumeCatches() {
-       // Catches ::= Catches CatchClause
-       optimizedConcatNodeLists();
-}
-protected void consumeCatchHeader() {
-       // CatchDeclaration ::= 'catch' '(' FormalParameter ')' '{'
-
-       if (currentElement == null){
-               return; // should never occur, this consumeRule is only used in recovery mode
-       }
-       // current element should be a block due to the presence of the opening brace
-       if (!(currentElement instanceof RecoveredBlock)){
-               return;
-       }
-       // exception argument is already on astStack
-       ((RecoveredBlock)currentElement).attach(
-               new RecoveredLocalVariable((Argument)astStack[astPtr--], currentElement, 0)); // insert catch variable in catch block
-       lastCheckPoint = scanner.startPosition; // force to restart at this exact position
-       restartRecovery = true; // request to restart from here on
-       lastIgnoredToken = -1;
-}
-protected void consumeClassBodyDeclaration() {
-       // ClassBodyDeclaration ::= Diet Block
-       //push an Initializer
-       //optimize the push/pop
-       nestedMethod[nestedType]--;
-       Initializer initializer = new Initializer((Block) astStack[astPtr], 0);
-       intPtr--; // pop sourcestart left on the stack by consumeNestedMethod.
-       realBlockPtr--; // pop the block variable counter left on the stack by consumeNestedMethod
-       int javadocCommentStart = intStack[intPtr--];
-       if (javadocCommentStart != -1) {
-               initializer.declarationSourceStart = javadocCommentStart;
-       }
-       astStack[astPtr] = initializer;
-       initializer.sourceEnd = endStatementPosition;
-       initializer.declarationSourceEnd = flushAnnotationsDefinedPriorTo(endStatementPosition);
-}
-protected void consumeClassBodyDeclarations() {
-       // ClassBodyDeclarations ::= ClassBodyDeclarations ClassBodyDeclaration
-       concatNodeLists();
-}
-protected void consumeClassBodyDeclarationsopt() {
-       // ClassBodyDeclarationsopt ::= NestedType ClassBodyDeclarations
-       nestedType-- ;
-}
-protected void consumeClassBodyopt() {
-       // ClassBodyopt ::= $empty
-       pushOnAstStack(null);
-       endPosition = scanner.startPosition - 1;
-}
-protected void consumeClassDeclaration() {
-       // ClassDeclaration ::= ClassHeader ClassBody
-
-       int length;
-       if ((length = astLengthStack[astLengthPtr--]) != 0) {
-               //there are length declarations
-               //dispatch according to the type of the declarations
-               dispatchDeclarationInto(length);
-       }
-
-       TypeDeclaration typeDecl = (TypeDeclaration) astStack[astPtr];
-
-       // mark fields and initializer with local type mark if needed
-       markFieldsWithLocalType(typeDecl);
-
-       //convert constructor that do not have the type's name into methods
-       boolean hasConstructor = typeDecl.checkConstructors(this);
-       
-       //add the default constructor when needed (interface don't have it)
-       if (!hasConstructor) {
-               boolean insideFieldInitializer = false;
-               if (diet) {
-                       for (int i = nestedType; i > 0; i--){
-                               if (variablesCounter[i] > 0) {
-                                       insideFieldInitializer = true;
-                                       break;
-                               }
-                       }
-               }
-               typeDecl.createsInternalConstructor(!diet || insideFieldInitializer, true);
-       }
-
-       //always add <clinit> (will be remove at code gen time if empty)
-       if (this.scanner.containsAssertKeyword) {
-               typeDecl.bits |= AstNode.AddAssertionMASK;
-       }
-       typeDecl.addClinit();
-       typeDecl.bodyEnd = endStatementPosition;
-       typeDecl.declarationSourceEnd = flushAnnotationsDefinedPriorTo(endStatementPosition); 
-}
-protected void consumeClassHeader() {
-       // ClassHeader ::= ClassHeaderName ClassHeaderExtendsopt ClassHeaderImplementsopt
-
-       TypeDeclaration typeDecl = (TypeDeclaration) astStack[astPtr];  
-       if (currentToken == TokenNameLBRACE) { 
-               typeDecl.bodyStart = scanner.currentPosition;
-       }
-       if (currentElement != null) {
-               restartRecovery = true; // used to avoid branching back into the regular automaton              
-       }
-       // flush the comments related to the class header
-       scanner.commentPtr = -1;
-}
-protected void consumeClassHeaderExtends() {
-       // ClassHeaderExtends ::= 'extends' ClassType
-       // There is a class declaration on the top of stack
-       TypeDeclaration typeDecl = (TypeDeclaration) astStack[astPtr];
-       //superclass
-       typeDecl.superclass = getTypeReference(0);
-       typeDecl.bodyStart = typeDecl.superclass.sourceEnd + 1;
-       // recovery
-       if (currentElement != null){
-               lastCheckPoint = typeDecl.bodyStart;
-       }
-}
-protected void consumeClassHeaderImplements() {
-       // ClassHeaderImplements ::= 'implements' InterfaceTypeList
-       int length = astLengthStack[astLengthPtr--];
-       //super interfaces
-       astPtr -= length;
-       // There is a class declaration on the top of stack
-       TypeDeclaration typeDecl = (TypeDeclaration) astStack[astPtr];
-       System.arraycopy(
-               astStack, 
-               astPtr + 1, 
-               typeDecl.superInterfaces = new TypeReference[length], 
-               0, 
-               length); 
-       typeDecl.bodyStart = typeDecl.superInterfaces[length-1].sourceEnd + 1;
-       listLength = 0; // reset after having read super-interfaces
-       // recovery
-       if (currentElement != null) { // is recovering
-               lastCheckPoint = typeDecl.bodyStart;
-       }
-}
-protected void consumeClassHeaderName() {
-       // ClassHeaderName ::= Modifiersopt 'class' 'Identifier'
-       TypeDeclaration typeDecl;
-       if (nestedMethod[nestedType] == 0) {
-               if (nestedType != 0) {
-                       typeDecl = new MemberTypeDeclaration(this.compilationUnit.compilationResult);
-               } else {
-                       typeDecl = new TypeDeclaration(this.compilationUnit.compilationResult);
-               }
-       } else {
-               // Record that the block has a declaration for local types
-               typeDecl = new LocalTypeDeclaration(this.compilationUnit.compilationResult);
-               markCurrentMethodWithLocalType();
-               blockReal();
-       }
-
-       //highlight the name of the type
-       long pos = identifierPositionStack[identifierPtr];
-       typeDecl.sourceEnd = (int) pos;
-       typeDecl.sourceStart = (int) (pos >>> 32);
-       typeDecl.name = identifierStack[identifierPtr--];
-       identifierLengthPtr--;
-
-       //compute the declaration source too
-       // 'class' and 'interface' push two int positions: the beginning of the class token and its end.
-       // we want to keep the beginning position but get rid of the end position
-       // it is only used for the ClassLiteralAccess positions.
-       typeDecl.declarationSourceStart = intStack[intPtr--]; 
-       intPtr--; // remove the end position of the class token
-
-       typeDecl.modifiersSourceStart = intStack[intPtr--];
-       typeDecl.modifiers = intStack[intPtr--];
-       if (typeDecl.modifiersSourceStart >= 0) {
-               typeDecl.declarationSourceStart = typeDecl.modifiersSourceStart;
-       }
-       typeDecl.bodyStart = typeDecl.sourceEnd + 1;
-       pushOnAstStack(typeDecl);
-
-       listLength = 0; // will be updated when reading super-interfaces
-       // recovery
-       if (currentElement != null){ 
-               lastCheckPoint = typeDecl.bodyStart;
-               currentElement = currentElement.add(typeDecl, 0);
-               lastIgnoredToken = -1;
-       }
-}
-protected void consumeClassInstanceCreationExpression() {
-       // ClassInstanceCreationExpression ::= 'new' ClassType '(' ArgumentListopt ')' ClassBodyopt
-       classInstanceCreation(false);
-}
-protected void consumeClassInstanceCreationExpressionName() {
-       // ClassInstanceCreationExpressionName ::= Name '.'
-       pushOnExpressionStack(getUnspecifiedReferenceOptimized());
-}
-protected void consumeClassInstanceCreationExpressionQualified() {
-       // ClassInstanceCreationExpression ::= Primary '.' 'new' SimpleName '(' ArgumentListopt ')' ClassBodyopt
-       // ClassInstanceCreationExpression ::= ClassInstanceCreationExpressionName 'new' SimpleName '(' ArgumentListopt ')' ClassBodyopt
-
-       classInstanceCreation(true); //  <-- push the Qualifed....
-
-       expressionLengthPtr--;
-       QualifiedAllocationExpression qae = 
-               (QualifiedAllocationExpression) expressionStack[expressionPtr--]; 
-       qae.enclosingInstance = expressionStack[expressionPtr];
-       expressionStack[expressionPtr] = qae;
-       qae.sourceStart = qae.enclosingInstance.sourceStart;
-}
-protected void consumeClassTypeElt() {
-       // ClassTypeElt ::= ClassType
-       pushOnAstStack(getTypeReference(0));
-       /* if incomplete thrown exception list, listLength counter will not have been reset,
-               indicating that some items are available on the stack */
-       listLength++;   
-}
-protected void consumeClassTypeList() {
-       // ClassTypeList ::= ClassTypeList ',' ClassTypeElt
-       optimizedConcatNodeLists();
-}
-protected void consumeCompilationUnit() {
-       // CompilationUnit ::= EnterCompilationUnit PackageDeclarationopt ImportDeclarationsopt
-       // do nothing by default
-}
-protected void consumeConditionalExpression(int op) {
-       // ConditionalExpression ::= ConditionalOrExpression '?' Expression ':' ConditionalExpression
-       //optimize the push/pop
-
-       expressionPtr -= 2;
-       expressionLengthPtr -= 2;
-       expressionStack[expressionPtr] =
-               new ConditionalExpression(
-                       expressionStack[expressionPtr],
-                       expressionStack[expressionPtr + 1],
-                       expressionStack[expressionPtr + 2]);
-}
-protected void consumeConstructorBlockStatements() {
-       // ConstructorBody ::= NestedMethod '{' ExplicitConstructorInvocation BlockStatements '}'
-       concatNodeLists(); // explictly add the first statement into the list of statements 
-}
-protected void consumeConstructorBody() {
-       // ConstructorBody ::= NestedMethod  '{' BlockStatementsopt '}'
-       // ConstructorBody ::= NestedMethod  '{' ExplicitConstructorInvocation '}'
-       nestedMethod[nestedType] --;
-}
-protected void consumeConstructorDeclaration() {
-       // ConstructorDeclaration ::= ConstructorHeader ConstructorBody
-
-       /*
-       astStack : MethodDeclaration statements
-       identifierStack : name
-        ==>
-       astStack : MethodDeclaration
-       identifierStack :
-       */
-
-       //must provide a default constructor call when needed
-
-       int length;
-
-       // pop the position of the {  (body of the method) pushed in block decl
-       intPtr--;
-
-       //statements
-       realBlockPtr--;
-       ExplicitConstructorCall constructorCall = null;
-       Statement[] statements = null;
-       if ((length = astLengthStack[astLengthPtr--]) != 0) {
-               astPtr -= length;
-               if (astStack[astPtr + 1] instanceof ExplicitConstructorCall) {
-                       //avoid a isSomeThing that would only be used here BUT what is faster between two alternatives ?
-                       System.arraycopy(
-                               astStack, 
-                               astPtr + 2, 
-                               statements = new Statement[length - 1], 
-                               0, 
-                               length - 1); 
-                       constructorCall = (ExplicitConstructorCall) astStack[astPtr + 1];
-               } else { //need to add explicitly the super();
-                       System.arraycopy(
-                               astStack, 
-                               astPtr + 1, 
-                               statements = new Statement[length], 
-                               0, 
-                               length); 
-                       constructorCall = SuperReference.implicitSuperConstructorCall();
-               }
-       } else {
-               if (!diet){
-                       // add it only in non-diet mode, if diet_bodies, then constructor call will be added elsewhere.
-                       constructorCall = SuperReference.implicitSuperConstructorCall();
-               }
-       }
-
-       // now we know that the top of stack is a constructorDeclaration
-       ConstructorDeclaration cd = (ConstructorDeclaration) astStack[astPtr];
-       cd.constructorCall = constructorCall;
-       cd.statements = statements;
-
-       //highlight of the implicit call on the method name
-       if (constructorCall != null && cd.constructorCall.sourceEnd == 0) {
-               cd.constructorCall.sourceEnd = cd.sourceEnd;
-               cd.constructorCall.sourceStart = cd.sourceStart;
-       }
-
-       //watch for } that could be given as a unicode ! ( u007D is '}' )
-       // store the endPosition (position just before the '}') in case there is
-       // a trailing comment behind the end of the method
-       cd.bodyEnd = endPosition;
-       cd.declarationSourceEnd = flushAnnotationsDefinedPriorTo(endStatementPosition); 
-}
+      case 127 : // System.out.println("ForceNoDiet ::=");
+        consumeForceNoDiet();
+        break;
 
-protected void consumeInvalidConstructorDeclaration() {
-       // ConstructorDeclaration ::= ConstructorHeader ';'
-       // now we know that the top of stack is a constructorDeclaration
-       ConstructorDeclaration cd = (ConstructorDeclaration) astStack[astPtr];
+      case 128 : // System.out.println("RestoreDiet ::=");
+        consumeRestoreDiet();
+        break;
 
-       cd.bodyEnd = endPosition; // position just before the trailing semi-colon
-       cd.declarationSourceEnd = flushAnnotationsDefinedPriorTo(endStatementPosition); 
-       // report the problem and continue the parsing - narrowing the problem onto the method
-}
-protected void consumeConstructorHeader() {
-       // ConstructorHeader ::= ConstructorHeaderName MethodHeaderParameters MethodHeaderThrowsClauseopt
-
-       AbstractMethodDeclaration method = (AbstractMethodDeclaration)astStack[astPtr];
-
-       if (currentToken == TokenNameLBRACE){ 
-               method.bodyStart = scanner.currentPosition;
-       }
-       // recovery
-       if (currentElement != null){
-               restartRecovery = true; // used to avoid branching back into the regular automaton
-       }               
-}
-protected void consumeConstructorHeaderName() {
-
-       /* recovering - might be an empty message send */
-       if (currentElement != null){
-               if (lastIgnoredToken == TokenNamenew){ // was an allocation expression
-                       lastCheckPoint = scanner.startPosition; // force to restart at this exact position                              
-                       restartRecovery = true;
-                       return;
-               }
-       }
-       
-       // ConstructorHeaderName ::=  Modifiersopt 'Identifier' '('
-       ConstructorDeclaration cd = new ConstructorDeclaration(this.compilationUnit.compilationResult);
-
-       //name -- this is not really revelant but we do .....
-       cd.selector = identifierStack[identifierPtr];
-       long selectorSource = identifierPositionStack[identifierPtr--];
-       identifierLengthPtr--;
-
-       //modifiers
-       cd.declarationSourceStart = intStack[intPtr--];
-       cd.modifiers = intStack[intPtr--];
-
-       //highlight starts at the selector starts
-       cd.sourceStart = (int) (selectorSource >>> 32);
-       pushOnAstStack(cd);
-       cd.sourceEnd = lParenPos;
-       cd.bodyStart = lParenPos+1;
-       listLength = 0; // initialize listLength before reading parameters/throws
-
-       // recovery
-       if (currentElement != null){
-               lastCheckPoint = cd.bodyStart;
-               if ((currentElement instanceof RecoveredType && lastIgnoredToken != TokenNameDOT)
-                       || cd.modifiers != 0){
-                       currentElement = currentElement.add(cd, 0);
-                       lastIgnoredToken = -1;
-               }
-       }       
-}
-protected void consumeDefaultLabel() {
-       // SwitchLabel ::= 'default' ':'
-       pushOnAstStack(new DefaultCase(intStack[intPtr--], intStack[intPtr--]));
-}
-protected void consumeDefaultModifiers() {
-       checkAnnotation(); // might update modifiers with AccDeprecated
-       pushOnIntStack(modifiers); // modifiers
-       pushOnIntStack(
-               modifiersSourceStart >= 0 ? modifiersSourceStart : scanner.startPosition); 
-       resetModifiers();
-}
-protected void consumeDiet() {
-       // Diet ::= $empty
-       checkAnnotation();
-       pushOnIntStack(modifiersSourceStart); // push the start position of a javadoc comment if there is one
-       jumpOverMethodBody();
-}
-protected void consumeDims() {
-       // Dims ::= DimsLoop
-       pushOnIntStack(dimensions);
-       dimensions = 0;
-}
-protected void consumeDimWithOrWithOutExpr() {
-       // DimWithOrWithOutExpr ::= '[' ']'
-       pushOnExpressionStack(null);
-}
-protected void consumeDimWithOrWithOutExprs() {
-       // DimWithOrWithOutExprs ::= DimWithOrWithOutExprs DimWithOrWithOutExpr
-       concatExpressionLists();
-}
-protected void consumeEmptyArgumentListopt() {
-       // ArgumentListopt ::= $empty
-       pushOnExpressionStackLengthStack(0);
-}
-protected void consumeEmptyArrayInitializer() {
-       // ArrayInitializer ::= '{' ,opt '}'
-       arrayInitializer(0);
-}
-protected void consumeEmptyArrayInitializeropt() {
-       // ArrayInitializeropt ::= $empty
-       pushOnExpressionStackLengthStack(0);
-}
-protected void consumeEmptyBlockStatementsopt() {
-       // BlockStatementsopt ::= $empty
-       pushOnAstLengthStack(0);
-}
-protected void consumeEmptyCatchesopt() {
-       // Catchesopt ::= $empty
-       pushOnAstLengthStack(0);
-}
-protected void consumeEmptyClassBodyDeclarationsopt() {
-       // ClassBodyDeclarationsopt ::= $empty
-       pushOnAstLengthStack(0);
-}
-protected void consumeEmptyClassMemberDeclaration() {
-       // ClassMemberDeclaration ::= ';'
-       pushOnAstLengthStack(0);
-}
-protected void consumeEmptyDimsopt() {
-       // Dimsopt ::= $empty
-       pushOnIntStack(0);
-}
-protected void consumeEmptyExpression() {
-       // Expressionopt ::= $empty
-       pushOnExpressionStackLengthStack(0);
-}
-protected void consumeEmptyForInitopt() {
-       // ForInitopt ::= $empty
-       pushOnAstLengthStack(0);
-}
-protected void consumeEmptyForUpdateopt() {
-       // ForUpdateopt ::= $empty
-       pushOnExpressionStackLengthStack(0);
-}
-protected void consumeEmptyImportDeclarationsopt() {
-       // ImportDeclarationsopt ::= $empty
-       pushOnAstLengthStack(0);
-}
-protected void consumeEmptyInterfaceMemberDeclaration() {
-       // InterfaceMemberDeclaration ::= ';'
-       pushOnAstLengthStack(0);
-}
-protected void consumeEmptyInterfaceMemberDeclarationsopt() {
-       // InterfaceMemberDeclarationsopt ::= $empty
-       pushOnAstLengthStack(0);
-}
-protected void consumeEmptyStatement() {
-       // EmptyStatement ::= ';'
-       if (this.scanner.source[endStatementPosition] == ';') {
-               pushOnAstStack(new EmptyStatement(endStatementPosition, endStatementPosition));
-       } else {
-               // we have a Unicode for the ';' (/u003B)
-               pushOnAstStack(new EmptyStatement(endStatementPosition - 5, endStatementPosition));
-       }
-}
-protected void consumeEmptySwitchBlock() {
-       // SwitchBlock ::= '{' '}'
-       pushOnAstLengthStack(0);
-}
-protected void consumeEmptyTypeDeclaration() {
-       // TypeDeclaration ::= ';' 
-       pushOnAstLengthStack(0);
-}
-protected void consumeEmptyTypeDeclarationsopt() {
-       // TypeDeclarationsopt ::= $empty
-       pushOnAstLengthStack(0); 
-}
-protected void consumeEnterAnonymousClassBody() {
-       // EnterAnonymousClassBody ::= $empty
-       QualifiedAllocationExpression alloc;
-       AnonymousLocalTypeDeclaration anonymousType = 
-               new AnonymousLocalTypeDeclaration(this.compilationUnit.compilationResult); 
-       alloc = 
-               anonymousType.allocation = new QualifiedAllocationExpression(anonymousType); 
-       markCurrentMethodWithLocalType();
-       pushOnAstStack(anonymousType);
-
-       alloc.sourceEnd = rParenPos; //the position has been stored explicitly
-       int argumentLength;
-       if ((argumentLength = expressionLengthStack[expressionLengthPtr--]) != 0) {
-               expressionPtr -= argumentLength;
-               System.arraycopy(
-                       expressionStack, 
-                       expressionPtr + 1, 
-                       alloc.arguments = new Expression[argumentLength], 
-                       0, 
-                       argumentLength); 
-       }
-       alloc.type = getTypeReference(0);
-
-       anonymousType.sourceEnd = alloc.sourceEnd;
-       //position at the type while it impacts the anonymous declaration
-       anonymousType.sourceStart = anonymousType.declarationSourceStart = alloc.type.sourceStart;
-       alloc.sourceStart = intStack[intPtr--];
-       pushOnExpressionStack(alloc);
-
-       anonymousType.bodyStart = scanner.currentPosition;      
-       listLength = 0; // will be updated when reading super-interfaces
-       // recovery
-       if (currentElement != null){ 
-               lastCheckPoint = anonymousType.bodyStart;
-               // the recoveryTokenCheck will deal with the open brace         
-               currentElement = currentElement.add(anonymousType, 0);
-               currentToken = 0; // opening brace already taken into account
-               lastIgnoredToken = -1;
-       }       
-}
-protected void consumeEnterCompilationUnit() {
-       // EnterCompilationUnit ::= $empty
-       // do nothing by default
-}
-protected void consumeEnterVariable() {
-       // EnterVariable ::= $empty
-       // do nothing by default
-
-       char[] name = identifierStack[identifierPtr];
-       long namePosition = identifierPositionStack[identifierPtr];
-       int extendedDimension = intStack[intPtr--];
-       AbstractVariableDeclaration declaration;
-       // create the ast node
-       boolean isLocalDeclaration = nestedMethod[nestedType] != 0; 
-       if (isLocalDeclaration) {
-               // create the local variable declarations
-               declaration = 
-                       this.createLocalDeclaration(null, name, (int) (namePosition >>> 32), (int) namePosition);
-       } else {
-               // create the field declaration
-               declaration = 
-                       this.createFieldDeclaration(null, name, (int) (namePosition >>> 32), (int) namePosition); 
-       }
-       
-       identifierPtr--;
-       identifierLengthPtr--;
-       TypeReference type;
-       int variableIndex = variablesCounter[nestedType];
-       int typeDim = 0;
-       if (variableIndex == 0) {
-               // first variable of the declaration (FieldDeclaration or LocalDeclaration)
-               if (isLocalDeclaration) {
-                       declaration.declarationSourceStart = intStack[intPtr--];
-                       declaration.modifiers = intStack[intPtr--];
-                       type = getTypeReference(typeDim = intStack[intPtr--]); // type dimension
-                       if (declaration.declarationSourceStart == -1) {
-                               // this is true if there is no modifiers for the local variable declaration
-                               declaration.declarationSourceStart = type.sourceStart;
-                       }
-                       pushOnAstStack(type);
-               } else {
-                       type = getTypeReference(typeDim = intStack[intPtr--]); // type dimension
-                       pushOnAstStack(type);
-                       declaration.declarationSourceStart = intStack[intPtr--];
-                       declaration.modifiers = intStack[intPtr--];
-               }
-       } else {
-               type = (TypeReference) astStack[astPtr - variableIndex];
-               typeDim = type.dimensions();
-               AbstractVariableDeclaration previousVariable = 
-                       (AbstractVariableDeclaration) astStack[astPtr]; 
-               declaration.declarationSourceStart = previousVariable.declarationSourceStart;
-               declaration.modifiers = previousVariable.modifiers;
-       }
-
-       if (extendedDimension == 0) {
-               declaration.type = type;
-       } else {
-               int dimension = typeDim + extendedDimension;
-               //on the identifierLengthStack there is the information about the type....
-               int baseType;
-               if ((baseType = identifierLengthStack[identifierLengthPtr + 1]) < 0) {
-                       //it was a baseType
-                       int typeSourceStart = type.sourceStart;
-                       int typeSourceEnd = type.sourceEnd;
-                       type = TypeReference.baseTypeReference(-baseType, dimension);
-                       type.sourceStart = typeSourceStart;
-                       type.sourceEnd = typeSourceEnd;
-                       declaration.type = type;
-               } else {
-                       declaration.type = this.copyDims(type, dimension);
-               }
-       }
-       variablesCounter[nestedType]++;
-       pushOnAstStack(declaration);
-       // recovery
-       if (currentElement != null) {
-               if (!(currentElement instanceof RecoveredType)
-                       && (currentToken == TokenNameDOT
-                               //|| declaration.modifiers != 0
-                               || (scanner.getLineNumber(declaration.type.sourceStart)
-                                               != scanner.getLineNumber((int) (namePosition >>> 32))))){
-                       lastCheckPoint = (int) (namePosition >>> 32);
-                       restartRecovery = true;
-                       return;
-               }
-               if (isLocalDeclaration){
-                       LocalDeclaration localDecl = (LocalDeclaration) astStack[astPtr];
-                       lastCheckPoint = localDecl.sourceEnd + 1;
-                       currentElement = currentElement.add(localDecl, 0);
-               } else {
-                       FieldDeclaration fieldDecl = (FieldDeclaration) astStack[astPtr];
-                       lastCheckPoint = fieldDecl.sourceEnd + 1;
-                       currentElement = currentElement.add(fieldDecl, 0);
-               }
-               lastIgnoredToken = -1;
-       }
-}
-protected void consumeEqualityExpression(int op) {
-       // EqualityExpression ::= EqualityExpression '==' RelationalExpression
-       // EqualityExpression ::= EqualityExpression '!=' RelationalExpression
-
-       //optimize the push/pop
-
-       expressionPtr--;
-       expressionLengthPtr--;
-       expressionStack[expressionPtr] =
-               new EqualExpression(
-                       expressionStack[expressionPtr],
-                       expressionStack[expressionPtr + 1],
-                       op);
-}
-protected void consumeExitVariableWithInitialization() {
-       // ExitVariableWithInitialization ::= $empty
-       // do nothing by default
-       expressionLengthPtr--;
-       AbstractVariableDeclaration variableDecl = (AbstractVariableDeclaration) astStack[astPtr];
-       variableDecl.initialization = expressionStack[expressionPtr--];
-       // we need to update the declarationSourceEnd of the local variable declaration to the
-       // source end position of the initialization expression
-       variableDecl.declarationSourceEnd = variableDecl.initialization.sourceEnd;
-       variableDecl.declarationEnd = variableDecl.initialization.sourceEnd;
-}
-protected void consumeExitVariableWithoutInitialization() {
-       // ExitVariableWithoutInitialization ::= $empty
-       // do nothing by default
-}
-protected void consumeExplicitConstructorInvocation(int flag, int recFlag) {
-
-       /* flag allows to distinguish 3 cases :
-       (0) :   
-       ExplicitConstructorInvocation ::= 'this' '(' ArgumentListopt ')' ';'
-       ExplicitConstructorInvocation ::= 'super' '(' ArgumentListopt ')' ';'
-       (1) :
-       ExplicitConstructorInvocation ::= Primary '.' 'super' '(' ArgumentListopt ')' ';'
-       ExplicitConstructorInvocation ::= Primary '.' 'this' '(' ArgumentListopt ')' ';'
-       (2) :
-       ExplicitConstructorInvocation ::= Name '.' 'super' '(' ArgumentListopt ')' ';'
-       ExplicitConstructorInvocation ::= Name '.' 'this' '(' ArgumentListopt ')' ';'
-       */
-       int startPosition = intStack[intPtr--];
-       ExplicitConstructorCall ecc = new ExplicitConstructorCall(recFlag);
-       int length;
-       if ((length = expressionLengthStack[expressionLengthPtr--]) != 0) {
-               expressionPtr -= length;
-               System.arraycopy(expressionStack, expressionPtr + 1, ecc.arguments = new Expression[length], 0, length);
-       }
-       switch (flag) {
-               case 0 :
-                       ecc.sourceStart = startPosition;
-                       break;
-               case 1 :
-                       expressionLengthPtr--;
-                       ecc.sourceStart = (ecc.qualification = expressionStack[expressionPtr--]).sourceStart;
-                       break;
-               case 2 :
-                       ecc.sourceStart = (ecc.qualification = getUnspecifiedReferenceOptimized()).sourceStart;
-                       break;
-       };
-       pushOnAstStack(ecc);
-       ecc.sourceEnd = endPosition;
-}
-protected void consumeExpressionStatement() {
-       // ExpressionStatement ::= StatementExpression ';'
-       expressionLengthPtr--;
-       pushOnAstStack(expressionStack[expressionPtr--]);
-}
-protected void consumeFieldAccess(boolean isSuperAccess) {
-       // FieldAccess ::= Primary '.' 'Identifier'
-       // FieldAccess ::= 'super' '.' 'Identifier'
-
-       FieldReference fr =
-               new FieldReference(
-                       identifierStack[identifierPtr],
-                       identifierPositionStack[identifierPtr--]);
-       identifierLengthPtr--;
-       if (isSuperAccess) {
-               //considerates the fieldReference beginning at the 'super' .... 
-               fr.sourceStart = intStack[intPtr--];
-               fr.receiver = new SuperReference(fr.sourceStart, endPosition);
-               pushOnExpressionStack(fr);
-       } else {
-               //optimize push/pop
-               if ((fr.receiver = expressionStack[expressionPtr]).isThis()) {
-                       //fieldreference begins at the this
-                       fr.sourceStart = fr.receiver.sourceStart;
-               }
-               expressionStack[expressionPtr] = fr;
-       }
-}
-protected void consumeFieldDeclaration() {
-       // See consumeLocalVariableDeclarationDefaultModifier() in case of change: duplicated code
-       // FieldDeclaration ::= Modifiersopt Type VariableDeclarators ';'
-
-       /*
-       astStack : 
-       expressionStack: Expression Expression ...... Expression
-       identifierStack : type  identifier identifier ...... identifier
-       intStack : typeDim      dim        dim               dim
-        ==>
-       astStack : FieldDeclaration FieldDeclaration ...... FieldDeclaration
-       expressionStack :
-       identifierStack : 
-       intStack : 
-         
-       */
-       int variableDeclaratorsCounter = astLengthStack[astLengthPtr];
-
-       for (int i = variableDeclaratorsCounter - 1; i >= 0; i--) {
-               FieldDeclaration fieldDeclaration = (FieldDeclaration) astStack[astPtr - i];
-               fieldDeclaration.declarationSourceEnd = endStatementPosition; 
-               fieldDeclaration.declarationEnd = endStatementPosition; // semi-colon included
-       }
-       updateSourceDeclarationParts(variableDeclaratorsCounter);
-       int endPos = flushAnnotationsDefinedPriorTo(endStatementPosition);
-       if (endPos != endStatementPosition) {
-               for (int i = 0; i < variableDeclaratorsCounter; i++) {
-                       FieldDeclaration fieldDeclaration = (FieldDeclaration) astStack[astPtr - i];
-                       fieldDeclaration.declarationSourceEnd = endPos;
-               }
-       }
-       // update the astStack, astPtr and astLengthStack
-       int startIndex = astPtr - variablesCounter[nestedType] + 1;
-       System.arraycopy(
-               astStack, 
-               startIndex, 
-               astStack, 
-               startIndex - 1, 
-               variableDeclaratorsCounter); 
-       astPtr--; // remove the type reference
-       astLengthStack[--astLengthPtr] = variableDeclaratorsCounter;
-
-       // recovery
-       if (currentElement != null) {
-               lastCheckPoint = endPos + 1;
-               if (currentElement.parent != null && currentElement instanceof RecoveredField){
-                       currentElement = currentElement.parent;
-               }
-               restartRecovery = true;
-       }
-       variablesCounter[nestedType] = 0;
-}
-protected void consumeForceNoDiet() {
-       // ForceNoDiet ::= $empty
-       dietInt++;
-}
-protected void consumeForInit() {
-       // ForInit ::= StatementExpressionList
-       pushOnAstLengthStack(-1);
-}
-protected void consumeFormalParameter() {
-       // FormalParameter ::= Type VariableDeclaratorId ==> false
-       // FormalParameter ::= Modifiers Type VariableDeclaratorId ==> true
-       /*
-       astStack : 
-       identifierStack : type identifier
-       intStack : dim dim
-        ==>
-       astStack : Argument
-       identifierStack :  
-       intStack :  
-       */
-
-       identifierLengthPtr--;
-       char[] name = identifierStack[identifierPtr];
-       long namePositions = identifierPositionStack[identifierPtr--];
-       TypeReference type = getTypeReference(intStack[intPtr--] + intStack[intPtr--]);
-       int modifierPositions = intStack[intPtr--];
-       intPtr--;
-       Argument arg = 
-               new Argument(
-                       name, 
-                       namePositions, 
-                       type, 
-                       intStack[intPtr + 1] & ~AccDeprecated); // modifiers
-       arg.declarationSourceStart = modifierPositions;
-       pushOnAstStack(arg);
-
-       /* if incomplete method header, listLength counter will not have been reset,
-               indicating that some arguments are available on the stack */
-       listLength++;   
-}
-protected void consumeFormalParameterList() {
-       // FormalParameterList ::= FormalParameterList ',' FormalParameter
-       optimizedConcatNodeLists();
-}
-protected void consumeFormalParameterListopt() {
-       // FormalParameterListopt ::= $empty
-       pushOnAstLengthStack(0);
-}
-protected void consumeImportDeclarations() {
-       // ImportDeclarations ::= ImportDeclarations ImportDeclaration 
-       optimizedConcatNodeLists();
-}
-protected void consumeImportDeclarationsopt() {
-       // ImportDeclarationsopt ::= ImportDeclarations
-       int length;
-       if ((length = astLengthStack[astLengthPtr--]) != 0) {
-               astPtr -= length;
-               System.arraycopy(
-                       astStack,
-                       astPtr + 1,
-                       compilationUnit.imports = new ImportReference[length],
-                       0,
-                       length);
-       }
-}
-protected void consumeInstanceOfExpression(int op) {
-       // RelationalExpression ::= RelationalExpression 'instanceof' ReferenceType
-       //optimize the push/pop
-
-       //by construction, no base type may be used in getTypeReference
-       Expression exp;
-       expressionStack[expressionPtr] = exp =
-               new InstanceOfExpression(
-                       expressionStack[expressionPtr],
-                       getTypeReference(intStack[intPtr--]),
-                       op);
-       if (exp.sourceEnd == 0) {
-               //array on base type....
-               exp.sourceEnd = scanner.startPosition - 1;
-       }
-       //the scanner is on the next token already....
-}
-protected void consumeInterfaceDeclaration() {
-       // see consumeClassDeclaration in case of changes: duplicated code
-       // InterfaceDeclaration ::= InterfaceHeader InterfaceBody
-       int length;
-       if ((length = astLengthStack[astLengthPtr--]) != 0) {
-               //there are length declarations
-               //dispatch.....according to the type of the declarations
-               dispatchDeclarationInto(length);
-       }
-
-       TypeDeclaration typeDecl = (TypeDeclaration) astStack[astPtr];
-       
-       // mark fields and initializer with local type mark if needed
-       markFieldsWithLocalType(typeDecl);
-
-       //convert constructor that do not have the type's name into methods
-       typeDecl.checkConstructors(this);
-       
-       //always add <clinit> (will be remove at code gen time if empty)
-       if (this.scanner.containsAssertKeyword) {
-               typeDecl.bits |= AstNode.AddAssertionMASK;
-       }
-       typeDecl.addClinit();
-       typeDecl.bodyEnd = endStatementPosition;
-       typeDecl.declarationSourceEnd = flushAnnotationsDefinedPriorTo(endStatementPosition); 
-}
-protected void consumeInterfaceHeader() {
-       // InterfaceHeader ::= InterfaceHeaderName InterfaceHeaderExtendsopt
-
-       TypeDeclaration typeDecl = (TypeDeclaration) astStack[astPtr];  
-       if (currentToken == TokenNameLBRACE){ 
-               typeDecl.bodyStart = scanner.currentPosition;
-       }
-       if (currentElement != null){
-               restartRecovery = true; // used to avoid branching back into the regular automaton              
-       }
-       // flush the comments related to the interface header
-       scanner.commentPtr = -1;        
-}
-protected void consumeInterfaceHeaderExtends() {
-       // InterfaceHeaderExtends ::= 'extends' InterfaceTypeList
-       int length = astLengthStack[astLengthPtr--];
-       //super interfaces
-       astPtr -= length;
-       TypeDeclaration typeDecl = (TypeDeclaration) astStack[astPtr];
-       System.arraycopy(
-               astStack, 
-               astPtr + 1, 
-               typeDecl.superInterfaces = new TypeReference[length], 
-               0, 
-               length); 
-       typeDecl.bodyStart = typeDecl.superInterfaces[length-1].sourceEnd + 1;          
-       listLength = 0; // reset after having read super-interfaces             
-       // recovery
-       if (currentElement != null) { 
-               lastCheckPoint = typeDecl.bodyStart;
-       }
-}
-protected void consumeInterfaceHeaderName() {
-       // InterfaceHeaderName ::= Modifiersopt 'interface' 'Identifier'
-       TypeDeclaration typeDecl;
-       if (nestedMethod[nestedType] == 0) {
-               if (nestedType != 0) {
-                       typeDecl = new MemberTypeDeclaration(this.compilationUnit.compilationResult);
-               } else {
-                       typeDecl = new TypeDeclaration(this.compilationUnit.compilationResult);
-               }
-       } else {
-               // Record that the block has a declaration for local types
-               typeDecl = new LocalTypeDeclaration(this.compilationUnit.compilationResult);
-               markCurrentMethodWithLocalType();
-               blockReal();
-       }
-
-       //highlight the name of the type
-       long pos = identifierPositionStack[identifierPtr];
-       typeDecl.sourceEnd = (int) pos;
-       typeDecl.sourceStart = (int) (pos >>> 32);
-       typeDecl.name = identifierStack[identifierPtr--];
-       identifierLengthPtr--;
-
-       //compute the declaration source too
-       // 'class' and 'interface' push two int positions: the beginning of the class token and its end.
-       // we want to keep the beginning position but get rid of the end position
-       // it is only used for the ClassLiteralAccess positions.
-       typeDecl.declarationSourceStart = intStack[intPtr--];
-       intPtr--; // remove the end position of the class token
-       typeDecl.modifiersSourceStart = intStack[intPtr--];
-       typeDecl.modifiers = intStack[intPtr--];
-       if (typeDecl.modifiersSourceStart >= 0) {
-               typeDecl.declarationSourceStart = typeDecl.modifiersSourceStart;
-       }
-       typeDecl.bodyStart = typeDecl.sourceEnd + 1;
-       pushOnAstStack(typeDecl);
-       listLength = 0; // will be updated when reading super-interfaces
-       // recovery
-       if (currentElement != null){ // is recovering
-               lastCheckPoint = typeDecl.bodyStart;
-               currentElement = currentElement.add(typeDecl, 0);
-               lastIgnoredToken = -1;          
-       }
-}
-protected void consumeInterfaceMemberDeclarations() {
-       // InterfaceMemberDeclarations ::= InterfaceMemberDeclarations InterfaceMemberDeclaration
-       concatNodeLists();
-}
-protected void consumeInterfaceMemberDeclarationsopt() {
-       // InterfaceMemberDeclarationsopt ::= NestedType InterfaceMemberDeclarations
-       nestedType--;
-}
-protected void consumeInterfaceType() {
-       // InterfaceType ::= ClassOrInterfaceType
-       pushOnAstStack(getTypeReference(0));
-       /* if incomplete type header, listLength counter will not have been reset,
-               indicating that some interfaces are available on the stack */
-       listLength++;   
-}
-protected void consumeInterfaceTypeList() {
-       // InterfaceTypeList ::= InterfaceTypeList ',' InterfaceType
-       optimizedConcatNodeLists();
-}
-protected void consumeLeftHandSide() {
-       // LeftHandSide ::= Name
+      case 133 : // System.out.println("MethodDeclaration ::= MethodHeader MethodBody");
+        // set to true to consume a method with a body
+        consumeMethodDeclaration(true);
+        break;
+
+      case 134 : // System.out.println("AbstractMethodDeclaration ::= MethodHeader SEMICOLON");
+        // set to false to consume a method without body
+        consumeMethodDeclaration(false);
+        break;
+
+      case 135 : // System.out.println("MethodHeader ::= MethodHeaderName MethodHeaderParameters MethodHeaderExtendedDims");
+        consumeMethodHeader();
+        break;
+
+      case 136 : // System.out.println("MethodPushModifiersHeader ::= MethodPushModifiersHeaderName MethodHeaderParameters");
+        consumeMethodHeader();
+        break;
+
+      case 137 : // System.out.println("MethodPushModifiersHeaderName ::= Modifiers Type PushModifiers Identifier LPAREN");
+        consumeMethodPushModifiersHeaderName();
+        break;
+
+      case 138 : // System.out.println("MethodPushModifiersHeaderName ::= Type PushModifiers Identifier LPAREN");
+        consumeMethodPushModifiersHeaderName();
+        break;
+
+      case 139 : // System.out.println("MethodHeaderName ::= Modifiersopt Type Identifier LPAREN");
+        consumeMethodHeaderName();
+        break;
+
+      case 140 : // System.out.println("MethodHeaderParameters ::= FormalParameterListopt RPAREN");
+        consumeMethodHeaderParameters();
+        break;
+
+      case 141 : // System.out.println("MethodHeaderExtendedDims ::= Dimsopt");
+        consumeMethodHeaderExtendedDims();
+        break;
+
+      case 142 : // System.out.println("MethodHeaderThrowsClause ::= throws ClassTypeList");
+        consumeMethodHeaderThrowsClause();
+        break;
+
+      case 143 : // System.out.println("ConstructorHeader ::= ConstructorHeaderName MethodHeaderParameters...");
+        consumeConstructorHeader();
+        break;
+
+      case 144 : // System.out.println("ConstructorHeaderName ::= Modifiersopt Identifier LPAREN");
+        consumeConstructorHeaderName();
+        break;
+
+      case 146 : // System.out.println("FormalParameterList ::= FormalParameterList COMMA FormalParameter");
+        consumeFormalParameterList();
+        break;
+
+      case 147 : // System.out.println("FormalParameter ::= Modifiersopt Type VariableDeclaratorId");
+        // the boolean is used to know if the modifiers should be reset
+        consumeFormalParameter();
+        break;
 
-       pushOnExpressionStack(getUnspecifiedReferenceOptimized());
-}
-protected void consumeLeftParen() {
-       // PushLPAREN ::= '('
-       pushOnIntStack(lParenPos);
-}
-protected void consumeLocalVariableDeclaration() {
-       // LocalVariableDeclaration ::= Modifiers Type VariableDeclarators ';'
-
-       /*
-       astStack : 
-       expressionStack: Expression Expression ...... Expression
-       identifierStack : type  identifier identifier ...... identifier
-       intStack : typeDim      dim        dim               dim
-        ==>
-       astStack : FieldDeclaration FieldDeclaration ...... FieldDeclaration
-       expressionStack :
-       identifierStack : 
-       intStack : 
-         
-       */
-       int variableDeclaratorsCounter = astLengthStack[astLengthPtr];
-
-       // update the astStack, astPtr and astLengthStack
-       int startIndex = astPtr - variablesCounter[nestedType] + 1;
-       System.arraycopy(
-               astStack, 
-               startIndex, 
-               astStack, 
-               startIndex - 1, 
-               variableDeclaratorsCounter); 
-       astPtr--; // remove the type reference
-       astLengthStack[--astLengthPtr] = variableDeclaratorsCounter;
-       variablesCounter[nestedType] = 0;
-}
-protected void consumeLocalVariableDeclarationStatement() {
-       // LocalVariableDeclarationStatement ::= LocalVariableDeclaration ';'
-       // see blockReal in case of change: duplicated code
-       // increment the amount of declared variables for this block
-       realBlockStack[realBlockPtr]++;
-}
-protected void consumeMethodBody() {
-       // MethodBody ::= NestedMethod '{' BlockStatementsopt '}' 
-       nestedMethod[nestedType] --;
-}
-protected void consumeMethodDeclaration(boolean isNotAbstract) {
-       // MethodDeclaration ::= MethodHeader MethodBody
-       // AbstractMethodDeclaration ::= MethodHeader ';'
-
-       /*
-       astStack : modifiers arguments throws statements
-       identifierStack : type name
-       intStack : dim dim dim
-        ==>
-       astStack : MethodDeclaration
-       identifierStack :
-       intStack : 
-       */
-
-       int length;
-       if (isNotAbstract) {
-               // pop the position of the {  (body of the method) pushed in block decl
-               intPtr--;
-       }
-
-       int explicitDeclarations = 0;
-       Statement[] statements = null;
-       if (isNotAbstract) {
-               //statements
-               explicitDeclarations = realBlockStack[realBlockPtr--];
-               if ((length = astLengthStack[astLengthPtr--]) != 0)
-                       System.arraycopy(
-                               astStack, 
-                               (astPtr -= length) + 1, 
-                               statements = new Statement[length], 
-                               0, 
-                               length); 
-       }
-
-       // now we know that we have a method declaration at the top of the ast stack
-       MethodDeclaration md = (MethodDeclaration) astStack[astPtr];
-       md.statements = statements;
-       md.explicitDeclarations = explicitDeclarations;
-
-       // cannot be done in consumeMethodHeader because we have no idea whether or not there
-       // is a body when we reduce the method header
-       if (!isNotAbstract) { //remember the fact that the method has a semicolon body
-               md.modifiers |= AccSemicolonBody;
-       }
-       // store the endPosition (position just before the '}') in case there is
-       // a trailing comment behind the end of the method
-       md.bodyEnd = endPosition;
-       md.declarationSourceEnd = flushAnnotationsDefinedPriorTo(endStatementPosition);
-}
-protected void consumeMethodHeader() {
-       // MethodHeader ::= MethodHeaderName MethodHeaderParameters MethodHeaderExtendedDims ThrowsClauseopt
-       // retrieve end position of method declarator
-       AbstractMethodDeclaration method = (AbstractMethodDeclaration)astStack[astPtr];
-
-       if (currentToken == TokenNameLBRACE){ 
-               method.bodyStart = scanner.currentPosition;
-       }
-       // recovery
-       if (currentElement != null){
-               if (currentToken == TokenNameSEMICOLON){
-                       method.modifiers |= AccSemicolonBody;                   
-                       method.declarationSourceEnd = scanner.currentPosition-1;
-                       method.bodyEnd = scanner.currentPosition-1;
-                       if (currentElement.parent != null){
-                               currentElement = currentElement.parent;
-                       }
-               }               
-               restartRecovery = true; // used to avoid branching back into the regular automaton
-       }               
-}
-protected void consumeMethodHeaderExtendedDims() {
-       // MethodHeaderExtendedDims ::= Dimsopt
-       // now we update the returnType of the method
-       MethodDeclaration md = (MethodDeclaration) astStack[astPtr];
-       int extendedDims = intStack[intPtr--];
-       if (extendedDims != 0) {
-               TypeReference returnType = md.returnType;
-               md.sourceEnd = endPosition;
-               int dims = returnType.dimensions() + extendedDims;
-               int baseType;
-               if ((baseType = identifierLengthStack[identifierLengthPtr + 1]) < 0) {
-                       //it was a baseType
-                       int sourceStart = returnType.sourceStart;
-                       int sourceEnd =  returnType.sourceEnd;
-                       returnType = TypeReference.baseTypeReference(-baseType, dims);
-                       returnType.sourceStart = sourceStart;
-                       returnType.sourceEnd = sourceEnd;
-                       md.returnType = returnType;
-               } else {
-                       md.returnType = this.copyDims(md.returnType, dims);
-               }
-               if (currentToken == TokenNameLBRACE){ 
-                       md.bodyStart = endPosition + 1;
-               }
-               // recovery
-               if (currentElement != null){
-                       lastCheckPoint = md.bodyStart;
-               }               
-       }
-}
-protected void consumeMethodHeaderName() {
-       // MethodHeaderName ::= Modifiersopt Type 'Identifier' '('
-       MethodDeclaration md = new MethodDeclaration(this.compilationUnit.compilationResult);
-
-       //name
-       md.selector = identifierStack[identifierPtr];
-       long selectorSource = identifierPositionStack[identifierPtr--];
-       identifierLengthPtr--;
-       //type
-       md.returnType = getTypeReference(intStack[intPtr--]);
-       //modifiers
-       md.declarationSourceStart = intStack[intPtr--];
-       md.modifiers = intStack[intPtr--];
-
-       //highlight starts at selector start
-       md.sourceStart = (int) (selectorSource >>> 32);
-       pushOnAstStack(md);
-       md.sourceEnd = lParenPos;
-       md.bodyStart = lParenPos+1;
-       listLength = 0; // initialize listLength before reading parameters/throws
-       
-       // recovery
-       if (currentElement != null){
-               if (currentElement instanceof RecoveredType 
-                       //|| md.modifiers != 0
-                       || (scanner.getLineNumber(md.returnType.sourceStart)
-                                       == scanner.getLineNumber(md.sourceStart))){
-                       lastCheckPoint = md.bodyStart;
-                       currentElement = currentElement.add(md, 0);
-                       lastIgnoredToken = -1;
-               } else {
-                       lastCheckPoint = md.sourceStart;
-                       restartRecovery = true;
-               }
-       }               
-}
-protected void consumeMethodHeaderParameters() {
-       // MethodHeaderParameters ::= FormalParameterListopt ')'
-       int length = astLengthStack[astLengthPtr--];
-       astPtr -= length;
-       AbstractMethodDeclaration md = (AbstractMethodDeclaration) astStack[astPtr];
-       md.sourceEnd =  rParenPos;
-       //arguments
-       if (length != 0) {
-               System.arraycopy(
-                       astStack, 
-                       astPtr + 1, 
-                       md.arguments = new Argument[length], 
-                       0, 
-                       length); 
-       }
-       md.bodyStart = rParenPos+1;
-       listLength = 0; // reset listLength after having read all parameters
-       // recovery
-       if (currentElement != null){
-               lastCheckPoint = md.bodyStart;
-               if (currentElement.parseTree() == md) return;
-
-               // might not have been attached yet - in some constructor scenarii
-               if (md.isConstructor()){
-                       if ((length != 0)
-                               || (currentToken == TokenNameLBRACE) 
-                               // || (currentToken == TokenNamethrows)
-        ){
-                               currentElement = currentElement.add(md, 0);
-                               lastIgnoredToken = -1;
-                       }       
-               }       
-       }       
-}
-protected void consumeMethodHeaderThrowsClause() {
-       // MethodHeaderThrowsClause ::= 'throws' ClassTypeList
-       int length = astLengthStack[astLengthPtr--];
-       astPtr -= length;
-       AbstractMethodDeclaration md = (AbstractMethodDeclaration) astStack[astPtr];
-       System.arraycopy(
-               astStack, 
-               astPtr + 1, 
-               md.thrownExceptions = new TypeReference[length], 
-               0, 
-               length);
-       md.sourceEnd =  md.thrownExceptions[length-1].sourceEnd;
-       md.bodyStart = md.thrownExceptions[length-1].sourceEnd + 1;
-       listLength = 0; // reset listLength after having read all thrown exceptions     
-       // recovery
-       if (currentElement != null){
-               lastCheckPoint = md.bodyStart;
-       }               
-}
-protected void consumeMethodInvocationName() {
-       // MethodInvocation ::= Name '(' ArgumentListopt ')'
-
-       // when the name is only an identifier...we have a message send to "this" (implicit)
-
-       MessageSend m = newMessageSend();
-       m.sourceEnd = rParenPos;
-       m.sourceStart = 
-               (int) ((m.nameSourcePosition = identifierPositionStack[identifierPtr]) >>> 32); 
-       m.selector = identifierStack[identifierPtr--];
-       if (identifierLengthStack[identifierLengthPtr] == 1) {
-               m.receiver = ThisReference.ThisImplicit;
-               identifierLengthPtr--;
-       } else {
-               identifierLengthStack[identifierLengthPtr]--;
-               m.receiver = getUnspecifiedReference();
-               m.sourceStart = m.receiver.sourceStart;         
-       }
-       pushOnExpressionStack(m);
-}
-protected void consumeMethodInvocationPrimary() {
-       //optimize the push/pop
-       //MethodInvocation ::= Primary '.' 'Identifier' '(' ArgumentListopt ')'
-
-       MessageSend m = newMessageSend();
-       m.sourceStart = 
-               (int) ((m.nameSourcePosition = identifierPositionStack[identifierPtr]) >>> 32); 
-       m.selector = identifierStack[identifierPtr--];
-       identifierLengthPtr--;
-       m.receiver = expressionStack[expressionPtr];
-       m.sourceStart = m.receiver.sourceStart;
-       m.sourceEnd = rParenPos;
-       expressionStack[expressionPtr] = m;
-}
-protected void consumeMethodInvocationSuper() {
-       // MethodInvocation ::= 'super' '.' 'Identifier' '(' ArgumentListopt ')'
-
-       MessageSend m = newMessageSend();
-       m.sourceStart = intStack[intPtr--];
-       m.sourceEnd = rParenPos;
-       m.nameSourcePosition = identifierPositionStack[identifierPtr];
-       m.selector = identifierStack[identifierPtr--];
-       identifierLengthPtr--;
-       m.receiver = new SuperReference(m.sourceStart, endPosition);
-       pushOnExpressionStack(m);
-}
-protected void consumeMethodPushModifiersHeaderName() {
-       // MethodPushModifiersHeaderName ::= Modifiers Type PushModifiers 'Identifier' '('
-       // MethodPushModifiersHeaderName ::= Type PushModifiers 'Identifier' '(' 
-       MethodDeclaration md = new MethodDeclaration(this.compilationUnit.compilationResult);
-
-       //name
-       md.selector = identifierStack[identifierPtr];
-       long selectorSource = identifierPositionStack[identifierPtr--];
-       identifierLengthPtr--;
-
-       //modifiers
-       md.declarationSourceStart = intStack[intPtr--];
-       md.modifiers = intStack[intPtr--];
-
-       //type
-       md.returnType = getTypeReference(intStack[intPtr--]);
-
-       //highlight starts at selector start
-       md.sourceStart = (int) (selectorSource >>> 32);
-       pushOnAstStack(md);
-       md.sourceEnd = lParenPos;
-       md.bodyStart = lParenPos + 1;
-       listLength = 0; // initialize listLength before reading parameters/throws
-
-       // recovery
-       if (currentElement != null) {
-               lastCheckPoint = md.bodyStart;
-               currentElement = currentElement.add(md, 0);
-               lastIgnoredToken = -1;          
-       }
-}
-protected void consumeModifiers() {
-       int savedModifiersSourceStart = modifiersSourceStart;   
-       checkAnnotation(); // might update modifiers with AccDeprecated
-       pushOnIntStack(modifiers); // modifiers
-       if (modifiersSourceStart >= savedModifiersSourceStart) {
-               modifiersSourceStart = savedModifiersSourceStart;
-       }
-       pushOnIntStack(modifiersSourceStart);
-       resetModifiers();
-}
-protected void consumeNestedMethod() {
-       // NestedMethod ::= $empty
-       jumpOverMethodBody();
-       nestedMethod[nestedType] ++;
-       consumeOpenBlock();
-}
-protected void consumeNestedType() {
-       // NestedType ::= $empty
-       nestedType++;
-       try {
-               nestedMethod[nestedType] = 0;
-       } catch (IndexOutOfBoundsException e) {
-               //except in test's cases, it should never raise
-               int oldL = nestedMethod.length;
-               System.arraycopy(nestedMethod , 0, (nestedMethod = new int[oldL + 30]), 0, oldL);
-               nestedMethod[nestedType] = 0;
-               // increase the size of the fieldsCounter as well. It has to be consistent with the size of the nestedMethod collection
-               System.arraycopy(variablesCounter, 0, (variablesCounter = new int[oldL + 30]), 0, oldL);
-       }
-       variablesCounter[nestedType] = 0;
-}
-protected void consumeOneDimLoop() {
-       // OneDimLoop ::= '[' ']'
-       dimensions++;
-}
-protected void consumeOnlySynchronized() {
-       // OnlySynchronized ::= 'synchronized'
-       pushOnIntStack(this.synchronizedBlockSourceStart);
-       resetModifiers();
-}
-protected void consumeOpenBlock() {
-       // OpenBlock ::= $empty
-
-       pushOnIntStack(scanner.startPosition);
-       try {
-               realBlockStack[++realBlockPtr] = 0;
-       } catch (IndexOutOfBoundsException e) {
-               //realBlockPtr is correct 
-               int oldStackLength = realBlockStack.length;
-               int oldStack[] = realBlockStack;
-               realBlockStack = new int[oldStackLength + StackIncrement];
-               System.arraycopy(oldStack, 0, realBlockStack, 0, oldStackLength);
-               realBlockStack[realBlockPtr] = 0;
-       }
-}
-protected void consumePackageDeclaration() {
-       // PackageDeclaration ::= 'package' Name ';'
-       /* build an ImportRef build from the last name 
-       stored in the identifier stack. */
-
-       ImportReference impt = compilationUnit.currentPackage;
-       // flush annotations defined prior to import statements
-       impt.declarationEnd = endStatementPosition;
-       impt.declarationSourceEnd = this.flushAnnotationsDefinedPriorTo(impt.declarationSourceEnd);
-}
-protected void consumePackageDeclarationName() {
-       // PackageDeclarationName ::= 'package' Name
-       /* build an ImportRef build from the last name 
-       stored in the identifier stack. */
-
-       ImportReference impt;
-       int length;
-       char[][] tokens = 
-               new char[length = identifierLengthStack[identifierLengthPtr--]][]; 
-       identifierPtr -= length;
-       long[] positions = new long[length];
-       System.arraycopy(identifierStack, ++identifierPtr, tokens, 0, length);
-       System.arraycopy(
-               identifierPositionStack, 
-               identifierPtr--, 
-               positions, 
-               0, 
-               length); 
-       compilationUnit.currentPackage = 
-               impt = new ImportReference(tokens, positions, true); 
-
-       if (currentToken == TokenNameSEMICOLON){
-               impt.declarationSourceEnd = scanner.currentPosition - 1;
-       } else {
-               impt.declarationSourceEnd = impt.sourceEnd;
-       }
-       impt.declarationEnd = impt.declarationSourceEnd;
-       //endPosition is just before the ;
-       impt.declarationSourceStart = intStack[intPtr--];
-
-       // recovery
-       if (currentElement != null){
-               lastCheckPoint = impt.declarationSourceEnd+1;
-               restartRecovery = true; // used to avoid branching back into the regular automaton              
-       }       
-}
-protected void consumePostfixExpression() {
-       // PostfixExpression ::= Name
-       pushOnExpressionStack(getUnspecifiedReferenceOptimized());
-}
-protected void consumePrimaryNoNewArray() {
-       // PrimaryNoNewArray ::=  PushLPAREN Expression PushRPAREN 
-       updateSourcePosition(expressionStack[expressionPtr]);
-}
-protected void consumePrimaryNoNewArrayArrayType() {
-       // PrimaryNoNewArray ::= ArrayType '.' 'class'
-       intPtr--;
-       pushOnExpressionStack(
-               new ClassLiteralAccess(intStack[intPtr--],
-               getTypeReference(intStack[intPtr--])));
-}
-protected void consumePrimaryNoNewArrayName() {
-       // PrimaryNoNewArray ::= Name '.' 'class'
-       intPtr--;
-       pushOnExpressionStack(
-               new ClassLiteralAccess(intStack[intPtr--],
-               getTypeReference(0)));
-}
-protected void consumePrimaryNoNewArrayNameSuper() {
-       // PrimaryNoNewArray ::= Name '.' 'super'
-       pushOnExpressionStack(
-               new QualifiedSuperReference(
-                       getTypeReference(0),
-                       intStack[intPtr--],
-                       endPosition));
-}
-protected void consumePrimaryNoNewArrayNameThis() {
-       // PrimaryNoNewArray ::= Name '.' 'this'
-       pushOnExpressionStack(
-               new QualifiedThisReference(
-                       getTypeReference(0),
-                       intStack[intPtr--],
-                       endPosition));
-}
-protected void consumePrimaryNoNewArrayPrimitiveType() {
-       // PrimaryNoNewArray ::= PrimitiveType '.' 'class'
-       intPtr--;
-       pushOnExpressionStack(
-               new ClassLiteralAccess(intStack[intPtr--],
-               getTypeReference(0)));
-}
-protected void consumePrimaryNoNewArrayThis() {
-       // PrimaryNoNewArray ::= 'this'
-       pushOnExpressionStack(new ThisReference(intStack[intPtr--], endPosition));
-}
-protected void consumePrimitiveType() {
-       // Type ::= PrimitiveType
-       pushOnIntStack(0);
-}
-protected void consumePushModifiers() {
-       if ((modifiers & AccSynchronized) != 0) {
-                /* remove the starting position of the synchronized keyword
-                 * we don't need it when synchronized is part of the modifiers
-                 */
-               intPtr--;
-       }
-       pushOnIntStack(modifiers); // modifiers
-       pushOnIntStack(modifiersSourceStart);
-       resetModifiers();
-}
-protected void consumePushPosition() {
-       // for source managment purpose
-       // PushPosition ::= $empty
-       pushOnIntStack(endPosition);
-}
-protected void consumeQualifiedName() {
-       // QualifiedName ::= Name '.' SimpleName 
-       /*back from the recursive loop of QualifiedName.
-       Updates identifier length into the length stack*/
+      case 149 : // System.out.println("ClassTypeList ::= ClassTypeList COMMA ClassTypeElt");
+        consumeClassTypeList();
+        break;
 
-       identifierLengthStack[--identifierLengthPtr]++;
-}
-protected void consumeReferenceType() {
-       // ReferenceType ::= ClassOrInterfaceType
-       pushOnIntStack(0);
-}
-protected void consumeRestoreDiet() {
-       // RestoreDiet ::= $empty
-       dietInt--;
-}
-protected void consumeRightParen() {
-       // PushRPAREN ::= ')'
-       pushOnIntStack(rParenPos);
-}
-       // This method is part of an automatic generation : do NOT edit-modify  
-        // This method is part of an automatic generation : do NOT edit-modify  
-       protected void consumeRule(int act) {
-         switch ( act ) {
-           case 29 : // System.out.println("Type ::= PrimitiveType");
-                           consumePrimitiveType();  
-                               break ;
-        
-           case 43 : // System.out.println("ReferenceType ::= ClassOrInterfaceType");
-                           consumeReferenceType();   
-                               break ;
-        
-           case 52 : // System.out.println("QualifiedName ::= Name DOT SimpleName");
-                           consumeQualifiedName();  
-                               break ;
-        
-           case 53 : // System.out.println("CompilationUnit ::= EnterCompilationUnit PackageDeclarationopt ImportDeclarationsopt");
-                           consumeCompilationUnit();  
-                               break ;
-        
-           case 54 : // System.out.println("EnterCompilationUnit ::=");
-                           consumeEnterCompilationUnit();  
-                               break ;
-        
-           case 66 : // System.out.println("CatchHeader ::= catch LPAREN FormalParameter RPAREN LBRACE");
-                           consumeCatchHeader();  
-                               break ;
-        
-           case 68 : // System.out.println("ImportDeclarations ::= ImportDeclarations ImportDeclaration");
-                           consumeImportDeclarations();  
-                               break ;
-        
-           case 70 : // System.out.println("TypeDeclarations ::= TypeDeclarations TypeDeclaration");
-                           consumeTypeDeclarations();  
-                               break ;
-        
-           case 71 : // System.out.println("PackageDeclaration ::= PackageDeclarationName SEMICOLON");
-                            consumePackageDeclaration();  
-                               break ;
-        
-           case 72 : // System.out.println("PackageDeclarationName ::= package Name");
-                            consumePackageDeclarationName();  
-                               break ;
-        
-           case 75 : // System.out.println("SingleTypeImportDeclaration ::= SingleTypeImportDeclarationName SEMICOLON");
-                           consumeSingleTypeImportDeclaration();  
-                               break ;
-        
-           case 76 : // System.out.println("SingleTypeImportDeclarationName ::= import Name");
-                           consumeSingleTypeImportDeclarationName();  
-                               break ;
-        
-           case 77 : // System.out.println("TypeImportOnDemandDeclaration ::= TypeImportOnDemandDeclarationName SEMICOLON");
-                           consumeTypeImportOnDemandDeclaration();  
-                               break ;
-        
-           case 78 : // System.out.println("TypeImportOnDemandDeclarationName ::= import Name DOT MULTIPLY");
-                           consumeTypeImportOnDemandDeclarationName();  
-                               break ;
-        
-            case 81 : // System.out.println("TypeDeclaration ::= SEMICOLON");
-                           consumeEmptyTypeDeclaration();  
-                               break ;
-        
-           case 95 : // System.out.println("ClassDeclaration ::= ClassHeader ClassBody");
-                           consumeClassDeclaration();  
-                               break ;
-        
-           case 96 : // System.out.println("ClassHeader ::= ClassHeaderName ClassHeaderExtendsopt ClassHeaderImplementsopt");
-                           consumeClassHeader();  
-                               break ;
-        
-           case 97 : // System.out.println("ClassHeaderName ::= Modifiersopt class Identifier");
-                           consumeClassHeaderName();  
-                               break ;
-        
-           case 98 : // System.out.println("ClassHeaderExtends ::= extends ClassType");
-                           consumeClassHeaderExtends();  
-                               break ;
-        
-           case 99 : // System.out.println("ClassHeaderImplements ::= implements InterfaceTypeList");
-                           consumeClassHeaderImplements();  
-                               break ;
-        
-           case 101 : // System.out.println("InterfaceTypeList ::= InterfaceTypeList COMMA InterfaceType");
-                           consumeInterfaceTypeList();  
-                               break ;
-        
-           case 102 : // System.out.println("InterfaceType ::= ClassOrInterfaceType");
-                           consumeInterfaceType();  
-                               break ;
-        
-           case 105 : // System.out.println("ClassBodyDeclarations ::= ClassBodyDeclarations ClassBodyDeclaration");
-                           consumeClassBodyDeclarations();  
-                               break ;
-        
-           case 109 : // System.out.println("ClassBodyDeclaration ::= Diet NestedMethod Block");
-                           consumeClassBodyDeclaration();  
-                               break ;
-        
-           case 110 : // System.out.println("Diet ::=");
-                           consumeDiet();  
-                               break ;
-       
-           case 111 : // System.out.println("Initializer ::= Diet NestedMethod Block");
-                           consumeClassBodyDeclaration();  
-                               break ;
-        
-           case 118 : // System.out.println("ClassMemberDeclaration ::= SEMICOLON");
-                           consumeEmptyClassMemberDeclaration();  
-                               break ;
-       
-           case 119 : // System.out.println("FieldDeclaration ::= Modifiersopt Type VariableDeclarators SEMICOLON");
-                           consumeFieldDeclaration();  
-                               break ;
-        
-           case 121 : // System.out.println("VariableDeclarators ::= VariableDeclarators COMMA VariableDeclarator");
-                           consumeVariableDeclarators();  
-                               break ;
-        
-           case 124 : // System.out.println("EnterVariable ::=");
-                           consumeEnterVariable();  
-                               break ;
-        
-           case 125 : // System.out.println("ExitVariableWithInitialization ::=");
-                           consumeExitVariableWithInitialization();  
-                               break ;
-        
-           case 126 : // System.out.println("ExitVariableWithoutInitialization ::=");
-                           consumeExitVariableWithoutInitialization();  
-                               break ;
-        
-           case 127 : // System.out.println("ForceNoDiet ::=");
-                           consumeForceNoDiet();  
-                               break ;
-        
-           case 128 : // System.out.println("RestoreDiet ::=");
-                           consumeRestoreDiet();  
-                               break ;
-        
-           case 133 : // System.out.println("MethodDeclaration ::= MethodHeader MethodBody");
-                           // set to true to consume a method with a body
-         consumeMethodDeclaration(true);   
-                               break ;
-        
-           case 134 : // System.out.println("AbstractMethodDeclaration ::= MethodHeader SEMICOLON");
-                           // set to false to consume a method without body
-         consumeMethodDeclaration(false);  
-                               break ;
-        
-           case 135 : // System.out.println("MethodHeader ::= MethodHeaderName MethodHeaderParameters MethodHeaderExtendedDims");
-                           consumeMethodHeader();  
-                               break ;
-        
-           case 136 : // System.out.println("MethodPushModifiersHeader ::= MethodPushModifiersHeaderName MethodHeaderParameters");
-                           consumeMethodHeader();  
-                               break ;
-        
-           case 137 : // System.out.println("MethodPushModifiersHeaderName ::= Modifiers Type PushModifiers Identifier LPAREN");
-                           consumeMethodPushModifiersHeaderName();  
-                               break ;
-        
-           case 138 : // System.out.println("MethodPushModifiersHeaderName ::= Type PushModifiers Identifier LPAREN");
-                           consumeMethodPushModifiersHeaderName();  
-                               break ;
-        
-           case 139 : // System.out.println("MethodHeaderName ::= Modifiersopt Type Identifier LPAREN");
-                           consumeMethodHeaderName();  
-                               break ;
-        
-           case 140 : // System.out.println("MethodHeaderParameters ::= FormalParameterListopt RPAREN");
-                           consumeMethodHeaderParameters();  
-                               break ;
-        
-           case 141 : // System.out.println("MethodHeaderExtendedDims ::= Dimsopt");
-                           consumeMethodHeaderExtendedDims();  
-                               break ;
-        
-           case 142 : // System.out.println("MethodHeaderThrowsClause ::= throws ClassTypeList");
-                           consumeMethodHeaderThrowsClause();  
-                               break ;
-        
-           case 143 : // System.out.println("ConstructorHeader ::= ConstructorHeaderName MethodHeaderParameters...");
-                           consumeConstructorHeader();  
-                               break ;
-        
-           case 144 : // System.out.println("ConstructorHeaderName ::= Modifiersopt Identifier LPAREN");
-                           consumeConstructorHeaderName();  
-                               break ;
-        
-           case 146 : // System.out.println("FormalParameterList ::= FormalParameterList COMMA FormalParameter");
-                           consumeFormalParameterList();  
-                               break ;
-        
-           case 147 : // System.out.println("FormalParameter ::= Modifiersopt Type VariableDeclaratorId");
-                           // the boolean is used to know if the modifiers should be reset
-               consumeFormalParameter();  
-                               break ;
-        
-           case 149 : // System.out.println("ClassTypeList ::= ClassTypeList COMMA ClassTypeElt");
-                           consumeClassTypeList();  
-                               break ;
-        
-           case 150 : // System.out.println("ClassTypeElt ::= ClassType");
-                           consumeClassTypeElt();  
-                               break ;
-        
-           case 151 : // System.out.println("MethodBody ::= NestedMethod LBRACE BlockStatementsopt RBRACE");
-                           consumeMethodBody();  
-                               break ;
-        
-           case 152 : // System.out.println("NestedMethod ::=");
-                           consumeNestedMethod();  
-                               break ;
-        
-           case 153 : // System.out.println("StaticInitializer ::= StaticOnly Block");
-                           consumeStaticInitializer();  
-                               break ;
-       
-           case 154 : // System.out.println("StaticOnly ::= static");
-                           consumeStaticOnly();  
-                               break ;
-        
-           case 155 : // System.out.println("ConstructorDeclaration ::= ConstructorHeader ConstructorBody");
-                           consumeConstructorDeclaration() ;  
-                               break ;
-        
-           case 156 : // System.out.println("ConstructorDeclaration ::= ConstructorHeader SEMICOLON");
-                           consumeInvalidConstructorDeclaration() ;  
-                               break ;
-        
-           case 157 : // System.out.println("ConstructorBody ::= NestedMethod LBRACE ConstructorBlockStatementsopt RBRACE");
-                           consumeConstructorBody();  
-                               break ;
-        
-           case 160 : // System.out.println("ConstructorBlockStatementsopt ::= ExplicitConstructorInvocation BlockStatements");
-                            consumeConstructorBlockStatements();  
-                               break ;
-        
-           case 161 : // System.out.println("ExplicitConstructorInvocation ::= this LPAREN ArgumentListopt RPAREN SEMICOLON");
-                           consumeExplicitConstructorInvocation(0,ExplicitConstructorCall.This);  
-                               break ;
-        
-           case 162 : // System.out.println("ExplicitConstructorInvocation ::= super LPAREN ArgumentListopt RPAREN SEMICOLON");
-                           consumeExplicitConstructorInvocation(0,ExplicitConstructorCall.Super);  
-                               break ;
-        
-           case 163 : // System.out.println("ExplicitConstructorInvocation ::= Primary DOT super LPAREN ArgumentListopt RPAREN");
-                           consumeExplicitConstructorInvocation(1, ExplicitConstructorCall.Super);  
-                               break ;
-        
-           case 164 : // System.out.println("ExplicitConstructorInvocation ::= Name DOT super LPAREN ArgumentListopt RPAREN...");
-                           consumeExplicitConstructorInvocation(2, ExplicitConstructorCall.Super);  
-                               break ;
-        
-           case 165 : // System.out.println("ExplicitConstructorInvocation ::= Primary DOT this LPAREN ArgumentListopt RPAREN...");
-                           consumeExplicitConstructorInvocation(1, ExplicitConstructorCall.This);  
-                               break ;
-        
-           case 166 : // System.out.println("ExplicitConstructorInvocation ::= Name DOT this LPAREN ArgumentListopt RPAREN...");
-                           consumeExplicitConstructorInvocation(2, ExplicitConstructorCall.This);  
-                               break ;
-        
-           case 167 : // System.out.println("InterfaceDeclaration ::= InterfaceHeader InterfaceBody");
-                           consumeInterfaceDeclaration();  
-                               break ;
-        
-           case 168 : // System.out.println("InterfaceHeader ::= InterfaceHeaderName InterfaceHeaderExtendsopt");
-                           consumeInterfaceHeader();  
-                               break ;
-        
-           case 169 : // System.out.println("InterfaceHeaderName ::= Modifiersopt interface Identifier");
-                           consumeInterfaceHeaderName();  
-                               break ;
-        
-           case 171 : // System.out.println("InterfaceHeaderExtends ::= extends InterfaceTypeList");
-                           consumeInterfaceHeaderExtends();  
-                               break ;
-        
-           case 174 : // System.out.println("InterfaceMemberDeclarations ::= InterfaceMemberDeclarations...");
-                           consumeInterfaceMemberDeclarations();  
-                               break ;
-        
-           case 175 : // System.out.println("InterfaceMemberDeclaration ::= SEMICOLON");
-                           consumeEmptyInterfaceMemberDeclaration();  
-                               break ;
-        
-           case 178 : // System.out.println("InterfaceMemberDeclaration ::= InvalidMethodDeclaration");
-                           ignoreMethodBody();  
-                               break ;
-        
-           case 179 : // System.out.println("InvalidConstructorDeclaration ::= ConstructorHeader ConstructorBody");
-                           ignoreInvalidConstructorDeclaration(true);   
-                               break ;
-        
-           case 180 : // System.out.println("InvalidConstructorDeclaration ::= ConstructorHeader SEMICOLON");
-                           ignoreInvalidConstructorDeclaration(false);   
-                               break ;
-        
-           case 186 : // System.out.println("ArrayInitializer ::= LBRACE ,opt RBRACE");
-                           consumeEmptyArrayInitializer();  
-                               break ;
-        
-           case 187 : // System.out.println("ArrayInitializer ::= LBRACE VariableInitializers RBRACE");
-                           consumeArrayInitializer();  
-                               break ;
-        
-           case 188 : // System.out.println("ArrayInitializer ::= LBRACE VariableInitializers COMMA RBRACE");
-                           consumeArrayInitializer();  
-                               break ;
-        
-           case 190 : // System.out.println("VariableInitializers ::= VariableInitializers COMMA VariableInitializer");
-                           consumeVariableInitializers();  
-                               break ;
-        
-           case 191 : // System.out.println("Block ::= OpenBlock LBRACE BlockStatementsopt RBRACE");
-                           consumeBlock();  
-                               break ;
-        
-           case 192 : // System.out.println("OpenBlock ::=");
-                           consumeOpenBlock() ;  
-                               break ;
-        
-           case 194 : // System.out.println("BlockStatements ::= BlockStatements BlockStatement");
-                           consumeBlockStatements() ;  
-                               break ;
-        
-           case 198 : // System.out.println("BlockStatement ::= InvalidInterfaceDeclaration");
-                           ignoreInterfaceDeclaration();  
-                               break ;
-        
-           case 199 : // System.out.println("LocalVariableDeclarationStatement ::= LocalVariableDeclaration SEMICOLON");
-                           consumeLocalVariableDeclarationStatement();  
-                               break ;
-        
-           case 200 : // System.out.println("LocalVariableDeclaration ::= Type PushModifiers VariableDeclarators");
-                           consumeLocalVariableDeclaration();  
-                               break ;
-        
-           case 201 : // System.out.println("LocalVariableDeclaration ::= Modifiers Type PushModifiers VariableDeclarators");
-                           consumeLocalVariableDeclaration();  
-                               break ;
-        
-           case 202 : // System.out.println("PushModifiers ::=");
-                           consumePushModifiers();  
-                               break ;
-        
-           case 226 : // System.out.println("EmptyStatement ::= SEMICOLON");
-                           consumeEmptyStatement();  
-                               break ;
-        
-           case 227 : // System.out.println("LabeledStatement ::= Identifier COLON Statement");
-                           consumeStatementLabel() ;  
-                               break ;
-        
-           case 228 : // System.out.println("LabeledStatementNoShortIf ::= Identifier COLON StatementNoShortIf");
-                           consumeStatementLabel() ;  
-                               break ;
-        
-            case 229 : // System.out.println("ExpressionStatement ::= StatementExpression SEMICOLON");
-                           consumeExpressionStatement();  
-                               break ;
-        
-           case 237 : // System.out.println("IfThenStatement ::= if LPAREN Expression RPAREN Statement");
-                           consumeStatementIfNoElse();  
-                               break ;
-        
-           case 238 : // System.out.println("IfThenElseStatement ::= if LPAREN Expression RPAREN StatementNoShortIf else...");
-                           consumeStatementIfWithElse();  
-                               break ;
-        
-           case 239 : // System.out.println("IfThenElseStatementNoShortIf ::= if LPAREN Expression RPAREN StatementNoShortIf...");
-                           consumeStatementIfWithElse();  
-                               break ;
-        
-           case 240 : // System.out.println("SwitchStatement ::= switch OpenBlock LPAREN Expression RPAREN SwitchBlock");
-                           consumeStatementSwitch() ;  
-                               break ;
-        
-           case 241 : // System.out.println("SwitchBlock ::= LBRACE RBRACE");
-                           consumeEmptySwitchBlock() ;  
-                               break ;
-        
-           case 244 : // System.out.println("SwitchBlock ::= LBRACE SwitchBlockStatements SwitchLabels RBRACE");
-                           consumeSwitchBlock() ;  
-                               break ;
-        
-           case 246 : // System.out.println("SwitchBlockStatements ::= SwitchBlockStatements SwitchBlockStatement");
-                           consumeSwitchBlockStatements() ;  
-                               break ;
-        
-           case 247 : // System.out.println("SwitchBlockStatement ::= SwitchLabels BlockStatements");
-                           consumeSwitchBlockStatement() ;  
-                               break ;
-        
-           case 249 : // System.out.println("SwitchLabels ::= SwitchLabels SwitchLabel");
-                           consumeSwitchLabels() ;  
-                               break ;
-        
-            case 250 : // System.out.println("SwitchLabel ::= case ConstantExpression COLON");
-                           consumeCaseLabel();  
-                               break ;
-        
-            case 251 : // System.out.println("SwitchLabel ::= default COLON");
-                           consumeDefaultLabel();  
-                               break ;
-        
-           case 252 : // System.out.println("WhileStatement ::= while LPAREN Expression RPAREN Statement");
-                           consumeStatementWhile() ;  
-                               break ;
-        
-           case 253 : // System.out.println("WhileStatementNoShortIf ::= while LPAREN Expression RPAREN StatementNoShortIf");
-                           consumeStatementWhile() ;  
-                               break ;
-        
-           case 254 : // System.out.println("DoStatement ::= do Statement while LPAREN Expression RPAREN SEMICOLON");
-                           consumeStatementDo() ;  
-                               break ;
-        
-           case 255 : // System.out.println("ForStatement ::= for LPAREN ForInitopt SEMICOLON Expressionopt SEMICOLON...");
-                           consumeStatementFor() ;  
-                               break ;
-        
-           case 256 : // System.out.println("ForStatementNoShortIf ::= for LPAREN ForInitopt SEMICOLON Expressionopt SEMICOLON");
-                           consumeStatementFor() ;  
-                               break ;
-        
-           case 257 : // System.out.println("ForInit ::= StatementExpressionList");
-                           consumeForInit() ;  
-                               break ;
-        
-           case 261 : // System.out.println("StatementExpressionList ::= StatementExpressionList COMMA StatementExpression");
-                           consumeStatementExpressionList() ;  
-                               break ;
-        
-           case 262 : // System.out.println("AssertStatement ::= assert Expression SEMICOLON");
-                           consumeSimpleAssertStatement() ;  
-                               break ;
-        
-           case 263 : // System.out.println("AssertStatement ::= assert Expression COLON Expression SEMICOLON");
-                           consumeAssertStatement() ;  
-                               break ;
-        
-           case 264 : // System.out.println("BreakStatement ::= break SEMICOLON");
-                           consumeStatementBreak() ;  
-                               break ;
-        
-           case 265 : // System.out.println("BreakStatement ::= break Identifier SEMICOLON");
-                           consumeStatementBreakWithLabel() ;  
-                               break ;
-        
-           case 266 : // System.out.println("ContinueStatement ::= continue SEMICOLON");
-                           consumeStatementContinue() ;  
-                               break ;
-        
-           case 267 : // System.out.println("ContinueStatement ::= continue Identifier SEMICOLON");
-                           consumeStatementContinueWithLabel() ;  
-                               break ;
-        
-           case 268 : // System.out.println("ReturnStatement ::= return Expressionopt SEMICOLON");
-                           consumeStatementReturn() ;  
-                               break ;
-        
-           case 269 : // System.out.println("ThrowStatement ::= throw Expression SEMICOLON");
-                           consumeStatementThrow();
-        
-                               break ;
-        
-           case 270 : // System.out.println("SynchronizedStatement ::= OnlySynchronized LPAREN Expression RPAREN Block");
-                           consumeStatementSynchronized();  
-                               break ;
-        
-           case 271 : // System.out.println("OnlySynchronized ::= synchronized");
-                           consumeOnlySynchronized();  
-                               break ;
-        
-           case 272 : // System.out.println("TryStatement ::= try Block Catches");
-                           consumeStatementTry(false);  
-                               break ;
-        
-           case 273 : // System.out.println("TryStatement ::= try Block Catchesopt Finally");
-                           consumeStatementTry(true);  
-                               break ;
-        
-           case 275 : // System.out.println("Catches ::= Catches CatchClause");
-                           consumeCatches();  
-                               break ;
-        
-           case 276 : // System.out.println("CatchClause ::= catch LPAREN FormalParameter RPAREN Block");
-                           consumeStatementCatch() ;  
-                               break ;
-        
-           case 278 : // System.out.println("PushLPAREN ::= LPAREN");
-                           consumeLeftParen();  
-                               break ;
-        
-           case 279 : // System.out.println("PushRPAREN ::= RPAREN");
-                           consumeRightParen();  
-                               break ;
-        
-           case 283 : // System.out.println("PrimaryNoNewArray ::= this");
-                           consumePrimaryNoNewArrayThis();  
-                               break ;
-        
-           case 284 : // System.out.println("PrimaryNoNewArray ::= PushLPAREN Expression PushRPAREN");
-                           consumePrimaryNoNewArray();  
-                               break ;
-        
-           case 287 : // System.out.println("PrimaryNoNewArray ::= Name DOT this");
-                           consumePrimaryNoNewArrayNameThis();  
-                               break ;
-        
-           case 288 : // System.out.println("PrimaryNoNewArray ::= Name DOT super");
-                           consumePrimaryNoNewArrayNameSuper();  
-                               break ;
-        
-           case 289 : // System.out.println("PrimaryNoNewArray ::= Name DOT class");
-                           consumePrimaryNoNewArrayName();  
-                               break ;
-        
-           case 290 : // System.out.println("PrimaryNoNewArray ::= ArrayType DOT class");
-                           consumePrimaryNoNewArrayArrayType();  
-                               break ;
-        
-           case 291 : // System.out.println("PrimaryNoNewArray ::= PrimitiveType DOT class");
-                           consumePrimaryNoNewArrayPrimitiveType();  
-                               break ;
-        
-           case 294 : // System.out.println("AllocationHeader ::= new ClassType LPAREN ArgumentListopt RPAREN");
-                           consumeAllocationHeader();  
-                               break ;
-        
-           case 295 : // System.out.println("ClassInstanceCreationExpression ::= new ClassType LPAREN ArgumentListopt RPAREN...");
-                           consumeClassInstanceCreationExpression();  
-                               break ;
-        
-           case 296 : // System.out.println("ClassInstanceCreationExpression ::= Primary DOT new SimpleName LPAREN...");
-                           consumeClassInstanceCreationExpressionQualified() ;  
-                               break ;
-        
-           case 297 : // System.out.println("ClassInstanceCreationExpression ::= ClassInstanceCreationExpressionName new...");
-                           consumeClassInstanceCreationExpressionQualified() ;  
-                               break ;
-        
-           case 298 : // System.out.println("ClassInstanceCreationExpressionName ::= Name DOT");
-                           consumeClassInstanceCreationExpressionName() ;  
-                               break ;
-        
-           case 299 : // System.out.println("ClassBodyopt ::=");
-                           consumeClassBodyopt();  
-                               break ;
-        
-           case 301 : // System.out.println("EnterAnonymousClassBody ::=");
-                           consumeEnterAnonymousClassBody();  
-                               break ;
-        
-           case 303 : // System.out.println("ArgumentList ::= ArgumentList COMMA Expression");
-                           consumeArgumentList();  
-                               break ;
-        
-           case 304 : // System.out.println("ArrayCreationExpression ::= new PrimitiveType DimWithOrWithOutExprs...");
-                           consumeArrayCreationExpression();  
-                               break ;
-        
-           case 305 : // System.out.println("ArrayCreationExpression ::= new ClassOrInterfaceType DimWithOrWithOutExprs...");
-                           consumeArrayCreationExpression();  
-                               break ;
-        
-           case 307 : // System.out.println("DimWithOrWithOutExprs ::= DimWithOrWithOutExprs DimWithOrWithOutExpr");
-                           consumeDimWithOrWithOutExprs();  
-                               break ;
-        
-            case 309 : // System.out.println("DimWithOrWithOutExpr ::= LBRACKET RBRACKET");
-                           consumeDimWithOrWithOutExpr();  
-                               break ;
-        
-            case 310 : // System.out.println("Dims ::= DimsLoop");
-                           consumeDims();  
-                               break ;
-        
-            case 313 : // System.out.println("OneDimLoop ::= LBRACKET RBRACKET");
-                           consumeOneDimLoop();  
-                               break ;
-        
-           case 314 : // System.out.println("FieldAccess ::= Primary DOT Identifier");
-                           consumeFieldAccess(false);  
-                               break ;
-        
-           case 315 : // System.out.println("FieldAccess ::= super DOT Identifier");
-                           consumeFieldAccess(true);  
-                               break ;
-        
-           case 316 : // System.out.println("MethodInvocation ::= Name LPAREN ArgumentListopt RPAREN");
-                           consumeMethodInvocationName();  
-                               break ;
-        
-           case 317 : // System.out.println("MethodInvocation ::= Primary DOT Identifier LPAREN ArgumentListopt RPAREN");
-                           consumeMethodInvocationPrimary();  
-                               break ;
-        
-           case 318 : // System.out.println("MethodInvocation ::= super DOT Identifier LPAREN ArgumentListopt RPAREN");
-                           consumeMethodInvocationSuper();  
-                               break ;
-        
-           case 319 : // System.out.println("ArrayAccess ::= Name LBRACKET Expression RBRACKET");
-                           consumeArrayAccess(true);  
-                               break ;
-        
-           case 320 : // System.out.println("ArrayAccess ::= PrimaryNoNewArray LBRACKET Expression RBRACKET");
-                           consumeArrayAccess(false);  
-                               break ;
-        
-           case 322 : // System.out.println("PostfixExpression ::= Name");
-                           consumePostfixExpression();  
-                               break ;
-        
-           case 325 : // System.out.println("PostIncrementExpression ::= PostfixExpression PLUS_PLUS");
-                           consumeUnaryExpression(OperatorExpression.PLUS,true);  
-                               break ;
-        
-           case 326 : // System.out.println("PostDecrementExpression ::= PostfixExpression MINUS_MINUS");
-                           consumeUnaryExpression(OperatorExpression.MINUS,true);  
-                               break ;
-        
-           case 327 : // System.out.println("PushPosition ::=");
-                           consumePushPosition();  
-                               break ;
-        
-           case 330 : // System.out.println("UnaryExpression ::= PLUS PushPosition UnaryExpression");
-                           consumeUnaryExpression(OperatorExpression.PLUS);  
-                               break ;
-        
-           case 331 : // System.out.println("UnaryExpression ::= MINUS PushPosition UnaryExpression");
-                           consumeUnaryExpression(OperatorExpression.MINUS);  
-                               break ;
-        
-           case 333 : // System.out.println("PreIncrementExpression ::= PLUS_PLUS PushPosition UnaryExpression");
-                           consumeUnaryExpression(OperatorExpression.PLUS,false);  
-                               break ;
-        
-           case 334 : // System.out.println("PreDecrementExpression ::= MINUS_MINUS PushPosition UnaryExpression");
-                           consumeUnaryExpression(OperatorExpression.MINUS,false);  
-                               break ;
-        
-           case 336 : // System.out.println("UnaryExpressionNotPlusMinus ::= TWIDDLE PushPosition UnaryExpression");
-                           consumeUnaryExpression(OperatorExpression.TWIDDLE);  
-                               break ;
-        
-           case 337 : // System.out.println("UnaryExpressionNotPlusMinus ::= NOT PushPosition UnaryExpression");
-                           consumeUnaryExpression(OperatorExpression.NOT);  
-                               break ;
-        
-           case 339 : // System.out.println("CastExpression ::= PushLPAREN PrimitiveType Dimsopt PushRPAREN UnaryExpression");
-                           consumeCastExpression();  
-                               break ;
-        
-           case 340 : // System.out.println("CastExpression ::= PushLPAREN Name Dims PushRPAREN UnaryExpressionNotPlusMinus");
-                           consumeCastExpression();  
-                               break ;
-        
-           case 341 : // System.out.println("CastExpression ::= PushLPAREN Expression PushRPAREN UnaryExpressionNotPlusMinus");
-                           consumeCastExpressionLL1();  
-                               break ;
-        
-           case 343 : // System.out.println("MultiplicativeExpression ::= MultiplicativeExpression MULTIPLY UnaryExpression");
-                           consumeBinaryExpression(OperatorExpression.MULTIPLY);  
-                               break ;
-        
-           case 344 : // System.out.println("MultiplicativeExpression ::= MultiplicativeExpression DIVIDE UnaryExpression");
-                           consumeBinaryExpression(OperatorExpression.DIVIDE);  
-                               break ;
-        
-           case 345 : // System.out.println("MultiplicativeExpression ::= MultiplicativeExpression REMAINDER UnaryExpression");
-                           consumeBinaryExpression(OperatorExpression.REMAINDER);  
-                               break ;
-        
-           case 347 : // System.out.println("AdditiveExpression ::= AdditiveExpression PLUS MultiplicativeExpression");
-                           consumeBinaryExpression(OperatorExpression.PLUS);  
-                               break ;
-        
-           case 348 : // System.out.println("AdditiveExpression ::= AdditiveExpression MINUS MultiplicativeExpression");
-                           consumeBinaryExpression(OperatorExpression.MINUS);  
-                               break ;
-        
-           case 350 : // System.out.println("ShiftExpression ::= ShiftExpression LEFT_SHIFT AdditiveExpression");
-                           consumeBinaryExpression(OperatorExpression.LEFT_SHIFT);  
-                               break ;
-        
-           case 351 : // System.out.println("ShiftExpression ::= ShiftExpression RIGHT_SHIFT AdditiveExpression");
-                           consumeBinaryExpression(OperatorExpression.RIGHT_SHIFT);  
-                               break ;
-        
-           case 352 : // System.out.println("ShiftExpression ::= ShiftExpression UNSIGNED_RIGHT_SHIFT AdditiveExpression");
-                           consumeBinaryExpression(OperatorExpression.UNSIGNED_RIGHT_SHIFT);  
-                               break ;
-        
-           case 354 : // System.out.println("RelationalExpression ::= RelationalExpression LESS ShiftExpression");
-                           consumeBinaryExpression(OperatorExpression.LESS);  
-                               break ;
-        
-           case 355 : // System.out.println("RelationalExpression ::= RelationalExpression GREATER ShiftExpression");
-                           consumeBinaryExpression(OperatorExpression.GREATER);  
-                               break ;
-        
-           case 356 : // System.out.println("RelationalExpression ::= RelationalExpression LESS_EQUAL ShiftExpression");
-                           consumeBinaryExpression(OperatorExpression.LESS_EQUAL);  
-                               break ;
-        
-           case 357 : // System.out.println("RelationalExpression ::= RelationalExpression GREATER_EQUAL ShiftExpression");
-                           consumeBinaryExpression(OperatorExpression.GREATER_EQUAL);  
-                               break ;
-        
-           case 358 : // System.out.println("RelationalExpression ::= RelationalExpression instanceof ReferenceType");
-                           consumeInstanceOfExpression(OperatorExpression.INSTANCEOF);  
-                               break ;
-        
-           case 360 : // System.out.println("EqualityExpression ::= EqualityExpression EQUAL_EQUAL RelationalExpression");
-                           consumeEqualityExpression(OperatorExpression.EQUAL_EQUAL);  
-                               break ;
-        
-           case 361 : // System.out.println("EqualityExpression ::= EqualityExpression NOT_EQUAL RelationalExpression");
-                           consumeEqualityExpression(OperatorExpression.NOT_EQUAL);  
-                               break ;
-        
-           case 363 : // System.out.println("AndExpression ::= AndExpression AND EqualityExpression");
-                           consumeBinaryExpression(OperatorExpression.AND);  
-                               break ;
-        
-           case 365 : // System.out.println("ExclusiveOrExpression ::= ExclusiveOrExpression XOR AndExpression");
-                           consumeBinaryExpression(OperatorExpression.XOR);  
-                               break ;
-        
-           case 367 : // System.out.println("InclusiveOrExpression ::= InclusiveOrExpression OR ExclusiveOrExpression");
-                           consumeBinaryExpression(OperatorExpression.OR);  
-                               break ;
-        
-           case 369 : // System.out.println("ConditionalAndExpression ::= ConditionalAndExpression AND_AND InclusiveOrExpression");
-                           consumeBinaryExpression(OperatorExpression.AND_AND);  
-                               break ;
-        
-           case 371 : // System.out.println("ConditionalOrExpression ::= ConditionalOrExpression OR_OR ConditionalAndExpression");
-                           consumeBinaryExpression(OperatorExpression.OR_OR);  
-                               break ;
-        
-           case 373 : // System.out.println("ConditionalExpression ::= ConditionalOrExpression QUESTION Expression COLON...");
-                           consumeConditionalExpression(OperatorExpression.QUESTIONCOLON) ;  
-                               break ;
-        
-           case 376 : // System.out.println("Assignment ::= LeftHandSide AssignmentOperator AssignmentExpression");
-                           consumeAssignment();  
-                               break ;
-        
-           case 378 : // System.out.println("Assignment ::= InvalidArrayInitializerAssignement");
-                           ignoreExpressionAssignment(); 
-                               break ;
-        
-           case 379 : // System.out.println("LeftHandSide ::= Name");
-                           consumeLeftHandSide();  
-                               break ;
-        
-           case 382 : // System.out.println("AssignmentOperator ::= EQUAL");
-                           consumeAssignmentOperator(EQUAL);  
-                               break ;
-        
-           case 383 : // System.out.println("AssignmentOperator ::= MULTIPLY_EQUAL");
-                           consumeAssignmentOperator(MULTIPLY);  
-                               break ;
-        
-           case 384 : // System.out.println("AssignmentOperator ::= DIVIDE_EQUAL");
-                           consumeAssignmentOperator(DIVIDE);  
-                               break ;
-        
-           case 385 : // System.out.println("AssignmentOperator ::= REMAINDER_EQUAL");
-                           consumeAssignmentOperator(REMAINDER);  
-                               break ;
-        
-           case 386 : // System.out.println("AssignmentOperator ::= PLUS_EQUAL");
-                           consumeAssignmentOperator(PLUS);  
-                               break ;
-        
-           case 387 : // System.out.println("AssignmentOperator ::= MINUS_EQUAL");
-                           consumeAssignmentOperator(MINUS);  
-                               break ;
-        
-           case 388 : // System.out.println("AssignmentOperator ::= LEFT_SHIFT_EQUAL");
-                           consumeAssignmentOperator(LEFT_SHIFT);  
-                               break ;
-        
-           case 389 : // System.out.println("AssignmentOperator ::= RIGHT_SHIFT_EQUAL");
-                           consumeAssignmentOperator(RIGHT_SHIFT);  
-                               break ;
-        
-           case 390 : // System.out.println("AssignmentOperator ::= UNSIGNED_RIGHT_SHIFT_EQUAL");
-                           consumeAssignmentOperator(UNSIGNED_RIGHT_SHIFT);  
-                               break ;
-        
-           case 391 : // System.out.println("AssignmentOperator ::= AND_EQUAL");
-                           consumeAssignmentOperator(AND);  
-                               break ;
-        
-           case 392 : // System.out.println("AssignmentOperator ::= XOR_EQUAL");
-                           consumeAssignmentOperator(XOR);  
-                               break ;
-        
-           case 393 : // System.out.println("AssignmentOperator ::= OR_EQUAL");
-                           consumeAssignmentOperator(OR);  
-                               break ;
-        
-           case 400 : // System.out.println("Expressionopt ::=");
-                           consumeEmptyExpression();  
-                               break ;
-        
-           case 404 : // System.out.println("ImportDeclarationsopt ::=");
-                           consumeEmptyImportDeclarationsopt();  
-                               break ;
-        
-           case 405 : // System.out.println("ImportDeclarationsopt ::= ImportDeclarations");
-                           consumeImportDeclarationsopt();  
-                               break ;
-        
-           case 406 : // System.out.println("TypeDeclarationsopt ::=");
-                           consumeEmptyTypeDeclarationsopt();  
-                               break ;
-        
-           case 407 : // System.out.println("TypeDeclarationsopt ::= TypeDeclarations");
-                           consumeTypeDeclarationsopt();  
-                               break ;
-        
-           case 408 : // System.out.println("ClassBodyDeclarationsopt ::=");
-                           consumeEmptyClassBodyDeclarationsopt();  
-                               break ;
-        
-           case 409 : // System.out.println("ClassBodyDeclarationsopt ::= NestedType ClassBodyDeclarations");
-                           consumeClassBodyDeclarationsopt();  
-                               break ;
-        
-            case 410 : // System.out.println("Modifiersopt ::=");
-                           consumeDefaultModifiers();  
-                               break ;
-        
-           case 411 : // System.out.println("Modifiersopt ::= Modifiers");
-                           consumeModifiers();  
-                               break ;
-        
-           case 412 : // System.out.println("BlockStatementsopt ::=");
-                           consumeEmptyBlockStatementsopt();  
-                               break ;
-        
-            case 414 : // System.out.println("Dimsopt ::=");
-                           consumeEmptyDimsopt();  
-                               break ;
-        
-            case 416 : // System.out.println("ArgumentListopt ::=");
-                           consumeEmptyArgumentListopt();  
-                               break ;
-        
-           case 420 : // System.out.println("FormalParameterListopt ::=");
-                           consumeFormalParameterListopt();  
-                               break ;
-        
-            case 424 : // System.out.println("InterfaceMemberDeclarationsopt ::=");
-                           consumeEmptyInterfaceMemberDeclarationsopt();  
-                               break ;
-        
-            case 425 : // System.out.println("InterfaceMemberDeclarationsopt ::= NestedType InterfaceMemberDeclarations");
-                           consumeInterfaceMemberDeclarationsopt();  
-                               break ;
-        
-           case 426 : // System.out.println("NestedType ::=");
-                           consumeNestedType();  
-                               break ;
-       
-            case 427 : // System.out.println("ForInitopt ::=");
-                           consumeEmptyForInitopt();  
-                               break ;
-        
-            case 429 : // System.out.println("ForUpdateopt ::=");
-                           consumeEmptyForUpdateopt();  
-                               break ;
-        
-            case 433 : // System.out.println("Catchesopt ::=");
-                           consumeEmptyCatchesopt();  
-                               break ;
-        
-            case 435 : // System.out.println("ArrayInitializeropt ::=");
-                           consumeEmptyArrayInitializeropt();  
-                               break ;
-        
-               }
-       } 
-
-       
-protected void consumeSimpleAssertStatement() {
-       // AssertStatement ::= 'assert' Expression ';'
-       expressionLengthPtr--;
-       pushOnAstStack(new AssertStatement(expressionStack[expressionPtr--], intStack[intPtr--]));      
-}
-       
-protected void consumeSingleTypeImportDeclaration() {
-       // SingleTypeImportDeclaration ::= SingleTypeImportDeclarationName ';'
-
-       ImportReference impt = (ImportReference) astStack[astPtr];
-       // flush annotations defined prior to import statements
-       impt.declarationEnd = endStatementPosition;
-       impt.declarationSourceEnd = 
-               this.flushAnnotationsDefinedPriorTo(impt.declarationSourceEnd); 
-
-       // recovery
-       if (currentElement != null) {
-               lastCheckPoint = impt.declarationSourceEnd + 1;
-               currentElement = currentElement.add(impt, 0);
-               lastIgnoredToken = -1;
-               restartRecovery = true; 
-               // used to avoid branching back into the regular automaton
-       }
-}
-protected void consumeSingleTypeImportDeclarationName() {
-       // SingleTypeImportDeclarationName ::= 'import' Name
-       /* push an ImportRef build from the last name 
-       stored in the identifier stack. */
-
-       ImportReference impt;
-       int length;
-       char[][] tokens = new char[length = identifierLengthStack[identifierLengthPtr--]][];
-       identifierPtr -= length;
-       long[] positions = new long[length];
-       System.arraycopy(identifierStack, identifierPtr + 1, tokens, 0, length);
-       System.arraycopy(identifierPositionStack, identifierPtr + 1, positions, 0, length);
-       pushOnAstStack(impt = new ImportReference(tokens, positions, false));
-
-       if (currentToken == TokenNameSEMICOLON){
-               impt.declarationSourceEnd = scanner.currentPosition - 1;
-       } else {
-               impt.declarationSourceEnd = impt.sourceEnd;
-       }
-       impt.declarationEnd = impt.declarationSourceEnd;
-       //endPosition is just before the ;
-       impt.declarationSourceStart = intStack[intPtr--];
-
-       // recovery
-       if (currentElement != null){
-               lastCheckPoint = impt.declarationSourceEnd+1;
-               currentElement = currentElement.add(impt, 0);
-               lastIgnoredToken = -1;
-               restartRecovery = true; // used to avoid branching back into the regular automaton              
-       }
-}
-protected void consumeStatementBreak() {
-       // BreakStatement ::= 'break' ';'
-       // break pushs a position on intStack in case there is no label
+      case 150 : // System.out.println("ClassTypeElt ::= ClassType");
+        consumeClassTypeElt();
+        break;
 
-       pushOnAstStack(new Break(null, intStack[intPtr--], endPosition));
-}
-protected void consumeStatementBreakWithLabel() {
-       // BreakStatement ::= 'break' Identifier ';'
-       // break pushs a position on intStack in case there is no label
-
-       pushOnAstStack(
-               new Break(
-                       identifierStack[identifierPtr--],
-                       intStack[intPtr--],
-                       endPosition)); 
-       identifierLengthPtr--;
-}
-protected void consumeStatementCatch() {
-       // CatchClause ::= 'catch' '(' FormalParameter ')'    Block
+      case 151 : // System.out.println("MethodBody ::= NestedMethod LBRACE BlockStatementsopt RBRACE");
+        consumeMethodBody();
+        break;
 
-       //catch are stored directly into the Try
-       //has they always comes two by two....
-       //we remove one entry from the astlengthPtr.
-       //The construction of the try statement must
-       //then fetch the catches using  2*i and 2*i + 1
+      case 152 : // System.out.println("NestedMethod ::=");
+        consumeNestedMethod();
+        break;
 
-       astLengthPtr--;
-       listLength = 0; // reset formalParameter counter (incremented for catch variable)
-}
-protected void consumeStatementContinue() {
-       // ContinueStatement ::= 'continue' ';'
-       // continue pushs a position on intStack in case there is no label
-
-       pushOnAstStack(
-               new Continue(
-                       null,
-                       intStack[intPtr--],
-                       endPosition));
-}
-protected void consumeStatementContinueWithLabel() {
-       // ContinueStatement ::= 'continue' Identifier ';'
-       // continue pushs a position on intStack in case there is no label
-
-       pushOnAstStack(
-               new Continue(
-                       identifierStack[identifierPtr--], 
-                       intStack[intPtr--], 
-                       endPosition)); 
-       identifierLengthPtr--;
-}
-protected void consumeStatementDo() {
-       // DoStatement ::= 'do' Statement 'while' '(' Expression ')' ';'
-
-       //the 'while' pushes a value on intStack that we need to remove
-       intPtr--;
-
-       //optimize the push/pop
-       Statement action = (Statement) astStack[astPtr];
-       if (action instanceof EmptyStatement
-               && problemReporter.options.complianceLevel <= CompilerOptions.JDK1_3) {
-               expressionLengthPtr--;
-               astStack[astPtr] = 
-                       new DoStatement(
-                               expressionStack[expressionPtr--], 
-                               null, 
-                               intStack[intPtr--], 
-                               endPosition); 
-       } else {
-               expressionLengthPtr--;
-               astStack[astPtr] = 
-                       new DoStatement(
-                               expressionStack[expressionPtr--], 
-                               action, 
-                               intStack[intPtr--], 
-                               endPosition); 
-       }
-}
-protected void consumeStatementExpressionList() {
-       // StatementExpressionList ::= StatementExpressionList ',' StatementExpression
-       concatExpressionLists();
-}
-protected void consumeStatementFor() {
-       // ForStatement ::= 'for' '(' ForInitopt ';' Expressionopt ';' ForUpdateopt ')' Statement
-       // ForStatementNoShortIf ::= 'for' '(' ForInitopt ';' Expressionopt ';' ForUpdateopt ')' StatementNoShortIf
-
-       int length;
-       Expression cond = null;
-       Statement[] inits, updates;
-       Statement action;
-       boolean scope = true;
-
-       //statements
-       astLengthPtr--; // we need to consume it
-       action = (Statement) astStack[astPtr--];
-       if (action instanceof EmptyStatement
-               && problemReporter.options.complianceLevel <= CompilerOptions.JDK1_3) {
-               action = null;
-       }
-
-       //updates are on the expresion stack
-       if ((length = expressionLengthStack[expressionLengthPtr--]) == 0) {
-               updates = null;
-       } else {
-               expressionPtr -= length;
-               System.arraycopy(
-                       expressionStack, 
-                       expressionPtr + 1, 
-                       updates = new Statement[length], 
-                       0, 
-                       length); 
-       }
-
-       if (expressionLengthStack[expressionLengthPtr--] != 0)
-               cond = expressionStack[expressionPtr--];
-
-       //inits may be on two different stacks
-       if ((length = astLengthStack[astLengthPtr--]) == 0) {
-               inits = null;
-               scope = false;
-       } else {
-               if (length == -1) { //on expressionStack
-                       scope = false;
-                       length = expressionLengthStack[expressionLengthPtr--];
-                       expressionPtr -= length;
-                       System.arraycopy(
-                               expressionStack, 
-                               expressionPtr + 1, 
-                               inits = new Statement[length], 
-                               0, 
-                               length); 
-               } else { //on astStack
-                       astPtr -= length;
-                       System.arraycopy(
-                               astStack, 
-                               astPtr + 1, 
-                               inits = new Statement[length], 
-                               0, 
-                               length); 
-               }
-       };
-       if (action instanceof Block) {
-               pushOnAstStack(
-                       new ForStatement(
-                               inits, 
-                               cond, 
-                               updates, 
-                               action, 
-                               scope, 
-                               intStack[intPtr--], 
-                               endStatementPosition)); 
-       } else {
-               pushOnAstStack(
-                       new ForStatement(
-                               inits, 
-                               cond, 
-                               updates, 
-                               action, 
-                               scope, 
-                               intStack[intPtr--], 
-                               endPosition)); 
-       }
-}
-protected void consumeStatementIfNoElse() {
-       // IfThenStatement ::=  'if' '(' Expression ')' Statement
-
-       //optimize the push/pop
-       expressionLengthPtr--;
-       Statement thenStatement = (Statement) astStack[astPtr];
-       if (thenStatement instanceof Block) {
-               astStack[astPtr] = 
-                       new IfStatement(
-                               expressionStack[expressionPtr--], 
-                               thenStatement, 
-                               intStack[intPtr--], 
-                               endStatementPosition); 
-       } else if (thenStatement instanceof EmptyStatement) {
-               astStack[astPtr] = 
-                       new IfStatement(
-                               expressionStack[expressionPtr--], 
-                               Block.None, 
-                               intStack[intPtr--], 
-                               endStatementPosition); 
-       } else {
-               astStack[astPtr] = 
-                       new IfStatement(
-                               expressionStack[expressionPtr--], 
-                               thenStatement, 
-                               intStack[intPtr--], 
-                               endStatementPosition); 
-       }
-}
-protected void consumeStatementIfWithElse() {
-       // IfThenElseStatement ::=  'if' '(' Expression ')' StatementNoShortIf 'else' Statement
-       // IfThenElseStatementNoShortIf ::=  'if' '(' Expression ')' StatementNoShortIf 'else' StatementNoShortIf
-
-       astLengthPtr--; // optimized {..., Then, Else } ==> {..., If }
-       expressionLengthPtr--;
-       //optimize the push/pop
-       Statement elseStatement = (Statement) astStack[astPtr--];
-       Statement thenStatement = (Statement) astStack[astPtr];
-       if (elseStatement instanceof EmptyStatement) {
-               elseStatement = Block.None;
-       }
-       if (thenStatement instanceof EmptyStatement) {
-               thenStatement = Block.None;
-       }
-       if (elseStatement instanceof Block) {
-               astStack[astPtr] = 
-                       new IfStatement(
-                               expressionStack[expressionPtr--], 
-                               thenStatement, 
-                               elseStatement, 
-                               intStack[intPtr--], 
-                               endStatementPosition); 
-       } else {
-               astStack[astPtr] = 
-                       new IfStatement(
-                               expressionStack[expressionPtr--], 
-                               thenStatement, 
-                               elseStatement, 
-                               intStack[intPtr--], 
-                               endStatementPosition); 
-       }
-}
-protected void consumeStatementLabel() {
-       // LabeledStatement ::= 'Identifier' ':' Statement
-       // LabeledStatementNoShortIf ::= 'Identifier' ':' StatementNoShortIf
-
-       //optimize push/pop
-
-       Statement stmt = (Statement) astStack[astPtr];
-       if (stmt instanceof EmptyStatement) {
-               astStack[astPtr] = 
-                       new LabeledStatement(
-                               identifierStack[identifierPtr], 
-                               Block.None, 
-                               (int) (identifierPositionStack[identifierPtr--] >>> 32), 
-                               endStatementPosition); 
-       } else {
-               astStack[astPtr] = 
-                       new LabeledStatement(
-                               identifierStack[identifierPtr], 
-                               stmt, 
-                               (int) (identifierPositionStack[identifierPtr--] >>> 32), 
-                               endStatementPosition); 
-       }
-       identifierLengthPtr--;
-}
-protected void consumeStatementReturn() {
-       // ReturnStatement ::= 'return' Expressionopt ';'
-       // return pushs a position on intStack in case there is no expression
-
-       if (expressionLengthStack[expressionLengthPtr--] != 0) {
-               pushOnAstStack(
-                       new ReturnStatement(
-                               expressionStack[expressionPtr--], 
-                               intStack[intPtr--], 
-                               endPosition)
-               );
-       } else {
-               pushOnAstStack(new ReturnStatement(null, intStack[intPtr--], endPosition));
-       }
-}
-protected void consumeStatementSwitch() {
-       // SwitchStatement ::= 'switch' OpenBlock '(' Expression ')' SwitchBlock
-
-       //OpenBlock just makes the semantic action blockStart()
-       //the block is inlined but a scope need to be created
-       //if some declaration occurs.
-
-       int length;
-       SwitchStatement s = new SwitchStatement();
-       expressionLengthPtr--;
-       s.testExpression = expressionStack[expressionPtr--];
-       if ((length = astLengthStack[astLengthPtr--]) != 0) {
-               astPtr -= length;
-               System.arraycopy(
-                       astStack, 
-                       astPtr + 1, 
-                       s.statements = new Statement[length], 
-                       0, 
-                       length); 
-       }
-       s.explicitDeclarations = realBlockStack[realBlockPtr--];
-       pushOnAstStack(s);
-       intPtr--; // because of OpenBlock
-       s.sourceStart = intStack[intPtr--];
-       s.sourceEnd = endStatementPosition;
-}
-protected void consumeStatementSynchronized() {
-       // SynchronizedStatement ::= OnlySynchronized '(' Expression ')' Block
-       //optimize the push/pop
-
-       if (astLengthStack[astLengthPtr] == 0) {
-               astLengthStack[astLengthPtr] = 1;
-               expressionLengthPtr--;
-               astStack[++astPtr] = 
-                       new SynchronizedStatement(
-                               expressionStack[expressionPtr--], 
-                               Block.None, 
-                               intStack[intPtr--], 
-                               endStatementPosition); 
-       } else {
-               expressionLengthPtr--;
-               astStack[astPtr] = 
-                       new SynchronizedStatement(
-                               expressionStack[expressionPtr--], 
-                               (Block) astStack[astPtr], 
-                               intStack[intPtr--], 
-                               endStatementPosition); 
-       }
-       resetModifiers();
-}
-protected void consumeStatementThrow() {
-       // ThrowStatement ::= 'throw' Expression ';'
-       expressionLengthPtr--;
-       pushOnAstStack(new ThrowStatement(expressionStack[expressionPtr--], intStack[intPtr--]));
-}
-protected void consumeStatementTry(boolean withFinally) {
-       //TryStatement ::= 'try'  Block Catches
-       //TryStatement ::= 'try'  Block Catchesopt Finally
-
-       int length;
-       TryStatement tryStmt = new TryStatement();
-       //finally
-       if (withFinally) {
-               astLengthPtr--;
-               tryStmt.finallyBlock = (Block) astStack[astPtr--];
-       }
-       //catches are handle by two <argument-block> [see statementCatch]
-       if ((length = astLengthStack[astLengthPtr--]) != 0) {
-               if (length == 1) {
-                       tryStmt.catchBlocks = new Block[] {(Block) astStack[astPtr--]};
-                       tryStmt.catchArguments = new Argument[] {(Argument) astStack[astPtr--]};
-               } else {
-                       Block[] bks = (tryStmt.catchBlocks = new Block[length]);
-                       Argument[] args = (tryStmt.catchArguments = new Argument[length]);
-                       while (length-- > 0) {
-                               bks[length] = (Block) astStack[astPtr--];
-                               args[length] = (Argument) astStack[astPtr--];
-                       }
-               }
-       }
-       //try
-       astLengthPtr--;
-       tryStmt.tryBlock = (Block) astStack[astPtr--];
-
-       //positions
-       tryStmt.sourceEnd = endStatementPosition;
-       tryStmt.sourceStart = intStack[intPtr--];
-       pushOnAstStack(tryStmt);
-}
-protected void consumeStatementWhile() {
-       // WhileStatement ::= 'while' '(' Expression ')' Statement
-       // WhileStatementNoShortIf ::= 'while' '(' Expression ')' StatementNoShortIf
-
-       Statement action = (Statement) astStack[astPtr];
-       expressionLengthPtr--;
-       if (action instanceof Block) {
-               astStack[astPtr] = 
-                       new WhileStatement(
-                               expressionStack[expressionPtr--], 
-                               action, 
-                               intStack[intPtr--], 
-                               endStatementPosition); 
-       } else {
-               if (action instanceof EmptyStatement
-                       && problemReporter.options.complianceLevel <= CompilerOptions.JDK1_3) {
-                       astStack[astPtr] = 
-                               new WhileStatement(
-                                       expressionStack[expressionPtr--], 
-                                       null, 
-                                       intStack[intPtr--], 
-                                       endPosition); 
-               } else {
-                       astStack[astPtr] = 
-                               new WhileStatement(
-                                       expressionStack[expressionPtr--], 
-                                       action, 
-                                       intStack[intPtr--], 
-                                       endPosition); 
-               }
-       }
-}
-protected void consumeStaticInitializer() {
-       // StaticInitializer ::=  StaticOnly Block
-       //push an Initializer
-       //optimize the push/pop
-       Initializer initializer = new Initializer((Block) astStack[astPtr], AccStatic);
-       astStack[astPtr] = initializer;
-       initializer.sourceEnd = endStatementPosition;   
-       initializer.declarationSourceEnd = flushAnnotationsDefinedPriorTo(endStatementPosition);
-       nestedMethod[nestedType] --;
-       initializer.declarationSourceStart = intStack[intPtr--];
-       
-       // recovery
-       if (currentElement != null){
-               lastCheckPoint = initializer.declarationSourceEnd;
-               currentElement = currentElement.add(initializer, 0);
-               lastIgnoredToken = -1;
-       }
-}
-protected void consumeStaticOnly() {
-       // StaticOnly ::= 'static'
-       int savedModifiersSourceStart = modifiersSourceStart;
-       checkAnnotation(); // might update declaration source start
-       if (modifiersSourceStart >= savedModifiersSourceStart) {
-               modifiersSourceStart = savedModifiersSourceStart;
-       }
-       pushOnIntStack(
-               modifiersSourceStart >= 0 ? modifiersSourceStart : scanner.startPosition);
-       jumpOverMethodBody();
-       nestedMethod[nestedType]++;
-       resetModifiers();
-
-       // recovery
-       if (currentElement != null){
-               recoveredStaticInitializerStart = intStack[intPtr]; // remember start position only for static initializers
-       }
-}
-protected void consumeSwitchBlock() {
-       // SwitchBlock ::= '{' SwitchBlockStatements SwitchLabels '}'
-       concatNodeLists();
-}
-protected void consumeSwitchBlockStatement() {
-       // SwitchBlockStatement ::= SwitchLabels BlockStatements
-       concatNodeLists();
-}
-protected void consumeSwitchBlockStatements() {
-       // SwitchBlockStatements ::= SwitchBlockStatements SwitchBlockStatement
-       concatNodeLists();
-}
-protected void consumeSwitchLabels() {
-       // SwitchLabels ::= SwitchLabels SwitchLabel
-       optimizedConcatNodeLists();
-}
-protected void consumeToken(int type) {
-       /* remember the last consumed value */
-       /* try to minimize the number of build values */
-       if (scanner.wasNonExternalizedStringLiteral) {
-               StringLiteral[] literals = this.scanner.nonNLSStrings;
-               // could not reproduce, but this is the only NPE
-               // added preventive null check see PR 9035
-               if (literals != null) {
-                       for (int i = 0, max = literals.length; i < max; i++) {
-                               problemReporter().nonExternalizedStringLiteral(literals[i]);
-                       }
-               }
-               scanner.currentLine = null;
-               scanner.wasNonExternalizedStringLiteral = false;
-       }
-       // clear the commentPtr of the scanner in case we read something different from a modifier
-       switch(type) {
-//             case TokenNameabstract :
-//             case TokenNamestrictfp :
-//             case TokenNamefinal :
-//             case TokenNamenative :
-//             case TokenNameprivate :
-//             case TokenNameprotected :
-//             case TokenNamepublic :
-//             case TokenNametransient :
-//             case TokenNamevolatile :
-               case TokenNamestatic :
-//             case TokenNamesynchronized :
-                       break;
-               default:
-                       scanner.commentPtr = -1;
-       }
-       //System.out.println(scanner.toStringAction(type));
-       switch (type) {
-               case TokenNameIdentifier :
-                       pushIdentifier();
-                       if (scanner.useAssertAsAnIndentifier) {
-                               long positions = identifierPositionStack[identifierPtr];
-                               problemReporter().useAssertAsAnIdentifier((int) (positions >>> 32), (int) positions);
-                       }
-                       scanner.commentPtr = -1;
-                       break;
-//             case TokenNameinterface :
-//                     adjustInterfaceModifiers();
-//                     //'class' is pushing two int (positions) on the stack ==> 'interface' needs to do it too....
-//                     pushOnIntStack(scanner.startPosition);
-//                     pushOnIntStack(scanner.currentPosition - 1);                    
-//                     scanner.commentPtr = -1;
-//                     break;
-//             case TokenNameabstract :
-//                     checkAndSetModifiers(AccAbstract);
-//                     break;
-//             case TokenNamestrictfp :
-//                     checkAndSetModifiers(AccStrictfp);
-//                     break;
-//             case TokenNamefinal :
-//                     checkAndSetModifiers(AccFinal);
-//                     break;
-//             case TokenNamenative :
-//                     checkAndSetModifiers(AccNative);
-//                     break;
-//             case TokenNameprivate :
-//                     checkAndSetModifiers(AccPrivate);
-//                     break;
-//             case TokenNameprotected :
-//                     checkAndSetModifiers(AccProtected);
-//                     break;
-//             case TokenNamepublic :
-//                     checkAndSetModifiers(AccPublic);
-//                     break;
-//             case TokenNametransient :
-//                     checkAndSetModifiers(AccTransient);
-//                     break;
-//             case TokenNamevolatile :
-//                     checkAndSetModifiers(AccVolatile);
-//                     break;
-               case TokenNamestatic :
-                       checkAndSetModifiers(AccStatic);
-                       break;
-//             case TokenNamesynchronized :
-//                     this.synchronizedBlockSourceStart = scanner.startPosition;      
-//                     checkAndSetModifiers(AccSynchronized);
-//                     break;
-//                     //==============================
-//             case TokenNamevoid :
-//                     pushIdentifier(-T_void);
-//                     pushOnIntStack(scanner.currentPosition - 1);                            
-//                     pushOnIntStack(scanner.startPosition);
-//                     scanner.commentPtr = -1;
-//                     break;
-//                     //push a default dimension while void is not part of the primitive
-//                     //declaration baseType and so takes the place of a type without getting into
-//                     //regular type parsing that generates a dimension on intStack
-//             case TokenNameboolean :
-//                     pushIdentifier(-T_boolean);
-//                     pushOnIntStack(scanner.currentPosition - 1);                            
-//                     pushOnIntStack(scanner.startPosition);          
-//                     scanner.commentPtr = -1;
-//                     break;
-//             case TokenNamebyte :
-//                     pushIdentifier(-T_byte);
-//                     pushOnIntStack(scanner.currentPosition - 1);                            
-//                     pushOnIntStack(scanner.startPosition);                                  
-//                     scanner.commentPtr = -1;
-//                     break;
-//             case TokenNamechar :
-//                     pushIdentifier(-T_char);
-//                     pushOnIntStack(scanner.currentPosition - 1);                            
-//                     pushOnIntStack(scanner.startPosition);                                  
-//                     scanner.commentPtr = -1;
-//                     break;
-//             case TokenNamedouble :
-//                     pushIdentifier(-T_double);
-//                     pushOnIntStack(scanner.currentPosition - 1);                            
-//                     pushOnIntStack(scanner.startPosition);                                  
-//                     scanner.commentPtr = -1;
-//                     break;
-//             case TokenNamefloat :
-//                     pushIdentifier(-T_float);
-//                     pushOnIntStack(scanner.currentPosition - 1);                            
-//                     pushOnIntStack(scanner.startPosition);                                  
-//                     scanner.commentPtr = -1;
-//                     break;
-//             case TokenNameint :
-//                     pushIdentifier(-T_int);
-//                     pushOnIntStack(scanner.currentPosition - 1);                            
-//                     pushOnIntStack(scanner.startPosition);                                  
-//                     scanner.commentPtr = -1;
-//                     break;
-//             case TokenNamelong :
-//                     pushIdentifier(-T_long);
-//                     pushOnIntStack(scanner.currentPosition - 1);                            
-//                     pushOnIntStack(scanner.startPosition);                                  
-//                     scanner.commentPtr = -1;
-//                     break;
-//             case TokenNameshort :
-//                     pushIdentifier(-T_short);
-//                     pushOnIntStack(scanner.currentPosition - 1);                            
-//                     pushOnIntStack(scanner.startPosition);                                  
-//                     scanner.commentPtr = -1;
-//                     break;
-                       //==============================
-               case TokenNameIntegerLiteral :
-                       pushOnExpressionStack(
-                               new IntLiteral(
-                                       scanner.getCurrentTokenSource(), 
-                                       scanner.startPosition, 
-                                       scanner.currentPosition - 1)); 
-                       scanner.commentPtr = -1;
-                       break;
-               case TokenNameLongLiteral :
-                       pushOnExpressionStack(
-                               new LongLiteral(
-                                       scanner.getCurrentTokenSource(), 
-                                       scanner.startPosition, 
-                                       scanner.currentPosition - 1)); 
-                       scanner.commentPtr = -1;
-                       break;
-               case TokenNameFloatingPointLiteral :
-                       pushOnExpressionStack(
-                               new FloatLiteral(
-                                       scanner.getCurrentTokenSource(), 
-                                       scanner.startPosition, 
-                                       scanner.currentPosition - 1)); 
-                       scanner.commentPtr = -1;
-                       break;
-               case TokenNameDoubleLiteral :
-                       pushOnExpressionStack(
-                               new DoubleLiteral(
-                                       scanner.getCurrentTokenSource(), 
-                                       scanner.startPosition, 
-                                       scanner.currentPosition - 1)); 
-                       scanner.commentPtr = -1;
-                       break;
-               case TokenNameCharacterLiteral :
-                       pushOnExpressionStack(
-                               new CharLiteral(
-                                       scanner.getCurrentTokenSource(), 
-                                       scanner.startPosition, 
-                                       scanner.currentPosition - 1)); 
-                       scanner.commentPtr = -1;
-                       break;
-               case TokenNameStringLiteral :
-                       StringLiteral stringLiteral = new StringLiteral(
-                                       scanner.getCurrentTokenSourceString(), 
-                                       scanner.startPosition, 
-                                       scanner.currentPosition - 1); 
-                       pushOnExpressionStack(stringLiteral); 
-                       scanner.commentPtr = -1;
-                       break;
-               case TokenNamefalse :
-                       pushOnExpressionStack(
-                               new FalseLiteral(scanner.startPosition, scanner.currentPosition - 1)); 
-                       scanner.commentPtr = -1;
-                       break;
-               case TokenNametrue :
-                       pushOnExpressionStack(
-                               new TrueLiteral(scanner.startPosition, scanner.currentPosition - 1)); 
-                       break;
-               case TokenNamenull :
-                       pushOnExpressionStack(
-                               new NullLiteral(scanner.startPosition, scanner.currentPosition - 1)); 
-                       break;
-                       //============================
-//             case TokenNamesuper :
-//             case TokenNamethis :
-//                     endPosition = scanner.currentPosition - 1;
-//                     pushOnIntStack(scanner.startPosition);
-//                     break;
-//             case TokenNameassert :
-//             case TokenNameimport :
-//             case TokenNamepackage :
-//             case TokenNamethrow :
-               case TokenNamenew :
-               case TokenNamedo :
-               case TokenNameif :
-               case TokenNamefor :
-               case TokenNameswitch :
-//             case TokenNametry :
-               case TokenNamewhile :
-               case TokenNamebreak :
-               case TokenNamecontinue :
-               case TokenNamereturn :
-               case TokenNamecase :
-                       pushOnIntStack(scanner.startPosition);
-                       break;
-               case TokenNameclass :
-                       pushOnIntStack(scanner.currentPosition - 1);
-                       pushOnIntStack(scanner.startPosition);
-                       break;
-               case TokenNamedefault :
-                       pushOnIntStack(scanner.startPosition);
-                       pushOnIntStack(scanner.currentPosition - 1);
-                       break;
-                       //let extra semantic action decide when to push
-               case TokenNameRBRACKET :
-               case TokenNamePLUS :
-               case TokenNameMINUS :
-               case TokenNameNOT :
-               case TokenNameTWIDDLE :
-                       endPosition = scanner.startPosition;
-                       break;
-               case TokenNamePLUS_PLUS :
-               case TokenNameMINUS_MINUS :
-                       endPosition = scanner.startPosition;
-                       endStatementPosition = scanner.currentPosition - 1;
-                       break;
-               case TokenNameRBRACE:
-               case TokenNameSEMICOLON :
-                       endStatementPosition = scanner.currentPosition - 1;
-                       endPosition = scanner.startPosition - 1; 
-                       //the item is not part of the potential futur expression/statement
-                       break;
-                       // in order to handle ( expression) ////// (cast)expression///// foo(x)
-               case TokenNameRPAREN :
-                       rParenPos = scanner.currentPosition - 1; // position of the end of right parenthesis (in case of unicode \u0029) lex00101
-                       break;
-               case TokenNameLPAREN :
-                       lParenPos = scanner.startPosition;
-                       break;
-                       //  case TokenNameQUESTION  :
-                       //  case TokenNameCOMMA :
-                       //  case TokenNameCOLON  :
-                       //  case TokenNameEQUAL  :
-                       //  case TokenNameLBRACKET  :
-                       //  case TokenNameDOT :
-                       //  case TokenNameERROR :
-                       //  case TokenNameEOF  :
-                       //  case TokenNamecase  :
-                       //  case TokenNamecatch  :
-                       //  case TokenNameelse  :
-                       //  case TokenNameextends  :
-                       //  case TokenNamefinally  :
-                       //  case TokenNameimplements  :
-                       //  case TokenNamethrows  :
-                       //  case TokenNameinstanceof  :
-                       //  case TokenNameEQUAL_EQUAL  :
-                       //  case TokenNameLESS_EQUAL  :
-                       //  case TokenNameGREATER_EQUAL  :
-                       //  case TokenNameNOT_EQUAL  :
-                       //  case TokenNameLEFT_SHIFT  :
-                       //  case TokenNameRIGHT_SHIFT  :
-                       //  case TokenNameUNSIGNED_RIGHT_SHIFT :
-                       //  case TokenNamePLUS_EQUAL  :
-                       //  case TokenNameMINUS_EQUAL  :
-                       //  case TokenNameMULTIPLY_EQUAL  :
-                       //  case TokenNameDIVIDE_EQUAL  :
-                       //  case TokenNameAND_EQUAL  :
-                       //  case TokenNameOR_EQUAL  :
-                       //  case TokenNameXOR_EQUAL  :
-                       //  case TokenNameREMAINDER_EQUAL  :
-                       //  case TokenNameLEFT_SHIFT_EQUAL  :
-                       //  case TokenNameRIGHT_SHIFT_EQUAL  :
-                       //  case TokenNameUNSIGNED_RIGHT_SHIFT_EQUAL  :
-                       //  case TokenNameOR_OR  :
-                       //  case TokenNameAND_AND  :
-                       //  case TokenNameREMAINDER :
-                       //  case TokenNameXOR  :
-                       //  case TokenNameAND  :
-                       //  case TokenNameMULTIPLY :
-                       //  case TokenNameOR  :
-                       //  case TokenNameDIVIDE :
-                       //  case TokenNameGREATER  :
-                       //  case TokenNameLESS  :
-       }
-}
-protected void consumeTypeDeclarations() {
-       // TypeDeclarations ::= TypeDeclarations TypeDeclaration
-       concatNodeLists();
-}
-protected void consumeTypeDeclarationsopt() {
-       // TypeDeclarationsopt ::= TypeDeclarations
-       int length;
-       if ((length = astLengthStack[astLengthPtr--]) != 0) {
-               astPtr -= length;
-               System.arraycopy(astStack, astPtr + 1, compilationUnit.types = new TypeDeclaration[length], 0, length);
-       }
-}
-protected void consumeTypeImportOnDemandDeclaration() {
-       // TypeImportOnDemandDeclaration ::= TypeImportOnDemandDeclarationName ';'
-
-       ImportReference impt = (ImportReference) astStack[astPtr];
-       // flush annotations defined prior to import statements
-       impt.declarationEnd = endStatementPosition;
-       impt.declarationSourceEnd = 
-               this.flushAnnotationsDefinedPriorTo(impt.declarationSourceEnd); 
-
-       // recovery
-       if (currentElement != null) {
-               lastCheckPoint = impt.declarationSourceEnd + 1;
-               currentElement = currentElement.add(impt, 0);
-               restartRecovery = true;
-               lastIgnoredToken = -1;
-               // used to avoid branching back into the regular automaton
-       }
-}
-protected void consumeTypeImportOnDemandDeclarationName() {
-       // TypeImportOnDemandDeclarationName ::= 'import' Name '.' '*'
-       /* push an ImportRef build from the last name 
-       stored in the identifier stack. */
-
-       ImportReference impt;
-       int length;
-       char[][] tokens = new char[length = identifierLengthStack[identifierLengthPtr--]][];
-       identifierPtr -= length;
-       long[] positions = new long[length];
-       System.arraycopy(identifierStack, identifierPtr + 1, tokens, 0, length);
-       System.arraycopy(identifierPositionStack, identifierPtr + 1, positions, 0, length);
-       pushOnAstStack(impt = new ImportReference(tokens, positions, true));
-
-       if (currentToken == TokenNameSEMICOLON){
-               impt.declarationSourceEnd = scanner.currentPosition - 1;
-       } else {
-               impt.declarationSourceEnd = impt.sourceEnd;
-       }
-       impt.declarationEnd = impt.declarationSourceEnd;
-       //endPosition is just before the ;
-       impt.declarationSourceStart = intStack[intPtr--];
-
-       // recovery
-       if (currentElement != null){
-               lastCheckPoint = impt.declarationSourceEnd+1;
-               currentElement = currentElement.add(impt, 0);
-               lastIgnoredToken = -1;
-               restartRecovery = true; // used to avoid branching back into the regular automaton              
-       }       
-}
-protected void consumeUnaryExpression(int op) {
-       // UnaryExpression ::= '+' PushPosition UnaryExpression
-       // UnaryExpression ::= '-' PushPosition UnaryExpression
-       // UnaryExpressionNotPlusMinus ::= '~' PushPosition UnaryExpression
-       // UnaryExpressionNotPlusMinus ::= '!' PushPosition UnaryExpression
-
-       //optimize the push/pop
-
-       //handle manually the -2147483648 while it is not a real
-       //computation of an - and 2147483648 (notice that 2147483648
-       //is Integer.MAX_VALUE+1.....)
-       //Same for -9223372036854775808L ............
-
-       //intStack have the position of the operator
-
-       Expression r, exp = expressionStack[expressionPtr];
-       if (op == MINUS) {
-               if ((exp instanceof IntLiteral) && (((IntLiteral) exp).mayRepresentMIN_VALUE())) {
-                       r = expressionStack[expressionPtr] = new IntLiteralMinValue();
-               } else {
-                       if ((exp instanceof LongLiteral) && (((LongLiteral) exp).mayRepresentMIN_VALUE())) {
-                               r = expressionStack[expressionPtr] = new LongLiteralMinValue();
-                       } else {
-                               r = expressionStack[expressionPtr] = new UnaryExpression(exp, op);
-                       }
-               }
-       } else {
-               r = expressionStack[expressionPtr] = new UnaryExpression(exp, op);
-       }
-       r.sourceStart = intStack[intPtr--];
-       r.sourceEnd = exp.sourceEnd;
-}
-protected void consumeUnaryExpression(int op, boolean post) {
-       // PreIncrementExpression ::= '++' PushPosition UnaryExpression
-       // PreDecrementExpression ::= '--' PushPosition UnaryExpression
-
-       // ++ and -- operators
-       //optimize the push/pop
-
-       //intStack has the position of the operator when prefix
-
-       Expression leftHandSide = expressionStack[expressionPtr];
-       if (leftHandSide instanceof Reference) {
-               // ++foo()++ is unvalid 
-               if (post) {
-                       expressionStack[expressionPtr] = 
-                               new PostfixExpression(
-                                       leftHandSide,
-                                       IntLiteral.One,
-                                       op,
-                                       endStatementPosition); 
-               } else {
-                       expressionStack[expressionPtr] = 
-                               new PrefixExpression(
-                                       leftHandSide,
-                                       IntLiteral.One,
-                                       op,
-                                       intStack[intPtr--]); 
-               }
-       } else {
-               //the ++ or the -- is NOT taken into account if code gen proceeds
-               if (!post) {
-                       intPtr--;
-               }
-               problemReporter().invalidUnaryExpression(leftHandSide);
-       }
-}
-protected void consumeVariableDeclarators() {
-       // VariableDeclarators ::= VariableDeclarators ',' VariableDeclarator
-       optimizedConcatNodeLists();
-}
-protected void consumeVariableInitializers() {
-       // VariableInitializers ::= VariableInitializers ',' VariableInitializer
-       concatExpressionLists();
-}
-protected TypeReference copyDims(TypeReference typeRef, int dim) {
-       return typeRef.copyDims(dim);
-}
-protected FieldDeclaration createFieldDeclaration(Expression initialization, char[] name, int sourceStart, int sourceEnd) {
-       return new FieldDeclaration(null, name, sourceStart, sourceEnd);
-}
+      case 153 : // System.out.println("StaticInitializer ::= StaticOnly Block");
+        consumeStaticInitializer();
+        break;
 
-protected LocalDeclaration createLocalDeclaration(Expression initialization, char[] name, int sourceStart, int sourceEnd) {
-       return new LocalDeclaration(null, name, sourceStart, sourceEnd);
-}
+      case 154 : // System.out.println("StaticOnly ::= static");
+        consumeStaticOnly();
+        break;
 
-public CompilationUnitDeclaration dietParse(ICompilationUnit sourceUnit, CompilationResult compilationResult) {
-
-       CompilationUnitDeclaration parsedUnit;
-       boolean old = diet;
-       try {
-               diet = true;
-               parsedUnit = parse(sourceUnit, compilationResult);
-       }
-       finally {
-               diet = old;
-       }
-       return parsedUnit;
-}
-protected void dispatchDeclarationInto(int length) {
-       /* they are length on astStack that should go into
-          methods fields constructors lists of the typeDecl
-
-          Return if there is a constructor declaration in the methods declaration */
-          
-       
-       // Looks for the size of each array . 
-
-       if (length == 0)
-               return;
-       int[] flag = new int[length + 1]; //plus one -- see <HERE>
-       int size1 = 0, size2 = 0, size3 = 0;
-       for (int i = length - 1; i >= 0; i--) {
-               AstNode astNode = astStack[astPtr--];
-               if (astNode instanceof AbstractMethodDeclaration) {
-                       //methods and constructors have been regrouped into one single list
-                       flag[i] = 3;
-                       size2++;
-               } else {
-                       if (astNode instanceof TypeDeclaration) {
-                               flag[i] = 4;
-                               size3++;
-                       } else {
-                               //field
-                               flag[i] = 1;
-                               size1++;
-                       }
-               }
-       }
-
-       //arrays creation
-       TypeDeclaration typeDecl = (TypeDeclaration) astStack[astPtr];
-       if (size1 != 0)
-               typeDecl.fields = new FieldDeclaration[size1];
-       if (size2 != 0)
-               typeDecl.methods = new AbstractMethodDeclaration[size2];
-       if (size3 != 0)
-               typeDecl.memberTypes = new MemberTypeDeclaration[size3];
-
-       //arrays fill up
-       size1 = size2 = size3 = 0;
-       int flagI = flag[0], start = 0;
-       int length2;
-       for (int end = 0; end <= length; end++) //<HERE> the plus one allows to 
-               {
-               if (flagI != flag[end]) //treat the last element as a ended flag.....
-                       { //array copy
-                       switch (flagI) {
-                               case 1 :
-                                       size1 += (length2 = end - start);
-                                       System.arraycopy(
-                                               astStack, 
-                                               astPtr + start + 1, 
-                                               typeDecl.fields, 
-                                               size1 - length2, 
-                                               length2); 
-                                       break;
-                               case 3 :
-                                       size2 += (length2 = end - start);
-                                       System.arraycopy(
-                                               astStack, 
-                                               astPtr + start + 1, 
-                                               typeDecl.methods, 
-                                               size2 - length2, 
-                                               length2); 
-                                       break;
-                               case 4 :
-                                       size3 += (length2 = end - start);
-                                       System.arraycopy(
-                                               astStack, 
-                                               astPtr + start + 1, 
-                                               typeDecl.memberTypes, 
-                                               size3 - length2, 
-                                               length2); 
-                                       break;
-                       };
-                       flagI = flag[start = end];
-               }
-       }
-
-       if (typeDecl.memberTypes != null) {
-               for (int i = typeDecl.memberTypes.length - 1; i >= 0; i--) {
-                       typeDecl.memberTypes[i].enclosingType = typeDecl;
-               }
-       }
-}
-protected CompilationUnitDeclaration endParse(int act) {
-
-       this.lastAct = act;
-
-       if (currentElement != null){
-               currentElement.topElement().updateParseTree();
-               if (VERBOSE_RECOVERY){
-                       System.out.print(Util.bind("parser.syntaxRecovery")); //$NON-NLS-1$
-                       System.out.println("--------------------------");                //$NON-NLS-1$
-                       System.out.println(compilationUnit);            
-                       System.out.println("----------------------------------"); //$NON-NLS-1$
-               }               
-       } else {
-               if (diet & VERBOSE_RECOVERY){
-                       System.out.print(Util.bind("parser.regularParse"));      //$NON-NLS-1$
-                       System.out.println("--------------------------");        //$NON-NLS-1$
-                       System.out.println(compilationUnit);            
-                       System.out.println("----------------------------------"); //$NON-NLS-1$
-               }
-       }
-       if (scanner.recordLineSeparator) {
-               compilationUnit.compilationResult.lineSeparatorPositions = scanner.getLineEnds();
-       }
-       return compilationUnit;
-}
-/*
- * Flush annotations defined prior to a given positions.
- *
- * Note: annotations are stacked in syntactical order
- *
- * Either answer given <position>, or the end position of a comment line 
- * immediately following the <position> (same line)
- *
- * e.g.
- * void foo(){
- * } // end of method foo
- */
-public int flushAnnotationsDefinedPriorTo(int position) {
-
-       int lastAnnotationIndex = scanner.commentPtr;
-       if (lastAnnotationIndex < 0) return position; // no comment
-
-       // compute the index of the first obsolete comment
-       int index = lastAnnotationIndex;
-       int validCount = 0;
-       while (index >= 0){
-               int commentEnd = scanner.commentStops[index];
-               if (commentEnd < 0) commentEnd = -commentEnd; // negative end position for non-javadoc comments
-               if (commentEnd <= position){
-                       break;
-               }
-               index--;
-               validCount++;
-       }
-       // if the source at <position> is immediately followed by a line comment, then
-       // flush this comment and shift <position> to the comment end.
-       if (validCount > 0){
-               int immediateCommentEnd = -scanner.commentStops[index+1]; //non-javadoc comment end positions are negative
-               if (immediateCommentEnd > 0){ // only tolerating non-javadoc comments
-                       // is there any line break until the end of the immediate comment ? (thus only tolerating line comment)
-                       immediateCommentEnd--; // comment end in one char too far
-                       if (scanner.getLineNumber(position) == scanner.getLineNumber(immediateCommentEnd)){
-                               position = immediateCommentEnd;
-                               validCount--; // flush this comment
-                               index++;
-                       }
-               }
-       }
-       // position can be located in the middle of a line break
-       // this is a bug on Windows platform only.
-       // http://dev.eclipse.org/bugs/show_bug.cgi?id=10557
-       char[] source = scanner.source;
-       
-       if ((position < source.length)
-               && (source[position] == '\r')
-           && ((position + 1) < source.length)
-           && (source[position + 1] == '\n')) {
-               position++;
-       }
-       if (index < 0) return position; // no obsolete comment
-
-       if (validCount > 0){ // move valid comment infos, overriding obsolete comment infos
-               System.arraycopy(scanner.commentStarts, index + 1, scanner.commentStarts, 0, validCount);
-               System.arraycopy(scanner.commentStops, index + 1, scanner.commentStops, 0, validCount);         
-       }
-       scanner.commentPtr = validCount - 1;
-       return position;
-}
-public final int getFirstToken() {
-       // the first token is a virtual token that
-       // allows the parser to parse several goals
-       // even if they aren't LALR(1)....
-       // Goal ::= '++' CompilationUnit
-       // Goal ::= '--' MethodBody
-       // Goal ::= '==' ConstructorBody
-       // -- Initializer
-       // Goal ::= '>>' StaticInitializer
-       // Goal ::= '>>' Block
-       // -- error recovery
-       // Goal ::= '>>>' Headers
-       // Goal ::= '*' BlockStatements
-       // Goal ::= '*' MethodPushModifiersHeader
-       // -- JDOM
-       // Goal ::= '&&' FieldDeclaration
-       // Goal ::= '||' ImportDeclaration
-       // Goal ::= '?' PackageDeclaration
-       // Goal ::= '+' TypeDeclaration
-       // Goal ::= '/' GenericMethodDeclaration
-       // Goal ::= '&' ClassBodyDeclaration
-       // -- code snippet
-       // Goal ::= '%' Expression
-       // -- completion parser
-       // Goal ::= '!' ConstructorBlockStatementsopt
-       // Goal ::= '~' BlockStatementsopt
-       
-       return firstToken;
-}
-/*
- * Answer back an array of sourceStart/sourceEnd positions of the available JavaDoc comments.
- * The array is a flattened structure: 2*n entries with consecutives start and end positions.
- *
- * If no JavaDoc is available, then null is answered instead of an empty array.
- *
- * e.g. { 10, 20, 25, 45 }  --> javadoc1 from 10 to 20, javadoc2 from 25 to 45
- */
-public int[] getJavaDocPositions() {
-
-       int javadocCount = 0;
-       for (int i = 0, max = scanner.commentPtr; i <= max; i++){
-               // javadoc only (non javadoc comment have negative end positions.)
-               if (scanner.commentStops[i] > 0){
-                       javadocCount++;
-               }
-       }
-       if (javadocCount == 0) return null;
-
-       int[] positions = new int[2*javadocCount];
-       int index = 0;
-       for (int i = 0, max = scanner.commentPtr; i <= max; i++){
-               // javadoc only (non javadoc comment have negative end positions.)
-               if (scanner.commentStops[i] > 0){
-                       positions[index++] = scanner.commentStarts[i];
-                       positions[index++] = scanner.commentStops[i]-1; //stop is one over                      
-               }
-       }
-       return positions;
-}
-       protected void getMethodBodies(CompilationUnitDeclaration unit) {
-               //fill the methods bodies in order for the code to be generated
-
-               if (unit == null) return;
-               
-               if (unit.ignoreMethodBodies) {
-                       unit.ignoreFurtherInvestigation = true;
-                       return;
-                       // if initial diet parse did not work, no need to dig into method bodies.
-               }
-
-               //real parse of the method....
-               this.scanner.setSource(
-                       unit.compilationResult.compilationUnit.getContents());
-               if (unit.types != null) {
-                       for (int i = unit.types.length; --i >= 0;)
-                               unit.types[i].parseMethod(this, unit);
-               }
-       }
-protected TypeReference getTypeReference(int dim) { /* build a Reference on a variable that may be qualified or not
-This variable is a type reference and dim will be its dimensions*/
-
-       int length;
-       TypeReference ref;
-       if ((length = identifierLengthStack[identifierLengthPtr--]) == 1) {
-               // single variable reference
-               if (dim == 0) {
-                       ref = 
-                               new SingleTypeReference(
-                                       identifierStack[identifierPtr], 
-                                       identifierPositionStack[identifierPtr--]); 
-               } else {
-                       ref = 
-                               new ArrayTypeReference(
-                                       identifierStack[identifierPtr], 
-                                       dim, 
-                                       identifierPositionStack[identifierPtr--]); 
-                       ref.sourceEnd = endPosition;                    
-               }
-       } else {
-               if (length < 0) { //flag for precompiled type reference on base types
-                       ref = TypeReference.baseTypeReference(-length, dim);
-                       ref.sourceStart = intStack[intPtr--];
-                       if (dim == 0) {
-                               ref.sourceEnd = intStack[intPtr--];
-                       } else {
-                               intPtr--;
-                               ref.sourceEnd = endPosition;
-                       }
-               } else { //Qualified variable reference
-                       char[][] tokens = new char[length][];
-                       identifierPtr -= length;
-                       long[] positions = new long[length];
-                       System.arraycopy(identifierStack, identifierPtr + 1, tokens, 0, length);
-                       System.arraycopy(
-                               identifierPositionStack, 
-                               identifierPtr + 1, 
-                               positions, 
-                               0, 
-                               length); 
-                       if (dim == 0) {
-                               ref = new QualifiedTypeReference(tokens, positions);
-                       } else {
-                               ref = new ArrayQualifiedTypeReference(tokens, dim, positions);
-                               ref.sourceEnd = endPosition;
-                       }
-               }
-       };
-       return ref;
-}
-protected Expression getTypeReference(Expression exp) {
-       
-       exp.bits &= ~AstNode.RestrictiveFlagMASK;
-       exp.bits |= TYPE;
-       return exp;
-}
-protected NameReference getUnspecifiedReference() {
-       /* build a (unspecified) NameReference which may be qualified*/
-
-       int length;
-       NameReference ref;
-       if ((length = identifierLengthStack[identifierLengthPtr--]) == 1)
-               // single variable reference
-               ref = 
-                       new SingleNameReference(
-                               identifierStack[identifierPtr], 
-                               identifierPositionStack[identifierPtr--]); 
-       else
-               //Qualified variable reference
-               {
-               char[][] tokens = new char[length][];
-               identifierPtr -= length;
-               System.arraycopy(identifierStack, identifierPtr + 1, tokens, 0, length);
-               ref = 
-                       new QualifiedNameReference(tokens, 
-                               (int) (identifierPositionStack[identifierPtr + 1] >> 32), // sourceStart
-                               (int) identifierPositionStack[identifierPtr + length]); // sourceEnd
-       };
-       return ref;
-}
-protected NameReference getUnspecifiedReferenceOptimized() {
-       /* build a (unspecified) NameReference which may be qualified
-       The optimization occurs for qualified reference while we are
-       certain in this case the last item of the qualified name is
-       a field access. This optimization is IMPORTANT while it results
-       that when a NameReference is build, the type checker should always
-       look for that it is not a type reference */
-
-       int length;
-       NameReference ref;
-       if ((length = identifierLengthStack[identifierLengthPtr--]) == 1) {
-               // single variable reference
-               ref = 
-                       new SingleNameReference(
-                               identifierStack[identifierPtr], 
-                               identifierPositionStack[identifierPtr--]); 
-               ref.bits &= ~AstNode.RestrictiveFlagMASK;
-               ref.bits |= LOCAL | FIELD;
-               return ref;
-       }
-
-       //Qualified-variable-reference
-       //In fact it is variable-reference DOT field-ref , but it would result in a type
-       //conflict tha can be only reduce by making a superclass (or inetrface ) between
-       //nameReference and FiledReference or putting FieldReference under NameReference
-       //or else..........This optimisation is not really relevant so just leave as it is
-
-       char[][] tokens = new char[length][];
-       identifierPtr -= length;
-       System.arraycopy(identifierStack, identifierPtr + 1, tokens, 0, length);
-       ref = new QualifiedNameReference(
-                       tokens, 
-                       (int) (identifierPositionStack[identifierPtr + 1] >> 32), // sourceStart
-                       (int) identifierPositionStack[identifierPtr + length]); // sourceEnd
-       ref.bits &= ~AstNode.RestrictiveFlagMASK;
-       ref.bits |= LOCAL | FIELD;
-       return ref;
-}
-public void goForBlockStatementsOrMethodHeaders() {
-       //tells the scanner to go for block statements or method headers parsing 
+      case 155 : // System.out.println("ConstructorDeclaration ::= ConstructorHeader ConstructorBody");
+        consumeConstructorDeclaration();
+        break;
 
-       firstToken = TokenNameMULTIPLY;
-       scanner.recordLineSeparator = false;
-}
-public void goForClassBodyDeclarations() {
-       //tells the scanner to go for any body declarations parsing
+      case 156 : // System.out.println("ConstructorDeclaration ::= ConstructorHeader SEMICOLON");
+        consumeInvalidConstructorDeclaration();
+        break;
 
-       firstToken = TokenNameAND;
-       scanner.recordLineSeparator = true;
-}
-public void goForCompilationUnit(){
-       //tells the scanner to go for compilation unit parsing
-
-       firstToken = TokenNamePLUS_PLUS ;
-       scanner.linePtr = -1;   
-       scanner.recordLineSeparator = true;
-       scanner.currentLine= null;
-       scanner.lines= new ArrayList();
-}
-public void goForConstructorBody(){
-       //tells the scanner to go for compilation unit parsing
+      case 157 : // System.out.println("ConstructorBody ::= NestedMethod LBRACE ConstructorBlockStatementsopt RBRACE");
+        consumeConstructorBody();
+        break;
 
-       firstToken = TokenNameEQUAL_EQUAL ;
-       scanner.recordLineSeparator = false;
-}
-public void goForExpression() {
-       //tells the scanner to go for an expression parsing
+      case 160 : // System.out.println("ConstructorBlockStatementsopt ::= ExplicitConstructorInvocation BlockStatements");
+        consumeConstructorBlockStatements();
+        break;
 
-       firstToken = TokenNameREMAINDER;
-       scanner.recordLineSeparator = false;
-}
-public void goForFieldDeclaration(){
-       //tells the scanner to go for field declaration parsing
+      case 161 : // System.out.println("ExplicitConstructorInvocation ::= this LPAREN ArgumentListopt RPAREN SEMICOLON");
+        consumeExplicitConstructorInvocation(0, ExplicitConstructorCall.This);
+        break;
 
-       firstToken = TokenNameAND_AND ;
-       scanner.recordLineSeparator = true;
-}
-public void goForGenericMethodDeclaration(){
-       //tells the scanner to go for generic method declarations parsing
+      case 162 : // System.out.println("ExplicitConstructorInvocation ::= super LPAREN ArgumentListopt RPAREN SEMICOLON");
+        consumeExplicitConstructorInvocation(0, ExplicitConstructorCall.Super);
+        break;
 
-       firstToken = TokenNameDIVIDE;
-       scanner.recordLineSeparator = true;
-}
-public void goForHeaders(){
-       //tells the scanner to go for headers only parsing
+      case 163 : // System.out.println("ExplicitConstructorInvocation ::= Primary DOT super LPAREN ArgumentListopt RPAREN");
+        consumeExplicitConstructorInvocation(1, ExplicitConstructorCall.Super);
+        break;
 
-       firstToken = TokenNameUNSIGNED_RIGHT_SHIFT;
-       scanner.recordLineSeparator = true;
-}
-public void goForImportDeclaration(){
-       //tells the scanner to go for import declaration parsing
+      case 164 : // System.out.println("ExplicitConstructorInvocation ::= Name DOT super LPAREN ArgumentListopt RPAREN...");
+        consumeExplicitConstructorInvocation(2, ExplicitConstructorCall.Super);
+        break;
 
-       firstToken = TokenNameOR_OR ;
-       scanner.recordLineSeparator = true;
-}
-public void goForInitializer(){
-       //tells the scanner to go for initializer parsing
+      case 165 : // System.out.println("ExplicitConstructorInvocation ::= Primary DOT this LPAREN ArgumentListopt RPAREN...");
+        consumeExplicitConstructorInvocation(1, ExplicitConstructorCall.This);
+        break;
 
-       firstToken = TokenNameRIGHT_SHIFT ;
-       scanner.recordLineSeparator = false;
-}
-public void goForMethodBody(){
-       //tells the scanner to go for method body parsing
+      case 166 : // System.out.println("ExplicitConstructorInvocation ::= Name DOT this LPAREN ArgumentListopt RPAREN...");
+        consumeExplicitConstructorInvocation(2, ExplicitConstructorCall.This);
+        break;
 
-       firstToken = TokenNameMINUS_MINUS ;
-       scanner.recordLineSeparator = false;
-}
-public void goForPackageDeclaration() {
-       //tells the scanner to go for package declaration parsing
+      case 167 : // System.out.println("InterfaceDeclaration ::= InterfaceHeader InterfaceBody");
+        consumeInterfaceDeclaration();
+        break;
 
-       firstToken = TokenNameQUESTION;
-       scanner.recordLineSeparator = true;
-}
-public void goForTypeDeclaration() {
-       //tells the scanner to go for type (interface or class) declaration parsing
+      case 168 : // System.out.println("InterfaceHeader ::= InterfaceHeaderName InterfaceHeaderExtendsopt");
+        consumeInterfaceHeader();
+        break;
 
-       firstToken = TokenNamePLUS;
-       scanner.recordLineSeparator = true;
-}
-public final static void grammar(){
-/*
---main options
-%options ACTION, AN=JavaAction.java, GP=java, 
-%options FILE-PREFIX=java, ESCAPE=$, PREFIX=TokenName, OUTPUT-SIZE=125 ,
-%options NOGOTO-DEFAULT, SINGLE-PRODUCTIONS, LALR=1 , TABLE=TIME , 
-
---error recovering options.....
-%options ERROR_MAPS 
-
---grammar understanding options
-%options first follow
-%options TRACE=FULL ,
-%options VERBOSE
-
---Usefull macros helping reading/writing semantic actions
-$Define 
-$putCase 
-/.    case $rule_number : // System.out.println("$rule_text");  
-                  ./
-
-$break
-/. 
-                       break ;
-./
-
--- here it starts really ------------------------------------------
-$Terminals
-
-       Identifier
-
-       abstract assert boolean break byte case catch char class 
-       continue default do double else extends false final finally float
-       for if implements import instanceof int
-       interface long native new null package private
-       protected public return short static strictfp super switch
-       synchronized this throw throws transient true try void
-       volatile while
-
-       IntegerLiteral
-       LongLiteral
-       FloatingPointLiteral
-       DoubleLiteral
-       CharacterLiteral
-       StringLiteral
-
-       PLUS_PLUS
-       MINUS_MINUS
-       EQUAL_EQUAL
-       LESS_EQUAL
-       GREATER_EQUAL
-       NOT_EQUAL
-       LEFT_SHIFT
-       RIGHT_SHIFT
-       UNSIGNED_RIGHT_SHIFT
-       PLUS_EQUAL
-       MINUS_EQUAL
-       MULTIPLY_EQUAL
-       DIVIDE_EQUAL
-       AND_EQUAL
-       OR_EQUAL
-       XOR_EQUAL
-       REMAINDER_EQUAL
-       LEFT_SHIFT_EQUAL
-       RIGHT_SHIFT_EQUAL
-       UNSIGNED_RIGHT_SHIFT_EQUAL
-       OR_OR
-       AND_AND
-       PLUS
-       MINUS
-       NOT
-       REMAINDER
-       XOR
-       AND
-       MULTIPLY
-       OR
-       TWIDDLE
-       DIVIDE
-       GREATER
-       LESS
-       LPAREN
-       RPAREN
-       LBRACE
-       RBRACE
-       LBRACKET
-       RBRACKET
-       SEMICOLON
-       QUESTION
-       COLON
-       COMMA
-       DOT
-       EQUAL
-
---    BodyMarker
-
-$Alias
-
-       '++'   ::= PLUS_PLUS
-       '--'   ::= MINUS_MINUS
-       '=='   ::= EQUAL_EQUAL
-       '<='   ::= LESS_EQUAL
-       '>='   ::= GREATER_EQUAL
-       '!='   ::= NOT_EQUAL
-       '<<'   ::= LEFT_SHIFT
-       '>>'   ::= RIGHT_SHIFT
-       '>>>'  ::= UNSIGNED_RIGHT_SHIFT
-       '+='   ::= PLUS_EQUAL
-       '-='   ::= MINUS_EQUAL
-       '*='   ::= MULTIPLY_EQUAL
-       '/='   ::= DIVIDE_EQUAL
-       '&='   ::= AND_EQUAL
-       '|='   ::= OR_EQUAL
-       '^='   ::= XOR_EQUAL
-       '%='   ::= REMAINDER_EQUAL
-       '<<='  ::= LEFT_SHIFT_EQUAL
-       '>>='  ::= RIGHT_SHIFT_EQUAL
-       '>>>=' ::= UNSIGNED_RIGHT_SHIFT_EQUAL
-       '||'   ::= OR_OR
-       '&&'   ::= AND_AND
-
-       '+'    ::= PLUS
-       '-'    ::= MINUS
-       '!'    ::= NOT
-       '%'    ::= REMAINDER
-       '^'    ::= XOR
-       '&'    ::= AND
-       '*'    ::= MULTIPLY
-       '|'    ::= OR
-       '~'    ::= TWIDDLE
-       '/'    ::= DIVIDE
-       '>'    ::= GREATER
-       '<'    ::= LESS
-       '('    ::= LPAREN
-       ')'    ::= RPAREN
-       '{'    ::= LBRACE
-       '}'    ::= RBRACE
-       '['    ::= LBRACKET
-       ']'    ::= RBRACKET
-       ';'    ::= SEMICOLON
-       '?'    ::= QUESTION
-       ':'    ::= COLON
-       ','    ::= COMMA
-       '.'    ::= DOT
-       '='    ::= EQUAL
-       
-$Start
-       Goal
-
-$Rules
-
-/. // This method is part of an automatic generation : do NOT edit-modify  
-protected void consumeRule(int act) {
-  switch ( act ) {
-./
-
-
-
-Goal ::= '++' CompilationUnit
-Goal ::= '--' MethodBody
-Goal ::= '==' ConstructorBody
--- Initializer
-Goal ::= '>>' StaticInitializer
-Goal ::= '>>' Initializer
--- error recovery
-Goal ::= '>>>' Headers
-Goal ::= '*' BlockStatements
-Goal ::= '*' MethodPushModifiersHeader
-Goal ::= '*' CatchHeader
--- JDOM
-Goal ::= '&&' FieldDeclaration
-Goal ::= '||' ImportDeclaration
-Goal ::= '?' PackageDeclaration
-Goal ::= '+' TypeDeclaration
-Goal ::= '/' GenericMethodDeclaration
-Goal ::= '&' ClassBodyDeclaration
--- code snippet
-Goal ::= '%' Expression
--- completion parser
-Goal ::= '!' ConstructorBlockStatementsopt
-Goal ::= '~' BlockStatementsopt
-
-Literal -> IntegerLiteral
-Literal -> LongLiteral
-Literal -> FloatingPointLiteral
-Literal -> DoubleLiteral
-Literal -> CharacterLiteral
-Literal -> StringLiteral
-Literal -> null
-Literal -> BooleanLiteral
-BooleanLiteral -> true
-BooleanLiteral -> false
-
--------------------------------------------------------------
--------------------------------------------------------------
---a Type results in both a push of its dimension(s) and its name(s).
-
-Type ::= PrimitiveType
- /.$putCase consumePrimitiveType(); $break ./
-Type -> ReferenceType
-
-PrimitiveType -> NumericType
-NumericType -> IntegralType
-NumericType -> FloatingPointType
-
-PrimitiveType -> 'boolean'
-PrimitiveType -> 'void'
-IntegralType -> 'byte'
-IntegralType -> 'short'
-IntegralType -> 'int'
-IntegralType -> 'long'
-IntegralType -> 'char'
-FloatingPointType -> 'float'
-FloatingPointType -> 'double'
-
-ReferenceType ::= ClassOrInterfaceType
-/.$putCase consumeReferenceType();  $break ./
-ReferenceType -> ArrayType -- here a push of dimensions is done, that explains the two previous push 0
-
-ClassOrInterfaceType -> Name
-
---
--- These rules have been rewritten to avoid some conflicts introduced
--- by adding the 1.1 features
---
--- ArrayType ::= PrimitiveType '[' ']'
--- ArrayType ::= Name '[' ']'
--- ArrayType ::= ArrayType '[' ']'
---
-
-ArrayType ::= PrimitiveType Dims
-ArrayType ::= Name Dims
-
-ClassType -> ClassOrInterfaceType
-
-
---------------------------------------------------------------
---------------------------------------------------------------
-
-Name -> SimpleName
-Name -> QualifiedName
-
-SimpleName -> 'Identifier'
-
-QualifiedName ::= Name '.' SimpleName 
-/.$putCase consumeQualifiedName(); $break ./
-
-CompilationUnit ::= EnterCompilationUnit PackageDeclarationopt ImportDeclarationsopt TypeDeclarationsopt
-/.$putCase consumeCompilationUnit(); $break ./
-
-EnterCompilationUnit ::= $empty
-/.$putCase consumeEnterCompilationUnit(); $break ./
-
-Headers -> Header
-Headers ::= Headers Header
-
-Header -> ImportDeclaration
-Header -> PackageDeclaration
-Header -> ClassHeader
-Header -> InterfaceHeader
-Header -> StaticInitializer
-Header -> MethodHeader
-Header -> ConstructorHeader
-Header -> FieldDeclaration
-Header -> AllocationHeader
-
-CatchHeader ::= 'catch' '(' FormalParameter ')' '{'
-/.$putCase consumeCatchHeader(); $break ./
-
-ImportDeclarations -> ImportDeclaration
-ImportDeclarations ::= ImportDeclarations ImportDeclaration 
-/.$putCase consumeImportDeclarations(); $break ./
-
-TypeDeclarations -> TypeDeclaration
-TypeDeclarations ::= TypeDeclarations TypeDeclaration
-/.$putCase consumeTypeDeclarations(); $break ./
-
-PackageDeclaration ::= PackageDeclarationName ';'
-/.$putCase  consumePackageDeclaration(); $break ./
-
-PackageDeclarationName ::= 'package' Name
-/.$putCase  consumePackageDeclarationName(); $break ./
-
-ImportDeclaration -> SingleTypeImportDeclaration
-ImportDeclaration -> TypeImportOnDemandDeclaration
-
-SingleTypeImportDeclaration ::= SingleTypeImportDeclarationName ';'
-/.$putCase consumeSingleTypeImportDeclaration(); $break ./
-                         
-SingleTypeImportDeclarationName ::= 'import' Name
-/.$putCase consumeSingleTypeImportDeclarationName(); $break ./
-                         
-TypeImportOnDemandDeclaration ::= TypeImportOnDemandDeclarationName ';'
-/.$putCase consumeTypeImportOnDemandDeclaration(); $break ./
-
-TypeImportOnDemandDeclarationName ::= 'import' Name '.' '*'
-/.$putCase consumeTypeImportOnDemandDeclarationName(); $break ./
-
-TypeDeclaration -> ClassDeclaration
-TypeDeclaration -> InterfaceDeclaration
--- this declaration in part of a list od declaration and we will
--- use and optimized list length calculation process 
--- thus we decrement the number while it will be incremend.....
-TypeDeclaration ::= ';' 
-/. $putCase consumeEmptyTypeDeclaration(); $break ./
-
---18.7 Only in the LALR(1) Grammar
-
-Modifiers ::= Modifier
-Modifiers ::= Modifiers Modifier
-
-Modifier -> 'public' 
-Modifier -> 'protected'
-Modifier -> 'private'
-Modifier -> 'static'
-Modifier -> 'abstract'
-Modifier -> 'final'
-Modifier -> 'native'
-Modifier -> 'synchronized'
-Modifier -> 'transient'
-Modifier -> 'volatile'
-Modifier -> 'strictfp'
-
---18.8 Productions from 8: Class Declarations
---ClassModifier ::=
---      'abstract'
---    | 'final'
---    | 'public'
---18.8.1 Productions from 8.1: Class Declarations
+      case 169 : // System.out.println("InterfaceHeaderName ::= Modifiersopt interface Identifier");
+        consumeInterfaceHeaderName();
+        break;
 
-ClassDeclaration ::= ClassHeader ClassBody
-/.$putCase consumeClassDeclaration(); $break ./
+      case 171 : // System.out.println("InterfaceHeaderExtends ::= extends InterfaceTypeList");
+        consumeInterfaceHeaderExtends();
+        break;
 
-ClassHeader ::= ClassHeaderName ClassHeaderExtendsopt ClassHeaderImplementsopt
-/.$putCase consumeClassHeader(); $break ./
-
-ClassHeaderName ::= Modifiersopt 'class' 'Identifier'
-/.$putCase consumeClassHeaderName(); $break ./
-
-ClassHeaderExtends ::= 'extends' ClassType
-/.$putCase consumeClassHeaderExtends(); $break ./
-
-ClassHeaderImplements ::= 'implements' InterfaceTypeList
-/.$putCase consumeClassHeaderImplements(); $break ./
-
-InterfaceTypeList -> InterfaceType
-InterfaceTypeList ::= InterfaceTypeList ',' InterfaceType
-/.$putCase consumeInterfaceTypeList(); $break ./
-
-InterfaceType ::= ClassOrInterfaceType
-/.$putCase consumeInterfaceType(); $break ./
-
-ClassBody ::= '{' ClassBodyDeclarationsopt '}'
-
-ClassBodyDeclarations ::= ClassBodyDeclaration
-ClassBodyDeclarations ::= ClassBodyDeclarations ClassBodyDeclaration
-/.$putCase consumeClassBodyDeclarations(); $break ./
-
-ClassBodyDeclaration -> ClassMemberDeclaration
-ClassBodyDeclaration -> StaticInitializer
-ClassBodyDeclaration -> ConstructorDeclaration
---1.1 feature
-ClassBodyDeclaration ::= Diet NestedMethod Block
-/.$putCase consumeClassBodyDeclaration(); $break ./
-Diet ::= $empty
-/.$putCase consumeDiet(); $break./
-
-Initializer ::= Diet NestedMethod Block
-/.$putCase consumeClassBodyDeclaration(); $break ./
-
-ClassMemberDeclaration -> FieldDeclaration
-ClassMemberDeclaration -> MethodDeclaration
---1.1 feature
-ClassMemberDeclaration -> ClassDeclaration
---1.1 feature
-ClassMemberDeclaration -> InterfaceDeclaration
-
--- Empty declarations are not valid Java ClassMemberDeclarations.
--- However, since the current (2/14/97) Java compiler accepts them 
--- (in fact, some of the official tests contain this erroneous
--- syntax)
-
-GenericMethodDeclaration -> MethodDeclaration
-GenericMethodDeclaration -> ConstructorDeclaration
-
-ClassMemberDeclaration ::= ';'
-/.$putCase consumeEmptyClassMemberDeclaration(); $break./
-
---18.8.2 Productions from 8.3: Field Declarations
---VariableModifier ::=
---      'public'
---    | 'protected'
---    | 'private'
---    | 'static'
---    | 'final'
---    | 'transient'
---    | 'volatile'
+      case 174 : // System.out.println("InterfaceMemberDeclarations ::= InterfaceMemberDeclarations...");
+        consumeInterfaceMemberDeclarations();
+        break;
 
-FieldDeclaration ::= Modifiersopt Type VariableDeclarators ';'
-/.$putCase consumeFieldDeclaration(); $break ./
+      case 175 : // System.out.println("InterfaceMemberDeclaration ::= SEMICOLON");
+        consumeEmptyInterfaceMemberDeclaration();
+        break;
 
-VariableDeclarators -> VariableDeclarator 
-VariableDeclarators ::= VariableDeclarators ',' VariableDeclarator
-/.$putCase consumeVariableDeclarators(); $break ./
+      case 178 : // System.out.println("InterfaceMemberDeclaration ::= InvalidMethodDeclaration");
+        ignoreMethodBody();
+        break;
 
-VariableDeclarator ::= VariableDeclaratorId EnterVariable ExitVariableWithoutInitialization
+      case 179 : // System.out.println("InvalidConstructorDeclaration ::= ConstructorHeader ConstructorBody");
+        ignoreInvalidConstructorDeclaration(true);
+        break;
 
-VariableDeclarator ::= VariableDeclaratorId EnterVariable '=' ForceNoDiet VariableInitializer RestoreDiet ExitVariableWithInitialization
+      case 180 : // System.out.println("InvalidConstructorDeclaration ::= ConstructorHeader SEMICOLON");
+        ignoreInvalidConstructorDeclaration(false);
+        break;
 
-EnterVariable ::= $empty
-/.$putCase consumeEnterVariable(); $break ./
+      case 186 : // System.out.println("ArrayInitializer ::= LBRACE ,opt RBRACE");
+        consumeEmptyArrayInitializer();
+        break;
 
-ExitVariableWithInitialization ::= $empty
-/.$putCase consumeExitVariableWithInitialization(); $break ./
+      case 187 : // System.out.println("ArrayInitializer ::= LBRACE VariableInitializers RBRACE");
+        consumeArrayInitializer();
+        break;
 
-ExitVariableWithoutInitialization ::= $empty
-/.$putCase consumeExitVariableWithoutInitialization(); $break ./
+      case 188 : // System.out.println("ArrayInitializer ::= LBRACE VariableInitializers COMMA RBRACE");
+        consumeArrayInitializer();
+        break;
 
-ForceNoDiet ::= $empty
-/.$putCase consumeForceNoDiet(); $break ./
-RestoreDiet ::= $empty
-/.$putCase consumeRestoreDiet(); $break ./
+      case 190 : // System.out.println("VariableInitializers ::= VariableInitializers COMMA VariableInitializer");
+        consumeVariableInitializers();
+        break;
 
-VariableDeclaratorId ::= 'Identifier' Dimsopt
+      case 191 : // System.out.println("Block ::= OpenBlock LBRACE BlockStatementsopt RBRACE");
+        consumeBlock();
+        break;
 
-VariableInitializer -> Expression
-VariableInitializer -> ArrayInitializer
+      case 192 : // System.out.println("OpenBlock ::=");
+        consumeOpenBlock();
+        break;
 
---18.8.3 Productions from 8.4: Method Declarations
---MethodModifier ::=
---      'public'
---    | 'protected'
---    | 'private'
---    | 'static'
---    | 'abstract'
---    | 'final'
---    | 'native'
---    | 'synchronized'
---
+      case 194 : // System.out.println("BlockStatements ::= BlockStatements BlockStatement");
+        consumeBlockStatements();
+        break;
 
-MethodDeclaration -> AbstractMethodDeclaration
-MethodDeclaration ::= MethodHeader MethodBody 
-/.$putCase // set to true to consume a method with a body
-  consumeMethodDeclaration(true);  $break ./
+      case 198 : // System.out.println("BlockStatement ::= InvalidInterfaceDeclaration");
+        ignoreInterfaceDeclaration();
+        break;
 
-AbstractMethodDeclaration ::= MethodHeader ';'
-/.$putCase // set to false to consume a method without body
-  consumeMethodDeclaration(false); $break ./
+      case 199 : // System.out.println("LocalVariableDeclarationStatement ::= LocalVariableDeclaration SEMICOLON");
+        consumeLocalVariableDeclarationStatement();
+        break;
 
-MethodHeader ::= MethodHeaderName MethodHeaderParameters MethodHeaderExtendedDims MethodHeaderThrowsClauseopt
-/.$putCase consumeMethodHeader(); $break ./
+      case 200 : // System.out.println("LocalVariableDeclaration ::= Type PushModifiers VariableDeclarators");
+        consumeLocalVariableDeclaration();
+        break;
 
-MethodPushModifiersHeader ::= MethodPushModifiersHeaderName MethodHeaderParameters MethodHeaderExtendedDims MethodHeaderThrowsClauseopt
-/.$putCase consumeMethodHeader(); $break ./
+      case 201 : // System.out.println("LocalVariableDeclaration ::= Modifiers Type PushModifiers VariableDeclarators");
+        consumeLocalVariableDeclaration();
+        break;
 
-MethodPushModifiersHeaderName ::= Modifiers Type PushModifiers 'Identifier' '(' 
-/.$putCase consumeMethodPushModifiersHeaderName(); $break ./
+      case 202 : // System.out.println("PushModifiers ::=");
+        consumePushModifiers();
+        break;
 
-MethodPushModifiersHeaderName ::= Type PushModifiers 'Identifier' '(' 
-/.$putCase consumeMethodPushModifiersHeaderName(); $break ./
+      case 226 : // System.out.println("EmptyStatement ::= SEMICOLON");
+        consumeEmptyStatement();
+        break;
 
-MethodHeaderName ::= Modifiersopt Type 'Identifier' '('
-/.$putCase consumeMethodHeaderName(); $break ./
+      case 227 : // System.out.println("LabeledStatement ::= Identifier COLON Statement");
+        consumeStatementLabel();
+        break;
 
-MethodHeaderParameters ::= FormalParameterListopt ')'
-/.$putCase consumeMethodHeaderParameters(); $break ./
+      case 228 : // System.out.println("LabeledStatementNoShortIf ::= Identifier COLON StatementNoShortIf");
+        consumeStatementLabel();
+        break;
 
-MethodHeaderExtendedDims ::= Dimsopt
-/.$putCase consumeMethodHeaderExtendedDims(); $break ./
+      case 229 : // System.out.println("ExpressionStatement ::= StatementExpression SEMICOLON");
+        consumeExpressionStatement();
+        break;
 
-MethodHeaderThrowsClause ::= 'throws' ClassTypeList
-/.$putCase consumeMethodHeaderThrowsClause(); $break ./
+      case 237 : // System.out.println("IfThenStatement ::= if LPAREN Expression RPAREN Statement");
+        consumeStatementIfNoElse();
+        break;
 
-ConstructorHeader ::= ConstructorHeaderName MethodHeaderParameters MethodHeaderThrowsClauseopt
-/.$putCase consumeConstructorHeader(); $break ./
+      case 238 : // System.out.println("IfThenElseStatement ::= if LPAREN Expression RPAREN StatementNoShortIf else...");
+        consumeStatementIfWithElse();
+        break;
 
-ConstructorHeaderName ::=  Modifiersopt 'Identifier' '('
-/.$putCase consumeConstructorHeaderName(); $break ./
+      case 239 : // System.out.println("IfThenElseStatementNoShortIf ::= if LPAREN Expression RPAREN StatementNoShortIf...");
+        consumeStatementIfWithElse();
+        break;
 
-FormalParameterList -> FormalParameter
-FormalParameterList ::= FormalParameterList ',' FormalParameter
-/.$putCase consumeFormalParameterList(); $break ./
+      case 240 : // System.out.println("SwitchStatement ::= switch OpenBlock LPAREN Expression RPAREN SwitchBlock");
+        consumeStatementSwitch();
+        break;
 
---1.1 feature
-FormalParameter ::= Modifiersopt Type VariableDeclaratorId
-/.$putCase // the boolean is used to know if the modifiers should be reset
-       consumeFormalParameter(); $break ./
+      case 241 : // System.out.println("SwitchBlock ::= LBRACE RBRACE");
+        consumeEmptySwitchBlock();
+        break;
 
-ClassTypeList -> ClassTypeElt
-ClassTypeList ::= ClassTypeList ',' ClassTypeElt
-/.$putCase consumeClassTypeList(); $break ./
+      case 244 : // System.out.println("SwitchBlock ::= LBRACE SwitchBlockStatements SwitchLabels RBRACE");
+        consumeSwitchBlock();
+        break;
 
-ClassTypeElt ::= ClassType
-/.$putCase consumeClassTypeElt(); $break ./
+      case 246 : // System.out.println("SwitchBlockStatements ::= SwitchBlockStatements SwitchBlockStatement");
+        consumeSwitchBlockStatements();
+        break;
 
+      case 247 : // System.out.println("SwitchBlockStatement ::= SwitchLabels BlockStatements");
+        consumeSwitchBlockStatement();
+        break;
 
-MethodBody ::= NestedMethod '{' BlockStatementsopt '}' 
-/.$putCase consumeMethodBody(); $break ./
+      case 249 : // System.out.println("SwitchLabels ::= SwitchLabels SwitchLabel");
+        consumeSwitchLabels();
+        break;
 
-NestedMethod ::= $empty
-/.$putCase consumeNestedMethod(); $break ./
+      case 250 : // System.out.println("SwitchLabel ::= case ConstantExpression COLON");
+        consumeCaseLabel();
+        break;
 
---18.8.4 Productions from 8.5: Static Initializers
+      case 251 : // System.out.println("SwitchLabel ::= default COLON");
+        consumeDefaultLabel();
+        break;
 
-StaticInitializer ::=  StaticOnly Block
-/.$putCase consumeStaticInitializer(); $break./
+      case 252 : // System.out.println("WhileStatement ::= while LPAREN Expression RPAREN Statement");
+        consumeStatementWhile();
+        break;
 
-StaticOnly ::= 'static'
-/.$putCase consumeStaticOnly(); $break ./
+      case 253 : // System.out.println("WhileStatementNoShortIf ::= while LPAREN Expression RPAREN StatementNoShortIf");
+        consumeStatementWhile();
+        break;
 
---18.8.5 Productions from 8.6: Constructor Declarations
---ConstructorModifier ::=
---      'public'
---    | 'protected'
---    | 'private'
---
---
-ConstructorDeclaration ::= ConstructorHeader ConstructorBody
-/.$putCase consumeConstructorDeclaration() ; $break ./ 
+      case 254 : // System.out.println("DoStatement ::= do Statement while LPAREN Expression RPAREN SEMICOLON");
+        consumeStatementDo();
+        break;
 
--- These rules are added to be able to parse constructors with no body
-ConstructorDeclaration ::= ConstructorHeader ';'
-/.$putCase consumeInvalidConstructorDeclaration() ; $break ./ 
+      case 255 : // System.out.println("ForStatement ::= for LPAREN ForInitopt SEMICOLON Expressionopt SEMICOLON...");
+        consumeStatementFor();
+        break;
 
--- the rules ExplicitConstructorInvocationopt has been expanded
--- in the rule below in order to make the grammar lalr(1).
--- ConstructorBody ::= '{' ExplicitConstructorInvocationopt BlockStatementsopt '}'
--- Other inlining has occured into the next rule too....
+      case 256 : // System.out.println("ForStatementNoShortIf ::= for LPAREN ForInitopt SEMICOLON Expressionopt SEMICOLON");
+        consumeStatementFor();
+        break;
 
-ConstructorBody ::= NestedMethod  '{' ConstructorBlockStatementsopt '}'
-/.$putCase consumeConstructorBody(); $break ./
+      case 257 : // System.out.println("ForInit ::= StatementExpressionList");
+        consumeForInit();
+        break;
 
-ConstructorBlockStatementsopt -> BlockStatementsopt
+      case 261 : // System.out.println("StatementExpressionList ::= StatementExpressionList COMMA StatementExpression");
+        consumeStatementExpressionList();
+        break;
 
-ConstructorBlockStatementsopt -> ExplicitConstructorInvocation
+      case 262 : // System.out.println("AssertStatement ::= assert Expression SEMICOLON");
+        consumeSimpleAssertStatement();
+        break;
 
-ConstructorBlockStatementsopt ::= ExplicitConstructorInvocation BlockStatements
-/.$putCase  consumeConstructorBlockStatements(); $break ./
+      case 263 : // System.out.println("AssertStatement ::= assert Expression COLON Expression SEMICOLON");
+        consumeAssertStatement();
+        break;
 
-ExplicitConstructorInvocation ::= 'this' '(' ArgumentListopt ')' ';'
-/.$putCase consumeExplicitConstructorInvocation(0,ExplicitConstructorCall.This); $break ./
+      case 264 : // System.out.println("BreakStatement ::= break SEMICOLON");
+        consumeStatementBreak();
+        break;
 
-ExplicitConstructorInvocation ::= 'super' '(' ArgumentListopt ')' ';'
-/.$putCase consumeExplicitConstructorInvocation(0,ExplicitConstructorCall.Super); $break ./
+      case 265 : // System.out.println("BreakStatement ::= break Identifier SEMICOLON");
+        consumeStatementBreakWithLabel();
+        break;
 
---1.1 feature
-ExplicitConstructorInvocation ::= Primary '.' 'super' '(' ArgumentListopt ')' ';'
-/.$putCase consumeExplicitConstructorInvocation(1, ExplicitConstructorCall.Super); $break ./
+      case 266 : // System.out.println("ContinueStatement ::= continue SEMICOLON");
+        consumeStatementContinue();
+        break;
 
---1.1 feature
-ExplicitConstructorInvocation ::= Name '.' 'super' '(' ArgumentListopt ')' ';'
-/.$putCase consumeExplicitConstructorInvocation(2, ExplicitConstructorCall.Super); $break ./
+      case 267 : // System.out.println("ContinueStatement ::= continue Identifier SEMICOLON");
+        consumeStatementContinueWithLabel();
+        break;
 
---1.1 feature
-ExplicitConstructorInvocation ::= Primary '.' 'this' '(' ArgumentListopt ')' ';'
-/.$putCase consumeExplicitConstructorInvocation(1, ExplicitConstructorCall.This); $break ./
+      case 268 : // System.out.println("ReturnStatement ::= return Expressionopt SEMICOLON");
+        consumeStatementReturn();
+        break;
 
---1.1 feature
-ExplicitConstructorInvocation ::= Name '.' 'this' '(' ArgumentListopt ')' ';'
-/.$putCase consumeExplicitConstructorInvocation(2, ExplicitConstructorCall.This); $break ./
+      case 269 : // System.out.println("ThrowStatement ::= throw Expression SEMICOLON");
+        consumeStatementThrow();
 
---18.9 Productions from 9: Interface Declarations
+        break;
 
---18.9.1 Productions from 9.1: Interface Declarations
---InterfaceModifier ::=
---      'public'
---    | 'abstract'
---
-InterfaceDeclaration ::= InterfaceHeader InterfaceBody
-/.$putCase consumeInterfaceDeclaration(); $break ./
+      case 270 : // System.out.println("SynchronizedStatement ::= OnlySynchronized LPAREN Expression RPAREN Block");
+        consumeStatementSynchronized();
+        break;
 
-InterfaceHeader ::= InterfaceHeaderName InterfaceHeaderExtendsopt
-/.$putCase consumeInterfaceHeader(); $break ./
+      case 271 : // System.out.println("OnlySynchronized ::= synchronized");
+        consumeOnlySynchronized();
+        break;
 
-InterfaceHeaderName ::= Modifiersopt 'interface' 'Identifier'
-/.$putCase consumeInterfaceHeaderName(); $break ./
+      case 272 : // System.out.println("TryStatement ::= try Block Catches");
+        consumeStatementTry(false);
+        break;
 
--- This rule will be used to accept inner local interface and then report a relevant error message
-InvalidInterfaceDeclaration -> InterfaceHeader InterfaceBody
+      case 273 : // System.out.println("TryStatement ::= try Block Catchesopt Finally");
+        consumeStatementTry(true);
+        break;
 
-InterfaceHeaderExtends ::= 'extends' InterfaceTypeList
-/.$putCase consumeInterfaceHeaderExtends(); $break ./
+      case 275 : // System.out.println("Catches ::= Catches CatchClause");
+        consumeCatches();
+        break;
 
-InterfaceBody ::= '{' InterfaceMemberDeclarationsopt '}' 
-
-InterfaceMemberDeclarations -> InterfaceMemberDeclaration
-InterfaceMemberDeclarations ::= InterfaceMemberDeclarations InterfaceMemberDeclaration
-/.$putCase consumeInterfaceMemberDeclarations(); $break ./
-
---same as for class members
-InterfaceMemberDeclaration ::= ';'
-/.$putCase consumeEmptyInterfaceMemberDeclaration(); $break ./
+      case 276 : // System.out.println("CatchClause ::= catch LPAREN FormalParameter RPAREN Block");
+        consumeStatementCatch();
+        break;
 
--- This rule is added to be able to parse non abstract method inside interface and then report a relevent error message
-InvalidMethodDeclaration -> MethodHeader MethodBody
+      case 278 : // System.out.println("PushLPAREN ::= LPAREN");
+        consumeLeftParen();
+        break;
 
-InterfaceMemberDeclaration -> ConstantDeclaration
-InterfaceMemberDeclaration ::= InvalidMethodDeclaration
-/.$putCase ignoreMethodBody(); $break ./
-
--- These rules are added to be able to parse constructors inside interface and then report a relevent error message
-InvalidConstructorDeclaration ::= ConstructorHeader ConstructorBody
-/.$putCase ignoreInvalidConstructorDeclaration(true);  $break ./
-
-InvalidConstructorDeclaration ::= ConstructorHeader ';'
-/.$putCase ignoreInvalidConstructorDeclaration(false);  $break ./
-
-InterfaceMemberDeclaration -> AbstractMethodDeclaration
-InterfaceMemberDeclaration -> InvalidConstructorDeclaration
---1.1 feature
-InterfaceMemberDeclaration -> ClassDeclaration
---1.1 feature
-InterfaceMemberDeclaration -> InterfaceDeclaration
-
-ConstantDeclaration -> FieldDeclaration
-
-ArrayInitializer ::= '{' ,opt '}'
-/.$putCase consumeEmptyArrayInitializer(); $break ./
-ArrayInitializer ::= '{' VariableInitializers '}'
-/.$putCase consumeArrayInitializer(); $break ./
-ArrayInitializer ::= '{' VariableInitializers , '}'
-/.$putCase consumeArrayInitializer(); $break ./
+      case 279 : // System.out.println("PushRPAREN ::= RPAREN");
+        consumeRightParen();
+        break;
 
-VariableInitializers ::= VariableInitializer
-VariableInitializers ::= VariableInitializers ',' VariableInitializer
-/.$putCase consumeVariableInitializers(); $break ./
+      case 283 : // System.out.println("PrimaryNoNewArray ::= this");
+        consumePrimaryNoNewArrayThis();
+        break;
 
-Block ::= OpenBlock '{' BlockStatementsopt '}'
-/.$putCase consumeBlock(); $break ./
-OpenBlock ::= $empty
-/.$putCase consumeOpenBlock() ; $break ./
-
-BlockStatements -> BlockStatement
-BlockStatements ::= BlockStatements BlockStatement
-/.$putCase consumeBlockStatements() ; $break ./
-
-BlockStatement -> LocalVariableDeclarationStatement
-BlockStatement -> Statement
---1.1 feature
-BlockStatement -> ClassDeclaration
-BlockStatement ::= InvalidInterfaceDeclaration
-/.$putCase ignoreInterfaceDeclaration(); $break ./
-
-LocalVariableDeclarationStatement ::= LocalVariableDeclaration ';'
-/.$putCase consumeLocalVariableDeclarationStatement(); $break ./
-
-LocalVariableDeclaration ::= Type PushModifiers VariableDeclarators
-/.$putCase consumeLocalVariableDeclaration(); $break ./
-
--- 1.1 feature
--- The modifiers part of this rule makes the grammar more permissive. 
--- The only modifier here is final. We put Modifiers to allow multiple modifiers
--- This will require to check the validity of the modifier
-
-LocalVariableDeclaration ::= Modifiers Type PushModifiers VariableDeclarators
-/.$putCase consumeLocalVariableDeclaration(); $break ./
-
-PushModifiers ::= $empty
-/.$putCase consumePushModifiers(); $break ./
-
-Statement -> StatementWithoutTrailingSubstatement
-Statement -> LabeledStatement
-Statement -> IfThenStatement
-Statement -> IfThenElseStatement
-Statement -> WhileStatement
-Statement -> ForStatement
-
-StatementNoShortIf -> StatementWithoutTrailingSubstatement
-StatementNoShortIf -> LabeledStatementNoShortIf
-StatementNoShortIf -> IfThenElseStatementNoShortIf
-StatementNoShortIf -> WhileStatementNoShortIf
-StatementNoShortIf -> ForStatementNoShortIf
+      case 284 : // System.out.println("PrimaryNoNewArray ::= PushLPAREN Expression PushRPAREN");
+        consumePrimaryNoNewArray();
+        break;
 
-StatementWithoutTrailingSubstatement -> AssertStatement
-StatementWithoutTrailingSubstatement -> Block
-StatementWithoutTrailingSubstatement -> EmptyStatement
-StatementWithoutTrailingSubstatement -> ExpressionStatement
-StatementWithoutTrailingSubstatement -> SwitchStatement
-StatementWithoutTrailingSubstatement -> DoStatement
-StatementWithoutTrailingSubstatement -> BreakStatement
-StatementWithoutTrailingSubstatement -> ContinueStatement
-StatementWithoutTrailingSubstatement -> ReturnStatement
-StatementWithoutTrailingSubstatement -> SynchronizedStatement
-StatementWithoutTrailingSubstatement -> ThrowStatement
-StatementWithoutTrailingSubstatement -> TryStatement
-
-EmptyStatement ::= ';'
-/.$putCase consumeEmptyStatement(); $break ./
-
-LabeledStatement ::= 'Identifier' ':' Statement
-/.$putCase consumeStatementLabel() ; $break ./
-
-LabeledStatementNoShortIf ::= 'Identifier' ':' StatementNoShortIf
-/.$putCase consumeStatementLabel() ; $break ./
-
-ExpressionStatement ::= StatementExpression ';'
-/. $putCase consumeExpressionStatement(); $break ./
-
-StatementExpression ::= Assignment
-StatementExpression ::= PreIncrementExpression
-StatementExpression ::= PreDecrementExpression
-StatementExpression ::= PostIncrementExpression
-StatementExpression ::= PostDecrementExpression
-StatementExpression ::= MethodInvocation
-StatementExpression ::= ClassInstanceCreationExpression
-
-IfThenStatement ::=  'if' '(' Expression ')' Statement
-/.$putCase consumeStatementIfNoElse(); $break ./
-
-IfThenElseStatement ::=  'if' '(' Expression ')' StatementNoShortIf 'else' Statement
-/.$putCase consumeStatementIfWithElse(); $break ./
+      case 287 : // System.out.println("PrimaryNoNewArray ::= Name DOT this");
+        consumePrimaryNoNewArrayNameThis();
+        break;
 
-IfThenElseStatementNoShortIf ::=  'if' '(' Expression ')' StatementNoShortIf 'else' StatementNoShortIf
-/.$putCase consumeStatementIfWithElse(); $break ./
+      case 288 : // System.out.println("PrimaryNoNewArray ::= Name DOT super");
+        consumePrimaryNoNewArrayNameSuper();
+        break;
 
-SwitchStatement ::= 'switch' OpenBlock '(' Expression ')' SwitchBlock
-/.$putCase consumeStatementSwitch() ; $break ./
+      case 289 : // System.out.println("PrimaryNoNewArray ::= Name DOT class");
+        consumePrimaryNoNewArrayName();
+        break;
 
-SwitchBlock ::= '{' '}'
-/.$putCase consumeEmptySwitchBlock() ; $break ./
+      case 290 : // System.out.println("PrimaryNoNewArray ::= ArrayType DOT class");
+        consumePrimaryNoNewArrayArrayType();
+        break;
 
-SwitchBlock ::= '{' SwitchBlockStatements '}'
-SwitchBlock ::= '{' SwitchLabels '}'
-SwitchBlock ::= '{' SwitchBlockStatements SwitchLabels '}'
-/.$putCase consumeSwitchBlock() ; $break ./
+      case 291 : // System.out.println("PrimaryNoNewArray ::= PrimitiveType DOT class");
+        consumePrimaryNoNewArrayPrimitiveType();
+        break;
 
-SwitchBlockStatements -> SwitchBlockStatement
-SwitchBlockStatements ::= SwitchBlockStatements SwitchBlockStatement
-/.$putCase consumeSwitchBlockStatements() ; $break ./
+      case 294 : // System.out.println("AllocationHeader ::= new ClassType LPAREN ArgumentListopt RPAREN");
+        consumeAllocationHeader();
+        break;
 
-SwitchBlockStatement ::= SwitchLabels BlockStatements
-/.$putCase consumeSwitchBlockStatement() ; $break ./
+      case 295 : // System.out.println("ClassInstanceCreationExpression ::= new ClassType LPAREN ArgumentListopt RPAREN...");
+        consumeClassInstanceCreationExpression();
+        break;
 
-SwitchLabels -> SwitchLabel
-SwitchLabels ::= SwitchLabels SwitchLabel
-/.$putCase consumeSwitchLabels() ; $break ./
+      case 296 : // System.out.println("ClassInstanceCreationExpression ::= Primary DOT new SimpleName LPAREN...");
+        consumeClassInstanceCreationExpressionQualified();
+        break;
 
-SwitchLabel ::= 'case' ConstantExpression ':'
-/. $putCase consumeCaseLabel(); $break ./
+      case 297 : // System.out.println("ClassInstanceCreationExpression ::= ClassInstanceCreationExpressionName new...");
+        consumeClassInstanceCreationExpressionQualified();
+        break;
 
-SwitchLabel ::= 'default' ':'
-/. $putCase consumeDefaultLabel(); $break ./
+      case 298 : // System.out.println("ClassInstanceCreationExpressionName ::= Name DOT");
+        consumeClassInstanceCreationExpressionName();
+        break;
 
-WhileStatement ::= 'while' '(' Expression ')' Statement
-/.$putCase consumeStatementWhile() ; $break ./
+      case 299 : // System.out.println("ClassBodyopt ::=");
+        consumeClassBodyopt();
+        break;
 
-WhileStatementNoShortIf ::= 'while' '(' Expression ')' StatementNoShortIf
-/.$putCase consumeStatementWhile() ; $break ./
+      case 301 : // System.out.println("EnterAnonymousClassBody ::=");
+        consumeEnterAnonymousClassBody();
+        break;
 
-DoStatement ::= 'do' Statement 'while' '(' Expression ')' ';'
-/.$putCase consumeStatementDo() ; $break ./
+      case 303 : // System.out.println("ArgumentList ::= ArgumentList COMMA Expression");
+        consumeArgumentList();
+        break;
 
-ForStatement ::= 'for' '(' ForInitopt ';' Expressionopt ';' ForUpdateopt ')' Statement
-/.$putCase consumeStatementFor() ; $break ./
-ForStatementNoShortIf ::= 'for' '(' ForInitopt ';' Expressionopt ';' ForUpdateopt ')' StatementNoShortIf
-/.$putCase consumeStatementFor() ; $break ./
+      case 304 : // System.out.println("ArrayCreationExpression ::= new PrimitiveType DimWithOrWithOutExprs...");
+        consumeArrayCreationExpression();
+        break;
 
---the minus one allows to avoid a stack-to-stack transfer
-ForInit ::= StatementExpressionList
-/.$putCase consumeForInit() ; $break ./
-ForInit -> LocalVariableDeclaration
+      case 305 : // System.out.println("ArrayCreationExpression ::= new ClassOrInterfaceType DimWithOrWithOutExprs...");
+        consumeArrayCreationExpression();
+        break;
 
-ForUpdate -> StatementExpressionList
+      case 307 : // System.out.println("DimWithOrWithOutExprs ::= DimWithOrWithOutExprs DimWithOrWithOutExpr");
+        consumeDimWithOrWithOutExprs();
+        break;
 
-StatementExpressionList -> StatementExpression
-StatementExpressionList ::= StatementExpressionList ',' StatementExpression
-/.$putCase consumeStatementExpressionList() ; $break ./
+      case 309 : // System.out.println("DimWithOrWithOutExpr ::= LBRACKET RBRACKET");
+        consumeDimWithOrWithOutExpr();
+        break;
 
--- 1.4 feature
-AssertStatement ::= 'assert' Expression ';'
-/.$putCase consumeSimpleAssertStatement() ; $break ./
+      case 310 : // System.out.println("Dims ::= DimsLoop");
+        consumeDims();
+        break;
 
-AssertStatement ::= 'assert' Expression ':' Expression ';'
-/.$putCase consumeAssertStatement() ; $break ./
-          
-BreakStatement ::= 'break' ';'
-/.$putCase consumeStatementBreak() ; $break ./
+      case 313 : // System.out.println("OneDimLoop ::= LBRACKET RBRACKET");
+        consumeOneDimLoop();
+        break;
 
-BreakStatement ::= 'break' Identifier ';'
-/.$putCase consumeStatementBreakWithLabel() ; $break ./
+      case 314 : // System.out.println("FieldAccess ::= Primary DOT Identifier");
+        consumeFieldAccess(false);
+        break;
 
-ContinueStatement ::= 'continue' ';'
-/.$putCase consumeStatementContinue() ; $break ./
+      case 315 : // System.out.println("FieldAccess ::= super DOT Identifier");
+        consumeFieldAccess(true);
+        break;
 
-ContinueStatement ::= 'continue' Identifier ';'
-/.$putCase consumeStatementContinueWithLabel() ; $break ./
+      case 316 : // System.out.println("MethodInvocation ::= Name LPAREN ArgumentListopt RPAREN");
+        consumeMethodInvocationName();
+        break;
 
-ReturnStatement ::= 'return' Expressionopt ';'
-/.$putCase consumeStatementReturn() ; $break ./
+      case 317 : // System.out.println("MethodInvocation ::= Primary DOT Identifier LPAREN ArgumentListopt RPAREN");
+        consumeMethodInvocationPrimary();
+        break;
 
-ThrowStatement ::= 'throw' Expression ';'
-/.$putCase consumeStatementThrow();
-$break ./
+      case 318 : // System.out.println("MethodInvocation ::= super DOT Identifier LPAREN ArgumentListopt RPAREN");
+        consumeMethodInvocationSuper();
+        break;
 
-SynchronizedStatement ::= OnlySynchronized '(' Expression ')'    Block
-/.$putCase consumeStatementSynchronized(); $break ./
-OnlySynchronized ::= 'synchronized'
-/.$putCase consumeOnlySynchronized(); $break ./
+      case 319 : // System.out.println("ArrayAccess ::= Name LBRACKET Expression RBRACKET");
+        consumeArrayAccess(true);
+        break;
 
+      case 320 : // System.out.println("ArrayAccess ::= PrimaryNoNewArray LBRACKET Expression RBRACKET");
+        consumeArrayAccess(false);
+        break;
 
-TryStatement ::= 'try'    Block Catches
-/.$putCase consumeStatementTry(false); $break ./
-TryStatement ::= 'try'    Block Catchesopt Finally
-/.$putCase consumeStatementTry(true); $break ./
+      case 322 : // System.out.println("PostfixExpression ::= Name");
+        consumePostfixExpression();
+        break;
 
-Catches -> CatchClause
-Catches ::= Catches CatchClause
-/.$putCase consumeCatches(); $break ./
+      case 325 : // System.out.println("PostIncrementExpression ::= PostfixExpression PLUS_PLUS");
+        consumeUnaryExpression(OperatorExpression.PLUS, true);
+        break;
 
-CatchClause ::= 'catch' '(' FormalParameter ')'    Block
-/.$putCase consumeStatementCatch() ; $break ./
+      case 326 : // System.out.println("PostDecrementExpression ::= PostfixExpression MINUS_MINUS");
+        consumeUnaryExpression(OperatorExpression.MINUS, true);
+        break;
 
-Finally ::= 'finally'    Block
+      case 327 : // System.out.println("PushPosition ::=");
+        consumePushPosition();
+        break;
 
---18.12 Productions from 14: Expressions
+      case 330 : // System.out.println("UnaryExpression ::= PLUS PushPosition UnaryExpression");
+        consumeUnaryExpression(OperatorExpression.PLUS);
+        break;
 
---for source positionning purpose
-PushLPAREN ::= '('
-/.$putCase consumeLeftParen(); $break ./
-PushRPAREN ::= ')'
-/.$putCase consumeRightParen(); $break ./
+      case 331 : // System.out.println("UnaryExpression ::= MINUS PushPosition UnaryExpression");
+        consumeUnaryExpression(OperatorExpression.MINUS);
+        break;
 
-Primary -> PrimaryNoNewArray
-Primary -> ArrayCreationExpression
+      case 333 : // System.out.println("PreIncrementExpression ::= PLUS_PLUS PushPosition UnaryExpression");
+        consumeUnaryExpression(OperatorExpression.PLUS, false);
+        break;
 
-PrimaryNoNewArray -> Literal
-PrimaryNoNewArray ::= 'this'
-/.$putCase consumePrimaryNoNewArrayThis(); $break ./
+      case 334 : // System.out.println("PreDecrementExpression ::= MINUS_MINUS PushPosition UnaryExpression");
+        consumeUnaryExpression(OperatorExpression.MINUS, false);
+        break;
 
-PrimaryNoNewArray ::=  PushLPAREN Expression PushRPAREN 
-/.$putCase consumePrimaryNoNewArray(); $break ./
+      case 336 : // System.out.println("UnaryExpressionNotPlusMinus ::= TWIDDLE PushPosition UnaryExpression");
+        consumeUnaryExpression(OperatorExpression.TWIDDLE);
+        break;
 
-PrimaryNoNewArray -> ClassInstanceCreationExpression
-PrimaryNoNewArray -> FieldAccess
---1.1 feature
-PrimaryNoNewArray ::= Name '.' 'this'
-/.$putCase consumePrimaryNoNewArrayNameThis(); $break ./
-PrimaryNoNewArray ::= Name '.' 'super'
-/.$putCase consumePrimaryNoNewArrayNameSuper(); $break ./
+      case 337 : // System.out.println("UnaryExpressionNotPlusMinus ::= NOT PushPosition UnaryExpression");
+        consumeUnaryExpression(OperatorExpression.NOT);
+        break;
 
---1.1 feature
---PrimaryNoNewArray ::= Type '.' 'class'   
---inline Type in the previous rule in order to make the grammar LL1 instead 
--- of LL2. The result is the 3 next rules.
-PrimaryNoNewArray ::= Name '.' 'class'
-/.$putCase consumePrimaryNoNewArrayName(); $break ./
+      case 339 : // System.out.println("CastExpression ::= PushLPAREN PrimitiveType Dimsopt PushRPAREN UnaryExpression");
+        consumeCastExpression();
+        break;
 
-PrimaryNoNewArray ::= ArrayType '.' 'class'
-/.$putCase consumePrimaryNoNewArrayArrayType(); $break ./
+      case 340 : // System.out.println("CastExpression ::= PushLPAREN Name Dims PushRPAREN UnaryExpressionNotPlusMinus");
+        consumeCastExpression();
+        break;
 
-PrimaryNoNewArray ::= PrimitiveType '.' 'class'
-/.$putCase consumePrimaryNoNewArrayPrimitiveType(); $break ./
+      case 341 : // System.out.println("CastExpression ::= PushLPAREN Expression PushRPAREN UnaryExpressionNotPlusMinus");
+        consumeCastExpressionLL1();
+        break;
 
-PrimaryNoNewArray -> MethodInvocation
-PrimaryNoNewArray -> ArrayAccess
+      case 343 : // System.out.println("MultiplicativeExpression ::= MultiplicativeExpression MULTIPLY UnaryExpression");
+        consumeBinaryExpression(OperatorExpression.MULTIPLY);
+        break;
 
---1.1 feature
---
--- In Java 1.0 a ClassBody could not appear at all in a
--- ClassInstanceCreationExpression.
---
+      case 344 : // System.out.println("MultiplicativeExpression ::= MultiplicativeExpression DIVIDE UnaryExpression");
+        consumeBinaryExpression(OperatorExpression.DIVIDE);
+        break;
 
-AllocationHeader ::= 'new' ClassType '(' ArgumentListopt ')'
-/.$putCase consumeAllocationHeader(); $break ./
+      case 345 : // System.out.println("MultiplicativeExpression ::= MultiplicativeExpression REMAINDER UnaryExpression");
+        consumeBinaryExpression(OperatorExpression.REMAINDER);
+        break;
 
-ClassInstanceCreationExpression ::= 'new' ClassType '(' ArgumentListopt ')' ClassBodyopt
-/.$putCase consumeClassInstanceCreationExpression(); $break ./
---1.1 feature
+      case 347 : // System.out.println("AdditiveExpression ::= AdditiveExpression PLUS MultiplicativeExpression");
+        consumeBinaryExpression(OperatorExpression.PLUS);
+        break;
 
-ClassInstanceCreationExpression ::= Primary '.' 'new' SimpleName '(' ArgumentListopt ')' ClassBodyopt
-/.$putCase consumeClassInstanceCreationExpressionQualified() ; $break ./
+      case 348 : // System.out.println("AdditiveExpression ::= AdditiveExpression MINUS MultiplicativeExpression");
+        consumeBinaryExpression(OperatorExpression.MINUS);
+        break;
 
---1.1 feature
-ClassInstanceCreationExpression ::= ClassInstanceCreationExpressionName 'new' SimpleName '(' ArgumentListopt ')' ClassBodyopt
-/.$putCase consumeClassInstanceCreationExpressionQualified() ; $break ./
+      case 350 : // System.out.println("ShiftExpression ::= ShiftExpression LEFT_SHIFT AdditiveExpression");
+        consumeBinaryExpression(OperatorExpression.LEFT_SHIFT);
+        break;
 
-ClassInstanceCreationExpressionName ::= Name '.'
-/.$putCase consumeClassInstanceCreationExpressionName() ; $break ./
-
-ClassBodyopt ::= $empty --test made using null as contents
-/.$putCase consumeClassBodyopt(); $break ./
-ClassBodyopt ::= EnterAnonymousClassBody ClassBody
-
-EnterAnonymousClassBody ::= $empty
-/.$putCase consumeEnterAnonymousClassBody(); $break ./
-
-ArgumentList ::= Expression
-ArgumentList ::= ArgumentList ',' Expression
-/.$putCase consumeArgumentList(); $break ./
-
---Thess rules are re-written in order to be ll1 
---ArrayCreationExpression ::= 'new' ArrayType ArrayInitializer
---ArrayCreationExpression ::= 'new' PrimitiveType DimExprs Dimsopt 
---ArrayCreationExpression ::= 'new' ClassOrInterfaceType DimExprs Dimsopt
---DimExprs ::= DimExpr
---DimExprs ::= DimExprs DimExpr
-
-ArrayCreationExpression ::= 'new' PrimitiveType DimWithOrWithOutExprs ArrayInitializeropt
-/.$putCase consumeArrayCreationExpression(); $break ./
-ArrayCreationExpression ::= 'new' ClassOrInterfaceType DimWithOrWithOutExprs ArrayInitializeropt
-/.$putCase consumeArrayCreationExpression(); $break ./
-
-DimWithOrWithOutExprs ::= DimWithOrWithOutExpr
-DimWithOrWithOutExprs ::= DimWithOrWithOutExprs DimWithOrWithOutExpr
-/.$putCase consumeDimWithOrWithOutExprs(); $break ./
-
-DimWithOrWithOutExpr ::= '[' Expression ']'
-DimWithOrWithOutExpr ::= '[' ']'
-/. $putCase consumeDimWithOrWithOutExpr(); $break ./
--- -----------------------------------------------
-
-Dims ::= DimsLoop
-/. $putCase consumeDims(); $break ./
-DimsLoop -> OneDimLoop
-DimsLoop ::= DimsLoop OneDimLoop
-OneDimLoop ::= '[' ']'
-/. $putCase consumeOneDimLoop(); $break ./
-
-FieldAccess ::= Primary '.' 'Identifier'
-/.$putCase consumeFieldAccess(false); $break ./
-
-FieldAccess ::= 'super' '.' 'Identifier'
-/.$putCase consumeFieldAccess(true); $break ./
-
-MethodInvocation ::= Name '(' ArgumentListopt ')'
-/.$putCase consumeMethodInvocationName(); $break ./
-
-MethodInvocation ::= Primary '.' 'Identifier' '(' ArgumentListopt ')'
-/.$putCase consumeMethodInvocationPrimary(); $break ./
-
-MethodInvocation ::= 'super' '.' 'Identifier' '(' ArgumentListopt ')'
-/.$putCase consumeMethodInvocationSuper(); $break ./
-
-ArrayAccess ::= Name '[' Expression ']'
-/.$putCase consumeArrayAccess(true); $break ./
-ArrayAccess ::= PrimaryNoNewArray '[' Expression ']'
-/.$putCase consumeArrayAccess(false); $break ./
-
-PostfixExpression -> Primary
-PostfixExpression ::= Name
-/.$putCase consumePostfixExpression(); $break ./
-PostfixExpression -> PostIncrementExpression
-PostfixExpression -> PostDecrementExpression
-
-PostIncrementExpression ::= PostfixExpression '++'
-/.$putCase consumeUnaryExpression(OperatorExpression.PLUS,true); $break ./
-
-PostDecrementExpression ::= PostfixExpression '--'
-/.$putCase consumeUnaryExpression(OperatorExpression.MINUS,true); $break ./
-
---for source managment purpose
-PushPosition ::= $empty
- /.$putCase consumePushPosition(); $break ./
-
-UnaryExpression -> PreIncrementExpression
-UnaryExpression -> PreDecrementExpression
-UnaryExpression ::= '+' PushPosition UnaryExpression
-/.$putCase consumeUnaryExpression(OperatorExpression.PLUS); $break ./
-UnaryExpression ::= '-' PushPosition UnaryExpression
-/.$putCase consumeUnaryExpression(OperatorExpression.MINUS); $break ./
-UnaryExpression -> UnaryExpressionNotPlusMinus
-
-PreIncrementExpression ::= '++' PushPosition UnaryExpression
-/.$putCase consumeUnaryExpression(OperatorExpression.PLUS,false); $break ./
-
-PreDecrementExpression ::= '--' PushPosition UnaryExpression
-/.$putCase consumeUnaryExpression(OperatorExpression.MINUS,false); $break ./
-
-UnaryExpressionNotPlusMinus -> PostfixExpression
-UnaryExpressionNotPlusMinus ::= '~' PushPosition UnaryExpression
-/.$putCase consumeUnaryExpression(OperatorExpression.TWIDDLE); $break ./
-UnaryExpressionNotPlusMinus ::= '!' PushPosition UnaryExpression
-/.$putCase consumeUnaryExpression(OperatorExpression.NOT); $break ./
-UnaryExpressionNotPlusMinus -> CastExpression
-
-CastExpression ::= PushLPAREN PrimitiveType Dimsopt PushRPAREN UnaryExpression
-/.$putCase consumeCastExpression(); $break ./
- CastExpression ::= PushLPAREN Name Dims PushRPAREN UnaryExpressionNotPlusMinus
-/.$putCase consumeCastExpression(); $break ./
--- Expression is here only in order to make the grammar LL1
-CastExpression ::= PushLPAREN Expression PushRPAREN UnaryExpressionNotPlusMinus
-/.$putCase consumeCastExpressionLL1(); $break ./
-
-MultiplicativeExpression -> UnaryExpression
-MultiplicativeExpression ::= MultiplicativeExpression '*' UnaryExpression
-/.$putCase consumeBinaryExpression(OperatorExpression.MULTIPLY); $break ./
-MultiplicativeExpression ::= MultiplicativeExpression '/' UnaryExpression
-/.$putCase consumeBinaryExpression(OperatorExpression.DIVIDE); $break ./
-MultiplicativeExpression ::= MultiplicativeExpression '%' UnaryExpression
-/.$putCase consumeBinaryExpression(OperatorExpression.REMAINDER); $break ./
-
-AdditiveExpression -> MultiplicativeExpression
-AdditiveExpression ::= AdditiveExpression '+' MultiplicativeExpression
-/.$putCase consumeBinaryExpression(OperatorExpression.PLUS); $break ./
-AdditiveExpression ::= AdditiveExpression '-' MultiplicativeExpression
-/.$putCase consumeBinaryExpression(OperatorExpression.MINUS); $break ./
-
-ShiftExpression -> AdditiveExpression
-ShiftExpression ::= ShiftExpression '<<'  AdditiveExpression
-/.$putCase consumeBinaryExpression(OperatorExpression.LEFT_SHIFT); $break ./
-ShiftExpression ::= ShiftExpression '>>'  AdditiveExpression
-/.$putCase consumeBinaryExpression(OperatorExpression.RIGHT_SHIFT); $break ./
-ShiftExpression ::= ShiftExpression '>>>' AdditiveExpression
-/.$putCase consumeBinaryExpression(OperatorExpression.UNSIGNED_RIGHT_SHIFT); $break ./
-
-RelationalExpression -> ShiftExpression
-RelationalExpression ::= RelationalExpression '<'  ShiftExpression
-/.$putCase consumeBinaryExpression(OperatorExpression.LESS); $break ./
-RelationalExpression ::= RelationalExpression '>'  ShiftExpression
-/.$putCase consumeBinaryExpression(OperatorExpression.GREATER); $break ./
-RelationalExpression ::= RelationalExpression '<=' ShiftExpression
-/.$putCase consumeBinaryExpression(OperatorExpression.LESS_EQUAL); $break ./
-RelationalExpression ::= RelationalExpression '>=' ShiftExpression
-/.$putCase consumeBinaryExpression(OperatorExpression.GREATER_EQUAL); $break ./
-RelationalExpression ::= RelationalExpression 'instanceof' ReferenceType
-/.$putCase consumeInstanceOfExpression(OperatorExpression.INSTANCEOF); $break ./
-
-EqualityExpression -> RelationalExpression
-EqualityExpression ::= EqualityExpression '==' RelationalExpression
-/.$putCase consumeEqualityExpression(OperatorExpression.EQUAL_EQUAL); $break ./
-EqualityExpression ::= EqualityExpression '!=' RelationalExpression
-/.$putCase consumeEqualityExpression(OperatorExpression.NOT_EQUAL); $break ./
-
-AndExpression -> EqualityExpression
-AndExpression ::= AndExpression '&' EqualityExpression
-/.$putCase consumeBinaryExpression(OperatorExpression.AND); $break ./
-
-ExclusiveOrExpression -> AndExpression
-ExclusiveOrExpression ::= ExclusiveOrExpression '^' AndExpression
-/.$putCase consumeBinaryExpression(OperatorExpression.XOR); $break ./
-
-InclusiveOrExpression -> ExclusiveOrExpression
-InclusiveOrExpression ::= InclusiveOrExpression '|' ExclusiveOrExpression
-/.$putCase consumeBinaryExpression(OperatorExpression.OR); $break ./
-
-ConditionalAndExpression -> InclusiveOrExpression
-ConditionalAndExpression ::= ConditionalAndExpression '&&' InclusiveOrExpression
-/.$putCase consumeBinaryExpression(OperatorExpression.AND_AND); $break ./
-
-ConditionalOrExpression -> ConditionalAndExpression
-ConditionalOrExpression ::= ConditionalOrExpression '||' ConditionalAndExpression
-/.$putCase consumeBinaryExpression(OperatorExpression.OR_OR); $break ./
-
-ConditionalExpression -> ConditionalOrExpression
-ConditionalExpression ::= ConditionalOrExpression '?' Expression ':' ConditionalExpression
-/.$putCase consumeConditionalExpression(OperatorExpression.QUESTIONCOLON) ; $break ./
-
-AssignmentExpression -> ConditionalExpression
-AssignmentExpression -> Assignment
-
-Assignment ::= LeftHandSide AssignmentOperator AssignmentExpression
-/.$putCase consumeAssignment(); $break ./
-
--- this rule is added to parse an array initializer in a assigment and then report a syntax error knowing the exact senario
-InvalidArrayInitializerAssignement ::= LeftHandSide AssignmentOperator ArrayInitializer
-Assignment ::= InvalidArrayInitializerAssignement
-/.$putcase ignoreExpressionAssignment();$break ./
-
-LeftHandSide ::= Name
-/.$putCase consumeLeftHandSide(); $break ./
-LeftHandSide -> FieldAccess
-LeftHandSide -> ArrayAccess
-
-AssignmentOperator ::= '='
-/.$putCase consumeAssignmentOperator(EQUAL); $break ./
-AssignmentOperator ::= '*='
-/.$putCase consumeAssignmentOperator(MULTIPLY); $break ./
-AssignmentOperator ::= '/='
-/.$putCase consumeAssignmentOperator(DIVIDE); $break ./
-AssignmentOperator ::= '%='
-/.$putCase consumeAssignmentOperator(REMAINDER); $break ./
-AssignmentOperator ::= '+='
-/.$putCase consumeAssignmentOperator(PLUS); $break ./
-AssignmentOperator ::= '-='
-/.$putCase consumeAssignmentOperator(MINUS); $break ./
-AssignmentOperator ::= '<<='
-/.$putCase consumeAssignmentOperator(LEFT_SHIFT); $break ./
-AssignmentOperator ::= '>>='
-/.$putCase consumeAssignmentOperator(RIGHT_SHIFT); $break ./
-AssignmentOperator ::= '>>>='
-/.$putCase consumeAssignmentOperator(UNSIGNED_RIGHT_SHIFT); $break ./
-AssignmentOperator ::= '&='
-/.$putCase consumeAssignmentOperator(AND); $break ./
-AssignmentOperator ::= '^='
-/.$putCase consumeAssignmentOperator(XOR); $break ./
-AssignmentOperator ::= '|='
-/.$putCase consumeAssignmentOperator(OR); $break ./
-
-Expression -> AssignmentExpression
-
-ConstantExpression -> Expression
-
--- The following rules are for optional nonterminals.
---
-
-PackageDeclarationopt -> $empty 
-PackageDeclarationopt -> PackageDeclaration
-
-ClassHeaderExtendsopt ::= $empty
-ClassHeaderExtendsopt -> ClassHeaderExtends
-
-Expressionopt ::= $empty
-/.$putCase consumeEmptyExpression(); $break ./
-Expressionopt -> Expression
-
-
----------------------------------------------------------------------------------------
---
--- The rules below are for optional terminal symbols.  An optional comma,
--- is only used in the context of an array initializer - It is a
--- "syntactic sugar" that otherwise serves no other purpose. By contrast,
--- an optional identifier is used in the definition of a break and 
--- continue statement. When the identifier does not appear, a NULL
--- is produced. When the identifier is present, the user should use the
--- corresponding TOKEN(i) method. See break statement as an example.
---
----------------------------------------------------------------------------------------
-
-,opt -> $empty
-,opt -> ,
-
-ImportDeclarationsopt ::= $empty
-/.$putCase consumeEmptyImportDeclarationsopt(); $break ./
-ImportDeclarationsopt ::= ImportDeclarations
-/.$putCase consumeImportDeclarationsopt(); $break ./
-
-
-TypeDeclarationsopt ::= $empty
-/.$putCase consumeEmptyTypeDeclarationsopt(); $break ./
-TypeDeclarationsopt ::= TypeDeclarations
-/.$putCase consumeTypeDeclarationsopt(); $break ./
-
-ClassBodyDeclarationsopt ::= $empty
-/.$putCase consumeEmptyClassBodyDeclarationsopt(); $break ./
-ClassBodyDeclarationsopt ::= NestedType ClassBodyDeclarations
-/.$putCase consumeClassBodyDeclarationsopt(); $break ./
-
-Modifiersopt ::= $empty 
-/. $putCase consumeDefaultModifiers(); $break ./
-Modifiersopt ::= Modifiers 
-/.$putCase consumeModifiers(); $break ./ 
-
-BlockStatementsopt ::= $empty
-/.$putCase consumeEmptyBlockStatementsopt(); $break ./
-BlockStatementsopt -> BlockStatements
-
-Dimsopt ::= $empty
-/. $putCase consumeEmptyDimsopt(); $break ./
-Dimsopt -> Dims
-
-ArgumentListopt ::= $empty
-/. $putCase consumeEmptyArgumentListopt(); $break ./
-ArgumentListopt -> ArgumentList
-
-MethodHeaderThrowsClauseopt ::= $empty
-MethodHeaderThrowsClauseopt -> MethodHeaderThrowsClause
-   
-FormalParameterListopt ::= $empty
-/.$putcase consumeFormalParameterListopt(); $break ./
-FormalParameterListopt -> FormalParameterList
-
-ClassHeaderImplementsopt ::= $empty
-ClassHeaderImplementsopt -> ClassHeaderImplements
-
-InterfaceMemberDeclarationsopt ::= $empty
-/. $putCase consumeEmptyInterfaceMemberDeclarationsopt(); $break ./
-InterfaceMemberDeclarationsopt ::= NestedType InterfaceMemberDeclarations
-/. $putCase consumeInterfaceMemberDeclarationsopt(); $break ./
-
-NestedType ::= $empty 
-/.$putCase consumeNestedType(); $break./
-
-ForInitopt ::= $empty
-/. $putCase consumeEmptyForInitopt(); $break ./
-ForInitopt -> ForInit
-
-ForUpdateopt ::= $empty
-/. $putCase consumeEmptyForUpdateopt(); $break ./
- ForUpdateopt -> ForUpdate
-
-InterfaceHeaderExtendsopt ::= $empty
-InterfaceHeaderExtendsopt -> InterfaceHeaderExtends
-
-Catchesopt ::= $empty
-/. $putCase consumeEmptyCatchesopt(); $break ./
-Catchesopt -> Catches
-
-ArrayInitializeropt ::= $empty
-/. $putCase consumeEmptyArrayInitializeropt(); $break ./
-ArrayInitializeropt -> ArrayInitializer
-
-/.     }
-} ./
-
----------------------------------------------------------------------------------------
-
-$names
-
--- BodyMarker ::= '"class Identifier { ... MethodHeader "'
-
--- void ::= 'void'
-
-PLUS_PLUS ::=    '++'   
-MINUS_MINUS ::=    '--'   
-EQUAL_EQUAL ::=    '=='   
-LESS_EQUAL ::=    '<='   
-GREATER_EQUAL ::=    '>='   
-NOT_EQUAL ::=    '!='   
-LEFT_SHIFT ::=    '<<'   
-RIGHT_SHIFT ::=    '>>'   
-UNSIGNED_RIGHT_SHIFT ::=    '>>>'  
-PLUS_EQUAL ::=    '+='   
-MINUS_EQUAL ::=    '-='   
-MULTIPLY_EQUAL ::=    '*='   
-DIVIDE_EQUAL ::=    '/='   
-AND_EQUAL ::=    '&='   
-OR_EQUAL ::=    '|='   
-XOR_EQUAL ::=    '^='   
-REMAINDER_EQUAL ::=    '%='   
-LEFT_SHIFT_EQUAL ::=    '<<='  
-RIGHT_SHIFT_EQUAL ::=    '>>='  
-UNSIGNED_RIGHT_SHIFT_EQUAL ::=    '>>>=' 
-OR_OR ::=    '||'   
-AND_AND ::=    '&&'   
-
-PLUS ::=    '+'    
-MINUS ::=    '-'    
-NOT ::=    '!'    
-REMAINDER ::=    '%'    
-XOR ::=    '^'    
-AND ::=    '&'    
-MULTIPLY ::=    '*'    
-OR ::=    '|'    
-TWIDDLE ::=    '~'    
-DIVIDE ::=    '/'    
-GREATER ::=    '>'    
-LESS ::=    '<'    
-LPAREN ::=    '('    
-RPAREN ::=    ')'    
-LBRACE ::=    '{'    
-RBRACE ::=    '}'    
-LBRACKET ::=    '['    
-RBRACKET ::=    ']'    
-SEMICOLON ::=    ';'    
-QUESTION ::=    '?'    
-COLON ::=    ':'    
-COMMA ::=    ','    
-DOT ::=    '.'    
-EQUAL ::=    '='    
-
-$end
--- need a carriage return after the $end
-*/
-}
-protected void ignoreExpressionAssignment() {
-       // Assignment ::= InvalidArrayInitializerAssignement
-       // encoded operator would be: intStack[intPtr]
-       intPtr--;
-       ArrayInitializer arrayInitializer = (ArrayInitializer) expressionStack[expressionPtr--];
-       expressionLengthPtr -- ;
-       // report a syntax error and abort parsing
-       problemReporter().arrayConstantsOnlyInArrayInitializers(arrayInitializer.sourceStart, arrayInitializer.sourceEnd);      
-}
-protected void ignoreInterfaceDeclaration() {
-       // BlockStatement ::= InvalidInterfaceDeclaration
-       //InterfaceDeclaration ::= Modifiersopt 'interface' 'Identifier' ExtendsInterfacesopt InterfaceHeader InterfaceBody
-
-       // length declarations
-       int length;
-       if ((length = astLengthStack[astLengthPtr--]) != 0) {
-               //there are length declarations
-               //dispatch according to the type of the declarations
-               dispatchDeclarationInto(length);
-       }
-       
-       flushAnnotationsDefinedPriorTo(endStatementPosition);
-
-       // report the problem and continue parsing
-       TypeDeclaration typeDecl = (TypeDeclaration) astStack[astPtr];
-       typeDecl.bodyEnd = endStatementPosition;
-       problemReporter().cannotDeclareLocalInterface(typeDecl.name, typeDecl.sourceStart, typeDecl.sourceEnd);
-
-       // mark fields and initializer with local type mark if needed
-       markFieldsWithLocalType(typeDecl);
-
-       // remove the ast node created in interface header
-       astPtr--;       
-       // Don't create an astnode for this inner interface, but have to push
-       // a 0 on the astLengthStack to be consistent with the reduction made
-       // at the end of the method:
-       // public void parse(MethodDeclaration md, CompilationUnitDeclaration unit)
-       pushOnAstLengthStack(0);
-}
-protected void ignoreInvalidConstructorDeclaration(boolean hasBody) {
-       // InvalidConstructorDeclaration ::= ConstructorHeader ConstructorBody ==> true
-       // InvalidConstructorDeclaration ::= ConstructorHeader ';' ==> false
-
-       /*
-       astStack : modifiers arguments throws statements
-       identifierStack : name
-        ==>
-       astStack : MethodDeclaration
-       identifierStack :
-       */
-
-       //must provide a default constructor call when needed
-
-       if (hasBody) {
-               // pop the position of the {  (body of the method) pushed in block decl
-               intPtr--;
-       }
-
-       //statements
-       if (hasBody) {
-               realBlockPtr--;
-       }
-
-       int length;
-       if (hasBody && ((length = astLengthStack[astLengthPtr--]) != 0)) {
-               astPtr -= length;
-       }
-}
-protected void ignoreMethodBody() {
-       // InterfaceMemberDeclaration ::= InvalidMethodDeclaration
-
-       /*
-       astStack : modifiers arguments throws statements
-       identifierStack : type name
-       intStack : dim dim dim
-        ==>
-       astStack : MethodDeclaration
-       identifierStack :
-       intStack : 
-       */
-
-       // pop the position of the {  (body of the method) pushed in block decl
-       intPtr--;
-       // retrieve end position of method declarator
-
-       //statements
-       realBlockPtr--;
-       int length;
-       if ((length = astLengthStack[astLengthPtr--]) != 0) {
-               astPtr -= length;
-       }
-
-       //watch for } that could be given as a unicode ! ( u007D is '}' )
-       MethodDeclaration md = (MethodDeclaration) astStack[astPtr];
-       md.bodyEnd = endPosition;
-       md.declarationSourceEnd = flushAnnotationsDefinedPriorTo(endStatementPosition);
-
-       // report the problem and continue the parsing - narrowing the problem onto the method
-       problemReporter().abstractMethodNeedingNoBody(md);
-}
-public void initialize() {
-       //positionning the parser for a new compilation unit
-       //avoiding stack reallocation and all that....
-       astPtr = -1;
-       astLengthPtr = -1;
-       expressionPtr = -1;
-       expressionLengthPtr = -1;
-       identifierPtr = -1;     
-       identifierLengthPtr     = -1;
-       intPtr = -1;
-       nestedMethod[nestedType = 0] = 0; // need to reset for further reuse
-       variablesCounter[nestedType] = 0;
-       dimensions = 0 ;
-       realBlockPtr = -1;
-       compilationUnit = null;
-       referenceContext = null;
-       endStatementPosition = 0;
-
-       //remove objects from stack too, while the same parser/compiler couple is
-       //re-used between two compilations ....
-       
-       int astLength = astStack.length;
-       if (noAstNodes.length < astLength){
-               noAstNodes = new AstNode[astLength];
-               //System.out.println("Resized AST stacks : "+ astLength);
-               
-       }
-       System.arraycopy(noAstNodes, 0, astStack, 0, astLength);
-
-       int expressionLength = expressionStack.length;
-       if (noExpressions.length < expressionLength){
-               noExpressions = new Expression[expressionLength];
-               //System.out.println("Resized EXPR stacks : "+ expressionLength);
-       }
-       System.arraycopy(noExpressions, 0, expressionStack, 0, expressionLength);
-
-       // reset scanner state
-       scanner.commentPtr = -1;
-       scanner.eofPosition = Integer.MAX_VALUE;
-
-       resetModifiers();
-
-       // recovery
-       lastCheckPoint = -1;
-       currentElement = null;
-       restartRecovery = false;
-       hasReportedError = false;
-       recoveredStaticInitializerStart = 0;
-       lastIgnoredToken = -1;
-       lastErrorEndPosition = -1;
-       listLength = 0;
-}
-public void initializeScanner(){
-       this.scanner = new Scanner(false, false, this.problemReporter.options.getNonExternalizedStringLiteralSeverity() != ProblemSeverities.Ignore , this.assertMode);
-}
-public final static void initTables() throws java.io.IOException {
-
-       final String prefix = FILEPREFIX;
-       int i = 0;
-       lhs = readTable(prefix + (++i) + ".rsc"); //$NON-NLS-1$
-       char[] chars = readTable(prefix + (++i) + ".rsc"); //$NON-NLS-1$
-       check_table = new short[chars.length];
-       for (int c = chars.length; c-- > 0;) {
-               check_table[c] = (short) (chars[c] - 32768);
-       }
-       asb = readTable(prefix + (++i) + ".rsc"); //$NON-NLS-1$
-       asr = readTable(prefix + (++i) + ".rsc"); //$NON-NLS-1$
-       symbol_index = readTable(prefix + (++i) + ".rsc"); //$NON-NLS-1$
-       action = lhs;
-}
-public final void jumpOverMethodBody() {
-       //on diet parsing.....do not buffer method statements
+      case 351 : // System.out.println("ShiftExpression ::= ShiftExpression RIGHT_SHIFT AdditiveExpression");
+        consumeBinaryExpression(OperatorExpression.RIGHT_SHIFT);
+        break;
 
-       //the scanner.diet is reinitialized to false
-       //automatically by the scanner once it has jumped over
-       //the statements
+      case 352 : // System.out.println("ShiftExpression ::= ShiftExpression UNSIGNED_RIGHT_SHIFT AdditiveExpression");
+        consumeBinaryExpression(OperatorExpression.UNSIGNED_RIGHT_SHIFT);
+        break;
 
-       if (diet && (dietInt == 0))
-               scanner.diet = true;
-}
-protected void markCurrentMethodWithLocalType() {
-       if (this.currentElement != null) return; // this is already done in the recovery code
-       for (int i = this.astPtr; i >= 0; i--) {
-               AstNode node = this.astStack[i];
-               if (node instanceof AbstractMethodDeclaration 
-                               || node instanceof TypeDeclaration) { // mark type for now: all fields will be marked when added to this type
-                       node.bits |= AstNode.HasLocalTypeMASK;
-                       return;
-               }
-       }
-       // default to reference context (case of parse method body)
-       if (this.referenceContext instanceof AbstractMethodDeclaration
-                       || this.referenceContext instanceof TypeDeclaration) {
-               ((AstNode)this.referenceContext).bits |= AstNode.HasLocalTypeMASK;
-       }
-}
-protected void markFieldsWithLocalType(TypeDeclaration type) {
-       if (type.fields == null || (type.bits & AstNode.HasLocalTypeMASK) == 0) return;
-       for (int i = 0, length = type.fields.length; i < length; i++) {
-               type.fields[i].bits |= AstNode.HasLocalTypeMASK;
-       }
-}
-/*
- * Move checkpoint location (current implementation is moving it by one token)
- *
- * Answers true if successfully moved checkpoint (i.e. did not attempt to move it
- * beyond end of file).
- */
-protected boolean moveRecoveryCheckpoint() {
-
-       int pos = lastCheckPoint;
-       /* reset scanner, and move checkpoint by one token */
-       scanner.startPosition = pos;
-       scanner.currentPosition = pos;
-       scanner.diet = false; // quit jumping over method bodies
-       
-       /* if about to restart, then no need to shift token */
-       if (restartRecovery){
-               lastIgnoredToken = -1;
-               return true;
-       }
-       
-       /* protect against shifting on an invalid token */
-       lastIgnoredToken = nextIgnoredToken;
-       nextIgnoredToken = -1;
-       do {
-               try {
-                       nextIgnoredToken = scanner.getNextToken();
-                       if(scanner.currentPosition == scanner.startPosition){
-                               scanner.currentPosition++; // on fake completion identifier
-                               nextIgnoredToken = -1;
-                       }
-                       
-               } catch(InvalidInputException e){
-                       pos = scanner.currentPosition;
-               }
-       } while (nextIgnoredToken < 0);
-       
-       if (nextIgnoredToken == TokenNameEOF) { // no more recovery after this point
-               if (currentToken == TokenNameEOF) { // already tried one iteration on EOF
-                       return false;
-               }
-       }
-       lastCheckPoint = scanner.currentPosition;
-       
-       /* reset scanner again to previous checkpoint location*/
-       scanner.startPosition = pos;
-       scanner.currentPosition = pos;
-       scanner.commentPtr = -1;
-
-       return true;
-
-/*
-       The following implementation moves the checkpoint location by one line:
-        
-       int pos = lastCheckPoint;
-       // reset scanner, and move checkpoint by one token
-       scanner.startPosition = pos;
-       scanner.currentPosition = pos;
-       scanner.diet = false; // quit jumping over method bodies
-       
-       // if about to restart, then no need to shift token
-       if (restartRecovery){
-               lastIgnoredToken = -1;
-               return true;
-       }
-       
-       // protect against shifting on an invalid token
-       lastIgnoredToken = nextIgnoredToken;
-       nextIgnoredToken = -1;
-       
-       boolean wasTokenizingWhiteSpace = scanner.tokenizeWhiteSpace;
-       scanner.tokenizeWhiteSpace = true;
-       checkpointMove: 
-               do {
-                       try {
-                               nextIgnoredToken = scanner.getNextToken();
-                               switch(nextIgnoredToken){
-                                       case Scanner.TokenNameWHITESPACE :
-                                               if(scanner.getLineNumber(scanner.startPosition)
-                                                       == scanner.getLineNumber(scanner.currentPosition)){
-                                                       nextIgnoredToken = -1;
-                                                       }
-                                               break;
-                                       case TokenNameSEMICOLON :
-                                       case TokenNameLBRACE :
-                                       case TokenNameRBRACE :
-                                               break;
-                                       case TokenNameIdentifier :
-                                               if(scanner.currentPosition == scanner.startPosition){
-                                                       scanner.currentPosition++; // on fake completion identifier
-                                               }
-                                       default:                                                
-                                               nextIgnoredToken = -1;
-                                               break;
-                                       case TokenNameEOF :
-                                               break checkpointMove;
-                               }
-                       } catch(InvalidInputException e){
-                               pos = scanner.currentPosition;
-                       }
-               } while (nextIgnoredToken < 0);
-       scanner.tokenizeWhiteSpace = wasTokenizingWhiteSpace;
-       
-       if (nextIgnoredToken == TokenNameEOF) { // no more recovery after this point
-               if (currentToken == TokenNameEOF) { // already tried one iteration on EOF
-                       return false;
-               }
-       }
-       lastCheckPoint = scanner.currentPosition;
-       
-       // reset scanner again to previous checkpoint location
-       scanner.startPosition = pos;
-       scanner.currentPosition = pos;
-       scanner.commentPtr = -1;
-
-       return true;
-*/
-}
-protected MessageSend newMessageSend() {
-       // '(' ArgumentListopt ')'
-       // the arguments are on the expression stack
-
-       MessageSend m = new MessageSend();
-       int length;
-       if ((length = expressionLengthStack[expressionLengthPtr--]) != 0) {
-               expressionPtr -= length;
-               System.arraycopy(
-                       expressionStack, 
-                       expressionPtr + 1, 
-                       m.arguments = new Expression[length], 
-                       0, 
-                       length); 
-       };
-       return m;
-}
-protected static int ntAction(int state, int sym) {
-       return action[state + sym];
-}
-private final void optimizedConcatNodeLists() {
-       /*back from a recursive loop. Virtualy group the
-       astNode into an array using astLengthStack*/
-
-       /*
-        * This is a case where you have two sublists into the astStack that you want
-        * to merge in one list. There is no action required on the astStack. The only
-        * thing you need to do is merge the two lengths specified on the astStackLength.
-        * The top two length are for example:
-        * ... p   n
-        * and you want to result in a list like:
-        * ... n+p 
-        * This means that the p could be equals to 0 in case there is no astNode pushed
-        * on the astStack.
-        * Look at the InterfaceMemberDeclarations for an example.
-        * This case optimizes the fact that p == 1.
-        */
-
-       astLengthStack[--astLengthPtr]++;
-}
-protected static int original_state(int state) {
-       return -check(state);
-}
-/*main loop of the automat
-When a rule is reduced, the method consumeRule(int) is called with the number
-of the consumed rule. When a terminal is consumed, the method consumeToken(int) is 
-called in order to remember (when needed) the consumed token */
-// (int)asr[asi(act)]
-// name[symbol_index[currentKind]]
-protected void parse() {
-
-       hasReportedError = false;
-       int act = START_STATE;
-       stateStackTop = -1;
-       currentToken = getFirstToken();
-       ProcessTerminals : for (;;) {
-               try {
-                       stack[++stateStackTop] = act;
-               } catch (IndexOutOfBoundsException e) {
-                       int oldStackLength = stack.length;
-                       int oldStack[] = stack;
-                       stack = new int[oldStackLength + StackIncrement];
-                       System.arraycopy(oldStack, 0, stack, 0, oldStackLength);
-                       stack[stateStackTop] = act;
-               };
-
-               act = tAction(act, currentToken);
-
-               if (act == ERROR_ACTION || restartRecovery) {
-                       int errorPos = scanner.currentPosition;
-                       if (!hasReportedError){
-                               this.reportSyntaxError(ERROR_ACTION, currentToken, stateStackTop);
-                               hasReportedError = true;
-                       }
-                       if (resumeOnSyntaxError()) {
-                               if (act == ERROR_ACTION) lastErrorEndPosition = errorPos;
-                               act = START_STATE;
-                               stateStackTop = -1;
-                               currentToken = getFirstToken();
-                               continue ProcessTerminals;
-                       } else {
-                               act = ERROR_ACTION;
-                       }       break ProcessTerminals;
-               }
-               if (act <= NUM_RULES)
-                       stateStackTop--;
-               else
-                       if (act > ERROR_ACTION) { /* shift-reduce */
-                               consumeToken(currentToken);
-                               if (currentElement != null) this.recoveryTokenCheck();
-                               try{
-                                       currentToken = scanner.getNextToken();
-                               } catch(InvalidInputException e){
-                                       if (!hasReportedError){
-                                               this.problemReporter().scannerError(this, e.getMessage());
-                                               hasReportedError = true;
-                                       }
-                                       lastCheckPoint = scanner.currentPosition;
-                                       restartRecovery = true;
-                               }                                       
-                               act -= ERROR_ACTION;
-                       } else
-                               if (act < ACCEPT_ACTION) { /* shift */
-                                       consumeToken(currentToken);
-                                       if (currentElement != null) this.recoveryTokenCheck();
-                                       try{
-                                               currentToken = scanner.getNextToken();
-                                       } catch(InvalidInputException e){
-                                               if (!hasReportedError){
-                                                       this.problemReporter().scannerError(this, e.getMessage());
-                                                       hasReportedError = true;
-                                               }
-                                               lastCheckPoint = scanner.currentPosition;
-                                               restartRecovery = true;
-                                       }                                       
-                                       continue ProcessTerminals;
-                               } else
-                                       break ProcessTerminals;
-
-               ProcessNonTerminals : do { /* reduce */
-                       consumeRule(act);
-                       stateStackTop -= (rhs[act] - 1);
-                       act = ntAction(stack[stateStackTop], lhs[act]);
-               } while (act <= NUM_RULES);
-       }
-       endParse(act);
-}
-// A P I
-
-public void parse(ConstructorDeclaration cd, CompilationUnitDeclaration unit) {
-       //only parse the method body of cd
-       //fill out its statements
-
-       //convert bugs into parse error
-
-       initialize();
-       goForConstructorBody();
-       nestedMethod[nestedType]++;
-
-       referenceContext = cd;
-       compilationUnit = unit;
-
-       scanner.resetTo(cd.sourceEnd + 1, cd.declarationSourceEnd);
-       try {
-               parse();
-       } catch (AbortCompilation ex) {
-               lastAct = ERROR_ACTION;
-       } finally {
-               nestedMethod[nestedType]--;
-       }
-
-       if (lastAct == ERROR_ACTION) {
-               initialize();
-               return;
-       }
-
-       //statements
-       cd.explicitDeclarations = realBlockStack[realBlockPtr--];
-       int length;
-       if ((length = astLengthStack[astLengthPtr--]) != 0) {
-               astPtr -= length;
-               if (astStack[astPtr + 1] instanceof ExplicitConstructorCall)
-                       //avoid a isSomeThing that would only be used here BUT what is faster between two alternatives ?
-                       {
-                       System.arraycopy(
-                               astStack, 
-                               astPtr + 2, 
-                               cd.statements = new Statement[length - 1], 
-                               0, 
-                               length - 1); 
-                       cd.constructorCall = (ExplicitConstructorCall) astStack[astPtr + 1];
-               } else { //need to add explicitly the super();
-                       System.arraycopy(
-                               astStack, 
-                               astPtr + 1, 
-                               cd.statements = new Statement[length], 
-                               0, 
-                               length); 
-                       cd.constructorCall = SuperReference.implicitSuperConstructorCall();
-               }
-       } else {
-               cd.constructorCall = SuperReference.implicitSuperConstructorCall();
-       }
-
-       if (cd.constructorCall.sourceEnd == 0) {
-               cd.constructorCall.sourceEnd = cd.sourceEnd;
-               cd.constructorCall.sourceStart = cd.sourceStart;
-       }
-}
-// A P I
-
-public void parse(
-       Initializer ini, 
-       TypeDeclaration type, 
-       CompilationUnitDeclaration unit) {
-       //only parse the method body of md
-       //fill out method statements
-
-       //convert bugs into parse error
-
-       initialize();
-       goForInitializer();
-       nestedMethod[nestedType]++;
-
-       referenceContext = type;
-       compilationUnit = unit;
-
-       scanner.resetTo(ini.sourceStart, ini.sourceEnd); // just on the beginning {
-       try {
-               parse();
-       } catch (AbortCompilation ex) {
-               lastAct = ERROR_ACTION;
-       } finally {
-               nestedMethod[nestedType]--;
-       }
-
-       if (lastAct == ERROR_ACTION) {
-               return;
-       }
-
-       ini.block = ((Initializer) astStack[astPtr]).block;
-       
-       // mark initializer with local type if one was found during parsing
-       if ((type.bits & AstNode.HasLocalTypeMASK) != 0) {
-               ini.bits |= AstNode.HasLocalTypeMASK;
-       }       
-}
-// A P I
-
-public void parse(MethodDeclaration md, CompilationUnitDeclaration unit) {
-       //only parse the method body of md
-       //fill out method statements
-
-       //convert bugs into parse error
-
-       if (md.isAbstract())
-               return;
-       if (md.isNative())
-               return;
-       if ((md.modifiers & AccSemicolonBody) != 0)
-               return;
-
-       initialize();
-       goForMethodBody();
-       nestedMethod[nestedType]++;
-
-       referenceContext = md;
-       compilationUnit = unit;
-
-       scanner.resetTo(md.sourceEnd + 1, md.declarationSourceEnd); 
-       // reset the scanner to parser from { down to }
-       try {
-               parse();
-       } catch (AbortCompilation ex) {
-               lastAct = ERROR_ACTION;
-       } finally {
-               nestedMethod[nestedType]--;             
-       }
-
-       if (lastAct == ERROR_ACTION) {
-               return;
-       }
-
-       //refill statements
-       md.explicitDeclarations = realBlockStack[realBlockPtr--];
-       int length;
-       if ((length = astLengthStack[astLengthPtr--]) != 0)
-               System.arraycopy(
-                       astStack, 
-                       (astPtr -= length) + 1, 
-                       md.statements = new Statement[length], 
-                       0, 
-                       length); 
-}
-// A P I
-
-public CompilationUnitDeclaration parse(
-       ICompilationUnit sourceUnit, 
-       CompilationResult compilationResult) {
-       // parses a compilation unit and manages error handling (even bugs....)
-
-       CompilationUnitDeclaration unit;
-       try {
-               /* automaton initialization */
-               initialize();
-               goForCompilationUnit();
-
-               /* scanner initialization */
-               scanner.setSource(sourceUnit.getContents());
-
-               /* unit creation */
-               referenceContext = 
-                       compilationUnit = 
-                               new CompilationUnitDeclaration(
-                                       problemReporter, 
-                                       compilationResult, 
-                                       scanner.source.length);
-               /* run automaton */
-               parse();
-       } finally {
-               unit = compilationUnit;
-               compilationUnit = null; // reset parser
-       }
-       return unit;
-}
-// A P I
-
-public CompilationUnitDeclaration parse(
-       ICompilationUnit sourceUnit, 
-       CompilationResult compilationResult,
-       int start,
-       int end) {
-       // parses a compilation unit and manages error handling (even bugs....)
-
-       CompilationUnitDeclaration unit;
-       try {
-               /* automaton initialization */
-               initialize();
-               goForCompilationUnit();
-
-               /* scanner initialization */
-               scanner.setSource(sourceUnit.getContents());
-               scanner.resetTo(start, end);
-               /* unit creation */
-               referenceContext = 
-                       compilationUnit = 
-                               new CompilationUnitDeclaration(
-                                       problemReporter, 
-                                       compilationResult, 
-                                       scanner.source.length);
-               /* run automaton */
-               parse();
-       } finally {
-               unit = compilationUnit;
-               compilationUnit = null; // reset parser
-       }
-       return unit;
-}
-/**
- * Returns this parser's problem reporter initialized with its reference context.
- * Also it is assumed that a problem is going to be reported, so initializes
- * the compilation result's line positions.
- */
-public ProblemReporter problemReporter(){
-       if (scanner.recordLineSeparator) {
-               compilationUnit.compilationResult.lineSeparatorPositions = scanner.getLineEnds();
-       }
-       problemReporter.referenceContext = referenceContext;
-       return problemReporter;
-}
-protected void pushIdentifier() {
-       /*push the consumeToken on the identifier stack.
-       Increase the total number of identifier in the stack.
-       identifierPtr points on the next top */
-
-       try {
-               identifierStack[++identifierPtr] = scanner.getCurrentIdentifierSource();
-               identifierPositionStack[identifierPtr] = 
-                       (((long) scanner.startPosition) << 32) + (scanner.currentPosition - 1); 
-       } catch (IndexOutOfBoundsException e) {
-               /*---stack reallaocation (identifierPtr is correct)---*/
-               int oldStackLength = identifierStack.length;
-               char[][] oldStack = identifierStack;
-               identifierStack = new char[oldStackLength + 20][];
-               System.arraycopy(oldStack, 0, identifierStack, 0, oldStackLength);
-               identifierStack[identifierPtr] = scanner.getCurrentTokenSource();
-               /*identifier position stack*/
-               long[] oldPos = identifierPositionStack;
-               identifierPositionStack = new long[oldStackLength + 20];
-               System.arraycopy(oldPos, 0, identifierPositionStack, 0, oldStackLength);
-               identifierPositionStack[identifierPtr] = 
-                       (((long) scanner.startPosition) << 32) + (scanner.currentPosition - 1); 
-       };
-
-       try {
-               identifierLengthStack[++identifierLengthPtr] = 1;
-       } catch (IndexOutOfBoundsException e) {
-               /*---stack reallocation (identifierLengthPtr is correct)---*/
-               int oldStackLength = identifierLengthStack.length;
-               int oldStack[] = identifierLengthStack;
-               identifierLengthStack = new int[oldStackLength + 10];
-               System.arraycopy(oldStack, 0, identifierLengthStack, 0, oldStackLength);
-               identifierLengthStack[identifierLengthPtr] = 1;
-       };
+      case 354 : // System.out.println("RelationalExpression ::= RelationalExpression LESS ShiftExpression");
+        consumeBinaryExpression(OperatorExpression.LESS);
+        break;
 
-}
-protected void pushIdentifier(int flag) {
-       /*push a special flag on the stack :
-       -zero stands for optional Name
-       -negative number for direct ref to base types.
-       identifierLengthPtr points on the top */
-
-       try {
-               identifierLengthStack[++identifierLengthPtr] = flag;
-       } catch (IndexOutOfBoundsException e) {
-               /*---stack reallaocation (identifierLengthPtr is correct)---*/
-               int oldStackLength = identifierLengthStack.length;
-               int oldStack[] = identifierLengthStack;
-               identifierLengthStack = new int[oldStackLength + 10];
-               System.arraycopy(oldStack, 0, identifierLengthStack, 0, oldStackLength);
-               identifierLengthStack[identifierLengthPtr] = flag;
-       };
+      case 355 : // System.out.println("RelationalExpression ::= RelationalExpression GREATER ShiftExpression");
+        consumeBinaryExpression(OperatorExpression.GREATER);
+        break;
 
-}
-protected void pushOnAstLengthStack(int pos) {
-       try {
-               astLengthStack[++astLengthPtr] = pos;
-       } catch (IndexOutOfBoundsException e) {
-               int oldStackLength = astLengthStack.length;
-               int[] oldPos = astLengthStack;
-               astLengthStack = new int[oldStackLength + StackIncrement];
-               System.arraycopy(oldPos, 0, astLengthStack, 0, oldStackLength);
-               astLengthStack[astLengthPtr] = pos;
-       }
-}
-protected void pushOnAstStack(AstNode node) {
-       /*add a new obj on top of the ast stack
-       astPtr points on the top*/
-
-       try {
-               astStack[++astPtr] = node;
-       } catch (IndexOutOfBoundsException e) {
-               int oldStackLength = astStack.length;
-               AstNode[] oldStack = astStack;
-               astStack = new AstNode[oldStackLength + AstStackIncrement];
-               System.arraycopy(oldStack, 0, astStack, 0, oldStackLength);
-               astPtr = oldStackLength;
-               astStack[astPtr] = node;
-       }
-
-       try {
-               astLengthStack[++astLengthPtr] = 1;
-       } catch (IndexOutOfBoundsException e) {
-               int oldStackLength = astLengthStack.length;
-               int[] oldPos = astLengthStack;
-               astLengthStack = new int[oldStackLength + AstStackIncrement];
-               System.arraycopy(oldPos, 0, astLengthStack, 0, oldStackLength);
-               astLengthStack[astLengthPtr] = 1;
-       }
-}
-protected void pushOnExpressionStack(Expression expr) {
-
-       try {
-               expressionStack[++expressionPtr] = expr;
-       } catch (IndexOutOfBoundsException e) {
-               //expressionPtr is correct 
-               int oldStackLength = expressionStack.length;
-               Expression[] oldStack = expressionStack;
-               expressionStack = new Expression[oldStackLength + ExpressionStackIncrement];
-               System.arraycopy(oldStack, 0, expressionStack, 0, oldStackLength);
-               expressionStack[expressionPtr] = expr;
-       }
-
-       try {
-               expressionLengthStack[++expressionLengthPtr] = 1;
-       } catch (IndexOutOfBoundsException e) {
-               int oldStackLength = expressionLengthStack.length;
-               int[] oldPos = expressionLengthStack;
-               expressionLengthStack = new int[oldStackLength + ExpressionStackIncrement];
-               System.arraycopy(oldPos, 0, expressionLengthStack, 0, oldStackLength);
-               expressionLengthStack[expressionLengthPtr] = 1;
-       }
-}
-protected void pushOnExpressionStackLengthStack(int pos) {
-       try {
-               expressionLengthStack[++expressionLengthPtr] = pos;
-       } catch (IndexOutOfBoundsException e) {
-               int oldStackLength = expressionLengthStack.length;
-               int[] oldPos = expressionLengthStack;
-               expressionLengthStack = new int[oldStackLength + StackIncrement];
-               System.arraycopy(oldPos, 0, expressionLengthStack, 0, oldStackLength);
-               expressionLengthStack[expressionLengthPtr] = pos;
-       }
-}
-protected void pushOnIntStack(int pos) {
-
-       try {
-               intStack[++intPtr] = pos;
-       } catch (IndexOutOfBoundsException e) {
-               //intPtr is correct 
-               int oldStackLength = intStack.length;
-               int oldStack[] = intStack;
-               intStack = new int[oldStackLength + StackIncrement];
-               System.arraycopy(oldStack, 0, intStack, 0, oldStackLength);
-               intStack[intPtr] = pos;
-       }
-}
-protected static char[] readTable(String filename) throws java.io.IOException {
-
-       //files are located at Parser.class directory
-
-       InputStream stream = new BufferedInputStream(Parser.class.getResourceAsStream(filename));
-       if (stream == null) {
-               throw new java.io.IOException(Util.bind("parser.missingFile",filename)); //$NON-NLS-1$
-       }
-       byte[] bytes = null;
-       try {
-               bytes = Util.getInputStreamAsByteArray(stream, -1);
-       } finally {
-               try {
-                       stream.close();
-               } catch (IOException e) {
-               }
-       }
-
-       //minimal integrity check (even size expected)
-       int length = bytes.length;
-       if (length % 2 != 0)
-               throw new java.io.IOException(Util.bind("parser.corruptedFile",filename)); //$NON-NLS-1$
-
-       // convert bytes into chars
-       char[] chars = new char[length / 2];
-       int i = 0;
-       int charIndex = 0;
-
-       while (true) {
-               chars[charIndex++] = (char) (((bytes[i++] & 0xFF) << 8) + (bytes[i++] & 0xFF));
-               if (i == length)
-                       break;
-       }
-       return chars;
-}
-/* Token check performed on every token shift once having entered
- * recovery mode.
- */
-public void recoveryTokenCheck() {
-       switch (currentToken) {
-               case TokenNameLBRACE : {
-                       RecoveredElement newElement = 
-                               currentElement.updateOnOpeningBrace(scanner.currentPosition - 1);
-                       lastCheckPoint = scanner.currentPosition;                               
-                       if (newElement != null){ // null means nothing happened
-                               restartRecovery = true; // opening brace detected
-                               currentElement = newElement;
-                       }
-                       break;
-               }
-               case TokenNameRBRACE : {
-                       endPosition = this.flushAnnotationsDefinedPriorTo(scanner.currentPosition - 1);
-                       RecoveredElement newElement =
-                               currentElement.updateOnClosingBrace(scanner.startPosition, scanner.currentPosition -1);
-                               lastCheckPoint = scanner.currentPosition;
-                               if (newElement != currentElement){
-                               currentElement = newElement;
-                       }
-               }
-       }
-}
-protected void reportSyntaxError(int act, int currentKind, int stateStackTop) {
-
-       /* remember current scanner position */
-       int startPos = scanner.startPosition;
-       int currentPos = scanner.currentPosition;
-       
-       String[] expectings;
-       String tokenName = name[symbol_index[currentKind]];
-
-       //fetch all "accurate" possible terminals that could recover the error
-       int start, end = start = asi(stack[stateStackTop]);
-       while (asr[end] != 0)
-               end++;
-       int length = end - start;
-       expectings = new String[length];
-       if (length != 0) {
-               char[] indexes = new char[length];
-               System.arraycopy(asr, start, indexes, 0, length);
-               for (int i = 0; i < length; i++) {
-                       expectings[i] = name[symbol_index[indexes[i]]];
-               }
-       }
-
-       //if the pb is an EOF, try to tell the user that they are some 
-       if (tokenName.equals(UNEXPECTED_EOF)) {
-               if (!this.checkAndReportBracketAnomalies(problemReporter())) {
-                       char[] tokenSource;
-                       try {
-                               tokenSource = this.scanner.getCurrentTokenSource();
-                       } catch (Exception e) {
-                               tokenSource = new char[] {};
-                       }
-                       problemReporter().parseError(
-                               this.scanner.startPosition, 
-                               this.scanner.currentPosition - 1, 
-                               tokenSource, 
-                               tokenName, 
-                               expectings); 
-               }
-       } else { //the next test is HEAVILY grammar DEPENDENT.
-               if ((length == 2)
-                       && (tokenName.equals(";")) //$NON-NLS-1$
-                       && (expectings[0] == "++") //$NON-NLS-1$
-                       && (expectings[1] == "--") //$NON-NLS-1$
-                       && (expressionPtr > -1)) {
-                       // the ; is not the expected token ==> it ends a statement when an expression is not ended
-                       problemReporter().invalidExpressionAsStatement(expressionStack[expressionPtr]);
-               } else {
-                       char[] tokenSource;
-                       try {
-                               tokenSource = this.scanner.getCurrentTokenSource();
-                       } catch (Exception e) {
-                               tokenSource = new char[] {};
-                       }
-                       problemReporter().parseError(
-                               this.scanner.startPosition, 
-                               this.scanner.currentPosition - 1, 
-                               tokenSource, 
-                               tokenName, 
-                               expectings); 
-                       this.checkAndReportBracketAnomalies(problemReporter());
-               }
-       }
-       /* reset scanner where it was */
-       scanner.startPosition = startPos;
-       scanner.currentPosition = currentPos;
-}
-protected void resetModifiers() {
-       modifiers = AccDefault;
-       modifiersSourceStart = -1; // <-- see comment into modifiersFlag(int)
-       scanner.commentPtr = -1;
-}
-/*
- * Reset context so as to resume to regular parse loop
- */
-protected void resetStacks() {
-
-       astPtr = -1;
-       astLengthPtr = -1;
-       expressionPtr = -1;
-       expressionLengthPtr = -1;
-       identifierPtr = -1;     
-       identifierLengthPtr     = -1;
-       intPtr = -1;
-       nestedMethod[nestedType = 0] = 0; // need to reset for further reuse
-       variablesCounter[nestedType] = 0;
-       dimensions = 0 ;
-       realBlockStack[realBlockPtr = 0] = 0;
-       recoveredStaticInitializerStart = 0;
-       listLength = 0;
-}
-/*
- * Reset context so as to resume to regular parse loop
- * If unable to reset for resuming, answers false.
- *
- * Move checkpoint location, reset internal stacks and
- * decide which grammar goal is activated.
- */
-protected boolean resumeAfterRecovery() {
-
-       // reset internal stacks 
-       this.resetStacks();
-       
-       /* attempt to move checkpoint location */
-       if (!this.moveRecoveryCheckpoint()) return false;
-
-       // only look for headers
-       if (referenceContext instanceof CompilationUnitDeclaration){
-               goForHeaders();
-               diet = true; // passed this point, will not consider method bodies
-               return true;
-       }
-       // does not know how to restart
-       return false;
-}
-/*
- * Syntax error was detected. Will attempt to perform some recovery action in order
- * to resume to the regular parse loop.
- */
-protected boolean resumeOnSyntaxError() {
-
-       /* request recovery initialization */
-       if (currentElement == null){
-               currentElement = 
-                       this.buildInitialRecoveryState(); // build some recovered elements
-       }
-       /* do not investigate deeper in recovery when no recovered element */
-       if (currentElement == null) return false;
-       
-       /* manual forced recovery restart - after headers */
-       if (restartRecovery){
-               restartRecovery = false;
-       }
-       /* update recovery state with current error state of the parser */
-       this.updateRecoveryState();
-       
-       /* attempt to reset state in order to resume to parse loop */
-       return this.resumeAfterRecovery();
-}
-protected static int tAction(int state, int sym) {
-       return action[check(state + sym) == sym ? state + sym : state];
-}
-public String toString() {
-
-       String s = "identifierStack : char[][] = {"; //$NON-NLS-1$
-       for (int i = 0; i <= identifierPtr; i++) {
-               s = s + "\"" + String.valueOf(identifierStack[i]) + "\","; //$NON-NLS-1$ //$NON-NLS-2$
-       };
-       s = s + "}\n"; //$NON-NLS-1$
-
-       s = s + "identierLengthStack : int[] = {"; //$NON-NLS-1$
-       for (int i = 0; i <= identifierLengthPtr; i++) {
-               s = s + identifierLengthStack[i] + ","; //$NON-NLS-1$
-       };
-       s = s + "}\n"; //$NON-NLS-1$
-
-       s = s + "astLengthStack : int[] = {"; //$NON-NLS-1$
-       for (int i = 0; i <= astLengthPtr; i++) {
-               s = s + astLengthStack[i] + ","; //$NON-NLS-1$
-       };
-       s = s + "}\n"; //$NON-NLS-1$
-       s = s + "astPtr : int = " + String.valueOf(astPtr) + "\n"; //$NON-NLS-1$ //$NON-NLS-2$
-
-       s = s + "intStack : int[] = {"; //$NON-NLS-1$
-       for (int i = 0; i <= intPtr; i++) {
-               s = s + intStack[i] + ","; //$NON-NLS-1$
-       };
-       s = s + "}\n"; //$NON-NLS-1$
-
-       s = s + "expressionLengthStack : int[] = {"; //$NON-NLS-1$
-       for (int i = 0; i <= expressionLengthPtr; i++) {
-               s = s + expressionLengthStack[i] + ","; //$NON-NLS-1$
-       };
-       s = s + "}\n"; //$NON-NLS-1$
-
-       s = s + "expressionPtr : int = " + String.valueOf(expressionPtr) + "\n"; //$NON-NLS-1$ //$NON-NLS-2$
-
-       s = s + "\n\n\n----------------Scanner--------------\n" + scanner.toString(); //$NON-NLS-1$
-       return s;
+      case 356 : // System.out.println("RelationalExpression ::= RelationalExpression LESS_EQUAL ShiftExpression");
+        consumeBinaryExpression(OperatorExpression.LESS_EQUAL);
+        break;
 
-}
-/*
- * Update recovery state based on current parser/scanner state
- */
-protected void updateRecoveryState() {
-
-       /* expose parser state to recovery state */
-       currentElement.updateFromParserState();
-
-       /* check and update recovered state based on current token,
-               this action is also performed when shifting token after recovery
-               got activated once. 
-       */
-       this.recoveryTokenCheck();
-}
-protected void updateSourceDeclarationParts(int variableDeclaratorsCounter) {
-       //fields is a definition of fields that are grouped together like in
-       //public int[] a, b[], c
-       //which results into 3 fields.
-
-       FieldDeclaration field;
-       int endTypeDeclarationPosition = 
-               -1 + astStack[astPtr - variableDeclaratorsCounter + 1].sourceStart; 
-       for (int i = 0; i < variableDeclaratorsCounter - 1; i++) {
-               //last one is special(see below)
-               field = (FieldDeclaration) astStack[astPtr - i - 1];
-               field.endPart1Position = endTypeDeclarationPosition;
-               field.endPart2Position = -1 + astStack[astPtr - i].sourceStart;
-       }
-       //last one
-       (field = (FieldDeclaration) astStack[astPtr]).endPart1Position = 
-               endTypeDeclarationPosition; 
-       field.endPart2Position = field.declarationSourceEnd;
+      case 357 : // System.out.println("RelationalExpression ::= RelationalExpression GREATER_EQUAL ShiftExpression");
+        consumeBinaryExpression(OperatorExpression.GREATER_EQUAL);
+        break;
 
-}
-protected void updateSourcePosition(Expression exp) {
-       //update the source Position of the expression
+      case 358 : // System.out.println("RelationalExpression ::= RelationalExpression instanceof ReferenceType");
+        consumeInstanceOfExpression(OperatorExpression.INSTANCEOF);
+        break;
 
-       //intStack : int int
-       //-->
-       //intStack : 
+      case 360 : // System.out.println("EqualityExpression ::= EqualityExpression EQUAL_EQUAL RelationalExpression");
+        consumeEqualityExpression(OperatorExpression.EQUAL_EQUAL);
+        break;
 
-       exp.sourceEnd = intStack[intPtr--];
-       exp.sourceStart = intStack[intPtr--];
-}
+      case 361 : // System.out.println("EqualityExpression ::= EqualityExpression NOT_EQUAL RelationalExpression");
+        consumeEqualityExpression(OperatorExpression.NOT_EQUAL);
+        break;
+
+      case 363 : // System.out.println("AndExpression ::= AndExpression AND EqualityExpression");
+        consumeBinaryExpression(OperatorExpression.AND);
+        break;
+
+      case 365 : // System.out.println("ExclusiveOrExpression ::= ExclusiveOrExpression XOR AndExpression");
+        consumeBinaryExpression(OperatorExpression.XOR);
+        break;
+
+      case 367 : // System.out.println("InclusiveOrExpression ::= InclusiveOrExpression OR ExclusiveOrExpression");
+        consumeBinaryExpression(OperatorExpression.OR);
+        break;
+
+      case 369 : // System.out.println("ConditionalAndExpression ::= ConditionalAndExpression AND_AND InclusiveOrExpression");
+        consumeBinaryExpression(OperatorExpression.AND_AND);
+        break;
+
+      case 371 : // System.out.println("ConditionalOrExpression ::= ConditionalOrExpression OR_OR ConditionalAndExpression");
+        consumeBinaryExpression(OperatorExpression.OR_OR);
+        break;
+
+      case 373 : // System.out.println("ConditionalExpression ::= ConditionalOrExpression QUESTION Expression COLON...");
+        consumeConditionalExpression(OperatorExpression.QUESTIONCOLON);
+        break;
+
+      case 376 : // System.out.println("Assignment ::= LeftHandSide AssignmentOperator AssignmentExpression");
+        consumeAssignment();
+        break;
+
+      case 378 : // System.out.println("Assignment ::= InvalidArrayInitializerAssignement");
+        ignoreExpressionAssignment();
+        break;
+
+      case 379 : // System.out.println("LeftHandSide ::= Name");
+        consumeLeftHandSide();
+        break;
+
+      case 382 : // System.out.println("AssignmentOperator ::= EQUAL");
+        consumeAssignmentOperator(EQUAL);
+        break;
+
+      case 383 : // System.out.println("AssignmentOperator ::= MULTIPLY_EQUAL");
+        consumeAssignmentOperator(MULTIPLY);
+        break;
+
+      case 384 : // System.out.println("AssignmentOperator ::= DIVIDE_EQUAL");
+        consumeAssignmentOperator(DIVIDE);
+        break;
+
+      case 385 : // System.out.println("AssignmentOperator ::= REMAINDER_EQUAL");
+        consumeAssignmentOperator(REMAINDER);
+        break;
+
+      case 386 : // System.out.println("AssignmentOperator ::= PLUS_EQUAL");
+        consumeAssignmentOperator(PLUS);
+        break;
+
+      case 387 : // System.out.println("AssignmentOperator ::= MINUS_EQUAL");
+        consumeAssignmentOperator(MINUS);
+        break;
+
+      case 388 : // System.out.println("AssignmentOperator ::= LEFT_SHIFT_EQUAL");
+        consumeAssignmentOperator(LEFT_SHIFT);
+        break;
+
+      case 389 : // System.out.println("AssignmentOperator ::= RIGHT_SHIFT_EQUAL");
+        consumeAssignmentOperator(RIGHT_SHIFT);
+        break;
+
+      case 390 : // System.out.println("AssignmentOperator ::= UNSIGNED_RIGHT_SHIFT_EQUAL");
+        consumeAssignmentOperator(UNSIGNED_RIGHT_SHIFT);
+        break;
+
+      case 391 : // System.out.println("AssignmentOperator ::= AND_EQUAL");
+        consumeAssignmentOperator(AND);
+        break;
+
+      case 392 : // System.out.println("AssignmentOperator ::= XOR_EQUAL");
+        consumeAssignmentOperator(XOR);
+        break;
+
+      case 393 : // System.out.println("AssignmentOperator ::= OR_EQUAL");
+        consumeAssignmentOperator(OR);
+        break;
+
+      case 400 : // System.out.println("Expressionopt ::=");
+        consumeEmptyExpression();
+        break;
+
+      case 404 : // System.out.println("ImportDeclarationsopt ::=");
+        consumeEmptyImportDeclarationsopt();
+        break;
+
+      case 405 : // System.out.println("ImportDeclarationsopt ::= ImportDeclarations");
+        consumeImportDeclarationsopt();
+        break;
+
+      case 406 : // System.out.println("TypeDeclarationsopt ::=");
+        consumeEmptyTypeDeclarationsopt();
+        break;
+
+      case 407 : // System.out.println("TypeDeclarationsopt ::= TypeDeclarations");
+        consumeTypeDeclarationsopt();
+        break;
+
+      case 408 : // System.out.println("ClassBodyDeclarationsopt ::=");
+        consumeEmptyClassBodyDeclarationsopt();
+        break;
+
+      case 409 : // System.out.println("ClassBodyDeclarationsopt ::= NestedType ClassBodyDeclarations");
+        consumeClassBodyDeclarationsopt();
+        break;
+
+      case 410 : // System.out.println("Modifiersopt ::=");
+        consumeDefaultModifiers();
+        break;
+
+      case 411 : // System.out.println("Modifiersopt ::= Modifiers");
+        consumeModifiers();
+        break;
+
+      case 412 : // System.out.println("BlockStatementsopt ::=");
+        consumeEmptyBlockStatementsopt();
+        break;
+
+      case 414 : // System.out.println("Dimsopt ::=");
+        consumeEmptyDimsopt();
+        break;
+
+      case 416 : // System.out.println("ArgumentListopt ::=");
+        consumeEmptyArgumentListopt();
+        break;
+
+      case 420 : // System.out.println("FormalParameterListopt ::=");
+        consumeFormalParameterListopt();
+        break;
+
+      case 424 : // System.out.println("InterfaceMemberDeclarationsopt ::=");
+        consumeEmptyInterfaceMemberDeclarationsopt();
+        break;
+
+      case 425 : // System.out.println("InterfaceMemberDeclarationsopt ::= NestedType InterfaceMemberDeclarations");
+        consumeInterfaceMemberDeclarationsopt();
+        break;
+
+      case 426 : // System.out.println("NestedType ::=");
+        consumeNestedType();
+        break;
+
+      case 427 : // System.out.println("ForInitopt ::=");
+        consumeEmptyForInitopt();
+        break;
+
+      case 429 : // System.out.println("ForUpdateopt ::=");
+        consumeEmptyForUpdateopt();
+        break;
+
+      case 433 : // System.out.println("Catchesopt ::=");
+        consumeEmptyCatchesopt();
+        break;
+
+      case 435 : // System.out.println("ArrayInitializeropt ::=");
+        consumeEmptyArrayInitializeropt();
+        break;
+
+    }
+  }
+
+  protected void consumeSimpleAssertStatement() {
+    // AssertStatement ::= 'assert' Expression ';'
+    expressionLengthPtr--;
+    pushOnAstStack(new AssertStatement(expressionStack[expressionPtr--], intStack[intPtr--]));
+  }
+
+  protected void consumeSingleTypeImportDeclaration() {
+    // SingleTypeImportDeclaration ::= SingleTypeImportDeclarationName ';'
+
+    ImportReference impt = (ImportReference) astStack[astPtr];
+    // flush annotations defined prior to import statements
+    impt.declarationEnd = endStatementPosition;
+    impt.declarationSourceEnd = this.flushAnnotationsDefinedPriorTo(impt.declarationSourceEnd);
+
+    // recovery
+    if (currentElement != null) {
+      lastCheckPoint = impt.declarationSourceEnd + 1;
+      currentElement = currentElement.add(impt, 0);
+      lastIgnoredToken = -1;
+      restartRecovery = true;
+      // used to avoid branching back into the regular automaton
+    }
+  }
+  protected void consumeSingleTypeImportDeclarationName() {
+    // SingleTypeImportDeclarationName ::= 'import' Name
+    /* push an ImportRef build from the last name 
+    stored in the identifier stack. */
+
+    ImportReference impt;
+    int length;
+    char[][] tokens = new char[length = identifierLengthStack[identifierLengthPtr--]][];
+    identifierPtr -= length;
+    long[] positions = new long[length];
+    System.arraycopy(identifierStack, identifierPtr + 1, tokens, 0, length);
+    System.arraycopy(identifierPositionStack, identifierPtr + 1, positions, 0, length);
+    pushOnAstStack(impt = new ImportReference(tokens, positions, false));
+
+    if (currentToken == TokenNameSEMICOLON) {
+      impt.declarationSourceEnd = scanner.currentPosition - 1;
+    } else {
+      impt.declarationSourceEnd = impt.sourceEnd;
+    }
+    impt.declarationEnd = impt.declarationSourceEnd;
+    //endPosition is just before the ;
+    impt.declarationSourceStart = intStack[intPtr--];
+
+    // recovery
+    if (currentElement != null) {
+      lastCheckPoint = impt.declarationSourceEnd + 1;
+      currentElement = currentElement.add(impt, 0);
+      lastIgnoredToken = -1;
+      restartRecovery = true; // used to avoid branching back into the regular automaton               
+    }
+  }
+  protected void consumeStatementBreak() {
+    // BreakStatement ::= 'break' ';'
+    // break pushs a position on intStack in case there is no label
+
+    pushOnAstStack(new Break(null, intStack[intPtr--], endPosition));
+  }
+  protected void consumeStatementBreakWithLabel() {
+    // BreakStatement ::= 'break' Identifier ';'
+    // break pushs a position on intStack in case there is no label
+
+    pushOnAstStack(new Break(identifierStack[identifierPtr--], intStack[intPtr--], endPosition));
+    identifierLengthPtr--;
+  }
+  protected void consumeStatementCatch() {
+    // CatchClause ::= 'catch' '(' FormalParameter ')'    Block
+
+    //catch are stored directly into the Try
+    //has they always comes two by two....
+    //we remove one entry from the astlengthPtr.
+    //The construction of the try statement must
+    //then fetch the catches using  2*i and 2*i + 1
+
+    astLengthPtr--;
+    listLength = 0; // reset formalParameter counter (incremented for catch variable)
+  }
+  protected void consumeStatementContinue() {
+    // ContinueStatement ::= 'continue' ';'
+    // continue pushs a position on intStack in case there is no label
+
+    pushOnAstStack(new Continue(null, intStack[intPtr--], endPosition));
+  }
+  protected void consumeStatementContinueWithLabel() {
+    // ContinueStatement ::= 'continue' Identifier ';'
+    // continue pushs a position on intStack in case there is no label
+
+    pushOnAstStack(new Continue(identifierStack[identifierPtr--], intStack[intPtr--], endPosition));
+    identifierLengthPtr--;
+  }
+  protected void consumeStatementDo() {
+    // DoStatement ::= 'do' Statement 'while' '(' Expression ')' ';'
+
+    //the 'while' pushes a value on intStack that we need to remove
+    intPtr--;
+
+    //optimize the push/pop
+    Statement action = (Statement) astStack[astPtr];
+    if (action instanceof EmptyStatement && problemReporter.options.complianceLevel <= CompilerOptions.JDK1_3) {
+      expressionLengthPtr--;
+      astStack[astPtr] = new DoStatement(expressionStack[expressionPtr--], null, intStack[intPtr--], endPosition);
+    } else {
+      expressionLengthPtr--;
+      astStack[astPtr] = new DoStatement(expressionStack[expressionPtr--], action, intStack[intPtr--], endPosition);
+    }
+  }
+  protected void consumeStatementExpressionList() {
+    // StatementExpressionList ::= StatementExpressionList ',' StatementExpression
+    concatExpressionLists();
+  }
+  protected void consumeStatementFor() {
+    // ForStatement ::= 'for' '(' ForInitopt ';' Expressionopt ';' ForUpdateopt ')' Statement
+    // ForStatementNoShortIf ::= 'for' '(' ForInitopt ';' Expressionopt ';' ForUpdateopt ')' StatementNoShortIf
+
+    int length;
+    Expression cond = null;
+    Statement[] inits, updates;
+    Statement action;
+    boolean scope = true;
+
+    //statements
+    astLengthPtr--; // we need to consume it
+    action = (Statement) astStack[astPtr--];
+    if (action instanceof EmptyStatement && problemReporter.options.complianceLevel <= CompilerOptions.JDK1_3) {
+      action = null;
+    }
+
+    //updates are on the expresion stack
+    if ((length = expressionLengthStack[expressionLengthPtr--]) == 0) {
+      updates = null;
+    } else {
+      expressionPtr -= length;
+      System.arraycopy(expressionStack, expressionPtr + 1, updates = new Statement[length], 0, length);
+    }
+
+    if (expressionLengthStack[expressionLengthPtr--] != 0)
+      cond = expressionStack[expressionPtr--];
+
+    //inits may be on two different stacks
+    if ((length = astLengthStack[astLengthPtr--]) == 0) {
+      inits = null;
+      scope = false;
+    } else {
+      if (length == -1) { //on expressionStack
+        scope = false;
+        length = expressionLengthStack[expressionLengthPtr--];
+        expressionPtr -= length;
+        System.arraycopy(expressionStack, expressionPtr + 1, inits = new Statement[length], 0, length);
+      } else { //on astStack
+        astPtr -= length;
+        System.arraycopy(astStack, astPtr + 1, inits = new Statement[length], 0, length);
+      }
+    };
+    if (action instanceof Block) {
+      pushOnAstStack(new ForStatement(inits, cond, updates, action, scope, intStack[intPtr--], endStatementPosition));
+    } else {
+      pushOnAstStack(new ForStatement(inits, cond, updates, action, scope, intStack[intPtr--], endPosition));
+    }
+  }
+  protected void consumeStatementIfNoElse() {
+    // IfThenStatement ::=  'if' '(' Expression ')' Statement
+
+    //optimize the push/pop
+    expressionLengthPtr--;
+    Statement thenStatement = (Statement) astStack[astPtr];
+    if (thenStatement instanceof Block) {
+      astStack[astPtr] = new IfStatement(expressionStack[expressionPtr--], thenStatement, intStack[intPtr--], endStatementPosition);
+    } else if (thenStatement instanceof EmptyStatement) {
+      astStack[astPtr] = new IfStatement(expressionStack[expressionPtr--], Block.None, intStack[intPtr--], endStatementPosition);
+    } else {
+      astStack[astPtr] = new IfStatement(expressionStack[expressionPtr--], thenStatement, intStack[intPtr--], endStatementPosition);
+    }
+  }
+  protected void consumeStatementIfWithElse() {
+    // IfThenElseStatement ::=  'if' '(' Expression ')' StatementNoShortIf 'else' Statement
+    // IfThenElseStatementNoShortIf ::=  'if' '(' Expression ')' StatementNoShortIf 'else' StatementNoShortIf
+
+    astLengthPtr--; // optimized {..., Then, Else } ==> {..., If }
+    expressionLengthPtr--;
+    //optimize the push/pop
+    Statement elseStatement = (Statement) astStack[astPtr--];
+    Statement thenStatement = (Statement) astStack[astPtr];
+    if (elseStatement instanceof EmptyStatement) {
+      elseStatement = Block.None;
+    }
+    if (thenStatement instanceof EmptyStatement) {
+      thenStatement = Block.None;
+    }
+    if (elseStatement instanceof Block) {
+      astStack[astPtr] =
+        new IfStatement(expressionStack[expressionPtr--], thenStatement, elseStatement, intStack[intPtr--], endStatementPosition);
+    } else {
+      astStack[astPtr] =
+        new IfStatement(expressionStack[expressionPtr--], thenStatement, elseStatement, intStack[intPtr--], endStatementPosition);
+    }
+  }
+  protected void consumeStatementLabel() {
+    // LabeledStatement ::= 'Identifier' ':' Statement
+    // LabeledStatementNoShortIf ::= 'Identifier' ':' StatementNoShortIf
+
+    //optimize push/pop
+
+    Statement stmt = (Statement) astStack[astPtr];
+    if (stmt instanceof EmptyStatement) {
+      astStack[astPtr] =
+        new LabeledStatement(
+          identifierStack[identifierPtr],
+          Block.None,
+          (int) (identifierPositionStack[identifierPtr--] >>> 32),
+          endStatementPosition);
+    } else {
+      astStack[astPtr] =
+        new LabeledStatement(
+          identifierStack[identifierPtr],
+          stmt,
+          (int) (identifierPositionStack[identifierPtr--] >>> 32),
+          endStatementPosition);
+    }
+    identifierLengthPtr--;
+  }
+  protected void consumeStatementReturn() {
+    // ReturnStatement ::= 'return' Expressionopt ';'
+    // return pushs a position on intStack in case there is no expression
+
+    if (expressionLengthStack[expressionLengthPtr--] != 0) {
+      pushOnAstStack(new ReturnStatement(expressionStack[expressionPtr--], intStack[intPtr--], endPosition));
+    } else {
+      pushOnAstStack(new ReturnStatement(null, intStack[intPtr--], endPosition));
+    }
+  }
+  protected void consumeStatementSwitch() {
+    // SwitchStatement ::= 'switch' OpenBlock '(' Expression ')' SwitchBlock
+
+    //OpenBlock just makes the semantic action blockStart()
+    //the block is inlined but a scope need to be created
+    //if some declaration occurs.
+
+    int length;
+    SwitchStatement s = new SwitchStatement();
+    expressionLengthPtr--;
+    s.testExpression = expressionStack[expressionPtr--];
+    if ((length = astLengthStack[astLengthPtr--]) != 0) {
+      astPtr -= length;
+      System.arraycopy(astStack, astPtr + 1, s.statements = new Statement[length], 0, length);
+    }
+    s.explicitDeclarations = realBlockStack[realBlockPtr--];
+    pushOnAstStack(s);
+    intPtr--; // because of OpenBlock
+    s.sourceStart = intStack[intPtr--];
+    s.sourceEnd = endStatementPosition;
+  }
+  protected void consumeStatementSynchronized() {
+    // SynchronizedStatement ::= OnlySynchronized '(' Expression ')' Block
+    //optimize the push/pop
+
+    if (astLengthStack[astLengthPtr] == 0) {
+      astLengthStack[astLengthPtr] = 1;
+      expressionLengthPtr--;
+      astStack[++astPtr] =
+        new SynchronizedStatement(expressionStack[expressionPtr--], Block.None, intStack[intPtr--], endStatementPosition);
+    } else {
+      expressionLengthPtr--;
+      astStack[astPtr] =
+        new SynchronizedStatement(
+          expressionStack[expressionPtr--],
+          (Block) astStack[astPtr],
+          intStack[intPtr--],
+          endStatementPosition);
+    }
+    resetModifiers();
+  }
+  protected void consumeStatementThrow() {
+    // ThrowStatement ::= 'throw' Expression ';'
+    expressionLengthPtr--;
+    pushOnAstStack(new ThrowStatement(expressionStack[expressionPtr--], intStack[intPtr--]));
+  }
+  protected void consumeStatementTry(boolean withFinally) {
+    //TryStatement ::= 'try'  Block Catches
+    //TryStatement ::= 'try'  Block Catchesopt Finally
+
+    int length;
+    TryStatement tryStmt = new TryStatement();
+    //finally
+    if (withFinally) {
+      astLengthPtr--;
+      tryStmt.finallyBlock = (Block) astStack[astPtr--];
+    }
+    //catches are handle by two <argument-block> [see statementCatch]
+    if ((length = astLengthStack[astLengthPtr--]) != 0) {
+      if (length == 1) {
+        tryStmt.catchBlocks = new Block[] {(Block) astStack[astPtr--] };
+        tryStmt.catchArguments = new Argument[] {(Argument) astStack[astPtr--] };
+      } else {
+        Block[] bks = (tryStmt.catchBlocks = new Block[length]);
+        Argument[] args = (tryStmt.catchArguments = new Argument[length]);
+        while (length-- > 0) {
+          bks[length] = (Block) astStack[astPtr--];
+          args[length] = (Argument) astStack[astPtr--];
+        }
+      }
+    }
+    //try
+    astLengthPtr--;
+    tryStmt.tryBlock = (Block) astStack[astPtr--];
+
+    //positions
+    tryStmt.sourceEnd = endStatementPosition;
+    tryStmt.sourceStart = intStack[intPtr--];
+    pushOnAstStack(tryStmt);
+  }
+  protected void consumeStatementWhile() {
+    // WhileStatement ::= 'while' '(' Expression ')' Statement
+    // WhileStatementNoShortIf ::= 'while' '(' Expression ')' StatementNoShortIf
+
+    Statement action = (Statement) astStack[astPtr];
+    expressionLengthPtr--;
+    if (action instanceof Block) {
+      astStack[astPtr] = new WhileStatement(expressionStack[expressionPtr--], action, intStack[intPtr--], endStatementPosition);
+    } else {
+      if (action instanceof EmptyStatement && problemReporter.options.complianceLevel <= CompilerOptions.JDK1_3) {
+        astStack[astPtr] = new WhileStatement(expressionStack[expressionPtr--], null, intStack[intPtr--], endPosition);
+      } else {
+        astStack[astPtr] = new WhileStatement(expressionStack[expressionPtr--], action, intStack[intPtr--], endPosition);
+      }
+    }
+  }
+  protected void consumeStaticInitializer() {
+    // StaticInitializer ::=  StaticOnly Block
+    //push an Initializer
+    //optimize the push/pop
+    Initializer initializer = new Initializer((Block) astStack[astPtr], AccStatic);
+    astStack[astPtr] = initializer;
+    initializer.sourceEnd = endStatementPosition;
+    initializer.declarationSourceEnd = flushAnnotationsDefinedPriorTo(endStatementPosition);
+    nestedMethod[nestedType]--;
+    initializer.declarationSourceStart = intStack[intPtr--];
+
+    // recovery
+    if (currentElement != null) {
+      lastCheckPoint = initializer.declarationSourceEnd;
+      currentElement = currentElement.add(initializer, 0);
+      lastIgnoredToken = -1;
+    }
+  }
+  protected void consumeStaticOnly() {
+    // StaticOnly ::= 'static'
+    int savedModifiersSourceStart = modifiersSourceStart;
+    checkAnnotation(); // might update declaration source start
+    if (modifiersSourceStart >= savedModifiersSourceStart) {
+      modifiersSourceStart = savedModifiersSourceStart;
+    }
+    pushOnIntStack(modifiersSourceStart >= 0 ? modifiersSourceStart : scanner.startPosition);
+    jumpOverMethodBody();
+    nestedMethod[nestedType]++;
+    resetModifiers();
+
+    // recovery
+    if (currentElement != null) {
+      recoveredStaticInitializerStart = intStack[intPtr]; // remember start position only for static initializers
+    }
+  }
+  protected void consumeSwitchBlock() {
+    // SwitchBlock ::= '{' SwitchBlockStatements SwitchLabels '}'
+    concatNodeLists();
+  }
+  protected void consumeSwitchBlockStatement() {
+    // SwitchBlockStatement ::= SwitchLabels BlockStatements
+    concatNodeLists();
+  }
+  protected void consumeSwitchBlockStatements() {
+    // SwitchBlockStatements ::= SwitchBlockStatements SwitchBlockStatement
+    concatNodeLists();
+  }
+  protected void consumeSwitchLabels() {
+    // SwitchLabels ::= SwitchLabels SwitchLabel
+    optimizedConcatNodeLists();
+  }
+  protected void consumeToken(int type) {
+    /* remember the last consumed value */
+    /* try to minimize the number of build values */
+    if (scanner.wasNonExternalizedStringLiteral) {
+      StringLiteral[] literals = this.scanner.nonNLSStrings;
+      // could not reproduce, but this is the only NPE
+      // added preventive null check see PR 9035
+      if (literals != null) {
+        for (int i = 0, max = literals.length; i < max; i++) {
+          problemReporter().nonExternalizedStringLiteral(literals[i]);
+        }
+      }
+      scanner.currentLine = null;
+      scanner.wasNonExternalizedStringLiteral = false;
+    }
+    // clear the commentPtr of the scanner in case we read something different from a modifier
+    switch (type) {
+      //               case TokenNameabstract :
+      //               case TokenNamestrictfp :
+      //               case TokenNamefinal :
+      //               case TokenNamenative :
+      //               case TokenNameprivate :
+      //               case TokenNameprotected :
+      //               case TokenNamepublic :
+      //               case TokenNametransient :
+      //               case TokenNamevolatile :
+      case TokenNamestatic :
+        //             case TokenNamesynchronized :
+        break;
+      default :
+        scanner.commentPtr = -1;
+    }
+    //System.out.println(scanner.toStringAction(type));
+    switch (type) {
+      case TokenNameIdentifier :
+        pushIdentifier();
+        if (scanner.useAssertAsAnIndentifier) {
+          long positions = identifierPositionStack[identifierPtr];
+          problemReporter().useAssertAsAnIdentifier((int) (positions >>> 32), (int) positions);
+        }
+        scanner.commentPtr = -1;
+        break;
+        //             case TokenNameinterface :
+        //                     adjustInterfaceModifiers();
+        //                     //'class' is pushing two int (positions) on the stack ==> 'interface' needs to do it too....
+        //                     pushOnIntStack(scanner.startPosition);
+        //                     pushOnIntStack(scanner.currentPosition - 1);                    
+        //                     scanner.commentPtr = -1;
+        //                     break;
+        //             case TokenNameabstract :
+        //                     checkAndSetModifiers(AccAbstract);
+        //                     break;
+        //             case TokenNamestrictfp :
+        //                     checkAndSetModifiers(AccStrictfp);
+        //                     break;
+        //             case TokenNamefinal :
+        //                     checkAndSetModifiers(AccFinal);
+        //                     break;
+        //             case TokenNamenative :
+        //                     checkAndSetModifiers(AccNative);
+        //                     break;
+        //             case TokenNameprivate :
+        //                     checkAndSetModifiers(AccPrivate);
+        //                     break;
+        //             case TokenNameprotected :
+        //                     checkAndSetModifiers(AccProtected);
+        //                     break;
+        //             case TokenNamepublic :
+        //                     checkAndSetModifiers(AccPublic);
+        //                     break;
+        //             case TokenNametransient :
+        //                     checkAndSetModifiers(AccTransient);
+        //                     break;
+        //             case TokenNamevolatile :
+        //                     checkAndSetModifiers(AccVolatile);
+        //                     break;
+      case TokenNamestatic :
+        checkAndSetModifiers(AccStatic);
+        break;
+        //             case TokenNamesynchronized :
+        //                     this.synchronizedBlockSourceStart = scanner.startPosition;      
+        //                     checkAndSetModifiers(AccSynchronized);
+        //                     break;
+        //                     //==============================
+        //             case TokenNamevoid :
+        //                     pushIdentifier(-T_void);
+        //                     pushOnIntStack(scanner.currentPosition - 1);                            
+        //                     pushOnIntStack(scanner.startPosition);
+        //                     scanner.commentPtr = -1;
+        //                     break;
+        //                     //push a default dimension while void is not part of the primitive
+        //                     //declaration baseType and so takes the place of a type without getting into
+        //                     //regular type parsing that generates a dimension on intStack
+        //             case TokenNameboolean :
+        //                     pushIdentifier(-T_boolean);
+        //                     pushOnIntStack(scanner.currentPosition - 1);                            
+        //                     pushOnIntStack(scanner.startPosition);          
+        //                     scanner.commentPtr = -1;
+        //                     break;
+        //             case TokenNamebyte :
+        //                     pushIdentifier(-T_byte);
+        //                     pushOnIntStack(scanner.currentPosition - 1);                            
+        //                     pushOnIntStack(scanner.startPosition);                                  
+        //                     scanner.commentPtr = -1;
+        //                     break;
+        //             case TokenNamechar :
+        //                     pushIdentifier(-T_char);
+        //                     pushOnIntStack(scanner.currentPosition - 1);                            
+        //                     pushOnIntStack(scanner.startPosition);                                  
+        //                     scanner.commentPtr = -1;
+        //                     break;
+        //             case TokenNamedouble :
+        //                     pushIdentifier(-T_double);
+        //                     pushOnIntStack(scanner.currentPosition - 1);                            
+        //                     pushOnIntStack(scanner.startPosition);                                  
+        //                     scanner.commentPtr = -1;
+        //                     break;
+        //             case TokenNamefloat :
+        //                     pushIdentifier(-T_float);
+        //                     pushOnIntStack(scanner.currentPosition - 1);                            
+        //                     pushOnIntStack(scanner.startPosition);                                  
+        //                     scanner.commentPtr = -1;
+        //                     break;
+        //             case TokenNameint :
+        //                     pushIdentifier(-T_int);
+        //                     pushOnIntStack(scanner.currentPosition - 1);                            
+        //                     pushOnIntStack(scanner.startPosition);                                  
+        //                     scanner.commentPtr = -1;
+        //                     break;
+        //             case TokenNamelong :
+        //                     pushIdentifier(-T_long);
+        //                     pushOnIntStack(scanner.currentPosition - 1);                            
+        //                     pushOnIntStack(scanner.startPosition);                                  
+        //                     scanner.commentPtr = -1;
+        //                     break;
+        //             case TokenNameshort :
+        //                     pushIdentifier(-T_short);
+        //                     pushOnIntStack(scanner.currentPosition - 1);                            
+        //                     pushOnIntStack(scanner.startPosition);                                  
+        //                     scanner.commentPtr = -1;
+        //                     break;
+        //==============================
+      case TokenNameIntegerLiteral :
+        pushOnExpressionStack(new IntLiteral(scanner.getCurrentTokenSource(), scanner.startPosition, scanner.currentPosition - 1));
+        scanner.commentPtr = -1;
+        break;
+      case TokenNameLongLiteral :
+        pushOnExpressionStack(new LongLiteral(scanner.getCurrentTokenSource(), scanner.startPosition, scanner.currentPosition - 1));
+        scanner.commentPtr = -1;
+        break;
+      case TokenNameFloatingPointLiteral :
+        pushOnExpressionStack(
+          new FloatLiteral(scanner.getCurrentTokenSource(), scanner.startPosition, scanner.currentPosition - 1));
+        scanner.commentPtr = -1;
+        break;
+      case TokenNameDoubleLiteral :
+        pushOnExpressionStack(
+          new DoubleLiteral(scanner.getCurrentTokenSource(), scanner.startPosition, scanner.currentPosition - 1));
+        scanner.commentPtr = -1;
+        break;
+      case TokenNameCharacterLiteral :
+        pushOnExpressionStack(new CharLiteral(scanner.getCurrentTokenSource(), scanner.startPosition, scanner.currentPosition - 1));
+        scanner.commentPtr = -1;
+        break;
+      case TokenNameStringLiteral :
+        StringLiteral stringLiteral =
+          new StringLiteral(scanner.getCurrentTokenSourceString(), scanner.startPosition, scanner.currentPosition - 1);
+        pushOnExpressionStack(stringLiteral);
+        scanner.commentPtr = -1;
+        break;
+      case TokenNamefalse :
+        pushOnExpressionStack(new FalseLiteral(scanner.startPosition, scanner.currentPosition - 1));
+        scanner.commentPtr = -1;
+        break;
+      case TokenNametrue :
+        pushOnExpressionStack(new TrueLiteral(scanner.startPosition, scanner.currentPosition - 1));
+        break;
+      case TokenNamenull :
+        pushOnExpressionStack(new NullLiteral(scanner.startPosition, scanner.currentPosition - 1));
+        break;
+        //============================
+        //             case TokenNamesuper :
+        //             case TokenNamethis :
+        //                     endPosition = scanner.currentPosition - 1;
+        //                     pushOnIntStack(scanner.startPosition);
+        //                     break;
+        //             case TokenNameassert :
+        //             case TokenNameimport :
+        //             case TokenNamepackage :
+        //             case TokenNamethrow :
+      case TokenNamenew :
+      case TokenNamedo :
+      case TokenNameif :
+      case TokenNamefor :
+      case TokenNameswitch :
+        //             case TokenNametry :
+      case TokenNamewhile :
+      case TokenNamebreak :
+      case TokenNamecontinue :
+      case TokenNamereturn :
+      case TokenNamecase :
+        pushOnIntStack(scanner.startPosition);
+        break;
+      case TokenNameclass :
+        pushOnIntStack(scanner.currentPosition - 1);
+        pushOnIntStack(scanner.startPosition);
+        break;
+      case TokenNamedefault :
+        pushOnIntStack(scanner.startPosition);
+        pushOnIntStack(scanner.currentPosition - 1);
+        break;
+        //let extra semantic action decide when to push
+      case TokenNameRBRACKET :
+      case TokenNamePLUS :
+      case TokenNameMINUS :
+      case TokenNameNOT :
+      case TokenNameTWIDDLE :
+        endPosition = scanner.startPosition;
+        break;
+      case TokenNamePLUS_PLUS :
+      case TokenNameMINUS_MINUS :
+        endPosition = scanner.startPosition;
+        endStatementPosition = scanner.currentPosition - 1;
+        break;
+      case TokenNameRBRACE :
+      case TokenNameSEMICOLON :
+        endStatementPosition = scanner.currentPosition - 1;
+        endPosition = scanner.startPosition - 1;
+        //the item is not part of the potential futur expression/statement
+        break;
+        // in order to handle ( expression) ////// (cast)expression///// foo(x)
+      case TokenNameRPAREN :
+        rParenPos = scanner.currentPosition - 1; // position of the end of right parenthesis (in case of unicode \u0029) lex00101
+        break;
+      case TokenNameLPAREN :
+        lParenPos = scanner.startPosition;
+        break;
+        //  case TokenNameQUESTION  :
+        //  case TokenNameCOMMA :
+        //  case TokenNameCOLON  :
+        //  case TokenNameEQUAL  :
+        //  case TokenNameLBRACKET  :
+        //  case TokenNameDOT :
+        //  case TokenNameERROR :
+        //  case TokenNameEOF  :
+        //  case TokenNamecase  :
+        //  case TokenNamecatch  :
+        //  case TokenNameelse  :
+        //  case TokenNameextends  :
+        //  case TokenNamefinally  :
+        //  case TokenNameimplements  :
+        //  case TokenNamethrows  :
+        //  case TokenNameinstanceof  :
+        //  case TokenNameEQUAL_EQUAL  :
+        //  case TokenNameLESS_EQUAL  :
+        //  case TokenNameGREATER_EQUAL  :
+        //  case TokenNameNOT_EQUAL  :
+        //  case TokenNameLEFT_SHIFT  :
+        //  case TokenNameRIGHT_SHIFT  :
+        //  case TokenNameUNSIGNED_RIGHT_SHIFT :
+        //  case TokenNamePLUS_EQUAL  :
+        //  case TokenNameMINUS_EQUAL  :
+        //  case TokenNameMULTIPLY_EQUAL  :
+        //  case TokenNameDIVIDE_EQUAL  :
+        //  case TokenNameAND_EQUAL  :
+        //  case TokenNameOR_EQUAL  :
+        //  case TokenNameXOR_EQUAL  :
+        //  case TokenNameREMAINDER_EQUAL  :
+        //  case TokenNameLEFT_SHIFT_EQUAL  :
+        //  case TokenNameRIGHT_SHIFT_EQUAL  :
+        //  case TokenNameUNSIGNED_RIGHT_SHIFT_EQUAL  :
+        //  case TokenNameOR_OR  :
+        //  case TokenNameAND_AND  :
+        //  case TokenNameREMAINDER :
+        //  case TokenNameXOR  :
+        //  case TokenNameAND  :
+        //  case TokenNameMULTIPLY :
+        //  case TokenNameOR  :
+        //  case TokenNameDIVIDE :
+        //  case TokenNameGREATER  :
+        //  case TokenNameLESS  :
+    }
+  }
+  protected void consumeTypeDeclarations() {
+    // TypeDeclarations ::= TypeDeclarations TypeDeclaration
+    concatNodeLists();
+  }
+  protected void consumeTypeDeclarationsopt() {
+    // TypeDeclarationsopt ::= TypeDeclarations
+    int length;
+    if ((length = astLengthStack[astLengthPtr--]) != 0) {
+      astPtr -= length;
+      System.arraycopy(astStack, astPtr + 1, compilationUnit.types = new TypeDeclaration[length], 0, length);
+    }
+  }
+  protected void consumeTypeImportOnDemandDeclaration() {
+    // TypeImportOnDemandDeclaration ::= TypeImportOnDemandDeclarationName ';'
+
+    ImportReference impt = (ImportReference) astStack[astPtr];
+    // flush annotations defined prior to import statements
+    impt.declarationEnd = endStatementPosition;
+    impt.declarationSourceEnd = this.flushAnnotationsDefinedPriorTo(impt.declarationSourceEnd);
+
+    // recovery
+    if (currentElement != null) {
+      lastCheckPoint = impt.declarationSourceEnd + 1;
+      currentElement = currentElement.add(impt, 0);
+      restartRecovery = true;
+      lastIgnoredToken = -1;
+      // used to avoid branching back into the regular automaton
+    }
+  }
+  protected void consumeTypeImportOnDemandDeclarationName() {
+    // TypeImportOnDemandDeclarationName ::= 'import' Name '.' '*'
+    /* push an ImportRef build from the last name 
+    stored in the identifier stack. */
+
+    ImportReference impt;
+    int length;
+    char[][] tokens = new char[length = identifierLengthStack[identifierLengthPtr--]][];
+    identifierPtr -= length;
+    long[] positions = new long[length];
+    System.arraycopy(identifierStack, identifierPtr + 1, tokens, 0, length);
+    System.arraycopy(identifierPositionStack, identifierPtr + 1, positions, 0, length);
+    pushOnAstStack(impt = new ImportReference(tokens, positions, true));
+
+    if (currentToken == TokenNameSEMICOLON) {
+      impt.declarationSourceEnd = scanner.currentPosition - 1;
+    } else {
+      impt.declarationSourceEnd = impt.sourceEnd;
+    }
+    impt.declarationEnd = impt.declarationSourceEnd;
+    //endPosition is just before the ;
+    impt.declarationSourceStart = intStack[intPtr--];
+
+    // recovery
+    if (currentElement != null) {
+      lastCheckPoint = impt.declarationSourceEnd + 1;
+      currentElement = currentElement.add(impt, 0);
+      lastIgnoredToken = -1;
+      restartRecovery = true; // used to avoid branching back into the regular automaton               
+    }
+  }
+  protected void consumeUnaryExpression(int op) {
+    // UnaryExpression ::= '+' PushPosition UnaryExpression
+    // UnaryExpression ::= '-' PushPosition UnaryExpression
+    // UnaryExpressionNotPlusMinus ::= '~' PushPosition UnaryExpression
+    // UnaryExpressionNotPlusMinus ::= '!' PushPosition UnaryExpression
+
+    //optimize the push/pop
+
+    //handle manually the -2147483648 while it is not a real
+    //computation of an - and 2147483648 (notice that 2147483648
+    //is Integer.MAX_VALUE+1.....)
+    //Same for -9223372036854775808L ............
+
+    //intStack have the position of the operator
+
+    Expression r, exp = expressionStack[expressionPtr];
+    if (op == MINUS) {
+      if ((exp instanceof IntLiteral) && (((IntLiteral) exp).mayRepresentMIN_VALUE())) {
+        r = expressionStack[expressionPtr] = new IntLiteralMinValue();
+      } else {
+        if ((exp instanceof LongLiteral) && (((LongLiteral) exp).mayRepresentMIN_VALUE())) {
+          r = expressionStack[expressionPtr] = new LongLiteralMinValue();
+        } else {
+          r = expressionStack[expressionPtr] = new UnaryExpression(exp, op);
+        }
+      }
+    } else {
+      r = expressionStack[expressionPtr] = new UnaryExpression(exp, op);
+    }
+    r.sourceStart = intStack[intPtr--];
+    r.sourceEnd = exp.sourceEnd;
+  }
+  protected void consumeUnaryExpression(int op, boolean post) {
+    // PreIncrementExpression ::= '++' PushPosition UnaryExpression
+    // PreDecrementExpression ::= '--' PushPosition UnaryExpression
+
+    // ++ and -- operators
+    //optimize the push/pop
+
+    //intStack has the position of the operator when prefix
+
+    Expression leftHandSide = expressionStack[expressionPtr];
+    if (leftHandSide instanceof Reference) {
+      // ++foo()++ is unvalid 
+      if (post) {
+        expressionStack[expressionPtr] = new PostfixExpression(leftHandSide, IntLiteral.One, op, endStatementPosition);
+      } else {
+        expressionStack[expressionPtr] = new PrefixExpression(leftHandSide, IntLiteral.One, op, intStack[intPtr--]);
+      }
+    } else {
+      //the ++ or the -- is NOT taken into account if code gen proceeds
+      if (!post) {
+        intPtr--;
+      }
+      problemReporter().invalidUnaryExpression(leftHandSide);
+    }
+  }
+  protected void consumeVariableDeclarators() {
+    // VariableDeclarators ::= VariableDeclarators ',' VariableDeclarator
+    optimizedConcatNodeLists();
+  }
+  protected void consumeVariableInitializers() {
+    // VariableInitializers ::= VariableInitializers ',' VariableInitializer
+    concatExpressionLists();
+  }
+  protected TypeReference copyDims(TypeReference typeRef, int dim) {
+    return typeRef.copyDims(dim);
+  }
+  protected FieldDeclaration createFieldDeclaration(Expression initialization, char[] name, int sourceStart, int sourceEnd) {
+    return new FieldDeclaration(null, name, sourceStart, sourceEnd);
+  }
+
+  protected LocalDeclaration createLocalDeclaration(Expression initialization, char[] name, int sourceStart, int sourceEnd) {
+    return new LocalDeclaration(null, name, sourceStart, sourceEnd);
+  }
+
+  public CompilationUnitDeclaration dietParse(ICompilationUnit sourceUnit, CompilationResult compilationResult) {
+
+    CompilationUnitDeclaration parsedUnit;
+    boolean old = diet;
+    try {
+      diet = true;
+      parsedUnit = parse(sourceUnit, compilationResult);
+    } finally {
+      diet = old;
+    }
+    return parsedUnit;
+  }
+  protected void dispatchDeclarationInto(int length) {
+    /* they are length on astStack that should go into
+       methods fields constructors lists of the typeDecl
+    
+       Return if there is a constructor declaration in the methods declaration */
+
+    // Looks for the size of each array . 
+
+    if (length == 0)
+      return;
+    int[] flag = new int[length + 1]; //plus one -- see <HERE>
+    int size1 = 0, size2 = 0, size3 = 0;
+    for (int i = length - 1; i >= 0; i--) {
+      AstNode astNode = astStack[astPtr--];
+      if (astNode instanceof AbstractMethodDeclaration) {
+        //methods and constructors have been regrouped into one single list
+        flag[i] = 3;
+        size2++;
+      } else {
+        if (astNode instanceof TypeDeclaration) {
+          flag[i] = 4;
+          size3++;
+        } else {
+          //field
+          flag[i] = 1;
+          size1++;
+        }
+      }
+    }
+
+    //arrays creation
+    TypeDeclaration typeDecl = (TypeDeclaration) astStack[astPtr];
+    if (size1 != 0)
+      typeDecl.fields = new FieldDeclaration[size1];
+    if (size2 != 0)
+      typeDecl.methods = new AbstractMethodDeclaration[size2];
+    if (size3 != 0)
+      typeDecl.memberTypes = new MemberTypeDeclaration[size3];
+
+    //arrays fill up
+    size1 = size2 = size3 = 0;
+    int flagI = flag[0], start = 0;
+    int length2;
+    for (int end = 0; end <= length; end++) //<HERE> the plus one allows to 
+      {
+      if (flagI != flag[end]) //treat the last element as a ended flag.....
+        { //array copy
+        switch (flagI) {
+          case 1 :
+            size1 += (length2 = end - start);
+            System.arraycopy(astStack, astPtr + start + 1, typeDecl.fields, size1 - length2, length2);
+            break;
+          case 3 :
+            size2 += (length2 = end - start);
+            System.arraycopy(astStack, astPtr + start + 1, typeDecl.methods, size2 - length2, length2);
+            break;
+          case 4 :
+            size3 += (length2 = end - start);
+            System.arraycopy(astStack, astPtr + start + 1, typeDecl.memberTypes, size3 - length2, length2);
+            break;
+        };
+        flagI = flag[start = end];
+      }
+    }
+
+    if (typeDecl.memberTypes != null) {
+      for (int i = typeDecl.memberTypes.length - 1; i >= 0; i--) {
+        typeDecl.memberTypes[i].enclosingType = typeDecl;
+      }
+    }
+  }
+  protected CompilationUnitDeclaration endParse(int act) {
+
+    this.lastAct = act;
+
+    if (currentElement != null) {
+      currentElement.topElement().updateParseTree();
+      if (VERBOSE_RECOVERY) {
+        System.out.print(Util.bind("parser.syntaxRecovery")); //$NON-NLS-1$
+        System.out.println("--------------------------"); //$NON-NLS-1$
+        System.out.println(compilationUnit);
+        System.out.println("----------------------------------"); //$NON-NLS-1$
+      }
+    } else {
+      if (diet & VERBOSE_RECOVERY) {
+        System.out.print(Util.bind("parser.regularParse")); //$NON-NLS-1$
+        System.out.println("--------------------------"); //$NON-NLS-1$
+        System.out.println(compilationUnit);
+        System.out.println("----------------------------------"); //$NON-NLS-1$
+      }
+    }
+    if (scanner.recordLineSeparator) {
+      compilationUnit.compilationResult.lineSeparatorPositions = scanner.getLineEnds();
+    }
+    return compilationUnit;
+  }
+  /*
+   * Flush annotations defined prior to a given positions.
+   *
+   * Note: annotations are stacked in syntactical order
+   *
+   * Either answer given <position>, or the end position of a comment line 
+   * immediately following the <position> (same line)
+   *
+   * e.g.
+   * void foo(){
+   * } // end of method foo
+   */
+
+  public int flushAnnotationsDefinedPriorTo(int position) {
+
+    int lastAnnotationIndex = scanner.commentPtr;
+    if (lastAnnotationIndex < 0)
+      return position; // no comment
+
+    // compute the index of the first obsolete comment
+    int index = lastAnnotationIndex;
+    int validCount = 0;
+    while (index >= 0) {
+      int commentEnd = scanner.commentStops[index];
+      if (commentEnd < 0)
+        commentEnd = -commentEnd; // negative end position for non-javadoc comments
+      if (commentEnd <= position) {
+        break;
+      }
+      index--;
+      validCount++;
+    }
+    // if the source at <position> is immediately followed by a line comment, then
+    // flush this comment and shift <position> to the comment end.
+    if (validCount > 0) {
+      int immediateCommentEnd = -scanner.commentStops[index + 1]; //non-javadoc comment end positions are negative
+      if (immediateCommentEnd > 0) { // only tolerating non-javadoc comments
+        // is there any line break until the end of the immediate comment ? (thus only tolerating line comment)
+        immediateCommentEnd--; // comment end in one char too far
+        if (scanner.getLineNumber(position) == scanner.getLineNumber(immediateCommentEnd)) {
+          position = immediateCommentEnd;
+          validCount--; // flush this comment
+          index++;
+        }
+      }
+    }
+    // position can be located in the middle of a line break
+    // this is a bug on Windows platform only.
+    // http://dev.eclipse.org/bugs/show_bug.cgi?id=10557
+    char[] source = scanner.source;
+
+    if ((position < source.length)
+      && (source[position] == '\r')
+      && ((position + 1) < source.length)
+      && (source[position + 1] == '\n')) {
+      position++;
+    }
+    if (index < 0)
+      return position; // no obsolete comment
+
+    if (validCount > 0) { // move valid comment infos, overriding obsolete comment infos
+      System.arraycopy(scanner.commentStarts, index + 1, scanner.commentStarts, 0, validCount);
+      System.arraycopy(scanner.commentStops, index + 1, scanner.commentStops, 0, validCount);
+    }
+    scanner.commentPtr = validCount - 1;
+    return position;
+  }
+  public final int getFirstToken() {
+    // the first token is a virtual token that
+    // allows the parser to parse several goals
+    // even if they aren't LALR(1)....
+    // Goal ::= '++' CompilationUnit
+    // Goal ::= '--' MethodBody
+    // Goal ::= '==' ConstructorBody
+    // -- Initializer
+    // Goal ::= '>>' StaticInitializer
+    // Goal ::= '>>' Block
+    // -- error recovery
+    // Goal ::= '>>>' Headers
+    // Goal ::= '*' BlockStatements
+    // Goal ::= '*' MethodPushModifiersHeader
+    // -- JDOM
+    // Goal ::= '&&' FieldDeclaration
+    // Goal ::= '||' ImportDeclaration
+    // Goal ::= '?' PackageDeclaration
+    // Goal ::= '+' TypeDeclaration
+    // Goal ::= '/' GenericMethodDeclaration
+    // Goal ::= '&' ClassBodyDeclaration
+    // -- code snippet
+    // Goal ::= '%' Expression
+    // -- completion parser
+    // Goal ::= '!' ConstructorBlockStatementsopt
+    // Goal ::= '~' BlockStatementsopt
+
+    return firstToken;
+  }
+  /*
+   * Answer back an array of sourceStart/sourceEnd positions of the available JavaDoc comments.
+   * The array is a flattened structure: 2*n entries with consecutives start and end positions.
+   *
+   * If no JavaDoc is available, then null is answered instead of an empty array.
+   *
+   * e.g. { 10, 20, 25, 45 }  --> javadoc1 from 10 to 20, javadoc2 from 25 to 45
+   */
+  public int[] getJavaDocPositions() {
+
+    int javadocCount = 0;
+    for (int i = 0, max = scanner.commentPtr; i <= max; i++) {
+      // javadoc only (non javadoc comment have negative end positions.)
+      if (scanner.commentStops[i] > 0) {
+        javadocCount++;
+      }
+    }
+    if (javadocCount == 0)
+      return null;
+
+    int[] positions = new int[2 * javadocCount];
+    int index = 0;
+    for (int i = 0, max = scanner.commentPtr; i <= max; i++) {
+      // javadoc only (non javadoc comment have negative end positions.)
+      if (scanner.commentStops[i] > 0) {
+        positions[index++] = scanner.commentStarts[i];
+        positions[index++] = scanner.commentStops[i] - 1; //stop is one over                   
+      }
+    }
+    return positions;
+  }
+  protected void getMethodBodies(CompilationUnitDeclaration unit) {
+    //fill the methods bodies in order for the code to be generated
+
+    if (unit == null)
+      return;
+
+    if (unit.ignoreMethodBodies) {
+      unit.ignoreFurtherInvestigation = true;
+      return;
+      // if initial diet parse did not work, no need to dig into method bodies.
+    }
+
+    //real parse of the method....
+    this.scanner.setSource(unit.compilationResult.compilationUnit.getContents());
+    if (unit.types != null) {
+      for (int i = unit.types.length; --i >= 0;)
+        unit.types[i].parseMethod(this, unit);
+    }
+  }
+  protected TypeReference getTypeReference(int dim) { /* build a Reference on a variable that may be qualified or not
+  This variable is a type reference and dim will be its dimensions*/
+
+    int length;
+    TypeReference ref;
+    if ((length = identifierLengthStack[identifierLengthPtr--]) == 1) {
+      // single variable reference
+      if (dim == 0) {
+        ref = new SingleTypeReference(identifierStack[identifierPtr], identifierPositionStack[identifierPtr--]);
+      } else {
+        ref = new ArrayTypeReference(identifierStack[identifierPtr], dim, identifierPositionStack[identifierPtr--]);
+        ref.sourceEnd = endPosition;
+      }
+    } else {
+      if (length < 0) { //flag for precompiled type reference on base types
+        ref = TypeReference.baseTypeReference(-length, dim);
+        ref.sourceStart = intStack[intPtr--];
+        if (dim == 0) {
+          ref.sourceEnd = intStack[intPtr--];
+        } else {
+          intPtr--;
+          ref.sourceEnd = endPosition;
+        }
+      } else { //Qualified variable reference
+        char[][] tokens = new char[length][];
+        identifierPtr -= length;
+        long[] positions = new long[length];
+        System.arraycopy(identifierStack, identifierPtr + 1, tokens, 0, length);
+        System.arraycopy(identifierPositionStack, identifierPtr + 1, positions, 0, length);
+        if (dim == 0) {
+          ref = new QualifiedTypeReference(tokens, positions);
+        } else {
+          ref = new ArrayQualifiedTypeReference(tokens, dim, positions);
+          ref.sourceEnd = endPosition;
+        }
+      }
+    };
+    return ref;
+  }
+  protected Expression getTypeReference(Expression exp) {
+
+    exp.bits &= ~AstNode.RestrictiveFlagMASK;
+    exp.bits |= TYPE;
+    return exp;
+  }
+  protected NameReference getUnspecifiedReference() {
+    /* build a (unspecified) NameReference which may be qualified*/
+
+    int length;
+    NameReference ref;
+    if ((length = identifierLengthStack[identifierLengthPtr--]) == 1)
+      // single variable reference
+      ref = new SingleNameReference(identifierStack[identifierPtr], identifierPositionStack[identifierPtr--]);
+    else
+      //Qualified variable reference
+      {
+      char[][] tokens = new char[length][];
+      identifierPtr -= length;
+      System.arraycopy(identifierStack, identifierPtr + 1, tokens, 0, length);
+        ref = new QualifiedNameReference(tokens, (int) (identifierPositionStack[identifierPtr + 1] >> 32), // sourceStart
+   (int) identifierPositionStack[identifierPtr + length]); // sourceEnd
+    };
+    return ref;
+  }
+  protected NameReference getUnspecifiedReferenceOptimized() {
+    /* build a (unspecified) NameReference which may be qualified
+    The optimization occurs for qualified reference while we are
+    certain in this case the last item of the qualified name is
+    a field access. This optimization is IMPORTANT while it results
+    that when a NameReference is build, the type checker should always
+    look for that it is not a type reference */
+
+    int length;
+    NameReference ref;
+    if ((length = identifierLengthStack[identifierLengthPtr--]) == 1) {
+      // single variable reference
+      ref = new SingleNameReference(identifierStack[identifierPtr], identifierPositionStack[identifierPtr--]);
+      ref.bits &= ~AstNode.RestrictiveFlagMASK;
+      ref.bits |= LOCAL | FIELD;
+      return ref;
+    }
+
+    //Qualified-variable-reference
+    //In fact it is variable-reference DOT field-ref , but it would result in a type
+    //conflict tha can be only reduce by making a superclass (or inetrface ) between
+    //nameReference and FiledReference or putting FieldReference under NameReference
+    //or else..........This optimisation is not really relevant so just leave as it is
+
+    char[][] tokens = new char[length][];
+    identifierPtr -= length;
+    System.arraycopy(identifierStack, identifierPtr + 1, tokens, 0, length);
+      ref = new QualifiedNameReference(tokens, (int) (identifierPositionStack[identifierPtr + 1] >> 32), // sourceStart
+   (int) identifierPositionStack[identifierPtr + length]); // sourceEnd
+    ref.bits &= ~AstNode.RestrictiveFlagMASK;
+    ref.bits |= LOCAL | FIELD;
+    return ref;
+  }
+  public void goForBlockStatementsOrMethodHeaders() {
+    //tells the scanner to go for block statements or method headers parsing 
+
+    firstToken = TokenNameMULTIPLY;
+    scanner.recordLineSeparator = false;
+  }
+  public void goForClassBodyDeclarations() {
+    //tells the scanner to go for any body declarations parsing
+
+    firstToken = TokenNameAND;
+    scanner.recordLineSeparator = true;
+  }
+  public void goForCompilationUnit() {
+    //tells the scanner to go for compilation unit parsing
+
+    firstToken = TokenNamePLUS_PLUS;
+    scanner.linePtr = -1;
+    scanner.recordLineSeparator = true;
+    scanner.currentLine = null;
+    scanner.lines = new ArrayList();
+  }
+  public void goForConstructorBody() {
+    //tells the scanner to go for compilation unit parsing
+
+    firstToken = TokenNameEQUAL_EQUAL;
+    scanner.recordLineSeparator = false;
+  }
+  public void goForExpression() {
+    //tells the scanner to go for an expression parsing
+
+    firstToken = TokenNameREMAINDER;
+    scanner.recordLineSeparator = false;
+  }
+  public void goForFieldDeclaration() {
+    //tells the scanner to go for field declaration parsing
+
+    firstToken = TokenNameAND_AND;
+    scanner.recordLineSeparator = true;
+  }
+  public void goForGenericMethodDeclaration() {
+    //tells the scanner to go for generic method declarations parsing
+
+    firstToken = TokenNameDIVIDE;
+    scanner.recordLineSeparator = true;
+  }
+  public void goForHeaders() {
+    //tells the scanner to go for headers only parsing
+
+    firstToken = TokenNameUNSIGNED_RIGHT_SHIFT;
+    scanner.recordLineSeparator = true;
+  }
+  public void goForImportDeclaration() {
+    //tells the scanner to go for import declaration parsing
+
+    firstToken = TokenNameOR_OR;
+    scanner.recordLineSeparator = true;
+  }
+  public void goForInitializer() {
+    //tells the scanner to go for initializer parsing
+
+    firstToken = TokenNameRIGHT_SHIFT;
+    scanner.recordLineSeparator = false;
+  }
+  public void goForMethodBody() {
+    //tells the scanner to go for method body parsing
+
+    firstToken = TokenNameMINUS_MINUS;
+    scanner.recordLineSeparator = false;
+  }
+  public void goForPackageDeclaration() {
+    //tells the scanner to go for package declaration parsing
+
+    firstToken = TokenNameQUESTION;
+    scanner.recordLineSeparator = true;
+  }
+  public void goForTypeDeclaration() {
+    //tells the scanner to go for type (interface or class) declaration parsing
+
+    firstToken = TokenNamePLUS;
+    scanner.recordLineSeparator = true;
+  }
+  public final static void grammar() {
+    /*
+    --main options
+    %options ACTION, AN=JavaAction.java, GP=java, 
+    %options FILE-PREFIX=java, ESCAPE=$, PREFIX=TokenName, OUTPUT-SIZE=125 ,
+    %options NOGOTO-DEFAULT, SINGLE-PRODUCTIONS, LALR=1 , TABLE=TIME , 
+    
+    --error recovering options.....
+    %options ERROR_MAPS 
+    
+    --grammar understanding options
+    %options first follow
+    %options TRACE=FULL ,
+    %options VERBOSE
+    
+    --Usefull macros helping reading/writing semantic actions
+    $Define 
+    $putCase 
+    /.    case $rule_number : // System.out.println("$rule_text");  
+                  ./
+    
+    $break
+    /. 
+                       break ;
+    ./
+    
+    -- here it starts really ------------------------------------------
+    $Terminals
+    
+       Identifier
+    
+       abstract assert boolean break byte case catch char class 
+       continue default do double else extends false final finally float
+       for if implements import instanceof int
+       interface long native new null package private
+       protected public return short static strictfp super switch
+       synchronized this throw throws transient true try void
+       volatile while
+    
+       IntegerLiteral
+       LongLiteral
+       FloatingPointLiteral
+       DoubleLiteral
+       CharacterLiteral
+       StringLiteral
+    
+       PLUS_PLUS
+       MINUS_MINUS
+       EQUAL_EQUAL
+       LESS_EQUAL
+       GREATER_EQUAL
+       NOT_EQUAL
+       LEFT_SHIFT
+       RIGHT_SHIFT
+       UNSIGNED_RIGHT_SHIFT
+       PLUS_EQUAL
+       MINUS_EQUAL
+       MULTIPLY_EQUAL
+       DIVIDE_EQUAL
+       AND_EQUAL
+       OR_EQUAL
+       XOR_EQUAL
+       REMAINDER_EQUAL
+       LEFT_SHIFT_EQUAL
+       RIGHT_SHIFT_EQUAL
+       UNSIGNED_RIGHT_SHIFT_EQUAL
+       OR_OR
+       AND_AND
+       PLUS
+       MINUS
+       NOT
+       REMAINDER
+       XOR
+       AND
+       MULTIPLY
+       OR
+       TWIDDLE
+       DIVIDE
+       GREATER
+       LESS
+       LPAREN
+       RPAREN
+       LBRACE
+       RBRACE
+       LBRACKET
+       RBRACKET
+       SEMICOLON
+       QUESTION
+       COLON
+       COMMA
+       DOT
+       EQUAL
+    
+    --    BodyMarker
+    
+    $Alias
+    
+       '++'   ::= PLUS_PLUS
+       '--'   ::= MINUS_MINUS
+       '=='   ::= EQUAL_EQUAL
+       '<='   ::= LESS_EQUAL
+       '>='   ::= GREATER_EQUAL
+       '!='   ::= NOT_EQUAL
+       '<<'   ::= LEFT_SHIFT
+       '>>'   ::= RIGHT_SHIFT
+       '>>>'  ::= UNSIGNED_RIGHT_SHIFT
+       '+='   ::= PLUS_EQUAL
+       '-='   ::= MINUS_EQUAL
+       '*='   ::= MULTIPLY_EQUAL
+       '/='   ::= DIVIDE_EQUAL
+       '&='   ::= AND_EQUAL
+       '|='   ::= OR_EQUAL
+       '^='   ::= XOR_EQUAL
+       '%='   ::= REMAINDER_EQUAL
+       '<<='  ::= LEFT_SHIFT_EQUAL
+       '>>='  ::= RIGHT_SHIFT_EQUAL
+       '>>>=' ::= UNSIGNED_RIGHT_SHIFT_EQUAL
+       '||'   ::= OR_OR
+       '&&'   ::= AND_AND
+    
+       '+'    ::= PLUS
+       '-'    ::= MINUS
+       '!'    ::= NOT
+       '%'    ::= REMAINDER
+       '^'    ::= XOR
+       '&'    ::= AND
+       '*'    ::= MULTIPLY
+       '|'    ::= OR
+       '~'    ::= TWIDDLE
+       '/'    ::= DIVIDE
+       '>'    ::= GREATER
+       '<'    ::= LESS
+       '('    ::= LPAREN
+       ')'    ::= RPAREN
+       '{'    ::= LBRACE
+       '}'    ::= RBRACE
+       '['    ::= LBRACKET
+       ']'    ::= RBRACKET
+       ';'    ::= SEMICOLON
+       '?'    ::= QUESTION
+       ':'    ::= COLON
+       ','    ::= COMMA
+       '.'    ::= DOT
+       '='    ::= EQUAL
+       
+    $Start
+       Goal
+    
+    $Rules
+    
+    /. // This method is part of an automatic generation : do NOT edit-modify  
+    protected void consumeRule(int act) {
+      switch ( act ) {
+    ./
+    
+    
+    
+    Goal ::= '++' CompilationUnit
+    Goal ::= '--' MethodBody
+    Goal ::= '==' ConstructorBody
+    -- Initializer
+    Goal ::= '>>' StaticInitializer
+    Goal ::= '>>' Initializer
+    -- error recovery
+    Goal ::= '>>>' Headers
+    Goal ::= '*' BlockStatements
+    Goal ::= '*' MethodPushModifiersHeader
+    Goal ::= '*' CatchHeader
+    -- JDOM
+    Goal ::= '&&' FieldDeclaration
+    Goal ::= '||' ImportDeclaration
+    Goal ::= '?' PackageDeclaration
+    Goal ::= '+' TypeDeclaration
+    Goal ::= '/' GenericMethodDeclaration
+    Goal ::= '&' ClassBodyDeclaration
+    -- code snippet
+    Goal ::= '%' Expression
+    -- completion parser
+    Goal ::= '!' ConstructorBlockStatementsopt
+    Goal ::= '~' BlockStatementsopt
+    
+    Literal -> IntegerLiteral
+    Literal -> LongLiteral
+    Literal -> FloatingPointLiteral
+    Literal -> DoubleLiteral
+    Literal -> CharacterLiteral
+    Literal -> StringLiteral
+    Literal -> null
+    Literal -> BooleanLiteral
+    BooleanLiteral -> true
+    BooleanLiteral -> false
+    
+    -------------------------------------------------------------
+    -------------------------------------------------------------
+    --a Type results in both a push of its dimension(s) and its name(s).
+    
+    Type ::= PrimitiveType
+     /.$putCase consumePrimitiveType(); $break ./
+    Type -> ReferenceType
+    
+    PrimitiveType -> NumericType
+    NumericType -> IntegralType
+    NumericType -> FloatingPointType
+    
+    PrimitiveType -> 'boolean'
+    PrimitiveType -> 'void'
+    IntegralType -> 'byte'
+    IntegralType -> 'short'
+    IntegralType -> 'int'
+    IntegralType -> 'long'
+    IntegralType -> 'char'
+    FloatingPointType -> 'float'
+    FloatingPointType -> 'double'
+    
+    ReferenceType ::= ClassOrInterfaceType
+    /.$putCase consumeReferenceType();  $break ./
+    ReferenceType -> ArrayType -- here a push of dimensions is done, that explains the two previous push 0
+    
+    ClassOrInterfaceType -> Name
+    
+    --
+    -- These rules have been rewritten to avoid some conflicts introduced
+    -- by adding the 1.1 features
+    --
+    -- ArrayType ::= PrimitiveType '[' ']'
+    -- ArrayType ::= Name '[' ']'
+    -- ArrayType ::= ArrayType '[' ']'
+    --
+    
+    ArrayType ::= PrimitiveType Dims
+    ArrayType ::= Name Dims
+    
+    ClassType -> ClassOrInterfaceType
+    
+    
+    --------------------------------------------------------------
+    --------------------------------------------------------------
+    
+    Name -> SimpleName
+    Name -> QualifiedName
+    
+    SimpleName -> 'Identifier'
+    
+    QualifiedName ::= Name '.' SimpleName 
+    /.$putCase consumeQualifiedName(); $break ./
+    
+    CompilationUnit ::= EnterCompilationUnit PackageDeclarationopt ImportDeclarationsopt TypeDeclarationsopt
+    /.$putCase consumeCompilationUnit(); $break ./
+    
+    EnterCompilationUnit ::= $empty
+    /.$putCase consumeEnterCompilationUnit(); $break ./
+    
+    Headers -> Header
+    Headers ::= Headers Header
+    
+    Header -> ImportDeclaration
+    Header -> PackageDeclaration
+    Header -> ClassHeader
+    Header -> InterfaceHeader
+    Header -> StaticInitializer
+    Header -> MethodHeader
+    Header -> ConstructorHeader
+    Header -> FieldDeclaration
+    Header -> AllocationHeader
+    
+    CatchHeader ::= 'catch' '(' FormalParameter ')' '{'
+    /.$putCase consumeCatchHeader(); $break ./
+    
+    ImportDeclarations -> ImportDeclaration
+    ImportDeclarations ::= ImportDeclarations ImportDeclaration 
+    /.$putCase consumeImportDeclarations(); $break ./
+    
+    TypeDeclarations -> TypeDeclaration
+    TypeDeclarations ::= TypeDeclarations TypeDeclaration
+    /.$putCase consumeTypeDeclarations(); $break ./
+    
+    PackageDeclaration ::= PackageDeclarationName ';'
+    /.$putCase  consumePackageDeclaration(); $break ./
+    
+    PackageDeclarationName ::= 'package' Name
+    /.$putCase  consumePackageDeclarationName(); $break ./
+    
+    ImportDeclaration -> SingleTypeImportDeclaration
+    ImportDeclaration -> TypeImportOnDemandDeclaration
+    
+    SingleTypeImportDeclaration ::= SingleTypeImportDeclarationName ';'
+    /.$putCase consumeSingleTypeImportDeclaration(); $break ./
+                         
+    SingleTypeImportDeclarationName ::= 'import' Name
+    /.$putCase consumeSingleTypeImportDeclarationName(); $break ./
+                         
+    TypeImportOnDemandDeclaration ::= TypeImportOnDemandDeclarationName ';'
+    /.$putCase consumeTypeImportOnDemandDeclaration(); $break ./
+    
+    TypeImportOnDemandDeclarationName ::= 'import' Name '.' '*'
+    /.$putCase consumeTypeImportOnDemandDeclarationName(); $break ./
+    
+    TypeDeclaration -> ClassDeclaration
+    TypeDeclaration -> InterfaceDeclaration
+    -- this declaration in part of a list od declaration and we will
+    -- use and optimized list length calculation process 
+    -- thus we decrement the number while it will be incremend.....
+    TypeDeclaration ::= ';' 
+    /. $putCase consumeEmptyTypeDeclaration(); $break ./
+    
+    --18.7 Only in the LALR(1) Grammar
+    
+    Modifiers ::= Modifier
+    Modifiers ::= Modifiers Modifier
+    
+    Modifier -> 'public' 
+    Modifier -> 'protected'
+    Modifier -> 'private'
+    Modifier -> 'static'
+    Modifier -> 'abstract'
+    Modifier -> 'final'
+    Modifier -> 'native'
+    Modifier -> 'synchronized'
+    Modifier -> 'transient'
+    Modifier -> 'volatile'
+    Modifier -> 'strictfp'
+    
+    --18.8 Productions from 8: Class Declarations
+    --ClassModifier ::=
+    --      'abstract'
+    --    | 'final'
+    --    | 'public'
+    --18.8.1 Productions from 8.1: Class Declarations
+    
+    ClassDeclaration ::= ClassHeader ClassBody
+    /.$putCase consumeClassDeclaration(); $break ./
+    
+    ClassHeader ::= ClassHeaderName ClassHeaderExtendsopt ClassHeaderImplementsopt
+    /.$putCase consumeClassHeader(); $break ./
+    
+    ClassHeaderName ::= Modifiersopt 'class' 'Identifier'
+    /.$putCase consumeClassHeaderName(); $break ./
+    
+    ClassHeaderExtends ::= 'extends' ClassType
+    /.$putCase consumeClassHeaderExtends(); $break ./
+    
+    ClassHeaderImplements ::= 'implements' InterfaceTypeList
+    /.$putCase consumeClassHeaderImplements(); $break ./
+    
+    InterfaceTypeList -> InterfaceType
+    InterfaceTypeList ::= InterfaceTypeList ',' InterfaceType
+    /.$putCase consumeInterfaceTypeList(); $break ./
+    
+    InterfaceType ::= ClassOrInterfaceType
+    /.$putCase consumeInterfaceType(); $break ./
+    
+    ClassBody ::= '{' ClassBodyDeclarationsopt '}'
+    
+    ClassBodyDeclarations ::= ClassBodyDeclaration
+    ClassBodyDeclarations ::= ClassBodyDeclarations ClassBodyDeclaration
+    /.$putCase consumeClassBodyDeclarations(); $break ./
+    
+    ClassBodyDeclaration -> ClassMemberDeclaration
+    ClassBodyDeclaration -> StaticInitializer
+    ClassBodyDeclaration -> ConstructorDeclaration
+    --1.1 feature
+    ClassBodyDeclaration ::= Diet NestedMethod Block
+    /.$putCase consumeClassBodyDeclaration(); $break ./
+    Diet ::= $empty
+    /.$putCase consumeDiet(); $break./
+    
+    Initializer ::= Diet NestedMethod Block
+    /.$putCase consumeClassBodyDeclaration(); $break ./
+    
+    ClassMemberDeclaration -> FieldDeclaration
+    ClassMemberDeclaration -> MethodDeclaration
+    --1.1 feature
+    ClassMemberDeclaration -> ClassDeclaration
+    --1.1 feature
+    ClassMemberDeclaration -> InterfaceDeclaration
+    
+    -- Empty declarations are not valid Java ClassMemberDeclarations.
+    -- However, since the current (2/14/97) Java compiler accepts them 
+    -- (in fact, some of the official tests contain this erroneous
+    -- syntax)
+    
+    GenericMethodDeclaration -> MethodDeclaration
+    GenericMethodDeclaration -> ConstructorDeclaration
+    
+    ClassMemberDeclaration ::= ';'
+    /.$putCase consumeEmptyClassMemberDeclaration(); $break./
+    
+    --18.8.2 Productions from 8.3: Field Declarations
+    --VariableModifier ::=
+    --      'public'
+    --    | 'protected'
+    --    | 'private'
+    --    | 'static'
+    --    | 'final'
+    --    | 'transient'
+    --    | 'volatile'
+    
+    FieldDeclaration ::= Modifiersopt Type VariableDeclarators ';'
+    /.$putCase consumeFieldDeclaration(); $break ./
+    
+    VariableDeclarators -> VariableDeclarator 
+    VariableDeclarators ::= VariableDeclarators ',' VariableDeclarator
+    /.$putCase consumeVariableDeclarators(); $break ./
+    
+    VariableDeclarator ::= VariableDeclaratorId EnterVariable ExitVariableWithoutInitialization
+    
+    VariableDeclarator ::= VariableDeclaratorId EnterVariable '=' ForceNoDiet VariableInitializer RestoreDiet ExitVariableWithInitialization
+    
+    EnterVariable ::= $empty
+    /.$putCase consumeEnterVariable(); $break ./
+    
+    ExitVariableWithInitialization ::= $empty
+    /.$putCase consumeExitVariableWithInitialization(); $break ./
+    
+    ExitVariableWithoutInitialization ::= $empty
+    /.$putCase consumeExitVariableWithoutInitialization(); $break ./
+    
+    ForceNoDiet ::= $empty
+    /.$putCase consumeForceNoDiet(); $break ./
+    RestoreDiet ::= $empty
+    /.$putCase consumeRestoreDiet(); $break ./
+    
+    VariableDeclaratorId ::= 'Identifier' Dimsopt
+    
+    VariableInitializer -> Expression
+    VariableInitializer -> ArrayInitializer
+    
+    --18.8.3 Productions from 8.4: Method Declarations
+    --MethodModifier ::=
+    --      'public'
+    --    | 'protected'
+    --    | 'private'
+    --    | 'static'
+    --    | 'abstract'
+    --    | 'final'
+    --    | 'native'
+    --    | 'synchronized'
+    --
+    
+    MethodDeclaration -> AbstractMethodDeclaration
+    MethodDeclaration ::= MethodHeader MethodBody 
+    /.$putCase // set to true to consume a method with a body
+      consumeMethodDeclaration(true);  $break ./
+    
+    AbstractMethodDeclaration ::= MethodHeader ';'
+    /.$putCase // set to false to consume a method without body
+      consumeMethodDeclaration(false); $break ./
+    
+    MethodHeader ::= MethodHeaderName MethodHeaderParameters MethodHeaderExtendedDims MethodHeaderThrowsClauseopt
+    /.$putCase consumeMethodHeader(); $break ./
+    
+    MethodPushModifiersHeader ::= MethodPushModifiersHeaderName MethodHeaderParameters MethodHeaderExtendedDims MethodHeaderThrowsClauseopt
+    /.$putCase consumeMethodHeader(); $break ./
+    
+    MethodPushModifiersHeaderName ::= Modifiers Type PushModifiers 'Identifier' '(' 
+    /.$putCase consumeMethodPushModifiersHeaderName(); $break ./
+    
+    MethodPushModifiersHeaderName ::= Type PushModifiers 'Identifier' '(' 
+    /.$putCase consumeMethodPushModifiersHeaderName(); $break ./
+    
+    MethodHeaderName ::= Modifiersopt Type 'Identifier' '('
+    /.$putCase consumeMethodHeaderName(); $break ./
+    
+    MethodHeaderParameters ::= FormalParameterListopt ')'
+    /.$putCase consumeMethodHeaderParameters(); $break ./
+    
+    MethodHeaderExtendedDims ::= Dimsopt
+    /.$putCase consumeMethodHeaderExtendedDims(); $break ./
+    
+    MethodHeaderThrowsClause ::= 'throws' ClassTypeList
+    /.$putCase consumeMethodHeaderThrowsClause(); $break ./
+    
+    ConstructorHeader ::= ConstructorHeaderName MethodHeaderParameters MethodHeaderThrowsClauseopt
+    /.$putCase consumeConstructorHeader(); $break ./
+    
+    ConstructorHeaderName ::=  Modifiersopt 'Identifier' '('
+    /.$putCase consumeConstructorHeaderName(); $break ./
+    
+    FormalParameterList -> FormalParameter
+    FormalParameterList ::= FormalParameterList ',' FormalParameter
+    /.$putCase consumeFormalParameterList(); $break ./
+    
+    --1.1 feature
+    FormalParameter ::= Modifiersopt Type VariableDeclaratorId
+    /.$putCase // the boolean is used to know if the modifiers should be reset
+       consumeFormalParameter(); $break ./
+    
+    ClassTypeList -> ClassTypeElt
+    ClassTypeList ::= ClassTypeList ',' ClassTypeElt
+    /.$putCase consumeClassTypeList(); $break ./
+    
+    ClassTypeElt ::= ClassType
+    /.$putCase consumeClassTypeElt(); $break ./
+    
+    
+    MethodBody ::= NestedMethod '{' BlockStatementsopt '}' 
+    /.$putCase consumeMethodBody(); $break ./
+    
+    NestedMethod ::= $empty
+    /.$putCase consumeNestedMethod(); $break ./
+    
+    --18.8.4 Productions from 8.5: Static Initializers
+    
+    StaticInitializer ::=  StaticOnly Block
+    /.$putCase consumeStaticInitializer(); $break./
+    
+    StaticOnly ::= 'static'
+    /.$putCase consumeStaticOnly(); $break ./
+    
+    --18.8.5 Productions from 8.6: Constructor Declarations
+    --ConstructorModifier ::=
+    --      'public'
+    --    | 'protected'
+    --    | 'private'
+    --
+    --
+    ConstructorDeclaration ::= ConstructorHeader ConstructorBody
+    /.$putCase consumeConstructorDeclaration() ; $break ./ 
+    
+    -- These rules are added to be able to parse constructors with no body
+    ConstructorDeclaration ::= ConstructorHeader ';'
+    /.$putCase consumeInvalidConstructorDeclaration() ; $break ./ 
+    
+    -- the rules ExplicitConstructorInvocationopt has been expanded
+    -- in the rule below in order to make the grammar lalr(1).
+    -- ConstructorBody ::= '{' ExplicitConstructorInvocationopt BlockStatementsopt '}'
+    -- Other inlining has occured into the next rule too....
+    
+    ConstructorBody ::= NestedMethod  '{' ConstructorBlockStatementsopt '}'
+    /.$putCase consumeConstructorBody(); $break ./
+    
+    ConstructorBlockStatementsopt -> BlockStatementsopt
+    
+    ConstructorBlockStatementsopt -> ExplicitConstructorInvocation
+    
+    ConstructorBlockStatementsopt ::= ExplicitConstructorInvocation BlockStatements
+    /.$putCase  consumeConstructorBlockStatements(); $break ./
+    
+    ExplicitConstructorInvocation ::= 'this' '(' ArgumentListopt ')' ';'
+    /.$putCase consumeExplicitConstructorInvocation(0,ExplicitConstructorCall.This); $break ./
+    
+    ExplicitConstructorInvocation ::= 'super' '(' ArgumentListopt ')' ';'
+    /.$putCase consumeExplicitConstructorInvocation(0,ExplicitConstructorCall.Super); $break ./
+    
+    --1.1 feature
+    ExplicitConstructorInvocation ::= Primary '.' 'super' '(' ArgumentListopt ')' ';'
+    /.$putCase consumeExplicitConstructorInvocation(1, ExplicitConstructorCall.Super); $break ./
+    
+    --1.1 feature
+    ExplicitConstructorInvocation ::= Name '.' 'super' '(' ArgumentListopt ')' ';'
+    /.$putCase consumeExplicitConstructorInvocation(2, ExplicitConstructorCall.Super); $break ./
+    
+    --1.1 feature
+    ExplicitConstructorInvocation ::= Primary '.' 'this' '(' ArgumentListopt ')' ';'
+    /.$putCase consumeExplicitConstructorInvocation(1, ExplicitConstructorCall.This); $break ./
+    
+    --1.1 feature
+    ExplicitConstructorInvocation ::= Name '.' 'this' '(' ArgumentListopt ')' ';'
+    /.$putCase consumeExplicitConstructorInvocation(2, ExplicitConstructorCall.This); $break ./
+    
+    --18.9 Productions from 9: Interface Declarations
+    
+    --18.9.1 Productions from 9.1: Interface Declarations
+    --InterfaceModifier ::=
+    --      'public'
+    --    | 'abstract'
+    --
+    InterfaceDeclaration ::= InterfaceHeader InterfaceBody
+    /.$putCase consumeInterfaceDeclaration(); $break ./
+    
+    InterfaceHeader ::= InterfaceHeaderName InterfaceHeaderExtendsopt
+    /.$putCase consumeInterfaceHeader(); $break ./
+    
+    InterfaceHeaderName ::= Modifiersopt 'interface' 'Identifier'
+    /.$putCase consumeInterfaceHeaderName(); $break ./
+    
+    -- This rule will be used to accept inner local interface and then report a relevant error message
+    InvalidInterfaceDeclaration -> InterfaceHeader InterfaceBody
+    
+    InterfaceHeaderExtends ::= 'extends' InterfaceTypeList
+    /.$putCase consumeInterfaceHeaderExtends(); $break ./
+    
+    InterfaceBody ::= '{' InterfaceMemberDeclarationsopt '}' 
+    
+    InterfaceMemberDeclarations -> InterfaceMemberDeclaration
+    InterfaceMemberDeclarations ::= InterfaceMemberDeclarations InterfaceMemberDeclaration
+    /.$putCase consumeInterfaceMemberDeclarations(); $break ./
+    
+    --same as for class members
+    InterfaceMemberDeclaration ::= ';'
+    /.$putCase consumeEmptyInterfaceMemberDeclaration(); $break ./
+    
+    -- This rule is added to be able to parse non abstract method inside interface and then report a relevent error message
+    InvalidMethodDeclaration -> MethodHeader MethodBody
+    
+    InterfaceMemberDeclaration -> ConstantDeclaration
+    InterfaceMemberDeclaration ::= InvalidMethodDeclaration
+    /.$putCase ignoreMethodBody(); $break ./
+    
+    -- These rules are added to be able to parse constructors inside interface and then report a relevent error message
+    InvalidConstructorDeclaration ::= ConstructorHeader ConstructorBody
+    /.$putCase ignoreInvalidConstructorDeclaration(true);  $break ./
+    
+    InvalidConstructorDeclaration ::= ConstructorHeader ';'
+    /.$putCase ignoreInvalidConstructorDeclaration(false);  $break ./
+    
+    InterfaceMemberDeclaration -> AbstractMethodDeclaration
+    InterfaceMemberDeclaration -> InvalidConstructorDeclaration
+     
+    --1.1 feature
+    InterfaceMemberDeclaration -> ClassDeclaration
+    --1.1 feature
+    InterfaceMemberDeclaration -> InterfaceDeclaration
+    
+    ConstantDeclaration -> FieldDeclaration
+    
+    ArrayInitializer ::= '{' ,opt '}'
+    /.$putCase consumeEmptyArrayInitializer(); $break ./
+    ArrayInitializer ::= '{' VariableInitializers '}'
+    /.$putCase consumeArrayInitializer(); $break ./
+    ArrayInitializer ::= '{' VariableInitializers , '}'
+    /.$putCase consumeArrayInitializer(); $break ./
+    
+    VariableInitializers ::= VariableInitializer
+    VariableInitializers ::= VariableInitializers ',' VariableInitializer
+    /.$putCase consumeVariableInitializers(); $break ./
+    
+    Block ::= OpenBlock '{' BlockStatementsopt '}'
+    /.$putCase consumeBlock(); $break ./
+    OpenBlock ::= $empty
+    /.$putCase consumeOpenBlock() ; $break ./
+    
+    BlockStatements -> BlockStatement
+    BlockStatements ::= BlockStatements BlockStatement
+    /.$putCase consumeBlockStatements() ; $break ./
+    
+    BlockStatement -> LocalVariableDeclarationStatement
+    BlockStatement -> Statement
+    --1.1 feature
+    BlockStatement -> ClassDeclaration
+    BlockStatement ::= InvalidInterfaceDeclaration
+    /.$putCase ignoreInterfaceDeclaration(); $break ./
+    
+    LocalVariableDeclarationStatement ::= LocalVariableDeclaration ';'
+    /.$putCase consumeLocalVariableDeclarationStatement(); $break ./
+    
+    LocalVariableDeclaration ::= Type PushModifiers VariableDeclarators
+    /.$putCase consumeLocalVariableDeclaration(); $break ./
+    
+    -- 1.1 feature
+    -- The modifiers part of this rule makes the grammar more permissive. 
+    -- The only modifier here is final. We put Modifiers to allow multiple modifiers
+    -- This will require to check the validity of the modifier
+    
+    LocalVariableDeclaration ::= Modifiers Type PushModifiers VariableDeclarators
+    /.$putCase consumeLocalVariableDeclaration(); $break ./
+    
+    PushModifiers ::= $empty
+    /.$putCase consumePushModifiers(); $break ./
+    
+    Statement -> StatementWithoutTrailingSubstatement
+    Statement -> LabeledStatement
+    Statement -> IfThenStatement
+    Statement -> IfThenElseStatement
+    Statement -> WhileStatement
+    Statement -> ForStatement
+    
+    StatementNoShortIf -> StatementWithoutTrailingSubstatement
+    StatementNoShortIf -> LabeledStatementNoShortIf
+    StatementNoShortIf -> IfThenElseStatementNoShortIf
+    StatementNoShortIf -> WhileStatementNoShortIf
+    StatementNoShortIf -> ForStatementNoShortIf
+    
+    StatementWithoutTrailingSubstatement -> AssertStatement
+    StatementWithoutTrailingSubstatement -> Block
+    StatementWithoutTrailingSubstatement -> EmptyStatement
+    StatementWithoutTrailingSubstatement -> ExpressionStatement
+    StatementWithoutTrailingSubstatement -> SwitchStatement
+    StatementWithoutTrailingSubstatement -> DoStatement
+    StatementWithoutTrailingSubstatement -> BreakStatement
+    StatementWithoutTrailingSubstatement -> ContinueStatement
+    StatementWithoutTrailingSubstatement -> ReturnStatement
+    StatementWithoutTrailingSubstatement -> SynchronizedStatement
+    StatementWithoutTrailingSubstatement -> ThrowStatement
+    StatementWithoutTrailingSubstatement -> TryStatement
+    
+    EmptyStatement ::= ';'
+    /.$putCase consumeEmptyStatement(); $break ./
+    
+    LabeledStatement ::= 'Identifier' ':' Statement
+    /.$putCase consumeStatementLabel() ; $break ./
+    
+    LabeledStatementNoShortIf ::= 'Identifier' ':' StatementNoShortIf
+    /.$putCase consumeStatementLabel() ; $break ./
+    
+    ExpressionStatement ::= StatementExpression ';'
+    /. $putCase consumeExpressionStatement(); $break ./
+    
+    StatementExpression ::= Assignment
+    StatementExpression ::= PreIncrementExpression
+    StatementExpression ::= PreDecrementExpression
+    StatementExpression ::= PostIncrementExpression
+    StatementExpression ::= PostDecrementExpression
+    StatementExpression ::= MethodInvocation
+    StatementExpression ::= ClassInstanceCreationExpression
+    
+    IfThenStatement ::=  'if' '(' Expression ')' Statement
+    /.$putCase consumeStatementIfNoElse(); $break ./
+    
+    IfThenElseStatement ::=  'if' '(' Expression ')' StatementNoShortIf 'else' Statement
+    /.$putCase consumeStatementIfWithElse(); $break ./
+    
+    IfThenElseStatementNoShortIf ::=  'if' '(' Expression ')' StatementNoShortIf 'else' StatementNoShortIf
+    /.$putCase consumeStatementIfWithElse(); $break ./
+    
+    SwitchStatement ::= 'switch' OpenBlock '(' Expression ')' SwitchBlock
+    /.$putCase consumeStatementSwitch() ; $break ./
+    
+    SwitchBlock ::= '{' '}'
+    /.$putCase consumeEmptySwitchBlock() ; $break ./
+    
+    SwitchBlock ::= '{' SwitchBlockStatements '}'
+    SwitchBlock ::= '{' SwitchLabels '}'
+    SwitchBlock ::= '{' SwitchBlockStatements SwitchLabels '}'
+    /.$putCase consumeSwitchBlock() ; $break ./
+    
+    SwitchBlockStatements -> SwitchBlockStatement
+    SwitchBlockStatements ::= SwitchBlockStatements SwitchBlockStatement
+    /.$putCase consumeSwitchBlockStatements() ; $break ./
+    
+    SwitchBlockStatement ::= SwitchLabels BlockStatements
+    /.$putCase consumeSwitchBlockStatement() ; $break ./
+    
+    SwitchLabels -> SwitchLabel
+    SwitchLabels ::= SwitchLabels SwitchLabel
+    /.$putCase consumeSwitchLabels() ; $break ./
+    
+    SwitchLabel ::= 'case' ConstantExpression ':'
+    /. $putCase consumeCaseLabel(); $break ./
+    
+    SwitchLabel ::= 'default' ':'
+    /. $putCase consumeDefaultLabel(); $break ./
+    
+    WhileStatement ::= 'while' '(' Expression ')' Statement
+    /.$putCase consumeStatementWhile() ; $break ./
+    
+    WhileStatementNoShortIf ::= 'while' '(' Expression ')' StatementNoShortIf
+    /.$putCase consumeStatementWhile() ; $break ./
+    
+    DoStatement ::= 'do' Statement 'while' '(' Expression ')' ';'
+    /.$putCase consumeStatementDo() ; $break ./
+    
+    ForStatement ::= 'for' '(' ForInitopt ';' Expressionopt ';' ForUpdateopt ')' Statement
+    /.$putCase consumeStatementFor() ; $break ./
+    ForStatementNoShortIf ::= 'for' '(' ForInitopt ';' Expressionopt ';' ForUpdateopt ')' StatementNoShortIf
+    /.$putCase consumeStatementFor() ; $break ./
+    
+    --the minus one allows to avoid a stack-to-stack transfer
+    ForInit ::= StatementExpressionList
+    /.$putCase consumeForInit() ; $break ./
+    ForInit -> LocalVariableDeclaration
+    
+    ForUpdate -> StatementExpressionList
+    
+    StatementExpressionList -> StatementExpression
+    StatementExpressionList ::= StatementExpressionList ',' StatementExpression
+    /.$putCase consumeStatementExpressionList() ; $break ./
+    
+    -- 1.4 feature
+    AssertStatement ::= 'assert' Expression ';'
+    /.$putCase consumeSimpleAssertStatement() ; $break ./
+    
+    AssertStatement ::= 'assert' Expression ':' Expression ';'
+    /.$putCase consumeAssertStatement() ; $break ./
+              
+    BreakStatement ::= 'break' ';'
+    /.$putCase consumeStatementBreak() ; $break ./
+    
+    BreakStatement ::= 'break' Identifier ';'
+    /.$putCase consumeStatementBreakWithLabel() ; $break ./
+    
+    ContinueStatement ::= 'continue' ';'
+    /.$putCase consumeStatementContinue() ; $break ./
+    
+    ContinueStatement ::= 'continue' Identifier ';'
+    /.$putCase consumeStatementContinueWithLabel() ; $break ./
+    
+    ReturnStatement ::= 'return' Expressionopt ';'
+    /.$putCase consumeStatementReturn() ; $break ./
+    
+    ThrowStatement ::= 'throw' Expression ';'
+    /.$putCase consumeStatementThrow();
+    $break ./
+    
+    SynchronizedStatement ::= OnlySynchronized '(' Expression ')'    Block
+    /.$putCase consumeStatementSynchronized(); $break ./
+    OnlySynchronized ::= 'synchronized'
+    /.$putCase consumeOnlySynchronized(); $break ./
+    
+    
+    TryStatement ::= 'try'    Block Catches
+    /.$putCase consumeStatementTry(false); $break ./
+    TryStatement ::= 'try'    Block Catchesopt Finally
+    /.$putCase consumeStatementTry(true); $break ./
+    
+    Catches -> CatchClause
+    Catches ::= Catches CatchClause
+    /.$putCase consumeCatches(); $break ./
+    
+    CatchClause ::= 'catch' '(' FormalParameter ')'    Block
+    /.$putCase consumeStatementCatch() ; $break ./
+    
+    Finally ::= 'finally'    Block
+    
+    --18.12 Productions from 14: Expressions
+    
+    --for source positionning purpose
+    PushLPAREN ::= '('
+    /.$putCase consumeLeftParen(); $break ./
+    PushRPAREN ::= ')'
+    /.$putCase consumeRightParen(); $break ./
+    
+    Primary -> PrimaryNoNewArray
+    Primary -> ArrayCreationExpression
+    
+    PrimaryNoNewArray -> Literal
+    PrimaryNoNewArray ::= 'this'
+    /.$putCase consumePrimaryNoNewArrayThis(); $break ./
+    
+    PrimaryNoNewArray ::=  PushLPAREN Expression PushRPAREN 
+    /.$putCase consumePrimaryNoNewArray(); $break ./
+    
+    PrimaryNoNewArray -> ClassInstanceCreationExpression
+    PrimaryNoNewArray -> FieldAccess
+    --1.1 feature
+    PrimaryNoNewArray ::= Name '.' 'this'
+    /.$putCase consumePrimaryNoNewArrayNameThis(); $break ./
+    PrimaryNoNewArray ::= Name '.' 'super'
+    /.$putCase consumePrimaryNoNewArrayNameSuper(); $break ./
+    
+    --1.1 feature
+    --PrimaryNoNewArray ::= Type '.' 'class'   
+    --inline Type in the previous rule in order to make the grammar LL1 instead 
+    -- of LL2. The result is the 3 next rules.
+    PrimaryNoNewArray ::= Name '.' 'class'
+    /.$putCase consumePrimaryNoNewArrayName(); $break ./
+    
+    PrimaryNoNewArray ::= ArrayType '.' 'class'
+    /.$putCase consumePrimaryNoNewArrayArrayType(); $break ./
+    
+    PrimaryNoNewArray ::= PrimitiveType '.' 'class'
+    /.$putCase consumePrimaryNoNewArrayPrimitiveType(); $break ./
+    
+    PrimaryNoNewArray -> MethodInvocation
+    PrimaryNoNewArray -> ArrayAccess
+    
+    --1.1 feature
+    --
+    -- In Java 1.0 a ClassBody could not appear at all in a
+    -- ClassInstanceCreationExpression.
+    --
+    
+    AllocationHeader ::= 'new' ClassType '(' ArgumentListopt ')'
+    /.$putCase consumeAllocationHeader(); $break ./
+    
+    ClassInstanceCreationExpression ::= 'new' ClassType '(' ArgumentListopt ')' ClassBodyopt
+    /.$putCase consumeClassInstanceCreationExpression(); $break ./
+    --1.1 feature
+    
+    ClassInstanceCreationExpression ::= Primary '.' 'new' SimpleName '(' ArgumentListopt ')' ClassBodyopt
+    /.$putCase consumeClassInstanceCreationExpressionQualified() ; $break ./
+    
+    --1.1 feature
+    ClassInstanceCreationExpression ::= ClassInstanceCreationExpressionName 'new' SimpleName '(' ArgumentListopt ')' ClassBodyopt
+    /.$putCase consumeClassInstanceCreationExpressionQualified() ; $break ./
+    
+    ClassInstanceCreationExpressionName ::= Name '.'
+    /.$putCase consumeClassInstanceCreationExpressionName() ; $break ./
+    
+    ClassBodyopt ::= $empty --test made using null as contents
+    /.$putCase consumeClassBodyopt(); $break ./
+    ClassBodyopt ::= EnterAnonymousClassBody ClassBody
+    
+    EnterAnonymousClassBody ::= $empty
+    /.$putCase consumeEnterAnonymousClassBody(); $break ./
+    
+    ArgumentList ::= Expression
+    ArgumentList ::= ArgumentList ',' Expression
+    /.$putCase consumeArgumentList(); $break ./
+    
+    --Thess rules are re-written in order to be ll1 
+    --ArrayCreationExpression ::= 'new' ArrayType ArrayInitializer
+    --ArrayCreationExpression ::= 'new' PrimitiveType DimExprs Dimsopt 
+    --ArrayCreationExpression ::= 'new' ClassOrInterfaceType DimExprs Dimsopt
+    --DimExprs ::= DimExpr
+    --DimExprs ::= DimExprs DimExpr
+    
+    ArrayCreationExpression ::= 'new' PrimitiveType DimWithOrWithOutExprs ArrayInitializeropt
+    /.$putCase consumeArrayCreationExpression(); $break ./
+    ArrayCreationExpression ::= 'new' ClassOrInterfaceType DimWithOrWithOutExprs ArrayInitializeropt
+    /.$putCase consumeArrayCreationExpression(); $break ./
+    
+    DimWithOrWithOutExprs ::= DimWithOrWithOutExpr
+    DimWithOrWithOutExprs ::= DimWithOrWithOutExprs DimWithOrWithOutExpr
+    /.$putCase consumeDimWithOrWithOutExprs(); $break ./
+    
+    DimWithOrWithOutExpr ::= '[' Expression ']'
+    DimWithOrWithOutExpr ::= '[' ']'
+    /. $putCase consumeDimWithOrWithOutExpr(); $break ./
+    -- -----------------------------------------------
+    
+    Dims ::= DimsLoop
+    /. $putCase consumeDims(); $break ./
+    DimsLoop -> OneDimLoop
+    DimsLoop ::= DimsLoop OneDimLoop
+    OneDimLoop ::= '[' ']'
+    /. $putCase consumeOneDimLoop(); $break ./
+    
+    FieldAccess ::= Primary '.' 'Identifier'
+    /.$putCase consumeFieldAccess(false); $break ./
+    
+    FieldAccess ::= 'super' '.' 'Identifier'
+    /.$putCase consumeFieldAccess(true); $break ./
+    
+    MethodInvocation ::= Name '(' ArgumentListopt ')'
+    /.$putCase consumeMethodInvocationName(); $break ./
+    
+    MethodInvocation ::= Primary '.' 'Identifier' '(' ArgumentListopt ')'
+    /.$putCase consumeMethodInvocationPrimary(); $break ./
+    
+    MethodInvocation ::= 'super' '.' 'Identifier' '(' ArgumentListopt ')'
+    /.$putCase consumeMethodInvocationSuper(); $break ./
+    
+    ArrayAccess ::= Name '[' Expression ']'
+    /.$putCase consumeArrayAccess(true); $break ./
+    ArrayAccess ::= PrimaryNoNewArray '[' Expression ']'
+    /.$putCase consumeArrayAccess(false); $break ./
+    
+    PostfixExpression -> Primary
+    PostfixExpression ::= Name
+    /.$putCase consumePostfixExpression(); $break ./
+    PostfixExpression -> PostIncrementExpression
+    PostfixExpression -> PostDecrementExpression
+    
+    PostIncrementExpression ::= PostfixExpression '++'
+    /.$putCase consumeUnaryExpression(OperatorExpression.PLUS,true); $break ./
+    
+    PostDecrementExpression ::= PostfixExpression '--'
+    /.$putCase consumeUnaryExpression(OperatorExpression.MINUS,true); $break ./
+    
+    --for source managment purpose
+    PushPosition ::= $empty
+     /.$putCase consumePushPosition(); $break ./
+    
+    UnaryExpression -> PreIncrementExpression
+    UnaryExpression -> PreDecrementExpression
+    UnaryExpression ::= '+' PushPosition UnaryExpression
+    /.$putCase consumeUnaryExpression(OperatorExpression.PLUS); $break ./
+    UnaryExpression ::= '-' PushPosition UnaryExpression
+    /.$putCase consumeUnaryExpression(OperatorExpression.MINUS); $break ./
+    UnaryExpression -> UnaryExpressionNotPlusMinus
+    
+    PreIncrementExpression ::= '++' PushPosition UnaryExpression
+    /.$putCase consumeUnaryExpression(OperatorExpression.PLUS,false); $break ./
+    
+    PreDecrementExpression ::= '--' PushPosition UnaryExpression
+    /.$putCase consumeUnaryExpression(OperatorExpression.MINUS,false); $break ./
+    
+    UnaryExpressionNotPlusMinus -> PostfixExpression
+    UnaryExpressionNotPlusMinus ::= '~' PushPosition UnaryExpression
+    /.$putCase consumeUnaryExpression(OperatorExpression.TWIDDLE); $break ./
+    UnaryExpressionNotPlusMinus ::= '!' PushPosition UnaryExpression
+    /.$putCase consumeUnaryExpression(OperatorExpression.NOT); $break ./
+    UnaryExpressionNotPlusMinus -> CastExpression
+    
+    CastExpression ::= PushLPAREN PrimitiveType Dimsopt PushRPAREN UnaryExpression
+    /.$putCase consumeCastExpression(); $break ./
+     CastExpression ::= PushLPAREN Name Dims PushRPAREN UnaryExpressionNotPlusMinus
+    /.$putCase consumeCastExpression(); $break ./
+    -- Expression is here only in order to make the grammar LL1
+    CastExpression ::= PushLPAREN Expression PushRPAREN UnaryExpressionNotPlusMinus
+    /.$putCase consumeCastExpressionLL1(); $break ./
+    
+    MultiplicativeExpression -> UnaryExpression
+    MultiplicativeExpression ::= MultiplicativeExpression '*' UnaryExpression
+    /.$putCase consumeBinaryExpression(OperatorExpression.MULTIPLY); $break ./
+    MultiplicativeExpression ::= MultiplicativeExpression '/' UnaryExpression
+    /.$putCase consumeBinaryExpression(OperatorExpression.DIVIDE); $break ./
+    MultiplicativeExpression ::= MultiplicativeExpression '%' UnaryExpression
+    /.$putCase consumeBinaryExpression(OperatorExpression.REMAINDER); $break ./
+    
+    AdditiveExpression -> MultiplicativeExpression
+    AdditiveExpression ::= AdditiveExpression '+' MultiplicativeExpression
+    /.$putCase consumeBinaryExpression(OperatorExpression.PLUS); $break ./
+    AdditiveExpression ::= AdditiveExpression '-' MultiplicativeExpression
+    /.$putCase consumeBinaryExpression(OperatorExpression.MINUS); $break ./
+    
+    ShiftExpression -> AdditiveExpression
+    ShiftExpression ::= ShiftExpression '<<'  AdditiveExpression
+    /.$putCase consumeBinaryExpression(OperatorExpression.LEFT_SHIFT); $break ./
+    ShiftExpression ::= ShiftExpression '>>'  AdditiveExpression
+    /.$putCase consumeBinaryExpression(OperatorExpression.RIGHT_SHIFT); $break ./
+    ShiftExpression ::= ShiftExpression '>>>' AdditiveExpression
+    /.$putCase consumeBinaryExpression(OperatorExpression.UNSIGNED_RIGHT_SHIFT); $break ./
+    
+    RelationalExpression -> ShiftExpression
+    RelationalExpression ::= RelationalExpression '<'  ShiftExpression
+    /.$putCase consumeBinaryExpression(OperatorExpression.LESS); $break ./
+    RelationalExpression ::= RelationalExpression '>'  ShiftExpression
+    /.$putCase consumeBinaryExpression(OperatorExpression.GREATER); $break ./
+    RelationalExpression ::= RelationalExpression '<=' ShiftExpression
+    /.$putCase consumeBinaryExpression(OperatorExpression.LESS_EQUAL); $break ./
+    RelationalExpression ::= RelationalExpression '>=' ShiftExpression
+    /.$putCase consumeBinaryExpression(OperatorExpression.GREATER_EQUAL); $break ./
+    RelationalExpression ::= RelationalExpression 'instanceof' ReferenceType
+    /.$putCase consumeInstanceOfExpression(OperatorExpression.INSTANCEOF); $break ./
+    
+    EqualityExpression -> RelationalExpression
+    EqualityExpression ::= EqualityExpression '==' RelationalExpression
+    /.$putCase consumeEqualityExpression(OperatorExpression.EQUAL_EQUAL); $break ./
+    EqualityExpression ::= EqualityExpression '!=' RelationalExpression
+    /.$putCase consumeEqualityExpression(OperatorExpression.NOT_EQUAL); $break ./
+    
+    AndExpression -> EqualityExpression
+    AndExpression ::= AndExpression '&' EqualityExpression
+    /.$putCase consumeBinaryExpression(OperatorExpression.AND); $break ./
+    
+    ExclusiveOrExpression -> AndExpression
+    ExclusiveOrExpression ::= ExclusiveOrExpression '^' AndExpression
+    /.$putCase consumeBinaryExpression(OperatorExpression.XOR); $break ./
+    
+    InclusiveOrExpression -> ExclusiveOrExpression
+    InclusiveOrExpression ::= InclusiveOrExpression '|' ExclusiveOrExpression
+    /.$putCase consumeBinaryExpression(OperatorExpression.OR); $break ./
+    
+    ConditionalAndExpression -> InclusiveOrExpression
+    ConditionalAndExpression ::= ConditionalAndExpression '&&' InclusiveOrExpression
+    /.$putCase consumeBinaryExpression(OperatorExpression.AND_AND); $break ./
+    
+    ConditionalOrExpression -> ConditionalAndExpression
+    ConditionalOrExpression ::= ConditionalOrExpression '||' ConditionalAndExpression
+    /.$putCase consumeBinaryExpression(OperatorExpression.OR_OR); $break ./
+    
+    ConditionalExpression -> ConditionalOrExpression
+    ConditionalExpression ::= ConditionalOrExpression '?' Expression ':' ConditionalExpression
+    /.$putCase consumeConditionalExpression(OperatorExpression.QUESTIONCOLON) ; $break ./
+    
+    AssignmentExpression -> ConditionalExpression
+    AssignmentExpression -> Assignment
+    
+    Assignment ::= LeftHandSide AssignmentOperator AssignmentExpression
+    /.$putCase consumeAssignment(); $break ./
+    
+    -- this rule is added to parse an array initializer in a assigment and then report a syntax error knowing the exact senario
+    InvalidArrayInitializerAssignement ::= LeftHandSide AssignmentOperator ArrayInitializer
+    Assignment ::= InvalidArrayInitializerAssignement
+    /.$putcase ignoreExpressionAssignment();$break ./
+    
+    LeftHandSide ::= Name
+    /.$putCase consumeLeftHandSide(); $break ./
+    LeftHandSide -> FieldAccess
+    LeftHandSide -> ArrayAccess
+    
+    AssignmentOperator ::= '='
+    /.$putCase consumeAssignmentOperator(EQUAL); $break ./
+    AssignmentOperator ::= '*='
+    /.$putCase consumeAssignmentOperator(MULTIPLY); $break ./
+    AssignmentOperator ::= '/='
+    /.$putCase consumeAssignmentOperator(DIVIDE); $break ./
+    AssignmentOperator ::= '%='
+    /.$putCase consumeAssignmentOperator(REMAINDER); $break ./
+    AssignmentOperator ::= '+='
+    /.$putCase consumeAssignmentOperator(PLUS); $break ./
+    AssignmentOperator ::= '-='
+    /.$putCase consumeAssignmentOperator(MINUS); $break ./
+    AssignmentOperator ::= '<<='
+    /.$putCase consumeAssignmentOperator(LEFT_SHIFT); $break ./
+    AssignmentOperator ::= '>>='
+    /.$putCase consumeAssignmentOperator(RIGHT_SHIFT); $break ./
+    AssignmentOperator ::= '>>>='
+    /.$putCase consumeAssignmentOperator(UNSIGNED_RIGHT_SHIFT); $break ./
+    AssignmentOperator ::= '&='
+    /.$putCase consumeAssignmentOperator(AND); $break ./
+    AssignmentOperator ::= '^='
+    /.$putCase consumeAssignmentOperator(XOR); $break ./
+    AssignmentOperator ::= '|='
+    /.$putCase consumeAssignmentOperator(OR); $break ./
+    
+    Expression -> AssignmentExpression
+    
+    ConstantExpression -> Expression
+    
+    -- The following rules are for optional nonterminals.
+    --
+    
+    PackageDeclarationopt -> $empty 
+    PackageDeclarationopt -> PackageDeclaration
+    
+    ClassHeaderExtendsopt ::= $empty
+    ClassHeaderExtendsopt -> ClassHeaderExtends
+    
+    Expressionopt ::= $empty
+    /.$putCase consumeEmptyExpression(); $break ./
+    Expressionopt -> Expression
+    
+    
+    ---------------------------------------------------------------------------------------
+    --
+    -- The rules below are for optional terminal symbols.  An optional comma,
+    -- is only used in the context of an array initializer - It is a
+    -- "syntactic sugar" that otherwise serves no other purpose. By contrast,
+    -- an optional identifier is used in the definition of a break and 
+    -- continue statement. When the identifier does not appear, a NULL
+    -- is produced. When the identifier is present, the user should use the
+    -- corresponding TOKEN(i) method. See break statement as an example.
+    --
+    ---------------------------------------------------------------------------------------
+    
+    ,opt -> $empty
+    ,opt -> ,
+    
+    ImportDeclarationsopt ::= $empty
+    /.$putCase consumeEmptyImportDeclarationsopt(); $break ./
+    ImportDeclarationsopt ::= ImportDeclarations
+    /.$putCase consumeImportDeclarationsopt(); $break ./
+    
+    
+    TypeDeclarationsopt ::= $empty
+    /.$putCase consumeEmptyTypeDeclarationsopt(); $break ./
+    TypeDeclarationsopt ::= TypeDeclarations
+    /.$putCase consumeTypeDeclarationsopt(); $break ./
+    
+    ClassBodyDeclarationsopt ::= $empty
+    /.$putCase consumeEmptyClassBodyDeclarationsopt(); $break ./
+    ClassBodyDeclarationsopt ::= NestedType ClassBodyDeclarations
+    /.$putCase consumeClassBodyDeclarationsopt(); $break ./
+    
+    Modifiersopt ::= $empty 
+    /. $putCase consumeDefaultModifiers(); $break ./
+    Modifiersopt ::= Modifiers 
+    /.$putCase consumeModifiers(); $break ./ 
+    
+    BlockStatementsopt ::= $empty
+    /.$putCase consumeEmptyBlockStatementsopt(); $break ./
+    BlockStatementsopt -> BlockStatements
+    
+    Dimsopt ::= $empty
+    /. $putCase consumeEmptyDimsopt(); $break ./
+    Dimsopt -> Dims
+    
+    ArgumentListopt ::= $empty
+    /. $putCase consumeEmptyArgumentListopt(); $break ./
+    ArgumentListopt -> ArgumentList
+    
+    MethodHeaderThrowsClauseopt ::= $empty
+    MethodHeaderThrowsClauseopt -> MethodHeaderThrowsClause
+       
+    FormalParameterListopt ::= $empty
+    /.$putcase consumeFormalParameterListopt(); $break ./
+    FormalParameterListopt -> FormalParameterList
+    
+    ClassHeaderImplementsopt ::= $empty
+    ClassHeaderImplementsopt -> ClassHeaderImplements
+    
+    InterfaceMemberDeclarationsopt ::= $empty
+    /. $putCase consumeEmptyInterfaceMemberDeclarationsopt(); $break ./
+    InterfaceMemberDeclarationsopt ::= NestedType InterfaceMemberDeclarations
+    /. $putCase consumeInterfaceMemberDeclarationsopt(); $break ./
+    
+    NestedType ::= $empty 
+    /.$putCase consumeNestedType(); $break./
+    
+    ForInitopt ::= $empty
+    /. $putCase consumeEmptyForInitopt(); $break ./
+    ForInitopt -> ForInit
+    
+    ForUpdateopt ::= $empty
+    /. $putCase consumeEmptyForUpdateopt(); $break ./
+     ForUpdateopt -> ForUpdate
+    
+    InterfaceHeaderExtendsopt ::= $empty
+    InterfaceHeaderExtendsopt -> InterfaceHeaderExtends
+    
+    Catchesopt ::= $empty
+    /. $putCase consumeEmptyCatchesopt(); $break ./
+    Catchesopt -> Catches
+    
+    ArrayInitializeropt ::= $empty
+    /. $putCase consumeEmptyArrayInitializeropt(); $break ./
+    ArrayInitializeropt -> ArrayInitializer
+    
+    /. }
+    } ./
+    
+    ---------------------------------------------------------------------------------------
+    
+    $names
+    
+    -- BodyMarker ::= '"class Identifier { ... MethodHeader "'
+    
+    -- void ::= 'void'
+    
+    PLUS_PLUS ::=    '++'   
+    MINUS_MINUS ::=    '--'   
+    EQUAL_EQUAL ::=    '=='   
+    LESS_EQUAL ::=    '<='   
+    GREATER_EQUAL ::=    '>='   
+    NOT_EQUAL ::=    '!='   
+    LEFT_SHIFT ::=    '<<'   
+    RIGHT_SHIFT ::=    '>>'   
+    UNSIGNED_RIGHT_SHIFT ::=    '>>>'  
+    PLUS_EQUAL ::=    '+='   
+    MINUS_EQUAL ::=    '-='   
+    MULTIPLY_EQUAL ::=    '*='   
+    DIVIDE_EQUAL ::=    '/='   
+    AND_EQUAL ::=    '&='   
+    OR_EQUAL ::=    '|='   
+    XOR_EQUAL ::=    '^='   
+    REMAINDER_EQUAL ::=    '%='   
+    LEFT_SHIFT_EQUAL ::=    '<<='  
+    RIGHT_SHIFT_EQUAL ::=    '>>='  
+    UNSIGNED_RIGHT_SHIFT_EQUAL ::=    '>>>=' 
+    OR_OR ::=    '||'   
+    AND_AND ::=    '&&'   
+    
+    PLUS ::=    '+'    
+    MINUS ::=    '-'    
+    NOT ::=    '!'    
+    REMAINDER ::=    '%'    
+    XOR ::=    '^'    
+    AND ::=    '&'    
+    MULTIPLY ::=    '*'    
+    OR ::=    '|'    
+    TWIDDLE ::=    '~'    
+    DIVIDE ::=    '/'    
+    GREATER ::=    '>'    
+    LESS ::=    '<'    
+    LPAREN ::=    '('    
+    RPAREN ::=    ')'    
+    LBRACE ::=    '{'    
+    RBRACE ::=    '}'    
+    LBRACKET ::=    '['    
+    RBRACKET ::=    ']'    
+    SEMICOLON ::=    ';'    
+    QUESTION ::=    '?'    
+    COLON ::=    ':'    
+    COMMA ::=    ','    
+    DOT ::=    '.'    
+    EQUAL ::=    '='    
+    
+    $end
+    -- need a carriage return after the $end
+    */
+  }
+  protected void ignoreExpressionAssignment() {
+    // Assignment ::= InvalidArrayInitializerAssignement
+    // encoded operator would be: intStack[intPtr]
+    intPtr--;
+    ArrayInitializer arrayInitializer = (ArrayInitializer) expressionStack[expressionPtr--];
+    expressionLengthPtr--;
+    // report a syntax error and abort parsing
+    problemReporter().arrayConstantsOnlyInArrayInitializers(arrayInitializer.sourceStart, arrayInitializer.sourceEnd);
+  }
+  protected void ignoreInterfaceDeclaration() {
+    // BlockStatement ::= InvalidInterfaceDeclaration
+    //InterfaceDeclaration ::= Modifiersopt 'interface' 'Identifier' ExtendsInterfacesopt InterfaceHeader InterfaceBody
+
+    // length declarations
+    int length;
+    if ((length = astLengthStack[astLengthPtr--]) != 0) {
+      //there are length declarations
+      //dispatch according to the type of the declarations
+      dispatchDeclarationInto(length);
+    }
+
+    flushAnnotationsDefinedPriorTo(endStatementPosition);
+
+    // report the problem and continue parsing
+    TypeDeclaration typeDecl = (TypeDeclaration) astStack[astPtr];
+    typeDecl.bodyEnd = endStatementPosition;
+    problemReporter().cannotDeclareLocalInterface(typeDecl.name, typeDecl.sourceStart, typeDecl.sourceEnd);
+
+    // mark fields and initializer with local type mark if needed
+    markFieldsWithLocalType(typeDecl);
+
+    // remove the ast node created in interface header
+    astPtr--;
+    // Don't create an astnode for this inner interface, but have to push
+    // a 0 on the astLengthStack to be consistent with the reduction made
+    // at the end of the method:
+    // public void parse(MethodDeclaration md, CompilationUnitDeclaration unit)
+    pushOnAstLengthStack(0);
+  }
+  protected void ignoreInvalidConstructorDeclaration(boolean hasBody) {
+    // InvalidConstructorDeclaration ::= ConstructorHeader ConstructorBody ==> true
+    // InvalidConstructorDeclaration ::= ConstructorHeader ';' ==> false
+
+    /*
+    astStack : modifiers arguments throws statements
+    identifierStack : name
+     ==>
+    astStack : MethodDeclaration
+    identifierStack :
+    */
+
+    //must provide a default constructor call when needed
+
+    if (hasBody) {
+      // pop the position of the {  (body of the method) pushed in block decl
+      intPtr--;
+    }
+
+    //statements
+    if (hasBody) {
+      realBlockPtr--;
+    }
+
+    int length;
+    if (hasBody && ((length = astLengthStack[astLengthPtr--]) != 0)) {
+      astPtr -= length;
+    }
+  }
+  protected void ignoreMethodBody() {
+    // InterfaceMemberDeclaration ::= InvalidMethodDeclaration
+
+    /*
+    astStack : modifiers arguments throws statements
+    identifierStack : type name
+    intStack : dim dim dim
+     ==>
+    astStack : MethodDeclaration
+    identifierStack :
+    intStack : 
+    */
+
+    // pop the position of the {  (body of the method) pushed in block decl
+    intPtr--;
+    // retrieve end position of method declarator
+
+    //statements
+    realBlockPtr--;
+    int length;
+    if ((length = astLengthStack[astLengthPtr--]) != 0) {
+      astPtr -= length;
+    }
+
+    //watch for } that could be given as a unicode ! ( u007D is '}' )
+    MethodDeclaration md = (MethodDeclaration) astStack[astPtr];
+    md.bodyEnd = endPosition;
+    md.declarationSourceEnd = flushAnnotationsDefinedPriorTo(endStatementPosition);
+
+    // report the problem and continue the parsing - narrowing the problem onto the method
+    problemReporter().abstractMethodNeedingNoBody(md);
+  }
+  public void initialize() {
+    //positionning the parser for a new compilation unit
+    //avoiding stack reallocation and all that....
+    astPtr = -1;
+    astLengthPtr = -1;
+    expressionPtr = -1;
+    expressionLengthPtr = -1;
+    identifierPtr = -1;
+    identifierLengthPtr = -1;
+    intPtr = -1;
+    nestedMethod[nestedType = 0] = 0; // need to reset for further reuse
+    variablesCounter[nestedType] = 0;
+    dimensions = 0;
+    realBlockPtr = -1;
+    compilationUnit = null;
+    referenceContext = null;
+    endStatementPosition = 0;
+
+    //remove objects from stack too, while the same parser/compiler couple is
+    //re-used between two compilations ....
+
+    int astLength = astStack.length;
+    if (noAstNodes.length < astLength) {
+      noAstNodes = new AstNode[astLength];
+      //System.out.println("Resized AST stacks : "+ astLength);
+
+    }
+    System.arraycopy(noAstNodes, 0, astStack, 0, astLength);
+
+    int expressionLength = expressionStack.length;
+    if (noExpressions.length < expressionLength) {
+      noExpressions = new Expression[expressionLength];
+      //System.out.println("Resized EXPR stacks : "+ expressionLength);
+    }
+    System.arraycopy(noExpressions, 0, expressionStack, 0, expressionLength);
+
+    // reset scanner state
+    scanner.commentPtr = -1;
+    scanner.eofPosition = Integer.MAX_VALUE;
+
+    resetModifiers();
+
+    // recovery
+    lastCheckPoint = -1;
+    currentElement = null;
+    restartRecovery = false;
+    hasReportedError = false;
+    recoveredStaticInitializerStart = 0;
+    lastIgnoredToken = -1;
+    lastErrorEndPosition = -1;
+    listLength = 0;
+  }
+  public void initializeScanner() {
+    this.scanner =
+      new Scanner(
+        false,
+        false,
+        this.problemReporter.options.getNonExternalizedStringLiteralSeverity() != ProblemSeverities.Ignore,
+        this.assertMode);
+  }
+  public final static void initTables() throws java.io.IOException {
+
+    final String prefix = FILEPREFIX;
+    int i = 0;
+    lhs = readTable(prefix + (++i) + ".rsc"); //$NON-NLS-1$
+    char[] chars = readTable(prefix + (++i) + ".rsc"); //$NON-NLS-1$
+    check_table = new short[chars.length];
+    for (int c = chars.length; c-- > 0;) {
+      check_table[c] = (short) (chars[c] - 32768);
+    }
+    asb = readTable(prefix + (++i) + ".rsc"); //$NON-NLS-1$
+    asr = readTable(prefix + (++i) + ".rsc"); //$NON-NLS-1$
+    symbol_index = readTable(prefix + (++i) + ".rsc"); //$NON-NLS-1$
+    action = lhs;
+  }
+  public final void jumpOverMethodBody() {
+    //on diet parsing.....do not buffer method statements
+
+    //the scanner.diet is reinitialized to false
+    //automatically by the scanner once it has jumped over
+    //the statements
+
+    if (diet && (dietInt == 0))
+      scanner.diet = true;
+  }
+  protected void markCurrentMethodWithLocalType() {
+    if (this.currentElement != null)
+      return; // this is already done in the recovery code
+    for (int i = this.astPtr; i >= 0; i--) {
+      AstNode node = this.astStack[i];
+      if (node instanceof AbstractMethodDeclaration
+        || node instanceof TypeDeclaration) { // mark type for now: all fields will be marked when added to this type
+        node.bits |= AstNode.HasLocalTypeMASK;
+        return;
+      }
+    }
+    // default to reference context (case of parse method body)
+    if (this.referenceContext instanceof AbstractMethodDeclaration || this.referenceContext instanceof TypeDeclaration) {
+      ((AstNode) this.referenceContext).bits |= AstNode.HasLocalTypeMASK;
+    }
+  }
+  protected void markFieldsWithLocalType(TypeDeclaration type) {
+    if (type.fields == null || (type.bits & AstNode.HasLocalTypeMASK) == 0)
+      return;
+    for (int i = 0, length = type.fields.length; i < length; i++) {
+      type.fields[i].bits |= AstNode.HasLocalTypeMASK;
+    }
+  }
+  /*
+   * Move checkpoint location (current implementation is moving it by one token)
+   *
+   * Answers true if successfully moved checkpoint (i.e. did not attempt to move it
+   * beyond end of file).
+   */
+  protected boolean moveRecoveryCheckpoint() {
+
+    int pos = lastCheckPoint;
+    /* reset scanner, and move checkpoint by one token */
+    scanner.startPosition = pos;
+    scanner.currentPosition = pos;
+    scanner.diet = false; // quit jumping over method bodies
+
+    /* if about to restart, then no need to shift token */
+    if (restartRecovery) {
+      lastIgnoredToken = -1;
+      return true;
+    }
+
+    /* protect against shifting on an invalid token */
+    lastIgnoredToken = nextIgnoredToken;
+    nextIgnoredToken = -1;
+    do {
+      try {
+        nextIgnoredToken = scanner.getNextToken();
+        if (scanner.currentPosition == scanner.startPosition) {
+          scanner.currentPosition++; // on fake completion identifier
+          nextIgnoredToken = -1;
+        }
+
+      } catch (InvalidInputException e) {
+        pos = scanner.currentPosition;
+      }
+    } while (nextIgnoredToken < 0);
+
+    if (nextIgnoredToken == TokenNameEOF) { // no more recovery after this point
+      if (currentToken == TokenNameEOF) { // already tried one iteration on EOF
+        return false;
+      }
+    }
+    lastCheckPoint = scanner.currentPosition;
+
+    /* reset scanner again to previous checkpoint location*/
+    scanner.startPosition = pos;
+    scanner.currentPosition = pos;
+    scanner.commentPtr = -1;
+
+    return true;
+
+    /*
+       The following implementation moves the checkpoint location by one line:
+        
+       int pos = lastCheckPoint;
+       // reset scanner, and move checkpoint by one token
+       scanner.startPosition = pos;
+       scanner.currentPosition = pos;
+       scanner.diet = false; // quit jumping over method bodies
+       
+       // if about to restart, then no need to shift token
+       if (restartRecovery){
+               lastIgnoredToken = -1;
+               return true;
+       }
+       
+       // protect against shifting on an invalid token
+       lastIgnoredToken = nextIgnoredToken;
+       nextIgnoredToken = -1;
+       
+       boolean wasTokenizingWhiteSpace = scanner.tokenizeWhiteSpace;
+       scanner.tokenizeWhiteSpace = true;
+       checkpointMove: 
+               do {
+                       try {
+                               nextIgnoredToken = scanner.getNextToken();
+                               switch(nextIgnoredToken){
+                                       case Scanner.TokenNameWHITESPACE :
+                                               if(scanner.getLineNumber(scanner.startPosition)
+                                                       == scanner.getLineNumber(scanner.currentPosition)){
+                                                       nextIgnoredToken = -1;
+                                                       }
+                                               break;
+                                       case TokenNameSEMICOLON :
+                                       case TokenNameLBRACE :
+                                       case TokenNameRBRACE :
+                                               break;
+                                       case TokenNameIdentifier :
+                                               if(scanner.currentPosition == scanner.startPosition){
+                                                       scanner.currentPosition++; // on fake completion identifier
+                                               }
+                                       default:                                                
+                                               nextIgnoredToken = -1;
+                                               break;
+                                       case TokenNameEOF :
+                                               break checkpointMove;
+                               }
+                       } catch(InvalidInputException e){
+                               pos = scanner.currentPosition;
+                       }
+               } while (nextIgnoredToken < 0);
+       scanner.tokenizeWhiteSpace = wasTokenizingWhiteSpace;
+       
+       if (nextIgnoredToken == TokenNameEOF) { // no more recovery after this point
+               if (currentToken == TokenNameEOF) { // already tried one iteration on EOF
+                       return false;
+               }
+       }
+       lastCheckPoint = scanner.currentPosition;
+       
+       // reset scanner again to previous checkpoint location
+       scanner.startPosition = pos;
+       scanner.currentPosition = pos;
+       scanner.commentPtr = -1;
+    
+       return true;
+    */
+  }
+  protected MessageSend newMessageSend() {
+    // '(' ArgumentListopt ')'
+    // the arguments are on the expression stack
+
+    MessageSend m = new MessageSend();
+    int length;
+    if ((length = expressionLengthStack[expressionLengthPtr--]) != 0) {
+      expressionPtr -= length;
+      System.arraycopy(expressionStack, expressionPtr + 1, m.arguments = new Expression[length], 0, length);
+    };
+    return m;
+  }
+  protected static int ntAction(int state, int sym) {
+    return action[state + sym];
+  }
+  private final void optimizedConcatNodeLists() {
+    /*back from a recursive loop. Virtualy group the
+    astNode into an array using astLengthStack*/
+
+    /*
+     * This is a case where you have two sublists into the astStack that you want
+     * to merge in one list. There is no action required on the astStack. The only
+     * thing you need to do is merge the two lengths specified on the astStackLength.
+     * The top two length are for example:
+     * ... p   n
+     * and you want to result in a list like:
+     * ... n+p 
+     * This means that the p could be equals to 0 in case there is no astNode pushed
+     * on the astStack.
+     * Look at the InterfaceMemberDeclarations for an example.
+     * This case optimizes the fact that p == 1.
+     */
+
+    astLengthStack[--astLengthPtr]++;
+  }
+  protected static int original_state(int state) {
+    return -check(state);
+  }
+  /*main loop of the automat
+  When a rule is reduced, the method consumeRule(int) is called with the number
+  of the consumed rule. When a terminal is consumed, the method consumeToken(int) is 
+  called in order to remember (when needed) the consumed token */
+  // (int)asr[asi(act)]
+  // name[symbol_index[currentKind]]
+  protected void parse() {
+
+    hasReportedError = false;
+    int act = START_STATE;
+    stateStackTop = -1;
+    currentToken = getFirstToken();
+    ProcessTerminals : for (;;) {
+      try {
+        stack[++stateStackTop] = act;
+      } catch (IndexOutOfBoundsException e) {
+        int oldStackLength = stack.length;
+        int oldStack[] = stack;
+        stack = new int[oldStackLength + StackIncrement];
+        System.arraycopy(oldStack, 0, stack, 0, oldStackLength);
+        stack[stateStackTop] = act;
+      };
+
+      act = tAction(act, currentToken);
+
+      if (act == ERROR_ACTION || restartRecovery) {
+        int errorPos = scanner.currentPosition;
+        if (!hasReportedError) {
+          this.reportSyntaxError(ERROR_ACTION, currentToken, stateStackTop);
+          hasReportedError = true;
+        }
+        if (resumeOnSyntaxError()) {
+          if (act == ERROR_ACTION)
+            lastErrorEndPosition = errorPos;
+          act = START_STATE;
+          stateStackTop = -1;
+          currentToken = getFirstToken();
+          continue ProcessTerminals;
+        } else {
+          act = ERROR_ACTION;
+        }
+        break ProcessTerminals;
+      }
+      if (act <= NUM_RULES)
+        stateStackTop--;
+      else if (act > ERROR_ACTION) { /* shift-reduce */
+        consumeToken(currentToken);
+        if (currentElement != null)
+          this.recoveryTokenCheck();
+        try {
+          currentToken = scanner.getNextToken();
+        } catch (InvalidInputException e) {
+          if (!hasReportedError) {
+            this.problemReporter().scannerError(this, e.getMessage());
+            hasReportedError = true;
+          }
+          lastCheckPoint = scanner.currentPosition;
+          restartRecovery = true;
+        }
+        act -= ERROR_ACTION;
+      } else if (act < ACCEPT_ACTION) { /* shift */
+        consumeToken(currentToken);
+        if (currentElement != null)
+          this.recoveryTokenCheck();
+        try {
+          currentToken = scanner.getNextToken();
+        } catch (InvalidInputException e) {
+          if (!hasReportedError) {
+            this.problemReporter().scannerError(this, e.getMessage());
+            hasReportedError = true;
+          }
+          lastCheckPoint = scanner.currentPosition;
+          restartRecovery = true;
+        }
+        continue ProcessTerminals;
+      } else
+        break ProcessTerminals;
+
+      ProcessNonTerminals : do { /* reduce */
+        consumeRule(act);
+        stateStackTop -= (rhs[act] - 1);
+        act = ntAction(stack[stateStackTop], lhs[act]);
+      } while (act <= NUM_RULES);
+    }
+    endParse(act);
+  }
+  // A P I
+
+  public void parse(ConstructorDeclaration cd, CompilationUnitDeclaration unit) {
+    //only parse the method body of cd
+    //fill out its statements
+
+    //convert bugs into parse error
+
+    initialize();
+    goForConstructorBody();
+    nestedMethod[nestedType]++;
+
+    referenceContext = cd;
+    compilationUnit = unit;
+
+    scanner.resetTo(cd.sourceEnd + 1, cd.declarationSourceEnd);
+    try {
+      parse();
+    } catch (AbortCompilation ex) {
+      lastAct = ERROR_ACTION;
+    } finally {
+      nestedMethod[nestedType]--;
+    }
+
+    if (lastAct == ERROR_ACTION) {
+      initialize();
+      return;
+    }
+
+    //statements
+    cd.explicitDeclarations = realBlockStack[realBlockPtr--];
+    int length;
+    if ((length = astLengthStack[astLengthPtr--]) != 0) {
+      astPtr -= length;
+      if (astStack[astPtr + 1] instanceof ExplicitConstructorCall)
+        //avoid a isSomeThing that would only be used here BUT what is faster between two alternatives ?
+        {
+        System.arraycopy(astStack, astPtr + 2, cd.statements = new Statement[length - 1], 0, length - 1);
+        cd.constructorCall = (ExplicitConstructorCall) astStack[astPtr + 1];
+      } else { //need to add explicitly the super();
+        System.arraycopy(astStack, astPtr + 1, cd.statements = new Statement[length], 0, length);
+        cd.constructorCall = SuperReference.implicitSuperConstructorCall();
+      }
+    } else {
+      cd.constructorCall = SuperReference.implicitSuperConstructorCall();
+    }
+
+    if (cd.constructorCall.sourceEnd == 0) {
+      cd.constructorCall.sourceEnd = cd.sourceEnd;
+      cd.constructorCall.sourceStart = cd.sourceStart;
+    }
+  }
+  // A P I
+
+  public void parse(Initializer ini, TypeDeclaration type, CompilationUnitDeclaration unit) {
+    //only parse the method body of md
+    //fill out method statements
+
+    //convert bugs into parse error
+
+    initialize();
+    goForInitializer();
+    nestedMethod[nestedType]++;
+
+    referenceContext = type;
+    compilationUnit = unit;
+
+    scanner.resetTo(ini.sourceStart, ini.sourceEnd); // just on the beginning {
+    try {
+      parse();
+    } catch (AbortCompilation ex) {
+      lastAct = ERROR_ACTION;
+    } finally {
+      nestedMethod[nestedType]--;
+    }
+
+    if (lastAct == ERROR_ACTION) {
+      return;
+    }
+
+    ini.block = ((Initializer) astStack[astPtr]).block;
+
+    // mark initializer with local type if one was found during parsing
+    if ((type.bits & AstNode.HasLocalTypeMASK) != 0) {
+      ini.bits |= AstNode.HasLocalTypeMASK;
+    }
+  }
+  // A P I
+
+  public void parse(MethodDeclaration md, CompilationUnitDeclaration unit) {
+    //only parse the method body of md
+    //fill out method statements
+
+    //convert bugs into parse error
+
+    if (md.isAbstract())
+      return;
+    if (md.isNative())
+      return;
+    if ((md.modifiers & AccSemicolonBody) != 0)
+      return;
+
+    initialize();
+    goForMethodBody();
+    nestedMethod[nestedType]++;
+
+    referenceContext = md;
+    compilationUnit = unit;
+
+    scanner.resetTo(md.sourceEnd + 1, md.declarationSourceEnd);
+    // reset the scanner to parser from { down to }
+    try {
+      parse();
+    } catch (AbortCompilation ex) {
+      lastAct = ERROR_ACTION;
+    } finally {
+      nestedMethod[nestedType]--;
+    }
+
+    if (lastAct == ERROR_ACTION) {
+      return;
+    }
+
+    //refill statements
+    md.explicitDeclarations = realBlockStack[realBlockPtr--];
+    int length;
+    if ((length = astLengthStack[astLengthPtr--]) != 0)
+      System.arraycopy(astStack, (astPtr -= length) + 1, md.statements = new Statement[length], 0, length);
+  }
+  // A P I
+
+  public CompilationUnitDeclaration parse(ICompilationUnit sourceUnit, CompilationResult compilationResult) {
+    // parses a compilation unit and manages error handling (even bugs....)
+
+    CompilationUnitDeclaration unit;
+    try {
+      /* automaton initialization */
+      initialize();
+      goForCompilationUnit();
+
+      /* scanner initialization */
+      scanner.setSource(sourceUnit.getContents());
+
+      /* unit creation */
+      referenceContext =
+        compilationUnit = new CompilationUnitDeclaration(problemReporter, compilationResult, scanner.source.length);
+      /* run automaton */
+      parse();
+    } finally {
+      unit = compilationUnit;
+      compilationUnit = null; // reset parser
+    }
+    return unit;
+  }
+  // A P I
+
+  public CompilationUnitDeclaration parse(ICompilationUnit sourceUnit, CompilationResult compilationResult, int start, int end) {
+    // parses a compilation unit and manages error handling (even bugs....)
+
+    CompilationUnitDeclaration unit;
+    try {
+      /* automaton initialization */
+      initialize();
+      goForCompilationUnit();
+
+      /* scanner initialization */
+      scanner.setSource(sourceUnit.getContents());
+      scanner.resetTo(start, end);
+      /* unit creation */
+      referenceContext =
+        compilationUnit = new CompilationUnitDeclaration(problemReporter, compilationResult, scanner.source.length);
+      /* run automaton */
+      parse();
+    } finally {
+      unit = compilationUnit;
+      compilationUnit = null; // reset parser
+    }
+    return unit;
+  }
+  /**
+   * Returns this parser's problem reporter initialized with its reference context.
+   * Also it is assumed that a problem is going to be reported, so initializes
+   * the compilation result's line positions.
+   */
+  public ProblemReporter problemReporter() {
+    if (scanner.recordLineSeparator) {
+      compilationUnit.compilationResult.lineSeparatorPositions = scanner.getLineEnds();
+    }
+    problemReporter.referenceContext = referenceContext;
+    return problemReporter;
+  }
+  protected void pushIdentifier() {
+    /*push the consumeToken on the identifier stack.
+    Increase the total number of identifier in the stack.
+    identifierPtr points on the next top */
+
+    try {
+      identifierStack[++identifierPtr] = scanner.getCurrentIdentifierSource();
+      identifierPositionStack[identifierPtr] = (((long) scanner.startPosition) << 32) + (scanner.currentPosition - 1);
+    } catch (IndexOutOfBoundsException e) {
+      /*---stack reallaocation (identifierPtr is correct)---*/
+      int oldStackLength = identifierStack.length;
+      char[][] oldStack = identifierStack;
+      identifierStack = new char[oldStackLength + 20][];
+      System.arraycopy(oldStack, 0, identifierStack, 0, oldStackLength);
+      identifierStack[identifierPtr] = scanner.getCurrentTokenSource();
+      /*identifier position stack*/
+      long[] oldPos = identifierPositionStack;
+      identifierPositionStack = new long[oldStackLength + 20];
+      System.arraycopy(oldPos, 0, identifierPositionStack, 0, oldStackLength);
+      identifierPositionStack[identifierPtr] = (((long) scanner.startPosition) << 32) + (scanner.currentPosition - 1);
+    };
+
+    try {
+      identifierLengthStack[++identifierLengthPtr] = 1;
+    } catch (IndexOutOfBoundsException e) {
+      /*---stack reallocation (identifierLengthPtr is correct)---*/
+      int oldStackLength = identifierLengthStack.length;
+      int oldStack[] = identifierLengthStack;
+      identifierLengthStack = new int[oldStackLength + 10];
+      System.arraycopy(oldStack, 0, identifierLengthStack, 0, oldStackLength);
+      identifierLengthStack[identifierLengthPtr] = 1;
+    };
+
+  }
+  protected void pushIdentifier(int flag) {
+    /*push a special flag on the stack :
+    -zero stands for optional Name
+    -negative number for direct ref to base types.
+    identifierLengthPtr points on the top */
+
+    try {
+      identifierLengthStack[++identifierLengthPtr] = flag;
+    } catch (IndexOutOfBoundsException e) {
+      /*---stack reallaocation (identifierLengthPtr is correct)---*/
+      int oldStackLength = identifierLengthStack.length;
+      int oldStack[] = identifierLengthStack;
+      identifierLengthStack = new int[oldStackLength + 10];
+      System.arraycopy(oldStack, 0, identifierLengthStack, 0, oldStackLength);
+      identifierLengthStack[identifierLengthPtr] = flag;
+    };
+
+  }
+  protected void pushOnAstLengthStack(int pos) {
+    try {
+      astLengthStack[++astLengthPtr] = pos;
+    } catch (IndexOutOfBoundsException e) {
+      int oldStackLength = astLengthStack.length;
+      int[] oldPos = astLengthStack;
+      astLengthStack = new int[oldStackLength + StackIncrement];
+      System.arraycopy(oldPos, 0, astLengthStack, 0, oldStackLength);
+      astLengthStack[astLengthPtr] = pos;
+    }
+  }
+  protected void pushOnAstStack(AstNode node) {
+    /*add a new obj on top of the ast stack
+    astPtr points on the top*/
+
+    try {
+      astStack[++astPtr] = node;
+    } catch (IndexOutOfBoundsException e) {
+      int oldStackLength = astStack.length;
+      AstNode[] oldStack = astStack;
+      astStack = new AstNode[oldStackLength + AstStackIncrement];
+      System.arraycopy(oldStack, 0, astStack, 0, oldStackLength);
+      astPtr = oldStackLength;
+      astStack[astPtr] = node;
+    }
+
+    try {
+      astLengthStack[++astLengthPtr] = 1;
+    } catch (IndexOutOfBoundsException e) {
+      int oldStackLength = astLengthStack.length;
+      int[] oldPos = astLengthStack;
+      astLengthStack = new int[oldStackLength + AstStackIncrement];
+      System.arraycopy(oldPos, 0, astLengthStack, 0, oldStackLength);
+      astLengthStack[astLengthPtr] = 1;
+    }
+  }
+  protected void pushOnExpressionStack(Expression expr) {
+
+    try {
+      expressionStack[++expressionPtr] = expr;
+    } catch (IndexOutOfBoundsException e) {
+      //expressionPtr is correct 
+      int oldStackLength = expressionStack.length;
+      Expression[] oldStack = expressionStack;
+      expressionStack = new Expression[oldStackLength + ExpressionStackIncrement];
+      System.arraycopy(oldStack, 0, expressionStack, 0, oldStackLength);
+      expressionStack[expressionPtr] = expr;
+    }
+
+    try {
+      expressionLengthStack[++expressionLengthPtr] = 1;
+    } catch (IndexOutOfBoundsException e) {
+      int oldStackLength = expressionLengthStack.length;
+      int[] oldPos = expressionLengthStack;
+      expressionLengthStack = new int[oldStackLength + ExpressionStackIncrement];
+      System.arraycopy(oldPos, 0, expressionLengthStack, 0, oldStackLength);
+      expressionLengthStack[expressionLengthPtr] = 1;
+    }
+  }
+  protected void pushOnExpressionStackLengthStack(int pos) {
+    try {
+      expressionLengthStack[++expressionLengthPtr] = pos;
+    } catch (IndexOutOfBoundsException e) {
+      int oldStackLength = expressionLengthStack.length;
+      int[] oldPos = expressionLengthStack;
+      expressionLengthStack = new int[oldStackLength + StackIncrement];
+      System.arraycopy(oldPos, 0, expressionLengthStack, 0, oldStackLength);
+      expressionLengthStack[expressionLengthPtr] = pos;
+    }
+  }
+  protected void pushOnIntStack(int pos) {
+
+    try {
+      intStack[++intPtr] = pos;
+    } catch (IndexOutOfBoundsException e) {
+      //intPtr is correct 
+      int oldStackLength = intStack.length;
+      int oldStack[] = intStack;
+      intStack = new int[oldStackLength + StackIncrement];
+      System.arraycopy(oldStack, 0, intStack, 0, oldStackLength);
+      intStack[intPtr] = pos;
+    }
+  }
+  protected static char[] readTable(String filename) throws java.io.IOException {
+
+    //files are located at Parser.class directory
+
+    InputStream stream = new BufferedInputStream(Parser.class.getResourceAsStream(filename));
+    if (stream == null) {
+      throw new java.io.IOException(Util.bind("parser.missingFile", filename)); //$NON-NLS-1$
+    }
+    byte[] bytes = null;
+    try {
+      bytes = Util.getInputStreamAsByteArray(stream, -1);
+    } finally {
+      try {
+        stream.close();
+      } catch (IOException e) {
+      }
+    }
+
+    //minimal integrity check (even size expected)
+    int length = bytes.length;
+    if (length % 2 != 0)
+      throw new java.io.IOException(Util.bind("parser.corruptedFile", filename)); //$NON-NLS-1$
+
+    // convert bytes into chars
+    char[] chars = new char[length / 2];
+    int i = 0;
+    int charIndex = 0;
+
+    while (true) {
+      chars[charIndex++] = (char) (((bytes[i++] & 0xFF) << 8) + (bytes[i++] & 0xFF));
+      if (i == length)
+        break;
+    }
+    return chars;
+  }
+  /* Token check performed on every token shift once having entered
+   * recovery mode.
+   */
+  public void recoveryTokenCheck() {
+    switch (currentToken) {
+      case TokenNameLBRACE :
+        {
+          RecoveredElement newElement = currentElement.updateOnOpeningBrace(scanner.currentPosition - 1);
+          lastCheckPoint = scanner.currentPosition;
+          if (newElement != null) { // null means nothing happened
+            restartRecovery = true; // opening brace detected
+            currentElement = newElement;
+          }
+          break;
+        }
+      case TokenNameRBRACE :
+        {
+          endPosition = this.flushAnnotationsDefinedPriorTo(scanner.currentPosition - 1);
+          RecoveredElement newElement = currentElement.updateOnClosingBrace(scanner.startPosition, scanner.currentPosition - 1);
+          lastCheckPoint = scanner.currentPosition;
+          if (newElement != currentElement) {
+            currentElement = newElement;
+          }
+        }
+    }
+  }
+  protected void reportSyntaxError(int act, int currentKind, int stateStackTop) {
+
+    /* remember current scanner position */
+    int startPos = scanner.startPosition;
+    int currentPos = scanner.currentPosition;
+
+    String[] expectings;
+    String tokenName = name[symbol_index[currentKind]];
+
+    //fetch all "accurate" possible terminals that could recover the error
+    int start, end = start = asi(stack[stateStackTop]);
+    while (asr[end] != 0)
+      end++;
+    int length = end - start;
+    expectings = new String[length];
+    if (length != 0) {
+      char[] indexes = new char[length];
+      System.arraycopy(asr, start, indexes, 0, length);
+      for (int i = 0; i < length; i++) {
+        expectings[i] = name[symbol_index[indexes[i]]];
+      }
+    }
+
+    //if the pb is an EOF, try to tell the user that they are some 
+    if (tokenName.equals(UNEXPECTED_EOF)) {
+      if (!this.checkAndReportBracketAnomalies(problemReporter())) {
+        char[] tokenSource;
+        try {
+          tokenSource = this.scanner.getCurrentTokenSource();
+        } catch (Exception e) {
+          tokenSource = new char[] {
+          };
+        }
+        problemReporter().parseError(
+          this.scanner.startPosition,
+          this.scanner.currentPosition - 1,
+          tokenSource,
+          tokenName,
+          expectings);
+      }
+    } else { //the next test is HEAVILY grammar DEPENDENT.
+      if ((length == 2) && (tokenName.equals(";")) //$NON-NLS-1$
+      && (expectings[0] == "++") //$NON-NLS-1$
+      && (expectings[1] == "--") //$NON-NLS-1$
+      && (expressionPtr > -1)) {
+        // the ; is not the expected token ==> it ends a statement when an expression is not ended
+        problemReporter().invalidExpressionAsStatement(expressionStack[expressionPtr]);
+      } else {
+        char[] tokenSource;
+        try {
+          tokenSource = this.scanner.getCurrentTokenSource();
+        } catch (Exception e) {
+          tokenSource = new char[] {
+          };
+        }
+        problemReporter().parseError(
+          this.scanner.startPosition,
+          this.scanner.currentPosition - 1,
+          tokenSource,
+          tokenName,
+          expectings);
+        this.checkAndReportBracketAnomalies(problemReporter());
+      }
+    }
+    /* reset scanner where it was */
+    scanner.startPosition = startPos;
+    scanner.currentPosition = currentPos;
+  }
+  protected void resetModifiers() {
+    modifiers = AccDefault;
+    modifiersSourceStart = -1; // <-- see comment into modifiersFlag(int)
+    scanner.commentPtr = -1;
+  }
+  /*
+   * Reset context so as to resume to regular parse loop
+   */
+  protected void resetStacks() {
+
+    astPtr = -1;
+    astLengthPtr = -1;
+    expressionPtr = -1;
+    expressionLengthPtr = -1;
+    identifierPtr = -1;
+    identifierLengthPtr = -1;
+    intPtr = -1;
+    nestedMethod[nestedType = 0] = 0; // need to reset for further reuse
+    variablesCounter[nestedType] = 0;
+    dimensions = 0;
+    realBlockStack[realBlockPtr = 0] = 0;
+    recoveredStaticInitializerStart = 0;
+    listLength = 0;
+  }
+  /*
+   * Reset context so as to resume to regular parse loop
+   * If unable to reset for resuming, answers false.
+   *
+   * Move checkpoint location, reset internal stacks and
+   * decide which grammar goal is activated.
+   */
+  protected boolean resumeAfterRecovery() {
+
+    // reset internal stacks 
+    this.resetStacks();
+
+    /* attempt to move checkpoint location */
+    if (!this.moveRecoveryCheckpoint())
+      return false;
+
+    // only look for headers
+    if (referenceContext instanceof CompilationUnitDeclaration) {
+      goForHeaders();
+      diet = true; // passed this point, will not consider method bodies
+      return true;
+    }
+    // does not know how to restart
+    return false;
+  }
+  /*
+   * Syntax error was detected. Will attempt to perform some recovery action in order
+   * to resume to the regular parse loop.
+   */
+  protected boolean resumeOnSyntaxError() {
+
+    /* request recovery initialization */
+    if (currentElement == null) {
+      currentElement = this.buildInitialRecoveryState(); // build some recovered elements
+    }
+    /* do not investigate deeper in recovery when no recovered element */
+    if (currentElement == null)
+      return false;
+
+    /* manual forced recovery restart - after headers */
+    if (restartRecovery) {
+      restartRecovery = false;
+    }
+    /* update recovery state with current error state of the parser */
+    this.updateRecoveryState();
+
+    /* attempt to reset state in order to resume to parse loop */
+    return this.resumeAfterRecovery();
+  }
+  protected static int tAction(int state, int sym) {
+    return action[check(state + sym) == sym ? state + sym : state];
+  }
+  public String toString() {
+
+    String s = "identifierStack : char[][] = {"; //$NON-NLS-1$
+    for (int i = 0; i <= identifierPtr; i++) {
+      s = s + "\"" + String.valueOf(identifierStack[i]) + "\","; //$NON-NLS-1$ //$NON-NLS-2$
+    };
+    s = s + "}\n"; //$NON-NLS-1$
+
+    s = s + "identierLengthStack : int[] = {"; //$NON-NLS-1$
+    for (int i = 0; i <= identifierLengthPtr; i++) {
+      s = s + identifierLengthStack[i] + ","; //$NON-NLS-1$
+    };
+    s = s + "}\n"; //$NON-NLS-1$
+
+    s = s + "astLengthStack : int[] = {"; //$NON-NLS-1$
+    for (int i = 0; i <= astLengthPtr; i++) {
+      s = s + astLengthStack[i] + ","; //$NON-NLS-1$
+    };
+    s = s + "}\n"; //$NON-NLS-1$
+    s = s + "astPtr : int = " + String.valueOf(astPtr) + "\n"; //$NON-NLS-1$ //$NON-NLS-2$
+
+    s = s + "intStack : int[] = {"; //$NON-NLS-1$
+    for (int i = 0; i <= intPtr; i++) {
+      s = s + intStack[i] + ","; //$NON-NLS-1$
+    };
+    s = s + "}\n"; //$NON-NLS-1$
+
+    s = s + "expressionLengthStack : int[] = {"; //$NON-NLS-1$
+    for (int i = 0; i <= expressionLengthPtr; i++) {
+      s = s + expressionLengthStack[i] + ","; //$NON-NLS-1$
+    };
+    s = s + "}\n"; //$NON-NLS-1$
+
+    s = s + "expressionPtr : int = " + String.valueOf(expressionPtr) + "\n"; //$NON-NLS-1$ //$NON-NLS-2$
+
+    s = s + "\n\n\n----------------Scanner--------------\n" + scanner.toString(); //$NON-NLS-1$
+    return s;
+
+  }
+  /*
+   * Update recovery state based on current parser/scanner state
+   */
+  protected void updateRecoveryState() {
+
+    /* expose parser state to recovery state */
+    currentElement.updateFromParserState();
+
+    /* check and update recovered state based on current token,
+       this action is also performed when shifting token after recovery
+       got activated once. 
+    */
+    this.recoveryTokenCheck();
+  }
+  protected void updateSourceDeclarationParts(int variableDeclaratorsCounter) {
+    //fields is a definition of fields that are grouped together like in
+    //public int[] a, b[], c
+    //which results into 3 fields.
+
+    FieldDeclaration field;
+    int endTypeDeclarationPosition = -1 + astStack[astPtr - variableDeclaratorsCounter + 1].sourceStart;
+    for (int i = 0; i < variableDeclaratorsCounter - 1; i++) {
+      //last one is special(see below)
+      field = (FieldDeclaration) astStack[astPtr - i - 1];
+      field.endPart1Position = endTypeDeclarationPosition;
+      field.endPart2Position = -1 + astStack[astPtr - i].sourceStart;
+    }
+    //last one
+     (field = (FieldDeclaration) astStack[astPtr]).endPart1Position = endTypeDeclarationPosition;
+    field.endPart2Position = field.declarationSourceEnd;
+
+  }
+  protected void updateSourcePosition(Expression exp) {
+    //update the source Position of the expression
+
+    //intStack : int int
+    //-->
+    //intStack : 
+
+    exp.sourceEnd = intStack[intPtr--];
+    exp.sourceStart = intStack[intPtr--];
+  }
 }
index c685210..8eb108a 100644 (file)
@@ -11,75 +11,92 @@ Contributors:
 **********************************************************************/
 package net.sourceforge.phpeclipse;
 
-import java.util.MissingResourceException;
-import java.util.ResourceBundle;
-
-import net.sourceforge.phpeclipse.phpeditor.PHPDocumentProvider;
-import org.eclipse.core.resources.IWorkspace;
-import org.eclipse.core.resources.ResourcesPlugin;
-import org.eclipse.core.runtime.IPath;
-import org.eclipse.core.runtime.IPluginDescriptor;
-import org.eclipse.core.runtime.IStatus;
-import org.eclipse.core.runtime.MultiStatus;
-import org.eclipse.core.runtime.Path;
-import org.eclipse.core.runtime.Status;
-//import org.eclipse.jdt.internal.ui.JavaStatusConstants;
-//import org.eclipse.jdt.internal.ui.JavaUIMessages;
-import org.eclipse.jface.preference.IPreferenceStore;
-import org.eclipse.swt.widgets.Shell;
-import org.eclipse.ui.IWorkbenchPage;
-import org.eclipse.ui.IWorkbenchWindow;
-import org.eclipse.ui.plugin.AbstractUIPlugin;
-
 /**
  * The main plugin class to be used in the desktop.
  */
 public interface IPreferenceConstants {
-  
-       public static final String LOCALHOST_PREF = "_localhost"; //$NON-NLS-1$
-       public static final String DOCUMENTROOT_PREF = "_documentroot"; //$NON-NLS-1$
-       public static final String USE_EXTERNAL_BROWSER_PREF = "_use_external_browser"; //$NON-NLS-1$
-       public static final String EXTERNAL_BROWSER_PREF = "_external_browser"; //$NON-NLS-1$
-       public static final String MYSQL_PREF = "_my_sql"; //$NON-NLS-1$
-       public static final String APACHE_START_PREF = "_apache_start"; //$NON-NLS-1$
-       public static final String APACHE_STOP_PREF = "_apache_stop"; //$NON-NLS-1$
-       public static final String APACHE_RESTART_PREF = "_apache_restart"; //$NON-NLS-1$
-  public static final String SHOW_OUTPUT_IN_CONSOLE = "_sho_output_in_console"; //$NON-NLS-1$
-  public static final String EXTERNAL_PARSER_PREF = "_external_parser"; //$NON-NLS-1$
+  public static final String LOCALHOST_PREF = "_localhost";
+  public static final String DOCUMENTROOT_PREF = "_documentroot";
+  public static final String USE_EXTERNAL_BROWSER_PREF = "_use_external_browser";
+  public static final String EXTERNAL_BROWSER_PREF = "_external_browser";
+  public static final String MYSQL_PREF = "_my_sql";
+  public static final String APACHE_START_PREF = "_apache_start";
+  public static final String APACHE_STOP_PREF = "_apache_stop";
+  public static final String APACHE_RESTART_PREF = "_apache_restart";
+  public static final String SHOW_OUTPUT_IN_CONSOLE = "_sho_output_in_console";
+  public static final String EXTERNAL_PARSER_PREF = "_external_parser";
+  public static final String PHP_PARSER_DEFAULT = "_php_parser_default";
+  public static final String PHP_INTERNAL_PARSER = "_php_internal_parser";
+  public static final String PHP_EXTERNAL_PARSER = "_php_external_parser";
+  public static final String PHP_PARSE_ON_SAVE = "_php_parse_on_save";
+  public static final String PHP_MULTILINE_COMMENT = "_php_multilineComment";
+  public static final String PHP_MULTILINE_COMMENT_BOLD = "_php_multilineComment_bold";
+  public static final String PHP_MULTILINE_COMMENT_ITALIC = "_php_multilineComment_italic";
+  public static final String PHP_MULTILINE_COMMENT_UNDERLINE = "_php_multilineComment_underline";
+  public static final String PHP_SINGLELINE_COMMENT = "_php_singlelineComment";
+  public static final String PHP_SINGLELINE_COMMENT_BOLD = "_php_singlelineComment_bold";
+  public static final String PHP_SINGLELINE_COMMENT_ITALIC = "_php_singlelineComment_italic";
+  public static final String PHP_SINGLELINE_COMMENT_UNDERLINE = "_php_singlelineComment_underline";
+  public static final String PHP_KEYWORD = "_php_keyword";
+  public static final String PHP_KEYWORD_BOLD = "_php_keyword_bold";
+  public static final String PHP_KEYWORD_ITALIC = "_php_keyword_italic";
+  public static final String PHP_KEYWORD_UNDERLINE = "_php_keyword_underline";
+  public static final String PHP_VARIABLE = "_php_variable";
+  public static final String PHP_VARIABLE_BOLD = "_php_variable_bold";
+  public static final String PHP_VARIABLE_ITALIC = "_php_variable_italic";
+  public static final String PHP_VARIABLE_UNDERLINE = "_php_variable_underline";
+  public static final String PHP_TYPE = "_php_type";
+  public static final String PHP_TYPE_BOLD = "_php_type_bold";
+  public static final String PHP_TYPE_ITALIC = "_php_type_italic";
+  public static final String PHP_TYPE_UNDERLINE = "_php_type_underline";
+  public static final String PHP_CONSTANT = "_php_constant";
+  public static final String PHP_CONSTANT_BOLD = "_php_constant_bold";
+  public static final String PHP_CONSTANT_ITALIC = "_php_constant_italic";
+  public static final String PHP_CONSTANT_UNDERLINE = "_php_constant_underline";
+  public static final String PHP_FUNCTIONNAME = "_php_functionname";
+  public static final String PHP_FUNCTIONNAME_BOLD = "_php_functionname_bold";
+  public static final String PHP_FUNCTIONNAME_ITALIC = "_php_functionname_italic";
+  public static final String PHP_FUNCTIONNAME_UNDERLINE = "_php_functionname_underline";
+  public static final String PHP_STRING = "_php_string";
+  public static final String PHP_STRING_BOLD = "_php_string_bold";
+  public static final String PHP_STRING_ITALIC = "_php_string_italic";
+  public static final String PHP_STRING_UNDERLINE = "_php_string_underline";
+  public static final String PHP_DEFAULT = "_php_default";
+  public static final String PHP_DEFAULT_BOLD = "_php_default_bold";
+  public static final String PHP_DEFAULT_ITALIC = "_php_default_italic";
+  public static final String PHP_DEFAULT_UNDERLINE = "_php_default_underline";
+  public static final String LINKED_POSITION_COLOR = "_linkedPositionColor";
+  public static final String PHP_EDITOR_BACKGROUND = "_php_editor_background";
+  public static final String PHP_USERDEF_XMLFILE = "_userdef_xmlfile";
+
+  /*Language stuff  - under dev*/
+  public static final String RESOURCE_BUNDLE = "_php_editor_res_bundle"; //$NON-NLS-1$ 
+  public static final String LANGUAGE_DEFAULT = "net.sourceforge.phpeclipse.newPHPPreferencesMessages_en_GB";
+  public static final String RESOURCE_BUNDLE_DE = "net.sourceforge.phpeclipse.newPHPPreferencesMessages_DE";
+  public static final String RESOURCE_BUNDLE_FR = "net.sourceforge.phpeclipse.newPHPPreferencesMessages_FR";
+  public static final String RESOURCE_BUNDLE_EN_GB = "net.sourceforge.phpeclipse.newPHPPreferencesMessages_en_GB";
 
-  public static final String PHP_PARSER_DEFAULT = "_php_parser_default"; //$NON-NLS-1$
-  public static final String PHP_INTERNAL_PARSER = "_php_internal_parser"; //$NON-NLS-1$
-  public static final String PHP_EXTERNAL_PARSER = "_php_external_parser"; //$NON-NLS-1$
-  public static final String PHP_PARSE_ON_SAVE = "_php_parse_on_save"; //$NON-NLS-1$
-  
-  public static final String PHP_MULTILINE_COMMENT = "_php_multilineComment"; //$NON-NLS-1$
-  public static final String PHP_SINGLELINE_COMMENT = "_php_singlelineComment"; //$NON-NLS-1$
-  public static final String PHP_KEYWORD = "_php_keyword"; //$NON-NLS-1$
-  public static final String PHP_VARIABLE = "_php_variable"; //$NON-NLS-1$
-  public static final String PHP_FUNCTIONNAME = "_php_functionname"; //$NON-NLS-1$
-  public static final String PHP_STRING = "_php_string"; //$NON-NLS-1$
-  public static final String PHP_DEFAULT = "_php_default"; //$NON-NLS-1$
-  
-  public static final String LINKED_POSITION_COLOR= "_linkedPositionColor"; //$NON-NLS-1$
-  
+  public static final String FORMATTER_TAB_SIZE = "_formatter_tab_size";
+  public static final String SPACES_FOR_TABS = "_formatter_tab_size";
+
+  public static final String EDITOR_BOLD_SUFFIX = "_editor_bold_suffix";
   /** Preference key for showing the line number ruler */
-  public final static String LINE_NUMBER_RULER= "_lineNumberRuler"; //$NON-NLS-1$
+  public final static String LINE_NUMBER_RULER = "_lineNumberRuler"; //$NON-NLS-1$
   /** Preference key for the foreground color of the line numbers */
-  public final static String LINE_NUMBER_COLOR= "_lineNumberColor"; //$NON-NLS-1$
-  
-  public final static String FORMATTER_TAB_SIZE= "_formatterTabSize"; //$NON-NLS-1$
-  public final static String SPACES_FOR_TABS = "false";
-  
+  public final static String LINE_NUMBER_COLOR = "_lineNumberColor"; //$NON-NLS-1$
+
   public final static String PREFERENCE_COLOR_BACKGROUND_SYSTEM_DEFAULT = "_defaultBackgroundColor"; //$NON-NLS-1$
   public final static String PREFERENCE_COLOR_BACKGROUND = "backgroundColor"; //$NON-NLS-1$
-  
+
   /** Preference key for content assist proposal color */
-  public final static String PROPOSALS_FOREGROUND=  "content_assist_proposals_foreground"; //$NON-NLS-1$
+  public final static String PROPOSALS_FOREGROUND = "content_assist_proposals_foreground"; //$NON-NLS-1$
   /** Preference key for content assist proposal color */
-  public final static String PROPOSALS_BACKGROUND=  "content_assist_proposals_background"; //$NON-NLS-1$
+  public final static String PROPOSALS_BACKGROUND = "content_assist_proposals_background"; //$NON-NLS-1$
+  public static final String EDITOR_EVALUTE_TEMPORARY_PROBLEMS = null;
+  public static final String EDITOR_CORRECTION_INDICATION = null;
 
-    public static final String PHP_OUTLINE_CLASS = "_php_outline_class"; //$NON-NLS-1$
-    public static final String PHP_OUTLINE_FUNC  = "_php_outline_func"; //$NON-NLS-1$
-    public static final String PHP_OUTLINE_VAR   = "_php_outline_var"; //$NON-NLS-1$
+  public static final String PHP_OUTLINE_CLASS = "_php_outline_class"; //$NON-NLS-1$
+  public static final String PHP_OUTLINE_FUNC = "_php_outline_func"; //$NON-NLS-1$
+  public static final String PHP_OUTLINE_VAR = "_php_outline_var"; //$NON-NLS-1$
 
 }
\ No newline at end of file
index 81943ac..454c2e8 100644 (file)
@@ -3,16 +3,14 @@ package net.sourceforge.phpeclipse;
 import java.util.ArrayList;
 import java.util.List;
 
+import net.sourceforge.phpeclipse.resourcesview.PHPFile;
+import net.sourceforge.phpeclipse.resourcesview.PHPProject;
 import org.eclipse.core.resources.IFile;
 import org.eclipse.core.resources.IProject;
 import org.eclipse.core.resources.IProjectDescription;
 import org.eclipse.core.runtime.CoreException;
 import org.eclipse.core.runtime.IProgressMonitor;
 
-import net.sourceforge.phpeclipse.resourcesview.*;
-import net.sourceforge.phpeclipse.resourcesview.PHPFile;
-import net.sourceforge.phpeclipse.resourcesview.PHPProject;
-
 public class PHPCore {
 
   public static IProject[] getPHPProjects() {
@@ -26,7 +24,7 @@ public class PHPCore {
     }
 
     IProject[] phpProjects = new IProject[phpProjectsList.size()];
-    return (IProject[]) phpProjectsList.toArray(phpProjects); 
+    return (IProject[]) phpProjectsList.toArray(phpProjects);
   }
 
   public static PHPProject getPHPProject(String name) {
@@ -76,7 +74,7 @@ public class PHPCore {
       System.err.println("Exception occurred in PHPCore#create(IProject): " + e.toString());
     }
 
-    return null; 
+    return null;
   }
 
   public static void addPHPNature(IProject project, IProgressMonitor monitor) throws CoreException {
diff --git a/net.sourceforge.phpeclipse/src/net/sourceforge/phpeclipse/PHPEclipseBasePreferencePage.java b/net.sourceforge.phpeclipse/src/net/sourceforge/phpeclipse/PHPEclipseBasePreferencePage.java
new file mode 100644 (file)
index 0000000..5b9af53
--- /dev/null
@@ -0,0 +1,208 @@
+package net.sourceforge.phpeclipse;
+
+import java.util.ArrayList;
+
+import org.eclipse.jface.preference.BooleanFieldEditor;
+import org.eclipse.jface.preference.DirectoryFieldEditor;
+import org.eclipse.jface.preference.IPreferenceStore;
+import org.eclipse.jface.preference.PreferencePage;
+import org.eclipse.jface.preference.RadioGroupFieldEditor;
+import org.eclipse.jface.preference.StringFieldEditor;
+import org.eclipse.swt.SWT;
+import org.eclipse.swt.events.ModifyListener;
+import org.eclipse.swt.events.SelectionListener;
+import org.eclipse.swt.layout.GridData;
+import org.eclipse.swt.layout.GridLayout;
+import org.eclipse.swt.widgets.Composite;
+import org.eclipse.swt.widgets.Control;
+import org.eclipse.swt.widgets.Group;
+import org.eclipse.ui.IWorkbench;
+import org.eclipse.ui.IWorkbenchPreferencePage;
+
+import net.sourceforge.phpeclipse.preferences.PHPPreferencesMessages;
+
+public class PHPEclipseBasePreferencePage extends PreferencePage implements IWorkbenchPreferencePage {
+
+  private SelectionListener SelectionListener;
+  private ModifyListener ModifyListener;
+  private ModifyListener TextModifyListener;
+
+  private ArrayList CheckBoxes = new ArrayList();
+  private ArrayList ComboBoxes = new ArrayList();
+  private ArrayList TextBoxes = new ArrayList();
+  private ArrayList RadioButtons = new ArrayList();
+
+  StringFieldEditor localHostSFE;
+  DirectoryFieldEditor documentRootDFE;
+  BooleanFieldEditor externalBrowserBFE;
+  StringFieldEditor externalBrowserSFE;
+  StringFieldEditor apacheStartSFE;
+  StringFieldEditor apacheStopSFE;
+  StringFieldEditor apacheRestartSFE;
+  StringFieldEditor mySQLCommandSFE;
+  RadioGroupFieldEditor chooseParser;
+  BooleanFieldEditor parseOnSave;
+
+  public PHPEclipseBasePreferencePage() {
+    super();
+    setPreferenceStore(PHPeclipsePlugin.getDefault().getPreferenceStore());
+    setDescription(PHPPreferencesMessages.getString("PHPBasePreferencePage.description")); //$NON-NLS-1$
+  }
+  public void init(IWorkbench workbench) {
+  }
+  protected void performDefaults() {
+    localHostSFE.loadDefault();
+    documentRootDFE.loadDefault();
+    externalBrowserBFE.loadDefault();
+    externalBrowserSFE.loadDefault();
+    apacheStartSFE.loadDefault();
+    apacheStopSFE.loadDefault();
+    apacheRestartSFE.loadDefault();
+    mySQLCommandSFE.loadDefault();
+    chooseParser.loadDefault();
+    parseOnSave.loadDefault();
+    super.performDefaults();
+  }
+
+  public boolean performOk() {
+    localHostSFE.store();
+    documentRootDFE.store();
+    externalBrowserBFE.store();
+    externalBrowserSFE.store();
+    apacheStartSFE.store();
+    apacheStopSFE.store();
+    apacheRestartSFE.store();
+    mySQLCommandSFE.store();
+    chooseParser.store();
+    parseOnSave.store();
+    return super.performOk();
+  }
+
+  protected Control createContents(Composite parent) {
+    initializeDialogUnits(parent);
+    final IPreferenceStore store = PHPeclipsePlugin.getDefault().getPreferenceStore();
+    Composite composite = new Composite(parent, SWT.LEFT);
+    composite.setLayoutData(new GridData(GridData.FILL_HORIZONTAL));
+    composite.setLayout(new GridLayout());
+    //Create Websettings
+    Composite webSettingsComposite = new Composite(composite, SWT.NONE);
+    webSettingsComposite.setLayout(new GridLayout());
+    webSettingsComposite.setLayoutData(new GridData(GridData.FILL_HORIZONTAL));
+    Group webSettingsGroup = new Group(webSettingsComposite, SWT.NONE);
+    webSettingsGroup.setText(PHPPreferencesMessages.getString("PHPBasePreferencePage.websettingsGroup"));
+    webSettingsGroup.setLayoutData(new GridData(GridData.FILL_HORIZONTAL));
+    webSettingsGroup.setLayout(new GridLayout());
+    localHostSFE =
+      new StringFieldEditor(
+        IPreferenceConstants.LOCALHOST_PREF,
+        PHPPreferencesMessages.getString("PHPBasePreferencePage.websettingsGroup.localhost"),
+        webSettingsGroup);
+    localHostSFE.setPreferencePage(this);
+    localHostSFE.setPreferenceStore(getPreferenceStore());
+    localHostSFE.load();
+    documentRootDFE =
+      new DirectoryFieldEditor(
+        IPreferenceConstants.DOCUMENTROOT_PREF,
+        PHPPreferencesMessages.getString("PHPBasePreferencePage.websettingsGroup.docroot"),
+        webSettingsGroup);
+    documentRootDFE.setPreferencePage(this);
+    documentRootDFE.setPreferenceStore(getPreferenceStore());
+    documentRootDFE.load();
+    externalBrowserBFE =
+      new BooleanFieldEditor(
+        IPreferenceConstants.USE_EXTERNAL_BROWSER_PREF,
+        PHPPreferencesMessages.getString("PHPBasePreferencePage.websettingsGroup.useexternal"),
+        webSettingsGroup);
+    externalBrowserBFE.setPreferencePage(this);
+    externalBrowserBFE.setPreferenceStore(getPreferenceStore());
+    externalBrowserBFE.load();
+    externalBrowserSFE =
+      new StringFieldEditor(
+        IPreferenceConstants.EXTERNAL_BROWSER_PREF,
+        PHPPreferencesMessages.getString("PHPBasePreferencePage.websettingsGroup.browser"),
+        webSettingsGroup);
+    externalBrowserSFE.setPreferencePage(this);
+    externalBrowserSFE.setPreferenceStore(getPreferenceStore());
+    externalBrowserSFE.load();
+
+    //Create apache
+    Composite apacheSettingsComposite = new Composite(composite, SWT.NULL);
+    apacheSettingsComposite.setLayout(new GridLayout());
+    apacheSettingsComposite.setLayoutData(new GridData(GridData.FILL_HORIZONTAL));
+    Group apacheSettingsGroup = new Group(apacheSettingsComposite, SWT.NONE);
+    apacheSettingsGroup.setText(PHPPreferencesMessages.getString("PHPBasePreferencePage.apacheGroup"));
+    apacheSettingsGroup.setLayoutData(new GridData(GridData.FILL_HORIZONTAL));
+    apacheSettingsGroup.setLayout(new GridLayout());
+    apacheStartSFE =
+      new StringFieldEditor(
+        IPreferenceConstants.APACHE_START_PREF,
+        PHPPreferencesMessages.getString("PHPBasePreferencePage.apacheGroup.start"),
+        apacheSettingsGroup);
+    apacheStartSFE.setPreferencePage(this);
+    apacheStartSFE.setPreferenceStore(getPreferenceStore());
+    apacheStartSFE.load();
+    apacheStopSFE =
+      new StringFieldEditor(
+        IPreferenceConstants.APACHE_STOP_PREF,
+        PHPPreferencesMessages.getString("PHPBasePreferencePage.apacheGroup.stop"),
+        apacheSettingsGroup);
+    apacheStopSFE.setPreferencePage(this);
+    apacheStopSFE.setPreferenceStore(getPreferenceStore());
+    apacheStopSFE.load();
+    apacheRestartSFE =
+      new StringFieldEditor(
+        IPreferenceConstants.APACHE_RESTART_PREF,
+        PHPPreferencesMessages.getString("PHPBasePreferencePage.apacheGroup.restart"),
+        apacheSettingsGroup);
+    apacheRestartSFE.setPreferencePage(this);
+    apacheRestartSFE.setPreferenceStore(getPreferenceStore());
+    apacheRestartSFE.load();
+
+    //Create mySQL
+    Composite mySQLSettingsComposite = new Composite(composite, SWT.NULL);
+    mySQLSettingsComposite.setLayout(new GridLayout());
+    mySQLSettingsComposite.setLayoutData(new GridData(GridData.FILL_HORIZONTAL));
+
+    Group mySQLSettingsGroup = new Group(mySQLSettingsComposite, SWT.NONE);
+    mySQLSettingsGroup.setText(PHPPreferencesMessages.getString("PHPBasePreferencePage.mySQLGroup"));
+    mySQLSettingsGroup.setLayoutData(new GridData(GridData.FILL_HORIZONTAL));
+    mySQLSettingsGroup.setLayout(new GridLayout());
+    mySQLCommandSFE =
+      new StringFieldEditor(
+        IPreferenceConstants.MYSQL_PREF,
+        PHPPreferencesMessages.getString("PHPBasePreferencePage.mySQLGroup.command"),
+        mySQLSettingsGroup);
+    mySQLCommandSFE.setPreferencePage(this);
+    mySQLCommandSFE.setPreferenceStore(getPreferenceStore());
+    mySQLCommandSFE.load();
+
+    //Create parser settings composite
+    Composite parserSettingsComposite = new Composite(composite, SWT.NONE);
+    parserSettingsComposite.setLayout(new GridLayout());
+    parserSettingsComposite.setLayoutData(new GridData(GridData.FILL_HORIZONTAL));
+    Group parserSettingsGroup = new Group(parserSettingsComposite, SWT.NONE);
+    parserSettingsGroup.setText(PHPPreferencesMessages.getString("PHPBasePreferencePage.parsers"));
+    parserSettingsGroup.setLayout(new GridLayout());
+    parserSettingsGroup.setLayoutData(new GridData(GridData.FILL_HORIZONTAL));
+
+    chooseParser =
+      new RadioGroupFieldEditor(
+        IPreferenceConstants.PHP_PARSER_DEFAULT,
+        PHPPreferencesMessages.getString("PHPBasePreferencePage.parsers.choose"),
+        1,
+        new String[][] {
+          { PHPPreferencesMessages.getString("PHPBasePreferencePage.parsers.internal"), IPreferenceConstants.PHP_INTERNAL_PARSER },
+          {
+        PHPPreferencesMessages.getString("PHPBasePreferencePage.parsers.external"), IPreferenceConstants.PHP_EXTERNAL_PARSER }
+    }, parserSettingsGroup);
+    chooseParser.setPreferencePage(this);
+    chooseParser.setPreferenceStore(getPreferenceStore());
+    chooseParser.load();
+    parseOnSave = new BooleanFieldEditor(PHPeclipsePlugin.PHP_PARSE_ON_SAVE, "&Parse automatically on save", parserSettingsGroup);
+    parseOnSave.setPreferencePage(this);
+    parseOnSave.setPreferenceStore(getPreferenceStore());
+    parseOnSave.load();
+
+    return composite;
+  }
+}
diff --git a/net.sourceforge.phpeclipse/src/net/sourceforge/phpeclipse/PHPEclipsePreferencePage.java b/net.sourceforge.phpeclipse/src/net/sourceforge/phpeclipse/PHPEclipsePreferencePage.java
deleted file mode 100644 (file)
index 8a047f1..0000000
+++ /dev/null
@@ -1,115 +0,0 @@
-/**********************************************************************
-Copyright (c) 2000, 2002 IBM Corp. and others.
-All rights reserved. This program and the accompanying materials
-are made available under the terms of the Common Public License v1.0
-which accompanies this distribution, and is available at
-http://www.eclipse.org/legal/cpl-v10.html
-
-Contributors:
-    IBM Corporation - Initial implementation
-    Klaus Hartlage - www.eclipseproject.de
-**********************************************************************/
-package net.sourceforge.phpeclipse;
-
-import org.eclipse.jface.preference.BooleanFieldEditor;
-import org.eclipse.jface.preference.DirectoryFieldEditor;
-import org.eclipse.jface.preference.FieldEditorPreferencePage;
-import org.eclipse.jface.preference.IPreferenceStore;
-import org.eclipse.jface.preference.RadioGroupFieldEditor;
-import org.eclipse.jface.preference.StringFieldEditor;
-import org.eclipse.ui.IWorkbench;
-import org.eclipse.ui.IWorkbenchPreferencePage;
-
-/**
- * 
- * @author khartlage
- */
-public class PHPEclipsePreferencePage extends FieldEditorPreferencePage implements IWorkbenchPreferencePage {
-
-  public PHPEclipsePreferencePage() {
-    super(FieldEditorPreferencePage.GRID);
-    //Initialize the preference store we wish to use
-    setPreferenceStore(PHPeclipsePlugin.getDefault().getPreferenceStore());
-  }
-
-  protected void createFieldEditors() {
-    final IPreferenceStore store = PHPeclipsePlugin.getDefault().getPreferenceStore();
-
-    StringFieldEditor localhost = new StringFieldEditor(PHPeclipsePlugin.LOCALHOST_PREF, "&Localhost:", 60, getFieldEditorParent());
-
-    DirectoryFieldEditor documentRoot =
-      new DirectoryFieldEditor(PHPeclipsePlugin.DOCUMENTROOT_PREF, "&DocumentRoot:", getFieldEditorParent());
-
-    BooleanFieldEditor useExternalBrowser =
-      new BooleanFieldEditor(PHPeclipsePlugin.USE_EXTERNAL_BROWSER_PREF, "&Use External Browser", getFieldEditorParent());
-
-    StringFieldEditor externalBrowser =
-      new StringFieldEditor(PHPeclipsePlugin.EXTERNAL_BROWSER_PREF, "&External Browser command:", 60, getFieldEditorParent());
-
-    StringFieldEditor startMySQL =
-      new StringFieldEditor(PHPeclipsePlugin.MYSQL_PREF, "&MySQL command:", 60, getFieldEditorParent());
-
-    StringFieldEditor startApache =
-      new StringFieldEditor(PHPeclipsePlugin.APACHE_START_PREF, "Start &Apache command:", 60, getFieldEditorParent());
-
-    StringFieldEditor stopApache =
-      new StringFieldEditor(PHPeclipsePlugin.APACHE_STOP_PREF, "&Stop Apache command:", 60, getFieldEditorParent());
-
-    StringFieldEditor restartApache =
-      new StringFieldEditor(PHPeclipsePlugin.APACHE_RESTART_PREF, "&Restart Apache command:", 60, getFieldEditorParent());
-
-    StringFieldEditor externalParser =
-      new StringFieldEditor(PHPeclipsePlugin.EXTERNAL_PARSER_PREF, "&External Parser command:", 60, getFieldEditorParent());
-
-
-  RadioGroupFieldEditor chooseParser = new RadioGroupFieldEditor(
-    IPreferenceConstants.PHP_PARSER_DEFAULT,
-    "Choose PHP parser",
-    1,
-    new String[][] {
-      {"Internal parser", 
-       IPreferenceConstants.PHP_INTERNAL_PARSER
-      },
-      {"External parser", 
-       IPreferenceConstants.PHP_EXTERNAL_PARSER
-      }
-    },
-    this.getFieldEditorParent());
-    
-    BooleanFieldEditor parseOnSave =
-      new BooleanFieldEditor(PHPeclipsePlugin.PHP_PARSE_ON_SAVE, "&Parse automatically on save", getFieldEditorParent());
-
-      BooleanFieldEditor outlineShowClass =
-        new BooleanFieldEditor(PHPeclipsePlugin.PHP_OUTLINE_CLASS, "Show classes in outline", getFieldEditorParent());
-      BooleanFieldEditor outlineShowFunc =
-        new BooleanFieldEditor(PHPeclipsePlugin.PHP_OUTLINE_FUNC, "Show functions in outline", getFieldEditorParent());
-      BooleanFieldEditor outlineShowVar =
-        new BooleanFieldEditor(PHPeclipsePlugin.PHP_OUTLINE_VAR, "Show variables in outline", getFieldEditorParent());
-
-    
-    addField(localhost);
-    addField(documentRoot);
-    addField(useExternalBrowser);
-    addField(externalBrowser);
-    addField(startMySQL);
-    addField(startApache);
-
-    addField(stopApache);
-    addField(restartApache);
-    
-    addField(externalParser);
-    
-    addField(chooseParser);
-    addField(parseOnSave);
-    addField(outlineShowClass) ;
-    addField(outlineShowFunc);
-    addField(outlineShowVar);
-  }
-
-  /**
-   * @see IWorkbenchPreferencePage#init
-   */
-  public void init(IWorkbench workbench) {
-  }
-
-}
diff --git a/net.sourceforge.phpeclipse/src/net/sourceforge/phpeclipse/PHPLanguagePreferencePage.java b/net.sourceforge.phpeclipse/src/net/sourceforge/phpeclipse/PHPLanguagePreferencePage.java
new file mode 100644 (file)
index 0000000..fed2faf
--- /dev/null
@@ -0,0 +1,76 @@
+package net.sourceforge.phpeclipse;
+
+import java.util.ArrayList;
+
+import net.sourceforge.phpeclipse.preferences.PHPPreferencesMessages;
+
+import org.eclipse.jface.preference.IPreferenceStore;
+import org.eclipse.jface.preference.PreferencePage;
+import org.eclipse.swt.SWT;
+import org.eclipse.swt.layout.GridData;
+import org.eclipse.swt.layout.GridLayout;
+import org.eclipse.swt.widgets.Button;
+import org.eclipse.swt.widgets.Composite;
+import org.eclipse.swt.widgets.Control;
+import org.eclipse.swt.widgets.Group;
+import org.eclipse.swt.widgets.Label;
+import org.eclipse.ui.IWorkbench;
+import org.eclipse.ui.IWorkbenchPreferencePage;
+
+public class PHPLanguagePreferencePage extends PreferencePage implements IWorkbenchPreferencePage  {
+       private ArrayList RadioButtons = new ArrayList();
+
+       protected Control createContents(Composite parent) {
+               Composite lingoComposite= new Composite(parent, SWT.NULL);
+               lingoComposite.setLayout(new GridLayout());
+               Group lingoGroup= new Group(lingoComposite, SWT.NONE);
+               lingoGroup.setText(PHPPreferencesMessages.getString("PHPLanguagePreferencePage.preflingo"));
+               lingoGroup.setLayoutData(new GridData(GridData.FILL_HORIZONTAL));
+               lingoGroup.setLayout(new GridLayout());
+               Label lg = new Label(lingoGroup, SWT.WRAP);
+               lg.setText(PHPPreferencesMessages.getString("PHPLanguagePreferencePage.choose"));
+               addRadioButton(lingoGroup, PHPPreferencesMessages.getString("PHPLanguagePreferencePage.english"), IPreferenceConstants.RESOURCE_BUNDLE, IPreferenceConstants.RESOURCE_BUNDLE_EN_GB);  //$NON-NLS-1$
+               addRadioButton(lingoGroup, PHPPreferencesMessages.getString("PHPLanguagePreferencePage.german"), IPreferenceConstants.RESOURCE_BUNDLE, IPreferenceConstants.RESOURCE_BUNDLE_DE); //$NON-NLS-1$
+               addRadioButton(lingoGroup, PHPPreferencesMessages.getString("PHPLanguagePreferencePage.french"), IPreferenceConstants.RESOURCE_BUNDLE, IPreferenceConstants.RESOURCE_BUNDLE_FR); //$NON-NLS-1$
+               return lingoComposite;
+       }
+       public void init(IWorkbench arg0) {
+       }
+       private Button addRadioButton(Composite parent, String label, String key, String value) { 
+               GridData gd= new GridData(GridData.HORIZONTAL_ALIGN_FILL);
+               Button button= new Button(parent, SWT.RADIO);
+               button.setText(label);
+               button.setData(new String[] { key, value });
+               button.setLayoutData(gd);
+               button.setSelection(value.equals(PHPeclipsePlugin.getDefault().getPreferenceStore().getString(key)));
+               RadioButtons.add(button);
+               return button;
+       }               
+       
+       protected void performDefaults() {
+               IPreferenceStore store= getPreferenceStore();
+               for (int i= 0; i < RadioButtons.size(); i++) {
+                       Button button= (Button) RadioButtons.get(i);
+                       String[] info= (String[]) button.getData();
+                       button.setSelection(info[1].equals(store.getDefaultString(info[0])));
+               }
+               super.performDefaults();
+       }
+
+       public boolean performOk() {
+               IPreferenceStore store= PHPeclipsePlugin.getDefault().getPreferenceStore();
+               for (int i= 0; i < RadioButtons.size(); i++) {
+                       Button button= (Button) RadioButtons.get(i);
+                       if (button.getSelection()) {
+                               String[] info= (String[]) button.getData();
+                               store.setValue(info[0], info[1]);
+                       }
+               }
+               PHPeclipsePlugin.getDefault().savePluginPreferences();
+               PHPPreferencesMessages.setResourceBundle(
+                       PHPeclipsePlugin.getDefault().getPreferenceStore().getString(IPreferenceConstants.RESOURCE_BUNDLE));
+                       
+               return super.performOk();
+       }
+}
+
diff --git a/net.sourceforge.phpeclipse/src/net/sourceforge/phpeclipse/PHPOutlinePreferencePage.java b/net.sourceforge.phpeclipse/src/net/sourceforge/phpeclipse/PHPOutlinePreferencePage.java
new file mode 100644 (file)
index 0000000..0366a7c
--- /dev/null
@@ -0,0 +1,56 @@
+/**********************************************************************
+Copyright (c) 2000, 2002 IBM Corp. and others.
+All rights reserved. This program and the accompanying materials
+are made available under the terms of the Common Public License v1.0
+which accompanies this distribution, and is available at
+http://www.eclipse.org/legal/cpl-v10.html
+
+Contributors:
+    IBM Corporation - Initial implementation
+    Klaus Hartlage - www.eclipseproject.de
+**********************************************************************/
+package net.sourceforge.phpeclipse;
+
+import org.eclipse.jface.preference.BooleanFieldEditor;
+import org.eclipse.jface.preference.DirectoryFieldEditor;
+import org.eclipse.jface.preference.FieldEditorPreferencePage;
+import org.eclipse.jface.preference.IPreferenceStore;
+import org.eclipse.jface.preference.RadioGroupFieldEditor;
+import org.eclipse.jface.preference.StringFieldEditor;
+import org.eclipse.ui.IWorkbench;
+import org.eclipse.ui.IWorkbenchPreferencePage;
+
+/**
+ * 
+ * @author khartlage
+ */
+public class PHPOutlinePreferencePage extends FieldEditorPreferencePage implements IWorkbenchPreferencePage {
+
+  public PHPOutlinePreferencePage() {
+    super(FieldEditorPreferencePage.GRID);
+    //Initialize the preference store we wish to use
+    setPreferenceStore(PHPeclipsePlugin.getDefault().getPreferenceStore());
+  }
+
+  protected void createFieldEditors() {
+    final IPreferenceStore store = PHPeclipsePlugin.getDefault().getPreferenceStore();
+
+    BooleanFieldEditor outlineShowClass =
+      new BooleanFieldEditor(PHPeclipsePlugin.PHP_OUTLINE_CLASS, "Show classes in outline", getFieldEditorParent());
+    BooleanFieldEditor outlineShowFunc =
+      new BooleanFieldEditor(PHPeclipsePlugin.PHP_OUTLINE_FUNC, "Show functions in outline", getFieldEditorParent());
+    BooleanFieldEditor outlineShowVar =
+      new BooleanFieldEditor(PHPeclipsePlugin.PHP_OUTLINE_VAR, "Show variables in outline", getFieldEditorParent());
+
+    addField(outlineShowClass);
+    addField(outlineShowFunc);
+    addField(outlineShowVar);
+  }
+
+  /**
+   * @see IWorkbenchPreferencePage#init
+   */
+  public void init(IWorkbench workbench) {
+  }
+
+}
diff --git a/net.sourceforge.phpeclipse/src/net/sourceforge/phpeclipse/PHPSyntaxEditorPreferencePage.java b/net.sourceforge.phpeclipse/src/net/sourceforge/phpeclipse/PHPSyntaxEditorPreferencePage.java
new file mode 100644 (file)
index 0000000..22b06ff
--- /dev/null
@@ -0,0 +1,464 @@
+package net.sourceforge.phpeclipse;
+
+import java.util.HashMap;
+import java.util.Iterator;
+import java.util.Map;
+
+import net.sourceforge.phpeclipse.preferences.ColorEditor;
+import net.sourceforge.phpeclipse.preferences.OverlayPreferenceStore;
+import net.sourceforge.phpeclipse.preferences.PHPPreferencesMessages;
+import org.eclipse.core.runtime.IStatus;
+import org.eclipse.jface.preference.BooleanFieldEditor;
+import org.eclipse.jface.preference.FileFieldEditor;
+import org.eclipse.jface.preference.IPreferenceStore;
+import org.eclipse.jface.preference.PreferenceConverter;
+import org.eclipse.jface.preference.PreferencePage;
+import org.eclipse.jface.text.source.ISourceViewer;
+import org.eclipse.swt.SWT;
+import org.eclipse.swt.custom.StyledText;
+import org.eclipse.swt.events.SelectionEvent;
+import org.eclipse.swt.events.SelectionListener;
+import org.eclipse.swt.graphics.Color;
+import org.eclipse.swt.graphics.RGB;
+import org.eclipse.swt.layout.GridData;
+import org.eclipse.swt.layout.GridLayout;
+import org.eclipse.swt.widgets.Button;
+import org.eclipse.swt.widgets.Composite;
+import org.eclipse.swt.widgets.Control;
+import org.eclipse.swt.widgets.Display;
+import org.eclipse.swt.widgets.Group;
+import org.eclipse.swt.widgets.Label;
+import org.eclipse.swt.widgets.List;
+import org.eclipse.ui.IWorkbench;
+import org.eclipse.ui.IWorkbenchPreferencePage;
+
+/*
+ * The preference page for setting the PHP Editor options.
+ */
+public class PHPSyntaxEditorPreferencePage extends PreferencePage implements IWorkbenchPreferencePage {
+
+  public final OverlayPreferenceStore.OverlayKey[] Keys =
+    new OverlayPreferenceStore.OverlayKey[] {
+      new OverlayPreferenceStore.OverlayKey(OverlayPreferenceStore.STRING, IPreferenceConstants.PHP_MULTILINE_COMMENT),
+      new OverlayPreferenceStore.OverlayKey(OverlayPreferenceStore.BOOLEAN, IPreferenceConstants.PHP_MULTILINE_COMMENT_BOLD),
+      new OverlayPreferenceStore.OverlayKey(OverlayPreferenceStore.BOOLEAN, IPreferenceConstants.PHP_MULTILINE_COMMENT_ITALIC),
+      new OverlayPreferenceStore.OverlayKey(OverlayPreferenceStore.BOOLEAN, IPreferenceConstants.PHP_MULTILINE_COMMENT_UNDERLINE),
+      new OverlayPreferenceStore.OverlayKey(OverlayPreferenceStore.STRING, IPreferenceConstants.PHP_SINGLELINE_COMMENT),
+      new OverlayPreferenceStore.OverlayKey(OverlayPreferenceStore.BOOLEAN, IPreferenceConstants.PHP_SINGLELINE_COMMENT_BOLD),
+      new OverlayPreferenceStore.OverlayKey(OverlayPreferenceStore.BOOLEAN, IPreferenceConstants.PHP_SINGLELINE_COMMENT_ITALIC),
+      new OverlayPreferenceStore.OverlayKey(OverlayPreferenceStore.BOOLEAN, IPreferenceConstants.PHP_SINGLELINE_COMMENT_UNDERLINE),
+      new OverlayPreferenceStore.OverlayKey(OverlayPreferenceStore.STRING, IPreferenceConstants.PHP_KEYWORD),
+      new OverlayPreferenceStore.OverlayKey(OverlayPreferenceStore.BOOLEAN, IPreferenceConstants.PHP_KEYWORD_BOLD),
+      new OverlayPreferenceStore.OverlayKey(OverlayPreferenceStore.BOOLEAN, IPreferenceConstants.PHP_KEYWORD_ITALIC),
+      new OverlayPreferenceStore.OverlayKey(OverlayPreferenceStore.BOOLEAN, IPreferenceConstants.PHP_KEYWORD_UNDERLINE),
+      new OverlayPreferenceStore.OverlayKey(OverlayPreferenceStore.STRING, IPreferenceConstants.PHP_VARIABLE),
+      new OverlayPreferenceStore.OverlayKey(OverlayPreferenceStore.BOOLEAN, IPreferenceConstants.PHP_VARIABLE_BOLD),
+      new OverlayPreferenceStore.OverlayKey(OverlayPreferenceStore.BOOLEAN, IPreferenceConstants.PHP_VARIABLE_ITALIC),
+      new OverlayPreferenceStore.OverlayKey(OverlayPreferenceStore.BOOLEAN, IPreferenceConstants.PHP_VARIABLE_UNDERLINE),
+      new OverlayPreferenceStore.OverlayKey(OverlayPreferenceStore.STRING, IPreferenceConstants.PHP_TYPE),
+      new OverlayPreferenceStore.OverlayKey(OverlayPreferenceStore.BOOLEAN, IPreferenceConstants.PHP_TYPE_BOLD),
+      new OverlayPreferenceStore.OverlayKey(OverlayPreferenceStore.BOOLEAN, IPreferenceConstants.PHP_TYPE_ITALIC),
+      new OverlayPreferenceStore.OverlayKey(OverlayPreferenceStore.BOOLEAN, IPreferenceConstants.PHP_TYPE_UNDERLINE),
+      new OverlayPreferenceStore.OverlayKey(OverlayPreferenceStore.STRING, IPreferenceConstants.PHP_CONSTANT),
+      new OverlayPreferenceStore.OverlayKey(OverlayPreferenceStore.BOOLEAN, IPreferenceConstants.PHP_CONSTANT_BOLD),
+      new OverlayPreferenceStore.OverlayKey(OverlayPreferenceStore.BOOLEAN, IPreferenceConstants.PHP_CONSTANT_ITALIC),
+      new OverlayPreferenceStore.OverlayKey(OverlayPreferenceStore.BOOLEAN, IPreferenceConstants.PHP_CONSTANT_UNDERLINE),
+      new OverlayPreferenceStore.OverlayKey(OverlayPreferenceStore.STRING, IPreferenceConstants.PHP_FUNCTIONNAME),
+      new OverlayPreferenceStore.OverlayKey(OverlayPreferenceStore.BOOLEAN, IPreferenceConstants.PHP_FUNCTIONNAME_BOLD),
+      new OverlayPreferenceStore.OverlayKey(OverlayPreferenceStore.BOOLEAN, IPreferenceConstants.PHP_FUNCTIONNAME_ITALIC),
+      new OverlayPreferenceStore.OverlayKey(OverlayPreferenceStore.BOOLEAN, IPreferenceConstants.PHP_FUNCTIONNAME_UNDERLINE),
+      new OverlayPreferenceStore.OverlayKey(OverlayPreferenceStore.STRING, IPreferenceConstants.PHP_STRING),
+      new OverlayPreferenceStore.OverlayKey(OverlayPreferenceStore.BOOLEAN, IPreferenceConstants.PHP_STRING_BOLD),
+      new OverlayPreferenceStore.OverlayKey(OverlayPreferenceStore.BOOLEAN, IPreferenceConstants.PHP_STRING_ITALIC),
+      new OverlayPreferenceStore.OverlayKey(OverlayPreferenceStore.BOOLEAN, IPreferenceConstants.PHP_STRING_UNDERLINE),
+      new OverlayPreferenceStore.OverlayKey(OverlayPreferenceStore.STRING, IPreferenceConstants.PHP_DEFAULT),
+      new OverlayPreferenceStore.OverlayKey(OverlayPreferenceStore.BOOLEAN, IPreferenceConstants.PHP_DEFAULT_BOLD),
+      new OverlayPreferenceStore.OverlayKey(OverlayPreferenceStore.BOOLEAN, IPreferenceConstants.PHP_DEFAULT_ITALIC),
+      new OverlayPreferenceStore.OverlayKey(OverlayPreferenceStore.BOOLEAN, IPreferenceConstants.PHP_DEFAULT_UNDERLINE),
+      new OverlayPreferenceStore.OverlayKey(OverlayPreferenceStore.STRING, IPreferenceConstants.PHP_USERDEF_XMLFILE)};
+
+  private final String[][] SyntaxColorListModel =
+    new String[][] {
+      {
+        PHPPreferencesMessages.getString("PHPEditorSyntaxPreferencePage.multiLineComment"),
+        IPreferenceConstants.PHP_MULTILINE_COMMENT },
+      {
+      PHPPreferencesMessages.getString("PHPEditorSyntaxPreferencePage.singleLineComment"),
+        IPreferenceConstants.PHP_SINGLELINE_COMMENT },
+        {
+      PHPPreferencesMessages.getString("PHPEditorSyntaxPreferencePage.keywords"), IPreferenceConstants.PHP_KEYWORD }, {
+      PHPPreferencesMessages.getString("PHPEditorSyntaxPreferencePage.variables"), IPreferenceConstants.PHP_VARIABLE }, {
+      PHPPreferencesMessages.getString("PHPEditorSyntaxPreferencePage.types"), IPreferenceConstants.PHP_TYPE }, {
+      PHPPreferencesMessages.getString("PHPEditorSyntaxPreferencePage.functions"), IPreferenceConstants.PHP_FUNCTIONNAME }, {
+      PHPPreferencesMessages.getString("PHPEditorSyntaxPreferencePage.constants"), IPreferenceConstants.PHP_CONSTANT }, {
+      PHPPreferencesMessages.getString("PHPEditorSyntaxPreferencePage.strings"), IPreferenceConstants.PHP_STRING }, {
+      PHPPreferencesMessages.getString("PHPEditorSyntaxPreferencePage.others"), IPreferenceConstants.PHP_DEFAULT }
+  };
+
+  private OverlayPreferenceStore OverlayStore;
+
+  private Map ColorButtons = new HashMap();
+  private SelectionListener ColorButtonListener = new SelectionListener() {
+    public void widgetDefaultSelected(SelectionEvent e) {
+    }
+    public void widgetSelected(SelectionEvent e) {
+      ColorEditor editor = (ColorEditor) e.widget.getData();
+      PreferenceConverter.setValue(OverlayStore, (String) ColorButtons.get(editor), editor.getColorValue());
+    }
+  };
+
+  private Map CheckBoxes = new HashMap();
+  private SelectionListener CheckBoxListener = new SelectionListener() {
+    public void widgetDefaultSelected(SelectionEvent e) {
+    }
+    public void widgetSelected(SelectionEvent e) {
+      Button button = (Button) e.widget;
+      OverlayStore.setValue((String) CheckBoxes.get(button), button.getSelection());
+    }
+  };
+
+  private List SyntaxColorList;
+  private ColorEditor SyntaxForegroundColorEditor;
+  private Button BoldCheckBox;
+  private Button ItalicCheckBox;
+  private Button UnderlineCheckBox;
+  private FileFieldEditor userdefPHPSyntaxFileFFE;
+
+  public PHPSyntaxEditorPreferencePage() {
+    setDescription(PHPPreferencesMessages.getString("PHPEditorSyntaxPreferencePage.description")); //$NON-NLS-1$
+    setPreferenceStore(PHPeclipsePlugin.getDefault().getPreferenceStore());
+    OverlayStore = new OverlayPreferenceStore(getPreferenceStore(), Keys);
+  }
+
+  public void init(IWorkbench workbench) {
+  }
+
+  public void createControl(Composite parent) {
+    super.createControl(parent);
+  }
+
+  private void handleSyntaxColorListSelection() {
+    int i = SyntaxColorList.getSelectionIndex();
+    String key = SyntaxColorListModel[i][1];
+    RGB rgb = PreferenceConverter.getColor(OverlayStore, key);
+    SyntaxForegroundColorEditor.setColorValue(rgb);
+    BoldCheckBox.setSelection(OverlayStore.getBoolean(key + "_bold"));
+    ItalicCheckBox.setSelection(OverlayStore.getBoolean(key + "_italic"));
+    UnderlineCheckBox.setSelection(OverlayStore.getBoolean(key + "_underline"));
+  }
+
+  private Control createSyntaxPage(Composite parent) {
+
+    Composite colorComposite = new Composite(parent, SWT.NULL);
+    colorComposite.setLayout(new GridLayout());
+
+    Label label = new Label(colorComposite, SWT.LEFT);
+    label.setText(PHPPreferencesMessages.getString("PHPEditorSyntaxPreferencePage.syntax")); //$NON-NLS-1$
+    label.setLayoutData(new GridData(GridData.FILL_HORIZONTAL));
+
+    Composite editorComposite = new Composite(colorComposite, SWT.NONE);
+    GridLayout layout = new GridLayout();
+    layout.numColumns = 2;
+    layout.marginHeight = 0;
+    layout.marginWidth = 0;
+    editorComposite.setLayout(layout);
+    GridData gd = new GridData(GridData.FILL_BOTH);
+    editorComposite.setLayoutData(gd);
+
+    SyntaxColorList = new List(editorComposite, SWT.SINGLE | SWT.V_SCROLL | SWT.BORDER);
+    gd = new GridData(GridData.FILL_BOTH);
+    gd.heightHint = convertHeightInCharsToPixels(5);
+    SyntaxColorList.setLayoutData(gd);
+
+    Composite stylesComposite = new Composite(editorComposite, SWT.NONE);
+    layout = new GridLayout();
+    layout.marginHeight = 0;
+    layout.marginWidth = 0;
+    layout.numColumns = 2;
+    stylesComposite.setLayout(layout);
+    stylesComposite.setLayoutData(new GridData(GridData.FILL_BOTH));
+
+    label = new Label(stylesComposite, SWT.LEFT);
+    label.setText(PHPPreferencesMessages.getString("PHPEditorSyntaxPreferencePage.color")); //$NON-NLS-1$
+    gd = new GridData();
+    gd.horizontalAlignment = GridData.BEGINNING;
+    label.setLayoutData(gd);
+
+    SyntaxForegroundColorEditor = new ColorEditor(stylesComposite);
+    Button foregroundColorButton = SyntaxForegroundColorEditor.getButton();
+    gd = new GridData(GridData.FILL_HORIZONTAL);
+    gd.horizontalAlignment = GridData.BEGINNING;
+    foregroundColorButton.setLayoutData(gd);
+
+    BoldCheckBox = new Button(stylesComposite, SWT.CHECK);
+    BoldCheckBox.setText(PHPPreferencesMessages.getString("PHPEditorSyntaxPreferencePage.bold")); //$NON-NLS-1$
+    gd = new GridData(GridData.FILL_HORIZONTAL);
+    gd.horizontalAlignment = GridData.BEGINNING;
+    gd.horizontalSpan = 2;
+    BoldCheckBox.setLayoutData(gd);
+    
+    ItalicCheckBox = new Button(stylesComposite, SWT.CHECK);
+    ItalicCheckBox.setText(PHPPreferencesMessages.getString("PHPEditorSyntaxPreferencePage.italic")); //$NON-NLS-1$
+    ItalicCheckBox.setEnabled(false);
+    gd = new GridData(GridData.FILL_HORIZONTAL);
+    gd.horizontalAlignment = GridData.BEGINNING;
+    gd.horizontalSpan = 2;
+    ItalicCheckBox.setLayoutData(gd);
+    
+    UnderlineCheckBox = new Button(stylesComposite, SWT.CHECK);
+    UnderlineCheckBox.setText(PHPPreferencesMessages.getString("PHPEditorSyntaxPreferencePage.underline")); //$NON-NLS-1$
+    UnderlineCheckBox.setEnabled(false);
+    gd = new GridData(GridData.FILL_HORIZONTAL);
+    gd.horizontalAlignment = GridData.BEGINNING;
+    gd.horizontalSpan = 2;
+    UnderlineCheckBox.setLayoutData(gd);
+
+    Composite customSyntaxComposite = new Composite(colorComposite, SWT.NONE);
+    layout = new GridLayout();
+    layout.marginHeight = 0;
+    layout.marginWidth = 0;
+    layout.numColumns = 3;
+    stylesComposite.setLayout(layout);
+    stylesComposite.setLayoutData(new GridData(GridData.FILL_BOTH));
+
+    userdefPHPSyntaxFileFFE =
+      new FileFieldEditor(
+        IPreferenceConstants.PHP_USERDEF_XMLFILE,
+        PHPPreferencesMessages.getString("PHPEditorSyntaxPreferencePage.syntaxdialog"),
+        colorComposite);
+    userdefPHPSyntaxFileFFE.setPreferencePage(this);
+    userdefPHPSyntaxFileFFE.setPreferenceStore(getPreferenceStore());
+    userdefPHPSyntaxFileFFE.load();
+
+    SyntaxColorList.addSelectionListener(new SelectionListener() {
+      public void widgetDefaultSelected(SelectionEvent e) {
+        // do nothing
+      }
+      public void widgetSelected(SelectionEvent e) {
+        handleSyntaxColorListSelection();
+      }
+    });
+
+    foregroundColorButton.addSelectionListener(new SelectionListener() {
+      public void widgetDefaultSelected(SelectionEvent e) {
+        // do nothing
+      }
+      public void widgetSelected(SelectionEvent e) {
+        int i = SyntaxColorList.getSelectionIndex();
+        String key = SyntaxColorListModel[i][1];
+
+        PreferenceConverter.setValue(OverlayStore, key, SyntaxForegroundColorEditor.getColorValue());
+      }
+    });
+    BoldCheckBox.addSelectionListener(new SelectionListener() {
+      public void widgetDefaultSelected(SelectionEvent e) {
+        // do nothing
+      }
+      public void widgetSelected(SelectionEvent e) {
+        int i = SyntaxColorList.getSelectionIndex();
+        String key = SyntaxColorListModel[i][1];
+        OverlayStore.setValue(key + "_bold", BoldCheckBox.getSelection());
+      }
+    });
+
+    ItalicCheckBox.addSelectionListener(new SelectionListener() {
+      public void widgetDefaultSelected(SelectionEvent e) {
+        // do nothing
+      }
+      public void widgetSelected(SelectionEvent e) {
+        int i = SyntaxColorList.getSelectionIndex();
+        String key = SyntaxColorListModel[i][1];
+        OverlayStore.setValue(key + "_italic", ItalicCheckBox.getSelection());
+      }
+    });
+
+    UnderlineCheckBox.addSelectionListener(new SelectionListener() {
+      public void widgetDefaultSelected(SelectionEvent e) {
+        // do nothing
+      }
+      public void widgetSelected(SelectionEvent e) {
+        int i = SyntaxColorList.getSelectionIndex();
+        String key = SyntaxColorListModel[i][1];
+        OverlayStore.setValue(key + "_underline", UnderlineCheckBox.getSelection());
+      }
+    });
+    return colorComposite;
+  }
+
+  private void initializeViewerColors(ISourceViewer viewer) {
+
+    IPreferenceStore store = OverlayStore;
+    if (store != null) {
+
+      StyledText styledText = viewer.getTextWidget();
+    }
+  }
+
+  private Color createColor(IPreferenceStore store, String key, Display display) {
+    RGB rgb = null;
+    if (store.contains(key)) {
+      if (store.isDefault(key))
+        rgb = PreferenceConverter.getDefaultColor(store, key);
+      else
+        rgb = PreferenceConverter.getColor(store, key);
+      if (rgb != null)
+        return new Color(display, rgb);
+    }
+    return null;
+  }
+
+  private static void setEnabled(Control control, boolean enable) {
+    control.setEnabled(enable);
+    if (control instanceof Composite) {
+      Composite composite = (Composite) control;
+      Control[] children = composite.getChildren();
+      for (int i = 0; i < children.length; i++)
+        setEnabled(children[i], enable);
+    }
+  }
+
+  private static void indent(Control control) {
+    GridData gridData = new GridData();
+    gridData.horizontalIndent = 20;
+    control.setLayoutData(gridData);
+  }
+
+  private static void createDependency(final Button master, final Control slave) {
+    indent(slave);
+    master.addSelectionListener(new SelectionListener() {
+      public void widgetSelected(SelectionEvent e) {
+        slave.setEnabled(master.getSelection());
+      }
+
+      public void widgetDefaultSelected(SelectionEvent e) {
+      }
+    });
+  }
+
+  protected Control createContents(Composite parent) {
+    OverlayStore.load();
+    OverlayStore.start();
+    //Create overall composite
+    Composite composite = new Composite(parent, SWT.NONE);
+    GridLayout layout = new GridLayout();
+    layout.marginHeight = 0;
+    layout.marginWidth = 0;
+    composite.setLayout(layout);
+    Composite syntaxComposite = new Composite(composite, SWT.NULL);
+    syntaxComposite.setLayout(new GridLayout());
+    layout = new GridLayout();
+    layout.numColumns = 3;
+    Group syntaxGroup = new Group(syntaxComposite, SWT.NONE);
+    syntaxGroup.setText(PHPPreferencesMessages.getString("PHPEditorSyntaxPreferencePage.foreground"));
+    syntaxGroup.setLayoutData(new GridData(GridData.FILL_HORIZONTAL));
+    syntaxGroup.setLayout(layout);
+    createSyntaxPage(syntaxGroup);
+    
+    initialize();
+    return composite;
+  }
+
+  private void initialize() {
+    initializeFields();
+    for (int i = 0; i < SyntaxColorListModel.length; i++)
+      SyntaxColorList.add(SyntaxColorListModel[i][0]);
+    SyntaxColorList.getDisplay().asyncExec(new Runnable() {
+      public void run() {
+        if (SyntaxColorList != null && !SyntaxColorList.isDisposed()) {
+          SyntaxColorList.select(0);
+          handleSyntaxColorListSelection();
+        }
+      }
+    });
+  }
+
+  private void initializeFields() {
+
+    Iterator e = ColorButtons.keySet().iterator();
+    while (e.hasNext()) {
+      ColorEditor c = (ColorEditor) e.next();
+      String key = (String) ColorButtons.get(c);
+      RGB rgb = PreferenceConverter.getColor(OverlayStore, key);
+      c.setColorValue(rgb);
+    }
+
+    e = CheckBoxes.keySet().iterator();
+    while (e.hasNext()) {
+      Button b = (Button) e.next();
+      String key = (String) CheckBoxes.get(b);
+      b.setSelection(OverlayStore.getBoolean(key));
+    }
+  }
+
+  public boolean performOk() {
+    OverlayStore.propagate();
+    IPreferenceStore store = getPreferenceStore();
+    PHPeclipsePlugin.getDefault().savePluginPreferences();
+    userdefPHPSyntaxFileFFE.store();
+    return true;
+  }
+
+  protected void performDefaults() {
+    OverlayStore.loadDefaults();
+    initializeFields();
+    handleSyntaxColorListSelection();
+    userdefPHPSyntaxFileFFE.loadDefault();
+    super.performDefaults();
+  }
+
+  public void dispose() {
+    if (OverlayStore != null) {
+      OverlayStore.stop();
+      OverlayStore = null;
+    }
+    super.dispose();
+  }
+
+  private Control addColorButton(Composite composite, String label, String key, int indentation) {
+    Label labelControl = new Label(composite, SWT.NONE);
+    labelControl.setText(label);
+    GridData gd = new GridData(GridData.HORIZONTAL_ALIGN_BEGINNING);
+    gd.horizontalIndent = indentation;
+    labelControl.setLayoutData(gd);
+    ColorEditor editor = new ColorEditor(composite);
+    Button button = editor.getButton();
+    button.setData(editor);
+    gd = new GridData(GridData.HORIZONTAL_ALIGN_BEGINNING);
+    button.setLayoutData(gd);
+    button.addSelectionListener(ColorButtonListener);
+    ColorButtons.put(editor, key);
+    return composite;
+  }
+
+  private Button addCheckBox(Composite parent, String label, String key, int indentation) {
+    Button checkBox = new Button(parent, SWT.CHECK);
+    checkBox.setText(label);
+    GridData gd = new GridData(GridData.HORIZONTAL_ALIGN_BEGINNING);
+    gd.horizontalIndent = indentation;
+    gd.horizontalSpan = 2;
+    checkBox.setLayoutData(gd);
+    checkBox.addSelectionListener(CheckBoxListener);
+    CheckBoxes.put(checkBox, key);
+    return checkBox;
+  }
+
+  private void updateStatus(IStatus status) {
+  }
+
+  /**
+   * @deprecated Inline to avoid reference to preference page
+   */
+  public static boolean indicateQuixFixableProblems() {
+    //         return PreferenceConstants.getPreferenceStore().getBoolean(PreferenceConstants.EDITOR_CORRECTION_INDICATION);
+    return false;
+  }
+
+  /**
+   * @deprecated Inline to avoid reference to preference page
+   */
+  static public boolean synchronizeOutlineOnCursorMove() {
+    //         return PreferenceConstants.getPreferenceStore().getBoolean(PreferenceConstants.EDITOR_SYNC_OUTLINE_ON_CURSOR_MOVE);
+    return false;
+  }
+
+}
\ No newline at end of file
diff --git a/net.sourceforge.phpeclipse/src/net/sourceforge/phpeclipse/PHPSyntaxPreferencePage.java b/net.sourceforge.phpeclipse/src/net/sourceforge/phpeclipse/PHPSyntaxPreferencePage.java
deleted file mode 100644 (file)
index a182244..0000000
+++ /dev/null
@@ -1,64 +0,0 @@
-/**********************************************************************
-Copyright (c) 2000, 2002 IBM Corp. and others.
-All rights reserved. This program and the accompanying materials
-are made available under the terms of the Common Public License v1.0
-which accompanies this distribution, and is available at
-http://www.eclipse.org/legal/cpl-v10.html
-
-Contributors:
-    IBM Corporation - Initial implementation
-    Klaus Hartlage - www.eclipseproject.de
-**********************************************************************/
-package net.sourceforge.phpeclipse;
-
-import org.eclipse.jface.preference.BooleanFieldEditor;
-import org.eclipse.jface.preference.ColorFieldEditor;
-import org.eclipse.jface.preference.FieldEditorPreferencePage;
-import org.eclipse.jface.preference.IPreferenceStore;
-import org.eclipse.ui.IWorkbench;
-import org.eclipse.ui.IWorkbenchPreferencePage;
-
-/**
- * 
- * @author khartlage
- */
-public class PHPSyntaxPreferencePage extends FieldEditorPreferencePage implements IWorkbenchPreferencePage, IPreferenceConstants {
-
-  public PHPSyntaxPreferencePage() {
-    super(FieldEditorPreferencePage.GRID);
-    //Initialize the preference store we wish to use
-    setPreferenceStore(PHPeclipsePlugin.getDefault().getPreferenceStore());
-  }
-
-  protected void createFieldEditors() {
-    final IPreferenceStore store = PHPeclipsePlugin.getDefault().getPreferenceStore();
-
-    BooleanFieldEditor showLineNumbers =
-      new BooleanFieldEditor(PHPeclipsePlugin.LINE_NUMBER_RULER, "Show line numbers", getFieldEditorParent());
-    this.addField(showLineNumbers);
-
-    ColorFieldEditor multilineComment =
-      new ColorFieldEditor(PHP_MULTILINE_COMMENT, "Multi-line comment:", this.getFieldEditorParent());
-    this.addField(multilineComment);
-    ColorFieldEditor singlelineComment =
-      new ColorFieldEditor(PHP_SINGLELINE_COMMENT, "Single-line comment:", this.getFieldEditorParent());
-    this.addField(singlelineComment);
-    ColorFieldEditor keyWords = new ColorFieldEditor(PHP_KEYWORD, "Keywords:", this.getFieldEditorParent());
-    this.addField(keyWords);
-    ColorFieldEditor variables = new ColorFieldEditor(PHP_VARIABLE, "Variables:", this.getFieldEditorParent());
-    this.addField(variables);
-    ColorFieldEditor types = new ColorFieldEditor(PHP_FUNCTIONNAME, "Built-in functions:", this.getFieldEditorParent());
-    this.addField(types);
-    ColorFieldEditor strings = new ColorFieldEditor(PHP_STRING, "Strings:", this.getFieldEditorParent());
-    this.addField(strings);
-    ColorFieldEditor others = new ColorFieldEditor(PHP_DEFAULT, "Others:", this.getFieldEditorParent());
-    this.addField(others);
-  }
-
-  /**
-   * @see IWorkbenchPreferencePage#init
-   */
-  public void init(IWorkbench workbench) {
-  }
-
-}
index 41eae55..0cb4ae8 100644 (file)
@@ -11,16 +11,13 @@ Contributors:
 **********************************************************************/
 package net.sourceforge.phpeclipse;
 
-import java.util.MissingResourceException;
-import java.util.ResourceBundle;
-
 import net.sourceforge.phpdt.internal.ui.preferences.TemplatePreferencePage;
 import net.sourceforge.phpdt.internal.ui.viewsupport.ImageDescriptorRegistry;
 import net.sourceforge.phpeclipse.phpeditor.PHPDocumentProvider;
-import net.sourceforge.phpeclipse.phpeditor.util.PHPColorProvider;
 import net.sourceforge.phpeclipse.resourcesview.PHPElement;
 import net.sourceforge.phpeclipse.resourcesview.PHPElementAdapterFactory;
 import net.sourceforge.phpeclipse.resourcesview.ResourceAdapterFactory;
+
 import org.eclipse.core.resources.IResource;
 import org.eclipse.core.resources.IWorkspace;
 import org.eclipse.core.resources.ResourcesPlugin;
@@ -39,6 +36,9 @@ import org.eclipse.ui.IWorkbenchPage;
 import org.eclipse.ui.IWorkbenchWindow;
 import org.eclipse.ui.plugin.AbstractUIPlugin;
 
+import net.sourceforge.phpeclipse.phpeditor.PHPSyntaxRdr;
+import net.sourceforge.phpeclipse.phpeditor.util.PHPColorProvider;
+
 /**
  * The main plugin class to be used in the desktop.
  */
@@ -60,7 +60,7 @@ public class PHPeclipsePlugin extends AbstractUIPlugin implements IPreferenceCon
   public static final String PLUGIN_ID = "net.sourceforge.phpeclipse"; //$NON-NLS-1$
   public final static String PHP_NATURE_ID = PLUGIN_ID + ".phpnature";
   public static final String PHP_RESOURCES_VIEW_ID = PLUGIN_ID + ".resourcesview.ViewPHPResources"; //$NON-NLS-1$
+
   //The shared instance.
   private static PHPeclipsePlugin plugin;
   //Resource bundle.
@@ -100,11 +100,11 @@ public class PHPeclipsePlugin extends AbstractUIPlugin implements IPreferenceCon
     super(descriptor);
     plugin = this;
     setJVM();
-//    try {
-//      resourceBundle = ResourceBundle.getBundle("net.sourceforge.PHPeclipsePluginResources");
-//    } catch (MissingResourceException x) {
-//      resourceBundle = null;
-//    }
+    //    try {
+    //      resourceBundle = ResourceBundle.getBundle("net.sourceforge.PHPeclipsePluginResources");
+    //    } catch (MissingResourceException x) {
+    //      resourceBundle = null;
+    //    }
   }
 
   public static ImageDescriptorRegistry getImageDescriptorRegistry() {
@@ -113,7 +113,7 @@ public class PHPeclipsePlugin extends AbstractUIPlugin implements IPreferenceCon
 
   private ImageDescriptorRegistry internalGetImageDescriptorRegistry() {
     if (fImageDescriptorRegistry == null)
-      fImageDescriptorRegistry= new ImageDescriptorRegistry();
+      fImageDescriptorRegistry = new ImageDescriptorRegistry();
     return fImageDescriptorRegistry;
   }
   // @TODO: refactor this into a better method name !
@@ -174,7 +174,7 @@ public class PHPeclipsePlugin extends AbstractUIPlugin implements IPreferenceCon
   }
 
   public static IWorkbenchPage getActivePage() {
-    return getDefault().getActivePage();
+    return PHPeclipsePlugin.getActivePage();
   }
 
   public static IWorkbenchWindow getActiveWorkbenchWindow() {
@@ -210,9 +210,10 @@ public class PHPeclipsePlugin extends AbstractUIPlugin implements IPreferenceCon
   //  public static void log(Throwable e) {
   //    log(new Status(IStatus.ERROR, getPluginId(), JavaStatusConstants.INTERNAL_ERROR, JavaUIMessages.getString("JavaPlugin.internal_error"), e)); //$NON-NLS-1$
   //  }
+
   public static void log(int severity, String message) {
-    Status status = new Status(severity, PLUGIN_ID, IStatus.OK, message, null) ;
-    log(status) ;
+    Status status = new Status(severity, PLUGIN_ID, IStatus.OK, message, null);
+    log(status);
   }
   public static void log(Throwable e) {
     log(new Status(IStatus.ERROR, PLUGIN_ID, IStatus.ERROR, "PHPeclipsePlugin.internalErrorOccurred", e)); //$NON-NLS-1$
@@ -229,21 +230,21 @@ public class PHPeclipsePlugin extends AbstractUIPlugin implements IPreferenceCon
    * Returns the string from the plugin's resource bundle,
    * or 'key' if not found.
    */
-//  public static String getResourceString(String key) {
-//    ResourceBundle bundle = PHPeclipsePlugin.getDefault().getResourceBundle();
-//    try {
-//      return bundle.getString(key);
-//    } catch (MissingResourceException e) {
-//      return key;
-//    }
-//  }
+  //  public static String getResourceString(String key) {
+  //    ResourceBundle bundle = PHPeclipsePlugin.getDefault().getResourceBundle();
+  //    try {
+  //      return bundle.getString(key);
+  //    } catch (MissingResourceException e) {
+  //      return key;
+  //    }
+  //  }
 
   /**
    * Returns the plugin's resource bundle,
    */
-//  public ResourceBundle getResourceBundle() {
-//    return resourceBundle;
-//  }
+  //  public ResourceBundle getResourceBundle() {
+  //    return resourceBundle;
+  //  }
 
   protected void initializeDefaultPreferences(IPreferenceStore store) {
     // windows preferences:
@@ -258,9 +259,7 @@ public class PHPeclipsePlugin extends AbstractUIPlugin implements IPreferenceCon
     } else {
       store.setDefault(EXTERNAL_BROWSER_PREF, "netscape {0}");
     }
-    store.setDefault(DOCUMENTROOT_PREF, getWorkspace().getRoot().getLocation().toString() );
-    // store.setDefault(DOCUMENTROOT_PREF, "c:\\eclipse\\workspace");  // WIN_32
-    // store.setDefault(DOCUMENTROOT_PREF, "/eclipse/workspace");      // UNIX
+    store.setDefault(DOCUMENTROOT_PREF, getWorkspace().getRoot().getLocation().toString());
     if ((jvm == WINDOWS_9x) || (jvm == WINDOWS_NT)) {
       store.setDefault(EXTERNAL_PARSER_PREF, "c:\\apache\\php\\php -l -f {0}");
       store.setDefault(MYSQL_PREF, "c:\\apache\\mysql\\bin\\mysqld.exe --standalone");
@@ -273,43 +272,55 @@ public class PHPeclipsePlugin extends AbstractUIPlugin implements IPreferenceCon
       store.setDefault(APACHE_START_PREF, "/apache/apache -c \"DocumentRoot \"{0}\"\"");
       store.setDefault(APACHE_STOP_PREF, "/apache/apache.exe -k shutdown");
       store.setDefault(APACHE_RESTART_PREF, "/apache/apache -k restart");
+
     }
 
     store.setDefault(PHP_PARSER_DEFAULT, PHP_EXTERNAL_PARSER);
     store.setDefault(PHP_INTERNAL_PARSER, "false");
     store.setDefault(PHP_EXTERNAL_PARSER, "true");
-    
+
     store.setDefault(PHP_PARSE_ON_SAVE, "true");
-    
+
     // show line numbers:
     store.setDefault(LINE_NUMBER_RULER, "false");
     store.setDefault(FORMATTER_TAB_SIZE, "4");
-    
+
     // php syntax highlighting
+    store.setDefault(PHP_USERDEF_XMLFILE, ""); //assume there is none  chooA
+
     PreferenceConverter.setDefault(store, PHP_MULTILINE_COMMENT, PHPColorProvider.MULTI_LINE_COMMENT);
     PreferenceConverter.setDefault(store, PHP_SINGLELINE_COMMENT, PHPColorProvider.SINGLE_LINE_COMMENT);
     PreferenceConverter.setDefault(store, PHP_KEYWORD, PHPColorProvider.KEYWORD);
     PreferenceConverter.setDefault(store, PHP_VARIABLE, PHPColorProvider.VARIABLE);
     PreferenceConverter.setDefault(store, PHP_FUNCTIONNAME, PHPColorProvider.FUNCTION_NAME);
-    PreferenceConverter.setDefault(store, PHP_STRING, PHPColorProvider.STRING); 
+    PreferenceConverter.setDefault(store, PHP_CONSTANT, PHPColorProvider.CONSTANT);
+    PreferenceConverter.setDefault(store, PHP_TYPE, PHPColorProvider.TYPE);
+    PreferenceConverter.setDefault(store, PHP_STRING, PHPColorProvider.STRING);
     PreferenceConverter.setDefault(store, PHP_DEFAULT, PHPColorProvider.DEFAULT);
+    PreferenceConverter.setDefault(store, PHP_EDITOR_BACKGROUND, PHPColorProvider.BACKGROUND);
     PreferenceConverter.setDefault(store, LINKED_POSITION_COLOR, PHPColorProvider.LINKED_POSITION_COLOR);
     PreferenceConverter.setDefault(store, LINE_NUMBER_COLOR, PHPColorProvider.LINE_NUMBER_COLOR);
 
-    store.setDefault(PREFERENCE_COLOR_BACKGROUND_SYSTEM_DEFAULT, "true"); //$NON-NLS-1$
+    store.setDefault(PREFERENCE_COLOR_BACKGROUND_SYSTEM_DEFAULT, "true");
     PreferenceConverter.setDefault(store, PREFERENCE_COLOR_BACKGROUND, PHPColorProvider.BACKGROUND_COLOR);
 
+    //language stuff
+    store.setDefault(RESOURCE_BUNDLE, LANGUAGE_DEFAULT);
+    store.setDefault(RESOURCE_BUNDLE_EN_GB, "true");
+    store.setDefault(RESOURCE_BUNDLE_DE, "false");
+    store.setDefault(RESOURCE_BUNDLE_FR, "false");
+
     store.setDefault(PHP_OUTLINE_CLASS, "true"); //$NON-NLS-1$
     store.setDefault(PHP_OUTLINE_FUNC, "true"); //$NON-NLS-1$
     store.setDefault(PHP_OUTLINE_VAR, "true"); //$NON-NLS-1$ 
   
-    TemplatePreferencePage.initDefaults(store); 
+    TemplatePreferencePage.initDefaults(store);
+    new PHPSyntaxRdr(); //this will initialize the static fields in the syntaxrdr class
   }
-  
-    public void startup() throws CoreException {
+
+  public void startup() throws CoreException {
     super.startup();
-    IAdapterManager manager= Platform.getAdapterManager();
+    IAdapterManager manager = Platform.getAdapterManager();
     manager.registerAdapters(new PHPElementAdapterFactory(), PHPElement.class);
     manager.registerAdapters(new ResourceAdapterFactory(), IResource.class);
   }
diff --git a/net.sourceforge.phpeclipse/src/net/sourceforge/phpeclipse/newPHPPreferencesMessages_DE.properties b/net.sourceforge.phpeclipse/src/net/sourceforge/phpeclipse/newPHPPreferencesMessages_DE.properties
new file mode 100644 (file)
index 0000000..c837737
--- /dev/null
@@ -0,0 +1,65 @@
+#########################################
+# PHPProjectLibraryPage
+#########################################
+
+PHPProjectLibraryPage.elementNotIProject=FEHLER: Element ist kein IProject
+PHPProjectLibraryPage.project=Projekt
+PHPProjectLibraryPage.tabName=Projekte
+
+
+#########################################
+# Property Pages
+#########################################
+
+PHPProjectPropertyPage.phpProjectClosed=Das ausgewählte Projekt ist ein PHP Projekt, aber es ist geschlossen.
+PHPProjectPropertyPage.performOkExceptionDialogTitle=Kann nicht sichern
+PHPProjectPropertyPage.performOkExceptionDialogMessage=FEHLER: Kann die Projekt Eigenschaften nicht sichern
+
+#########################################
+# Preference Pages
+#########################################
+PHPBasePreferencePage.description=PHP Voreinstellungen
+PHPBasePreferencePage.websettingsGroup=Webserver Einstellungen
+PHPBasePreferencePage.websettingsGroup.localhost=Localhost
+PHPBasePreferencePage.websettingsGroup.docroot=DocumentRoot
+PHPBasePreferencePage.websettingsGroup.browser=Externes Browser Kommando
+PHPBasePreferencePage.websettingsGroup.useexternal=Benutze externen Browser
+PHPBasePreferencePage.apacheGroup=Apache Einstellungen
+PHPBasePreferencePage.apacheGroup.start=Start Apache
+PHPBasePreferencePage.apacheGroup.stop=Stop Apache
+PHPBasePreferencePage.apacheGroup.restart=Restart Apache
+PHPBasePreferencePage.mySQLGroup=MySQL Einstellungen
+PHPBasePreferencePage.mySQLGroup.command=MySQL Kommando
+PHPBasePreferencePage.parsers=Parser Einstellungen
+PHPBasePreferencePage.parsers.pos=Parse beim Sichern
+PHPBasePreferencePage.parsers.external=Externer Parser
+PHPBasePreferencePage.parsers.internal=Interner Parser
+PHPBasePreferencePage.parsers.choose=PHP Parser auswählen
+
+PHPEditorSyntaxPreferencePage.description:PHP Editor Preferences
+PHPEditorSyntaxPreferencePage.foreground:Foreground settings
+PHPEditorSyntaxPreferencePage.syntax:Syntax highlighting
+PHPEditorSyntaxPreferencePage.color:Colour
+PHPEditorSyntaxPreferencePage.bold:Bold
+PHPEditorSyntaxPreferencePage.italic:Italic
+PHPEditorSyntaxPreferencePage.underline:Underline
+PHPEditorSyntaxPreferencePage.multiLineComment=Multi-line comment
+PHPEditorSyntaxPreferencePage.singleLineComment=Single-line comment
+PHPEditorSyntaxPreferencePage.keywords=Keywords
+PHPEditorSyntaxPreferencePage.variables=Variables
+PHPEditorSyntaxPreferencePage.types=Types
+PHPEditorSyntaxPreferencePage.functions=Functions
+PHPEditorSyntaxPreferencePage.constants=Constants
+PHPEditorSyntaxPreferencePage.strings=Strings
+PHPEditorSyntaxPreferencePage.others=Others
+PHPEditorSyntaxPreferencePage.syntaxdialog=Custom PHP Syntax File:
+PHPEditorSyntaxPreferencePage.browse=Browse..
+PHPEditorSyntaxPreferencePage.textfont=Text font
+
+PHPLanguagePreferencePage.description=PHP Editor Language
+PHPLanguagePreferencePage.preflingo=PHP Language Preference
+PHPLanguagePreferencePage.choose=Choose Language
+PHPLanguagePreferencePage.english=Englisch
+PHPLanguagePreferencePage.german=Deutsch
+PHPLanguagePreferencePage.french=Frensch
+
diff --git a/net.sourceforge.phpeclipse/src/net/sourceforge/phpeclipse/newPHPPreferencesMessages_FR.properties b/net.sourceforge.phpeclipse/src/net/sourceforge/phpeclipse/newPHPPreferencesMessages_FR.properties
new file mode 100644 (file)
index 0000000..2963607
--- /dev/null
@@ -0,0 +1,65 @@
+#########################################
+# PHPProjectLibraryPage
+#########################################
+
+PHPProjectLibraryPage.elementNotIProject=ERROR: Element not IProject
+PHPProjectLibraryPage.project=Project
+PHPProjectLibraryPage.tabName=Projects
+
+
+#########################################
+# Property Pages
+#########################################
+
+PHPProjectPropertyPage.phpProjectClosed=The project selected is a PHP project, but is closed.
+PHPProjectPropertyPage.performOkExceptionDialogTitle=Unable to save
+PHPProjectPropertyPage.performOkExceptionDialogMessage=ERROR: Unable to save project properties.
+
+#########################################
+# Preference Pages
+#########################################
+PHPBasePreferencePage.description=PHP Preferences
+PHPBasePreferencePage.websettingsGroup=Webserver Settings
+PHPBasePreferencePage.websettingsGroup.localhost=Localhost
+PHPBasePreferencePage.websettingsGroup.docroot=DocumentRoot
+PHPBasePreferencePage.websettingsGroup.browser=External browser command
+PHPBasePreferencePage.websettingsGroup.useexternal=Use external browser
+PHPBasePreferencePage.apacheGroup=Apache Settings
+PHPBasePreferencePage.apacheGroup.start=Start Apache
+PHPBasePreferencePage.apacheGroup.stop=Stop Apache
+PHPBasePreferencePage.apacheGroup.restart=Restart Apache
+PHPBasePreferencePage.mySQLGroup=MySQL Settings
+PHPBasePreferencePage.mySQLGroup.command=MySQL command
+PHPBasePreferencePage.parsers=Parsing settings
+PHPBasePreferencePage.parsers.pos=Parse on save
+PHPBasePreferencePage.parsers.external=External
+PHPBasePreferencePage.parsers.internal=Internal
+PHPBasePreferencePage.parsers.choose=Choose PHP Parser
+
+PHPEditorSyntaxPreferencePage.description:PHP Editor Preferences
+PHPEditorSyntaxPreferencePage.foreground:Foreground settings
+PHPEditorSyntaxPreferencePage.syntax:Syntax highlighting
+PHPEditorSyntaxPreferencePage.color:Colour
+PHPEditorSyntaxPreferencePage.bold:Bold
+PHPEditorSyntaxPreferencePage.italic:Italic
+PHPEditorSyntaxPreferencePage.underline:Underline
+PHPEditorSyntaxPreferencePage.multiLineComment=Multi-line comment
+PHPEditorSyntaxPreferencePage.singleLineComment=Single-line comment
+PHPEditorSyntaxPreferencePage.keywords=Keywords
+PHPEditorSyntaxPreferencePage.variables=Variables
+PHPEditorSyntaxPreferencePage.types=Types
+PHPEditorSyntaxPreferencePage.functions=Functions
+PHPEditorSyntaxPreferencePage.constants=Constants
+PHPEditorSyntaxPreferencePage.strings=Strings
+PHPEditorSyntaxPreferencePage.others=Others
+PHPEditorSyntaxPreferencePage.syntaxdialog=Custom PHP Syntax File:
+PHPEditorSyntaxPreferencePage.browse=Browse..
+PHPEditorSyntaxPreferencePage.textfont=Text font
+
+PHPLanguagePreferencePage.description=PHP Editor Language
+PHPLanguagePreferencePage.preflingo=PHP Language Preference
+PHPLanguagePreferencePage.choose=Choose Language
+PHPLanguagePreferencePage.english=Anglase
+PHPLanguagePreferencePage.german=Deutsch
+PHPLanguagePreferencePage.french=Francais
+
diff --git a/net.sourceforge.phpeclipse/src/net/sourceforge/phpeclipse/newPHPPreferencesMessages_en_GB.properties b/net.sourceforge.phpeclipse/src/net/sourceforge/phpeclipse/newPHPPreferencesMessages_en_GB.properties
new file mode 100644 (file)
index 0000000..b007252
--- /dev/null
@@ -0,0 +1,64 @@
+#########################################
+# PHPProjectLibraryPage
+#########################################
+
+PHPProjectLibraryPage.elementNotIProject=ERROR: Element not IProject
+PHPProjectLibraryPage.project=Project
+PHPProjectLibraryPage.tabName=Projects
+
+
+#########################################
+# Property Pages
+#########################################
+
+PHPProjectPropertyPage.phpProjectClosed=The project selected is a PHP project, but is closed.
+PHPProjectPropertyPage.performOkExceptionDialogTitle=Unable to save
+PHPProjectPropertyPage.performOkExceptionDialogMessage=ERROR: Unable to save project properties.
+
+#########################################
+# Preference Pages
+#########################################
+PHPBasePreferencePage.description=PHP Preferences
+PHPBasePreferencePage.websettingsGroup=Webserver Settings
+PHPBasePreferencePage.websettingsGroup.localhost=Localhost
+PHPBasePreferencePage.websettingsGroup.docroot=DocumentRoot
+PHPBasePreferencePage.websettingsGroup.browser=External browser command
+PHPBasePreferencePage.websettingsGroup.useexternal=Use external browser
+PHPBasePreferencePage.apacheGroup=Apache Settings
+PHPBasePreferencePage.apacheGroup.start=Start Apache
+PHPBasePreferencePage.apacheGroup.stop=Stop Apache
+PHPBasePreferencePage.apacheGroup.restart=Restart Apache
+PHPBasePreferencePage.mySQLGroup=MySQL Settings
+PHPBasePreferencePage.mySQLGroup.command=MySQL command
+PHPBasePreferencePage.parsers=Parsing settings
+PHPBasePreferencePage.parsers.pos=Parse on save
+PHPBasePreferencePage.parsers.external=External
+PHPBasePreferencePage.parsers.internal=Internal
+PHPBasePreferencePage.parsers.choose=Choose PHP Parser
+
+PHPEditorSyntaxPreferencePage.description:PHP Editor Preferences
+PHPEditorSyntaxPreferencePage.foreground:Foreground settings
+PHPEditorSyntaxPreferencePage.syntax:Syntax highlighting
+PHPEditorSyntaxPreferencePage.color:Colour
+PHPEditorSyntaxPreferencePage.bold:Bold
+PHPEditorSyntaxPreferencePage.italic:Italic
+PHPEditorSyntaxPreferencePage.underline:Underline
+PHPEditorSyntaxPreferencePage.multiLineComment=Multi-line comment
+PHPEditorSyntaxPreferencePage.singleLineComment=Single-line comment
+PHPEditorSyntaxPreferencePage.keywords=Keywords
+PHPEditorSyntaxPreferencePage.variables=Variables
+PHPEditorSyntaxPreferencePage.types=Types
+PHPEditorSyntaxPreferencePage.functions=Functions
+PHPEditorSyntaxPreferencePage.constants=Constants
+PHPEditorSyntaxPreferencePage.strings=Strings
+PHPEditorSyntaxPreferencePage.others=Others
+PHPEditorSyntaxPreferencePage.syntaxdialog=Custom PHP Syntax File:
+PHPEditorSyntaxPreferencePage.browse=Browse..
+PHPEditorSyntaxPreferencePage.textfont=Text font
+
+PHPLanguagePreferencePage.description=PHP Editor Language
+PHPLanguagePreferencePage.preflingo=PHP Language Preference
+PHPLanguagePreferencePage.choose=Choose Language
+PHPLanguagePreferencePage.english=English
+PHPLanguagePreferencePage.german=German
+PHPLanguagePreferencePage.french=French
diff --git a/net.sourceforge.phpeclipse/src/net/sourceforge/phpeclipse/phpeditor/PHPSyntaxRdr.java b/net.sourceforge.phpeclipse/src/net/sourceforge/phpeclipse/phpeditor/PHPSyntaxRdr.java
new file mode 100644 (file)
index 0000000..fc456a4
--- /dev/null
@@ -0,0 +1,276 @@
+package net.sourceforge.phpeclipse.phpeditor;
+
+import java.io.File;
+import java.io.FileInputStream;
+import java.io.FileOutputStream;
+import java.io.IOException;
+import java.io.InputStream;
+import java.io.OutputStream;
+import java.io.UnsupportedEncodingException;
+import java.util.Vector;
+
+import javax.xml.parsers.DocumentBuilder;
+import javax.xml.parsers.DocumentBuilderFactory;
+import javax.xml.parsers.ParserConfigurationException;
+
+import org.apache.xml.serialize.OutputFormat;
+import org.apache.xml.serialize.Serializer;
+import org.apache.xml.serialize.SerializerFactory;
+import org.eclipse.core.runtime.CoreException;
+import org.eclipse.core.runtime.IPath;
+import org.eclipse.jface.preference.IPreferenceStore;
+import org.w3c.dom.Attr;
+import org.w3c.dom.Document;
+import org.w3c.dom.NamedNodeMap;
+import org.w3c.dom.Node;
+import org.w3c.dom.NodeList;
+import org.xml.sax.InputSource;
+import org.xml.sax.SAXException;
+
+import net.sourceforge.phpeclipse.IPreferenceConstants;
+import net.sourceforge.phpeclipse.PHPeclipsePlugin;
+import net.sourceforge.phpeclipse.phpeditor.php.PHPConstant;
+import net.sourceforge.phpeclipse.phpeditor.php.PHPElement;
+import net.sourceforge.phpeclipse.phpeditor.php.PHPFunction;
+import net.sourceforge.phpeclipse.phpeditor.php.PHPKeyword;
+import net.sourceforge.phpeclipse.phpeditor.php.PHPType;
+
+/**
+ * <code>PHPSyntaxRdr</code> reads PHP specifics from an XML file (eg. keywords) 
+ */
+
+public class PHPSyntaxRdr {
+  private static final String PHPDEFAULT_FILE = "default-phpsyntax.xml"; //$NON-NLS-1$
+  private static final String PHPSYNTAX_FILE = "phpsyntax.xml"; //$NON-NLS-1$
+  private static final String USERSYNTAX_FILE = "usersyntax.xml"; //$NON-NLS-1$
+  private static final String USERDEFAULT_FILE = "default-usersyntax.xml"; //$NON-NLS-1$
+  private static final String PHPSYNTAX_TAG = "phpsyntax";
+  private static final String KEYWORD_ATTR = "keyword";
+  private static final String TYPE_ATTR = "type";
+  private static final String CONSTANT_ATTR = "constant";
+  private static final String FN_ATTR = "function";
+  private static final String DESCRIPTION = "description";
+  private static final String USAGE_ATTR = "usage";
+  private static final String TOKENVAL_ATTR = "tokenval";
+  private static IPreferenceStore store;
+  private static boolean hasXMLFileBeenRead = true;
+
+  //The following variable is used to hold the syntax from
+  //the suers custom file - if that file should be changed,
+  //then all entries in this variable should be removed from
+  //the word list, reread from the file and then reinserted.
+  private static Vector userdefsyntaxdata;
+
+  private static Vector syntaxdata;
+
+  public PHPSyntaxRdr() {
+    syntaxdata = new Vector();
+    store = PHPeclipsePlugin.getDefault().getPreferenceStore();
+  }
+
+  public static void readInSyntax() {
+    try {
+      hasXMLFileBeenRead = true;
+      /*Attempt to read the syntax file from the metadata
+       * if this does not work, create metadata from default*/
+      File syntaxFile = getSyntaxFile();
+      if (syntaxFile.exists()) {
+        readFromFile(syntaxFile);
+      } else {
+        readFromStream(PHPSyntaxRdr.class.getResourceAsStream(PHPSYNTAX_FILE));
+        saveToFile(syntaxFile);
+      }
+      /*Read the user-defined syntax file if it exists*/
+      //String buffer = new String(store.getString(PHPeclipsePlugin.PHP_USERDEF_XMLFILE));
+      if (store == null)
+        store = PHPeclipsePlugin.getDefault().getPreferenceStore();
+      String buffer = new String(store.getString(IPreferenceConstants.PHP_USERDEF_XMLFILE));
+      if (!buffer.equals("") || buffer != null) {
+        readFromFile(buffer);
+      }
+    } catch (CoreException ce) {
+      ce.printStackTrace();
+    }
+  }
+
+  public static void readFromFile(String filename) {
+    try {
+      readFromFile(new File(filename));
+    } catch (CoreException e) {
+    }
+  }
+
+  public static void readFromFile(File file) throws CoreException {
+    InputStream stream = null;
+    try {
+      stream = new FileInputStream(file);
+      readFromStream(stream);
+    } catch (IOException e) {
+      throwReadException(e);
+    } finally {
+      try {
+        if (stream != null) {
+          stream.close();
+        }
+      } catch (IOException e) {
+      }
+    }
+  }
+  public static void readFromStream(InputStream stream) throws CoreException {
+    try {
+      DocumentBuilderFactory factory = DocumentBuilderFactory.newInstance();
+      DocumentBuilder parser = factory.newDocumentBuilder();
+      Document document = parser.parse(new InputSource(stream));
+      //Read in the Standard PHPSyntax "stuff"
+      NodeList elements = document.getElementsByTagName(PHPSYNTAX_TAG);
+
+      int count = elements.getLength();
+      for (int i = 0; i != count; i++) {
+        Node node = elements.item(i);
+        NamedNodeMap attributes = node.getAttributes();
+
+        if (attributes == null)
+          continue;
+
+        String Keyword = getAttributeValue(attributes, KEYWORD_ATTR);
+        String Type = getAttributeValue(attributes, TYPE_ATTR);
+        String Function = getAttributeValue(attributes, FN_ATTR);
+        String Constant = getAttributeValue(attributes, CONSTANT_ATTR);
+        String Description = getAttributeValue(attributes, DESCRIPTION);
+        String Usage = getAttributeValue(attributes, USAGE_ATTR);
+        String Tokenval = getAttributeValue(attributes, TOKENVAL_ATTR);
+
+        if (Keyword == null && Type == null && Function == null && Constant == null) {
+          //ignore as it is not a valid phpsyntax tag
+        } else {
+          if (Keyword != null) {
+            syntaxdata.addElement(new PHPKeyword(Keyword, Description, Tokenval));
+          } else if (Type != null) {
+            syntaxdata.addElement(new PHPType(Type, Description));
+          } else if (Function != null) {
+            syntaxdata.addElement(new PHPFunction(Function, Description, Usage));
+          } else if (Constant != null) {
+            syntaxdata.addElement(new PHPConstant(Constant, Description));
+          }
+        }
+      }
+    } catch (ParserConfigurationException e) {
+      throwReadException(e);
+    } catch (IOException e) {
+      throwReadException(e);
+    } catch (SAXException e) {
+      throwReadException(e);
+    }
+  }
+
+  public static Vector getsyntaxdata() {
+    return (Vector) syntaxdata.clone();
+  }
+
+  public static void replaceUserDefFile() {
+    /*Replace the user-defined syntax file if it exists*/
+    String buffer = new String(store.getString(IPreferenceConstants.PHP_USERDEF_XMLFILE));
+    if (!buffer.equals("") || buffer == null) {
+      readFromFile(buffer);
+    }
+  }
+
+  public static Vector getUserDefinitions() {
+    return (Vector) userdefsyntaxdata.clone();
+  }
+
+  private static File getSyntaxFile() {
+    IPath path = PHPeclipsePlugin.getDefault().getStateLocation();
+    path = path.append(PHPSYNTAX_FILE);
+    return path.toFile();
+  }
+
+  private static String getAttributeValue(NamedNodeMap attributes, String name) {
+    Node node = attributes.getNamedItem(name);
+    return node == null ? null : node.getNodeValue();
+  }
+
+  public static void saveToFile(File file) throws CoreException {
+    OutputStream stream = null;
+    try {
+      stream = new FileOutputStream(file);
+      saveToStream(stream);
+    } catch (IOException e) {
+      throwWriteException(e);
+    } finally {
+      try {
+        if (stream != null)
+          stream.close();
+      } catch (IOException e) {
+      }
+    }
+  }
+
+  public static void saveToStream(OutputStream stream) throws CoreException {
+    try {
+      DocumentBuilderFactory factory = DocumentBuilderFactory.newInstance();
+      DocumentBuilder builder = factory.newDocumentBuilder();
+      Document document = builder.newDocument();
+      Node root = document.createElement("PHPStandardSyntax"); // $NON-NLS-1$ //$NON-NLS-1$
+      document.appendChild(root);
+      for (int i = 0; i != syntaxdata.size(); i++) {
+        Object bufferobj = (Object) syntaxdata.get(i);
+        Attr name = null;
+        Node node = document.createElement(PHPSYNTAX_TAG); // $NON-NLS-1$ //$NON-NLS-1$
+        root.appendChild(node);
+        NamedNodeMap attributes = node.getAttributes();
+        if (bufferobj instanceof PHPType)
+          name = document.createAttribute(TYPE_ATTR);
+        if (bufferobj instanceof PHPKeyword)
+          name = document.createAttribute(KEYWORD_ATTR);
+        if (bufferobj instanceof PHPFunction)
+          name = document.createAttribute(FN_ATTR);
+        if (bufferobj instanceof PHPConstant)
+          name = document.createAttribute(CONSTANT_ATTR);
+        name.setValue(((PHPElement) bufferobj).getName());
+        attributes.setNamedItem(name);
+        Attr description = document.createAttribute(DESCRIPTION);
+        description.setValue(((PHPElement) bufferobj).getDescription());
+        attributes.setNamedItem(description);
+        if (bufferobj instanceof PHPKeyword) {
+          Attr tokenval = document.createAttribute(TOKENVAL_ATTR);
+          tokenval.setValue((new Integer(((PHPKeyword) bufferobj).gettokenval())).toString());
+          attributes.setNamedItem(tokenval);
+        }
+        if (bufferobj instanceof PHPFunction) {
+          Attr usage = document.createAttribute(USAGE_ATTR);
+          usage.setValue(((PHPFunction) bufferobj).getUsage());
+          attributes.setNamedItem(usage);
+        }
+      }
+      OutputFormat format = new OutputFormat();
+      format.setPreserveSpace(true);
+      try {
+        Serializer serializer = SerializerFactory.getSerializerFactory("xml").makeSerializer(stream, format);
+        serializer.asDOMSerializer().serialize(document);
+      } catch (UnsupportedEncodingException e) {
+      } catch (IOException e) {
+      } //$NON-NLS-1$
+      //                       Serializer serializer = SerializerFactory.getSerializer().makeSerializer(stream, format); //$NON-NLS-1$
+    } catch (ParserConfigurationException e) {
+      throwWriteException(e);
+      //        } catch (IOException e) {
+      //            throwWriteException(e);
+    }
+  }
+
+  private static void throwReadException(Throwable t) throws CoreException {
+    PHPeclipsePlugin.log(t);
+    //         IStatus status= new JavaUIStatus(JavaStatusConstants.TEMPLATE_IO_EXCEPTION,
+    //                 TemplateMessages.getString("TemplateSet.error.read"), t); //$NON-NLS-1$
+    //         throw new JavaUIException(status);
+  }
+
+  private static void throwWriteException(Throwable t) throws CoreException {
+    PHPeclipsePlugin.log(t);
+    //         IStatus status= new JavaUIStatus(JavaStatusConstants.TEMPLATE_IO_EXCEPTION,
+    //                 TemplateMessages.getString("TemplateSet.error.write"), t); //$NON-NLS-1$
+    //         throw new JavaUIException(status);
+  }
+
+}
index f4e6582..4851296 100644 (file)
@@ -12,24 +12,25 @@ Contributors:
 package net.sourceforge.phpeclipse.phpeditor;
 
 import java.util.HashMap;
+import java.util.Vector;
 
-import net.sourceforge.phpeclipse.phpeditor.php.PHPFunctionDescription;
-import net.sourceforge.phpeclipse.phpeditor.php.PHPFunctionNames;
 import net.sourceforge.phpeclipse.phpeditor.php.PHPWordExtractor;
-import org.eclipse.jface.text.BadLocationException;
+
 import org.eclipse.jface.text.IRegion;
 import org.eclipse.jface.text.ITextHover;
 import org.eclipse.jface.text.ITextViewer;
 import org.eclipse.jface.text.Region;
 import org.eclipse.swt.graphics.Point;
 
+import net.sourceforge.phpeclipse.phpeditor.php.PHPElement;
+
 /**
  * Example implementation for an <code>ITextHover</code> 
  * which hovers over PHP code.
  */
 public class PHPTextHover implements ITextHover {
   public static HashMap functionDescriptions = null;
-  
+
   private static PHPWordExtractor phpWordDetector = new PHPWordExtractor();
   /* (non-Javadoc)
    * Method declared on ITextHover
@@ -39,15 +40,29 @@ public class PHPTextHover implements ITextHover {
       try {
         if (hoverRegion.getLength() > -1) {
           String word = textViewer.getDocument().get(hoverRegion.getOffset(), hoverRegion.getLength());
-          if (functionDescriptions==null) {
-            functionDescriptions = new HashMap(997);
-            for (int i=0; i<PHPFunctionNames.FUNCTION_NAMES.length;i++) {
-              functionDescriptions.put(PHPFunctionNames.FUNCTION_NAMES[i],PHPFunctionDescription.FUNCTION_DESCRIPTION[i]);
+          if (functionDescriptions == null) {
+            functionDescriptions = new HashMap();
+            //                 PHPSyntaxRdr syntaxRdr = new PHPSyntaxRdr();
+            //                 syntaxRdr.readInSyntax();
+
+            //                 Vector syntaxbuffer = syntaxRdr.getsyntaxdata();
+            Vector syntaxbuffer = PHPSyntaxRdr.getsyntaxdata();
+            String strbuffer = null;
+            PHPElement elbuffer = null;
+            while ((syntaxbuffer != null)
+              && (!syntaxbuffer.isEmpty() && ((elbuffer = (PHPElement) syntaxbuffer.remove(0)) != null))) {
+              functionDescriptions.put(elbuffer.getName(), elbuffer.getDescription());
             }
+
+            //            functionDescriptions = new HashMap(997);
+            //            for (int i=0; i<PHPFunctionNames.FUNCTION_NAMES.length;i++) {
+            //              functionDescriptions.put(PHPFunctionNames.FUNCTION_NAMES[i],PHPFunctionDescription.FUNCTION_DESCRIPTION[i]);
+            //            }
           }
           return (String) functionDescriptions.get(word);
         }
-      } catch (BadLocationException x) {
+        //      } catch (BadLocationException x) {
+      } catch (Exception x) {
       }
     }
     return "empty selection";
@@ -58,8 +73,8 @@ public class PHPTextHover implements ITextHover {
    */
   public IRegion getHoverRegion(ITextViewer textViewer, int offset) {
     Point selection = PHPWordExtractor.findWord(textViewer.getDocument(), offset);
-//  show the extracted word as a tooltip
-    if (selection!=null && selection.x <= offset && offset < selection.x + selection.y)
+    //  show the extracted word as a tooltip
+    if (selection != null && selection.x <= offset && offset < selection.x + selection.y)
       return new Region(selection.x, selection.y);
     return new Region(offset, 0);
   }
index 784efcd..9cb7ae8 100644 (file)
@@ -22,32 +22,32 @@ import org.eclipse.ui.texteditor.TextEditorAction;
  */
 public class PresentationAction extends TextEditorAction {
 
-       /**
-        * Constructs and updates the action.
-        */
-       public PresentationAction() {
-               super(PHPEditorMessages.getResourceBundle(), "TogglePresentation.", null); //$NON-NLS-1$
-               update();
-       }
-       
-       /* (non-Javadoc)
-        * Method declared on IAction
-        */
-       public void run() {
-
-               ITextEditor editor= getTextEditor();
-
-               editor.resetHighlightRange();
-               boolean show= editor.showsHighlightRangeOnly();
-               setChecked(!show);
-               editor.showHighlightRangeOnly(!show);
-       }
-       
-       /* (non-Javadoc)
-        * Method declared on TextEditorAction
-        */
-       public void update() {
-               setChecked(getTextEditor() != null && getTextEditor().showsHighlightRangeOnly());
-               setEnabled(true);
-       }
+  /**
+   * Constructs and updates the action.
+   */
+  public PresentationAction() {
+    super(PHPEditorMessages.getResourceBundle(), "TogglePresentation.", null); //$NON-NLS-1$
+    update();
+  }
+
+  /* (non-Javadoc)
+   * Method declared on IAction
+   */
+  public void run() {
+
+    ITextEditor editor = getTextEditor();
+
+    editor.resetHighlightRange();
+    boolean show = editor.showsHighlightRangeOnly();
+    setChecked(!show);
+    editor.showHighlightRangeOnly(!show);
+  }
+
+  /* (non-Javadoc)
+   * Method declared on TextEditorAction
+   */
+  public void update() {
+    setChecked(getTextEditor() != null && getTextEditor().showsHighlightRangeOnly());
+    setEnabled(true);
+  }
 }
diff --git a/net.sourceforge.phpeclipse/src/net/sourceforge/phpeclipse/phpeditor/SyntaxError.java b/net.sourceforge.phpeclipse/src/net/sourceforge/phpeclipse/phpeditor/SyntaxError.java
deleted file mode 100644 (file)
index da1cf8b..0000000
+++ /dev/null
@@ -1,64 +0,0 @@
-/*
- * SyntaxError.java
- * Copyright (C) 2000 Klaus Hartlage
- *
- * This program is free software; you can redistribute it and/or
- * modify it under the terms of the GNU General Public License
- * as published by the Free Software Foundation; either version 2
- * of the License, or any later version.
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software
- * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA  02111-1307, USA.
- */
-package net.sourceforge.phpeclipse.phpeditor;
-
-/**
- * Exception for a syntax error detected by the HartMath parser
- * 
- */
-public class SyntaxError extends Error {
-
-  int lineNumber;
-  int columnNumber;
-  String currentLine;
-  String error;
-  /**
-   * SyntaxError exception
-   * 
-   *
-   * @see
-   */
-  public SyntaxError(int lineNumber, int columnNumber, String currentLine, String error) {
-    this.lineNumber = lineNumber;
-    this.columnNumber = columnNumber;
-    this.currentLine = currentLine;
-    this.error = error;
-  }
-
-  public String getMessage() {
-    //    StringBuffer buf = new StringBuffer(256);
-    //    buf.append("Syntax error in line:");
-    //    buf.append(lineNumber+1);
-    //    buf.append(": "+ error + "\n");
-    //    buf.append( currentLine + "\n");
-    //    for (int i=0; i<(columnNumber-1); i++) {
-    //      buf.append(' ');
-    //    }
-    //    buf.append('^');
-    //    return buf.toString();
-    
-    
-    // System.err.println(currentLine);
-    return error;
-  }
-
-  public int getLine() {
-    return lineNumber;
-  }
-}
index 160925c..e3ca314 100644 (file)
@@ -13,12 +13,11 @@ package net.sourceforge.phpeclipse.phpeditor.php;
 
 import java.util.ArrayList;
 import java.util.List;
+import java.util.Vector;
 
-import net.sourceforge.phpeclipse.IPreferenceConstants;
-import net.sourceforge.phpeclipse.PHPeclipsePlugin;
-import net.sourceforge.phpeclipse.phpeditor.util.PHPColorProvider;
 import net.sourceforge.phpeclipse.phpeditor.util.PHPWhitespaceDetector;
 import net.sourceforge.phpeclipse.phpeditor.util.PHPWordDetector;
+
 import org.eclipse.jface.preference.IPreferenceStore;
 import org.eclipse.jface.preference.PreferenceConverter;
 import org.eclipse.jface.text.TextAttribute;
@@ -33,6 +32,13 @@ import org.eclipse.jface.text.rules.SingleLineRule;
 import org.eclipse.jface.text.rules.Token;
 import org.eclipse.jface.text.rules.WhitespaceRule;
 import org.eclipse.jface.text.rules.WordRule;
+import org.eclipse.swt.SWT;
+import org.eclipse.swt.graphics.Color;
+
+import net.sourceforge.phpeclipse.IPreferenceConstants;
+import net.sourceforge.phpeclipse.PHPeclipsePlugin;
+import net.sourceforge.phpeclipse.phpeditor.PHPSyntaxRdr;
+import net.sourceforge.phpeclipse.phpeditor.util.PHPColorProvider;
 
 /**
  * PHP Code Scanner
@@ -41,6 +47,8 @@ public class PHPCodeScanner extends RuleBasedScanner implements IPreferenceConst
 
   private static Token variable;
   private static Token keyword;
+  private static Token type;
+  private static Token constant;
   private static Token functionName;
   private static Token string;
   private static Token comment;
@@ -93,100 +101,166 @@ public class PHPCodeScanner extends RuleBasedScanner implements IPreferenceConst
     }
   }
 
-  private static String[] fgConstants = { "__LINE__", "__FILE__", "true", "false", "null", "object", "array" };
-  //  private static TextAttribute fSingleLine;
-  //  private static TextAttribute fMultiLine;
-  //  private static TextAttribute fKeyword;
-  //  private static TextAttribute fFunctionName;
-  //  private static TextAttribute fString;
-  //  private static TextAttribute fVariable;
   private PHPColorProvider fColorProvider;
 
   /**
-   * Creates a PHP code scanner
-   */
+       * Creates a PHP code scanner
+       */
   public PHPCodeScanner(PHPColorProvider provider) {
     final IPreferenceStore store = PHPeclipsePlugin.getDefault().getPreferenceStore();
+    Color BackgroundColor = provider.getColor(PreferenceConverter.getColor(store, PHP_EDITOR_BACKGROUND));
+    variable =
+      new Token(
+        new TextAttribute(
+          provider.getColor(PreferenceConverter.getColor(store, PHP_VARIABLE)),
+          BackgroundColor,
+          (store.getBoolean(PHP_VARIABLE_BOLD) ? SWT.BOLD : SWT.NONE)
+            + (store.getBoolean(PHP_VARIABLE_ITALIC) ? SWT.ITALIC : SWT.NONE)));
+      keyword =
+        new Token(new TextAttribute(
+          provider.getColor(PreferenceConverter.getColor(store, PHP_KEYWORD)),
+          BackgroundColor,
+    //SWT.NONE));
+   (store.getBoolean(PHP_KEYWORD_BOLD) ? SWT.BOLD : SWT.NONE) + (store.getBoolean(PHP_KEYWORD_ITALIC) ? SWT.ITALIC : SWT.NONE)));
+      type =
+        new Token(new TextAttribute(
+          provider.getColor(PreferenceConverter.getColor(store, PHP_TYPE)),
+          BackgroundColor,
+    //SWT.NONE));
+   (store.getBoolean(PHP_TYPE_BOLD) ? SWT.BOLD : SWT.NONE) + (store.getBoolean(PHP_TYPE_ITALIC) ? SWT.ITALIC : SWT.NONE)));
+      functionName =
+        new Token(new TextAttribute(
+          provider.getColor(PreferenceConverter.getColor(store, PHP_FUNCTIONNAME)),
+          BackgroundColor,
+    //SWT.NONE));
+  (store.getBoolean(PHP_FUNCTIONNAME_BOLD) ? SWT.BOLD : SWT.NONE)
+    + (store.getBoolean(PHP_FUNCTIONNAME_ITALIC) ? SWT.ITALIC : SWT.NONE)));
+      constant =
+        new Token(new TextAttribute(
+          provider.getColor(PreferenceConverter.getColor(store, PHP_CONSTANT)),
+          BackgroundColor,
+    //SWT.NONE));
+   (store.getBoolean(PHP_CONSTANT_BOLD) ? SWT.BOLD : SWT.NONE) + (store.getBoolean(PHP_CONSTANT_ITALIC) ? SWT.ITALIC : SWT.NONE)));
+      string =
+        new Token(new TextAttribute(
+          provider.getColor(PreferenceConverter.getColor(store, PHP_STRING)),
+          BackgroundColor,
+    //SWT.NONE));
+   (store.getBoolean(PHP_STRING_BOLD) ? SWT.NONE : SWT.BOLD) + (store.getBoolean(PHP_STRING_ITALIC) ? SWT.ITALIC : SWT.NONE)));
+      comment =
+        new Token(new TextAttribute(
+          provider.getColor(PreferenceConverter.getColor(store, PHP_SINGLELINE_COMMENT)),
+          BackgroundColor,
+    //SWT.NONE));
+  (store.getBoolean(PHP_SINGLELINE_COMMENT_BOLD) ? SWT.NONE : SWT.BOLD)
+    + (store.getBoolean(PHP_SINGLELINE_COMMENT_ITALIC) ? SWT.ITALIC : SWT.NONE)));
+      multi_comment =
+        new Token(new TextAttribute(
+          provider.getColor(PreferenceConverter.getColor(store, PHP_MULTILINE_COMMENT)),
+          BackgroundColor,
+    //SWT.NONE));
+  (store.getBoolean(PHP_MULTILINE_COMMENT_BOLD) ? SWT.BOLD : SWT.NONE)
+    + (store.getBoolean(PHP_MULTILINE_COMMENT_ITALIC) ? SWT.ITALIC : SWT.NONE)));
+      other =
+        new Token(new TextAttribute(
+          provider.getColor(PreferenceConverter.getColor(store, PHP_DEFAULT)),
+          BackgroundColor,
+    //SWT.NONE));
+   (store.getBoolean(PHP_DEFAULT_BOLD) ? SWT.BOLD : SWT.NONE) + (store.getBoolean(PHP_DEFAULT_ITALIC) ? SWT.ITALIC : SWT.NONE)));
+    updateWordRules();
+  }
 
-    variable = new Token(new TextAttribute(provider.getColor(PreferenceConverter.getColor(store, PHP_VARIABLE))));
-    keyword = new Token(new TextAttribute(provider.getColor(PreferenceConverter.getColor(store, PHP_KEYWORD))));
-    functionName = new Token(new TextAttribute(provider.getColor(PreferenceConverter.getColor(store, PHP_FUNCTIONNAME))));
-    string = new Token(new TextAttribute(provider.getColor(PreferenceConverter.getColor(store, PHP_STRING))));
-    comment = new Token(new TextAttribute(provider.getColor(PreferenceConverter.getColor(store, PHP_SINGLELINE_COMMENT))));
-    multi_comment = new Token(new TextAttribute(provider.getColor(PreferenceConverter.getColor(store, PHP_MULTILINE_COMMENT))));
-    other = new Token(new TextAttribute(provider.getColor(PreferenceConverter.getColor(store, PHP_DEFAULT))));
+  public void updateToken(PHPColorProvider provider) {
+    final IPreferenceStore store = PHPeclipsePlugin.getDefault().getPreferenceStore();
 
-    List rules = new ArrayList();
+    Color BackgroundColor = provider.getColor(PreferenceConverter.getColor(store, PHP_EDITOR_BACKGROUND));
 
+    variable.setData(
+      new TextAttribute(
+        provider.getColor(PreferenceConverter.getColor(store, PHP_VARIABLE)),
+        BackgroundColor,
+        (store.getBoolean(PHP_VARIABLE_BOLD) ? SWT.BOLD : SWT.NONE)
+          + (store.getBoolean(PHP_VARIABLE_ITALIC) ? SWT.ITALIC : SWT.NONE)));
+    keyword.setData(
+      new TextAttribute(
+        provider.getColor(PreferenceConverter.getColor(store, PHP_KEYWORD)),
+        BackgroundColor,
+        (store.getBoolean(PHP_KEYWORD_BOLD) ? SWT.BOLD : SWT.NONE)
+          + (store.getBoolean(PHP_KEYWORD_ITALIC) ? SWT.ITALIC : SWT.NONE)));
+    type.setData(
+      new TextAttribute(
+        provider.getColor(PreferenceConverter.getColor(store, PHP_TYPE)),
+        BackgroundColor,
+        (store.getBoolean(PHP_TYPE_BOLD) ? SWT.BOLD : SWT.NONE) + (store.getBoolean(PHP_TYPE_ITALIC) ? SWT.ITALIC : SWT.NONE)));
+    functionName.setData(
+      new TextAttribute(
+        provider.getColor(PreferenceConverter.getColor(store, PHP_FUNCTIONNAME)),
+        BackgroundColor,
+        (store.getBoolean(PHP_FUNCTIONNAME_BOLD) ? SWT.BOLD : SWT.NONE)
+          + (store.getBoolean(PHP_FUNCTIONNAME_ITALIC) ? SWT.ITALIC : SWT.NONE)));
+    constant.setData(
+      new TextAttribute(
+        provider.getColor(PreferenceConverter.getColor(store, PHP_CONSTANT)),
+        BackgroundColor,
+        (store.getBoolean(PHP_CONSTANT_BOLD) ? SWT.BOLD : SWT.NONE)
+          + (store.getBoolean(PHP_CONSTANT_ITALIC) ? SWT.ITALIC : SWT.NONE)));
+    string.setData(
+      new TextAttribute(
+        provider.getColor(PreferenceConverter.getColor(store, PHP_STRING)),
+        BackgroundColor,
+        (store.getBoolean(PHP_STRING_BOLD) ? SWT.BOLD : SWT.NONE) + (store.getBoolean(PHP_STRING_ITALIC) ? SWT.ITALIC : SWT.NONE)));
+    comment.setData(
+      new TextAttribute(
+        provider.getColor(PreferenceConverter.getColor(store, PHP_SINGLELINE_COMMENT)),
+        BackgroundColor,
+        (store.getBoolean(PHP_SINGLELINE_COMMENT_BOLD) ? SWT.BOLD : SWT.NONE)
+          + (store.getBoolean(PHP_SINGLELINE_COMMENT_ITALIC) ? SWT.ITALIC : SWT.NONE)));
+    multi_comment.setData(
+      new TextAttribute(
+        provider.getColor(PreferenceConverter.getColor(store, PHP_MULTILINE_COMMENT)),
+        BackgroundColor,
+        (store.getBoolean(PHP_MULTILINE_COMMENT_BOLD) ? SWT.BOLD : SWT.NONE)
+          + (store.getBoolean(PHP_MULTILINE_COMMENT_ITALIC) ? SWT.ITALIC : SWT.NONE)));
+    other.setData(
+      new TextAttribute(
+        provider.getColor(PreferenceConverter.getColor(store, PHP_DEFAULT)),
+        BackgroundColor,
+        (store.getBoolean(PHP_DEFAULT_BOLD) ? SWT.BOLD : SWT.NONE)
+          + (store.getBoolean(PHP_DEFAULT_ITALIC) ? SWT.ITALIC : SWT.NONE)));
+  }
+
+  public void updateWordRules() {
+    List rules = new ArrayList();
     // Add rule for single line comments.
     rules.add(new EndOfLineRule("//", comment)); //$NON-NLS-1$
     rules.add(new EndOfLineRule("#", comment));
-
     // Add rule for strings and character constants.
     rules.add(new MultiLineRule("\"", "\"", string, '\\')); //$NON-NLS-2$ //$NON-NLS-1$
     rules.add(new SingleLineRule("'", "'", string, '\\')); //$NON-NLS-2$ //$NON-NLS-1$
-
     // rules.add(new SingleLineRule("//", "//", php_comment));
     rules.add(new MultiLineRule("/*", "*/", multi_comment));
-
     // Add generic whitespace rule.
     rules.add(new WhitespaceRule(new PHPWhitespaceDetector()));
-
     // Add word rule for keywords, types, and constants.
     PHPWordRule wordRule = new PHPWordRule(new PHPWordDetector(), other);
-//    //choochter-->
-//    for (int i = 0; i < PHPKeywords.PHP_KEYWORS.length; i++)
-//      wordRule.addWord(PHPKeywords.PHP_KEYWORS[i], keyword);
-//
-//    /*Read in the keywords from the XML file*/
-//    PHPSyntaxRdr syntaxRdr = new PHPSyntaxRdr();
-//    syntaxRdr.readFromFile(
-//      "C:\\eclipse\\workspace\\net.sourceforge.phpeclipse\\src\\net\\sourceforge\\phpeclipse\\phpeditor"
-//        + java.io.File.separator
-//        + "syntax.xml");
-//    {
-//      Vector Vbuffer = syntaxRdr.getKeywords();
-//      String VString = null;
-//      //Read keywords
-//      while ((Vbuffer != null) && (!Vbuffer.isEmpty() && ((VString = (String) Vbuffer.remove(0)) != null))) {
-//        wordRule.addWord(VString, keyword);
-//      }
-//      //Read functions  - to be tested
-//      Vbuffer = syntaxRdr.getFunctions();
-//      while ((Vbuffer != null) && (!Vbuffer.isEmpty() && ((VString = (String) Vbuffer.remove(0)) != null))) {
-//        wordRule.addWord(VString, functionName);
-//      }
-//    }
-//    
-//    //for (int i = 0; i < PHPFunctionNames.FUNCTION_NAMES.length; i++)
-//    //  wordRule.addWord(PHPFunctionNames.FUNCTION_NAMES[i], functionName);
-//    //<--choochter
-    for (int i = 0; i < PHPKeywords.PHP_KEYWORS.length; i++) {
-      wordRule.addWord(PHPKeywords.PHP_KEYWORS[i], keyword);
-    }
-    for (int i = 0; i < PHPFunctionNames.FUNCTION_NAMES.length; i++) {
-      wordRule.addWord(PHPFunctionNames.FUNCTION_NAMES[i], functionName);
-    }
-    for (int i = 0; i < fgConstants.length; i++) {
-      wordRule.addWord(fgConstants[i], keyword);
+
+    PHPSyntaxRdr.readInSyntax();
+    Vector buffer = PHPSyntaxRdr.getsyntaxdata();
+    String strbuffer = null;
+    PHPElement elbuffer = null;
+    while ((buffer != null) && (!buffer.isEmpty() && ((elbuffer = (PHPElement) buffer.remove(0)) != null))) {
+      if (elbuffer instanceof PHPKeyword)
+        wordRule.addWord(((PHPKeyword) elbuffer).getName(), keyword);
+      if (elbuffer instanceof PHPFunction)
+        wordRule.addWord(((PHPFunction) elbuffer).getName(), functionName);
+      if (elbuffer instanceof PHPType)
+        wordRule.addWord(elbuffer.getName(), type);
+      if (elbuffer instanceof PHPConstant)
+        wordRule.addWord(elbuffer.getName(), constant);
     }
     rules.add(wordRule);
-
     IRule[] result = new IRule[rules.size()];
     rules.toArray(result);
     setRules(result);
   }
-
-  public void updateToken(PHPColorProvider provider) {
-    final IPreferenceStore store = PHPeclipsePlugin.getDefault().getPreferenceStore();
-
-    variable.setData(new TextAttribute(provider.getColor(PreferenceConverter.getColor(store, PHP_VARIABLE))));
-    keyword.setData(new TextAttribute(provider.getColor(PreferenceConverter.getColor(store, PHP_KEYWORD))));
-    functionName.setData(new TextAttribute(provider.getColor(PreferenceConverter.getColor(store, PHP_FUNCTIONNAME))));
-    string.setData(new TextAttribute(provider.getColor(PreferenceConverter.getColor(store, PHP_STRING))));
-    comment.setData(new TextAttribute(provider.getColor(PreferenceConverter.getColor(store, PHP_SINGLELINE_COMMENT))));
-    multi_comment.setData(new TextAttribute(provider.getColor(PreferenceConverter.getColor(store, PHP_MULTILINE_COMMENT))));
-    other.setData(new TextAttribute(provider.getColor(PreferenceConverter.getColor(store, PHP_DEFAULT))));
-
-  }
 }
diff --git a/net.sourceforge.phpeclipse/src/net/sourceforge/phpeclipse/phpeditor/php/PHPConstant.java b/net.sourceforge.phpeclipse/src/net/sourceforge/phpeclipse/phpeditor/php/PHPConstant.java
new file mode 100644 (file)
index 0000000..68119e7
--- /dev/null
@@ -0,0 +1,16 @@
+package net.sourceforge.phpeclipse.phpeditor.php;
+
+
+/**
+ * @author Choochter
+ *
+ * To change this generated comment edit the template variable "typecomment":
+ * Window>Preferences>Java>Templates.
+ * To enable and disable the creation of type comments go to
+ * Window>Preferences>Java>Code Generation.
+ */
+public class PHPConstant extends PHPElement{
+       public PHPConstant(String Name, String Description){
+       super(Name, Description);
+       }
+}
\ No newline at end of file
diff --git a/net.sourceforge.phpeclipse/src/net/sourceforge/phpeclipse/phpeditor/php/PHPElement.java b/net.sourceforge.phpeclipse/src/net/sourceforge/phpeclipse/phpeditor/php/PHPElement.java
new file mode 100644 (file)
index 0000000..be19656
--- /dev/null
@@ -0,0 +1,33 @@
+package net.sourceforge.phpeclipse.phpeditor.php;
+
+/**
+ * @author choochter
+ */
+public abstract class PHPElement {
+
+       private String ElementName;
+       private String ElementDescription;
+       
+       //Setters
+       public final void setName(String ElementName)
+       { this.ElementName = ElementName; }
+       public final void setDescription(String ElementDescription)
+       { this.ElementDescription = ElementDescription; }
+       
+       //Getters
+       public final String getName() { return ElementName; }
+       public final String getDescription() { return ElementDescription; }
+       
+       public PHPElement(){}
+       public PHPElement(String Name, String Description){
+               setName(Name);
+               if ((Description == null) || (Description.equals("")))
+               {
+                       setDescription(Name +" - ");
+               }
+               else {
+                       setDescription(Description); 
+               }
+       }
+       
+}
diff --git a/net.sourceforge.phpeclipse/src/net/sourceforge/phpeclipse/phpeditor/php/PHPFunction.java b/net.sourceforge.phpeclipse/src/net/sourceforge/phpeclipse/phpeditor/php/PHPFunction.java
new file mode 100644 (file)
index 0000000..2e45bdb
--- /dev/null
@@ -0,0 +1,20 @@
+package net.sourceforge.phpeclipse.phpeditor.php;
+
+/**
+ * @author Choochter
+ *
+ * To change this generated comment edit the template variable "typecomment":
+ * Window>Preferences>Java>Templates.
+ * To enable and disable the creation of type comments go to
+ * Window>Preferences>Java>Code Generation.
+ */
+public class PHPFunction extends PHPElement{
+       private String FunctionUsage;
+       public void setUsage(String Usage) {this.FunctionUsage = Usage;}
+       public String getUsage() { return this.FunctionUsage; }
+       
+       public PHPFunction(String Name, String Description, String Usage){
+       super(Name, Description);
+       setUsage(Usage);        
+       }
+}
diff --git a/net.sourceforge.phpeclipse/src/net/sourceforge/phpeclipse/phpeditor/php/PHPFunctionDescription.java b/net.sourceforge.phpeclipse/src/net/sourceforge/phpeclipse/phpeditor/php/PHPFunctionDescription.java
deleted file mode 100644 (file)
index 360f893..0000000
+++ /dev/null
@@ -1,2388 +0,0 @@
-/**********************************************************************
-Copyright (c) 2000, 2002 IBM Corp. and others.
-All rights reserved. This program and the accompanying materials
-are made available under the terms of the Common Public License v1.0
-which accompanies this distribution, and is available at
-http://www.eclipse.org/legal/cpl-v10.html
-
-Contributors:
-    IBM Corporation - Initial implementation
-    Klaus Hartlage - www.eclipseproject.de
-**********************************************************************/
-package net.sourceforge.phpeclipse.phpeditor.php;
-
-/**
- * PHP function - short description
- */
-public class PHPFunctionDescription {
-
-       public static String[] FUNCTION_DESCRIPTION =
-               {
-                       "mixed COM_invoke(int module, string handler_name [, mixed arg [, mixed ...]])\n"+
-      "Invokes a COM module",
-      
-                       "int com_load(string module_name [, string remote_host [, int codepage [, string typelib]]])\n"+
-      "Loads a COM module",
-      
-                       "int abs(int number)\n"+
-      "Return the absolute value of the number",
-
-                       "accept_connect - ",
-                       "float acos(float number)\n"+
-      "Return the arc cosine of the number in radians",
-      
-                       "add - ",
-                       "add_iovec - ",
-                       "addaction - ",
-                       "addcolor - ",
-                       "addcslashes - ",
-                       "addentry - ",
-                       "addfill - ",
-                       "addshape - ",
-                       "addslashes - ",
-                       "addstring - ",
-                       "addstring - ",
-                       "align - ",
-                       "apache_child_terminate - ",
-                       "apache_lookup_uri - ",
-                       "apache_lookup_uri - ",
-                       "apache_note - ",
-                       "apache_sub_req - ",
-                       "array_count_values - ",
-                       "array_diff - ",
-                       "array_filter - ",
-                       "array_flip - ",
-                       "array_intersect - ",
-                       "array_keys - ",
-                       "array_map - ",
-                       "array_merge - ",
-                       "array_merge_recursive - ",
-                       "array_multisort - ",
-                       "array_pad - ",
-                       "array_pop - ",
-                       "array_push - ",
-                       "array_rand - ",
-                       "array_reduce - ",
-                       "array_reverse - ",
-                       "array_search - ",
-                       "array_shift - ",
-                       "array_slice - ",
-                       "array_splice - ",
-                       "array_sum - ",
-                       "array_unique - ",
-                       "array_unshift - ",
-                       "array_values - ",
-                       "array_walk - ",
-                       "arsort - ",
-                       "asin - ",
-                       "asort - ",
-                       "aspell_check - ",
-                       "aspell_check_raw - ",
-                       "aspell_new - ",
-                       "aspell_suggest - ",
-                       "assert - ",
-                       "assert_options - ",
-                       "atan - ",
-                       "atan2 - ",
-                       "base64_decode - ",
-                       "base64_encode - ",
-                       "base_convert - ",
-                       "basename - ",
-                       "bcadd - ",
-                       "bccomp - ",
-                       "bcdiv - ",
-                       "bcmod - ",
-                       "bcmul - ",
-                       "bcpow - ",
-                       "bcscale - ",
-                       "bcsqrt - ",
-                       "bcsub - ",
-                       "bin2hex - ",
-                       "bind - ",
-                       "bindec - ",
-                       "bindtextdomain - ",
-                       "build_iovec - ",
-                       "bzclose - ",
-                       "bzcompress - ",
-                       "bzdecompress - ",
-                       "bzerrno - ",
-                       "bzerror - ",
-                       "bzerrstr - ",
-                       "bzflush - ",
-                       "bzopen - ",
-                       "bzread - ",
-                       "bzwrite - ",
-                       "call_user_func - ",
-                       "call_user_func_array - ",
-                       "call_user_method - ",
-                       "call_user_method_array - ",
-                       "ccvs_add - ",
-                       "ccvs_auth - ",
-                       "ccvs_command - ",
-                       "ccvs_count - ",
-                       "ccvs_delete - ",
-                       "ccvs_done - ",
-                       "ccvs_init - ",
-                       "ccvs_lookup - ",
-                       "ccvs_new - ",
-                       "ccvs_report - ",
-                       "ccvs_return - ",
-                       "ccvs_reverse - ",
-                       "ccvs_sale - ",
-                       "ccvs_status - ",
-                       "ccvs_textvalue - ",
-                       "ccvs_void - ",
-                       "ceil - ",
-                       "chdir - ",
-                       "checkdate - ",
-                       "checkdnsrr - ",
-                       "checkdnsrr - ",
-                       "chgrp - ",
-                       "chmod - ",
-                       "chop - ",
-                       "chown - ",
-                       "chr - ",
-                       "chroot - ",
-                       "chroot - ",
-                       "chunk_split - ",
-                       
-      "bool class_exists(string classname)\n"+
-      "Checks if the class exists",
-
-                       "clearstatcache - ",
-                       "close - ",
-                       
-      "void closedir([resource dir_handle])\n"+
-      "Close directory connection identified by the dir_handle",
-
-                       "closelog - ",
-                       "com_get - ",
-                       "com_propget - ",
-                       "com_propput - ",
-                       "com_propset - ",
-                       "com_set - ",
-                       "compact - ",
-                       "confirm_cybermut_compiled - ",
-                       "confirm_extname_compiled - ",
-                       "connect - ",
-                       "connection_aborted - ",
-                       "connection_status - ",
-                       "constant - ",
-                       "convert_cyr_string - ",
-                       "copy - ",
-                       "cos - ",
-                       "count - ",
-                       "count_chars - ",
-                       "cpdf_add_annotation - ",
-                       "cpdf_add_outline - ",
-                       "cpdf_arc - ",
-                       "cpdf_begin_text - ",
-                       "cpdf_circle - ",
-                       "cpdf_clip - ",
-                       "cpdf_close - ",
-                       "cpdf_closepath - ",
-                       "cpdf_closepath_fill_stroke - ",
-                       "cpdf_closepath_stroke - ",
-                       "cpdf_continue_text - ",
-                       "cpdf_curveto - ",
-                       "cpdf_end_text - ",
-                       "cpdf_fill - ",
-                       "cpdf_fill_stroke - ",
-                       "cpdf_finalize - ",
-                       "cpdf_finalize_page - ",
-                       "cpdf_global_set_document_limits - ",
-                       "cpdf_import_jpeg - ",
-                       "cpdf_lineto - ",
-                       "cpdf_moveto - ",
-                       "cpdf_newpath - ",
-                       "cpdf_open - ",
-                       "cpdf_output_buffer - ",
-                       "cpdf_page_init - ",
-                       "cpdf_place_inline_image - ",
-                       "cpdf_rect - ",
-                       "cpdf_restore - ",
-                       "cpdf_rlineto - ",
-                       "cpdf_rmoveto - ",
-                       "cpdf_rotate - ",
-                       "cpdf_rotate_text - ",
-                       "cpdf_save - ",
-                       "cpdf_save_to_file - ",
-                       "cpdf_scale - ",
-                       "cpdf_set_action_url - ",
-                       "cpdf_set_char_spacing - ",
-                       "cpdf_set_creator - ",
-                       "cpdf_set_current_page - ",
-                       "cpdf_set_font - ",
-                       "cpdf_set_font_directories - ",
-                       "cpdf_set_font_map_file - ",
-                       "cpdf_set_horiz_scaling - ",
-                       "cpdf_set_keywords - ",
-                       "cpdf_set_leading - ",
-                       "cpdf_set_page_animation - ",
-                       "cpdf_set_subject - ",
-                       "cpdf_set_text_matrix - ",
-                       "cpdf_set_text_pos - ",
-                       "cpdf_set_text_rendering - ",
-                       "cpdf_set_text_rise - ",
-                       "cpdf_set_title - ",
-                       "cpdf_set_viewer_preferences - ",
-                       "cpdf_set_word_spacing - ",
-                       "cpdf_setdash - ",
-                       "cpdf_setflat - ",
-                       "cpdf_setgray - ",
-                       "cpdf_setgray_fill - ",
-                       "cpdf_setgray_stroke - ",
-                       "cpdf_setlinecap - ",
-                       "cpdf_setlinejoin - ",
-                       "cpdf_setlinewidth - ",
-                       "cpdf_setmiterlimit - ",
-                       "cpdf_setrgbcolor - ",
-                       "cpdf_setrgbcolor_fill - ",
-                       "cpdf_setrgbcolor_stroke - ",
-                       "cpdf_show - ",
-                       "cpdf_show_xy - ",
-                       "cpdf_stringwidth - ",
-                       "cpdf_stroke - ",
-                       "cpdf_text - ",
-                       "cpdf_translate - ",
-                       "crack_check - ",
-                       "crack_closedict - ",
-                       "crack_getlastmessage - ",
-                       "crack_opendict - ",
-                       "crash - ",
-                       "crc32 - ",
-      
-                       "string create_function(string args, string code)\n"+
-      "Creates an anonymous function, and returns its name (funny, eh?)",
-
-                       "crypt - ",
-                       "crypt - ",
-                       "ctype_alnum - ",
-                       "ctype_alpha - ",
-                       "ctype_cntrl - ",
-                       "ctype_digit - ",
-                       "ctype_graph - ",
-                       "ctype_lower - ",
-                       "ctype_print - ",
-                       "ctype_punct - ",
-                       "ctype_space - ",
-                       "ctype_upper - ",
-                       "ctype_xdigit - ",
-                       "curl_close - ",
-                       "curl_errno - ",
-                       "curl_error - ",
-                       "curl_exec - ",
-                       "curl_getinfo - ",
-                       "curl_getinfo - ",
-                       "curl_init - ",
-                       "curl_setopt - ",
-                       "curl_version - ",
-                       "current - ",
-                       "cv_add - ",
-                       "cv_auth - ",
-                       "cv_command - ",
-                       "cv_count - ",
-                       "cv_delete - ",
-                       "cv_done - ",
-                       "cv_init - ",
-                       "cv_lookup - ",
-                       "cv_new - ",
-                       "cv_report - ",
-                       "cv_return - ",
-                       "cv_reverse - ",
-                       "cv_sale - ",
-                       "cv_status - ",
-                       "cv_textvalue - ",
-                       "cv_void - ",
-                       "cybercash_base64_decode - ",
-                       "cybercash_base64_encode - ",
-                       "cybercash_decr - ",
-                       "cybercash_encr - ",
-                       "cybermut_creerformulairecm - ",
-                       "cybermut_creerreponsecm - ",
-                       "cybermut_testmac - ",
-                       "date - ",
-                       "dba_close - ",
-                       "dba_delete - ",
-                       "dba_exists - ",
-                       "dba_fetch - ",
-                       "dba_firstkey - ",
-                       "dba_insert - ",
-                       "dba_nextkey - ",
-                       "dba_open - ",
-                       "dba_optimize - ",
-                       "dba_popen - ",
-                       "dba_replace - ",
-                       "dba_sync - ",
-                       "dbase_add_record - ",
-                       "dbase_close - ",
-                       "dbase_create - ",
-                       "dbase_delete_record - ",
-                       "dbase_get_record - ",
-                       "dbase_get_record_with_names - ",
-                       "dbase_numfields - ",
-                       "dbase_numrecords - ",
-                       "dbase_open - ",
-                       "dbase_pack - ",
-                       "dbase_replace_record - ",
-                       "dblist - ",
-                       "dbmclose - ",
-                       "dbmdelete - ",
-                       "dbmexists - ",
-                       "dbmfetch - ",
-                       "dbmfirstkey - ",
-                       "dbminsert - ",
-                       "dbmnextkey - ",
-                       "dbmopen - ",
-                       "dbmreplace - ",
-                       "dbx_close - ",
-                       "dbx_cmp_asc - ",
-                       "dbx_cmp_desc - ",
-                       "dbx_connect - ",
-                       "dbx_error - ",
-                       "dbx_query - ",
-                       "dbx_sort - ",
-                       "dcgettext - ",
-                       "decbin - ",
-                       "dechex - ",
-                       "decoct - ",
-      
-                       "bool define(string constant_name, mixed value, case_sensitive=true)\n"+
-      "Define a new constant",
-
-                       "define_syslog_variables - ",
-                       
-      "bool defined(string constant_name)\n"+
-      "Check whether a constant exists",
-      
-                       "deg2rad - ",
-                       "delete_iovec - ",
-                       "dgettext - ",
-                       
-      "class dir(string directory)\n"+
-      "Directory class with properties, handle and class and methods read, rewind and close",
-
-                       "dirname - ",
-                       "diskfreespace - ",
-                       "display_disabled_function - ",
-                       "dl - ",
-                       "domxml_add_root - ",
-                       "domxml_attributes - ",
-                       "domxml_children - ",
-                       "domxml_dumpmem - ",
-                       "domxml_elem_get_attribute - ",
-                       "domxml_elem_set_attribute - ",
-                       "domxml_get_attribute - ",
-                       "domxml_getattr - ",
-                       "domxml_new_child - ",
-                       "domxml_new_xmldoc - ",
-                       "domxml_node - ",
-                       "domxml_node_attributes - ",
-                       "domxml_node_children - ",
-                       "domxml_node_new_child - ",
-                       "domxml_node_set_content - ",
-                       "domxml_node_unlink_node - ",
-                       "domxml_root - ",
-                       "domxml_set_attribute - ",
-                       "domxml_setattr - ",
-                       "domxml_unlink_node - ",
-                       "domxml_version - ",
-                       "doubleval - ",
-                       "drawarc - ",
-                       "drawcircle - ",
-                       "drawcubic - ",
-                       "drawcubicto - ",
-                       "drawcurve - ",
-                       "drawcurveto - ",
-                       "drawglyph - ",
-                       "drawline - ",
-                       "drawlineto - ",
-                       "each - ",
-                       "easter_date - ",
-                       "easter_days - ",
-                       "end - ",
-                       "ereg - ",
-                       "ereg_replace - ",
-                       "eregi - ",
-                       "eregi_replace - ",
-                       "error_log - ",
-                       "error_reporting - ",
-                       "escapeshellarg - ",
-                       "escapeshellcmd - ",
-                       "exec - ",
-                       "exit - ",
-                       "exp - ",
-                       "explode - ",
-                       "extension_loaded - ",
-                       "extract - ",
-                       "ezmlm_hash - ",
-                       "ezmlm_hash - ",
-                       "fbsql - ",
-                       "fbsql_affected_rows - ",
-                       "fbsql_autocommit - ",
-                       "fbsql_close - ",
-                       "fbsql_commit - ",
-                       "fbsql_connect - ",
-                       "fbsql_create_db - ",
-                       "fbsql_data_seek - ",
-                       "fbsql_database - ",
-                       "fbsql_database_password - ",
-                       "fbsql_db_query - ",
-                       "fbsql_drop_db - ",
-                       "fbsql_errno - ",
-                       "fbsql_error - ",
-                       "fbsql_fetch_array - ",
-                       "fbsql_fetch_assoc - ",
-                       "fbsql_fetch_field - ",
-                       "fbsql_fetch_lengths - ",
-                       "fbsql_fetch_object - ",
-                       "fbsql_fetch_row - ",
-                       "fbsql_field_flags - ",
-                       "fbsql_field_len - ",
-                       "fbsql_field_name - ",
-                       "fbsql_field_seek - ",
-                       "fbsql_field_table - ",
-                       "fbsql_field_type - ",
-                       "fbsql_free_result - ",
-                       "fbsql_hostname - ",
-                       "fbsql_insert_id - ",
-                       "fbsql_list_dbs - ",
-                       "fbsql_list_fields - ",
-                       "fbsql_list_tables - ",
-                       "fbsql_next_result - ",
-                       "fbsql_num_fields - ",
-                       "fbsql_num_rows - ",
-                       "fbsql_password - ",
-                       "fbsql_pconnect - ",
-                       "fbsql_query - ",
-                       "fbsql_result - ",
-                       "fbsql_rollback - ",
-                       "fbsql_select_db - ",
-                       "fbsql_start_db - ",
-                       "fbsql_stop_db - ",
-                       "fbsql_username - ",
-                       "fbsql_warnings - ",
-                       "fclose - ",
-                       "fd_alloc - ",
-                       "fd_clear - ",
-                       "fd_dealloc - ",
-                       "fd_isset - ",
-                       "fd_set - ",
-                       "fd_zero - ",
-                       "fdf_add_template - ",
-                       "fdf_close - ",
-                       "fdf_create - ",
-                       "fdf_get_file - ",
-                       "fdf_get_status - ",
-                       "fdf_get_value - ",
-                       "fdf_next_field_name - ",
-                       "fdf_open - ",
-                       "fdf_save - ",
-                       "fdf_set_ap - ",
-                       "fdf_set_file - ",
-                       "fdf_set_flags - ",
-                       "fdf_set_javascript_action - ",
-                       "fdf_set_opt - ",
-                       "fdf_set_status - ",
-                       "fdf_set_submit_form_action - ",
-                       "fdf_set_value - ",
-                       "feof - ",
-                       "fetch_iovec - ",
-                       "fflush - ",
-                       "fgetc - ",
-                       "fgetcsv - ",
-                       "fgets - ",
-                       "fgetss - ",
-                       "file - ",
-                       "file_exists - ",
-                       "fileatime - ",
-                       "filectime - ",
-                       "filegroup - ",
-                       "fileinode - ",
-                       "filemtime - ",
-                       "fileowner - ",
-                       "fileperms - ",
-                       "filepro - ",
-                       "filepro_fieldcount - ",
-                       "filepro_fieldname - ",
-                       "filepro_fieldtype - ",
-                       "filepro_fieldwidth - ",
-                       "filepro_retrieve - ",
-                       "filepro_rowcount - ",
-                       "filesize - ",
-                       "filetype - ",
-                       "flock - ",
-                       "floor - ",
-                       "flush - ",
-                       "fopen - ",
-                       "fopenstream - ",
-                       "fopenstream - ",
-                       "fpassthru - ",
-                       "fputs - ",
-                       "fread - ",
-                       "free_iovec - ",
-                       "frenchtojd - ",
-                       "fribidi_log2vis - ",
-                       "fscanf - ",
-                       "fseek - ",
-                       "fsockopen - ",
-                       "fstat - ",
-                       "ftell - ",
-                       "ftp_cdup - ",
-                       "ftp_chdir - ",
-                       "ftp_connect - ",
-                       "ftp_delete - ",
-                       "ftp_exec - ",
-                       "ftp_fget - ",
-                       "ftp_fput - ",
-                       "ftp_get - ",
-                       "ftp_login - ",
-                       "ftp_mdtm - ",
-                       "ftp_mkdir - ",
-                       "ftp_nlist - ",
-                       "ftp_pasv - ",
-                       "ftp_put - ",
-                       "ftp_pwd - ",
-                       "ftp_quit - ",
-                       "ftp_rawlist - ",
-                       "ftp_rename - ",
-                       "ftp_rmdir - ",
-                       "ftp_site - ",
-                       "ftp_size - ",
-                       "ftp_systype - ",
-                       "ftruncate - ",
-                       "func_get_arg - ",
-                       "func_get_args - ",
-                       "func_num_args - ",
-                       "function_exists - ",
-                       "fwrite - ",
-                       "get_all_headers - ",
-                       "get_browser - ",
-                       "get_cfg_var - ",
-                       "get_class - ",
-                       "get_class_methods - ",
-                       "get_class_vars - ",
-                       "get_current_user - ",
-                       "get_declared_classes - ",
-                       "get_defined_functions - ",
-                       "get_defined_vars - ",
-                       "get_extension_funcs - ",
-                       "get_html_translation_table - ",
-                       "get_included_files - ",
-                       "get_loaded_extensions - ",
-                       "get_magic_quotes_gpc - ",
-                       "get_magic_quotes_runtime - ",
-                       "get_meta_tags - ",
-                       "get_object_vars - ",
-                       "get_parent_class - ",
-                       "get_required_files - ",
-                       "get_resource_type - ",
-                       "getallheaders - ",
-                       "getallheaders - ",
-                       "getascent - ",
-                       "getascent - ",
-                       "getcwd - ",
-                       "getdate - ",
-                       "getdescent - ",
-                       "getdescent - ",
-                       "getenv - ",
-                       "getheight - ",
-                       "gethostbyaddr - ",
-                       "gethostbyaddr - ",
-                       "gethostbyname - ",
-                       "gethostbyname - ",
-                       "gethostbynamel - ",
-                       "getimagesize - ",
-                       "getlastmod - ",
-                       "getleading - ",
-                       "getleading - ",
-                       "getmxrr - ",
-                       "getmxrr - ",
-                       "getmyinode - ",
-                       "getmypid - ",
-                       "getmyuid - ",
-                       "getpeername - ",
-                       "getprotobyname - ",
-                       "getprotobynumber - ",
-                       "getrandmax - ",
-                       "getrusage - ",
-                       "getrusage - ",
-                       "getservbyname - ",
-                       "getservbyport - ",
-                       "getshape1 - ",
-                       "getshape2 - ",
-                       "getsockname - ",
-                       "getsockopt - ",
-                       "gettext - ",
-                       "gettimeofday - ",
-                       "gettype - ",
-                       "getwidth - ",
-                       "getwidth - ",
-                       "getwidth - ",
-                       "gmdate - ",
-                       "gmmktime - ",
-                       "gmp_abs - ",
-                       "gmp_add - ",
-                       "gmp_and - ",
-                       "gmp_clrbit - ",
-                       "gmp_cmp - ",
-                       "gmp_com - ",
-                       "gmp_div - ",
-                       "gmp_div_q - ",
-                       "gmp_div_qr - ",
-                       "gmp_div_r - ",
-                       "gmp_divexact - ",
-                       "gmp_fact - ",
-                       "gmp_gcd - ",
-                       "gmp_gcdext - ",
-                       "gmp_hamdist - ",
-                       "gmp_init - ",
-                       "gmp_intval - ",
-                       "gmp_invert - ",
-                       "gmp_jacobi - ",
-                       "gmp_legendre - ",
-                       "gmp_mod - ",
-                       "gmp_mul - ",
-                       "gmp_neg - ",
-                       "gmp_or - ",
-                       "gmp_perfect_square - ",
-                       "gmp_popcount - ",
-                       "gmp_pow - ",
-                       "gmp_powm - ",
-                       "gmp_prob_prime - ",
-                       "gmp_random - ",
-                       "gmp_scan0 - ",
-                       "gmp_scan1 - ",
-                       "gmp_setbit - ",
-                       "gmp_sign - ",
-                       "gmp_sqrt - ",
-                       "gmp_sqrtrem - ",
-                       "gmp_strval - ",
-                       "gmp_sub - ",
-                       "gmp_xor - ",
-                       "gmstrftime - ",
-                       "gmstrftime - ",
-                       "gregoriantojd - ",
-                       "gzclose - ",
-                       "gzcompress - ",
-                       "gzdeflate - ",
-                       "gzencode - ",
-                       "gzeof - ",
-                       "gzfile - ",
-                       "gzgetc - ",
-                       "gzgets - ",
-                       "gzgetss - ",
-                       "gzinflate - ",
-                       "gzopen - ",
-                       "gzpassthru - ",
-                       "gzputs - ",
-                       "gzread - ",
-                       "gzrewind - ",
-                       "gzseek - ",
-                       "gztell - ",
-                       "gzuncompress - ",
-                       "gzwrite - ",
-                       "header - ",
-                       "headers_sent - ",
-                       "hebrev - ",
-                       "hebrevc - ",
-                       "hexdec - ",
-                       "highlight_file - ",
-                       "highlight_string - ",
-                       "htmlentities - ",
-                       "htmlspecialchars - ",
-                       "hw_array2objrec - ",
-                       "hw_changeobject - ",
-                       "hw_children - ",
-                       "hw_childrenobj - ",
-                       "hw_close - ",
-                       "hw_connect - ",
-                       "hw_connection_info - ",
-                       "hw_cp - ",
-                       "hw_deleteobject - ",
-                       "hw_docbyanchor - ",
-                       "hw_docbyanchorobj - ",
-                       "hw_document_attributes - ",
-                       "hw_document_bodytag - ",
-                       "hw_document_content - ",
-                       "hw_document_setcontent - ",
-                       "hw_document_size - ",
-                       "hw_dummy - ",
-                       "hw_edittext - ",
-                       "hw_error - ",
-                       "hw_errormsg - ",
-                       "hw_free_document - ",
-                       "hw_getanchors - ",
-                       "hw_getanchorsobj - ",
-                       "hw_getandlock - ",
-                       "hw_getcgi - ",
-                       "hw_getchildcoll - ",
-                       "hw_getchildcollobj - ",
-                       "hw_getchilddoccoll - ",
-                       "hw_getchilddoccollobj - ",
-                       "hw_getobject - ",
-                       "hw_getobjectbyftquery - ",
-                       "hw_getobjectbyftquerycoll - ",
-                       "hw_getobjectbyftquerycollobj - ",
-                       "hw_getobjectbyftqueryobj - ",
-                       "hw_getobjectbyquery - ",
-                       "hw_getobjectbyquerycoll - ",
-                       "hw_getobjectbyquerycollobj - ",
-                       "hw_getobjectbyqueryobj - ",
-                       "hw_getparents - ",
-                       "hw_getparentsobj - ",
-                       "hw_getrellink - ",
-                       "hw_getremote - ",
-                       "hw_getremotechildren - ",
-                       "hw_getsrcbydestobj - ",
-                       "hw_gettext - ",
-                       "hw_getusername - ",
-                       "hw_identify - ",
-                       "hw_incollections - ",
-                       "hw_info - ",
-                       "hw_inscoll - ",
-                       "hw_insdoc - ",
-                       "hw_insertanchors - ",
-                       "hw_insertdocument - ",
-                       "hw_insertobject - ",
-                       "hw_mapid - ",
-                       "hw_modifyobject - ",
-                       "hw_mv - ",
-                       "hw_new_document - ",
-                       "hw_new_document_from_file - ",
-                       "hw_objrec2array - ",
-                       "hw_output_document - ",
-                       "hw_pconnect - ",
-                       "hw_pipecgi - ",
-                       "hw_pipedocument - ",
-                       "hw_root - ",
-                       "hw_setlinkroot - ",
-                       "hw_stat - ",
-                       "hw_unlock - ",
-                       "hw_who - ",
-                       "ibase_blob_add - ",
-                       "ibase_blob_cancel - ",
-                       "ibase_blob_close - ",
-                       "ibase_blob_create - ",
-                       "ibase_blob_echo - ",
-                       "ibase_blob_get - ",
-                       "ibase_blob_import - ",
-                       "ibase_blob_info - ",
-                       "ibase_blob_open - ",
-                       "ibase_close - ",
-                       "ibase_commit - ",
-                       "ibase_connect - ",
-                       "ibase_errmsg - ",
-                       "ibase_execute - ",
-                       "ibase_fetch_object - ",
-                       "ibase_fetch_row - ",
-                       "ibase_field_info - ",
-                       "ibase_free_query - ",
-                       "ibase_free_result - ",
-                       "ibase_num_fields - ",
-                       "ibase_pconnect - ",
-                       "ibase_prepare - ",
-                       "ibase_query - ",
-                       "ibase_rollback - ",
-                       "ibase_timefmt - ",
-                       "ibase_trans - ",
-                       "icap_create_calendar - ",
-                       "icap_delete_calendar - ",
-                       "icap_delete_event - ",
-                       "icap_fetch_event - ",
-                       "icap_list_alarms - ",
-                       "icap_list_events - ",
-                       "icap_open - ",
-                       "icap_popen - ",
-                       "icap_rename_calendar - ",
-                       "icap_reopen - ",
-                       "icap_snooze - ",
-                       "icap_store_event - ",
-                       "iconv - ",
-                       "iconv_get_encoding - ",
-                       "iconv_set_encoding - ",
-                       "ifx_affected_rows - ",
-                       "ifx_blobinfile_mode - ",
-                       "ifx_byteasvarchar - ",
-                       "ifx_close - ",
-                       "ifx_connect - ",
-                       "ifx_copy_blob - ",
-                       "ifx_create_blob - ",
-                       "ifx_create_char - ",
-                       "ifx_do - ",
-                       "ifx_error - ",
-                       "ifx_errormsg - ",
-                       "ifx_fetch_row - ",
-                       "ifx_fieldproperties - ",
-                       "ifx_fieldtypes - ",
-                       "ifx_free_blob - ",
-                       "ifx_free_char - ",
-                       "ifx_free_result - ",
-                       "ifx_get_blob - ",
-                       "ifx_get_char - ",
-                       "ifx_getsqlca - ",
-                       "ifx_htmltbl_result - ",
-                       "ifx_nullformat - ",
-                       "ifx_num_fields - ",
-                       "ifx_num_rows - ",
-                       "ifx_pconnect - ",
-                       "ifx_prepare - ",
-                       "ifx_query - ",
-                       "ifx_textasvarchar - ",
-                       "ifx_update_blob - ",
-                       "ifx_update_char - ",
-                       "ifxus_close_slob - ",
-                       "ifxus_create_slob - ",
-                       "ifxus_free_slob - ",
-                       "ifxus_open_slob - ",
-                       "ifxus_read_slob - ",
-                       "ifxus_seek_slob - ",
-                       "ifxus_tell_slob - ",
-                       "ifxus_write_slob - ",
-                       "ignore_user_abort - ",
-                       "iis_addserver - ",
-                       "iis_getdirsecurity - ",
-                       "iis_getscriptmap - ",
-                       "iis_getserverbycomment - ",
-                       "iis_getserverbypath - ",
-                       "iis_getserverright - ",
-                       "iis_getservicestate - ",
-                       "iis_removeserver - ",
-                       "iis_setappsettings - ",
-                       "iis_setdirsecurity - ",
-                       "iis_setscriptmap - ",
-                       "iis_setserverright - ",
-                       "iis_startserver - ",
-                       "iis_startservice - ",
-                       "iis_stopserver - ",
-                       "iis_stopservice - ",
-                       "image2wbmp - ",
-                       "imagealphablending - ",
-                       "imagearc - ",
-                       "imagechar - ",
-                       "imagecharup - ",
-                       "imagecolorallocate - ",
-                       "imagecolorat - ",
-                       "imagecolorclosest - ",
-                       "imagecolorclosestalpha - ",
-                       "imagecolorclosesthwb - ",
-                       "imagecolordeallocate - ",
-                       "imagecolorexact - ",
-                       "imagecolorexactalpha - ",
-                       "imagecolorresolve - ",
-                       "imagecolorresolvealpha - ",
-                       "imagecolorset - ",
-                       "imagecolorsforindex - ",
-                       "imagecolorstotal - ",
-                       "imagecolortransparent - ",
-                       "imagecopy - ",
-                       "imagecopymerge - ",
-                       "imagecopymergegray - ",
-                       "imagecopyresampled - ",
-                       "imagecopyresized - ",
-                       "imagecreate - ",
-                       "imagecreatefromgif - ",
-                       "imagecreatefromjpeg - ",
-                       "imagecreatefrompng - ",
-                       "imagecreatefromstring - ",
-                       "imagecreatefromwbmp - ",
-                       "imagecreatefromxbm - ",
-                       "imagecreatefromxpm - ",
-                       "imagecreatetruecolor - ",
-                       "imagedashedline - ",
-                       "imagedestroy - ",
-                       "imageellipse - ",
-                       "imagefill - ",
-                       "imagefilledarc - ",
-                       "imagefilledellipse - ",
-                       "imagefilledpolygon - ",
-                       "imagefilledrectangle - ",
-                       "imagefilltoborder - ",
-                       "imagefontheight - ",
-                       "imagefontwidth - ",
-                       "imagegammacorrect - ",
-                       "imagegif - ",
-                       "imageinterlace - ",
-                       "imagejpeg - ",
-                       "imageline - ",
-                       "imageloadfont - ",
-                       "imagepalettecopy - ",
-                       "imagepng - ",
-                       "imagepolygon - ",
-                       "imagepsbbox - ",
-                       "imagepscopyfont - ",
-                       "imagepsencodefont - ",
-                       "imagepsextendfont - ",
-                       "imagepsfreefont - ",
-                       "imagepsloadfont - ",
-                       "imagepsslantfont - ",
-                       "imagepstext - ",
-                       "imagerectangle - ",
-                       "imagesetbrush - ",
-                       "imagesetpixel - ",
-                       "imagesetstyle - ",
-                       "imagesetthickness - ",
-                       "imagesettile - ",
-                       "imagestring - ",
-                       "imagestringup - ",
-                       "imagesx - ",
-                       "imagesy - ",
-                       "imagetruecolortopalette - ",
-                       "imagettfbbox - ",
-                       "imagettftext - ",
-                       "imagetypes - ",
-                       "imagewbmp - ",
-                       "imap_8bit - ",
-                       "imap_alerts - ",
-                       "imap_append - ",
-                       "imap_base64 - ",
-                       "imap_binary - ",
-                       "imap_body - ",
-                       "imap_bodystruct - ",
-                       "imap_check - ",
-                       "imap_clearflag_full - ",
-                       "imap_close - ",
-                       "imap_create - ",
-                       "imap_createmailbox - ",
-                       "imap_delete - ",
-                       "imap_deletemailbox - ",
-                       "imap_errors - ",
-                       "imap_expunge - ",
-                       "imap_fetch_overview - ",
-                       "imap_fetchbody - ",
-                       "imap_fetchheader - ",
-                       "imap_fetchstructure - ",
-                       "imap_fetchtext - ",
-                       "imap_get_quota - ",
-                       "imap_getmailboxes - ",
-                       "imap_getsubscribed - ",
-                       "imap_header - ",
-                       "imap_headerinfo - ",
-                       "imap_headers - ",
-                       "imap_last_error - ",
-                       "imap_list - ",
-                       "imap_listmailbox - ",
-                       "imap_listsubscribed - ",
-                       "imap_lsub - ",
-                       "imap_mail - ",
-                       "imap_mail - ",
-                       "imap_mail_compose - ",
-                       "imap_mail_copy - ",
-                       "imap_mail_move - ",
-                       "imap_mailboxmsginfo - ",
-                       "imap_mime_header_decode - ",
-                       "imap_msgno - ",
-                       "imap_num_msg - ",
-                       "imap_num_recent - ",
-                       "imap_open - ",
-                       "imap_ping - ",
-                       "imap_popen - ",
-                       "imap_qprint - ",
-                       "imap_rename - ",
-                       "imap_renamemailbox - ",
-                       "imap_reopen - ",
-                       "imap_rfc822_parse_adrlist - ",
-                       "imap_rfc822_parse_headers - ",
-                       "imap_rfc822_write_address - ",
-                       "imap_scan - ",
-                       "imap_scanmailbox - ",
-                       "imap_search - ",
-                       "imap_set_quota - ",
-                       "imap_setflag_full - ",
-                       "imap_sort - ",
-                       "imap_status - ",
-                       "imap_subscribe - ",
-                       "imap_uid - ",
-                       "imap_undelete - ",
-                       "imap_unsubscribe - ",
-                       "imap_utf7_decode - ",
-                       "imap_utf7_encode - ",
-                       "imap_utf8 - ",
-                       "implode - ",
-                       "in_array - ",
-                       "ingres_autocommit - ",
-                       "ingres_close - ",
-                       "ingres_commit - ",
-                       "ingres_connect - ",
-                       "ingres_fetch_array - ",
-                       "ingres_fetch_object - ",
-                       "ingres_fetch_row - ",
-                       "ingres_field_length - ",
-                       "ingres_field_name - ",
-                       "ingres_field_nullable - ",
-                       "ingres_field_precision - ",
-                       "ingres_field_scale - ",
-                       "ingres_field_type - ",
-                       "ingres_num_fields - ",
-                       "ingres_num_rows - ",
-                       "ingres_pconnect - ",
-                       "ingres_query - ",
-                       "ingres_rollback - ",
-                       "ini_alter - ",
-                       "ini_get - ",
-                       "ini_restore - ",
-                       "ini_set - ",
-                       "intval - ",
-                       "ip2long - ",
-                       "iptcembed - ",
-                       "iptcparse - ",
-                       "ircg_channel_mode - ",
-                       "ircg_disconnect - ",
-                       "ircg_html_encode - ",
-                       "ircg_ignore_add - ",
-                       "ircg_ignore_del - ",
-                       "ircg_is_conn_alive - ",
-                       "ircg_join - ",
-                       "ircg_kick - ",
-                       "ircg_lookup_format_messages - ",
-                       "ircg_msg - ",
-                       "ircg_nick - ",
-                       "ircg_nickname_escape - ",
-                       "ircg_nickname_unescape - ",
-                       "ircg_notice - ",
-                       "ircg_part - ",
-                       "ircg_pconnect - ",
-                       "ircg_register_format_messages - ",
-                       "ircg_set_current - ",
-                       "ircg_topic - ",
-                       "ircg_whois - ",
-                       "is_array - ",
-                       "is_bool - ",
-                       "is_dir - ",
-                       "is_double - ",
-                       "is_executable - ",
-                       "is_file - ",
-                       "is_float - ",
-                       "is_int - ",
-                       "is_integer - ",
-                       "is_link - ",
-                       "is_long - ",
-                       "is_null - ",
-                       "is_numeric - ",
-                       "is_object - ",
-                       "is_readable - ",
-                       "is_real - ",
-                       "is_resource - ",
-                       "is_scalar - ",
-                       "is_string - ",
-                       "is_subclass_of - ",
-                       "is_uploaded_file - ",
-                       "is_writable - ",
-                       "is_writeable - ",
-                       "java_last_exception_clear - ",
-                       "java_last_exception_get - ",
-                       "jddayofweek - ",
-                       "jdmonthname - ",
-                       "jdtofrench - ",
-                       "jdtogregorian - ",
-                       "jdtojewish - ",
-                       "jdtojulian - ",
-                       "jdtounix - ",
-                       "jewishtojd - ",
-                       "join - ",
-                       "jpeg2wbmp - ",
-                       "juliantojd - ",
-                       "key - ",
-                       "krsort - ",
-                       "ksort - ",
-                       "labelframe - ",
-                       "labelframe - ",
-                       "lcg_value - ",
-                       "ldap_8859_to_t61 - ",
-                       "ldap_add - ",
-                       "ldap_bind - ",
-                       "ldap_close - ",
-                       "ldap_compare - ",
-                       "ldap_connect - ",
-                       "ldap_count_entries - ",
-                       "ldap_delete - ",
-                       "ldap_dn2ufn - ",
-                       "ldap_err2str - ",
-                       "ldap_errno - ",
-                       "ldap_error - ",
-                       "ldap_explode_dn - ",
-                       "ldap_first_attribute - ",
-                       "ldap_first_entry - ",
-                       "ldap_first_reference - ",
-                       "ldap_free_result - ",
-                       "ldap_get_attributes - ",
-                       "ldap_get_dn - ",
-                       "ldap_get_entries - ",
-                       "ldap_get_option - ",
-                       "ldap_get_values - ",
-                       "ldap_get_values_len - ",
-                       "ldap_list - ",
-                       "ldap_mod_add - ",
-                       "ldap_mod_del - ",
-                       "ldap_mod_replace - ",
-                       "ldap_modify - ",
-                       "ldap_next_attribute - ",
-                       "ldap_next_entry - ",
-                       "ldap_next_reference - ",
-                       "ldap_parse_reference - ",
-                       "ldap_parse_result - ",
-                       "ldap_read - ",
-                       "ldap_rename - ",
-                       "ldap_search - ",
-                       "ldap_set_option - ",
-                       "ldap_t61_to_8859 - ",
-                       "ldap_unbind - ",
-                       "leak - ",
-                       "levenshtein - ",
-                       "link - ",
-                       "link - ",
-                       "linkinfo - ",
-                       "linkinfo - ",
-                       "listen - ",
-                       "localeconv - ",
-                       "localtime - ",
-                       "log - ",
-                       "log10 - ",
-                       "long2ip - ",
-                       "lstat - ",
-                       "ltrim - ",
-                       "magic_quotes_runtime - ",
-                       "mail - ",
-                       "mail - ",
-                       "max - ",
-                       "mcal_append_event - ",
-                       "mcal_close - ",
-                       "mcal_create_calendar - ",
-                       "mcal_date_compare - ",
-                       "mcal_date_valid - ",
-                       "mcal_day_of_week - ",
-                       "mcal_day_of_year - ",
-                       "mcal_days_in_month - ",
-                       "mcal_delete_calendar - ",
-                       "mcal_delete_event - ",
-                       "mcal_event_add_attribute - ",
-                       "mcal_event_init - ",
-                       "mcal_event_set_alarm - ",
-                       "mcal_event_set_category - ",
-                       "mcal_event_set_class - ",
-                       "mcal_event_set_description - ",
-                       "mcal_event_set_end - ",
-                       "mcal_event_set_recur_daily - ",
-                       "mcal_event_set_recur_monthly_mday - ",
-                       "mcal_event_set_recur_monthly_wday - ",
-                       "mcal_event_set_recur_none - ",
-                       "mcal_event_set_recur_weekly - ",
-                       "mcal_event_set_recur_yearly - ",
-                       "mcal_event_set_start - ",
-                       "mcal_event_set_title - ",
-                       "mcal_fetch_current_stream_event - ",
-                       "mcal_fetch_event - ",
-                       "mcal_is_leap_year - ",
-                       "mcal_list_alarms - ",
-                       "mcal_list_events - ",
-                       "mcal_next_recurrence - ",
-                       "mcal_open - ",
-                       "mcal_popen - ",
-                       "mcal_rename_calendar - ",
-                       "mcal_reopen - ",
-                       "mcal_snooze - ",
-                       "mcal_store_event - ",
-                       "mcal_time_valid - ",
-                       "mcal_week_of_year - ",
-                       "mcrypt_cbc - ",
-                       "mcrypt_cfb - ",
-                       "mcrypt_create_iv - ",
-                       "mcrypt_decrypt - ",
-                       "mcrypt_ecb - ",
-                       "mcrypt_enc_get_algorithms_name - ",
-                       "mcrypt_enc_get_block_size - ",
-                       "mcrypt_enc_get_iv_size - ",
-                       "mcrypt_enc_get_key_size - ",
-                       "mcrypt_enc_get_modes_name - ",
-                       "mcrypt_enc_get_supported_key_sizes - ",
-                       "mcrypt_enc_is_block_algorithm - ",
-                       "mcrypt_enc_is_block_algorithm_mode - ",
-                       "mcrypt_enc_is_block_mode - ",
-                       "mcrypt_enc_self_test - ",
-                       "mcrypt_encrypt - ",
-                       "mcrypt_generic - ",
-                       "mcrypt_generic_end - ",
-                       "mcrypt_generic_init - ",
-                       "mcrypt_get_block_size - ",
-                       "mcrypt_get_cipher_name - ",
-                       "mcrypt_get_iv_size - ",
-                       "mcrypt_get_key_size - ",
-                       "mcrypt_list_algorithms - ",
-                       "mcrypt_list_modes - ",
-                       "mcrypt_module_close - ",
-                       "mcrypt_module_get_algo_block_size - ",
-                       "mcrypt_module_get_algo_key_size - ",
-                       "mcrypt_module_get_supported_key_sizes - ",
-                       "mcrypt_module_is_block_algorithm - ",
-                       "mcrypt_module_is_block_algorithm_mode - ",
-                       "mcrypt_module_is_block_mode - ",
-                       "mcrypt_module_open - ",
-                       "mcrypt_module_self_test - ",
-                       "mcrypt_ofb - ",
-                       "md5 - ",
-                       "mdecrypt_generic - ",
-                       "metaphone - ",
-                       "method_exists - ",
-                       "mhash - ",
-                       "mhash_count - ",
-                       "mhash_get_block_size - ",
-                       "mhash_get_hash_name - ",
-                       "mhash_keygen_s2k - ",
-                       "microtime - ",
-                       "min - ",
-                       "ming_setcubicthreshold - ",
-                       "ming_setscale - ",
-                       "mkdir - ",
-                       "mktime - ",
-                       "move - ",
-                       "move_uploaded_file - ",
-                       "movepen - ",
-                       "movepento - ",
-                       "moveto - ",
-                       "moveto - ",
-                       "moveto - ",
-                       "msql - ",
-                       "msql_affected_rows - ",
-                       "msql_close - ",
-                       "msql_connect - ",
-                       "msql_create_db - ",
-                       "msql_createdb - ",
-                       "msql_data_seek - ",
-                       "msql_db_query - ",
-                       "msql_dbname - ",
-                       "msql_drop_db - ",
-                       "msql_dropdb - ",
-                       "msql_error - ",
-                       "msql_fetch_array - ",
-                       "msql_fetch_field - ",
-                       "msql_fetch_object - ",
-                       "msql_fetch_row - ",
-                       "msql_field_flags - ",
-                       "msql_field_len - ",
-                       "msql_field_name - ",
-                       "msql_field_seek - ",
-                       "msql_field_table - ",
-                       "msql_field_type - ",
-                       "msql_fieldflags - ",
-                       "msql_fieldlen - ",
-                       "msql_fieldname - ",
-                       "msql_fieldtable - ",
-                       "msql_fieldtype - ",
-                       "msql_free_result - ",
-                       "msql_freeresult - ",
-                       "msql_list_dbs - ",
-                       "msql_list_fields - ",
-                       "msql_list_tables - ",
-                       "msql_listdbs - ",
-                       "msql_listfields - ",
-                       "msql_listtables - ",
-                       "msql_num_fields - ",
-                       "msql_num_rows - ",
-                       "msql_numfields - ",
-                       "msql_numrows - ",
-                       "msql_pconnect - ",
-                       "msql_query - ",
-                       "msql_regcase - ",
-                       "msql_result - ",
-                       "msql_select_db - ",
-                       "msql_selectdb - ",
-                       "msql_tablename - ",
-                       "mssql_affected_rows - ",
-                       "mssql_affected_rows - ",
-                       "mssql_close - ",
-                       "mssql_close - ",
-                       "mssql_close - ",
-                       "mssql_connect - ",
-                       "mssql_connect - ",
-                       "mssql_connect - ",
-                       "mssql_data_seek - ",
-                       "mssql_data_seek - ",
-                       "mssql_data_seek - ",
-                       "mssql_fetch_array - ",
-                       "mssql_fetch_array - ",
-                       "mssql_fetch_array - ",
-                       "mssql_fetch_batch - ",
-                       "mssql_fetch_field - ",
-                       "mssql_fetch_field - ",
-                       "mssql_fetch_field - ",
-                       "mssql_fetch_object - ",
-                       "mssql_fetch_object - ",
-                       "mssql_fetch_object - ",
-                       "mssql_fetch_row - ",
-                       "mssql_fetch_row - ",
-                       "mssql_fetch_row - ",
-                       "mssql_field_length - ",
-                       "mssql_field_name - ",
-                       "mssql_field_seek - ",
-                       "mssql_field_seek - ",
-                       "mssql_field_seek - ",
-                       "mssql_field_type - ",
-                       "mssql_free_result - ",
-                       "mssql_free_result - ",
-                       "mssql_free_result - ",
-                       "mssql_get_last_message - ",
-                       "mssql_get_last_message - ",
-                       "mssql_get_last_message - ",
-                       "mssql_min_client_severity - ",
-                       "mssql_min_error_severity - ",
-                       "mssql_min_error_severity - ",
-                       "mssql_min_message_severity - ",
-                       "mssql_min_message_severity - ",
-                       "mssql_min_server_severity - ",
-                       "mssql_next_result - ",
-                       "mssql_num_fields - ",
-                       "mssql_num_fields - ",
-                       "mssql_num_fields - ",
-                       "mssql_num_rows - ",
-                       "mssql_num_rows - ",
-                       "mssql_num_rows - ",
-                       "mssql_pconnect - ",
-                       "mssql_pconnect - ",
-                       "mssql_pconnect - ",
-                       "mssql_query - ",
-                       "mssql_query - ",
-                       "mssql_query - ",
-                       "mssql_result - ",
-                       "mssql_result - ",
-                       "mssql_result - ",
-                       "mssql_rows_affected - ",
-                       "mssql_select_db - ",
-                       "mssql_select_db - ",
-                       "mssql_select_db - ",
-                       "mt_getrandmax - ",
-                       "mt_rand - ",
-                       "mt_srand - ",
-                       "multcolor - ",
-                       "muscat_close - ",
-                       "muscat_get - ",
-                       "muscat_give - ",
-                       "muscat_setup - ",
-                       "muscat_setup_net - ",
-                       "mysql - ",
-                       "mysql_affected_rows - ",
-                       "mysql_close - ",
-                       "mysql_connect - ",
-                       "mysql_create_db - ",
-                       "mysql_createdb - ",
-                       "mysql_data_seek - ",
-                       "mysql_db_name - ",
-                       "mysql_db_query - ",
-                       "mysql_dbname - ",
-                       "mysql_drop_db - ",
-                       "mysql_dropdb - ",
-                       "mysql_errno - ",
-                       "mysql_error - ",
-                       "mysql_escape_string - ",
-                       "mysql_fetch_array - ",
-                       "mysql_fetch_assoc - ",
-                       "mysql_fetch_field - ",
-                       "mysql_fetch_lengths - ",
-                       "mysql_fetch_object - ",
-                       "mysql_fetch_row - ",
-                       "mysql_field_flags - ",
-                       "mysql_field_len - ",
-                       "mysql_field_name - ",
-                       "mysql_field_seek - ",
-                       "mysql_field_table - ",
-                       "mysql_field_type - ",
-                       "mysql_fieldflags - ",
-                       "mysql_fieldlen - ",
-                       "mysql_fieldname - ",
-                       "mysql_fieldtable - ",
-                       "mysql_fieldtype - ",
-                       "mysql_free_result - ",
-                       "mysql_freeresult - ",
-                       "mysql_get_client_info - ",
-                       "mysql_get_host_info - ",
-                       "mysql_get_proto_info - ",
-                       "mysql_get_server_info - ",
-                       "mysql_insert_id - ",
-                       "mysql_list_dbs - ",
-                       "mysql_list_fields - ",
-                       "mysql_list_tables - ",
-                       "mysql_listdbs - ",
-                       "mysql_listfields - ",
-                       "mysql_listtables - ",
-                       "mysql_num_fields - ",
-                       "mysql_num_rows - ",
-                       "mysql_numfields - ",
-                       "mysql_numrows - ",
-                       "mysql_pconnect - ",
-                       "mysql_query - ",
-                       "mysql_result - ",
-                       "mysql_select_db - ",
-                       "mysql_selectdb - ",
-                       "mysql_tablename - ",
-                       "mysql_unbuffered_query - ",
-                       "natcasesort - ",
-                       "natsort - ",
-                       "new_xmldoc - ",
-                       "next - ",
-                       "nextframe - ",
-                       "nextframe - ",
-                       "nl2br - ",
-                       "notes_body - ",
-                       "notes_copy_db - ",
-                       "notes_create_db - ",
-                       "notes_create_note - ",
-                       "notes_drop_db - ",
-                       "notes_find_note - ",
-                       "notes_header_info - ",
-                       "notes_list_msgs - ",
-                       "notes_mark_read - ",
-                       "notes_mark_unread - ",
-                       "notes_nav_create - ",
-                       "notes_search - ",
-                       "notes_unread - ",
-                       "notes_version - ",
-                       "number_format - ",
-                       "ob_end_clean - ",
-                       "ob_end_flush - ",
-                       "ob_get_contents - ",
-                       "ob_get_length - ",
-                       "ob_gzhandler - ",
-                       "ob_iconv_handler - ",
-                       "ob_implicit_flush - ",
-                       "ob_start - ",
-                       "ocibindbyname - ",
-                       "ocicancel - ",
-                       "ocicollappend - ",
-                       "ocicollassign - ",
-                       "ocicollassignelem - ",
-                       "ocicolldateappendelem - ",
-                       "ocicolldateassignelem - ",
-                       "ocicolldategetelem - ",
-                       "ocicollgetelem - ",
-                       "ocicollmax - ",
-                       "ocicollsize - ",
-                       "ocicolltrim - ",
-                       "ocicolumnisnull - ",
-                       "ocicolumnname - ",
-                       "ocicolumnprecision - ",
-                       "ocicolumnscale - ",
-                       "ocicolumnsize - ",
-                       "ocicolumntype - ",
-                       "ocicolumntyperaw - ",
-                       "ocicommit - ",
-                       "ocidefinebyname - ",
-                       "ocierror - ",
-                       "ociexecute - ",
-                       "ocifetch - ",
-                       "ocifetchinto - ",
-                       "ocifetchstatement - ",
-                       "ocifreecoll - ",
-                       "ocifreecursor - ",
-                       "ocifreedesc - ",
-                       "ocifreestatement - ",
-                       "ociinternaldebug - ",
-                       "ociloadlob - ",
-                       "ocilogoff - ",
-                       "ocilogon - ",
-                       "ocinewcollection - ",
-                       "ocinewcursor - ",
-                       "ocinewdescriptor - ",
-                       "ocinlogon - ",
-                       "ocinumcols - ",
-                       "ociparse - ",
-                       "ociplogon - ",
-                       "ociresult - ",
-                       "ocirollback - ",
-                       "ocirowcount - ",
-                       "ocisavelob - ",
-                       "ocisavelobfile - ",
-                       "ociserverversion - ",
-                       "ocisetprefetch - ",
-                       "ocistatementtype - ",
-                       "ociwritelobtofile - ",
-                       "octdec - ",
-                       "odbc_autocommit - ",
-                       "odbc_binmode - ",
-                       "odbc_close - ",
-                       "odbc_close_all - ",
-                       "odbc_columnprivileges - ",
-                       "odbc_columns - ",
-                       "odbc_commit - ",
-                       "odbc_connect - ",
-                       "odbc_cursor - ",
-                       "odbc_do - ",
-                       "odbc_error - ",
-                       "odbc_errormsg - ",
-                       "odbc_exec - ",
-                       "odbc_execute - ",
-                       "odbc_fetch_array - ",
-                       "odbc_fetch_into - ",
-                       "odbc_fetch_object - ",
-                       "odbc_fetch_row - ",
-                       "odbc_field_len - ",
-                       "odbc_field_name - ",
-                       "odbc_field_num - ",
-                       "odbc_field_precision - ",
-                       "odbc_field_scale - ",
-                       "odbc_field_type - ",
-                       "odbc_foreignkeys - ",
-                       "odbc_free_result - ",
-                       "odbc_gettypeinfo - ",
-                       "odbc_longreadlen - ",
-                       "odbc_next_result - ",
-                       "odbc_num_fields - ",
-                       "odbc_num_rows - ",
-                       "odbc_pconnect - ",
-                       "odbc_prepare - ",
-                       "odbc_primarykeys - ",
-                       "odbc_procedurecolumns - ",
-                       "odbc_procedures - ",
-                       "odbc_result - ",
-                       "odbc_result_all - ",
-                       "odbc_rollback - ",
-                       "odbc_setoption - ",
-                       "odbc_specialcolumns - ",
-                       "odbc_statistics - ",
-                       "odbc_tableprivileges - ",
-                       "odbc_tables - ",
-                       "open_listen_sock - ",
-                       "opendir - ",
-                       "openlog - ",
-                       "openssl_error_string - ",
-                       "openssl_free_key - ",
-                       "openssl_get_privatekey - ",
-                       "openssl_get_publickey - ",
-                       "openssl_open - ",
-                       "openssl_pkcs7_decrypt - ",
-                       "openssl_pkcs7_encrypt - ",
-                       "openssl_pkcs7_sign - ",
-                       "openssl_pkcs7_verify - ",
-                       "openssl_seal - ",
-                       "openssl_sign - ",
-                       "openssl_verify - ",
-                       "openssl_x509_checkpurpose - ",
-                       "openssl_x509_free - ",
-                       "openssl_x509_parse - ",
-                       "openssl_x509_read - ",
-                       "ora_bind - ",
-                       "ora_close - ",
-                       "ora_columnname - ",
-                       "ora_columnsize - ",
-                       "ora_columntype - ",
-                       "ora_commit - ",
-                       "ora_commitoff - ",
-                       "ora_commiton - ",
-                       "ora_do - ",
-                       "ora_error - ",
-                       "ora_errorcode - ",
-                       "ora_exec - ",
-                       "ora_fetch - ",
-                       "ora_fetch_into - ",
-                       "ora_getcolumn - ",
-                       "ora_logoff - ",
-                       "ora_logon - ",
-                       "ora_numcols - ",
-                       "ora_numrows - ",
-                       "ora_open - ",
-                       "ora_parse - ",
-                       "ora_plogon - ",
-                       "ora_rollback - ",
-                       "orbit_caught_exception - ",
-                       "orbit_exception_id - ",
-                       "orbit_exception_value - ",
-                       "orbit_get_repository_id - ",
-                       "orbit_load_idl - ",
-                       "ord - ",
-                       "output - ",
-                       "ovrimos_close - ",
-                       "ovrimos_close_all - ",
-                       "ovrimos_commit - ",
-                       "ovrimos_connect - ",
-                       "ovrimos_cursor - ",
-                       "ovrimos_exec - ",
-                       "ovrimos_execute - ",
-                       "ovrimos_fetch_into - ",
-                       "ovrimos_fetch_row - ",
-                       "ovrimos_field_len - ",
-                       "ovrimos_field_name - ",
-                       "ovrimos_field_num - ",
-                       "ovrimos_field_type - ",
-                       "ovrimos_free_result - ",
-                       "ovrimos_longreadlen - ",
-                       "ovrimos_num_fields - ",
-                       "ovrimos_num_rows - ",
-                       "ovrimos_prepare - ",
-                       "ovrimos_result - ",
-                       "ovrimos_result_all - ",
-                       "ovrimos_rollback - ",
-                       "pack - ",
-                       "parse_ini_file - ",
-                       "parse_str - ",
-                       "parse_url - ",
-                       "passthru - ",
-                       "pathinfo - ",
-                       "pclose - ",
-                       "pdf_add_annotation - ",
-                       "pdf_add_bookmark - ",
-                       "pdf_add_launchlink - ",
-                       "pdf_add_locallink - ",
-                       "pdf_add_note - ",
-                       "pdf_add_outline - ",
-                       "pdf_add_pdflink - ",
-                       "pdf_add_thumbnail - ",
-                       "pdf_add_weblink - ",
-                       "pdf_arc - ",
-                       "pdf_arcn - ",
-                       "pdf_attach_file - ",
-                       "pdf_begin_page - ",
-                       "pdf_begin_pattern - ",
-                       "pdf_begin_template - ",
-                       "pdf_circle - ",
-                       "pdf_clip - ",
-                       "pdf_close - ",
-                       "pdf_close_image - ",
-                       "pdf_close_pdi - ",
-                       "pdf_close_pdi_page - ",
-                       "pdf_closepath - ",
-                       "pdf_closepath_fill_stroke - ",
-                       "pdf_closepath_stroke - ",
-                       "pdf_concat - ",
-                       "pdf_continue_text - ",
-                       "pdf_curveto - ",
-                       "pdf_delete - ",
-                       "pdf_end_page - ",
-                       "pdf_end_pattern - ",
-                       "pdf_end_template - ",
-                       "pdf_endpath - ",
-                       "pdf_fill - ",
-                       "pdf_fill_stroke - ",
-                       "pdf_findfont - ",
-                       "pdf_get_buffer - ",
-                       "pdf_get_font - ",
-                       "pdf_get_fontname - ",
-                       "pdf_get_fontsize - ",
-                       "pdf_get_image_height - ",
-                       "pdf_get_image_width - ",
-                       "pdf_get_parameter - ",
-                       "pdf_get_pdi_parameter - ",
-                       "pdf_get_pdi_value - ",
-                       "pdf_get_value - ",
-                       "pdf_initgraphics - ",
-                       "pdf_lineto - ",
-                       "pdf_makespotcolor - ",
-                       "pdf_moveto - ",
-                       "pdf_new - ",
-                       "pdf_open - ",
-                       "pdf_open_ccitt - ",
-                       "pdf_open_file - ",
-                       "pdf_open_gif - ",
-                       "pdf_open_image - ",
-                       "pdf_open_image_file - ",
-                       "pdf_open_jpeg - ",
-                       "pdf_open_memory_image - ",
-                       "pdf_open_pdi - ",
-                       "pdf_open_pdi_page - ",
-                       "pdf_open_png - ",
-                       "pdf_open_tiff - ",
-                       "pdf_place_image - ",
-                       "pdf_place_pdi_page - ",
-                       "pdf_rect - ",
-                       "pdf_restore - ",
-                       "pdf_rotate - ",
-                       "pdf_save - ",
-                       "pdf_scale - ",
-                       "pdf_set_border_color - ",
-                       "pdf_set_border_dash - ",
-                       "pdf_set_border_style - ",
-                       "pdf_set_char_spacing - ",
-                       "pdf_set_duration - ",
-                       "pdf_set_font - ",
-                       "pdf_set_horiz_scaling - ",
-                       "pdf_set_info - ",
-                       "pdf_set_info_author - ",
-                       "pdf_set_info_creator - ",
-                       "pdf_set_info_keywords - ",
-                       "pdf_set_info_subject - ",
-                       "pdf_set_info_title - ",
-                       "pdf_set_leading - ",
-                       "pdf_set_parameter - ",
-                       "pdf_set_text_pos - ",
-                       "pdf_set_text_rendering - ",
-                       "pdf_set_text_rise - ",
-                       "pdf_set_transition - ",
-                       "pdf_set_value - ",
-                       "pdf_set_word_spacing - ",
-                       "pdf_setcolor - ",
-                       "pdf_setdash - ",
-                       "pdf_setflat - ",
-                       "pdf_setfont - ",
-                       "pdf_setgray - ",
-                       "pdf_setgray_fill - ",
-                       "pdf_setgray_stroke - ",
-                       "pdf_setlinecap - ",
-                       "pdf_setlinejoin - ",
-                       "pdf_setlinewidth - ",
-                       "pdf_setmatrix - ",
-                       "pdf_setmiterlimit - ",
-                       "pdf_setpolydash - ",
-                       "pdf_setrgbcolor - ",
-                       "pdf_setrgbcolor_fill - ",
-                       "pdf_setrgbcolor_stroke - ",
-                       "pdf_show - ",
-                       "pdf_show_boxed - ",
-                       "pdf_show_xy - ",
-                       "pdf_skew - ",
-                       "pdf_stringwidth - ",
-                       "pdf_stroke - ",
-                       "pdf_translate - ",
-                       "pfpro_cleanup - ",
-                       "pfpro_init - ",
-                       "pfpro_process - ",
-                       "pfpro_process_raw - ",
-                       "pfpro_version - ",
-                       "pfsockopen - ",
-                       "pg_client_encoding - ",
-                       "pg_clientencoding - ",
-                       "pg_close - ",
-                       "pg_cmdtuples - ",
-                       "pg_connect - ",
-                       "pg_dbname - ",
-                       "pg_end_copy - ",
-                       "pg_errormessage - ",
-                       "pg_exec - ",
-                       "pg_fetch_array - ",
-                       "pg_fetch_object - ",
-                       "pg_fetch_row - ",
-                       "pg_fieldisnull - ",
-                       "pg_fieldname - ",
-                       "pg_fieldnum - ",
-                       "pg_fieldprtlen - ",
-                       "pg_fieldsize - ",
-                       "pg_fieldtype - ",
-                       "pg_freeresult - ",
-                       "pg_getlastoid - ",
-                       "pg_host - ",
-                       "pg_loclose - ",
-                       "pg_locreate - ",
-                       "pg_loexport - ",
-                       "pg_loimport - ",
-                       "pg_loopen - ",
-                       "pg_loread - ",
-                       "pg_loreadall - ",
-                       "pg_lounlink - ",
-                       "pg_lowrite - ",
-                       "pg_numfields - ",
-                       "pg_numrows - ",
-                       "pg_options - ",
-                       "pg_pconnect - ",
-                       "pg_port - ",
-                       "pg_put_line - ",
-                       "pg_result - ",
-                       "pg_set_client_encoding - ",
-                       "pg_setclientencoding - ",
-                       "pg_trace - ",
-                       "pg_tty - ",
-                       "pg_untrace - ",
-                       "php_logo_guid - ",
-                       "php_sapi_name - ",
-                       "php_uname - ",
-                       "phpcredits - ",
-                       "phpinfo - ",
-                       "phpversion - ",
-                       "pi - ",
-                       "png2wbmp - ",
-                       "popen - ",
-                       "pos - ",
-                       "posix_ctermid - ",
-                       "posix_getcwd - ",
-                       "posix_getegid - ",
-                       "posix_geteuid - ",
-                       "posix_getgid - ",
-                       "posix_getgrgid - ",
-                       "posix_getgrnam - ",
-                       "posix_getgroups - ",
-                       "posix_getlogin - ",
-                       "posix_getpgid - ",
-                       "posix_getpgrp - ",
-                       "posix_getpid - ",
-                       "posix_getppid - ",
-                       "posix_getpwnam - ",
-                       "posix_getpwuid - ",
-                       "posix_getrlimit - ",
-                       "posix_getsid - ",
-                       "posix_getuid - ",
-                       "posix_isatty - ",
-                       "posix_kill - ",
-                       "posix_mkfifo - ",
-                       "posix_setegid - ",
-                       "posix_seteuid - ",
-                       "posix_setgid - ",
-                       "posix_setpgid - ",
-                       "posix_setsid - ",
-                       "posix_setuid - ",
-                       "posix_times - ",
-                       "posix_ttyname - ",
-                       "posix_uname - ",
-                       "pow - ",
-                       "preg_grep - ",
-                       "preg_match - ",
-                       "preg_match_all - ",
-                       "preg_quote - ",
-                       "preg_replace - ",
-                       "preg_replace_callback - ",
-                       "preg_split - ",
-                       "prev - ",
-                       "print_r - ",
-                       "printer_abort - ",
-                       "printer_close - ",
-                       "printer_create_brush - ",
-                       "printer_create_dc - ",
-                       "printer_create_font - ",
-                       "printer_create_pen - ",
-                       "printer_delete_brush - ",
-                       "printer_delete_dc - ",
-                       "printer_delete_font - ",
-                       "printer_delete_pen - ",
-                       "printer_draw_bmp - ",
-                       "printer_draw_chord - ",
-                       "printer_draw_elipse - ",
-                       "printer_draw_line - ",
-                       "printer_draw_pie - ",
-                       "printer_draw_rectangle - ",
-                       "printer_draw_roundrect - ",
-                       "printer_draw_text - ",
-                       "printer_end_doc - ",
-                       "printer_end_page - ",
-                       "printer_get_option - ",
-                       "printer_list - ",
-                       "printer_logical_fontheight - ",
-                       "printer_open - ",
-                       "printer_select_brush - ",
-                       "printer_select_font - ",
-                       "printer_select_pen - ",
-                       "printer_set_option - ",
-                       "printer_start_doc - ",
-                       "printer_start_page - ",
-                       "printer_write - ",
-                       "printf - ",
-                       "pspell_add_to_personal - ",
-                       "pspell_add_to_session - ",
-                       "pspell_check - ",
-                       "pspell_clear_session - ",
-                       "pspell_config_create - ",
-                       "pspell_config_ignore - ",
-                       "pspell_config_mode - ",
-                       "pspell_config_personal - ",
-                       "pspell_config_repl - ",
-                       "pspell_config_runtogether - ",
-                       "pspell_config_save_repl - ",
-                       "pspell_new - ",
-                       "pspell_new_config - ",
-                       "pspell_new_personal - ",
-                       "pspell_save_wordlist - ",
-                       "pspell_store_replacement - ",
-                       "pspell_suggest - ",
-                       "putenv - ",
-                       "putenv - ",
-                       "qdom_error - ",
-                       "qdom_tree - ",
-                       "quoted_printable_decode - ",
-                       "quotemeta - ",
-                       "rad2deg - ",
-                       "rand - ",
-                       "range - ",
-                       "rawurldecode - ",
-                       "rawurlencode - ",
-                       "read - ",
-                       "read_exif_data - ",
-                       "readdir - ",
-                       "readfile - ",
-                       "readgzfile - ",
-                       "readline - ",
-                       "readline_add_history - ",
-                       "readline_clear_history - ",
-                       "readline_completion_function - ",
-                       "readline_info - ",
-                       "readline_list_history - ",
-                       "readline_list_history - ",
-                       "readline_read_history - ",
-                       "readline_write_history - ",
-                       "readlink - ",
-                       "readlink - ",
-                       "readv - ",
-                       "realpath - ",
-                       "realpath - ",
-                       "recode - ",
-                       "recode_file - ",
-                       "recode_string - ",
-                       "recv - ",
-                       "recvfrom - ",
-                       "recvmsg - ",
-                       "register_shutdown_function - ",
-                       "register_tick_function - ",
-                       "remove - ",
-                       "remove - ",
-                       "rename - ",
-                       "reset - ",
-                       "restore_error_handler - ",
-                       "rewind - ",
-                       "rewinddir - ",
-                       "rmdir - ",
-                       "rotate - ",
-                       "rotateto - ",
-                       "rotateto - ",
-                       "round - ",
-                       "rsort - ",
-                       "rtrim - ",
-                       "satellite_caught_exception - ",
-                       "satellite_exception_id - ",
-                       "satellite_exception_value - ",
-                       "satellite_get_repository_id - ",
-                       "satellite_load_idl - ",
-                       "save - ",
-                       "savetofile - ",
-                       "scale - ",
-                       "scaleto - ",
-                       "scaleto - ",
-                       "select - ",
-                       "sem_acquire - ",
-                       "sem_get - ",
-                       "sem_release - ",
-                       "send - ",
-                       "sendmsg - ",
-                       "sendto - ",
-                       "serialize - ",
-                       "session_cache_limiter - ",
-                       "session_decode - ",
-                       "session_destroy - ",
-                       "session_encode - ",
-                       "session_get_cookie_params - ",
-                       "session_id - ",
-                       "session_is_registered - ",
-                       "session_module_name - ",
-                       "session_name - ",
-                       "session_register - ",
-                       "session_save_path - ",
-                       "session_set_cookie_params - ",
-                       "session_set_save_handler - ",
-                       "session_start - ",
-                       "session_unregister - ",
-                       "session_unset - ",
-                       "session_write_close - ",
-                       "set_content - ",
-                       "set_error_handler - ",
-                       "set_file_buffer - ",
-                       "set_iovec - ",
-                       "set_magic_quotes_runtime - ",
-                       "set_nonblock - ",
-                       "set_socket_blocking - ",
-                       "set_time_limit - ",
-                       "setaction - ",
-                       "setbackground - ",
-                       "setbounds - ",
-                       "setcolor - ",
-                       "setcolor - ",
-                       "setcookie - ",
-                       "setdepth - ",
-                       "setdimension - ",
-                       "setdown - ",
-                       "setfont - ",
-                       "setfont - ",
-                       "setframes - ",
-                       "setframes - ",
-                       "setheight - ",
-                       "setheight - ",
-                       "sethit - ",
-                       "setindentation - ",
-                       "setleftfill - ",
-                       "setleftmargin - ",
-                       "setline - ",
-                       "setlinespacing - ",
-                       "setlocale - ",
-                       "setmargins - ",
-                       "setmatrix - ",
-                       "setname - ",
-                       "setname - ",
-                       "setover - ",
-                       "setrate - ",
-                       "setratio - ",
-                       "setrightfill - ",
-                       "setrightmargin - ",
-                       "setsockopt - ",
-                       "setspacing - ",
-                       "settype - ",
-                       "setup - ",
-                       "shell_exec - ",
-                       "shm_attach - ",
-                       "shm_detach - ",
-                       "shm_get_var - ",
-                       "shm_put_var - ",
-                       "shm_remove - ",
-                       "shm_remove_var - ",
-                       "shmop_close - ",
-                       "shmop_delete - ",
-                       "shmop_open - ",
-                       "shmop_read - ",
-                       "shmop_size - ",
-                       "shmop_write - ",
-                       "show_source - ",
-                       "shuffle - ",
-                       "shutdown - ",
-                       "signal - ",
-                       "similar_text - ",
-                       "sin - ",
-                       "sizeof - ",
-                       "skewx - ",
-                       "skewxto - ",
-                       "skewxto - ",
-                       "skewy - ",
-                       "skewyto - ",
-                       "skewyto - ",
-                       "sleep - ",
-                       "snmp_get_quick_print - ",
-                       "snmp_set_quick_print - ",
-                       "snmpget - ",
-                       "snmpget - ",
-                       "snmprealwalk - ",
-                       "snmpset - ",
-                       "snmpwalk - ",
-                       "snmpwalk - ",
-                       "snmpwalkoid - ",
-                       "socket - ",
-                       "socket_get_status - ",
-                       "socket_set_blocking - ",
-                       "socket_set_timeout - ",
-                       "socket_set_timeout - ",
-                       "socketpair - ",
-                       "sort - ",
-                       "soundex - ",
-                       "split - ",
-                       "spliti - ",
-                       "sprintf - ",
-                       "sql_regcase - ",
-                       "sqrt - ",
-                       "srand - ",
-                       "sscanf - ",
-                       "stat - ",
-                       "str_pad - ",
-                       "str_repeat - ",
-                       "str_replace - ",
-                       "strcasecmp - ",
-                       "strchr - ",
-                       "strcmp - ",
-                       "strcoll - ",
-                       "strcoll - ",
-                       "strcspn - ",
-                       "streammp3 - ",
-                       "strerror - ",
-                       "strftime - ",
-                       "strftime - ",
-                       "strip_tags - ",
-                       "stripcslashes - ",
-                       "stripslashes - ",
-                       "stristr - ",
-                       "strlen - ",
-                       "strnatcasecmp - ",
-                       "strnatcmp - ",
-                       "strncasecmp - ",
-                       "strncmp - ",
-                       "strpos - ",
-                       "strrchr - ",
-                       "strrev - ",
-                       "strrpos - ",
-                       "strspn - ",
-                       "strstr - ",
-                       "strtok - ",
-                       "strtolower - ",
-                       "strtotime - ",
-                       "strtoupper - ",
-                       "strtr - ",
-                       "strval - ",
-      
-                       "string substr(string str, int start [, int length])\n"+
-      "Returns part of a string",
-
-      
-                       "substr_count - ",
-                       "substr_replace - ",
-                       "swf_actiongeturl - ",
-                       "swf_actiongotoframe - ",
-                       "swf_actiongotolabel - ",
-                       "swf_actionnextframe - ",
-                       "swf_actionplay - ",
-                       "swf_actionprevframe - ",
-                       "swf_actionsettarget - ",
-                       "swf_actionstop - ",
-                       "swf_actiontogglequality - ",
-                       "swf_actionwaitforframe - ",
-                       "swf_addbuttonrecord - ",
-                       "swf_addcolor - ",
-                       "swf_closefile - ",
-                       "swf_definebitmap - ",
-                       "swf_definefont - ",
-                       "swf_defineline - ",
-                       "swf_definepoly - ",
-                       "swf_definerect - ",
-                       "swf_definetext - ",
-                       "swf_endbutton - ",
-                       "swf_enddoaction - ",
-                       "swf_endshape - ",
-                       "swf_endsymbol - ",
-                       "swf_fontsize - ",
-                       "swf_fontslant - ",
-                       "swf_fonttracking - ",
-                       "swf_getbitmapinfo - ",
-                       "swf_getfontinfo - ",
-                       "swf_getframe - ",
-                       "swf_labelframe - ",
-                       "swf_lookat - ",
-                       "swf_modifyobject - ",
-                       "swf_mulcolor - ",
-                       "swf_nextid - ",
-                       "swf_oncondition - ",
-                       "swf_openfile - ",
-                       "swf_ortho - ",
-                       "swf_ortho2 - ",
-                       "swf_perspective - ",
-                       "swf_placeobject - ",
-                       "swf_polarview - ",
-                       "swf_popmatrix - ",
-                       "swf_posround - ",
-                       "swf_pushmatrix - ",
-                       "swf_removeobject - ",
-                       "swf_rotate - ",
-                       "swf_scale - ",
-                       "swf_setfont - ",
-                       "swf_setframe - ",
-                       "swf_shapearc - ",
-                       "swf_shapecurveto - ",
-                       "swf_shapecurveto3 - ",
-                       "swf_shapefillbitmapclip - ",
-                       "swf_shapefillbitmaptile - ",
-                       "swf_shapefilloff - ",
-                       "swf_shapefillsolid - ",
-                       "swf_shapelinesolid - ",
-                       "swf_shapelineto - ",
-                       "swf_shapemoveto - ",
-                       "swf_showframe - ",
-                       "swf_startbutton - ",
-                       "swf_startdoaction - ",
-                       "swf_startshape - ",
-                       "swf_startsymbol - ",
-                       "swf_textwidth - ",
-                       "swf_translate - ",
-                       "swf_viewport - ",
-                       "swfaction - ",
-                       "swfbitmap - ",
-                       "swfbutton - ",
-                       "swfbutton_keypress - ",
-                       "swffill - ",
-                       "swffont - ",
-                       "swfgradient - ",
-                       "swfmorph - ",
-                       "swfmovie - ",
-                       "swfshape - ",
-                       "swfsprite - ",
-                       "swftext - ",
-                       "swftextfield - ",
-                       "sybase_affected_rows - ",
-                       "sybase_affected_rows - ",
-                       "sybase_close - ",
-                       "sybase_close - ",
-                       "sybase_connect - ",
-                       "sybase_connect - ",
-                       "sybase_data_seek - ",
-                       "sybase_data_seek - ",
-                       "sybase_fetch_array - ",
-                       "sybase_fetch_array - ",
-                       "sybase_fetch_field - ",
-                       "sybase_fetch_field - ",
-                       "sybase_fetch_object - ",
-                       "sybase_fetch_object - ",
-                       "sybase_fetch_row - ",
-                       "sybase_fetch_row - ",
-                       "sybase_field_seek - ",
-                       "sybase_field_seek - ",
-                       "sybase_free_result - ",
-                       "sybase_free_result - ",
-                       "sybase_get_last_message - ",
-                       "sybase_get_last_message - ",
-                       "sybase_min_client_severity - ",
-                       "sybase_min_error_severity - ",
-                       "sybase_min_message_severity - ",
-                       "sybase_min_server_severity - ",
-                       "sybase_num_fields - ",
-                       "sybase_num_fields - ",
-                       "sybase_num_rows - ",
-                       "sybase_num_rows - ",
-                       "sybase_pconnect - ",
-                       "sybase_pconnect - ",
-                       "sybase_query - ",
-                       "sybase_query - ",
-                       "sybase_result - ",
-                       "sybase_result - ",
-                       "sybase_select_db - ",
-                       "sybase_select_db - ",
-                       "symlink - ",
-                       "symlink - ",
-                       "syslog - ",
-                       "system - ",
-                       "tan - ",
-                       "tempnam - ",
-                       "textdomain - ",
-                       "time - ",
-                       "tmpfile - ",
-                       "touch - ",
-                       "trigger_error - ",
-                       "trim - ",
-                       "uasort - ",
-                       "ucfirst - ",
-                       "ucwords - ",
-                       "udm_add_search_limit - ",
-                       "udm_alloc_agent - ",
-                       "udm_api_version - ",
-                       "udm_clear_search_limits - ",
-                       "udm_errno - ",
-                       "udm_error - ",
-                       "udm_find - ",
-                       "udm_free_agent - ",
-                       "udm_free_ispell_data - ",
-                       "udm_free_res - ",
-                       "udm_get_doc_count - ",
-                       "udm_get_res_field - ",
-                       "udm_get_res_param - ",
-                       "udm_load_ispell_data - ",
-                       "udm_set_agent_param - ",
-                       "uksort - ",
-                       "umask - ",
-                       "uniqid - ",
-                       "unixtojd - ",
-                       "unlink - ",
-                       "unpack - ",
-                       "unregister_tick_function - ",
-                       "unserialize - ",
-                       "urldecode - ",
-                       "urlencode - ",
-                       "user_error - ",
-                       "usleep - ",
-                       "usort - ",
-                       "utf8_decode - ",
-                       "utf8_encode - ",
-                       "var_dump - ",
-                       "velocis_autocommit - ",
-                       "velocis_close - ",
-                       "velocis_commit - ",
-                       "velocis_connect - ",
-                       "velocis_exec - ",
-                       "velocis_fetch - ",
-                       "velocis_fieldname - ",
-                       "velocis_fieldnum - ",
-                       "velocis_freeresult - ",
-                       "velocis_off_autocommit - ",
-                       "velocis_result - ",
-                       "velocis_rollback - ",
-                       "virtual - ",
-                       "vpopmail_add_alias_domain - ",
-                       "vpopmail_add_alias_domain_ex - ",
-                       "vpopmail_add_domain - ",
-                       "vpopmail_add_domain_ex - ",
-                       "vpopmail_add_user - ",
-                       "vpopmail_auth_user - ",
-                       "vpopmail_del_domain - ",
-                       "vpopmail_del_domain_ex - ",
-                       "vpopmail_del_user - ",
-                       "vpopmail_error - ",
-                       "vpopmail_passwd - ",
-                       "vpopmail_set_user_quota - ",
-                       "wddx_add_vars - ",
-                       "wddx_deserialize - ",
-                       "wddx_packet_end - ",
-                       "wddx_packet_start - ",
-                       "wddx_serialize_value - ",
-                       "wddx_serialize_vars - ",
-                       "wordwrap - ",
-                       "write - ",
-                       "writev - ",
-                       "xml_error_string - ",
-                       "xml_get_current_byte_index - ",
-                       "xml_get_current_column_number - ",
-                       "xml_get_current_line_number - ",
-                       "xml_get_error_code - ",
-                       "xml_parse - ",
-                       "xml_parse_into_struct - ",
-                       "xml_parser_create - ",
-                       "xml_parser_create_ns - ",
-                       "xml_parser_free - ",
-                       "xml_parser_get_option - ",
-                       "xml_parser_set_option - ",
-                       "xml_set_character_data_handler - ",
-                       "xml_set_default_handler - ",
-                       "xml_set_element_handler - ",
-                       "xml_set_end_namespace_decl_handler - ",
-                       "xml_set_external_entity_ref_handler - ",
-                       "xml_set_notation_decl_handler - ",
-                       "xml_set_object - ",
-                       "xml_set_processing_instruction_handler - ",
-                       "xml_set_start_namespace_decl_handler - ",
-                       "xml_set_unparsed_entity_decl_handler - ",
-                       "xmldoc - ",
-                       "xmldocfile - ",
-                       "xmltree - ",
-                       "xpath_eval - ",
-                       "xpath_eval_expression - ",
-                       "xptr_eval - ",
-                       "xslt_closelog - ",
-                       "xslt_create - ",
-                       "xslt_errno - ",
-                       "xslt_error - ",
-                       "xslt_fetch_result - ",
-                       "xslt_free - ",
-                       "xslt_openlog - ",
-                       "xslt_output_begintransform - ",
-                       "xslt_output_endtransform - ",
-                       "xslt_process - ",
-                       "xslt_run - ",
-                       "xslt_set_base - ",
-                       "xslt_set_encoding - ",
-                       "xslt_set_error_handler - ",
-                       "xslt_set_sax_handler - ",
-                       "xslt_set_scheme_handler - ",
-                       "xslt_transform - ",
-                       "yaz_addinfo - ",
-                       "yaz_ccl_conf - ",
-                       "yaz_ccl_parse - ",
-                       "yaz_close - ",
-                       "yaz_connect - ",
-                       "yaz_database - ",
-                       "yaz_element - ",
-                       "yaz_errno - ",
-                       "yaz_error - ",
-                       "yaz_hits - ",
-                       "yaz_itemorder - ",
-                       "yaz_present - ",
-                       "yaz_range - ",
-                       "yaz_record - ",
-                       "yaz_scan - ",
-                       "yaz_scan_result - ",
-                       "yaz_search - ",
-                       "yaz_syntax - ",
-                       "yaz_wait - ",
-                       "yp_all - ",
-                       "yp_cat - ",
-                       "yp_err_string - ",
-                       "yp_errno - ",
-                       "yp_first - ",
-                       "yp_get_default_domain - ",
-                       "yp_master - ",
-                       "yp_match - ",
-                       "yp_next - ",
-                       "yp_order - ",
-                       "zend_logo_guid - ",
-                       "zend_test_func - ",
-                       "zend_version - ",
-                       "zzip_close - ",
-                       "zzip_closedir - ",
-                       "zzip_entry_compressedsize - ",
-                       "zzip_entry_compressionmethod - ",
-                       "zzip_entry_filesize - ",
-                       "zzip_entry_name - ",
-                       "zzip_open - ",
-                       "zzip_opendir - ",
-                       "zzip_read - ",
-                       "zzip_readdir - " };
-
-}
diff --git a/net.sourceforge.phpeclipse/src/net/sourceforge/phpeclipse/phpeditor/php/PHPKeyword.java b/net.sourceforge.phpeclipse/src/net/sourceforge/phpeclipse/phpeditor/php/PHPKeyword.java
new file mode 100644 (file)
index 0000000..a478a01
--- /dev/null
@@ -0,0 +1,29 @@
+package net.sourceforge.phpeclipse.phpeditor.php;
+
+/**
+ * @author Choochter
+ *
+ * To change this generated comment edit the template variable "typecomment":
+ * Window>Preferences>Java>Templates.
+ * To enable and disable the creation of type comments go to
+ * Window>Preferences>Java>Code Generation.
+ */
+public class PHPKeyword extends PHPElement{
+       private int tokenval;
+       public void settokenval(String tokenval) { this.tokenval = Integer.parseInt(tokenval);}
+       public void settokenval(int tokenval) { this.tokenval = tokenval;}
+       public int gettokenval() { return this.tokenval; }
+       
+       public PHPKeyword(String Name, String Description, String tokenval){
+               super(Name, Description);
+               if ((tokenval == null) || (tokenval.equals("")))
+                               {
+                                       //if there is not a tokenval, then not implemented.
+                                       settokenval(-1);
+                               }
+                               else {
+                                       settokenval(tokenval); 
+                               }               
+               //settokenval(tokenval);
+       }
+}
diff --git a/net.sourceforge.phpeclipse/src/net/sourceforge/phpeclipse/phpeditor/php/PHPType.java b/net.sourceforge.phpeclipse/src/net/sourceforge/phpeclipse/phpeditor/php/PHPType.java
new file mode 100644 (file)
index 0000000..c4fb644
--- /dev/null
@@ -0,0 +1,15 @@
+package net.sourceforge.phpeclipse.phpeditor.php;
+
+/**
+ * @author Choochter
+ *
+ * To change this generated comment edit the template variable "typecomment":
+ * Window>Preferences>Java>Templates.
+ * To enable and disable the creation of type comments go to
+ * Window>Preferences>Java>Code Generation.
+ */
+public class PHPType extends PHPElement{
+       public PHPType(String Name, String Description){
+       super(Name, Description);
+       }
+}
\ No newline at end of file
diff --git a/net.sourceforge.phpeclipse/src/net/sourceforge/phpeclipse/phpeditor/phpsyntax.xml b/net.sourceforge.phpeclipse/src/net/sourceforge/phpeclipse/phpeditor/phpsyntax.xml
new file mode 100644 (file)
index 0000000..51ee93c
--- /dev/null
@@ -0,0 +1,2416 @@
+<?xml version="1.0" encoding="UTF-8"?>
+
+<phpstandardsyntax>
+===================================================        
+*Below this are the various PHP-specific functions *
+===================================================     
+        <phpsyntax function="COM_invoke" usage="mixed COM_invoke(int module, string handler_name [, mixed arg [, mixed ...]])\n" description="Invokes a COM module"></phpsyntax>
+        <phpsyntax function="COM_load" usage="int com_load(string module_name [, string remote_host [, int codepage [, string typelib]]])\n" description="Loads a COM module"></phpsyntax>
+        <phpsyntax function="abs" usage="int abs(int number)\n" description="Return the absolute value of the number"></phpsyntax>
+        <phpsyntax function="accept_connect"></phpsyntax>
+        <phpsyntax function="acos" usage="float acos(float number)" description="Return the arc cosine of the number in radians"></phpsyntax>
+        <phpsyntax function="add"></phpsyntax>
+        <phpsyntax function="add_iovec"></phpsyntax>
+        <phpsyntax function="addaction"></phpsyntax>
+        <phpsyntax function="addcolor"></phpsyntax>
+        <phpsyntax function="addcslashes"></phpsyntax>
+        <phpsyntax function="addentry"></phpsyntax>
+        <phpsyntax function="addfill"></phpsyntax>
+        <phpsyntax function="addshape"></phpsyntax>
+        <phpsyntax function="addslashes"></phpsyntax>
+        <phpsyntax function="addstring"></phpsyntax>
+        <phpsyntax function="addstring"></phpsyntax>
+        <phpsyntax function="align"></phpsyntax>
+        <phpsyntax function="apache_child_terminate"></phpsyntax>
+        <phpsyntax function="apache_lookup_uri"></phpsyntax>
+        <phpsyntax function="apache_lookup_uri"></phpsyntax>
+        <phpsyntax function="apache_note"></phpsyntax>
+        <phpsyntax function="apache_sub_req"></phpsyntax>
+        <phpsyntax function="array_count_values"></phpsyntax>
+        <phpsyntax function="array_diff"></phpsyntax>
+        <phpsyntax function="array_filter"></phpsyntax>
+        <phpsyntax function="array_flip"></phpsyntax>
+        <phpsyntax function="array_intersect"></phpsyntax>
+        <phpsyntax function="array_keys"></phpsyntax>
+        <phpsyntax function="array_map"></phpsyntax>
+        <phpsyntax function="array_merge"></phpsyntax>
+        <phpsyntax function="array_merge_recursive"></phpsyntax>
+        <phpsyntax function="array_multisort"></phpsyntax>
+        <phpsyntax function="array_pad"></phpsyntax>
+        <phpsyntax function="array_pop"></phpsyntax>
+        <phpsyntax function="array_push"></phpsyntax>
+        <phpsyntax function="array_rand"></phpsyntax>
+        <phpsyntax function="array_reduce"></phpsyntax>
+        <phpsyntax function="array_reverse"></phpsyntax>
+        <phpsyntax function="array_search"></phpsyntax>
+        <phpsyntax function="array_shift"></phpsyntax>
+        <phpsyntax function="array_slice"></phpsyntax>
+        <phpsyntax function="array_splice"></phpsyntax>
+        <phpsyntax function="array_sum"></phpsyntax>
+        <phpsyntax function="array_unique"></phpsyntax>
+        <phpsyntax function="array_unshift"></phpsyntax>
+        <phpsyntax function="array_values"></phpsyntax>
+        <phpsyntax function="array_walk"></phpsyntax>
+        <phpsyntax function="arsort"></phpsyntax>
+        <phpsyntax function="asin"></phpsyntax>
+        <phpsyntax function="asort"></phpsyntax>
+        <phpsyntax function="aspell_check"></phpsyntax>
+        <phpsyntax function="aspell_check_raw"></phpsyntax>
+        <phpsyntax function="aspell_new"></phpsyntax>
+        <phpsyntax function="aspell_suggest"></phpsyntax>
+        <phpsyntax function="assert"></phpsyntax>
+        <phpsyntax function="assert_options"></phpsyntax>
+        <phpsyntax function="atan"></phpsyntax>
+        <phpsyntax function="atan2"></phpsyntax>
+        <phpsyntax function="base64_decode"></phpsyntax>
+        <phpsyntax function="base64_encode"></phpsyntax>
+        <phpsyntax function="base_convert"></phpsyntax>
+        <phpsyntax function="basename"></phpsyntax>
+        <phpsyntax function="bcadd"></phpsyntax>
+        <phpsyntax function="bccomp"></phpsyntax>
+        <phpsyntax function="bcdiv"></phpsyntax>
+        <phpsyntax function="bcmod"></phpsyntax>
+        <phpsyntax function="bcmul"></phpsyntax>
+        <phpsyntax function="bcpow"></phpsyntax>
+        <phpsyntax function="bcscale"></phpsyntax>
+        <phpsyntax function="bcsqrt"></phpsyntax>
+        <phpsyntax function="bcsub"></phpsyntax>
+        <phpsyntax function="bin2hex"></phpsyntax>
+        <phpsyntax function="bind"></phpsyntax>
+        <phpsyntax function="bindec"></phpsyntax>
+        <phpsyntax function="bindtextdomain"></phpsyntax>
+        <phpsyntax function="build_iovec"></phpsyntax>
+        <phpsyntax function="bzclose"></phpsyntax>
+        <phpsyntax function="bzcompress"></phpsyntax>
+        <phpsyntax function="bzdecompress"></phpsyntax>
+        <phpsyntax function="bzerrno"></phpsyntax>
+        <phpsyntax function="bzerror"></phpsyntax>
+        <phpsyntax function="bzerrstr"></phpsyntax>
+        <phpsyntax function="bzflush"></phpsyntax>
+        <phpsyntax function="bzopen"></phpsyntax>
+        <phpsyntax function="bzread"></phpsyntax>
+        <phpsyntax function="bzwrite"></phpsyntax>
+        <phpsyntax function="call_user_func"></phpsyntax>
+        <phpsyntax function="call_user_func_array"></phpsyntax>
+        <phpsyntax function="call_user_method"></phpsyntax>
+        <phpsyntax function="call_user_method_array"></phpsyntax>
+        <phpsyntax function="ccvs_add"></phpsyntax>
+        <phpsyntax function="ccvs_auth"></phpsyntax>
+        <phpsyntax function="ccvs_command"></phpsyntax>
+        <phpsyntax function="ccvs_count"></phpsyntax>
+        <phpsyntax function="ccvs_delete"></phpsyntax>
+        <phpsyntax function="ccvs_done"></phpsyntax>
+        <phpsyntax function="ccvs_init"></phpsyntax>
+        <phpsyntax function="ccvs_lookup"></phpsyntax>
+        <phpsyntax function="ccvs_new"></phpsyntax>
+        <phpsyntax function="ccvs_report"></phpsyntax>
+        <phpsyntax function="ccvs_return"></phpsyntax>
+        <phpsyntax function="ccvs_reverse"></phpsyntax>
+        <phpsyntax function="ccvs_sale"></phpsyntax>
+        <phpsyntax function="ccvs_status"></phpsyntax>
+        <phpsyntax function="ccvs_textvalue"></phpsyntax>
+        <phpsyntax function="ccvs_void"></phpsyntax>
+        <phpsyntax function="ceil"></phpsyntax>
+        <phpsyntax function="chdir"></phpsyntax>
+        <phpsyntax function="checkdate"></phpsyntax>
+        <phpsyntax function="checkdnsrr"></phpsyntax>
+        <phpsyntax function="checkdnsrr"></phpsyntax>
+        <phpsyntax function="chgrp"></phpsyntax>
+        <phpsyntax function="chmod"></phpsyntax>
+        <phpsyntax function="chop"></phpsyntax>
+        <phpsyntax function="chown"></phpsyntax>
+        <phpsyntax function="chr"></phpsyntax>
+        <phpsyntax function="chroot"></phpsyntax>
+        <phpsyntax function="chroot"></phpsyntax>
+        <phpsyntax function="chunk_split"></phpsyntax>
+        <phpsyntax function="class_exists" usage="bool class_exists(string classname)\n" description="Checks if the class exists"></phpsyntax>
+        <phpsyntax function="clearstatcache"></phpsyntax>
+        <phpsyntax function="close"></phpsyntax>
+        <phpsyntax function="closedir" usage="void closedir([resource dir_handle])\n" description="Close directory connection identified by the dir_handle"></phpsyntax>
+        <phpsyntax function="closelog"></phpsyntax>
+        <phpsyntax function="com_get"></phpsyntax>
+        <phpsyntax function="com_propget"></phpsyntax>
+        <phpsyntax function="com_propput"></phpsyntax>
+        <phpsyntax function="com_propset"></phpsyntax>
+        <phpsyntax function="com_set"></phpsyntax>
+        <phpsyntax function="compact"></phpsyntax>
+        <phpsyntax function="confirm_cybermut_compiled"></phpsyntax>
+        <phpsyntax function="confirm_extname_compiled"></phpsyntax>
+        <phpsyntax function="connect"></phpsyntax>
+        <phpsyntax function="connection_aborted"></phpsyntax>
+        <phpsyntax function="connection_status"></phpsyntax>
+        <phpsyntax function="constant"></phpsyntax>
+        <phpsyntax function="convert_cyr_string"></phpsyntax>
+        <phpsyntax function="copy"></phpsyntax>
+        <phpsyntax function="cos"></phpsyntax>
+        <phpsyntax function="count"></phpsyntax>
+        <phpsyntax function="count_chars"></phpsyntax>
+        <phpsyntax function="cpdf_add_annotation"></phpsyntax>
+        <phpsyntax function="cpdf_add_outline"></phpsyntax>
+        <phpsyntax function="cpdf_arc"></phpsyntax>
+        <phpsyntax function="cpdf_begin_text"></phpsyntax>
+        <phpsyntax function="cpdf_circle"></phpsyntax>
+        <phpsyntax function="cpdf_clip"></phpsyntax>
+        <phpsyntax function="cpdf_close"></phpsyntax>
+        <phpsyntax function="cpdf_closepath"></phpsyntax>
+        <phpsyntax function="cpdf_closepath_fill_stroke"></phpsyntax>
+        <phpsyntax function="cpdf_closepath_stroke"></phpsyntax>
+        <phpsyntax function="cpdf_continue_text"></phpsyntax>
+        <phpsyntax function="cpdf_curveto"></phpsyntax>
+        <phpsyntax function="cpdf_end_text"></phpsyntax>
+        <phpsyntax function="cpdf_fill"></phpsyntax>
+        <phpsyntax function="cpdf_fill_stroke"></phpsyntax>
+        <phpsyntax function="cpdf_finalize"></phpsyntax>
+        <phpsyntax function="cpdf_finalize_page"></phpsyntax>
+        <phpsyntax function="cpdf_global_set_document_limits"></phpsyntax>
+        <phpsyntax function="cpdf_import_jpeg"></phpsyntax>
+        <phpsyntax function="cpdf_lineto"></phpsyntax>
+        <phpsyntax function="cpdf_moveto"></phpsyntax>
+        <phpsyntax function="cpdf_newpath"></phpsyntax>
+        <phpsyntax function="cpdf_open"></phpsyntax>
+        <phpsyntax function="cpdf_output_buffer"></phpsyntax>
+        <phpsyntax function="cpdf_page_init"></phpsyntax>
+        <phpsyntax function="cpdf_place_inline_image"></phpsyntax>
+        <phpsyntax function="cpdf_rect"></phpsyntax>
+        <phpsyntax function="cpdf_restore"></phpsyntax>
+        <phpsyntax function="cpdf_rlineto"></phpsyntax>
+        <phpsyntax function="cpdf_rmoveto"></phpsyntax>
+        <phpsyntax function="cpdf_rotate"></phpsyntax>
+        <phpsyntax function="cpdf_rotate_text"></phpsyntax>
+        <phpsyntax function="cpdf_save"></phpsyntax>
+        <phpsyntax function="cpdf_save_to_file"></phpsyntax>
+        <phpsyntax function="cpdf_scale"></phpsyntax>
+        <phpsyntax function="cpdf_set_action_url"></phpsyntax>
+        <phpsyntax function="cpdf_set_char_spacing"></phpsyntax>
+        <phpsyntax function="cpdf_set_creator"></phpsyntax>
+        <phpsyntax function="cpdf_set_current_page"></phpsyntax>
+        <phpsyntax function="cpdf_set_font"></phpsyntax>
+        <phpsyntax function="cpdf_set_font_directories"></phpsyntax>
+        <phpsyntax function="cpdf_set_font_map_file"></phpsyntax>
+        <phpsyntax function="cpdf_set_horiz_scaling"></phpsyntax>
+        <phpsyntax function="cpdf_set_keywords"></phpsyntax>
+        <phpsyntax function="cpdf_set_leading"></phpsyntax>
+        <phpsyntax function="cpdf_set_page_animation"></phpsyntax>
+        <phpsyntax function="cpdf_set_subject"></phpsyntax>
+        <phpsyntax function="cpdf_set_text_matrix"></phpsyntax>
+        <phpsyntax function="cpdf_set_text_pos"></phpsyntax>
+        <phpsyntax function="cpdf_set_text_rendering"></phpsyntax>
+        <phpsyntax function="cpdf_set_text_rise"></phpsyntax>
+        <phpsyntax function="cpdf_set_title"></phpsyntax>
+        <phpsyntax function="cpdf_set_viewer_preferences"></phpsyntax>
+        <phpsyntax function="cpdf_set_word_spacing"></phpsyntax>
+        <phpsyntax function="cpdf_setdash"></phpsyntax>
+        <phpsyntax function="cpdf_setflat"></phpsyntax>
+        <phpsyntax function="cpdf_setgray"></phpsyntax>
+        <phpsyntax function="cpdf_setgray_fill"></phpsyntax>
+        <phpsyntax function="cpdf_setgray_stroke"></phpsyntax>
+        <phpsyntax function="cpdf_setlinecap"></phpsyntax>
+        <phpsyntax function="cpdf_setlinejoin"></phpsyntax>
+        <phpsyntax function="cpdf_setlinewidth"></phpsyntax>
+        <phpsyntax function="cpdf_setmiterlimit"></phpsyntax>
+        <phpsyntax function="cpdf_setrgbcolor"></phpsyntax>
+        <phpsyntax function="cpdf_setrgbcolor_fill"></phpsyntax>
+        <phpsyntax function="cpdf_setrgbcolor_stroke"></phpsyntax>
+        <phpsyntax function="cpdf_show"></phpsyntax>
+        <phpsyntax function="cpdf_show_xy"></phpsyntax>
+        <phpsyntax function="cpdf_stringwidth"></phpsyntax>
+        <phpsyntax function="cpdf_stroke"></phpsyntax>
+        <phpsyntax function="cpdf_text"></phpsyntax>
+        <phpsyntax function="cpdf_translate"></phpsyntax>
+        <phpsyntax function="crack_check"></phpsyntax>
+        <phpsyntax function="crack_closedict"></phpsyntax>
+        <phpsyntax function="crack_getlastmessage"></phpsyntax>
+        <phpsyntax function="crack_opendict"></phpsyntax>
+        <phpsyntax function="crash"></phpsyntax>
+        <phpsyntax function="crc32"></phpsyntax>
+        <phpsyntax function="create_function" usage="string create_function(string args, string code)\n" description="Creates an anonymous function, and returns its name (funny, eh?)"></phpsyntax>
+        <phpsyntax function="crypt"></phpsyntax>
+        <phpsyntax function="crypt"></phpsyntax>
+        <phpsyntax function="ctype_alnum"></phpsyntax>
+        <phpsyntax function="ctype_alpha"></phpsyntax>
+        <phpsyntax function="ctype_cntrl"></phpsyntax>
+        <phpsyntax function="ctype_digit"></phpsyntax>
+        <phpsyntax function="ctype_graph"></phpsyntax>
+        <phpsyntax function="ctype_lower"></phpsyntax>
+        <phpsyntax function="ctype_print"></phpsyntax>
+        <phpsyntax function="ctype_punct"></phpsyntax>
+        <phpsyntax function="ctype_space"></phpsyntax>
+        <phpsyntax function="ctype_upper"></phpsyntax>
+        <phpsyntax function="ctype_xdigit"></phpsyntax>
+        <phpsyntax function="curl_close"></phpsyntax>
+        <phpsyntax function="curl_errno"></phpsyntax>
+        <phpsyntax function="curl_error"></phpsyntax>
+        <phpsyntax function="curl_exec"></phpsyntax>
+        <phpsyntax function="curl_getinfo"></phpsyntax>
+        <phpsyntax function="curl_getinfo"></phpsyntax>
+        <phpsyntax function="curl_init"></phpsyntax>
+        <phpsyntax function="curl_setopt"></phpsyntax>
+        <phpsyntax function="curl_version"></phpsyntax>
+        <phpsyntax function="current"></phpsyntax>
+        <phpsyntax function="cv_add"></phpsyntax>
+        <phpsyntax function="cv_auth"></phpsyntax>
+        <phpsyntax function="cv_command"></phpsyntax>
+        <phpsyntax function="cv_count"></phpsyntax>
+        <phpsyntax function="cv_delete"></phpsyntax>
+        <phpsyntax function="cv_done"></phpsyntax>
+        <phpsyntax function="cv_init"></phpsyntax>
+        <phpsyntax function="cv_lookup"></phpsyntax>
+        <phpsyntax function="cv_new"></phpsyntax>
+        <phpsyntax function="cv_report"></phpsyntax>
+        <phpsyntax function="cv_return"></phpsyntax>
+        <phpsyntax function="cv_reverse"></phpsyntax>
+        <phpsyntax function="cv_sale"></phpsyntax>
+        <phpsyntax function="cv_status"></phpsyntax>
+        <phpsyntax function="cv_textvalue"></phpsyntax>
+        <phpsyntax function="cv_void"></phpsyntax>
+        <phpsyntax function="cybercash_base64_decode"></phpsyntax>
+        <phpsyntax function="cybercash_base64_encode"></phpsyntax>
+        <phpsyntax function="cybercash_decr"></phpsyntax>
+        <phpsyntax function="cybercash_encr"></phpsyntax>
+        <phpsyntax function="cybermut_creerformulairecm"></phpsyntax>
+        <phpsyntax function="cybermut_creerreponsecm"></phpsyntax>
+        <phpsyntax function="cybermut_testmac"></phpsyntax>
+        <phpsyntax function="date"></phpsyntax>
+        <phpsyntax function="dba_close"></phpsyntax>
+        <phpsyntax function="dba_delete"></phpsyntax>
+        <phpsyntax function="dba_exists"></phpsyntax>
+        <phpsyntax function="dba_fetch"></phpsyntax>
+        <phpsyntax function="dba_firstkey"></phpsyntax>
+        <phpsyntax function="dba_insert"></phpsyntax>
+        <phpsyntax function="dba_nextkey"></phpsyntax>
+        <phpsyntax function="dba_open"></phpsyntax>
+        <phpsyntax function="dba_optimize"></phpsyntax>
+        <phpsyntax function="dba_popen"></phpsyntax>
+        <phpsyntax function="dba_replace"></phpsyntax>
+        <phpsyntax function="dba_sync"></phpsyntax>
+        <phpsyntax function="dbase_add_record"></phpsyntax>
+        <phpsyntax function="dbase_close"></phpsyntax>
+        <phpsyntax function="dbase_create"></phpsyntax>
+        <phpsyntax function="dbase_delete_record"></phpsyntax>
+        <phpsyntax function="dbase_get_record"></phpsyntax>
+        <phpsyntax function="dbase_get_record_with_names"></phpsyntax>
+        <phpsyntax function="dbase_numfields"></phpsyntax>
+        <phpsyntax function="dbase_numrecords"></phpsyntax>
+        <phpsyntax function="dbase_open"></phpsyntax>
+        <phpsyntax function="dbase_pack"></phpsyntax>
+        <phpsyntax function="dbase_replace_record"></phpsyntax>
+        <phpsyntax function="dblist"></phpsyntax>
+        <phpsyntax function="dbmclose"></phpsyntax>
+        <phpsyntax function="dbmdelete"></phpsyntax>
+        <phpsyntax function="dbmexists"></phpsyntax>
+        <phpsyntax function="dbmfetch"></phpsyntax>
+        <phpsyntax function="dbmfirstkey"></phpsyntax>
+        <phpsyntax function="dbminsert"></phpsyntax>
+        <phpsyntax function="dbmnextkey"></phpsyntax>
+        <phpsyntax function="dbmopen"></phpsyntax>
+        <phpsyntax function="dbmreplace"></phpsyntax>
+        <phpsyntax function="dbx_close"></phpsyntax>
+        <phpsyntax function="dbx_cmp_asc"></phpsyntax>
+        <phpsyntax function="dbx_cmp_desc"></phpsyntax>
+        <phpsyntax function="dbx_connect"></phpsyntax>
+        <phpsyntax function="dbx_error"></phpsyntax>
+        <phpsyntax function="dbx_query"></phpsyntax>
+        <phpsyntax function="dbx_sort"></phpsyntax>
+        <phpsyntax function="dcgettext"></phpsyntax>
+        <phpsyntax function="decbin"></phpsyntax>
+        <phpsyntax function="dechex"></phpsyntax>
+        <phpsyntax function="decoct"></phpsyntax>
+        <phpsyntax function="define" usage="bool define(string constant_name, mixed value, case_sensitive=true)\n" description="Define a new constant"></phpsyntax>
+        <phpsyntax function="define_syslog_variables"></phpsyntax>
+        <phpsyntax function="defined" usage="bool defined(string constant_name)\n" description="Check whether a constant exists"></phpsyntax>
+        <phpsyntax function="deg2rad"></phpsyntax>
+        <phpsyntax function="delete_iovec"></phpsyntax>
+        <phpsyntax function="dgettext"></phpsyntax>
+        <phpsyntax function="dir" usage="class dir(string directory)\n" description="Directory class with properties, handle and class and methods read, rewind and close"></phpsyntax>
+        <phpsyntax function="dirname"></phpsyntax>
+        <phpsyntax function="diskfreespace"></phpsyntax>
+        <phpsyntax function="display_disabled_function"></phpsyntax>
+        <phpsyntax function="dl"></phpsyntax>
+        <phpsyntax function="domxml_add_root"></phpsyntax>
+        <phpsyntax function="domxml_attributes"></phpsyntax>
+        <phpsyntax function="domxml_children"></phpsyntax>
+        <phpsyntax function="domxml_dumpmem"></phpsyntax>
+        <phpsyntax function="domxml_elem_get_attribute"></phpsyntax>
+        <phpsyntax function="domxml_elem_set_attribute"></phpsyntax>
+        <phpsyntax function="domxml_get_attribute"></phpsyntax>
+        <phpsyntax function="domxml_getattr"></phpsyntax>
+        <phpsyntax function="domxml_new_child"></phpsyntax>
+        <phpsyntax function="domxml_new_xmldoc"></phpsyntax>
+        <phpsyntax function="domxml_node"></phpsyntax>
+        <phpsyntax function="domxml_node_attributes"></phpsyntax>
+        <phpsyntax function="domxml_node_children"></phpsyntax>
+        <phpsyntax function="domxml_node_new_child"></phpsyntax>
+        <phpsyntax function="domxml_node_set_content"></phpsyntax>
+        <phpsyntax function="domxml_node_unlink_node"></phpsyntax>
+        <phpsyntax function="domxml_root"></phpsyntax>
+        <phpsyntax function="domxml_set_attribute"></phpsyntax>
+        <phpsyntax function="domxml_setattr"></phpsyntax>
+        <phpsyntax function="domxml_unlink_node"></phpsyntax>
+        <phpsyntax function="domxml_version"></phpsyntax>
+        <phpsyntax function="doubleval"></phpsyntax>
+        <phpsyntax function="drawarc"></phpsyntax>
+        <phpsyntax function="drawcircle"></phpsyntax>
+        <phpsyntax function="drawcubic"></phpsyntax>
+        <phpsyntax function="drawcubicto"></phpsyntax>
+        <phpsyntax function="drawcurve"></phpsyntax>
+        <phpsyntax function="drawcurveto"></phpsyntax>
+        <phpsyntax function="drawglyph"></phpsyntax>
+        <phpsyntax function="drawline"></phpsyntax>
+        <phpsyntax function="drawlineto"></phpsyntax>
+        <phpsyntax function="each"></phpsyntax>
+        <phpsyntax function="easter_date"></phpsyntax>
+        <phpsyntax function="easter_days"></phpsyntax>
+        <phpsyntax function="end"></phpsyntax>
+        <phpsyntax function="ereg"></phpsyntax>
+        <phpsyntax function="ereg_replace"></phpsyntax>
+        <phpsyntax function="eregi"></phpsyntax>
+        <phpsyntax function="eregi_replace"></phpsyntax>
+        <phpsyntax function="error_log"></phpsyntax>
+        <phpsyntax function="error_reporting"></phpsyntax>
+        <phpsyntax function="escapeshellarg"></phpsyntax>
+        <phpsyntax function="escapeshellcmd"></phpsyntax>
+        <phpsyntax function="exec"></phpsyntax>
+        <phpsyntax function="exit"></phpsyntax>
+        <phpsyntax function="exp"></phpsyntax>
+        <phpsyntax function="explode"></phpsyntax>
+        <phpsyntax function="extension_loaded"></phpsyntax>
+        <phpsyntax function="extract"></phpsyntax>
+        <phpsyntax function="ezmlm_hash"></phpsyntax>
+        <phpsyntax function="ezmlm_hash"></phpsyntax>
+        <phpsyntax function="fbsql"></phpsyntax>
+        <phpsyntax function="fbsql_affected_rows"></phpsyntax>
+        <phpsyntax function="fbsql_autocommit"></phpsyntax>
+        <phpsyntax function="fbsql_close"></phpsyntax>
+        <phpsyntax function="fbsql_commit"></phpsyntax>
+        <phpsyntax function="fbsql_connect"></phpsyntax>
+        <phpsyntax function="fbsql_create_db"></phpsyntax>
+        <phpsyntax function="fbsql_data_seek"></phpsyntax>
+        <phpsyntax function="fbsql_database"></phpsyntax>
+        <phpsyntax function="fbsql_database_password"></phpsyntax>
+        <phpsyntax function="fbsql_db_query"></phpsyntax>
+        <phpsyntax function="fbsql_drop_db"></phpsyntax>
+        <phpsyntax function="fbsql_errno"></phpsyntax>
+        <phpsyntax function="fbsql_error"></phpsyntax>
+        <phpsyntax function="fbsql_fetch_array"></phpsyntax>
+        <phpsyntax function="fbsql_fetch_assoc"></phpsyntax>
+        <phpsyntax function="fbsql_fetch_field"></phpsyntax>
+        <phpsyntax function="fbsql_fetch_lengths"></phpsyntax>
+        <phpsyntax function="fbsql_fetch_object"></phpsyntax>
+        <phpsyntax function="fbsql_fetch_row"></phpsyntax>
+        <phpsyntax function="fbsql_field_flags"></phpsyntax>
+        <phpsyntax function="fbsql_field_len"></phpsyntax>
+        <phpsyntax function="fbsql_field_name"></phpsyntax>
+        <phpsyntax function="fbsql_field_seek"></phpsyntax>
+        <phpsyntax function="fbsql_field_table"></phpsyntax>
+        <phpsyntax function="fbsql_field_type"></phpsyntax>
+        <phpsyntax function="fbsql_free_result"></phpsyntax>
+        <phpsyntax function="fbsql_hostname"></phpsyntax>
+        <phpsyntax function="fbsql_insert_id"></phpsyntax>
+        <phpsyntax function="fbsql_list_dbs"></phpsyntax>
+        <phpsyntax function="fbsql_list_fields"></phpsyntax>
+        <phpsyntax function="fbsql_list_tables"></phpsyntax>
+        <phpsyntax function="fbsql_next_result"></phpsyntax>
+        <phpsyntax function="fbsql_num_fields"></phpsyntax>
+        <phpsyntax function="fbsql_num_rows"></phpsyntax>
+        <phpsyntax function="fbsql_password"></phpsyntax>
+        <phpsyntax function="fbsql_pconnect"></phpsyntax>
+        <phpsyntax function="fbsql_query"></phpsyntax>
+        <phpsyntax function="fbsql_result"></phpsyntax>
+        <phpsyntax function="fbsql_rollback"></phpsyntax>
+        <phpsyntax function="fbsql_select_db"></phpsyntax>
+        <phpsyntax function="fbsql_start_db"></phpsyntax>
+        <phpsyntax function="fbsql_stop_db"></phpsyntax>
+        <phpsyntax function="fbsql_username"></phpsyntax>
+        <phpsyntax function="fbsql_warnings"></phpsyntax>
+        <phpsyntax function="fclose"></phpsyntax>
+        <phpsyntax function="fd_alloc"></phpsyntax>
+        <phpsyntax function="fd_clear"></phpsyntax>
+        <phpsyntax function="fd_dealloc"></phpsyntax>
+        <phpsyntax function="fd_isset"></phpsyntax>
+        <phpsyntax function="fd_set"></phpsyntax>
+        <phpsyntax function="fd_zero"></phpsyntax>
+        <phpsyntax function="fdf_add_template"></phpsyntax>
+        <phpsyntax function="fdf_close"></phpsyntax>
+        <phpsyntax function="fdf_create"></phpsyntax>
+        <phpsyntax function="fdf_get_file"></phpsyntax>
+        <phpsyntax function="fdf_get_status"></phpsyntax>
+        <phpsyntax function="fdf_get_value"></phpsyntax>
+        <phpsyntax function="fdf_next_field_name"></phpsyntax>
+        <phpsyntax function="fdf_open"></phpsyntax>
+        <phpsyntax function="fdf_save"></phpsyntax>
+        <phpsyntax function="fdf_set_ap"></phpsyntax>
+        <phpsyntax function="fdf_set_file"></phpsyntax>
+        <phpsyntax function="fdf_set_flags"></phpsyntax>
+        <phpsyntax function="fdf_set_javascript_action"></phpsyntax>
+        <phpsyntax function="fdf_set_opt"></phpsyntax>
+        <phpsyntax function="fdf_set_status"></phpsyntax>
+        <phpsyntax function="fdf_set_submit_form_action"></phpsyntax>
+        <phpsyntax function="fdf_set_value"></phpsyntax>
+        <phpsyntax function="feof"></phpsyntax>
+        <phpsyntax function="fetch_iovec"></phpsyntax>
+        <phpsyntax function="fflush"></phpsyntax>
+        <phpsyntax function="fgetc"></phpsyntax>
+        <phpsyntax function="fgetcsv"></phpsyntax>
+        <phpsyntax function="fgets"></phpsyntax>
+        <phpsyntax function="fgetss"></phpsyntax>
+        <phpsyntax function="file"></phpsyntax>
+        <phpsyntax function="file_exists"></phpsyntax>
+        <phpsyntax function="fileatime"></phpsyntax>
+        <phpsyntax function="filectime"></phpsyntax>
+        <phpsyntax function="filegroup"></phpsyntax>
+        <phpsyntax function="fileinode"></phpsyntax>
+        <phpsyntax function="filemtime"></phpsyntax>
+        <phpsyntax function="fileowner"></phpsyntax>
+        <phpsyntax function="fileperms"></phpsyntax>
+        <phpsyntax function="filepro"></phpsyntax>
+        <phpsyntax function="filepro_fieldcount"></phpsyntax>
+        <phpsyntax function="filepro_fieldname"></phpsyntax>
+        <phpsyntax function="filepro_fieldtype"></phpsyntax>
+        <phpsyntax function="filepro_fieldwidth"></phpsyntax>
+        <phpsyntax function="filepro_retrieve"></phpsyntax>
+        <phpsyntax function="filepro_rowcount"></phpsyntax>
+        <phpsyntax function="filesize"></phpsyntax>
+        <phpsyntax function="filetype"></phpsyntax>
+        <phpsyntax function="flock"></phpsyntax>
+        <phpsyntax function="floor"></phpsyntax>
+        <phpsyntax function="flush"></phpsyntax>
+        <phpsyntax function="fopen"></phpsyntax>
+        <phpsyntax function="fopenstream"></phpsyntax>
+        <phpsyntax function="fopenstream"></phpsyntax>
+        <phpsyntax function="fpassthru"></phpsyntax>
+        <phpsyntax function="fputs"></phpsyntax>
+        <phpsyntax function="fread"></phpsyntax>
+        <phpsyntax function="free_iovec"></phpsyntax>
+        <phpsyntax function="frenchtojd"></phpsyntax>
+        <phpsyntax function="fribidi_log2vis"></phpsyntax>
+        <phpsyntax function="fscanf"></phpsyntax>
+        <phpsyntax function="fseek"></phpsyntax>
+        <phpsyntax function="fsockopen"></phpsyntax>
+        <phpsyntax function="fstat"></phpsyntax>
+        <phpsyntax function="ftell"></phpsyntax>
+        <phpsyntax function="ftp_cdup"></phpsyntax>
+        <phpsyntax function="ftp_chdir"></phpsyntax>
+        <phpsyntax function="ftp_connect"></phpsyntax>
+        <phpsyntax function="ftp_delete"></phpsyntax>
+        <phpsyntax function="ftp_exec"></phpsyntax>
+        <phpsyntax function="ftp_fget"></phpsyntax>
+        <phpsyntax function="ftp_fput"></phpsyntax>
+        <phpsyntax function="ftp_get"></phpsyntax>
+        <phpsyntax function="ftp_login"></phpsyntax>
+        <phpsyntax function="ftp_mdtm"></phpsyntax>
+        <phpsyntax function="ftp_mkdir"></phpsyntax>
+        <phpsyntax function="ftp_nlist"></phpsyntax>
+        <phpsyntax function="ftp_pasv"></phpsyntax>
+        <phpsyntax function="ftp_put"></phpsyntax>
+        <phpsyntax function="ftp_pwd"></phpsyntax>
+        <phpsyntax function="ftp_quit"></phpsyntax>
+        <phpsyntax function="ftp_rawlist"></phpsyntax>
+        <phpsyntax function="ftp_rename"></phpsyntax>
+        <phpsyntax function="ftp_rmdir"></phpsyntax>
+        <phpsyntax function="ftp_site"></phpsyntax>
+        <phpsyntax function="ftp_size"></phpsyntax>
+        <phpsyntax function="ftp_systype"></phpsyntax>
+        <phpsyntax function="ftruncate"></phpsyntax>
+        <phpsyntax function="func_get_arg"></phpsyntax>
+        <phpsyntax function="func_get_args"></phpsyntax>
+        <phpsyntax function="func_num_args"></phpsyntax>
+        <phpsyntax function="function_exists"></phpsyntax>
+        <phpsyntax function="fwrite"></phpsyntax>
+        <phpsyntax function="get_all_headers"></phpsyntax>
+        <phpsyntax function="get_browser"></phpsyntax>
+        <phpsyntax function="get_cfg_var"></phpsyntax>
+        <phpsyntax function="get_class"></phpsyntax>
+        <phpsyntax function="get_class_methods"></phpsyntax>
+        <phpsyntax function="get_class_vars"></phpsyntax>
+        <phpsyntax function="get_current_user"></phpsyntax>
+        <phpsyntax function="get_declared_classes"></phpsyntax>
+        <phpsyntax function="get_defined_functions"></phpsyntax>
+        <phpsyntax function="get_defined_vars"></phpsyntax>
+        <phpsyntax function="get_extension_funcs"></phpsyntax>
+        <phpsyntax function="get_html_translation_table"></phpsyntax>
+        <phpsyntax function="get_included_files"></phpsyntax>
+        <phpsyntax function="get_loaded_extensions"></phpsyntax>
+        <phpsyntax function="get_magic_quotes_gpc"></phpsyntax>
+        <phpsyntax function="get_magic_quotes_runtime"></phpsyntax>
+        <phpsyntax function="get_meta_tags"></phpsyntax>
+        <phpsyntax function="get_object_vars"></phpsyntax>
+        <phpsyntax function="get_parent_class"></phpsyntax>
+        <phpsyntax function="get_required_files"></phpsyntax>
+        <phpsyntax function="get_resource_type"></phpsyntax>
+        <phpsyntax function="getallheaders"></phpsyntax>
+        <phpsyntax function="getallheaders"></phpsyntax>
+        <phpsyntax function="getascent"></phpsyntax>
+        <phpsyntax function="getascent"></phpsyntax>
+        <phpsyntax function="getcwd"></phpsyntax>
+        <phpsyntax function="getdate"></phpsyntax>
+        <phpsyntax function="getdescent"></phpsyntax>
+        <phpsyntax function="getdescent"></phpsyntax>
+        <phpsyntax function="getenv"></phpsyntax>
+        <phpsyntax function="getheight"></phpsyntax>
+        <phpsyntax function="gethostbyaddr"></phpsyntax>
+        <phpsyntax function="gethostbyaddr"></phpsyntax>
+        <phpsyntax function="gethostbyname"></phpsyntax>
+        <phpsyntax function="gethostbyname"></phpsyntax>
+        <phpsyntax function="gethostbynamel"></phpsyntax>
+        <phpsyntax function="getimagesize"></phpsyntax>
+        <phpsyntax function="getlastmod"></phpsyntax>
+        <phpsyntax function="getleading"></phpsyntax>
+        <phpsyntax function="getleading"></phpsyntax>
+        <phpsyntax function="getmxrr"></phpsyntax>
+        <phpsyntax function="getmxrr"></phpsyntax>
+        <phpsyntax function="getmyinode"></phpsyntax>
+        <phpsyntax function="getmypid"></phpsyntax>
+        <phpsyntax function="getmyuid"></phpsyntax>
+        <phpsyntax function="getpeername"></phpsyntax>
+        <phpsyntax function="getprotobyname"></phpsyntax>
+        <phpsyntax function="getprotobynumber"></phpsyntax>
+        <phpsyntax function="getrandmax"></phpsyntax>
+        <phpsyntax function="getrusage"></phpsyntax>
+        <phpsyntax function="getrusage"></phpsyntax>
+        <phpsyntax function="getservbyname"></phpsyntax>
+        <phpsyntax function="getservbyport"></phpsyntax>
+        <phpsyntax function="getshape1"></phpsyntax>
+        <phpsyntax function="getshape2"></phpsyntax>
+        <phpsyntax function="getsockname"></phpsyntax>
+        <phpsyntax function="getsockopt"></phpsyntax>
+        <phpsyntax function="gettext"></phpsyntax>
+        <phpsyntax function="gettimeofday"></phpsyntax>
+        <phpsyntax function="gettype"></phpsyntax>
+        <phpsyntax function="getwidth"></phpsyntax>
+        <phpsyntax function="getwidth"></phpsyntax>
+        <phpsyntax function="getwidth"></phpsyntax>
+        <phpsyntax function="gmdate"></phpsyntax>
+        <phpsyntax function="gmmktime"></phpsyntax>
+        <phpsyntax function="gmp_abs"></phpsyntax>
+        <phpsyntax function="gmp_add"></phpsyntax>
+        <phpsyntax function="gmp_and"></phpsyntax>
+        <phpsyntax function="gmp_clrbit"></phpsyntax>
+        <phpsyntax function="gmp_cmp"></phpsyntax>
+        <phpsyntax function="gmp_com"></phpsyntax>
+        <phpsyntax function="gmp_div"></phpsyntax>
+        <phpsyntax function="gmp_div_q"></phpsyntax>
+        <phpsyntax function="gmp_div_qr"></phpsyntax>
+        <phpsyntax function="gmp_div_r"></phpsyntax>
+        <phpsyntax function="gmp_divexact"></phpsyntax>
+        <phpsyntax function="gmp_fact"></phpsyntax>
+        <phpsyntax function="gmp_gcd"></phpsyntax>
+        <phpsyntax function="gmp_gcdext"></phpsyntax>
+        <phpsyntax function="gmp_hamdist"></phpsyntax>
+        <phpsyntax function="gmp_init"></phpsyntax>
+        <phpsyntax function="gmp_intval"></phpsyntax>
+        <phpsyntax function="gmp_invert"></phpsyntax>
+        <phpsyntax function="gmp_jacobi"></phpsyntax>
+        <phpsyntax function="gmp_legendre"></phpsyntax>
+        <phpsyntax function="gmp_mod"></phpsyntax>
+        <phpsyntax function="gmp_mul"></phpsyntax>
+        <phpsyntax function="gmp_neg"></phpsyntax>
+        <phpsyntax function="gmp_or"></phpsyntax>
+        <phpsyntax function="gmp_perfect_square"></phpsyntax>
+        <phpsyntax function="gmp_popcount"></phpsyntax>
+        <phpsyntax function="gmp_pow"></phpsyntax>
+        <phpsyntax function="gmp_powm"></phpsyntax>
+        <phpsyntax function="gmp_prob_prime"></phpsyntax>
+        <phpsyntax function="gmp_random"></phpsyntax>
+        <phpsyntax function="gmp_scan0"></phpsyntax>
+        <phpsyntax function="gmp_scan1"></phpsyntax>
+        <phpsyntax function="gmp_setbit"></phpsyntax>
+        <phpsyntax function="gmp_sign"></phpsyntax>
+        <phpsyntax function="gmp_sqrt"></phpsyntax>
+        <phpsyntax function="gmp_sqrtrem"></phpsyntax>
+        <phpsyntax function="gmp_strval"></phpsyntax>
+        <phpsyntax function="gmp_sub"></phpsyntax>
+        <phpsyntax function="gmp_xor"></phpsyntax>
+        <phpsyntax function="gmstrftime"></phpsyntax>
+        <phpsyntax function="gmstrftime"></phpsyntax>
+        <phpsyntax function="gregoriantojd"></phpsyntax>
+        <phpsyntax function="gzclose"></phpsyntax>
+        <phpsyntax function="gzcompress"></phpsyntax>
+        <phpsyntax function="gzdeflate"></phpsyntax>
+        <phpsyntax function="gzencode"></phpsyntax>
+        <phpsyntax function="gzeof"></phpsyntax>
+        <phpsyntax function="gzfile"></phpsyntax>
+        <phpsyntax function="gzgetc"></phpsyntax>
+        <phpsyntax function="gzgets"></phpsyntax>
+        <phpsyntax function="gzgetss"></phpsyntax>
+        <phpsyntax function="gzinflate"></phpsyntax>
+        <phpsyntax function="gzopen"></phpsyntax>
+        <phpsyntax function="gzpassthru"></phpsyntax>
+        <phpsyntax function="gzputs"></phpsyntax>
+        <phpsyntax function="gzread"></phpsyntax>
+        <phpsyntax function="gzrewind"></phpsyntax>
+        <phpsyntax function="gzseek"></phpsyntax>
+        <phpsyntax function="gztell"></phpsyntax>
+        <phpsyntax function="gzuncompress"></phpsyntax>
+        <phpsyntax function="gzwrite"></phpsyntax>
+        <phpsyntax function="header"></phpsyntax>
+        <phpsyntax function="headers_sent"></phpsyntax>
+        <phpsyntax function="hebrev"></phpsyntax>
+        <phpsyntax function="hebrevc"></phpsyntax>
+        <phpsyntax function="hexdec"></phpsyntax>
+        <phpsyntax function="highlight_file"></phpsyntax>
+        <phpsyntax function="highlight_string"></phpsyntax>
+        <phpsyntax function="htmlentities"></phpsyntax>
+        <phpsyntax function="htmlspecialchars"></phpsyntax>
+        <phpsyntax function="hw_array2objrec"></phpsyntax>
+        <phpsyntax function="hw_changeobject"></phpsyntax>
+        <phpsyntax function="hw_children"></phpsyntax>
+        <phpsyntax function="hw_childrenobj"></phpsyntax>
+        <phpsyntax function="hw_close"></phpsyntax>
+        <phpsyntax function="hw_connect"></phpsyntax>
+        <phpsyntax function="hw_connection_info"></phpsyntax>
+        <phpsyntax function="hw_cp"></phpsyntax>
+        <phpsyntax function="hw_deleteobject"></phpsyntax>
+        <phpsyntax function="hw_docbyanchor"></phpsyntax>
+        <phpsyntax function="hw_docbyanchorobj"></phpsyntax>
+        <phpsyntax function="hw_document_attributes"></phpsyntax>
+        <phpsyntax function="hw_document_bodytag"></phpsyntax>
+        <phpsyntax function="hw_document_content"></phpsyntax>
+        <phpsyntax function="hw_document_setcontent"></phpsyntax>
+        <phpsyntax function="hw_document_size"></phpsyntax>
+        <phpsyntax function="hw_dummy"></phpsyntax>
+        <phpsyntax function="hw_edittext"></phpsyntax>
+        <phpsyntax function="hw_error"></phpsyntax>
+        <phpsyntax function="hw_errormsg"></phpsyntax>
+        <phpsyntax function="hw_free_document"></phpsyntax>
+        <phpsyntax function="hw_getanchors"></phpsyntax>
+        <phpsyntax function="hw_getanchorsobj"></phpsyntax>
+        <phpsyntax function="hw_getandlock"></phpsyntax>
+        <phpsyntax function="hw_getcgi"></phpsyntax>
+        <phpsyntax function="hw_getchildcoll"></phpsyntax>
+        <phpsyntax function="hw_getchildcollobj"></phpsyntax>
+        <phpsyntax function="hw_getchilddoccoll"></phpsyntax>
+        <phpsyntax function="hw_getchilddoccollobj"></phpsyntax>
+        <phpsyntax function="hw_getobject"></phpsyntax>
+        <phpsyntax function="hw_getobjectbyftquery"></phpsyntax>
+        <phpsyntax function="hw_getobjectbyftquerycoll"></phpsyntax>
+        <phpsyntax function="hw_getobjectbyftquerycollobj"></phpsyntax>
+        <phpsyntax function="hw_getobjectbyftqueryobj"></phpsyntax>
+        <phpsyntax function="hw_getobjectbyquery"></phpsyntax>
+        <phpsyntax function="hw_getobjectbyquerycoll"></phpsyntax>
+        <phpsyntax function="hw_getobjectbyquerycollobj"></phpsyntax>
+        <phpsyntax function="hw_getobjectbyqueryobj"></phpsyntax>
+        <phpsyntax function="hw_getparents"></phpsyntax>
+        <phpsyntax function="hw_getparentsobj"></phpsyntax>
+        <phpsyntax function="hw_getrellink"></phpsyntax>
+        <phpsyntax function="hw_getremote"></phpsyntax>
+        <phpsyntax function="hw_getremotechildren"></phpsyntax>
+        <phpsyntax function="hw_getsrcbydestobj"></phpsyntax>
+        <phpsyntax function="hw_gettext"></phpsyntax>
+        <phpsyntax function="hw_getusername"></phpsyntax>
+        <phpsyntax function="hw_identify"></phpsyntax>
+        <phpsyntax function="hw_incollections"></phpsyntax>
+        <phpsyntax function="hw_info"></phpsyntax>
+        <phpsyntax function="hw_inscoll"></phpsyntax>
+        <phpsyntax function="hw_insdoc"></phpsyntax>
+        <phpsyntax function="hw_insertanchors"></phpsyntax>
+        <phpsyntax function="hw_insertdocument"></phpsyntax>
+        <phpsyntax function="hw_insertobject"></phpsyntax>
+        <phpsyntax function="hw_mapid"></phpsyntax>
+        <phpsyntax function="hw_modifyobject"></phpsyntax>
+        <phpsyntax function="hw_mv"></phpsyntax>
+        <phpsyntax function="hw_new_document"></phpsyntax>
+        <phpsyntax function="hw_new_document_from_file"></phpsyntax>
+        <phpsyntax function="hw_objrec2array"></phpsyntax>
+        <phpsyntax function="hw_output_document"></phpsyntax>
+        <phpsyntax function="hw_pconnect"></phpsyntax>
+        <phpsyntax function="hw_pipecgi"></phpsyntax>
+        <phpsyntax function="hw_pipedocument"></phpsyntax>
+        <phpsyntax function="hw_root"></phpsyntax>
+        <phpsyntax function="hw_setlinkroot"></phpsyntax>
+        <phpsyntax function="hw_stat"></phpsyntax>
+        <phpsyntax function="hw_unlock"></phpsyntax>
+        <phpsyntax function="hw_who"></phpsyntax>
+        <phpsyntax function="ibase_blob_add"></phpsyntax>
+        <phpsyntax function="ibase_blob_cancel"></phpsyntax>
+        <phpsyntax function="ibase_blob_close"></phpsyntax>
+        <phpsyntax function="ibase_blob_create"></phpsyntax>
+        <phpsyntax function="ibase_blob_echo"></phpsyntax>
+        <phpsyntax function="ibase_blob_get"></phpsyntax>
+        <phpsyntax function="ibase_blob_import"></phpsyntax>
+        <phpsyntax function="ibase_blob_info"></phpsyntax>
+        <phpsyntax function="ibase_blob_open"></phpsyntax>
+        <phpsyntax function="ibase_close"></phpsyntax>
+        <phpsyntax function="ibase_commit"></phpsyntax>
+        <phpsyntax function="ibase_connect"></phpsyntax>
+        <phpsyntax function="ibase_errmsg"></phpsyntax>
+        <phpsyntax function="ibase_execute"></phpsyntax>
+        <phpsyntax function="ibase_fetch_object"></phpsyntax>
+        <phpsyntax function="ibase_fetch_row"></phpsyntax>
+        <phpsyntax function="ibase_field_info"></phpsyntax>
+        <phpsyntax function="ibase_free_query"></phpsyntax>
+        <phpsyntax function="ibase_free_result"></phpsyntax>
+        <phpsyntax function="ibase_num_fields"></phpsyntax>
+        <phpsyntax function="ibase_pconnect"></phpsyntax>
+        <phpsyntax function="ibase_prepare"></phpsyntax>
+        <phpsyntax function="ibase_query"></phpsyntax>
+        <phpsyntax function="ibase_rollback"></phpsyntax>
+        <phpsyntax function="ibase_timefmt"></phpsyntax>
+        <phpsyntax function="ibase_trans"></phpsyntax>
+        <phpsyntax function="icap_create_calendar"></phpsyntax>
+        <phpsyntax function="icap_delete_calendar"></phpsyntax>
+        <phpsyntax function="icap_delete_event"></phpsyntax>
+        <phpsyntax function="icap_fetch_event"></phpsyntax>
+        <phpsyntax function="icap_list_alarms"></phpsyntax>
+        <phpsyntax function="icap_list_events"></phpsyntax>
+        <phpsyntax function="icap_open"></phpsyntax>
+        <phpsyntax function="icap_popen"></phpsyntax>
+        <phpsyntax function="icap_rename_calendar"></phpsyntax>
+        <phpsyntax function="icap_reopen"></phpsyntax>
+        <phpsyntax function="icap_snooze"></phpsyntax>
+        <phpsyntax function="icap_store_event"></phpsyntax>
+        <phpsyntax function="iconv"></phpsyntax>
+        <phpsyntax function="iconv_get_encoding"></phpsyntax>
+        <phpsyntax function="iconv_set_encoding"></phpsyntax>
+        <phpsyntax function="ifx_affected_rows"></phpsyntax>
+        <phpsyntax function="ifx_blobinfile_mode"></phpsyntax>
+        <phpsyntax function="ifx_byteasvarchar"></phpsyntax>
+        <phpsyntax function="ifx_close"></phpsyntax>
+        <phpsyntax function="ifx_connect"></phpsyntax>
+        <phpsyntax function="ifx_copy_blob"></phpsyntax>
+        <phpsyntax function="ifx_create_blob"></phpsyntax>
+        <phpsyntax function="ifx_create_char"></phpsyntax>
+        <phpsyntax function="ifx_do"></phpsyntax>
+        <phpsyntax function="ifx_error"></phpsyntax>
+        <phpsyntax function="ifx_errormsg"></phpsyntax>
+        <phpsyntax function="ifx_fetch_row"></phpsyntax>
+        <phpsyntax function="ifx_fieldproperties"></phpsyntax>
+        <phpsyntax function="ifx_fieldtypes"></phpsyntax>
+        <phpsyntax function="ifx_free_blob"></phpsyntax>
+        <phpsyntax function="ifx_free_char"></phpsyntax>
+        <phpsyntax function="ifx_free_result"></phpsyntax>
+        <phpsyntax function="ifx_get_blob"></phpsyntax>
+        <phpsyntax function="ifx_get_char"></phpsyntax>
+        <phpsyntax function="ifx_getsqlca"></phpsyntax>
+        <phpsyntax function="ifx_htmltbl_result"></phpsyntax>
+        <phpsyntax function="ifx_nullformat"></phpsyntax>
+        <phpsyntax function="ifx_num_fields"></phpsyntax>
+        <phpsyntax function="ifx_num_rows"></phpsyntax>
+        <phpsyntax function="ifx_pconnect"></phpsyntax>
+        <phpsyntax function="ifx_prepare"></phpsyntax>
+        <phpsyntax function="ifx_query"></phpsyntax>
+        <phpsyntax function="ifx_textasvarchar"></phpsyntax>
+        <phpsyntax function="ifx_update_blob"></phpsyntax>
+        <phpsyntax function="ifx_update_char"></phpsyntax>
+        <phpsyntax function="ifxus_close_slob"></phpsyntax>
+        <phpsyntax function="ifxus_create_slob"></phpsyntax>
+        <phpsyntax function="ifxus_free_slob"></phpsyntax>
+        <phpsyntax function="ifxus_open_slob"></phpsyntax>
+        <phpsyntax function="ifxus_read_slob"></phpsyntax>
+        <phpsyntax function="ifxus_seek_slob"></phpsyntax>
+        <phpsyntax function="ifxus_tell_slob"></phpsyntax>
+        <phpsyntax function="ifxus_write_slob"></phpsyntax>
+        <phpsyntax function="ignore_user_abort"></phpsyntax>
+        <phpsyntax function="iis_addserver"></phpsyntax>
+        <phpsyntax function="iis_getdirsecurity"></phpsyntax>
+        <phpsyntax function="iis_getscriptmap"></phpsyntax>
+        <phpsyntax function="iis_getserverbycomment"></phpsyntax>
+        <phpsyntax function="iis_getserverbypath"></phpsyntax>
+        <phpsyntax function="iis_getserverright"></phpsyntax>
+        <phpsyntax function="iis_getservicestate"></phpsyntax>
+        <phpsyntax function="iis_removeserver"></phpsyntax>
+        <phpsyntax function="iis_setappsettings"></phpsyntax>
+        <phpsyntax function="iis_setdirsecurity"></phpsyntax>
+        <phpsyntax function="iis_setscriptmap"></phpsyntax>
+        <phpsyntax function="iis_setserverright"></phpsyntax>
+        <phpsyntax function="iis_startserver"></phpsyntax>
+        <phpsyntax function="iis_startservice"></phpsyntax>
+        <phpsyntax function="iis_stopserver"></phpsyntax>
+        <phpsyntax function="iis_stopservice"></phpsyntax>
+        <phpsyntax function="image2wbmp"></phpsyntax>
+        <phpsyntax function="imagealphablending"></phpsyntax>
+        <phpsyntax function="imagearc"></phpsyntax>
+        <phpsyntax function="imagechar"></phpsyntax>
+        <phpsyntax function="imagecharup"></phpsyntax>
+        <phpsyntax function="imagecolorallocate"></phpsyntax>
+        <phpsyntax function="imagecolorat"></phpsyntax>
+        <phpsyntax function="imagecolorclosest"></phpsyntax>
+        <phpsyntax function="imagecolorclosestalpha"></phpsyntax>
+        <phpsyntax function="imagecolorclosesthwb"></phpsyntax>
+        <phpsyntax function="imagecolordeallocate"></phpsyntax>
+        <phpsyntax function="imagecolorexact"></phpsyntax>
+        <phpsyntax function="imagecolorexactalpha"></phpsyntax>
+        <phpsyntax function="imagecolorresolve"></phpsyntax>
+        <phpsyntax function="imagecolorresolvealpha"></phpsyntax>
+        <phpsyntax function="imagecolorset"></phpsyntax>
+        <phpsyntax function="imagecolorsforindex"></phpsyntax>
+        <phpsyntax function="imagecolorstotal"></phpsyntax>
+        <phpsyntax function="imagecolortransparent"></phpsyntax>
+        <phpsyntax function="imagecopy"></phpsyntax>
+        <phpsyntax function="imagecopymerge"></phpsyntax>
+        <phpsyntax function="imagecopymergegray"></phpsyntax>
+        <phpsyntax function="imagecopyresampled"></phpsyntax>
+        <phpsyntax function="imagecopyresized"></phpsyntax>
+        <phpsyntax function="imagecreate"></phpsyntax>
+        <phpsyntax function="imagecreatefromgif"></phpsyntax>
+        <phpsyntax function="imagecreatefromjpeg"></phpsyntax>
+        <phpsyntax function="imagecreatefrompng"></phpsyntax>
+        <phpsyntax function="imagecreatefromstring"></phpsyntax>
+        <phpsyntax function="imagecreatefromwbmp"></phpsyntax>
+        <phpsyntax function="imagecreatefromxbm"></phpsyntax>
+        <phpsyntax function="imagecreatefromxpm"></phpsyntax>
+        <phpsyntax function="imagecreatetruecolor"></phpsyntax>
+        <phpsyntax function="imagedashedline"></phpsyntax>
+        <phpsyntax function="imagedestroy"></phpsyntax>
+        <phpsyntax function="imageellipse"></phpsyntax>
+        <phpsyntax function="imagefill"></phpsyntax>
+        <phpsyntax function="imagefilledarc"></phpsyntax>
+        <phpsyntax function="imagefilledellipse"></phpsyntax>
+        <phpsyntax function="imagefilledpolygon"></phpsyntax>
+        <phpsyntax function="imagefilledrectangle"></phpsyntax>
+        <phpsyntax function="imagefilltoborder"></phpsyntax>
+        <phpsyntax function="imagefontheight"></phpsyntax>
+        <phpsyntax function="imagefontwidth"></phpsyntax>
+        <phpsyntax function="imagegammacorrect"></phpsyntax>
+        <phpsyntax function="imagegif"></phpsyntax>
+        <phpsyntax function="imageinterlace"></phpsyntax>
+        <phpsyntax function="imagejpeg"></phpsyntax>
+        <phpsyntax function="imageline"></phpsyntax>
+        <phpsyntax function="imageloadfont"></phpsyntax>
+        <phpsyntax function="imagepalettecopy"></phpsyntax>
+        <phpsyntax function="imagepng"></phpsyntax>
+        <phpsyntax function="imagepolygon"></phpsyntax>
+        <phpsyntax function="imagepsbbox"></phpsyntax>
+        <phpsyntax function="imagepscopyfont"></phpsyntax>
+        <phpsyntax function="imagepsencodefont"></phpsyntax>
+        <phpsyntax function="imagepsextendfont"></phpsyntax>
+        <phpsyntax function="imagepsfreefont"></phpsyntax>
+        <phpsyntax function="imagepsloadfont"></phpsyntax>
+        <phpsyntax function="imagepsslantfont"></phpsyntax>
+        <phpsyntax function="imagepstext"></phpsyntax>
+        <phpsyntax function="imagerectangle"></phpsyntax>
+        <phpsyntax function="imagesetbrush"></phpsyntax>
+        <phpsyntax function="imagesetpixel"></phpsyntax>
+        <phpsyntax function="imagesetstyle"></phpsyntax>
+        <phpsyntax function="imagesetthickness"></phpsyntax>
+        <phpsyntax function="imagesettile"></phpsyntax>
+        <phpsyntax function="imagestring"></phpsyntax>
+        <phpsyntax function="imagestringup"></phpsyntax>
+        <phpsyntax function="imagesx"></phpsyntax>
+        <phpsyntax function="imagesy"></phpsyntax>
+        <phpsyntax function="imagetruecolortopalette"></phpsyntax>
+        <phpsyntax function="imagettfbbox"></phpsyntax>
+        <phpsyntax function="imagettftext"></phpsyntax>
+        <phpsyntax function="imagetypes"></phpsyntax>
+        <phpsyntax function="imagewbmp"></phpsyntax>
+        <phpsyntax function="imap_8bit"></phpsyntax>
+        <phpsyntax function="imap_alerts"></phpsyntax>
+        <phpsyntax function="imap_append"></phpsyntax>
+        <phpsyntax function="imap_base64"></phpsyntax>
+        <phpsyntax function="imap_binary"></phpsyntax>
+        <phpsyntax function="imap_body"></phpsyntax>
+        <phpsyntax function="imap_bodystruct"></phpsyntax>
+        <phpsyntax function="imap_check"></phpsyntax>
+        <phpsyntax function="imap_clearflag_full"></phpsyntax>
+        <phpsyntax function="imap_close"></phpsyntax>
+        <phpsyntax function="imap_create"></phpsyntax>
+        <phpsyntax function="imap_createmailbox"></phpsyntax>
+        <phpsyntax function="imap_delete"></phpsyntax>
+        <phpsyntax function="imap_deletemailbox"></phpsyntax>
+        <phpsyntax function="imap_errors"></phpsyntax>
+        <phpsyntax function="imap_expunge"></phpsyntax>
+        <phpsyntax function="imap_fetch_overview"></phpsyntax>
+        <phpsyntax function="imap_fetchbody"></phpsyntax>
+        <phpsyntax function="imap_fetchheader"></phpsyntax>
+        <phpsyntax function="imap_fetchstructure"></phpsyntax>
+        <phpsyntax function="imap_fetchtext"></phpsyntax>
+        <phpsyntax function="imap_get_quota"></phpsyntax>
+        <phpsyntax function="imap_getmailboxes"></phpsyntax>
+        <phpsyntax function="imap_getsubscribed"></phpsyntax>
+        <phpsyntax function="imap_header"></phpsyntax>
+        <phpsyntax function="imap_headerinfo"></phpsyntax>
+        <phpsyntax function="imap_headers"></phpsyntax>
+        <phpsyntax function="imap_last_error"></phpsyntax>
+        <phpsyntax function="imap_list"></phpsyntax>
+        <phpsyntax function="imap_listmailbox"></phpsyntax>
+        <phpsyntax function="imap_listsubscribed"></phpsyntax>
+        <phpsyntax function="imap_lsub"></phpsyntax>
+        <phpsyntax function="imap_mail"></phpsyntax>
+        <phpsyntax function="imap_mail"></phpsyntax>
+        <phpsyntax function="imap_mail_compose"></phpsyntax>
+        <phpsyntax function="imap_mail_copy"></phpsyntax>
+        <phpsyntax function="imap_mail_move"></phpsyntax>
+        <phpsyntax function="imap_mailboxmsginfo"></phpsyntax>
+        <phpsyntax function="imap_mime_header_decode"></phpsyntax>
+        <phpsyntax function="imap_msgno"></phpsyntax>
+        <phpsyntax function="imap_num_msg"></phpsyntax>
+        <phpsyntax function="imap_num_recent"></phpsyntax>
+        <phpsyntax function="imap_open"></phpsyntax>
+        <phpsyntax function="imap_ping"></phpsyntax>
+        <phpsyntax function="imap_popen"></phpsyntax>
+        <phpsyntax function="imap_qprint"></phpsyntax>
+        <phpsyntax function="imap_rename"></phpsyntax>
+        <phpsyntax function="imap_renamemailbox"></phpsyntax>
+        <phpsyntax function="imap_reopen"></phpsyntax>
+        <phpsyntax function="imap_rfc822_parse_adrlist"></phpsyntax>
+        <phpsyntax function="imap_rfc822_parse_headers"></phpsyntax>
+        <phpsyntax function="imap_rfc822_write_address"></phpsyntax>
+        <phpsyntax function="imap_scan"></phpsyntax>
+        <phpsyntax function="imap_scanmailbox"></phpsyntax>
+        <phpsyntax function="imap_search"></phpsyntax>
+        <phpsyntax function="imap_set_quota"></phpsyntax>
+        <phpsyntax function="imap_setflag_full"></phpsyntax>
+        <phpsyntax function="imap_sort"></phpsyntax>
+        <phpsyntax function="imap_status"></phpsyntax>
+        <phpsyntax function="imap_subscribe"></phpsyntax>
+        <phpsyntax function="imap_uid"></phpsyntax>
+        <phpsyntax function="imap_undelete"></phpsyntax>
+        <phpsyntax function="imap_unsubscribe"></phpsyntax>
+        <phpsyntax function="imap_utf7_decode"></phpsyntax>
+        <phpsyntax function="imap_utf7_encode"></phpsyntax>
+        <phpsyntax function="imap_utf8"></phpsyntax>
+        <phpsyntax function="implode"></phpsyntax>
+        <phpsyntax function="in_array"></phpsyntax>
+        <phpsyntax function="ingres_autocommit"></phpsyntax>
+        <phpsyntax function="ingres_close"></phpsyntax>
+        <phpsyntax function="ingres_commit"></phpsyntax>
+        <phpsyntax function="ingres_connect"></phpsyntax>
+        <phpsyntax function="ingres_fetch_array"></phpsyntax>
+        <phpsyntax function="ingres_fetch_object"></phpsyntax>
+        <phpsyntax function="ingres_fetch_row"></phpsyntax>
+        <phpsyntax function="ingres_field_length"></phpsyntax>
+        <phpsyntax function="ingres_field_name"></phpsyntax>
+        <phpsyntax function="ingres_field_nullable"></phpsyntax>
+        <phpsyntax function="ingres_field_precision"></phpsyntax>
+        <phpsyntax function="ingres_field_scale"></phpsyntax>
+        <phpsyntax function="ingres_field_type"></phpsyntax>
+        <phpsyntax function="ingres_num_fields"></phpsyntax>
+        <phpsyntax function="ingres_num_rows"></phpsyntax>
+        <phpsyntax function="ingres_pconnect"></phpsyntax>
+        <phpsyntax function="ingres_query"></phpsyntax>
+        <phpsyntax function="ingres_rollback"></phpsyntax>
+        <phpsyntax function="ini_alter"></phpsyntax>
+        <phpsyntax function="ini_get"></phpsyntax>
+        <phpsyntax function="ini_restore"></phpsyntax>
+        <phpsyntax function="ini_set"></phpsyntax>
+        <phpsyntax function="intval"></phpsyntax>
+        <phpsyntax function="ip2long"></phpsyntax>
+        <phpsyntax function="iptcembed"></phpsyntax>
+        <phpsyntax function="iptcparse"></phpsyntax>
+        <phpsyntax function="ircg_channel_mode"></phpsyntax>
+        <phpsyntax function="ircg_disconnect"></phpsyntax>
+        <phpsyntax function="ircg_html_encode"></phpsyntax>
+        <phpsyntax function="ircg_ignore_add"></phpsyntax>
+        <phpsyntax function="ircg_ignore_del"></phpsyntax>
+        <phpsyntax function="ircg_is_conn_alive"></phpsyntax>
+        <phpsyntax function="ircg_join"></phpsyntax>
+        <phpsyntax function="ircg_kick"></phpsyntax>
+        <phpsyntax function="ircg_lookup_format_messages"></phpsyntax>
+        <phpsyntax function="ircg_msg"></phpsyntax>
+        <phpsyntax function="ircg_nick"></phpsyntax>
+        <phpsyntax function="ircg_nickname_escape"></phpsyntax>
+        <phpsyntax function="ircg_nickname_unescape"></phpsyntax>
+        <phpsyntax function="ircg_notice"></phpsyntax>
+        <phpsyntax function="ircg_part"></phpsyntax>
+        <phpsyntax function="ircg_pconnect"></phpsyntax>
+        <phpsyntax function="ircg_register_format_messages"></phpsyntax>
+        <phpsyntax function="ircg_set_current"></phpsyntax>
+        <phpsyntax function="ircg_topic"></phpsyntax>
+        <phpsyntax function="ircg_whois"></phpsyntax>
+        <phpsyntax function="is_array"></phpsyntax>
+        <phpsyntax function="is_bool"></phpsyntax>
+        <phpsyntax function="is_dir"></phpsyntax>
+        <phpsyntax function="is_double"></phpsyntax>
+        <phpsyntax function="is_executable"></phpsyntax>
+        <phpsyntax function="is_file"></phpsyntax>
+        <phpsyntax function="is_float"></phpsyntax>
+        <phpsyntax function="is_int"></phpsyntax>
+        <phpsyntax function="is_integer"></phpsyntax>
+        <phpsyntax function="is_link"></phpsyntax>
+        <phpsyntax function="is_long"></phpsyntax>
+        <phpsyntax function="is_null"></phpsyntax>
+        <phpsyntax function="is_numeric"></phpsyntax>
+        <phpsyntax function="is_object"></phpsyntax>
+        <phpsyntax function="is_readable"></phpsyntax>
+        <phpsyntax function="is_real"></phpsyntax>
+        <phpsyntax function="is_resource"></phpsyntax>
+        <phpsyntax function="is_scalar"></phpsyntax>
+        <phpsyntax function="is_string"></phpsyntax>
+        <phpsyntax function="is_subclass_of"></phpsyntax>
+        <phpsyntax function="is_uploaded_file"></phpsyntax>
+        <phpsyntax function="is_writable"></phpsyntax>
+        <phpsyntax function="is_writeable"></phpsyntax>
+        <phpsyntax function="java_last_exception_clear"></phpsyntax>
+        <phpsyntax function="java_last_exception_get"></phpsyntax>
+        <phpsyntax function="jddayofweek"></phpsyntax>
+        <phpsyntax function="jdmonthname"></phpsyntax>
+        <phpsyntax function="jdtofrench"></phpsyntax>
+        <phpsyntax function="jdtogregorian"></phpsyntax>
+        <phpsyntax function="jdtojewish"></phpsyntax>
+        <phpsyntax function="jdtojulian"></phpsyntax>
+        <phpsyntax function="jdtounix"></phpsyntax>
+        <phpsyntax function="jewishtojd"></phpsyntax>
+        <phpsyntax function="join"></phpsyntax>
+        <phpsyntax function="jpeg2wbmp"></phpsyntax>
+        <phpsyntax function="juliantojd"></phpsyntax>
+        <phpsyntax function="key"></phpsyntax>
+        <phpsyntax function="krsort"></phpsyntax>
+        <phpsyntax function="ksort"></phpsyntax>
+        <phpsyntax function="labelframe"></phpsyntax>
+        <phpsyntax function="labelframe"></phpsyntax>
+        <phpsyntax function="lcg_value"></phpsyntax>
+        <phpsyntax function="ldap_8859_to_t61"></phpsyntax>
+        <phpsyntax function="ldap_add"></phpsyntax>
+        <phpsyntax function="ldap_bind"></phpsyntax>
+        <phpsyntax function="ldap_close"></phpsyntax>
+        <phpsyntax function="ldap_compare"></phpsyntax>
+        <phpsyntax function="ldap_connect"></phpsyntax>
+        <phpsyntax function="ldap_count_entries"></phpsyntax>
+        <phpsyntax function="ldap_delete"></phpsyntax>
+        <phpsyntax function="ldap_dn2ufn"></phpsyntax>
+        <phpsyntax function="ldap_err2str"></phpsyntax>
+        <phpsyntax function="ldap_errno"></phpsyntax>
+        <phpsyntax function="ldap_error"></phpsyntax>
+        <phpsyntax function="ldap_explode_dn"></phpsyntax>
+        <phpsyntax function="ldap_first_attribute"></phpsyntax>
+        <phpsyntax function="ldap_first_entry"></phpsyntax>
+        <phpsyntax function="ldap_first_reference"></phpsyntax>
+        <phpsyntax function="ldap_free_result"></phpsyntax>
+        <phpsyntax function="ldap_get_attributes"></phpsyntax>
+        <phpsyntax function="ldap_get_dn"></phpsyntax>
+        <phpsyntax function="ldap_get_entries"></phpsyntax>
+        <phpsyntax function="ldap_get_option"></phpsyntax>
+        <phpsyntax function="ldap_get_values"></phpsyntax>
+        <phpsyntax function="ldap_get_values_len"></phpsyntax>
+        <phpsyntax function="ldap_list"></phpsyntax>
+        <phpsyntax function="ldap_mod_add"></phpsyntax>
+        <phpsyntax function="ldap_mod_del"></phpsyntax>
+        <phpsyntax function="ldap_mod_replace"></phpsyntax>
+        <phpsyntax function="ldap_modify"></phpsyntax>
+        <phpsyntax function="ldap_next_attribute"></phpsyntax>
+        <phpsyntax function="ldap_next_entry"></phpsyntax>
+        <phpsyntax function="ldap_next_reference"></phpsyntax>
+        <phpsyntax function="ldap_parse_reference"></phpsyntax>
+        <phpsyntax function="ldap_parse_result"></phpsyntax>
+        <phpsyntax function="ldap_read"></phpsyntax>
+        <phpsyntax function="ldap_rename"></phpsyntax>
+        <phpsyntax function="ldap_search"></phpsyntax>
+        <phpsyntax function="ldap_set_option"></phpsyntax>
+        <phpsyntax function="ldap_t61_to_8859"></phpsyntax>
+        <phpsyntax function="ldap_unbind"></phpsyntax>
+        <phpsyntax function="leak"></phpsyntax>
+        <phpsyntax function="levenshtein"></phpsyntax>
+        <phpsyntax function="link"></phpsyntax>
+        <phpsyntax function="link"></phpsyntax>
+        <phpsyntax function="linkinfo"></phpsyntax>
+        <phpsyntax function="linkinfo"></phpsyntax>
+        <phpsyntax function="listen"></phpsyntax>
+        <phpsyntax function="localeconv"></phpsyntax>
+        <phpsyntax function="localtime"></phpsyntax>
+        <phpsyntax function="log"></phpsyntax>
+        <phpsyntax function="log10"></phpsyntax>
+        <phpsyntax function="long2ip"></phpsyntax>
+        <phpsyntax function="lstat"></phpsyntax>
+        <phpsyntax function="ltrim"></phpsyntax>
+        <phpsyntax function="magic_quotes_runtime"></phpsyntax>
+        <phpsyntax function="mail"></phpsyntax>
+        <phpsyntax function="mail"></phpsyntax>
+        <phpsyntax function="max"></phpsyntax>
+        <phpsyntax function="mcal_append_event"></phpsyntax>
+        <phpsyntax function="mcal_close"></phpsyntax>
+        <phpsyntax function="mcal_create_calendar"></phpsyntax>
+        <phpsyntax function="mcal_date_compare"></phpsyntax>
+        <phpsyntax function="mcal_date_valid"></phpsyntax>
+        <phpsyntax function="mcal_day_of_week"></phpsyntax>
+        <phpsyntax function="mcal_day_of_year"></phpsyntax>
+        <phpsyntax function="mcal_days_in_month"></phpsyntax>
+        <phpsyntax function="mcal_delete_calendar"></phpsyntax>
+        <phpsyntax function="mcal_delete_event"></phpsyntax>
+        <phpsyntax function="mcal_event_add_attribute"></phpsyntax>
+        <phpsyntax function="mcal_event_init"></phpsyntax>
+        <phpsyntax function="mcal_event_set_alarm"></phpsyntax>
+        <phpsyntax function="mcal_event_set_category"></phpsyntax>
+        <phpsyntax function="mcal_event_set_class"></phpsyntax>
+        <phpsyntax function="mcal_event_set_description"></phpsyntax>
+        <phpsyntax function="mcal_event_set_end"></phpsyntax>
+        <phpsyntax function="mcal_event_set_recur_daily"></phpsyntax>
+        <phpsyntax function="mcal_event_set_recur_monthly_mday"></phpsyntax>
+        <phpsyntax function="mcal_event_set_recur_monthly_wday"></phpsyntax>
+        <phpsyntax function="mcal_event_set_recur_none"></phpsyntax>
+        <phpsyntax function="mcal_event_set_recur_weekly"></phpsyntax>
+        <phpsyntax function="mcal_event_set_recur_yearly"></phpsyntax>
+        <phpsyntax function="mcal_event_set_start"></phpsyntax>
+        <phpsyntax function="mcal_event_set_title"></phpsyntax>
+        <phpsyntax function="mcal_fetch_current_stream_event"></phpsyntax>
+        <phpsyntax function="mcal_fetch_event"></phpsyntax>
+        <phpsyntax function="mcal_is_leap_year"></phpsyntax>
+        <phpsyntax function="mcal_list_alarms"></phpsyntax>
+        <phpsyntax function="mcal_list_events"></phpsyntax>
+        <phpsyntax function="mcal_next_recurrence"></phpsyntax>
+        <phpsyntax function="mcal_open"></phpsyntax>
+        <phpsyntax function="mcal_popen"></phpsyntax>
+        <phpsyntax function="mcal_rename_calendar"></phpsyntax>
+        <phpsyntax function="mcal_reopen"></phpsyntax>
+        <phpsyntax function="mcal_snooze"></phpsyntax>
+        <phpsyntax function="mcal_store_event"></phpsyntax>
+        <phpsyntax function="mcal_time_valid"></phpsyntax>
+        <phpsyntax function="mcal_week_of_year"></phpsyntax>
+        <phpsyntax function="mcrypt_cbc"></phpsyntax>
+        <phpsyntax function="mcrypt_cfb"></phpsyntax>
+        <phpsyntax function="mcrypt_create_iv"></phpsyntax>
+        <phpsyntax function="mcrypt_decrypt"></phpsyntax>
+        <phpsyntax function="mcrypt_ecb"></phpsyntax>
+        <phpsyntax function="mcrypt_enc_get_algorithms_name"></phpsyntax>
+        <phpsyntax function="mcrypt_enc_get_block_size"></phpsyntax>
+        <phpsyntax function="mcrypt_enc_get_iv_size"></phpsyntax>
+        <phpsyntax function="mcrypt_enc_get_key_size"></phpsyntax>
+        <phpsyntax function="mcrypt_enc_get_modes_name"></phpsyntax>
+        <phpsyntax function="mcrypt_enc_get_supported_key_sizes"></phpsyntax>
+        <phpsyntax function="mcrypt_enc_is_block_algorithm"></phpsyntax>
+        <phpsyntax function="mcrypt_enc_is_block_algorithm_mode"></phpsyntax>
+        <phpsyntax function="mcrypt_enc_is_block_mode"></phpsyntax>
+        <phpsyntax function="mcrypt_enc_self_test"></phpsyntax>
+        <phpsyntax function="mcrypt_encrypt"></phpsyntax>
+        <phpsyntax function="mcrypt_generic"></phpsyntax>
+        <phpsyntax function="mcrypt_generic_end"></phpsyntax>
+        <phpsyntax function="mcrypt_generic_init"></phpsyntax>
+        <phpsyntax function="mcrypt_get_block_size"></phpsyntax>
+        <phpsyntax function="mcrypt_get_cipher_name"></phpsyntax>
+        <phpsyntax function="mcrypt_get_iv_size"></phpsyntax>
+        <phpsyntax function="mcrypt_get_key_size"></phpsyntax>
+        <phpsyntax function="mcrypt_list_algorithms"></phpsyntax>
+        <phpsyntax function="mcrypt_list_modes"></phpsyntax>
+        <phpsyntax function="mcrypt_module_close"></phpsyntax>
+        <phpsyntax function="mcrypt_module_get_algo_block_size"></phpsyntax>
+        <phpsyntax function="mcrypt_module_get_algo_key_size"></phpsyntax>
+        <phpsyntax function="mcrypt_module_get_supported_key_sizes"></phpsyntax>
+        <phpsyntax function="mcrypt_module_is_block_algorithm"></phpsyntax>
+        <phpsyntax function="mcrypt_module_is_block_algorithm_mode"></phpsyntax>
+        <phpsyntax function="mcrypt_module_is_block_mode"></phpsyntax>
+        <phpsyntax function="mcrypt_module_open"></phpsyntax>
+        <phpsyntax function="mcrypt_module_self_test"></phpsyntax>
+        <phpsyntax function="mcrypt_ofb"></phpsyntax>
+        <phpsyntax function="md5"></phpsyntax>
+        <phpsyntax function="mdecrypt_generic"></phpsyntax>
+        <phpsyntax function="metaphone"></phpsyntax>
+        <phpsyntax function="method_exists"></phpsyntax>
+        <phpsyntax function="mhash"></phpsyntax>
+        <phpsyntax function="mhash_count"></phpsyntax>
+        <phpsyntax function="mhash_get_block_size"></phpsyntax>
+        <phpsyntax function="mhash_get_hash_name"></phpsyntax>
+        <phpsyntax function="mhash_keygen_s2k"></phpsyntax>
+        <phpsyntax function="microtime"></phpsyntax>
+        <phpsyntax function="min"></phpsyntax>
+        <phpsyntax function="ming_setcubicthreshold"></phpsyntax>
+        <phpsyntax function="ming_setscale"></phpsyntax>
+        <phpsyntax function="mkdir"></phpsyntax>
+        <phpsyntax function="mktime"></phpsyntax>
+        <phpsyntax function="move"></phpsyntax>
+        <phpsyntax function="move_uploaded_file"></phpsyntax>
+        <phpsyntax function="movepen"></phpsyntax>
+        <phpsyntax function="movepento"></phpsyntax>
+        <phpsyntax function="moveto"></phpsyntax>
+        <phpsyntax function="moveto"></phpsyntax>
+        <phpsyntax function="moveto"></phpsyntax>
+        <phpsyntax function="msql"></phpsyntax>
+        <phpsyntax function="msql_affected_rows"></phpsyntax>
+        <phpsyntax function="msql_close"></phpsyntax>
+        <phpsyntax function="msql_connect"></phpsyntax>
+        <phpsyntax function="msql_create_db"></phpsyntax>
+        <phpsyntax function="msql_createdb"></phpsyntax>
+        <phpsyntax function="msql_data_seek"></phpsyntax>
+        <phpsyntax function="msql_db_query"></phpsyntax>
+        <phpsyntax function="msql_dbname"></phpsyntax>
+        <phpsyntax function="msql_drop_db"></phpsyntax>
+        <phpsyntax function="msql_dropdb"></phpsyntax>
+        <phpsyntax function="msql_error"></phpsyntax>
+        <phpsyntax function="msql_fetch_array"></phpsyntax>
+        <phpsyntax function="msql_fetch_field"></phpsyntax>
+        <phpsyntax function="msql_fetch_object"></phpsyntax>
+        <phpsyntax function="msql_fetch_row"></phpsyntax>
+        <phpsyntax function="msql_field_flags"></phpsyntax>
+        <phpsyntax function="msql_field_len"></phpsyntax>
+        <phpsyntax function="msql_field_name"></phpsyntax>
+        <phpsyntax function="msql_field_seek"></phpsyntax>
+        <phpsyntax function="msql_field_table"></phpsyntax>
+        <phpsyntax function="msql_field_type"></phpsyntax>
+        <phpsyntax function="msql_fieldflags"></phpsyntax>
+        <phpsyntax function="msql_fieldlen"></phpsyntax>
+        <phpsyntax function="msql_fieldname"></phpsyntax>
+        <phpsyntax function="msql_fieldtable"></phpsyntax>
+        <phpsyntax function="msql_fieldtype"></phpsyntax>
+        <phpsyntax function="msql_free_result"></phpsyntax>
+        <phpsyntax function="msql_freeresult"></phpsyntax>
+        <phpsyntax function="msql_list_dbs"></phpsyntax>
+        <phpsyntax function="msql_list_fields"></phpsyntax>
+        <phpsyntax function="msql_list_tables"></phpsyntax>
+        <phpsyntax function="msql_listdbs"></phpsyntax>
+        <phpsyntax function="msql_listfields"></phpsyntax>
+        <phpsyntax function="msql_listtables"></phpsyntax>
+        <phpsyntax function="msql_num_fields"></phpsyntax>
+        <phpsyntax function="msql_num_rows"></phpsyntax>
+        <phpsyntax function="msql_numfields"></phpsyntax>
+        <phpsyntax function="msql_numrows"></phpsyntax>
+        <phpsyntax function="msql_pconnect"></phpsyntax>
+        <phpsyntax function="msql_query"></phpsyntax>
+        <phpsyntax function="msql_regcase"></phpsyntax>
+        <phpsyntax function="msql_result"></phpsyntax>
+        <phpsyntax function="msql_select_db"></phpsyntax>
+        <phpsyntax function="msql_selectdb"></phpsyntax>
+        <phpsyntax function="msql_tablename"></phpsyntax>
+        <phpsyntax function="mssql_affected_rows"></phpsyntax>
+        <phpsyntax function="mssql_affected_rows"></phpsyntax>
+        <phpsyntax function="mssql_close"></phpsyntax>
+        <phpsyntax function="mssql_close"></phpsyntax>
+        <phpsyntax function="mssql_close"></phpsyntax>
+        <phpsyntax function="mssql_connect"></phpsyntax>
+        <phpsyntax function="mssql_connect"></phpsyntax>
+        <phpsyntax function="mssql_connect"></phpsyntax>
+        <phpsyntax function="mssql_data_seek"></phpsyntax>
+        <phpsyntax function="mssql_data_seek"></phpsyntax>
+        <phpsyntax function="mssql_data_seek"></phpsyntax>
+        <phpsyntax function="mssql_fetch_array"></phpsyntax>
+        <phpsyntax function="mssql_fetch_array"></phpsyntax>
+        <phpsyntax function="mssql_fetch_array"></phpsyntax>
+        <phpsyntax function="mssql_fetch_batch"></phpsyntax>
+        <phpsyntax function="mssql_fetch_field"></phpsyntax>
+        <phpsyntax function="mssql_fetch_field"></phpsyntax>
+        <phpsyntax function="mssql_fetch_field"></phpsyntax>
+        <phpsyntax function="mssql_fetch_object"></phpsyntax>
+        <phpsyntax function="mssql_fetch_object"></phpsyntax>
+        <phpsyntax function="mssql_fetch_object"></phpsyntax>
+        <phpsyntax function="mssql_fetch_row"></phpsyntax>
+        <phpsyntax function="mssql_fetch_row"></phpsyntax>
+        <phpsyntax function="mssql_fetch_row"></phpsyntax>
+        <phpsyntax function="mssql_field_length"></phpsyntax>
+        <phpsyntax function="mssql_field_name"></phpsyntax>
+        <phpsyntax function="mssql_field_seek"></phpsyntax>
+        <phpsyntax function="mssql_field_seek"></phpsyntax>
+        <phpsyntax function="mssql_field_seek"></phpsyntax>
+        <phpsyntax function="mssql_field_type"></phpsyntax>
+        <phpsyntax function="mssql_free_result"></phpsyntax>
+        <phpsyntax function="mssql_free_result"></phpsyntax>
+        <phpsyntax function="mssql_free_result"></phpsyntax>
+        <phpsyntax function="mssql_get_last_message"></phpsyntax>
+        <phpsyntax function="mssql_get_last_message"></phpsyntax>
+        <phpsyntax function="mssql_get_last_message"></phpsyntax>
+        <phpsyntax function="mssql_min_client_severity"></phpsyntax>
+        <phpsyntax function="mssql_min_error_severity"></phpsyntax>
+        <phpsyntax function="mssql_min_error_severity"></phpsyntax>
+        <phpsyntax function="mssql_min_message_severity"></phpsyntax>
+        <phpsyntax function="mssql_min_message_severity"></phpsyntax>
+        <phpsyntax function="mssql_min_server_severity"></phpsyntax>
+        <phpsyntax function="mssql_next_result"></phpsyntax>
+        <phpsyntax function="mssql_num_fields"></phpsyntax>
+        <phpsyntax function="mssql_num_fields"></phpsyntax>
+        <phpsyntax function="mssql_num_fields"></phpsyntax>
+        <phpsyntax function="mssql_num_rows"></phpsyntax>
+        <phpsyntax function="mssql_num_rows"></phpsyntax>
+        <phpsyntax function="mssql_num_rows"></phpsyntax>
+        <phpsyntax function="mssql_pconnect"></phpsyntax>
+        <phpsyntax function="mssql_pconnect"></phpsyntax>
+        <phpsyntax function="mssql_pconnect"></phpsyntax>
+        <phpsyntax function="mssql_query"></phpsyntax>
+        <phpsyntax function="mssql_query"></phpsyntax>
+        <phpsyntax function="mssql_query"></phpsyntax>
+        <phpsyntax function="mssql_result"></phpsyntax>
+        <phpsyntax function="mssql_result"></phpsyntax>
+        <phpsyntax function="mssql_result"></phpsyntax>
+        <phpsyntax function="mssql_rows_affected"></phpsyntax>
+        <phpsyntax function="mssql_select_db"></phpsyntax>
+        <phpsyntax function="mssql_select_db"></phpsyntax>
+        <phpsyntax function="mssql_select_db"></phpsyntax>
+        <phpsyntax function="mt_getrandmax"></phpsyntax>
+        <phpsyntax function="mt_rand"></phpsyntax>
+        <phpsyntax function="mt_srand"></phpsyntax>
+        <phpsyntax function="multcolor"></phpsyntax>
+        <phpsyntax function="muscat_close"></phpsyntax>
+        <phpsyntax function="muscat_get"></phpsyntax>
+        <phpsyntax function="muscat_give"></phpsyntax>
+        <phpsyntax function="muscat_setup"></phpsyntax>
+        <phpsyntax function="muscat_setup_net"></phpsyntax>
+        <phpsyntax function="mysql"></phpsyntax>
+        <phpsyntax function="mysql_affected_rows"></phpsyntax>
+        <phpsyntax function="mysql_close"></phpsyntax>
+        <phpsyntax function="mysql_connect"></phpsyntax>
+        <phpsyntax function="mysql_create_db"></phpsyntax>
+        <phpsyntax function="mysql_createdb"></phpsyntax>
+        <phpsyntax function="mysql_data_seek"></phpsyntax>
+        <phpsyntax function="mysql_db_name"></phpsyntax>
+        <phpsyntax function="mysql_db_query"></phpsyntax>
+        <phpsyntax function="mysql_dbname"></phpsyntax>
+        <phpsyntax function="mysql_drop_db"></phpsyntax>
+        <phpsyntax function="mysql_dropdb"></phpsyntax>
+        <phpsyntax function="mysql_errno"></phpsyntax>
+        <phpsyntax function="mysql_error"></phpsyntax>
+        <phpsyntax function="mysql_escape_string"></phpsyntax>
+        <phpsyntax function="mysql_fetch_array"></phpsyntax>
+        <phpsyntax function="mysql_fetch_assoc"></phpsyntax>
+        <phpsyntax function="mysql_fetch_field"></phpsyntax>
+        <phpsyntax function="mysql_fetch_lengths"></phpsyntax>
+        <phpsyntax function="mysql_fetch_object"></phpsyntax>
+        <phpsyntax function="mysql_fetch_row"></phpsyntax>
+        <phpsyntax function="mysql_field_flags"></phpsyntax>
+        <phpsyntax function="mysql_field_len"></phpsyntax>
+        <phpsyntax function="mysql_field_name"></phpsyntax>
+        <phpsyntax function="mysql_field_seek"></phpsyntax>
+        <phpsyntax function="mysql_field_table"></phpsyntax>
+        <phpsyntax function="mysql_field_type"></phpsyntax>
+        <phpsyntax function="mysql_fieldflags"></phpsyntax>
+        <phpsyntax function="mysql_fieldlen"></phpsyntax>
+        <phpsyntax function="mysql_fieldname"></phpsyntax>
+        <phpsyntax function="mysql_fieldtable"></phpsyntax>
+        <phpsyntax function="mysql_fieldtype"></phpsyntax>
+        <phpsyntax function="mysql_free_result"></phpsyntax>
+        <phpsyntax function="mysql_freeresult"></phpsyntax>
+        <phpsyntax function="mysql_get_client_info"></phpsyntax>
+        <phpsyntax function="mysql_get_host_info"></phpsyntax>
+        <phpsyntax function="mysql_get_proto_info"></phpsyntax>
+        <phpsyntax function="mysql_get_server_info"></phpsyntax>
+        <phpsyntax function="mysql_insert_id"></phpsyntax>
+        <phpsyntax function="mysql_list_dbs"></phpsyntax>
+        <phpsyntax function="mysql_list_fields"></phpsyntax>
+        <phpsyntax function="mysql_list_tables"></phpsyntax>
+        <phpsyntax function="mysql_listdbs"></phpsyntax>
+        <phpsyntax function="mysql_listfields"></phpsyntax>
+        <phpsyntax function="mysql_listtables"></phpsyntax>
+        <phpsyntax function="mysql_num_fields"></phpsyntax>
+        <phpsyntax function="mysql_num_rows"></phpsyntax>
+        <phpsyntax function="mysql_numfields"></phpsyntax>
+        <phpsyntax function="mysql_numrows"></phpsyntax>
+        <phpsyntax function="mysql_pconnect"></phpsyntax>
+        <phpsyntax function="mysql_query"></phpsyntax>
+        <phpsyntax function="mysql_result"></phpsyntax>
+        <phpsyntax function="mysql_select_db"></phpsyntax>
+        <phpsyntax function="mysql_selectdb"></phpsyntax>
+        <phpsyntax function="mysql_tablename"></phpsyntax>
+        <phpsyntax function="mysql_unbuffered_query"></phpsyntax>
+        <phpsyntax function="natcasesort"></phpsyntax>
+        <phpsyntax function="natsort"></phpsyntax>
+        <phpsyntax function="new_xmldoc"></phpsyntax>
+        <phpsyntax function="next"></phpsyntax>
+        <phpsyntax function="nextframe"></phpsyntax>
+        <phpsyntax function="nextframe"></phpsyntax>
+        <phpsyntax function="nl2br"></phpsyntax>
+        <phpsyntax function="notes_body"></phpsyntax>
+        <phpsyntax function="notes_copy_db"></phpsyntax>
+        <phpsyntax function="notes_create_db"></phpsyntax>
+        <phpsyntax function="notes_create_note"></phpsyntax>
+        <phpsyntax function="notes_drop_db"></phpsyntax>
+        <phpsyntax function="notes_find_note"></phpsyntax>
+        <phpsyntax function="notes_header_info"></phpsyntax>
+        <phpsyntax function="notes_list_msgs"></phpsyntax>
+        <phpsyntax function="notes_mark_read"></phpsyntax>
+        <phpsyntax function="notes_mark_unread"></phpsyntax>
+        <phpsyntax function="notes_nav_create"></phpsyntax>
+        <phpsyntax function="notes_search"></phpsyntax>
+        <phpsyntax function="notes_unread"></phpsyntax>
+        <phpsyntax function="notes_version"></phpsyntax>
+        <phpsyntax function="number_format"></phpsyntax>
+        <phpsyntax function="ob_end_clean"></phpsyntax>
+        <phpsyntax function="ob_end_flush"></phpsyntax>
+        <phpsyntax function="ob_get_contents"></phpsyntax>
+        <phpsyntax function="ob_get_length"></phpsyntax>
+        <phpsyntax function="ob_gzhandler"></phpsyntax>
+        <phpsyntax function="ob_iconv_handler"></phpsyntax>
+        <phpsyntax function="ob_implicit_flush"></phpsyntax>
+        <phpsyntax function="ob_start"></phpsyntax>
+        <phpsyntax function="ocibindbyname"></phpsyntax>
+        <phpsyntax function="ocicancel"></phpsyntax>
+        <phpsyntax function="ocicollappend"></phpsyntax>
+        <phpsyntax function="ocicollassign"></phpsyntax>
+        <phpsyntax function="ocicollassignelem"></phpsyntax>
+        <phpsyntax function="ocicolldateappendelem"></phpsyntax>
+        <phpsyntax function="ocicolldateassignelem"></phpsyntax>
+        <phpsyntax function="ocicolldategetelem"></phpsyntax>
+        <phpsyntax function="ocicollgetelem"></phpsyntax>
+        <phpsyntax function="ocicollmax"></phpsyntax>
+        <phpsyntax function="ocicollsize"></phpsyntax>
+        <phpsyntax function="ocicolltrim"></phpsyntax>
+        <phpsyntax function="ocicolumnisnull"></phpsyntax>
+        <phpsyntax function="ocicolumnname"></phpsyntax>
+        <phpsyntax function="ocicolumnprecision"></phpsyntax>
+        <phpsyntax function="ocicolumnscale"></phpsyntax>
+        <phpsyntax function="ocicolumnsize"></phpsyntax>
+        <phpsyntax function="ocicolumntype"></phpsyntax>
+        <phpsyntax function="ocicolumntyperaw"></phpsyntax>
+        <phpsyntax function="ocicommit"></phpsyntax>
+        <phpsyntax function="ocidefinebyname"></phpsyntax>
+        <phpsyntax function="ocierror"></phpsyntax>
+        <phpsyntax function="ociexecute"></phpsyntax>
+        <phpsyntax function="ocifetch"></phpsyntax>
+        <phpsyntax function="ocifetchinto"></phpsyntax>
+        <phpsyntax function="ocifetchstatement"></phpsyntax>
+        <phpsyntax function="ocifreecoll"></phpsyntax>
+        <phpsyntax function="ocifreecursor"></phpsyntax>
+        <phpsyntax function="ocifreedesc"></phpsyntax>
+        <phpsyntax function="ocifreestatement"></phpsyntax>
+        <phpsyntax function="ociinternaldebug"></phpsyntax>
+        <phpsyntax function="ociloadlob"></phpsyntax>
+        <phpsyntax function="ocilogoff"></phpsyntax>
+        <phpsyntax function="ocilogon"></phpsyntax>
+        <phpsyntax function="ocinewcollection"></phpsyntax>
+        <phpsyntax function="ocinewcursor"></phpsyntax>
+        <phpsyntax function="ocinewdescriptor"></phpsyntax>
+        <phpsyntax function="ocinlogon"></phpsyntax>
+        <phpsyntax function="ocinumcols"></phpsyntax>
+        <phpsyntax function="ociparse"></phpsyntax>
+        <phpsyntax function="ociplogon"></phpsyntax>
+        <phpsyntax function="ociresult"></phpsyntax>
+        <phpsyntax function="ocirollback"></phpsyntax>
+        <phpsyntax function="ocirowcount"></phpsyntax>
+        <phpsyntax function="ocisavelob"></phpsyntax>
+        <phpsyntax function="ocisavelobfile"></phpsyntax>
+        <phpsyntax function="ociserverversion"></phpsyntax>
+        <phpsyntax function="ocisetprefetch"></phpsyntax>
+        <phpsyntax function="ocistatementtype"></phpsyntax>
+        <phpsyntax function="ociwritelobtofile"></phpsyntax>
+        <phpsyntax function="octdec"></phpsyntax>
+        <phpsyntax function="odbc_autocommit"></phpsyntax>
+        <phpsyntax function="odbc_binmode"></phpsyntax>
+        <phpsyntax function="odbc_close"></phpsyntax>
+        <phpsyntax function="odbc_close_all"></phpsyntax>
+        <phpsyntax function="odbc_columnprivileges"></phpsyntax>
+        <phpsyntax function="odbc_columns"></phpsyntax>
+        <phpsyntax function="odbc_commit"></phpsyntax>
+        <phpsyntax function="odbc_connect"></phpsyntax>
+        <phpsyntax function="odbc_cursor"></phpsyntax>
+        <phpsyntax function="odbc_do"></phpsyntax>
+        <phpsyntax function="odbc_error"></phpsyntax>
+        <phpsyntax function="odbc_errormsg"></phpsyntax>
+        <phpsyntax function="odbc_exec"></phpsyntax>
+        <phpsyntax function="odbc_execute"></phpsyntax>
+        <phpsyntax function="odbc_fetch_array"></phpsyntax>
+        <phpsyntax function="odbc_fetch_into"></phpsyntax>
+        <phpsyntax function="odbc_fetch_object"></phpsyntax>
+        <phpsyntax function="odbc_fetch_row"></phpsyntax>
+        <phpsyntax function="odbc_field_len"></phpsyntax>
+        <phpsyntax function="odbc_field_name"></phpsyntax>
+        <phpsyntax function="odbc_field_num"></phpsyntax>
+        <phpsyntax function="odbc_field_precision"></phpsyntax>
+        <phpsyntax function="odbc_field_scale"></phpsyntax>
+        <phpsyntax function="odbc_field_type"></phpsyntax>
+        <phpsyntax function="odbc_foreignkeys"></phpsyntax>
+        <phpsyntax function="odbc_free_result"></phpsyntax>
+        <phpsyntax function="odbc_gettypeinfo"></phpsyntax>
+        <phpsyntax function="odbc_longreadlen"></phpsyntax>
+        <phpsyntax function="odbc_next_result"></phpsyntax>
+        <phpsyntax function="odbc_num_fields"></phpsyntax>
+        <phpsyntax function="odbc_num_rows"></phpsyntax>
+        <phpsyntax function="odbc_pconnect"></phpsyntax>
+        <phpsyntax function="odbc_prepare"></phpsyntax>
+        <phpsyntax function="odbc_primarykeys"></phpsyntax>
+        <phpsyntax function="odbc_procedurecolumns"></phpsyntax>
+        <phpsyntax function="odbc_procedures"></phpsyntax>
+        <phpsyntax function="odbc_result"></phpsyntax>
+        <phpsyntax function="odbc_result_all"></phpsyntax>
+        <phpsyntax function="odbc_rollback"></phpsyntax>
+        <phpsyntax function="odbc_setoption"></phpsyntax>
+        <phpsyntax function="odbc_specialcolumns"></phpsyntax>
+        <phpsyntax function="odbc_statistics"></phpsyntax>
+        <phpsyntax function="odbc_tableprivileges"></phpsyntax>
+        <phpsyntax function="odbc_tables"></phpsyntax>
+        <phpsyntax function="open_listen_sock"></phpsyntax>
+        <phpsyntax function="opendir"></phpsyntax>
+        <phpsyntax function="openlog"></phpsyntax>
+        <phpsyntax function="openssl_error_string"></phpsyntax>
+        <phpsyntax function="openssl_free_key"></phpsyntax>
+        <phpsyntax function="openssl_get_privatekey"></phpsyntax>
+        <phpsyntax function="openssl_get_publickey"></phpsyntax>
+        <phpsyntax function="openssl_open"></phpsyntax>
+        <phpsyntax function="openssl_pkcs7_decrypt"></phpsyntax>
+        <phpsyntax function="openssl_pkcs7_encrypt"></phpsyntax>
+        <phpsyntax function="openssl_pkcs7_sign"></phpsyntax>
+        <phpsyntax function="openssl_pkcs7_verify"></phpsyntax>
+        <phpsyntax function="openssl_seal"></phpsyntax>
+        <phpsyntax function="openssl_sign"></phpsyntax>
+        <phpsyntax function="openssl_verify"></phpsyntax>
+        <phpsyntax function="openssl_x509_checkpurpose"></phpsyntax>
+        <phpsyntax function="openssl_x509_free"></phpsyntax>
+        <phpsyntax function="openssl_x509_parse"></phpsyntax>
+        <phpsyntax function="openssl_x509_read"></phpsyntax>
+        <phpsyntax function="ora_bind"></phpsyntax>
+        <phpsyntax function="ora_close"></phpsyntax>
+        <phpsyntax function="ora_columnname"></phpsyntax>
+        <phpsyntax function="ora_columnsize"></phpsyntax>
+        <phpsyntax function="ora_columntype"></phpsyntax>
+        <phpsyntax function="ora_commit"></phpsyntax>
+        <phpsyntax function="ora_commitoff"></phpsyntax>
+        <phpsyntax function="ora_commiton"></phpsyntax>
+        <phpsyntax function="ora_do"></phpsyntax>
+        <phpsyntax function="ora_error"></phpsyntax>
+        <phpsyntax function="ora_errorcode"></phpsyntax>
+        <phpsyntax function="ora_exec"></phpsyntax>
+        <phpsyntax function="ora_fetch"></phpsyntax>
+        <phpsyntax function="ora_fetch_into"></phpsyntax>
+        <phpsyntax function="ora_getcolumn"></phpsyntax>
+        <phpsyntax function="ora_logoff"></phpsyntax>
+        <phpsyntax function="ora_logon"></phpsyntax>
+        <phpsyntax function="ora_numcols"></phpsyntax>
+        <phpsyntax function="ora_numrows"></phpsyntax>
+        <phpsyntax function="ora_open"></phpsyntax>
+        <phpsyntax function="ora_parse"></phpsyntax>
+        <phpsyntax function="ora_plogon"></phpsyntax>
+        <phpsyntax function="ora_rollback"></phpsyntax>
+        <phpsyntax function="orbit_caught_exception"></phpsyntax>
+        <phpsyntax function="orbit_exception_id"></phpsyntax>
+        <phpsyntax function="orbit_exception_value"></phpsyntax>
+        <phpsyntax function="orbit_get_repository_id"></phpsyntax>
+        <phpsyntax function="orbit_load_idl"></phpsyntax>
+        <phpsyntax function="ord"></phpsyntax>
+        <phpsyntax function="output"></phpsyntax>
+        <phpsyntax function="ovrimos_close"></phpsyntax>
+        <phpsyntax function="ovrimos_close_all"></phpsyntax>
+        <phpsyntax function="ovrimos_commit"></phpsyntax>
+        <phpsyntax function="ovrimos_connect"></phpsyntax>
+        <phpsyntax function="ovrimos_cursor"></phpsyntax>
+        <phpsyntax function="ovrimos_exec"></phpsyntax>
+        <phpsyntax function="ovrimos_execute"></phpsyntax>
+        <phpsyntax function="ovrimos_fetch_into"></phpsyntax>
+        <phpsyntax function="ovrimos_fetch_row"></phpsyntax>
+        <phpsyntax function="ovrimos_field_len"></phpsyntax>
+        <phpsyntax function="ovrimos_field_name"></phpsyntax>
+        <phpsyntax function="ovrimos_field_num"></phpsyntax>
+        <phpsyntax function="ovrimos_field_type"></phpsyntax>
+        <phpsyntax function="ovrimos_free_result"></phpsyntax>
+        <phpsyntax function="ovrimos_longreadlen"></phpsyntax>
+        <phpsyntax function="ovrimos_num_fields"></phpsyntax>
+        <phpsyntax function="ovrimos_num_rows"></phpsyntax>
+        <phpsyntax function="ovrimos_prepare"></phpsyntax>
+        <phpsyntax function="ovrimos_result"></phpsyntax>
+        <phpsyntax function="ovrimos_result_all"></phpsyntax>
+        <phpsyntax function="ovrimos_rollback"></phpsyntax>
+        <phpsyntax function="pack"></phpsyntax>
+        <phpsyntax function="parse_ini_file"></phpsyntax>
+        <phpsyntax function="parse_str"></phpsyntax>
+        <phpsyntax function="parse_url"></phpsyntax>
+        <phpsyntax function="passthru"></phpsyntax>
+        <phpsyntax function="pathinfo"></phpsyntax>
+        <phpsyntax function="pclose"></phpsyntax>
+        <phpsyntax function="pdf_add_annotation"></phpsyntax>
+        <phpsyntax function="pdf_add_bookmark"></phpsyntax>
+        <phpsyntax function="pdf_add_launchlink"></phpsyntax>
+        <phpsyntax function="pdf_add_locallink"></phpsyntax>
+        <phpsyntax function="pdf_add_note"></phpsyntax>
+        <phpsyntax function="pdf_add_outline"></phpsyntax>
+        <phpsyntax function="pdf_add_pdflink"></phpsyntax>
+        <phpsyntax function="pdf_add_thumbnail"></phpsyntax>
+        <phpsyntax function="pdf_add_weblink"></phpsyntax>
+        <phpsyntax function="pdf_arc"></phpsyntax>
+        <phpsyntax function="pdf_arcn"></phpsyntax>
+        <phpsyntax function="pdf_attach_file"></phpsyntax>
+        <phpsyntax function="pdf_begin_page"></phpsyntax>
+        <phpsyntax function="pdf_begin_pattern"></phpsyntax>
+        <phpsyntax function="pdf_begin_template"></phpsyntax>
+        <phpsyntax function="pdf_circle"></phpsyntax>
+        <phpsyntax function="pdf_clip"></phpsyntax>
+        <phpsyntax function="pdf_close"></phpsyntax>
+        <phpsyntax function="pdf_close_image"></phpsyntax>
+        <phpsyntax function="pdf_close_pdi"></phpsyntax>
+        <phpsyntax function="pdf_close_pdi_page"></phpsyntax>
+        <phpsyntax function="pdf_closepath"></phpsyntax>
+        <phpsyntax function="pdf_closepath_fill_stroke"></phpsyntax>
+        <phpsyntax function="pdf_closepath_stroke"></phpsyntax>
+        <phpsyntax function="pdf_concat"></phpsyntax>
+        <phpsyntax function="pdf_continue_text"></phpsyntax>
+        <phpsyntax function="pdf_curveto"></phpsyntax>
+        <phpsyntax function="pdf_delete"></phpsyntax>
+        <phpsyntax function="pdf_end_page"></phpsyntax>
+        <phpsyntax function="pdf_end_pattern"></phpsyntax>
+        <phpsyntax function="pdf_end_template"></phpsyntax>
+        <phpsyntax function="pdf_endpath"></phpsyntax>
+        <phpsyntax function="pdf_fill"></phpsyntax>
+        <phpsyntax function="pdf_fill_stroke"></phpsyntax>
+        <phpsyntax function="pdf_findfont"></phpsyntax>
+        <phpsyntax function="pdf_get_buffer"></phpsyntax>
+        <phpsyntax function="pdf_get_font"></phpsyntax>
+        <phpsyntax function="pdf_get_fontname"></phpsyntax>
+        <phpsyntax function="pdf_get_fontsize"></phpsyntax>
+        <phpsyntax function="pdf_get_image_height"></phpsyntax>
+        <phpsyntax function="pdf_get_image_width"></phpsyntax>
+        <phpsyntax function="pdf_get_parameter"></phpsyntax>
+        <phpsyntax function="pdf_get_pdi_parameter"></phpsyntax>
+        <phpsyntax function="pdf_get_pdi_value"></phpsyntax>
+        <phpsyntax function="pdf_get_value"></phpsyntax>
+        <phpsyntax function="pdf_initgraphics"></phpsyntax>
+        <phpsyntax function="pdf_lineto"></phpsyntax>
+        <phpsyntax function="pdf_makespotcolor"></phpsyntax>
+        <phpsyntax function="pdf_moveto"></phpsyntax>
+        <phpsyntax function="pdf_new"></phpsyntax>
+        <phpsyntax function="pdf_open"></phpsyntax>
+        <phpsyntax function="pdf_open_ccitt"></phpsyntax>
+        <phpsyntax function="pdf_open_file"></phpsyntax>
+        <phpsyntax function="pdf_open_gif"></phpsyntax>
+        <phpsyntax function="pdf_open_image"></phpsyntax>
+        <phpsyntax function="pdf_open_image_file"></phpsyntax>
+        <phpsyntax function="pdf_open_jpeg"></phpsyntax>
+        <phpsyntax function="pdf_open_memory_image"></phpsyntax>
+        <phpsyntax function="pdf_open_pdi"></phpsyntax>
+        <phpsyntax function="pdf_open_pdi_page"></phpsyntax>
+        <phpsyntax function="pdf_open_png"></phpsyntax>
+        <phpsyntax function="pdf_open_tiff"></phpsyntax>
+        <phpsyntax function="pdf_place_image"></phpsyntax>
+        <phpsyntax function="pdf_place_pdi_page"></phpsyntax>
+        <phpsyntax function="pdf_rect"></phpsyntax>
+        <phpsyntax function="pdf_restore"></phpsyntax>
+        <phpsyntax function="pdf_rotate"></phpsyntax>
+        <phpsyntax function="pdf_save"></phpsyntax>
+        <phpsyntax function="pdf_scale"></phpsyntax>
+        <phpsyntax function="pdf_set_border_color"></phpsyntax>
+        <phpsyntax function="pdf_set_border_dash"></phpsyntax>
+        <phpsyntax function="pdf_set_border_style"></phpsyntax>
+        <phpsyntax function="pdf_set_char_spacing"></phpsyntax>
+        <phpsyntax function="pdf_set_duration"></phpsyntax>
+        <phpsyntax function="pdf_set_font"></phpsyntax>
+        <phpsyntax function="pdf_set_horiz_scaling"></phpsyntax>
+        <phpsyntax function="pdf_set_info"></phpsyntax>
+        <phpsyntax function="pdf_set_info_author"></phpsyntax>
+        <phpsyntax function="pdf_set_info_creator"></phpsyntax>
+        <phpsyntax function="pdf_set_info_keywords"></phpsyntax>
+        <phpsyntax function="pdf_set_info_subject"></phpsyntax>
+        <phpsyntax function="pdf_set_info_title"></phpsyntax>
+        <phpsyntax function="pdf_set_leading"></phpsyntax>
+        <phpsyntax function="pdf_set_parameter"></phpsyntax>
+        <phpsyntax function="pdf_set_text_pos"></phpsyntax>
+        <phpsyntax function="pdf_set_text_rendering"></phpsyntax>
+        <phpsyntax function="pdf_set_text_rise"></phpsyntax>
+        <phpsyntax function="pdf_set_transition"></phpsyntax>
+        <phpsyntax function="pdf_set_value"></phpsyntax>
+        <phpsyntax function="pdf_set_word_spacing"></phpsyntax>
+        <phpsyntax function="pdf_setcolor"></phpsyntax>
+        <phpsyntax function="pdf_setdash"></phpsyntax>
+        <phpsyntax function="pdf_setflat"></phpsyntax>
+        <phpsyntax function="pdf_setfont"></phpsyntax>
+        <phpsyntax function="pdf_setgray"></phpsyntax>
+        <phpsyntax function="pdf_setgray_fill"></phpsyntax>
+        <phpsyntax function="pdf_setgray_stroke"></phpsyntax>
+        <phpsyntax function="pdf_setlinecap"></phpsyntax>
+        <phpsyntax function="pdf_setlinejoin"></phpsyntax>
+        <phpsyntax function="pdf_setlinewidth"></phpsyntax>
+        <phpsyntax function="pdf_setmatrix"></phpsyntax>
+        <phpsyntax function="pdf_setmiterlimit"></phpsyntax>
+        <phpsyntax function="pdf_setpolydash"></phpsyntax>
+        <phpsyntax function="pdf_setrgbcolor"></phpsyntax>
+        <phpsyntax function="pdf_setrgbcolor_fill"></phpsyntax>
+        <phpsyntax function="pdf_setrgbcolor_stroke"></phpsyntax>
+        <phpsyntax function="pdf_show"></phpsyntax>
+        <phpsyntax function="pdf_show_boxed"></phpsyntax>
+        <phpsyntax function="pdf_show_xy"></phpsyntax>
+        <phpsyntax function="pdf_skew"></phpsyntax>
+        <phpsyntax function="pdf_stringwidth"></phpsyntax>
+        <phpsyntax function="pdf_stroke"></phpsyntax>
+        <phpsyntax function="pdf_translate"></phpsyntax>
+        <phpsyntax function="pfpro_cleanup"></phpsyntax>
+        <phpsyntax function="pfpro_init"></phpsyntax>
+        <phpsyntax function="pfpro_process"></phpsyntax>
+        <phpsyntax function="pfpro_process_raw"></phpsyntax>
+        <phpsyntax function="pfpro_version"></phpsyntax>
+        <phpsyntax function="pfsockopen"></phpsyntax>
+        <phpsyntax function="pg_client_encoding"></phpsyntax>
+        <phpsyntax function="pg_clientencoding"></phpsyntax>
+        <phpsyntax function="pg_close"></phpsyntax>
+        <phpsyntax function="pg_cmdtuples"></phpsyntax>
+        <phpsyntax function="pg_connect"></phpsyntax>
+        <phpsyntax function="pg_dbname"></phpsyntax>
+        <phpsyntax function="pg_end_copy"></phpsyntax>
+        <phpsyntax function="pg_errormessage"></phpsyntax>
+        <phpsyntax function="pg_exec"></phpsyntax>
+        <phpsyntax function="pg_fetch_array"></phpsyntax>
+        <phpsyntax function="pg_fetch_object"></phpsyntax>
+        <phpsyntax function="pg_fetch_row"></phpsyntax>
+        <phpsyntax function="pg_fieldisnull"></phpsyntax>
+        <phpsyntax function="pg_fieldname"></phpsyntax>
+        <phpsyntax function="pg_fieldnum"></phpsyntax>
+        <phpsyntax function="pg_fieldprtlen"></phpsyntax>
+        <phpsyntax function="pg_fieldsize"></phpsyntax>
+        <phpsyntax function="pg_fieldtype"></phpsyntax>
+        <phpsyntax function="pg_freeresult"></phpsyntax>
+        <phpsyntax function="pg_getlastoid"></phpsyntax>
+        <phpsyntax function="pg_host"></phpsyntax>
+        <phpsyntax function="pg_loclose"></phpsyntax>
+        <phpsyntax function="pg_locreate"></phpsyntax>
+        <phpsyntax function="pg_loexport"></phpsyntax>
+        <phpsyntax function="pg_loimport"></phpsyntax>
+        <phpsyntax function="pg_loopen"></phpsyntax>
+        <phpsyntax function="pg_loread"></phpsyntax>
+        <phpsyntax function="pg_loreadall"></phpsyntax>
+        <phpsyntax function="pg_lounlink"></phpsyntax>
+        <phpsyntax function="pg_lowrite"></phpsyntax>
+        <phpsyntax function="pg_numfields"></phpsyntax>
+        <phpsyntax function="pg_numrows"></phpsyntax>
+        <phpsyntax function="pg_options"></phpsyntax>
+        <phpsyntax function="pg_pconnect"></phpsyntax>
+        <phpsyntax function="pg_port"></phpsyntax>
+        <phpsyntax function="pg_put_line"></phpsyntax>
+        <phpsyntax function="pg_result"></phpsyntax>
+        <phpsyntax function="pg_set_client_encoding"></phpsyntax>
+        <phpsyntax function="pg_setclientencoding"></phpsyntax>
+        <phpsyntax function="pg_trace"></phpsyntax>
+        <phpsyntax function="pg_tty"></phpsyntax>
+        <phpsyntax function="pg_untrace"></phpsyntax>
+        <phpsyntax function="php_logo_guid"></phpsyntax>
+        <phpsyntax function="php_sapi_name"></phpsyntax>
+        <phpsyntax function="php_uname"></phpsyntax>
+        <phpsyntax function="phpcredits"></phpsyntax>
+        <phpsyntax function="phpinfo"></phpsyntax>
+        <phpsyntax function="phpversion"></phpsyntax>
+        <phpsyntax function="pi"></phpsyntax>
+        <phpsyntax function="png2wbmp"></phpsyntax>
+        <phpsyntax function="popen"></phpsyntax>
+        <phpsyntax function="pos"></phpsyntax>
+        <phpsyntax function="posix_ctermid"></phpsyntax>
+        <phpsyntax function="posix_getcwd"></phpsyntax>
+        <phpsyntax function="posix_getegid"></phpsyntax>
+        <phpsyntax function="posix_geteuid"></phpsyntax>
+        <phpsyntax function="posix_getgid"></phpsyntax>
+        <phpsyntax function="posix_getgrgid"></phpsyntax>
+        <phpsyntax function="posix_getgrnam"></phpsyntax>
+        <phpsyntax function="posix_getgroups"></phpsyntax>
+        <phpsyntax function="posix_getlogin"></phpsyntax>
+        <phpsyntax function="posix_getpgid"></phpsyntax>
+        <phpsyntax function="posix_getpgrp"></phpsyntax>
+        <phpsyntax function="posix_getpid"></phpsyntax>
+        <phpsyntax function="posix_getppid"></phpsyntax>
+        <phpsyntax function="posix_getpwnam"></phpsyntax>
+        <phpsyntax function="posix_getpwuid"></phpsyntax>
+        <phpsyntax function="posix_getrlimit"></phpsyntax>
+        <phpsyntax function="posix_getsid"></phpsyntax>
+        <phpsyntax function="posix_getuid"></phpsyntax>
+        <phpsyntax function="posix_isatty"></phpsyntax>
+        <phpsyntax function="posix_kill"></phpsyntax>
+        <phpsyntax function="posix_mkfifo"></phpsyntax>
+        <phpsyntax function="posix_setegid"></phpsyntax>
+        <phpsyntax function="posix_seteuid"></phpsyntax>
+        <phpsyntax function="posix_setgid"></phpsyntax>
+        <phpsyntax function="posix_setpgid"></phpsyntax>
+        <phpsyntax function="posix_setsid"></phpsyntax>
+        <phpsyntax function="posix_setuid"></phpsyntax>
+        <phpsyntax function="posix_times"></phpsyntax>
+        <phpsyntax function="posix_ttyname"></phpsyntax>
+        <phpsyntax function="posix_uname"></phpsyntax>
+        <phpsyntax function="pow"></phpsyntax>
+        <phpsyntax function="preg_grep"></phpsyntax>
+        <phpsyntax function="preg_match"></phpsyntax>
+        <phpsyntax function="preg_match_all"></phpsyntax>
+        <phpsyntax function="preg_quote"></phpsyntax>
+        <phpsyntax function="preg_replace"></phpsyntax>
+        <phpsyntax function="preg_replace_callback"></phpsyntax>
+        <phpsyntax function="preg_split"></phpsyntax>
+        <phpsyntax function="prev"></phpsyntax>
+        <phpsyntax function="print_r"></phpsyntax>
+        <phpsyntax function="printer_abort"></phpsyntax>
+        <phpsyntax function="printer_close"></phpsyntax>
+        <phpsyntax function="printer_create_brush"></phpsyntax>
+        <phpsyntax function="printer_create_dc"></phpsyntax>
+        <phpsyntax function="printer_create_font"></phpsyntax>
+        <phpsyntax function="printer_create_pen"></phpsyntax>
+        <phpsyntax function="printer_delete_brush"></phpsyntax>
+        <phpsyntax function="printer_delete_dc"></phpsyntax>
+        <phpsyntax function="printer_delete_font"></phpsyntax>
+        <phpsyntax function="printer_delete_pen"></phpsyntax>
+        <phpsyntax function="printer_draw_bmp"></phpsyntax>
+        <phpsyntax function="printer_draw_chord"></phpsyntax>
+        <phpsyntax function="printer_draw_elipse"></phpsyntax>
+        <phpsyntax function="printer_draw_line"></phpsyntax>
+        <phpsyntax function="printer_draw_pie"></phpsyntax>
+        <phpsyntax function="printer_draw_rectangle"></phpsyntax>
+        <phpsyntax function="printer_draw_roundrect"></phpsyntax>
+        <phpsyntax function="printer_draw_text"></phpsyntax>
+        <phpsyntax function="printer_end_doc"></phpsyntax>
+        <phpsyntax function="printer_end_page"></phpsyntax>
+        <phpsyntax function="printer_get_option"></phpsyntax>
+        <phpsyntax function="printer_list"></phpsyntax>
+        <phpsyntax function="printer_logical_fontheight"></phpsyntax>
+        <phpsyntax function="printer_open"></phpsyntax>
+        <phpsyntax function="printer_select_brush"></phpsyntax>
+        <phpsyntax function="printer_select_font"></phpsyntax>
+        <phpsyntax function="printer_select_pen"></phpsyntax>
+        <phpsyntax function="printer_set_option"></phpsyntax>
+        <phpsyntax function="printer_start_doc"></phpsyntax>
+        <phpsyntax function="printer_start_page"></phpsyntax>
+        <phpsyntax function="printer_write"></phpsyntax>
+        <phpsyntax function="printf"></phpsyntax>
+        <phpsyntax function="pspell_add_to_personal"></phpsyntax>
+        <phpsyntax function="pspell_add_to_session"></phpsyntax>
+        <phpsyntax function="pspell_check"></phpsyntax>
+        <phpsyntax function="pspell_clear_session"></phpsyntax>
+        <phpsyntax function="pspell_config_create"></phpsyntax>
+        <phpsyntax function="pspell_config_ignore"></phpsyntax>
+        <phpsyntax function="pspell_config_mode"></phpsyntax>
+        <phpsyntax function="pspell_config_personal"></phpsyntax>
+        <phpsyntax function="pspell_config_repl"></phpsyntax>
+        <phpsyntax function="pspell_config_runtogether"></phpsyntax>
+        <phpsyntax function="pspell_config_save_repl"></phpsyntax>
+        <phpsyntax function="pspell_new"></phpsyntax>
+        <phpsyntax function="pspell_new_config"></phpsyntax>
+        <phpsyntax function="pspell_new_personal"></phpsyntax>
+        <phpsyntax function="pspell_save_wordlist"></phpsyntax>
+        <phpsyntax function="pspell_store_replacement"></phpsyntax>
+        <phpsyntax function="pspell_suggest"></phpsyntax>
+        <phpsyntax function="putenv"></phpsyntax>
+        <phpsyntax function="putenv"></phpsyntax>
+        <phpsyntax function="qdom_error"></phpsyntax>
+        <phpsyntax function="qdom_tree"></phpsyntax>
+        <phpsyntax function="quoted_printable_decode"></phpsyntax>
+        <phpsyntax function="quotemeta"></phpsyntax>
+        <phpsyntax function="rad2deg"></phpsyntax>
+        <phpsyntax function="rand"></phpsyntax>
+        <phpsyntax function="range"></phpsyntax>
+        <phpsyntax function="rawurldecode"></phpsyntax>
+        <phpsyntax function="rawurlencode"></phpsyntax>
+        <phpsyntax function="read"></phpsyntax>
+        <phpsyntax function="read_exif_data"></phpsyntax>
+        <phpsyntax function="readdir"></phpsyntax>
+        <phpsyntax function="readfile"></phpsyntax>
+        <phpsyntax function="readgzfile"></phpsyntax>
+        <phpsyntax function="readline"></phpsyntax>
+        <phpsyntax function="readline_add_history"></phpsyntax>
+        <phpsyntax function="readline_clear_history"></phpsyntax>
+        <phpsyntax function="readline_completion_function"></phpsyntax>
+        <phpsyntax function="readline_info"></phpsyntax>
+        <phpsyntax function="readline_list_history"></phpsyntax>
+        <phpsyntax function="readline_list_history"></phpsyntax>
+        <phpsyntax function="readline_read_history"></phpsyntax>
+        <phpsyntax function="readline_write_history"></phpsyntax>
+        <phpsyntax function="readlink"></phpsyntax>
+        <phpsyntax function="readlink"></phpsyntax>
+        <phpsyntax function="readv"></phpsyntax>
+        <phpsyntax function="realpath"></phpsyntax>
+        <phpsyntax function="realpath"></phpsyntax>
+        <phpsyntax function="recode"></phpsyntax>
+        <phpsyntax function="recode_file"></phpsyntax>
+        <phpsyntax function="recode_string"></phpsyntax>
+        <phpsyntax function="recv"></phpsyntax>
+        <phpsyntax function="recvfrom"></phpsyntax>
+        <phpsyntax function="recvmsg"></phpsyntax>
+        <phpsyntax function="register_shutdown_function"></phpsyntax>
+        <phpsyntax function="register_tick_function"></phpsyntax>
+        <phpsyntax function="remove"></phpsyntax>
+        <phpsyntax function="remove"></phpsyntax>
+        <phpsyntax function="rename"></phpsyntax>
+        <phpsyntax function="reset"></phpsyntax>
+        <phpsyntax function="restore_error_handler"></phpsyntax>
+        <phpsyntax function="rewind"></phpsyntax>
+        <phpsyntax function="rewinddir"></phpsyntax>
+        <phpsyntax function="rmdir"></phpsyntax>
+        <phpsyntax function="rotate"></phpsyntax>
+        <phpsyntax function="rotateto"></phpsyntax>
+        <phpsyntax function="rotateto"></phpsyntax>
+        <phpsyntax function="round"></phpsyntax>
+        <phpsyntax function="rsort"></phpsyntax>
+        <phpsyntax function="rtrim"></phpsyntax>
+        <phpsyntax function="satellite_caught_exception"></phpsyntax>
+        <phpsyntax function="satellite_exception_id"></phpsyntax>
+        <phpsyntax function="satellite_exception_value"></phpsyntax>
+        <phpsyntax function="satellite_get_repository_id"></phpsyntax>
+        <phpsyntax function="satellite_load_idl"></phpsyntax>
+        <phpsyntax function="save"></phpsyntax>
+        <phpsyntax function="savetofile"></phpsyntax>
+        <phpsyntax function="scale"></phpsyntax>
+        <phpsyntax function="scaleto"></phpsyntax>
+        <phpsyntax function="scaleto"></phpsyntax>
+        <phpsyntax function="select"></phpsyntax>
+        <phpsyntax function="sem_acquire"></phpsyntax>
+        <phpsyntax function="sem_get"></phpsyntax>
+        <phpsyntax function="sem_release"></phpsyntax>
+        <phpsyntax function="send"></phpsyntax>
+        <phpsyntax function="sendmsg"></phpsyntax>
+        <phpsyntax function="sendto"></phpsyntax>
+        <phpsyntax function="serialize"></phpsyntax>
+        <phpsyntax function="session_cache_limiter"></phpsyntax>
+        <phpsyntax function="session_decode"></phpsyntax>
+        <phpsyntax function="session_destroy"></phpsyntax>
+        <phpsyntax function="session_encode"></phpsyntax>
+        <phpsyntax function="session_get_cookie_params"></phpsyntax>
+        <phpsyntax function="session_id"></phpsyntax>
+        <phpsyntax function="session_is_registered"></phpsyntax>
+        <phpsyntax function="session_module_name"></phpsyntax>
+        <phpsyntax function="session_name"></phpsyntax>
+        <phpsyntax function="session_register"></phpsyntax>
+        <phpsyntax function="session_save_path"></phpsyntax>
+        <phpsyntax function="session_set_cookie_params"></phpsyntax>
+        <phpsyntax function="session_set_save_handler"></phpsyntax>
+        <phpsyntax function="session_start"></phpsyntax>
+        <phpsyntax function="session_unregister"></phpsyntax>
+        <phpsyntax function="session_unset"></phpsyntax>
+        <phpsyntax function="session_write_close"></phpsyntax>
+        <phpsyntax function="set_content"></phpsyntax>
+        <phpsyntax function="set_error_handler"></phpsyntax>
+        <phpsyntax function="set_file_buffer"></phpsyntax>
+        <phpsyntax function="set_iovec"></phpsyntax>
+        <phpsyntax function="set_magic_quotes_runtime"></phpsyntax>
+        <phpsyntax function="set_nonblock"></phpsyntax>
+        <phpsyntax function="set_socket_blocking"></phpsyntax>
+        <phpsyntax function="set_time_limit"></phpsyntax>
+        <phpsyntax function="setaction"></phpsyntax>
+        <phpsyntax function="setbackground"></phpsyntax>
+        <phpsyntax function="setbounds"></phpsyntax>
+        <phpsyntax function="setcolor"></phpsyntax>
+        <phpsyntax function="setcolor"></phpsyntax>
+        <phpsyntax function="setcookie"></phpsyntax>
+        <phpsyntax function="setdepth"></phpsyntax>
+        <phpsyntax function="setdimension"></phpsyntax>
+        <phpsyntax function="setdown"></phpsyntax>
+        <phpsyntax function="setfont"></phpsyntax>
+        <phpsyntax function="setfont"></phpsyntax>
+        <phpsyntax function="setframes"></phpsyntax>
+        <phpsyntax function="setframes"></phpsyntax>
+        <phpsyntax function="setheight"></phpsyntax>
+        <phpsyntax function="setheight"></phpsyntax>
+        <phpsyntax function="sethit"></phpsyntax>
+        <phpsyntax function="setindentation"></phpsyntax>
+        <phpsyntax function="setleftfill"></phpsyntax>
+        <phpsyntax function="setleftmargin"></phpsyntax>
+        <phpsyntax function="setline"></phpsyntax>
+        <phpsyntax function="setlinespacing"></phpsyntax>
+        <phpsyntax function="setlocale"></phpsyntax>
+        <phpsyntax function="setmargins"></phpsyntax>
+        <phpsyntax function="setmatrix"></phpsyntax>
+        <phpsyntax function="setname"></phpsyntax>
+        <phpsyntax function="setname"></phpsyntax>
+        <phpsyntax function="setover"></phpsyntax>
+        <phpsyntax function="setrate"></phpsyntax>
+        <phpsyntax function="setratio"></phpsyntax>
+        <phpsyntax function="setrightfill"></phpsyntax>
+        <phpsyntax function="setrightmargin"></phpsyntax>
+        <phpsyntax function="setsockopt"></phpsyntax>
+        <phpsyntax function="setspacing"></phpsyntax>
+        <phpsyntax function="settype"></phpsyntax>
+        <phpsyntax function="setup"></phpsyntax>
+        <phpsyntax function="shell_exec"></phpsyntax>
+        <phpsyntax function="shm_attach"></phpsyntax>
+        <phpsyntax function="shm_detach"></phpsyntax>
+        <phpsyntax function="shm_get_var"></phpsyntax>
+        <phpsyntax function="shm_put_var"></phpsyntax>
+        <phpsyntax function="shm_remove"></phpsyntax>
+        <phpsyntax function="shm_remove_var"></phpsyntax>
+        <phpsyntax function="shmop_close"></phpsyntax>
+        <phpsyntax function="shmop_delete"></phpsyntax>
+        <phpsyntax function="shmop_open"></phpsyntax>
+        <phpsyntax function="shmop_read"></phpsyntax>
+        <phpsyntax function="shmop_size"></phpsyntax>
+        <phpsyntax function="shmop_write"></phpsyntax>
+        <phpsyntax function="show_source"></phpsyntax>
+        <phpsyntax function="shuffle"></phpsyntax>
+        <phpsyntax function="shutdown"></phpsyntax>
+        <phpsyntax function="signal"></phpsyntax>
+        <phpsyntax function="similar_text"></phpsyntax>
+        <phpsyntax function="sin"></phpsyntax>
+        <phpsyntax function="sizeof"></phpsyntax>
+        <phpsyntax function="skewx"></phpsyntax>
+        <phpsyntax function="skewxto"></phpsyntax>
+        <phpsyntax function="skewxto"></phpsyntax>
+        <phpsyntax function="skewy"></phpsyntax>
+        <phpsyntax function="skewyto"></phpsyntax>
+        <phpsyntax function="skewyto"></phpsyntax>
+        <phpsyntax function="sleep"></phpsyntax>
+        <phpsyntax function="snmp_get_quick_print"></phpsyntax>
+        <phpsyntax function="snmp_set_quick_print"></phpsyntax>
+        <phpsyntax function="snmpget"></phpsyntax>
+        <phpsyntax function="snmpget"></phpsyntax>
+        <phpsyntax function="snmprealwalk"></phpsyntax>
+        <phpsyntax function="snmpset"></phpsyntax>
+        <phpsyntax function="snmpwalk"></phpsyntax>
+        <phpsyntax function="snmpwalk"></phpsyntax>
+        <phpsyntax function="snmpwalkoid"></phpsyntax>
+        <phpsyntax function="socket"></phpsyntax>
+        <phpsyntax function="socket_get_status"></phpsyntax>
+        <phpsyntax function="socket_set_blocking"></phpsyntax>
+        <phpsyntax function="socket_set_timeout"></phpsyntax>
+        <phpsyntax function="socket_set_timeout"></phpsyntax>
+        <phpsyntax function="socketpair"></phpsyntax>
+        <phpsyntax function="sort"></phpsyntax>
+        <phpsyntax function="soundex"></phpsyntax>
+        <phpsyntax function="split"></phpsyntax>
+        <phpsyntax function="spliti"></phpsyntax>
+        <phpsyntax function="sprintf"></phpsyntax>
+        <phpsyntax function="sql_regcase"></phpsyntax>
+        <phpsyntax function="sqrt"></phpsyntax>
+        <phpsyntax function="srand"></phpsyntax>
+        <phpsyntax function="sscanf"></phpsyntax>
+        <phpsyntax function="stat"></phpsyntax>
+        <phpsyntax function="str_pad"></phpsyntax>
+        <phpsyntax function="str_repeat"></phpsyntax>
+        <phpsyntax function="str_replace"></phpsyntax>
+        <phpsyntax function="strcasecmp"></phpsyntax>
+        <phpsyntax function="strchr"></phpsyntax>
+        <phpsyntax function="strcmp"></phpsyntax>
+        <phpsyntax function="strcoll"></phpsyntax>
+        <phpsyntax function="strcoll"></phpsyntax>
+        <phpsyntax function="strcspn"></phpsyntax>
+        <phpsyntax function="streammp3"></phpsyntax>
+        <phpsyntax function="strerror"></phpsyntax>
+        <phpsyntax function="strftime"></phpsyntax>
+        <phpsyntax function="strftime"></phpsyntax>
+        <phpsyntax function="strip_tags"></phpsyntax>
+        <phpsyntax function="stripcslashes"></phpsyntax>
+        <phpsyntax function="stripslashes"></phpsyntax>
+        <phpsyntax function="stristr"></phpsyntax>
+        <phpsyntax function="strlen"></phpsyntax>
+        <phpsyntax function="strnatcasecmp"></phpsyntax>
+        <phpsyntax function="strnatcmp"></phpsyntax>
+        <phpsyntax function="strncasecmp"></phpsyntax>
+        <phpsyntax function="strncmp"></phpsyntax>
+        <phpsyntax function="strpos"></phpsyntax>
+        <phpsyntax function="strrchr"></phpsyntax>
+        <phpsyntax function="strrev"></phpsyntax>
+        <phpsyntax function="strrpos"></phpsyntax>
+        <phpsyntax function="strspn"></phpsyntax>
+        <phpsyntax function="strstr"></phpsyntax>
+        <phpsyntax function="strtok"></phpsyntax>
+        <phpsyntax function="strtolower"></phpsyntax>
+        <phpsyntax function="strtotime"></phpsyntax>
+        <phpsyntax function="strtoupper"></phpsyntax>
+        <phpsyntax function="strtr"></phpsyntax>
+        <phpsyntax function="strval"></phpsyntax>
+        <phpsyntax function="substr" usage="string substr(string str, int start [, int length])\n" description="Returns part of a string"></phpsyntax>
+        <phpsyntax function="substr_count"></phpsyntax>
+        <phpsyntax function="substr_replace"></phpsyntax>
+        <phpsyntax function="swf_actiongeturl"></phpsyntax>
+        <phpsyntax function="swf_actiongotoframe"></phpsyntax>
+        <phpsyntax function="swf_actiongotolabel"></phpsyntax>
+        <phpsyntax function="swf_actionnextframe"></phpsyntax>
+        <phpsyntax function="swf_actionplay"></phpsyntax>
+        <phpsyntax function="swf_actionprevframe"></phpsyntax>
+        <phpsyntax function="swf_actionsettarget"></phpsyntax>
+        <phpsyntax function="swf_actionstop"></phpsyntax>
+        <phpsyntax function="swf_actiontogglequality"></phpsyntax>
+        <phpsyntax function="swf_actionwaitforframe"></phpsyntax>
+        <phpsyntax function="swf_addbuttonrecord"></phpsyntax>
+        <phpsyntax function="swf_addcolor"></phpsyntax>
+        <phpsyntax function="swf_closefile"></phpsyntax>
+        <phpsyntax function="swf_definebitmap"></phpsyntax>
+        <phpsyntax function="swf_definefont"></phpsyntax>
+        <phpsyntax function="swf_defineline"></phpsyntax>
+        <phpsyntax function="swf_definepoly"></phpsyntax>
+        <phpsyntax function="swf_definerect"></phpsyntax>
+        <phpsyntax function="swf_definetext"></phpsyntax>
+        <phpsyntax function="swf_endbutton"></phpsyntax>
+        <phpsyntax function="swf_enddoaction"></phpsyntax>
+        <phpsyntax function="swf_endshape"></phpsyntax>
+        <phpsyntax function="swf_endsymbol"></phpsyntax>
+        <phpsyntax function="swf_fontsize"></phpsyntax>
+        <phpsyntax function="swf_fontslant"></phpsyntax>
+        <phpsyntax function="swf_fonttracking"></phpsyntax>
+        <phpsyntax function="swf_getbitmapinfo"></phpsyntax>
+        <phpsyntax function="swf_getfontinfo"></phpsyntax>
+        <phpsyntax function="swf_getframe"></phpsyntax>
+        <phpsyntax function="swf_labelframe"></phpsyntax>
+        <phpsyntax function="swf_lookat"></phpsyntax>
+        <phpsyntax function="swf_modifyobject"></phpsyntax>
+        <phpsyntax function="swf_mulcolor"></phpsyntax>
+        <phpsyntax function="swf_nextid"></phpsyntax>
+        <phpsyntax function="swf_oncondition"></phpsyntax>
+        <phpsyntax function="swf_openfile"></phpsyntax>
+        <phpsyntax function="swf_ortho"></phpsyntax>
+        <phpsyntax function="swf_ortho2"></phpsyntax>
+        <phpsyntax function="swf_perspective"></phpsyntax>
+        <phpsyntax function="swf_placeobject"></phpsyntax>
+        <phpsyntax function="swf_polarview"></phpsyntax>
+        <phpsyntax function="swf_popmatrix"></phpsyntax>
+        <phpsyntax function="swf_posround"></phpsyntax>
+        <phpsyntax function="swf_pushmatrix"></phpsyntax>
+        <phpsyntax function="swf_removeobject"></phpsyntax>
+        <phpsyntax function="swf_rotate"></phpsyntax>
+        <phpsyntax function="swf_scale"></phpsyntax>
+        <phpsyntax function="swf_setfont"></phpsyntax>
+        <phpsyntax function="swf_setframe"></phpsyntax>
+        <phpsyntax function="swf_shapearc"></phpsyntax>
+        <phpsyntax function="swf_shapecurveto"></phpsyntax>
+        <phpsyntax function="swf_shapecurveto3"></phpsyntax>
+        <phpsyntax function="swf_shapefillbitmapclip"></phpsyntax>
+        <phpsyntax function="swf_shapefillbitmaptile"></phpsyntax>
+        <phpsyntax function="swf_shapefilloff"></phpsyntax>
+        <phpsyntax function="swf_shapefillsolid"></phpsyntax>
+        <phpsyntax function="swf_shapelinesolid"></phpsyntax>
+        <phpsyntax function="swf_shapelineto"></phpsyntax>
+        <phpsyntax function="swf_shapemoveto"></phpsyntax>
+        <phpsyntax function="swf_showframe"></phpsyntax>
+        <phpsyntax function="swf_startbutton"></phpsyntax>
+        <phpsyntax function="swf_startdoaction"></phpsyntax>
+        <phpsyntax function="swf_startshape"></phpsyntax>
+        <phpsyntax function="swf_startsymbol"></phpsyntax>
+        <phpsyntax function="swf_textwidth"></phpsyntax>
+        <phpsyntax function="swf_translate"></phpsyntax>
+        <phpsyntax function="swf_viewport"></phpsyntax>
+        <phpsyntax function="swfaction"></phpsyntax>
+        <phpsyntax function="swfbitmap"></phpsyntax>
+        <phpsyntax function="swfbutton"></phpsyntax>
+        <phpsyntax function="swfbutton_keypress"></phpsyntax>
+        <phpsyntax function="swffill"></phpsyntax>
+        <phpsyntax function="swffont"></phpsyntax>
+        <phpsyntax function="swfgradient"></phpsyntax>
+        <phpsyntax function="swfmorph"></phpsyntax>
+        <phpsyntax function="swfmovie"></phpsyntax>
+        <phpsyntax function="swfshape"></phpsyntax>
+        <phpsyntax function="swfsprite"></phpsyntax>
+        <phpsyntax function="swftext"></phpsyntax>
+        <phpsyntax function="swftextfield"></phpsyntax>
+        <phpsyntax function="sybase_affected_rows"></phpsyntax>
+        <phpsyntax function="sybase_affected_rows"></phpsyntax>
+        <phpsyntax function="sybase_close"></phpsyntax>
+        <phpsyntax function="sybase_close"></phpsyntax>
+        <phpsyntax function="sybase_connect"></phpsyntax>
+        <phpsyntax function="sybase_connect"></phpsyntax>
+        <phpsyntax function="sybase_data_seek"></phpsyntax>
+        <phpsyntax function="sybase_data_seek"></phpsyntax>
+        <phpsyntax function="sybase_fetch_array"></phpsyntax>
+        <phpsyntax function="sybase_fetch_array"></phpsyntax>
+        <phpsyntax function="sybase_fetch_field"></phpsyntax>
+        <phpsyntax function="sybase_fetch_field"></phpsyntax>
+        <phpsyntax function="sybase_fetch_object"></phpsyntax>
+        <phpsyntax function="sybase_fetch_object"></phpsyntax>
+        <phpsyntax function="sybase_fetch_row"></phpsyntax>
+        <phpsyntax function="sybase_fetch_row"></phpsyntax>
+        <phpsyntax function="sybase_field_seek"></phpsyntax>
+        <phpsyntax function="sybase_field_seek"></phpsyntax>
+        <phpsyntax function="sybase_free_result"></phpsyntax>
+        <phpsyntax function="sybase_free_result"></phpsyntax>
+        <phpsyntax function="sybase_get_last_message"></phpsyntax>
+        <phpsyntax function="sybase_get_last_message"></phpsyntax>
+        <phpsyntax function="sybase_min_client_severity"></phpsyntax>
+        <phpsyntax function="sybase_min_error_severity"></phpsyntax>
+        <phpsyntax function="sybase_min_message_severity"></phpsyntax>
+        <phpsyntax function="sybase_min_server_severity"></phpsyntax>
+        <phpsyntax function="sybase_num_fields"></phpsyntax>
+        <phpsyntax function="sybase_num_fields"></phpsyntax>
+        <phpsyntax function="sybase_num_rows"></phpsyntax>
+        <phpsyntax function="sybase_num_rows"></phpsyntax>
+        <phpsyntax function="sybase_pconnect"></phpsyntax>
+        <phpsyntax function="sybase_pconnect"></phpsyntax>
+        <phpsyntax function="sybase_query"></phpsyntax>
+        <phpsyntax function="sybase_query"></phpsyntax>
+        <phpsyntax function="sybase_result"></phpsyntax>
+        <phpsyntax function="sybase_result"></phpsyntax>
+        <phpsyntax function="sybase_select_db"></phpsyntax>
+        <phpsyntax function="sybase_select_db"></phpsyntax>
+        <phpsyntax function="symlink"></phpsyntax>
+        <phpsyntax function="symlink"></phpsyntax>
+        <phpsyntax function="syslog"></phpsyntax>
+        <phpsyntax function="system"></phpsyntax>
+        <phpsyntax function="tan"></phpsyntax>
+        <phpsyntax function="tempnam"></phpsyntax>
+        <phpsyntax function="textdomain"></phpsyntax>
+        <phpsyntax function="time"></phpsyntax>
+        <phpsyntax function="tmpfile"></phpsyntax>
+        <phpsyntax function="touch"></phpsyntax>
+        <phpsyntax function="trigger_error"></phpsyntax>
+        <phpsyntax function="trim"></phpsyntax>
+        <phpsyntax function="uasort"></phpsyntax>
+        <phpsyntax function="ucfirst"></phpsyntax>
+        <phpsyntax function="ucwords"></phpsyntax>
+        <phpsyntax function="udm_add_search_limit"></phpsyntax>
+        <phpsyntax function="udm_alloc_agent"></phpsyntax>
+        <phpsyntax function="udm_api_version"></phpsyntax>
+        <phpsyntax function="udm_clear_search_limits"></phpsyntax>
+        <phpsyntax function="udm_errno"></phpsyntax>
+        <phpsyntax function="udm_error"></phpsyntax>
+        <phpsyntax function="udm_find"></phpsyntax>
+        <phpsyntax function="udm_free_agent"></phpsyntax>
+        <phpsyntax function="udm_free_ispell_data"></phpsyntax>
+        <phpsyntax function="udm_free_res"></phpsyntax>
+        <phpsyntax function="udm_get_doc_count"></phpsyntax>
+        <phpsyntax function="udm_get_res_field"></phpsyntax>
+        <phpsyntax function="udm_get_res_param"></phpsyntax>
+        <phpsyntax function="udm_load_ispell_data"></phpsyntax>
+        <phpsyntax function="udm_set_agent_param"></phpsyntax>
+        <phpsyntax function="uksort"></phpsyntax>
+        <phpsyntax function="umask"></phpsyntax>
+        <phpsyntax function="uniqid"></phpsyntax>
+        <phpsyntax function="unixtojd"></phpsyntax>
+        <phpsyntax function="unlink"></phpsyntax>
+        <phpsyntax function="unpack"></phpsyntax>
+        <phpsyntax function="unregister_tick_function"></phpsyntax>
+        <phpsyntax function="unserialize"></phpsyntax>
+        <phpsyntax function="urldecode"></phpsyntax>
+        <phpsyntax function="urlencode"></phpsyntax>
+        <phpsyntax function="user_error"></phpsyntax>
+        <phpsyntax function="usleep"></phpsyntax>
+        <phpsyntax function="usort"></phpsyntax>
+        <phpsyntax function="utf8_decode"></phpsyntax>
+        <phpsyntax function="utf8_encode"></phpsyntax>
+        <phpsyntax function="var_dump"></phpsyntax>
+        <phpsyntax function="velocis_autocommit"></phpsyntax>
+        <phpsyntax function="velocis_close"></phpsyntax>
+        <phpsyntax function="velocis_commit"></phpsyntax>
+        <phpsyntax function="velocis_connect"></phpsyntax>
+        <phpsyntax function="velocis_exec"></phpsyntax>
+        <phpsyntax function="velocis_fetch"></phpsyntax>
+        <phpsyntax function="velocis_fieldname"></phpsyntax>
+        <phpsyntax function="velocis_fieldnum"></phpsyntax>
+        <phpsyntax function="velocis_freeresult"></phpsyntax>
+        <phpsyntax function="velocis_off_autocommit"></phpsyntax>
+        <phpsyntax function="velocis_result"></phpsyntax>
+        <phpsyntax function="velocis_rollback"></phpsyntax>
+        <phpsyntax function="virtual"></phpsyntax>
+        <phpsyntax function="vpopmail_add_alias_domain"></phpsyntax>
+        <phpsyntax function="vpopmail_add_alias_domain_ex"></phpsyntax>
+        <phpsyntax function="vpopmail_add_domain"></phpsyntax>
+        <phpsyntax function="vpopmail_add_domain_ex"></phpsyntax>
+        <phpsyntax function="vpopmail_add_user"></phpsyntax>
+        <phpsyntax function="vpopmail_auth_user"></phpsyntax>
+        <phpsyntax function="vpopmail_del_domain"></phpsyntax>
+        <phpsyntax function="vpopmail_del_domain_ex"></phpsyntax>
+        <phpsyntax function="vpopmail_del_user"></phpsyntax>
+        <phpsyntax function="vpopmail_error"></phpsyntax>
+        <phpsyntax function="vpopmail_passwd"></phpsyntax>
+        <phpsyntax function="vpopmail_set_user_quota"></phpsyntax>
+        <phpsyntax function="wddx_add_vars"></phpsyntax>
+        <phpsyntax function="wddx_deserialize"></phpsyntax>
+        <phpsyntax function="wddx_packet_end"></phpsyntax>
+        <phpsyntax function="wddx_packet_start"></phpsyntax>
+        <phpsyntax function="wddx_serialize_value"></phpsyntax>
+        <phpsyntax function="wddx_serialize_vars"></phpsyntax>
+        <phpsyntax function="wordwrap"></phpsyntax>
+        <phpsyntax function="write"></phpsyntax>
+        <phpsyntax function="writev"></phpsyntax>
+        <phpsyntax function="xml_error_string"></phpsyntax>
+        <phpsyntax function="xml_get_current_byte_index"></phpsyntax>
+        <phpsyntax function="xml_get_current_column_number"></phpsyntax>
+        <phpsyntax function="xml_get_current_line_number"></phpsyntax>
+        <phpsyntax function="xml_get_error_code"></phpsyntax>
+        <phpsyntax function="xml_parse"></phpsyntax>
+        <phpsyntax function="xml_parse_into_struct"></phpsyntax>
+        <phpsyntax function="xml_parser_create"></phpsyntax>
+        <phpsyntax function="xml_parser_create_ns"></phpsyntax>
+        <phpsyntax function="xml_parser_free"></phpsyntax>
+        <phpsyntax function="xml_parser_get_option"></phpsyntax>
+        <phpsyntax function="xml_parser_set_option"></phpsyntax>
+        <phpsyntax function="xml_set_character_data_handler"></phpsyntax>
+        <phpsyntax function="xml_set_default_handler"></phpsyntax>
+        <phpsyntax function="xml_set_element_handler"></phpsyntax>
+        <phpsyntax function="xml_set_end_namespace_decl_handler"></phpsyntax>
+        <phpsyntax function="xml_set_external_entity_ref_handler"></phpsyntax>
+        <phpsyntax function="xml_set_notation_decl_handler"></phpsyntax>
+        <phpsyntax function="xml_set_object"></phpsyntax>
+        <phpsyntax function="xml_set_processing_instruction_handler"></phpsyntax>
+        <phpsyntax function="xml_set_start_namespace_decl_handler"></phpsyntax>
+        <phpsyntax function="xml_set_unparsed_entity_decl_handler"></phpsyntax>
+        <phpsyntax function="xmldoc"></phpsyntax>
+        <phpsyntax function="xmldocfile"></phpsyntax>
+        <phpsyntax function="xmltree"></phpsyntax>
+        <phpsyntax function="xpath_eval"></phpsyntax>
+        <phpsyntax function="xpath_eval_expression"></phpsyntax>
+        <phpsyntax function="xptr_eval"></phpsyntax>
+        <phpsyntax function="xslt_closelog"></phpsyntax>
+        <phpsyntax function="xslt_create"></phpsyntax>
+        <phpsyntax function="xslt_errno"></phpsyntax>
+        <phpsyntax function="xslt_error"></phpsyntax>
+        <phpsyntax function="xslt_fetch_result"></phpsyntax>
+        <phpsyntax function="xslt_free"></phpsyntax>
+        <phpsyntax function="xslt_openlog"></phpsyntax>
+        <phpsyntax function="xslt_output_begintransform"></phpsyntax>
+        <phpsyntax function="xslt_output_endtransform"></phpsyntax>
+        <phpsyntax function="xslt_process"></phpsyntax>
+        <phpsyntax function="xslt_run"></phpsyntax>
+        <phpsyntax function="xslt_set_base"></phpsyntax>
+        <phpsyntax function="xslt_set_encoding"></phpsyntax>
+        <phpsyntax function="xslt_set_error_handler"></phpsyntax>
+        <phpsyntax function="xslt_set_sax_handler"></phpsyntax>
+        <phpsyntax function="xslt_set_scheme_handler"></phpsyntax>
+        <phpsyntax function="xslt_transform"></phpsyntax>
+        <phpsyntax function="yaz_addinfo"></phpsyntax>
+        <phpsyntax function="yaz_ccl_conf"></phpsyntax>
+        <phpsyntax function="yaz_ccl_parse"></phpsyntax>
+        <phpsyntax function="yaz_close"></phpsyntax>
+        <phpsyntax function="yaz_connect"></phpsyntax>
+        <phpsyntax function="yaz_database"></phpsyntax>
+        <phpsyntax function="yaz_element"></phpsyntax>
+        <phpsyntax function="yaz_errno"></phpsyntax>
+        <phpsyntax function="yaz_error"></phpsyntax>
+        <phpsyntax function="yaz_hits"></phpsyntax>
+        <phpsyntax function="yaz_itemorder"></phpsyntax>
+        <phpsyntax function="yaz_present"></phpsyntax>
+        <phpsyntax function="yaz_range"></phpsyntax>
+        <phpsyntax function="yaz_record"></phpsyntax>
+        <phpsyntax function="yaz_scan"></phpsyntax>
+        <phpsyntax function="yaz_scan_result"></phpsyntax>
+        <phpsyntax function="yaz_search"></phpsyntax>
+        <phpsyntax function="yaz_syntax"></phpsyntax>
+        <phpsyntax function="yaz_wait"></phpsyntax>
+        <phpsyntax function="yp_all"></phpsyntax>
+        <phpsyntax function="yp_cat"></phpsyntax>
+        <phpsyntax function="yp_err_string"></phpsyntax>
+        <phpsyntax function="yp_errno"></phpsyntax>
+        <phpsyntax function="yp_first"></phpsyntax>
+        <phpsyntax function="yp_get_default_domain"></phpsyntax>
+        <phpsyntax function="yp_master"></phpsyntax>
+        <phpsyntax function="yp_match"></phpsyntax>
+        <phpsyntax function="yp_next"></phpsyntax>
+        <phpsyntax function="yp_order"></phpsyntax>
+        <phpsyntax function="zend_logo_guid"></phpsyntax>
+        <phpsyntax function="zend_test_func"></phpsyntax>
+        <phpsyntax function="zend_version"></phpsyntax>
+        <phpsyntax function="zzip_close"></phpsyntax>
+        <phpsyntax function="zzip_closedir"></phpsyntax>
+        <phpsyntax function="zzip_entry_compressedsize"></phpsyntax>
+        <phpsyntax function="zzip_entry_compressionmethod"></phpsyntax>
+        <phpsyntax function="zzip_entry_filesize"></phpsyntax>
+        <phpsyntax function="zzip_entry_name"></phpsyntax>
+        <phpsyntax function="zzip_open"></phpsyntax>
+        <phpsyntax function="zzip_opendir"></phpsyntax>
+        <phpsyntax function="zzip_read"></phpsyntax>
+        <phpsyntax function="zzip_readdir"></phpsyntax>
+==================================================        
+*Below this are the various PHP-specific keywords *
+==================================================     
+        <phpsyntax keyword="if" tokenval="1001"></phpsyntax>
+        <phpsyntax keyword="elseif" tokenval="1002"></phpsyntax>
+        <phpsyntax keyword="else" tokenval="1003"></phpsyntax>
+        <phpsyntax keyword="endif" tokenval="1004"></phpsyntax>
+        <phpsyntax keyword="for" tokenval="1005"></phpsyntax>
+        <phpsyntax keyword="endfor" tokenval="1005"></phpsyntax>
+        <phpsyntax keyword="while" tokenval="1007"></phpsyntax>
+        <phpsyntax keyword="endwhile" tokenval="1008"></phpsyntax>
+        <phpsyntax keyword="switch" tokenval="1009"></phpsyntax>
+        <phpsyntax keyword="case" tokenval="1010"></phpsyntax>
+        <phpsyntax keyword="endswitch" tokenval="1011"></phpsyntax>
+        <phpsyntax keyword="break" tokenval="1012"></phpsyntax>
+        <phpsyntax keyword="continue" tokenval="1013"></phpsyntax>
+        <phpsyntax keyword="return" tokenval="1014"></phpsyntax>
+        <phpsyntax keyword="define" tokenval="1015"></phpsyntax>
+        <phpsyntax keyword="include" tokenval="1016"></phpsyntax>
+        <phpsyntax keyword="include_once" tokenval="1017"></phpsyntax>
+        <phpsyntax keyword="require" tokenval="1018"></phpsyntax>
+        <phpsyntax keyword="require_once" tokenval="1019"></phpsyntax>
+        <phpsyntax keyword="function" tokenval="1020"></phpsyntax>
+        <phpsyntax keyword="class" tokenval="1021"></phpsyntax>
+        <phpsyntax keyword="new" tokenval="1022"></phpsyntax>
+        <phpsyntax keyword="do" tokenval="1023"></phpsyntax>
+        <phpsyntax keyword="old_function" tokenval="1024"></phpsyntax>
+        <phpsyntax keyword="default" tokenval="1025"></phpsyntax>
+        <phpsyntax keyword="global" tokenval="1026"></phpsyntax>
+        <phpsyntax keyword="static" tokenval="1027"></phpsyntax>
+        <phpsyntax keyword="foreach" tokenval="1028"></phpsyntax>
+        <phpsyntax keyword="endforeach" tokenval="1029"></phpsyntax>
+        <phpsyntax keyword="extends" tokenval="1030"></phpsyntax>
+        <phpsyntax keyword="empty" tokenval="1031"></phpsyntax>
+        <phpsyntax keyword="array" tokenval="1032"></phpsyntax>
+        <phpsyntax keyword="echo" tokenval="1033"></phpsyntax>
+        <phpsyntax keyword="var" tokenval="1034"></phpsyntax>
+        <phpsyntax keyword="as" tokenval="1035"></phpsyntax> 
+        <phpsyntax keyword="print" tokenval="1036"></phpsyntax> 
+        <phpsyntax keyword="unset" tokenval="1037"></phpsyntax>
+        <phpsyntax keyword="exit" tokenval="1038"></phpsyntax>
+        <phpsyntax keyword="die" tokenval="1039"></phpsyntax>
+        <phpsyntax keyword="and" tokenval="1040"></phpsyntax>
+        <phpsyntax keyword="or" tokenval="1041"></phpsyntax>
+        <phpsyntax keyword="xor" tokenval="1042"></phpsyntax>
+        <phpsyntax keyword="list" tokenval="1043"></phpsyntax> 
+        <phpsyntax keyword="null" tokenval="1044"></phpsyntax>
+        <phpsyntax keyword="false" tokenval="1045"></phpsyntax>
+        <phpsyntax keyword="true" tokenval="1046"></phpsyntax>
+=========================================================        
+*Below this are the various PHP-specific variable types *
+=========================================================
+        <phpsyntax type="string"></phpsyntax>         
+        <phpsyntax type="unset"></phpsyntax> 
+        <phpsyntax type="object"></phpsyntax>         
+        <phpsyntax type="bool"></phpsyntax>         
+        <phpsyntax type="boolean"></phpsyntax>         
+        <phpsyntax type="real"></phpsyntax>         
+        <phpsyntax type="double"></phpsyntax>         
+        <phpsyntax type="float"></phpsyntax>         
+        <phpsyntax type="int"></phpsyntax>         
+        <phpsyntax type="integer"></phpsyntax>        
+===================================================        
+*Below this are the various PHP-specific constants *
+===================================================
+        <phpsyntax constant="__LINE__"></phpsyntax>
+        <phpsyntax constant="__FILE__"></phpsyntax>
+        <phpsyntax constant="true"></phpsyntax>
+        <phpsyntax constant="false"></phpsyntax>
+        <phpsyntax constant="null"></phpsyntax>
+        <phpsyntax constant="object"></phpsyntax>
+        <phpsyntax constant="array"></phpsyntax>
+
+</phpstandardsyntax>
index f8fa9b0..5bb0a3f 100644 (file)
@@ -28,7 +28,7 @@ public class HTMLColorProvider {
        public static final RGB KEYWORD= new RGB(127, 0, 85);
   public static final RGB VARIABLE= new RGB(127, 159, 191);
        public static final RGB TYPE= new RGB(0, 0, 128);
-       public static final RGB STRING= new RGB(0, 128, 0);
+       public static final RGB STRING= new RGB(42, 0, 255);
        public static final RGB DEFAULT= new RGB(0, 0, 0);
   public static final RGB HTML_DEFAULT= new RGB(0, 128, 128);
 
index 8e65c5f..38d0238 100644 (file)
@@ -14,47 +14,50 @@ package net.sourceforge.phpeclipse.phpeditor.util;
 import java.util.HashMap;
 import java.util.Iterator;
 import java.util.Map;
+
 import org.eclipse.swt.graphics.Color;
 import org.eclipse.swt.graphics.RGB;
 import org.eclipse.swt.widgets.Display;
 /**
  * Manager for colors used in the Java editor
  */
 public class PHPColorProvider {
 
-       public static final RGB MULTI_LINE_COMMENT= new RGB(63, 127, 95);
-       public static final RGB SINGLE_LINE_COMMENT= new RGB(63, 127, 95);
-       public static final RGB KEYWORD= new RGB(127, 0, 85);
-  public static final RGB VARIABLE= new RGB(127, 159, 191);
-       public static final RGB FUNCTION_NAME= new RGB(127, 127, 159);
-       public static final RGB STRING= new RGB(42, 0, 255);
-       public static final RGB DEFAULT= new RGB(0, 0, 0);
-  
-  public static final RGB  LINKED_POSITION_COLOR= new RGB(0, 0, 0);
-  public static final RGB  LINE_NUMBER_COLOR= new RGB(0, 0, 0);
-  public static final RGB  BACKGROUND_COLOR= new RGB(255, 255, 255);
-  
-       protected Map fColorTable= new HashMap(10);
-
-       /**
-        * Release all of the color resources held onto by the receiver.
-        */     
-       public void dispose() {
-               Iterator e= fColorTable.values().iterator();
-               while (e.hasNext())
-                        ((Color) e.next()).dispose();
-       }
-       
-       /**
-        * Return the Color that is stored in the Color table as rgb.
-        */
-       public Color getColor(RGB rgb) {
-               Color color= (Color) fColorTable.get(rgb);
-               if (color == null) {
-                       color= new Color(Display.getCurrent(), rgb);
-                       fColorTable.put(rgb, color);
-               }
-               return color;
-       }
+  public static final RGB MULTI_LINE_COMMENT = new RGB(63, 127, 95);
+  public static final RGB SINGLE_LINE_COMMENT = new RGB(63, 127, 95);
+  public static final RGB KEYWORD = new RGB(127, 0, 85);
+  public static final RGB VARIABLE = new RGB(127, 159, 191);
+  public static final RGB FUNCTION_NAME = new RGB(127, 127, 159);
+  public static final RGB STRING = new RGB(42, 0, 255);
+  public static final RGB DEFAULT = new RGB(0, 0, 0);
+  public static final RGB TYPE = new RGB(127, 0, 85);
+  public static final RGB CONSTANT = new RGB(127, 0, 85);
+  public static final RGB BACKGROUND = new RGB(255, 255, 255);
+
+  public static final RGB LINKED_POSITION_COLOR = new RGB(0, 0, 0);
+
+  public static final RGB LINE_NUMBER_COLOR = new RGB(0, 0, 0);
+  public static final RGB BACKGROUND_COLOR = new RGB(255, 255, 255);
+  protected Map fColorTable = new HashMap(10);
+
+  /**
+   * Release all of the color resources held onto by the receiver.
+   */
+  public void dispose() {
+    Iterator e = fColorTable.values().iterator();
+    while (e.hasNext())
+       ((Color) e.next()).dispose();
+  }
+
+  /**
+   * Return the Color that is stored in the Color table as rgb.
+   */
+  public Color getColor(RGB rgb) {
+    Color color = (Color) fColorTable.get(rgb);
+    if (color == null) {
+      color = new Color(Display.getCurrent(), rgb);
+      fColorTable.put(rgb, color);
+    }
+    return color;
+  }
 }
diff --git a/net.sourceforge.phpeclipse/src/net/sourceforge/phpeclipse/preferences/ColorEditor.java b/net.sourceforge.phpeclipse/src/net/sourceforge/phpeclipse/preferences/ColorEditor.java
new file mode 100644 (file)
index 0000000..af121ae
--- /dev/null
@@ -0,0 +1,116 @@
+/*
+ * (c) Copyright IBM Corp. 2000, 2001.
+ * All Rights Reserved.
+ */
+package net.sourceforge.phpeclipse.preferences;
+
+import org.eclipse.swt.SWT;
+import org.eclipse.swt.events.DisposeEvent;
+import org.eclipse.swt.events.DisposeListener;
+import org.eclipse.swt.events.SelectionAdapter;
+import org.eclipse.swt.events.SelectionEvent;
+import org.eclipse.swt.graphics.Color;
+import org.eclipse.swt.graphics.Font;
+import org.eclipse.swt.graphics.GC;
+import org.eclipse.swt.graphics.Image;
+import org.eclipse.swt.graphics.Point;
+import org.eclipse.swt.graphics.RGB;
+import org.eclipse.swt.widgets.Button;
+import org.eclipse.swt.widgets.ColorDialog;
+import org.eclipse.swt.widgets.Composite;
+import org.eclipse.swt.widgets.Control;
+import org.eclipse.swt.widgets.Display;
+
+import org.eclipse.jface.resource.JFaceResources;
+
+/**
+ * A "button" of a certain color determined by the color picker.
+ */
+public class ColorEditor {
+       
+       private Point fExtent;
+       private Image fImage;
+       private RGB fColorValue;
+       private Color fColor;
+       private Button fButton;
+       
+       public ColorEditor(Composite parent) {
+               
+               fButton= new Button(parent, SWT.PUSH);
+               fExtent= computeImageSize(parent);
+               fImage= new Image(parent.getDisplay(), fExtent.x, fExtent.y);
+               
+               GC gc= new GC(fImage);
+               gc.setBackground(fButton.getBackground());
+               gc.fillRectangle(0, 0, fExtent.x, fExtent.y);
+               gc.dispose();
+               
+               fButton.setImage(fImage);
+               fButton.addSelectionListener(new SelectionAdapter() {
+                       public void widgetSelected(SelectionEvent event) {
+                               ColorDialog colorDialog= new ColorDialog(fButton.getShell());
+                               colorDialog.setRGB(fColorValue);
+                               RGB newColor = colorDialog.open();
+                               if (newColor != null) {
+                                       fColorValue= newColor;
+                                       updateColorImage();
+                               }
+                       }
+               });
+               
+               fButton.addDisposeListener(new DisposeListener() {
+                       public void widgetDisposed(DisposeEvent event) {
+                               if (fImage != null)  {
+                                       fImage.dispose();
+                                       fImage= null;
+                               }
+                               if (fColor != null) {
+                                       fColor.dispose();
+                                       fColor= null;
+                               }
+                       }
+               });
+       }
+       
+       public RGB getColorValue() {
+               return fColorValue;
+       }
+       
+       public void setColorValue(RGB rgb) {
+               fColorValue= rgb;
+               updateColorImage();
+       }
+       
+       public Button getButton() {
+               return fButton;
+       }
+       
+       protected void updateColorImage() {
+               
+               Display display= fButton.getDisplay();
+               
+               GC gc= new GC(fImage);
+               gc.setForeground(display.getSystemColor(SWT.COLOR_BLACK));
+               gc.drawRectangle(0, 2, fExtent.x - 1, fExtent.y - 4);
+               
+               if (fColor != null)
+                       fColor.dispose();
+                       
+               fColor= new Color(display, fColorValue);
+               gc.setBackground(fColor);
+               gc.fillRectangle(1, 3, fExtent.x - 2, fExtent.y - 5);
+               gc.dispose();
+               
+               fButton.setImage(fImage);
+       }
+       
+       protected Point computeImageSize(Control window) {
+               GC gc= new GC(window);
+               Font f= JFaceResources.getFontRegistry().get(JFaceResources.DEFAULT_FONT);
+               gc.setFont(f);
+               int height= gc.getFontMetrics().getHeight();
+               gc.dispose();
+               Point p= new Point(height * 3 - 6, height);
+               return p;
+       }
+}
\ No newline at end of file
diff --git a/net.sourceforge.phpeclipse/src/net/sourceforge/phpeclipse/preferences/OverlayPreferenceStore.java b/net.sourceforge.phpeclipse/src/net/sourceforge/phpeclipse/preferences/OverlayPreferenceStore.java
new file mode 100644 (file)
index 0000000..11032cf
--- /dev/null
@@ -0,0 +1,443 @@
+/*
+ * (c) Copyright IBM Corp. 2000, 2001.
+ * All Rights Reserved.
+ */
+
+package net.sourceforge.phpeclipse.preferences;
+
+import org.eclipse.jface.preference.IPreferenceStore;
+import org.eclipse.jface.preference.PreferenceStore;
+import org.eclipse.jface.util.IPropertyChangeListener;
+import org.eclipse.jface.util.PropertyChangeEvent;
+
+/**
+ * An overlaying preference store.
+ */
+public class OverlayPreferenceStore implements IPreferenceStore {
+
+  public static final class TypeDescriptor {
+    private TypeDescriptor() {
+    }
+  };
+
+  public static final TypeDescriptor BOOLEAN = new TypeDescriptor();
+  public static final TypeDescriptor DOUBLE = new TypeDescriptor();
+  public static final TypeDescriptor FLOAT = new TypeDescriptor();
+  public static final TypeDescriptor INT = new TypeDescriptor();
+  public static final TypeDescriptor LONG = new TypeDescriptor();
+  public static final TypeDescriptor STRING = new TypeDescriptor();
+
+  public static class OverlayKey {
+
+    TypeDescriptor fDescriptor;
+    String fKey;
+
+    public OverlayKey(TypeDescriptor descriptor, String key) {
+      fDescriptor = descriptor;
+      fKey = key;
+    }
+  };
+
+  private class PropertyListener implements IPropertyChangeListener {
+
+    /*
+     * @see IPropertyChangeListener#propertyChange(PropertyChangeEvent)
+     */
+    public void propertyChange(PropertyChangeEvent event) {
+      OverlayKey key = findOverlayKey(event.getProperty());
+      if (key != null)
+        propagateProperty(fParent, key, fStore);
+    }
+  };
+
+  private IPreferenceStore fParent;
+  private IPreferenceStore fStore;
+  private OverlayKey[] fOverlayKeys;
+
+  private PropertyListener fPropertyListener;
+
+  public OverlayPreferenceStore(IPreferenceStore parent, OverlayKey[] overlayKeys) {
+    fParent = parent;
+    fOverlayKeys = overlayKeys;
+    fStore = new PreferenceStore();
+  }
+
+  private OverlayKey findOverlayKey(String key) {
+    for (int i = 0; i < fOverlayKeys.length; i++) {
+      if (fOverlayKeys[i].fKey.equals(key))
+        return fOverlayKeys[i];
+    }
+    return null;
+  }
+
+  private boolean covers(String key) {
+    return (findOverlayKey(key) != null);
+  }
+
+  private void propagateProperty(IPreferenceStore orgin, OverlayKey key, IPreferenceStore target) {
+
+    if (orgin.isDefault(key.fKey)) {
+      if (!target.isDefault(key.fKey))
+        target.setToDefault(key.fKey);
+      return;
+    }
+
+    TypeDescriptor d = key.fDescriptor;
+    if (BOOLEAN == d) {
+
+      boolean originValue = orgin.getBoolean(key.fKey);
+      boolean targetValue = target.getBoolean(key.fKey);
+      if (targetValue != originValue)
+        target.setValue(key.fKey, originValue);
+
+    } else if (DOUBLE == d) {
+
+      double originValue = orgin.getDouble(key.fKey);
+      double targetValue = target.getDouble(key.fKey);
+      if (targetValue != originValue)
+        target.setValue(key.fKey, originValue);
+
+    } else if (FLOAT == d) {
+
+      float originValue = orgin.getFloat(key.fKey);
+      float targetValue = target.getFloat(key.fKey);
+      if (targetValue != originValue)
+        target.setValue(key.fKey, originValue);
+
+    } else if (INT == d) {
+
+      int originValue = orgin.getInt(key.fKey);
+      int targetValue = target.getInt(key.fKey);
+      if (targetValue != originValue)
+        target.setValue(key.fKey, originValue);
+
+    } else if (LONG == d) {
+
+      long originValue = orgin.getLong(key.fKey);
+      long targetValue = target.getLong(key.fKey);
+      if (targetValue != originValue)
+        target.setValue(key.fKey, originValue);
+
+    } else if (STRING == d) {
+
+      String originValue = orgin.getString(key.fKey);
+      String targetValue = target.getString(key.fKey);
+      if (targetValue != null && originValue != null && !targetValue.equals(originValue))
+        target.setValue(key.fKey, originValue);
+
+    }
+  }
+
+  public void propagate() {
+    for (int i = 0; i < fOverlayKeys.length; i++)
+      propagateProperty(fStore, fOverlayKeys[i], fParent);
+  }
+
+  private void loadProperty(IPreferenceStore orgin, OverlayKey key, IPreferenceStore target, boolean forceInitialization) {
+    TypeDescriptor d = key.fDescriptor;
+    if (BOOLEAN == d) {
+
+      if (forceInitialization)
+        target.setValue(key.fKey, true);
+      target.setValue(key.fKey, orgin.getBoolean(key.fKey));
+      target.setDefault(key.fKey, orgin.getDefaultBoolean(key.fKey));
+
+    } else if (DOUBLE == d) {
+
+      if (forceInitialization)
+        target.setValue(key.fKey, 1.0D);
+      target.setValue(key.fKey, orgin.getDouble(key.fKey));
+      target.setDefault(key.fKey, orgin.getDefaultDouble(key.fKey));
+
+    } else if (FLOAT == d) {
+
+      if (forceInitialization)
+        target.setValue(key.fKey, 1.0F);
+      target.setValue(key.fKey, orgin.getFloat(key.fKey));
+      target.setDefault(key.fKey, orgin.getDefaultFloat(key.fKey));
+
+    } else if (INT == d) {
+
+      if (forceInitialization)
+        target.setValue(key.fKey, 1);
+      target.setValue(key.fKey, orgin.getInt(key.fKey));
+      target.setDefault(key.fKey, orgin.getDefaultInt(key.fKey));
+
+    } else if (LONG == d) {
+
+      if (forceInitialization)
+        target.setValue(key.fKey, 1L);
+      target.setValue(key.fKey, orgin.getLong(key.fKey));
+      target.setDefault(key.fKey, orgin.getDefaultLong(key.fKey));
+
+    } else if (STRING == d) {
+
+      if (forceInitialization)
+        target.setValue(key.fKey, "1"); //$NON-NLS-1$
+      target.setValue(key.fKey, orgin.getString(key.fKey));
+      target.setDefault(key.fKey, orgin.getDefaultString(key.fKey));
+
+    }
+  }
+
+  public void load() {
+    for (int i = 0; i < fOverlayKeys.length; i++)
+      loadProperty(fParent, fOverlayKeys[i], fStore, true);
+  }
+
+  public void loadDefaults() {
+    for (int i = 0; i < fOverlayKeys.length; i++)
+      setToDefault(fOverlayKeys[i].fKey);
+  }
+
+  public void start() {
+    if (fPropertyListener == null) {
+      fPropertyListener = new PropertyListener();
+      fParent.addPropertyChangeListener(fPropertyListener);
+    }
+  }
+
+  public void stop() {
+    if (fPropertyListener != null) {
+      fParent.removePropertyChangeListener(fPropertyListener);
+      fPropertyListener = null;
+    }
+  }
+
+  /*
+   * @see IPreferenceStore#addPropertyChangeListener(IPropertyChangeListener)
+   */
+  public void addPropertyChangeListener(IPropertyChangeListener listener) {
+    fStore.addPropertyChangeListener(listener);
+  }
+
+  /*
+   * @see IPreferenceStore#removePropertyChangeListener(IPropertyChangeListener)
+   */
+  public void removePropertyChangeListener(IPropertyChangeListener listener) {
+    fStore.removePropertyChangeListener(listener);
+  }
+
+  /*
+   * @see IPreferenceStore#firePropertyChangeEvent(String, Object, Object)
+   */
+  public void firePropertyChangeEvent(String name, Object oldValue, Object newValue) {
+    fStore.firePropertyChangeEvent(name, oldValue, newValue);
+  }
+
+  /*
+   * @see IPreferenceStore#contains(String)
+   */
+  public boolean contains(String name) {
+    return fStore.contains(name);
+  }
+
+  /*
+   * @see IPreferenceStore#getBoolean(String)
+   */
+  public boolean getBoolean(String name) {
+    return fStore.getBoolean(name);
+  }
+
+  /*
+   * @see IPreferenceStore#getDefaultBoolean(String)
+   */
+  public boolean getDefaultBoolean(String name) {
+    return fStore.getDefaultBoolean(name);
+  }
+
+  /*
+   * @see IPreferenceStore#getDefaultDouble(String)
+   */
+  public double getDefaultDouble(String name) {
+    return fStore.getDefaultDouble(name);
+  }
+
+  /*
+   * @see IPreferenceStore#getDefaultFloat(String)
+   */
+  public float getDefaultFloat(String name) {
+    return fStore.getDefaultFloat(name);
+  }
+
+  /*
+   * @see IPreferenceStore#getDefaultInt(String)
+   */
+  public int getDefaultInt(String name) {
+    return fStore.getDefaultInt(name);
+  }
+
+  /*
+   * @see IPreferenceStore#getDefaultLong(String)
+   */
+  public long getDefaultLong(String name) {
+    return fStore.getDefaultLong(name);
+  }
+
+  /*
+   * @see IPreferenceStore#getDefaultString(String)
+   */
+  public String getDefaultString(String name) {
+    return fStore.getDefaultString(name);
+  }
+
+  /*
+   * @see IPreferenceStore#getDouble(String)
+   */
+  public double getDouble(String name) {
+    return fStore.getDouble(name);
+  }
+
+  /*
+   * @see IPreferenceStore#getFloat(String)
+   */
+  public float getFloat(String name) {
+    return fStore.getFloat(name);
+  }
+
+  /*
+   * @see IPreferenceStore#getInt(String)
+   */
+  public int getInt(String name) {
+    return fStore.getInt(name);
+  }
+
+  /*
+   * @see IPreferenceStore#getLong(String)
+   */
+  public long getLong(String name) {
+    return fStore.getLong(name);
+  }
+
+  /*
+   * @see IPreferenceStore#getString(String)
+   */
+  public String getString(String name) {
+    return fStore.getString(name);
+  }
+
+  /*
+   * @see IPreferenceStore#isDefault(String)
+   */
+  public boolean isDefault(String name) {
+    return fStore.isDefault(name);
+  }
+
+  /*
+   * @see IPreferenceStore#needsSaving()
+   */
+  public boolean needsSaving() {
+    return fStore.needsSaving();
+  }
+
+  /*
+   * @see IPreferenceStore#putValue(String, String)
+   */
+  public void putValue(String name, String value) {
+    if (covers(name))
+      fStore.putValue(name, value);
+  }
+
+  /*
+   * @see IPreferenceStore#setDefault(String, double)
+   */
+  public void setDefault(String name, double value) {
+    if (covers(name))
+      fStore.setDefault(name, value);
+  }
+
+  /*
+   * @see IPreferenceStore#setDefault(String, float)
+   */
+  public void setDefault(String name, float value) {
+    if (covers(name))
+      fStore.setDefault(name, value);
+  }
+
+  /*
+   * @see IPreferenceStore#setDefault(String, int)
+   */
+  public void setDefault(String name, int value) {
+    if (covers(name))
+      fStore.setDefault(name, value);
+  }
+
+  /*
+   * @see IPreferenceStore#setDefault(String, long)
+   */
+  public void setDefault(String name, long value) {
+    if (covers(name))
+      fStore.setDefault(name, value);
+  }
+
+  /*
+   * @see IPreferenceStore#setDefault(String, String)
+   */
+  public void setDefault(String name, String value) {
+    if (covers(name))
+      fStore.setDefault(name, value);
+  }
+
+  /*
+   * @see IPreferenceStore#setDefault(String, boolean)
+   */
+  public void setDefault(String name, boolean value) {
+    if (covers(name))
+      fStore.setDefault(name, value);
+  }
+
+  /*
+   * @see IPreferenceStore#setToDefault(String)
+   */
+  public void setToDefault(String name) {
+    fStore.setToDefault(name);
+  }
+
+  /*
+   * @see IPreferenceStore#setValue(String, double)
+   */
+  public void setValue(String name, double value) {
+    if (covers(name))
+      fStore.setValue(name, value);
+  }
+
+  /*
+   * @see IPreferenceStore#setValue(String, float)
+   */
+  public void setValue(String name, float value) {
+    if (covers(name))
+      fStore.setValue(name, value);
+  }
+
+  /*
+   * @see IPreferenceStore#setValue(String, int)
+   */
+  public void setValue(String name, int value) {
+    if (covers(name))
+      fStore.setValue(name, value);
+  }
+
+  /*
+   * @see IPreferenceStore#setValue(String, long)
+   */
+  public void setValue(String name, long value) {
+    if (covers(name))
+      fStore.setValue(name, value);
+  }
+
+  /*
+   * @see IPreferenceStore#setValue(String, String)
+   */
+  public void setValue(String name, String value) {
+    if (covers(name))
+      fStore.setValue(name, value);
+  }
+
+  /*
+   * @see IPreferenceStore#setValue(String, boolean)
+   */
+  public void setValue(String name, boolean value) {
+    if (covers(name))
+      fStore.setValue(name, value);
+  }
+}
\ No newline at end of file
index dfda1e6..6088388 100644 (file)
@@ -4,33 +4,43 @@ import java.text.MessageFormat;
 import java.util.MissingResourceException;
 import java.util.ResourceBundle;
 
+import org.eclipse.jface.preference.IPreferenceStore;
+
+import net.sourceforge.phpeclipse.IPreferenceConstants;
+import net.sourceforge.phpeclipse.PHPeclipsePlugin;
+
 public class PHPPreferencesMessages {
 
+  static IPreferenceStore store = PHPeclipsePlugin.getDefault().getPreferenceStore();
+  static String resourceBundleName;
+  static {
+    resourceBundleName = store.getString(IPreferenceConstants.RESOURCE_BUNDLE);
+  }
+  private static ResourceBundle resourceBundle = ResourceBundle.getBundle(resourceBundleName);
+
+  private PHPPreferencesMessages() {
+  }
+
+  public static String getString(String key) {
+    try {
+      return resourceBundle.getString(key);
+    } catch (MissingResourceException e) {
+      return '!' + key + '!';
+    }
+  }
+  public static void setResourceBundle(String newResourceBundle) {
+    resourceBundle = ResourceBundle.getBundle(newResourceBundle);
+  }
+
+  public static String getFormattedString(String key, String arg) {
+    return getFormattedString(key, new String[] { arg });
+  }
+
+  public static String getFormattedString(String key, String[] args) {
+    return MessageFormat.format(getString(key), args);
+  }
 
-  private static final String RESOURCE_BUNDLE= "net.sourceforge.phpeclipse.preferences.PHPPreferencesMessages";//$NON-NLS-1$
-
-       private static ResourceBundle resourceBundle= ResourceBundle.getBundle(RESOURCE_BUNDLE);
-
-       private PHPPreferencesMessages() {
-       }
-
-       public static String getString(String key) {
-               try {
-                       return resourceBundle.getString(key);
-               } catch (MissingResourceException e) {
-                       return '!' + key + '!';
-               }
-       }
-       
-       public static String getFormattedString(String key, String arg) {
-               return getFormattedString(key, new String[] { arg });
-       }
-       
-       public static String getFormattedString(String key, String[] args) {
-               return MessageFormat.format(getString(key), args);      
-       }
-       
-       public static ResourceBundle getResourceBundle() {
-               return resourceBundle;
-       }
+  public static ResourceBundle getResourceBundle() {
+    return resourceBundle;
+  }
 }
index 98d1cff..618e810 100644 (file)
@@ -24,124 +24,129 @@ import org.eclipse.swt.widgets.Control;
 import org.eclipse.swt.widgets.Table;
 import org.eclipse.swt.widgets.TableColumn;
 import org.eclipse.ui.ISharedImages;
-import org.eclipse.ui.IWorkbench; 
+import org.eclipse.ui.IWorkbench;
 import net.sourceforge.phpeclipse.PHPeclipsePlugin;
-import net.sourceforge.phpeclipse.resourcesview.PHPProject; 
+import net.sourceforge.phpeclipse.resourcesview.PHPProject;
 
 public class PHPProjectLibraryPage {
-       protected PHPProject workingProject;
+  protected PHPProject workingProject;
 
-       protected PHPProjectLibraryPage(PHPProject theWorkingProject) {
-               super();
-               workingProject = theWorkingProject;
-       }
-
-       protected Control getControl(Composite parent) {
-               Composite composite = new Composite(parent, SWT.NONE);
-               composite.setLayout(new FillLayout());
-
-               Table projectsTable = new Table(composite, SWT.CHECK | SWT.BORDER | SWT.MULTI | SWT.FULL_SELECTION);
-               projectsTable.setHeaderVisible(false);
-               projectsTable.setLinesVisible(false);
-               projectsTable.computeSize(SWT.DEFAULT, SWT.DEFAULT);
-
-               TableColumn tableColumn = new TableColumn(projectsTable, SWT.NONE);
-               tableColumn.setWidth(200);
-               tableColumn.setText(PHPPreferencesMessages.getString("PHPProjectLibraryPage.project")); //$NON-NLS-1$
-
-               CheckboxTableViewer projectsTableViewer = new CheckboxTableViewer(projectsTable);
-               projectsTableViewer.addCheckStateListener(new ICheckStateListener() {
-                       public void checkStateChanged(CheckStateChangedEvent event) {
-                               projectCheckedUnchecked(event);
-                       }
-               });
-
-               projectsTableViewer.setContentProvider(getContentProvider());
-               projectsTableViewer.setLabelProvider(getLabelProvider());
-
-               projectsTableViewer.setInput(getWorkspaceProjects());
-               projectsTableViewer.setCheckedElements(workingProject.getReferencedProjects().toArray());
-
-               return composite;
-       }
-
-       protected void projectCheckedUnchecked(CheckStateChangedEvent event) {
-               IProject checkEventProject = (IProject) event.getElement();
-               if (event.getChecked())
-                       getWorkingProject().addLoadPathEntry(checkEventProject);
-               else
-                       getWorkingProject().removeLoadPathEntry(checkEventProject);
-       }
-
-       protected PHPProject getWorkingProject() {
-               return workingProject;
-       }
-
-       protected List getWorkspaceProjects() {
-               IWorkspaceRoot root = PHPeclipsePlugin.getWorkspace().getRoot();
-               return Arrays.asList(root.getProjects());
-       }
-
-       protected ITableLabelProvider getLabelProvider() {
-               ITableLabelProvider labelProvider = new ITableLabelProvider() {
-                       public Image getColumnImage(Object element, int columnIndex) {
-                               IWorkbench workbench= PHPeclipsePlugin.getDefault().getWorkbench();
-                               return workbench.getSharedImages().getImage(ISharedImages.IMG_OBJ_PROJECT);
-                       }
-
-                       public String getColumnText(Object element, int columnIndex) {
-                               if (element instanceof IProject)
-                                       return ((IProject) element).getName();
-
-                               return PHPPreferencesMessages.getString("PHPProjectLibraryPage.elementNotIProject"); //$NON-NLS-1$
-                       }
-
-                       public void addListener(ILabelProviderListener listener) {}
-
-                       public void dispose() {}
-
-                       public boolean isLabelProperty(Object element, String property) {
-                               return false;
-                       }
-
-                       public void removeListener(ILabelProviderListener listener) {}
-               };
-
-               return labelProvider;
-       }
-
-       protected IContentProvider getContentProvider() {
-               IStructuredContentProvider contentProvider = new IStructuredContentProvider() {
-                       protected List phpProjects;
-
-                       public Object[] getElements(Object inputElement) {
-                               return phpProjects.toArray();
-                       }
-
-                       public void dispose() {}
-
-                       public void inputChanged(Viewer viewer, Object oldInput, Object newInput) {
-                               phpProjects = new ArrayList();
-
-                               if (!(newInput instanceof List))
-                                       return;
-
-                               Iterator workspaceProjectsIterator = ((List) newInput).iterator();
-                               while (workspaceProjectsIterator.hasNext()) {
-                                       Object anObject = workspaceProjectsIterator.next();
-                                       if (anObject instanceof IProject) {
-                                               IProject project = (IProject) anObject;
-                                               if (project.getName() != workingProject.getProject().getName()) {
-                                                       try {
-                                                               if (project.hasNature(PHPeclipsePlugin.PHP_NATURE_ID))
-                                                                       phpProjects.add(project);
-                                                       } catch (CoreException e) {}
-                                               }
-                                       }
-                               }
-                       }
-               };
-
-               return contentProvider;
-       }
+  protected PHPProjectLibraryPage(PHPProject theWorkingProject) {
+    super();
+    workingProject = theWorkingProject;
+  }
+
+  protected Control getControl(Composite parent) {
+    Composite composite = new Composite(parent, SWT.NONE);
+    composite.setLayout(new FillLayout());
+
+    Table projectsTable = new Table(composite, SWT.CHECK | SWT.BORDER | SWT.MULTI | SWT.FULL_SELECTION);
+    projectsTable.setHeaderVisible(false);
+    projectsTable.setLinesVisible(false);
+    projectsTable.computeSize(SWT.DEFAULT, SWT.DEFAULT);
+
+    TableColumn tableColumn = new TableColumn(projectsTable, SWT.NONE);
+    tableColumn.setWidth(200);
+    tableColumn.setText(PHPPreferencesMessages.getString("PHPProjectLibraryPage.project")); //$NON-NLS-1$
+
+    CheckboxTableViewer projectsTableViewer = new CheckboxTableViewer(projectsTable);
+    projectsTableViewer.addCheckStateListener(new ICheckStateListener() {
+      public void checkStateChanged(CheckStateChangedEvent event) {
+        projectCheckedUnchecked(event);
+      }
+    });
+
+    projectsTableViewer.setContentProvider(getContentProvider());
+    projectsTableViewer.setLabelProvider(getLabelProvider());
+
+    projectsTableViewer.setInput(getWorkspaceProjects());
+    projectsTableViewer.setCheckedElements(workingProject.getReferencedProjects().toArray());
+
+    return composite;
+  }
+
+  protected void projectCheckedUnchecked(CheckStateChangedEvent event) {
+    IProject checkEventProject = (IProject) event.getElement();
+    if (event.getChecked())
+      getWorkingProject().addLoadPathEntry(checkEventProject);
+    else
+      getWorkingProject().removeLoadPathEntry(checkEventProject);
+  }
+
+  protected PHPProject getWorkingProject() {
+    return workingProject;
+  }
+
+  protected List getWorkspaceProjects() {
+    IWorkspaceRoot root = PHPeclipsePlugin.getWorkspace().getRoot();
+    return Arrays.asList(root.getProjects());
+  }
+
+  protected ITableLabelProvider getLabelProvider() {
+    ITableLabelProvider labelProvider = new ITableLabelProvider() {
+      public Image getColumnImage(Object element, int columnIndex) {
+        IWorkbench workbench = PHPeclipsePlugin.getDefault().getWorkbench();
+        return workbench.getSharedImages().getImage(ISharedImages.IMG_OBJ_PROJECT);
+      }
+
+      public String getColumnText(Object element, int columnIndex) {
+        if (element instanceof IProject)
+          return ((IProject) element).getName();
+
+        return PHPPreferencesMessages.getString("PHPProjectLibraryPage.elementNotIProject"); //$NON-NLS-1$
+      }
+
+      public void addListener(ILabelProviderListener listener) {
+      }
+
+      public void dispose() {
+      }
+
+      public boolean isLabelProperty(Object element, String property) {
+        return false;
+      }
+
+      public void removeListener(ILabelProviderListener listener) {
+      }
+    };
+
+    return labelProvider;
+  }
+
+  protected IContentProvider getContentProvider() {
+    IStructuredContentProvider contentProvider = new IStructuredContentProvider() {
+      protected List phpProjects;
+
+      public Object[] getElements(Object inputElement) {
+        return phpProjects.toArray();
+      }
+
+      public void dispose() {
+      }
+
+      public void inputChanged(Viewer viewer, Object oldInput, Object newInput) {
+        phpProjects = new ArrayList();
+
+        if (!(newInput instanceof List))
+          return;
+
+        Iterator workspaceProjectsIterator = ((List) newInput).iterator();
+        while (workspaceProjectsIterator.hasNext()) {
+          Object anObject = workspaceProjectsIterator.next();
+          if (anObject instanceof IProject) {
+            IProject project = (IProject) anObject;
+            if (project.getName() != workingProject.getProject().getName()) {
+              try {
+                if (project.hasNature(PHPeclipsePlugin.PHP_NATURE_ID))
+                  phpProjects.add(project);
+              } catch (CoreException e) {
+              }
+            }
+          }
+        }
+      }
+    };
+
+    return contentProvider;
+  }
 }
\ No newline at end of file
index fa07e17..55e6f90 100644 (file)
@@ -20,78 +20,78 @@ import org.eclipse.ui.IWorkbenchPropertyPage;
 import org.eclipse.ui.dialogs.PropertyPage;
 
 public class PHPProjectPropertyPage extends PropertyPage implements IWorkbenchPropertyPage {
-       protected PHPProjectLibraryPage projectsPage;
-       protected PHPProject workingProject;
-       
-       public PHPProjectPropertyPage() {
-       }
-
-       protected Control createContents(Composite parent)  {
-               noDefaultAndApplyButton();
-
-               workingProject = getPHPProject();
-               if (workingProject == null || !workingProject.getProject().isOpen())
-                       return createClosedProjectPageContents(parent);
-
-               return createProjectPageContents(parent);
-       }
-       
-       protected PHPProject getPHPProject() {
-               IAdaptable selectedElement = getElement();
-               if (selectedElement == null)
-                       return null;
-
-               if (selectedElement instanceof PHPProject)
-                       return (PHPProject) selectedElement;
-                       
-               if (selectedElement instanceof IProject) {
-                       IProject simpleProject = (IProject) selectedElement;
-                       try {
-                               if (simpleProject.hasNature(PHPeclipsePlugin.PHP_NATURE_ID)) {
-                                       PHPProject phpProject = new PHPProject();
-                                       phpProject.setProject(simpleProject);
-                                       return phpProject;
-                               }
-                       } catch(CoreException e) {
-                               PHPeclipsePlugin.log(e);
-                       }
-               }
-               
-               return null;
-       }
-       
-       protected Control createClosedProjectPageContents(Composite parent) {
-               Label label = new Label(parent, SWT.NONE);
-               label.setText(PHPPreferencesMessages.getString("PHPProjectPropertyPage.phpProjectClosed")); //$NON-NLS-1$
-               
-               return label;
-       }
-       
-       protected Control createProjectPageContents(Composite parent) {
-               TabFolder tabFolder = new TabFolder(parent, SWT.NONE);
-               tabFolder.setLayout(new GridLayout());  
-               tabFolder.setLayoutData(new GridData(GridData.FILL_BOTH));
-               tabFolder.addSelectionListener(new SelectionAdapter() {
-                       public void widgetSelected(SelectionEvent e) {
-                               //tabChanged(e.item);
-                       }       
-               });
-
-               projectsPage = new PHPProjectLibraryPage(workingProject);               
-               TabItem tabItem = new TabItem(tabFolder, SWT.NONE);
-               tabItem.setText(PHPPreferencesMessages.getString("PHPProjectLibraryPage.tabName")); //$NON-NLS-1$
-//             tabItem.setData(projectsPage);
-               tabItem.setControl(projectsPage.getControl(tabFolder));
-
-               return tabFolder;
-       }
-       public boolean performOk() {
-               try {
-                       projectsPage.getWorkingProject().save();
-               } catch (CoreException e) {
+  protected PHPProjectLibraryPage projectsPage;
+  protected PHPProject workingProject;
+
+  public PHPProjectPropertyPage() {
+  }
+
+  protected Control createContents(Composite parent) {
+    noDefaultAndApplyButton();
+
+    workingProject = getPHPProject();
+    if (workingProject == null || !workingProject.getProject().isOpen())
+      return createClosedProjectPageContents(parent);
+
+    return createProjectPageContents(parent);
+  }
+
+  protected PHPProject getPHPProject() {
+    IAdaptable selectedElement = getElement();
+    if (selectedElement == null)
+      return null;
+
+    if (selectedElement instanceof PHPProject)
+      return (PHPProject) selectedElement;
+
+    if (selectedElement instanceof IProject) {
+      IProject simpleProject = (IProject) selectedElement;
+      try {
+        if (simpleProject.hasNature(PHPeclipsePlugin.PHP_NATURE_ID)) {
+          PHPProject phpProject = new PHPProject();
+          phpProject.setProject(simpleProject);
+          return phpProject;
+        }
+      } catch (CoreException e) {
+        PHPeclipsePlugin.log(e);
+      }
+    }
+
+    return null;
+  }
+
+  protected Control createClosedProjectPageContents(Composite parent) {
+    Label label = new Label(parent, SWT.NONE);
+    label.setText(PHPPreferencesMessages.getString("PHPProjectPropertyPage.phpProjectClosed")); //$NON-NLS-1$
+
+    return label;
+  }
+
+  protected Control createProjectPageContents(Composite parent) {
+    TabFolder tabFolder = new TabFolder(parent, SWT.NONE);
+    tabFolder.setLayout(new GridLayout());
+    tabFolder.setLayoutData(new GridData(GridData.FILL_BOTH));
+    tabFolder.addSelectionListener(new SelectionAdapter() {
+      public void widgetSelected(SelectionEvent e) {
+        //tabChanged(e.item);
+      }
+    });
+
+    projectsPage = new PHPProjectLibraryPage(workingProject);
+    TabItem tabItem = new TabItem(tabFolder, SWT.NONE);
+    tabItem.setText(PHPPreferencesMessages.getString("PHPProjectLibraryPage.tabName")); //$NON-NLS-1$
+    //         tabItem.setData(projectsPage);
+    tabItem.setControl(projectsPage.getControl(tabFolder));
+
+    return tabFolder;
+  }
+  public boolean performOk() {
+    try {
+      projectsPage.getWorkingProject().save();
+    } catch (CoreException e) {
       PHPeclipsePlugin.log(e);
-               }
-               return super.performOk();
-       }
+    }
+    return super.performOk();
+  }
 
 }