From 07ca3fee800b114f83b9c054fce359078185e4f3 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Jindra=20Pet=F8=EDk?= Date: Mon, 11 Jul 2011 19:08:16 +0200 Subject: [PATCH] AS3 - Editing method parameters --- trunk/lib/jsyntaxpane-0.9.5.jar | Bin 433118 -> 443452 bytes .../jpexs/asdec/abc/avm2/ConstantPool.java | 32 + .../asdec/abc/gui/DecompiledEditorPane.java | 1 + .../asdec/abc/gui/MethodBodyParamsPanel.java | 4 +- .../jpexs/asdec/abc/gui/MethodInfoPanel.java | 106 ++ .../asdec/abc/gui/MethodTraitDetailPanel.java | 29 +- .../methodinfo_parser/MethodInfoLexer.java | 1036 +++++++++++++++++ .../methodinfo_parser/MethodInfoParser.java | 215 ++++ .../abc/methodinfo_parser/ParseException.java | 33 + .../abc/methodinfo_parser/ParsedSymbol.java | 67 ++ .../abc/methodinfo_parser/methodinfo.flex | 160 +++ .../com/jpexs/asdec/abc/types/MethodInfo.java | 36 + .../com/jpexs/asdec/abc/types/ValueKind.java | 20 +- 13 files changed, 1719 insertions(+), 20 deletions(-) create mode 100644 trunk/src/com/jpexs/asdec/abc/gui/MethodInfoPanel.java create mode 100644 trunk/src/com/jpexs/asdec/abc/methodinfo_parser/MethodInfoLexer.java create mode 100644 trunk/src/com/jpexs/asdec/abc/methodinfo_parser/MethodInfoParser.java create mode 100644 trunk/src/com/jpexs/asdec/abc/methodinfo_parser/ParseException.java create mode 100644 trunk/src/com/jpexs/asdec/abc/methodinfo_parser/ParsedSymbol.java create mode 100644 trunk/src/com/jpexs/asdec/abc/methodinfo_parser/methodinfo.flex diff --git a/trunk/lib/jsyntaxpane-0.9.5.jar b/trunk/lib/jsyntaxpane-0.9.5.jar index 9339ba0e7082326381bf0555a202e4cf281642c7..e45b25bd573f468ceca1afe7c9008168c56e51a6 100644 GIT binary patch delta 14716 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 h.startPos) && (pos < h.startPos + h.len)) { diff --git a/trunk/src/com/jpexs/asdec/abc/gui/MethodBodyParamsPanel.java b/trunk/src/com/jpexs/asdec/abc/gui/MethodBodyParamsPanel.java index 2380a21cd..6845de880 100644 --- a/trunk/src/com/jpexs/asdec/abc/gui/MethodBodyParamsPanel.java +++ b/trunk/src/com/jpexs/asdec/abc/gui/MethodBodyParamsPanel.java @@ -84,12 +84,14 @@ public class MethodBodyParamsPanel extends JPanel { maxScopeDepthField.setText("" + body.max_scope_depth); } - public void save() { + public boolean save() { if (body != null) { body.max_stack = Integer.parseInt(maxStackField.getText()); body.max_regs = Integer.parseInt(localCountField.getText()); body.init_scope_depth = Integer.parseInt(initScopeDepthField.getText()); body.max_scope_depth = Integer.parseInt(maxScopeDepthField.getText()); + return true; } + return false; } } diff --git a/trunk/src/com/jpexs/asdec/abc/gui/MethodInfoPanel.java b/trunk/src/com/jpexs/asdec/abc/gui/MethodInfoPanel.java new file mode 100644 index 000000000..c8e539152 --- /dev/null +++ b/trunk/src/com/jpexs/asdec/abc/gui/MethodInfoPanel.java @@ -0,0 +1,106 @@ +/* + * Copyright (C) 2011 JPEXS + * + * 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 (at your option) 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 com.jpexs.asdec.abc.gui; + +import com.jpexs.asdec.abc.ABC; +import com.jpexs.asdec.abc.methodinfo_parser.MethodInfoParser; +import com.jpexs.asdec.abc.methodinfo_parser.ParseException; +import com.jpexs.asdec.abc.types.MethodInfo; +import com.jpexs.asdec.helpers.Helper; +import java.awt.BorderLayout; +import javax.swing.JLabel; +import javax.swing.JOptionPane; +import javax.swing.JPanel; +import javax.swing.JScrollPane; + +/** + * + * @author JPEXS + */ +public class MethodInfoPanel extends JPanel { + public LineMarkedEditorPane paramEditor; + private MethodInfo methodInfo; + private ABC abc; + public MethodInfoPanel() + { + paramEditor=new LineMarkedEditorPane(); + setLayout(new BorderLayout()); + add(new JLabel("Parameters:"),BorderLayout.NORTH); + add(new JScrollPane(paramEditor), BorderLayout.CENTER); + paramEditor.setContentType("text/flasm3_methodinfo"); + } + + public void load(int methodInfoIndex,ABC abc) + { + this.abc=abc; + if(methodInfoIndex<=0) + { + paramEditor.setText(""); + } + this.methodInfo=abc.method_info[methodInfoIndex]; + int p=0; + String ret=""; + int optParPos=0; + if(methodInfo.flagHas_optional()) + { + optParPos=methodInfo.param_types.length-methodInfo.optional.length; + } + for(int ptype:methodInfo.param_types) + { + if(p>0){ + ret+=",\n"; + } + if(methodInfo.flagHas_paramnames()) + { + ret=ret+abc.constants.constant_string[methodInfo.paramNames[p]]; + }else{ + ret=ret+"param"+(p+1); + } + ret+=":"; + if(ptype==0){ + ret+="*"; + }else{ + ret+="m["+ptype+"]\""+Helper.escapeString(abc.constants.constant_multiname[ptype].toString(abc.constants))+"\""; + } + if(methodInfo.flagHas_optional()) + { + if(p>=optParPos) + { + ret+="="+methodInfo.optional[p-optParPos].toString(abc.constants); + } + } + p++; + } + if(methodInfo.flagNeed_rest()){ + ret+=",\n... rest"; + } + paramEditor.setText(ret); + } + + public boolean save() + { + try { + MethodInfoParser.parse(paramEditor.getText(), methodInfo, abc); + } catch (ParseException ex) { + JOptionPane.showMessageDialog(paramEditor, ex.text, "MethodInfo Error", JOptionPane.ERROR_MESSAGE); + return false; + } + return true; + } +} diff --git a/trunk/src/com/jpexs/asdec/abc/gui/MethodTraitDetailPanel.java b/trunk/src/com/jpexs/asdec/abc/gui/MethodTraitDetailPanel.java index 179aac880..e27736953 100644 --- a/trunk/src/com/jpexs/asdec/abc/gui/MethodTraitDetailPanel.java +++ b/trunk/src/com/jpexs/asdec/abc/gui/MethodTraitDetailPanel.java @@ -29,23 +29,34 @@ public class MethodTraitDetailPanel extends JTabbedPane implements TraitDetail { public MethodCodePanel methodCodePanel; public MethodBodyParamsPanel methodBodyParamsPanel; + public MethodInfoPanel methodInfoPanel; public MethodTraitDetailPanel() { methodCodePanel = new MethodCodePanel(); methodBodyParamsPanel = new MethodBodyParamsPanel(); + methodInfoPanel=new MethodInfoPanel(); + addTab("MethodInfo",methodInfoPanel); addTab("MethodBody Code", methodCodePanel); - addTab("MethodBody params", new JScrollPane(methodBodyParamsPanel)); - + addTab("MethodBody params", new JScrollPane(methodBodyParamsPanel)); } public boolean save() { - if (methodCodePanel.sourceTextArea.save(Main.abcMainFrame.abc.constants)) { - methodBodyParamsPanel.save(); - int lasttrait = Main.abcMainFrame.decompiledTextArea.lastTraitIndex; - Main.abcMainFrame.decompiledTextArea.reloadClass(); - Main.abcMainFrame.decompiledTextArea.gotoTrait(lasttrait); - return true; + if(!methodInfoPanel.save()) + { + return false; } - return false; + if (!methodCodePanel.sourceTextArea.save(Main.abcMainFrame.abc.constants)) + { + return false; + } + if(!methodBodyParamsPanel.save()) + { + return false; + } + + int lasttrait = Main.abcMainFrame.decompiledTextArea.lastTraitIndex; + Main.abcMainFrame.decompiledTextArea.reloadClass(); + Main.abcMainFrame.decompiledTextArea.gotoTrait(lasttrait); + return true; } } diff --git a/trunk/src/com/jpexs/asdec/abc/methodinfo_parser/MethodInfoLexer.java b/trunk/src/com/jpexs/asdec/abc/methodinfo_parser/MethodInfoLexer.java new file mode 100644 index 000000000..d44941d1b --- /dev/null +++ b/trunk/src/com/jpexs/asdec/abc/methodinfo_parser/MethodInfoLexer.java @@ -0,0 +1,1036 @@ +/* The following code was generated by JFlex 1.4.3 on 11.7.11 15:46 */ + +/* Method info lexer specification */ + +package com.jpexs.asdec.abc.methodinfo_parser; + + +/** + * This class is a scanner generated by + * JFlex 1.4.3 + * on 11.7.11 15:46 from the specification file + * D:/Dokumenty/Programovani/JavaSE/ASDec/trunk/src/com/jpexs/asdec/abc/methodinfo_parser/methodinfo.flex + */ +public final class MethodInfoLexer { + + /** This character denotes the end of file */ + public static final int YYEOF = -1; + + /** initial size of the lookahead buffer */ + private static final int ZZ_BUFFERSIZE = 16384; + + /** lexical states */ + public static final int STRING = 2; + public static final int YYINITIAL = 0; + + /** + * ZZ_LEXSTATE[l] is the state in the DFA for the lexical state l + * ZZ_LEXSTATE[l+1] is the state in the DFA for the lexical state l + * at the beginning of a line + * l is of the form l = 2*k, k a non negative integer + */ + private static final int ZZ_LEXSTATE[] = { + 0, 0, 1, 1 + }; + + /** + * Translates characters to character classes + */ + private static final String ZZ_CMAP_PACKED = + "\11\5\1\3\1\2\1\0\1\3\1\1\16\5\4\0\1\3\1\0"+ + "\1\42\1\0\1\4\2\0\1\56\2\0\1\45\1\37\1\44\1\7"+ + "\1\35\1\0\1\6\3\57\4\40\2\10\1\43\2\0\1\46\3\0"+ + "\4\4\1\36\6\4\1\31\1\4\1\25\1\4\1\17\12\4\1\12"+ + "\1\41\1\13\1\0\1\4\1\0\1\32\1\27\1\50\1\51\1\24"+ + "\1\55\1\53\1\4\1\21\1\4\1\52\1\33\1\11\1\14\1\20"+ + "\1\47\1\4\1\30\1\15\1\22\1\26\1\23\1\4\1\54\2\4"+ + "\1\16\1\0\1\34\1\0\41\5\2\0\4\4\4\0\1\4\2\0"+ + "\1\5\7\0\1\4\4\0\1\4\5\0\27\4\1\0\37\4\1\0"+ + "\u013f\4\31\0\162\4\4\0\14\4\16\0\5\4\11\0\1\4\21\0"+ + "\130\5\5\0\23\5\12\0\1\4\13\0\1\4\1\0\3\4\1\0"+ + "\1\4\1\0\24\4\1\0\54\4\1\0\46\4\1\0\5\4\4\0"+ + "\202\4\1\0\4\5\3\0\105\4\1\0\46\4\2\0\2\4\6\0"+ + "\20\4\41\0\46\4\2\0\1\4\7\0\47\4\11\0\21\5\1\0"+ + "\27\5\1\0\3\5\1\0\1\5\1\0\2\5\1\0\1\5\13\0"+ + "\33\4\5\0\3\4\15\0\4\5\14\0\6\5\13\0\32\4\5\0"+ + "\13\4\16\5\7\0\12\5\4\0\2\4\1\5\143\4\1\0\1\4"+ + "\10\5\1\0\6\5\2\4\2\5\1\0\4\5\2\4\12\5\3\4"+ + "\2\0\1\4\17\0\1\5\1\4\1\5\36\4\33\5\2\0\3\4"+ + "\60\0\46\4\13\5\1\4\u014f\0\3\5\66\4\2\0\1\5\1\4"+ + "\20\5\2\0\1\4\4\5\3\0\12\4\2\5\2\0\12\5\21\0"+ + "\3\5\1\0\10\4\2\0\2\4\2\0\26\4\1\0\7\4\1\0"+ + "\1\4\3\0\4\4\2\0\1\5\1\4\7\5\2\0\2\5\2\0"+ + "\3\5\11\0\1\5\4\0\2\4\1\0\3\4\2\5\2\0\12\5"+ + "\4\4\15\0\3\5\1\0\6\4\4\0\2\4\2\0\26\4\1\0"+ + "\7\4\1\0\2\4\1\0\2\4\1\0\2\4\2\0\1\5\1\0"+ + "\5\5\4\0\2\5\2\0\3\5\13\0\4\4\1\0\1\4\7\0"+ + "\14\5\3\4\14\0\3\5\1\0\11\4\1\0\3\4\1\0\26\4"+ + "\1\0\7\4\1\0\2\4\1\0\5\4\2\0\1\5\1\4\10\5"+ + "\1\0\3\5\1\0\3\5\2\0\1\4\17\0\2\4\2\5\2\0"+ + "\12\5\1\0\1\4\17\0\3\5\1\0\10\4\2\0\2\4\2\0"+ + "\26\4\1\0\7\4\1\0\2\4\1\0\5\4\2\0\1\5\1\4"+ + "\6\5\3\0\2\5\2\0\3\5\10\0\2\5\4\0\2\4\1\0"+ + "\3\4\4\0\12\5\1\0\1\4\20\0\1\5\1\4\1\0\6\4"+ + "\3\0\3\4\1\0\4\4\3\0\2\4\1\0\1\4\1\0\2\4"+ + "\3\0\2\4\3\0\3\4\3\0\10\4\1\0\3\4\4\0\5\5"+ + "\3\0\3\5\1\0\4\5\11\0\1\5\17\0\11\5\11\0\1\4"+ + "\7\0\3\5\1\0\10\4\1\0\3\4\1\0\27\4\1\0\12\4"+ + "\1\0\5\4\4\0\7\5\1\0\3\5\1\0\4\5\7\0\2\5"+ + "\11\0\2\4\4\0\12\5\22\0\2\5\1\0\10\4\1\0\3\4"+ + "\1\0\27\4\1\0\12\4\1\0\5\4\2\0\1\5\1\4\7\5"+ + "\1\0\3\5\1\0\4\5\7\0\2\5\7\0\1\4\1\0\2\4"+ + "\4\0\12\5\22\0\2\5\1\0\10\4\1\0\3\4\1\0\27\4"+ + "\1\0\20\4\4\0\6\5\2\0\3\5\1\0\4\5\11\0\1\5"+ + "\10\0\2\4\4\0\12\5\22\0\2\5\1\0\22\4\3\0\30\4"+ + "\1\0\11\4\1\0\1\4\2\0\7\4\3\0\1\5\4\0\6\5"+ + "\1\0\1\5\1\0\10\5\22\0\2\5\15\0\60\4\1\5\2\4"+ + "\7\5\4\0\10\4\10\5\1\0\12\5\47\0\2\4\1\0\1\4"+ + "\2\0\2\4\1\0\1\4\2\0\1\4\6\0\4\4\1\0\7\4"+ + "\1\0\3\4\1\0\1\4\1\0\1\4\2\0\2\4\1\0\4\4"+ + "\1\5\2\4\6\5\1\0\2\5\1\4\2\0\5\4\1\0\1\4"+ + "\1\0\6\5\2\0\12\5\2\0\2\4\42\0\1\4\27\0\2\5"+ + "\6\0\12\5\13\0\1\5\1\0\1\5\1\0\1\5\4\0\2\5"+ + "\10\4\1\0\42\4\6\0\24\5\1\0\2\5\4\4\4\0\10\5"+ + "\1\0\44\5\11\0\1\5\71\0\42\4\1\0\5\4\1\0\2\4"+ + "\1\0\7\5\3\0\4\5\6\0\12\5\6\0\6\4\4\5\106\0"+ + "\46\4\12\0\51\4\7\0\132\4\5\0\104\4\5\0\122\4\6\0"+ + "\7\4\1\0\77\4\1\0\1\4\1\0\4\4\2\0\7\4\1\0"+ + "\1\4\1\0\4\4\2\0\47\4\1\0\1\4\1\0\4\4\2\0"+ + "\37\4\1\0\1\4\1\0\4\4\2\0\7\4\1\0\1\4\1\0"+ + "\4\4\2\0\7\4\1\0\7\4\1\0\27\4\1\0\37\4\1\0"+ + "\1\4\1\0\4\4\2\0\7\4\1\0\47\4\1\0\23\4\16\0"+ + "\11\5\56\0\125\4\14\0\u026c\4\2\0\10\4\12\0\32\4\5\0"+ + "\113\4\3\0\3\4\17\0\15\4\1\0\4\4\3\5\13\0\22\4"+ + "\3\5\13\0\22\4\2\5\14\0\15\4\1\0\3\4\1\0\2\5"+ + "\14\0\64\4\40\5\3\0\1\4\3\0\2\4\1\5\2\0\12\5"+ + "\41\0\3\5\2\0\12\5\6\0\130\4\10\0\51\4\1\5\126\0"+ + "\35\4\3\0\14\5\4\0\14\5\12\0\12\5\36\4\2\0\5\4"+ + "\u038b\0\154\4\224\0\234\4\4\0\132\4\6\0\26\4\2\0\6\4"+ + "\2\0\46\4\2\0\6\4\2\0\10\4\1\0\1\4\1\0\1\4"+ + "\1\0\1\4\1\0\37\4\2\0\65\4\1\0\7\4\1\0\1\4"+ + "\3\0\3\4\1\0\7\4\3\0\4\4\2\0\6\4\4\0\15\4"+ + "\5\0\3\4\1\0\7\4\17\0\4\5\32\0\5\5\20\0\2\4"+ + "\23\0\1\4\13\0\4\5\6\0\6\5\1\0\1\4\15\0\1\4"+ + "\40\0\22\4\36\0\15\5\4\0\1\5\3\0\6\5\27\0\1\4"+ + "\4\0\1\4\2\0\12\4\1\0\1\4\3\0\5\4\6\0\1\4"+ + "\1\0\1\4\1\0\1\4\1\0\4\4\1\0\3\4\1\0\7\4"+ + "\3\0\3\4\5\0\5\4\26\0\44\4\u0e81\0\3\4\31\0\11\4"+ + "\6\5\1\0\5\4\2\0\5\4\4\0\126\4\2\0\2\5\2\0"+ + "\3\4\1\0\137\4\5\0\50\4\4\0\136\4\21\0\30\4\70\0"+ + "\20\4\u0200\0\u19b6\4\112\0\u51a6\4\132\0\u048d\4\u0773\0\u2ba4\4\u215c\0"+ + "\u012e\4\2\0\73\4\225\0\7\4\14\0\5\4\5\0\1\4\1\5"+ + "\12\4\1\0\15\4\1\0\5\4\1\0\1\4\1\0\2\4\1\0"+ + "\2\4\1\0\154\4\41\0\u016b\4\22\0\100\4\2\0\66\4\50\0"+ + "\15\4\3\0\20\5\20\0\4\5\17\0\2\4\30\0\3\4\31\0"+ + "\1\4\6\0\5\4\1\0\207\4\2\0\1\5\4\0\1\4\13\0"+ + "\12\5\7\0\32\4\4\0\1\4\1\0\32\4\12\0\132\4\3\0"+ + "\6\4\2\0\6\4\2\0\6\4\2\0\3\4\3\0\2\4\3\0"+ + "\2\4\22\0\3\5\4\0"; + + /** + * Translates characters to character classes + */ + private static final char [] ZZ_CMAP = zzUnpackCMap(ZZ_CMAP_PACKED); + + /** + * Translates DFA states to action switch labels. + */ + private static final int [] ZZ_ACTION = zzUnpackAction(); + + private static final String ZZ_ACTION_PACKED_0 = + "\2\0\2\1\1\2\1\3\1\1\1\3\7\2\1\1"+ + "\1\4\1\5\1\6\1\7\1\10\2\2\1\11\2\12"+ + "\1\1\1\13\1\14\1\0\1\14\2\0\7\2\1\0"+ + "\3\2\1\15\1\16\1\17\1\20\1\21\1\22\1\16"+ + "\1\23\1\24\1\25\1\26\1\14\4\0\6\2\1\27"+ + "\4\2\1\16\2\0\1\30\2\2\1\31\6\2\1\32"+ + "\1\0\7\2\1\33\1\0\1\34\6\2\1\0\4\2"+ + "\1\35\1\36\1\0\1\37\1\40\2\2\1\0\1\41"+ + "\1\42\20\0\1\43"; + + private static int [] zzUnpackAction() { + int [] result = new int[134]; + int offset = 0; + offset = zzUnpackAction(ZZ_ACTION_PACKED_0, offset, result); + return result; + } + + private static int zzUnpackAction(String packed, int offset, int [] result) { + int i = 0; /* index in packed string */ + int j = offset; /* index in unpacked array */ + int l = packed.length(); + while (i < l) { + int count = packed.charAt(i++); + int value = packed.charAt(i++); + do result[j++] = value; while (--count > 0); + } + return j; + } + + + /** + * Translates a state to a row index in the transition table + */ + private static final int [] ZZ_ROWMAP = zzUnpackRowMap(); + + private static final String ZZ_ROWMAP_PACKED_0 = + "\0\0\0\60\0\140\0\220\0\300\0\360\0\u0120\0\u0150"+ + "\0\u0180\0\u01b0\0\u01e0\0\u0210\0\u0240\0\u0270\0\u02a0\0\u02d0"+ + "\0\140\0\140\0\140\0\140\0\140\0\u0300\0\u0330\0\u0360"+ + "\0\u0390\0\140\0\u03c0\0\140\0\360\0\u03f0\0\u0420\0\u0450"+ + "\0\u0480\0\u04b0\0\u04e0\0\u0510\0\u0540\0\u0570\0\u05a0\0\u05d0"+ + "\0\u0600\0\u0630\0\u0660\0\u0690\0\140\0\u06c0\0\140\0\140"+ + "\0\140\0\140\0\u06f0\0\140\0\140\0\140\0\140\0\u0720"+ + "\0\u0720\0\u0750\0\u0780\0\u07b0\0\u07e0\0\u0810\0\u0840\0\u0870"+ + "\0\u08a0\0\u08d0\0\140\0\u0900\0\u0930\0\u0960\0\u0990\0\140"+ + "\0\u09c0\0\u09f0\0\300\0\u0a20\0\u0a50\0\300\0\u0a80\0\u0ab0"+ + "\0\u0ae0\0\u0b10\0\u0b40\0\u0b70\0\140\0\u0ba0\0\u0bd0\0\u0c00"+ + "\0\u0c30\0\u0c60\0\u0c90\0\u0cc0\0\u0cf0\0\300\0\u0d20\0\300"+ + "\0\u0d50\0\u0d80\0\u0db0\0\u0de0\0\u0e10\0\u0e40\0\u0e70\0\u0ea0"+ + "\0\u0ed0\0\u0f00\0\u0f30\0\300\0\300\0\u0f60\0\300\0\300"+ + "\0\u0f90\0\u0fc0\0\u0ff0\0\300\0\300\0\u1020\0\u1050\0\u1080"+ + "\0\u10b0\0\u10e0\0\u1110\0\u1140\0\u1170\0\u11a0\0\u11d0\0\u1200"+ + "\0\u1230\0\u1260\0\u1290\0\u12c0\0\u12f0\0\140"; + + private static int [] zzUnpackRowMap() { + int [] result = new int[134]; + int offset = 0; + offset = zzUnpackRowMap(ZZ_ROWMAP_PACKED_0, offset, result); + return result; + } + + private static int zzUnpackRowMap(String packed, int offset, int [] result) { + int i = 0; /* index in packed string */ + int j = offset; /* index in unpacked array */ + int l = packed.length(); + while (i < l) { + int high = packed.charAt(i++) << 16; + result[j++] = high | packed.charAt(i++); + } + return j; + } + + /** + * The transition table of the DFA + */ + private static final int [] ZZ_TRANS = zzUnpackTrans(); + + private static final String ZZ_TRANS_PACKED_0 = + "\3\3\1\4\1\5\1\3\1\6\1\7\1\10\1\11"+ + "\2\3\1\12\1\13\1\3\2\5\1\14\1\15\1\5"+ + "\1\16\1\5\1\17\5\5\1\3\1\20\1\5\1\3"+ + "\1\10\1\3\1\21\1\22\1\23\1\24\1\25\1\26"+ + "\5\5\1\27\1\3\1\10\1\30\1\31\1\32\36\30"+ + "\1\33\1\34\15\30\63\0\1\4\60\0\3\5\1\0"+ + "\2\5\2\0\2\5\1\0\15\5\2\0\1\5\1\0"+ + "\1\5\6\0\7\5\1\0\1\5\6\0\1\35\1\0"+ + "\1\35\13\0\1\36\10\0\1\37\1\36\1\0\1\35"+ + "\16\0\1\35\6\0\1\35\1\0\1\10\24\0\1\40"+ + "\2\0\1\10\16\0\1\10\6\0\1\10\1\0\1\10"+ + "\13\0\1\36\10\0\1\37\1\36\1\0\1\10\16\0"+ + "\1\10\4\0\3\5\1\0\2\5\1\41\1\0\2\5"+ + "\1\0\15\5\2\0\1\5\1\0\1\5\6\0\7\5"+ + "\1\0\1\5\4\0\3\5\1\0\2\5\2\0\1\5"+ + "\1\42\1\0\7\5\1\43\5\5\2\0\1\5\1\0"+ + "\1\5\6\0\7\5\1\0\1\5\4\0\3\5\1\0"+ + "\2\5\2\0\2\5\1\0\3\5\1\44\11\5\2\0"+ + "\1\5\1\0\1\5\6\0\7\5\1\0\1\5\4\0"+ + "\3\5\1\0\2\5\2\0\1\45\1\5\1\0\15\5"+ + "\2\0\1\5\1\0\1\5\6\0\7\5\1\0\1\5"+ + "\4\0\3\5\1\0\2\5\2\0\2\5\1\0\11\5"+ + "\1\46\3\5\2\0\1\5\1\0\1\5\6\0\7\5"+ + "\1\0\1\5\4\0\3\5\1\0\2\5\2\0\2\5"+ + "\1\0\15\5\2\0\1\5\1\0\1\5\6\0\5\5"+ + "\1\47\1\5\1\0\1\5\4\0\3\5\1\0\2\5"+ + "\2\0\1\50\1\5\1\0\15\5\2\0\1\5\1\0"+ + "\1\5\6\0\7\5\1\0\1\5\6\0\1\37\1\0"+ + "\1\37\24\0\1\51\2\0\1\37\16\0\1\37\4\0"+ + "\3\5\1\0\2\5\2\0\2\5\1\0\11\5\1\52"+ + "\1\5\1\53\1\5\2\0\1\5\1\0\1\5\6\0"+ + "\7\5\1\0\1\5\4\0\3\5\1\0\2\5\2\0"+ + "\2\5\1\0\13\5\1\54\1\5\2\0\1\5\1\0"+ + "\1\5\6\0\7\5\1\0\1\5\1\30\2\0\36\30"+ + "\2\0\15\30\2\0\1\32\55\0\2\55\1\0\3\55"+ + "\1\56\5\55\1\57\5\55\1\60\4\55\1\61\1\62"+ + "\7\55\1\63\1\64\1\65\12\55\1\66\1\67\1\56"+ + "\6\0\1\70\1\71\1\70\26\0\1\71\1\70\16\0"+ + "\1\70\6\0\1\37\1\0\1\37\13\0\1\36\11\0"+ + "\1\36\1\0\1\37\16\0\1\37\6\0\1\37\1\0"+ + "\1\37\27\0\1\37\16\0\1\37\6\0\1\72\1\0"+ + "\1\73\27\0\1\73\16\0\1\73\4\0\3\5\1\0"+ + "\2\5\2\0\2\5\1\74\15\5\2\0\1\5\1\0"+ + "\1\5\6\0\7\5\1\0\1\5\4\0\3\5\1\0"+ + "\2\5\2\0\2\5\1\0\14\5\1\75\2\0\1\5"+ + "\1\0\1\5\6\0\7\5\1\0\1\5\4\0\3\5"+ + "\1\0\2\5\2\0\2\5\1\0\13\5\1\76\1\5"+ + "\2\0\1\5\1\0\1\5\6\0\7\5\1\0\1\5"+ + "\4\0\3\5\1\0\2\5\2\0\2\5\1\0\3\5"+ + "\1\77\11\5\2\0\1\5\1\0\1\5\6\0\7\5"+ + "\1\0\1\5\4\0\3\5\1\0\2\5\2\0\2\5"+ + "\1\0\7\5\1\100\5\5\2\0\1\5\1\0\1\5"+ + "\6\0\7\5\1\0\1\5\4\0\3\5\1\0\2\5"+ + "\2\0\2\5\1\0\15\5\2\0\1\5\1\0\1\5"+ + "\6\0\1\101\6\5\1\0\1\5\4\0\3\5\1\0"+ + "\2\5\2\0\2\5\1\0\15\5\2\0\1\5\1\0"+ + "\1\5\6\0\2\5\1\102\4\5\1\0\1\5\35\0"+ + "\1\103\26\0\3\5\1\0\2\5\2\0\2\5\1\0"+ + "\1\5\1\104\1\105\12\5\2\0\1\5\1\0\1\5"+ + "\6\0\7\5\1\0\1\5\4\0\3\5\1\0\2\5"+ + "\2\0\2\5\1\0\15\5\2\0\1\5\1\0\1\5"+ + "\6\0\1\5\1\106\5\5\1\0\1\5\4\0\3\5"+ + "\1\0\2\5\2\0\2\5\1\0\14\5\1\107\2\0"+ + "\1\5\1\0\1\5\6\0\7\5\1\0\1\5\6\0"+ + "\1\63\31\0\1\63\16\0\1\63\6\0\1\110\31\0"+ + "\1\110\16\0\1\110\6\0\1\70\1\0\1\70\27\0"+ + "\1\70\16\0\1\70\13\0\1\111\52\0\1\73\1\0"+ + "\1\73\2\0\1\111\24\0\1\73\16\0\1\73\17\0"+ + "\1\112\44\0\3\5\1\0\2\5\2\0\2\5\1\0"+ + "\14\5\1\113\2\0\1\5\1\0\1\5\6\0\7\5"+ + "\1\0\1\5\4\0\3\5\1\0\2\5\2\0\2\5"+ + "\1\0\3\5\1\114\11\5\2\0\1\5\1\0\1\5"+ + "\6\0\7\5\1\0\1\5\4\0\3\5\1\0\2\5"+ + "\2\0\2\5\1\0\5\5\1\115\7\5\2\0\1\5"+ + "\1\0\1\5\6\0\7\5\1\0\1\5\4\0\3\5"+ + "\1\0\2\5\2\0\2\5\1\0\5\5\1\116\7\5"+ + "\2\0\1\5\1\0\1\5\6\0\7\5\1\0\1\5"+ + "\4\0\3\5\1\0\2\5\2\0\2\5\1\0\14\5"+ + "\1\117\2\0\1\5\1\0\1\5\6\0\7\5\1\0"+ + "\1\5\4\0\3\5\1\0\2\5\2\0\2\5\1\0"+ + "\5\5\1\120\7\5\2\0\1\5\1\0\1\5\6\0"+ + "\7\5\1\0\1\5\4\0\3\5\1\0\2\5\2\0"+ + "\2\5\1\0\3\5\1\121\11\5\2\0\1\5\1\0"+ + "\1\5\6\0\7\5\1\0\1\5\4\0\3\5\1\0"+ + "\2\5\2\0\2\5\1\0\4\5\1\122\10\5\2\0"+ + "\1\5\1\0\1\5\6\0\7\5\1\0\1\5\4\0"+ + "\3\5\1\0\2\5\2\0\2\5\1\0\15\5\2\0"+ + "\1\5\1\0\1\5\6\0\3\5\1\123\3\5\1\0"+ + "\1\5\4\0\3\5\1\0\2\5\2\0\1\5\1\124"+ + "\1\0\15\5\2\0\1\5\1\0\1\5\6\0\7\5"+ + "\1\0\1\5\42\0\1\125\35\0\1\126\43\0\3\5"+ + "\1\0\2\5\2\0\2\5\1\0\2\5\1\127\12\5"+ + "\2\0\1\5\1\0\1\5\6\0\7\5\1\0\1\5"+ + "\4\0\3\5\1\0\2\5\2\0\2\5\1\0\11\5"+ + "\1\130\3\5\2\0\1\5\1\0\1\5\6\0\7\5"+ + "\1\0\1\5\4\0\3\5\1\0\2\5\2\0\2\5"+ + "\1\0\2\5\1\131\12\5\2\0\1\5\1\0\1\5"+ + "\6\0\7\5\1\0\1\5\4\0\3\5\1\0\2\5"+ + "\2\0\2\5\1\0\15\5\2\0\1\5\1\0\1\5"+ + "\6\0\6\5\1\132\1\0\1\5\4\0\3\5\1\0"+ + "\2\5\2\0\2\5\1\0\5\5\1\133\7\5\2\0"+ + "\1\5\1\0\1\5\6\0\7\5\1\0\1\5\4\0"+ + "\3\5\1\0\2\5\2\0\2\5\1\0\13\5\1\134"+ + "\1\5\2\0\1\5\1\0\1\5\6\0\7\5\1\0"+ + "\1\5\4\0\3\5\1\0\2\5\2\0\2\5\1\0"+ + "\13\5\1\135\1\5\2\0\1\5\1\0\1\5\6\0"+ + "\7\5\1\0\1\5\4\0\3\5\1\0\2\5\2\0"+ + "\2\5\1\0\5\5\1\136\7\5\2\0\1\5\1\0"+ + "\1\5\6\0\7\5\1\0\1\5\15\0\1\137\46\0"+ + "\3\5\1\0\2\5\2\0\2\5\1\0\15\5\2\0"+ + "\1\5\1\0\1\5\6\0\1\5\1\140\5\5\1\0"+ + "\1\5\4\0\3\5\1\0\2\5\2\0\1\141\1\5"+ + "\1\0\15\5\2\0\1\5\1\0\1\5\6\0\7\5"+ + "\1\0\1\5\4\0\3\5\1\0\2\5\2\0\2\5"+ + "\1\0\15\5\2\0\1\5\1\0\1\5\6\0\1\5"+ + "\1\142\5\5\1\0\1\5\4\0\3\5\1\0\2\5"+ + "\2\0\2\5\1\0\2\5\1\143\12\5\2\0\1\5"+ + "\1\0\1\5\6\0\7\5\1\0\1\5\4\0\3\5"+ + "\1\0\2\5\2\0\2\5\1\0\15\5\2\0\1\5"+ + "\1\0\1\5\6\0\1\5\1\144\5\5\1\0\1\5"+ + "\4\0\3\5\1\0\2\5\2\0\2\5\1\0\3\5"+ + "\1\145\11\5\2\0\1\5\1\0\1\5\6\0\7\5"+ + "\1\0\1\5\4\0\3\5\1\0\2\5\2\0\2\5"+ + "\1\0\15\5\2\0\1\5\1\0\1\5\6\0\4\5"+ + "\1\146\2\5\1\0\1\5\21\0\1\147\42\0\3\5"+ + "\1\0\2\5\2\0\2\5\1\0\13\5\1\150\1\5"+ + "\2\0\1\5\1\0\1\5\6\0\7\5\1\0\1\5"+ + "\4\0\3\5\1\0\2\5\2\0\2\5\1\0\2\5"+ + "\1\151\12\5\2\0\1\5\1\0\1\5\6\0\7\5"+ + "\1\0\1\5\4\0\3\5\1\0\2\5\2\0\1\152"+ + "\1\5\1\0\15\5\2\0\1\5\1\0\1\5\6\0"+ + "\7\5\1\0\1\5\4\0\3\5\1\0\2\5\2\0"+ + "\2\5\1\0\3\5\1\153\11\5\2\0\1\5\1\0"+ + "\1\5\6\0\7\5\1\0\1\5\4\0\3\5\1\0"+ + "\2\5\2\0\2\5\1\0\5\5\1\154\7\5\2\0"+ + "\1\5\1\0\1\5\6\0\7\5\1\0\1\5\4\0"+ + "\3\5\1\0\2\5\2\0\2\5\1\0\5\5\1\155"+ + "\7\5\2\0\1\5\1\0\1\5\6\0\7\5\1\0"+ + "\1\5\22\0\1\156\41\0\3\5\1\0\2\5\2\0"+ + "\2\5\1\0\14\5\1\157\2\0\1\5\1\0\1\5"+ + "\6\0\7\5\1\0\1\5\4\0\3\5\1\0\2\5"+ + "\2\0\2\5\1\0\3\5\1\160\11\5\2\0\1\5"+ + "\1\0\1\5\6\0\7\5\1\0\1\5\4\0\3\5"+ + "\1\0\2\5\2\0\2\5\1\0\5\5\1\161\7\5"+ + "\2\0\1\5\1\0\1\5\6\0\7\5\1\0\1\5"+ + "\4\0\3\5\1\0\2\5\2\0\2\5\1\0\5\5"+ + "\1\162\7\5\2\0\1\5\1\0\1\5\6\0\7\5"+ + "\1\0\1\5\21\0\1\163\42\0\3\5\1\0\2\5"+ + "\2\0\2\5\1\0\15\5\2\0\1\5\1\0\1\5"+ + "\6\0\2\5\1\164\4\5\1\0\1\5\4\0\3\5"+ + "\1\0\2\5\2\0\2\5\1\0\15\5\2\0\1\5"+ + "\1\0\1\5\6\0\2\5\1\165\4\5\1\0\1\5"+ + "\23\0\1\166\60\0\1\167\60\0\1\170\60\0\1\171"+ + "\42\0\1\172\75\0\1\173\54\0\1\174\63\0\1\175"+ + "\60\0\1\176\47\0\1\177\60\0\1\200\61\0\1\201"+ + "\63\0\1\202\61\0\1\203\60\0\1\204\60\0\1\205"+ + "\36\0\1\206\44\0"; + + private static int [] zzUnpackTrans() { + int [] result = new int[4896]; + int offset = 0; + offset = zzUnpackTrans(ZZ_TRANS_PACKED_0, offset, result); + return result; + } + + private static int zzUnpackTrans(String packed, int offset, int [] result) { + int i = 0; /* index in packed string */ + int j = offset; /* index in unpacked array */ + int l = packed.length(); + while (i < l) { + int count = packed.charAt(i++); + int value = packed.charAt(i++); + value--; + do result[j++] = value; while (--count > 0); + } + return j; + } + + + /* error codes */ + private static final int ZZ_UNKNOWN_ERROR = 0; + private static final int ZZ_NO_MATCH = 1; + private static final int ZZ_PUSHBACK_2BIG = 2; + + /* error messages for the codes above */ + private static final String ZZ_ERROR_MSG[] = { + "Unkown internal scanner error", + "Error: could not match input", + "Error: pushback value was too large" + }; + + /** + * ZZ_ATTRIBUTE[aState] contains the attributes of state aState + */ + private static final int [] ZZ_ATTRIBUTE = zzUnpackAttribute(); + + private static final String ZZ_ATTRIBUTE_PACKED_0 = + "\2\0\1\11\15\1\5\11\4\1\1\11\1\1\1\11"+ + "\1\1\1\0\1\1\2\0\7\1\1\0\3\1\1\11"+ + "\1\1\4\11\1\1\4\11\1\1\4\0\6\1\1\11"+ + "\4\1\1\11\2\0\12\1\1\11\1\0\10\1\1\0"+ + "\7\1\1\0\6\1\1\0\4\1\1\0\2\1\20\0"+ + "\1\11"; + + private static int [] zzUnpackAttribute() { + int [] result = new int[134]; + int offset = 0; + offset = zzUnpackAttribute(ZZ_ATTRIBUTE_PACKED_0, offset, result); + return result; + } + + private static int zzUnpackAttribute(String packed, int offset, int [] result) { + int i = 0; /* index in packed string */ + int j = offset; /* index in unpacked array */ + int l = packed.length(); + while (i < l) { + int count = packed.charAt(i++); + int value = packed.charAt(i++); + do result[j++] = value; while (--count > 0); + } + return j; + } + + /** the input device */ + private java.io.Reader zzReader; + + /** the current state of the DFA */ + private int zzState; + + /** the current lexical state */ + private int zzLexicalState = YYINITIAL; + + /** this buffer contains the current text to be matched and is + the source of the yytext() string */ + private char zzBuffer[] = new char[ZZ_BUFFERSIZE]; + + /** the textposition at the last accepting state */ + private int zzMarkedPos; + + /** the current text position in the buffer */ + private int zzCurrentPos; + + /** startRead marks the beginning of the yytext() string in the buffer */ + private int zzStartRead; + + /** endRead marks the last character in the buffer, that has been read + from input */ + private int zzEndRead; + + /** number of newlines encountered up to the start of the matched text */ + private int yyline; + + /** the number of characters up to the start of the matched text */ + private int yychar; + + /** + * the number of characters from the last newline up to the start of the + * matched text + */ + private int yycolumn; + + /** + * zzAtBOL == true <=> the scanner is currently at the beginning of a line + */ + private boolean zzAtBOL = true; + + /** zzAtEOF == true <=> the scanner is at the EOF */ + private boolean zzAtEOF; + + /** denotes if the user-EOF-code has already been executed */ + private boolean zzEOFDone; + + /* user code: */ + + StringBuffer string = new StringBuffer(); + boolean isMultiname=false; + long multinameId=0; + + + /** + * Create an empty lexer, yyrset will be called later to reset and assign + * the reader + */ + public MethodInfoLexer() { + + } + + public int yychar() { + return yychar; + } + + public int yyline() { + return yyline+1; + } + + + + /** + * Creates a new scanner + * There is also a java.io.InputStream version of this constructor. + * + * @param in the java.io.Reader to read input from. + */ + public MethodInfoLexer(java.io.Reader in) { + this.zzReader = in; + } + + /** + * Creates a new scanner. + * There is also java.io.Reader version of this constructor. + * + * @param in the java.io.Inputstream to read input from. + */ + public MethodInfoLexer(java.io.InputStream in) { + this(new java.io.InputStreamReader(in)); + } + + /** + * Unpacks the compressed character translation table. + * + * @param packed the packed character translation table + * @return the unpacked character translation table + */ + private static char [] zzUnpackCMap(String packed) { + char [] map = new char[0x10000]; + int i = 0; /* index in packed string */ + int j = 0; /* index in unpacked array */ + while (i < 1768) { + int count = packed.charAt(i++); + char value = packed.charAt(i++); + do map[j++] = value; while (--count > 0); + } + return map; + } + + + /** + * Refills the input buffer. + * + * @return false, iff there was new input. + * + * @exception java.io.IOException if any I/O-Error occurs + */ + private boolean zzRefill() throws java.io.IOException { + + /* first: make room (if you can) */ + if (zzStartRead > 0) { + System.arraycopy(zzBuffer, zzStartRead, + zzBuffer, 0, + zzEndRead-zzStartRead); + + /* translate stored positions */ + zzEndRead-= zzStartRead; + zzCurrentPos-= zzStartRead; + zzMarkedPos-= zzStartRead; + zzStartRead = 0; + } + + /* is the buffer big enough? */ + if (zzCurrentPos >= zzBuffer.length) { + /* if not: blow it up */ + char newBuffer[] = new char[zzCurrentPos*2]; + System.arraycopy(zzBuffer, 0, newBuffer, 0, zzBuffer.length); + zzBuffer = newBuffer; + } + + /* finally: fill the buffer with new input */ + int numRead = zzReader.read(zzBuffer, zzEndRead, + zzBuffer.length-zzEndRead); + + if (numRead > 0) { + zzEndRead+= numRead; + return false; + } + // unlikely but not impossible: read 0 characters, but not at end of stream + if (numRead == 0) { + int c = zzReader.read(); + if (c == -1) { + return true; + } else { + zzBuffer[zzEndRead++] = (char) c; + return false; + } + } + + // numRead < 0 + return true; + } + + + /** + * Closes the input stream. + */ + public final void yyclose() throws java.io.IOException { + zzAtEOF = true; /* indicate end of file */ + zzEndRead = zzStartRead; /* invalidate buffer */ + + if (zzReader != null) + zzReader.close(); + } + + + /** + * Resets the scanner to read from a new input stream. + * Does not close the old reader. + * + * All internal variables are reset, the old input stream + * cannot be reused (internal buffer is discarded and lost). + * Lexical state is set to ZZ_INITIAL. + * + * @param reader the new input stream + */ + public final void yyreset(java.io.Reader reader) { + zzReader = reader; + zzAtBOL = true; + zzAtEOF = false; + zzEOFDone = false; + zzEndRead = zzStartRead = 0; + zzCurrentPos = zzMarkedPos = 0; + yyline = yychar = yycolumn = 0; + zzLexicalState = YYINITIAL; + } + + + /** + * Returns the current lexical state. + */ + public final int yystate() { + return zzLexicalState; + } + + + /** + * Enters a new lexical state + * + * @param newState the new lexical state + */ + public final void yybegin(int newState) { + zzLexicalState = newState; + } + + + /** + * Returns the text matched by the current regular expression. + */ + public final String yytext() { + return new String( zzBuffer, zzStartRead, zzMarkedPos-zzStartRead ); + } + + + /** + * Returns the character at position pos from the + * matched text. + * + * It is equivalent to yytext().charAt(pos), but faster + * + * @param pos the position of the character to fetch. + * A value from 0 to yylength()-1. + * + * @return the character at position pos + */ + public final char yycharat(int pos) { + return zzBuffer[zzStartRead+pos]; + } + + + /** + * Returns the length of the matched text region. + */ + public final int yylength() { + return zzMarkedPos-zzStartRead; + } + + + /** + * Reports an error that occured while scanning. + * + * In a wellformed scanner (no or only correct usage of + * yypushback(int) and a match-all fallback rule) this method + * will only be called with things that "Can't Possibly Happen". + * If this method is called, something is seriously wrong + * (e.g. a JFlex bug producing a faulty scanner etc.). + * + * Usual syntax/scanner level error handling should be done + * in error fallback rules. + * + * @param errorCode the code of the errormessage to display + */ + private void zzScanError(int errorCode) { + String message; + try { + message = ZZ_ERROR_MSG[errorCode]; + } + catch (ArrayIndexOutOfBoundsException e) { + message = ZZ_ERROR_MSG[ZZ_UNKNOWN_ERROR]; + } + + throw new Error(message); + } + + + /** + * Pushes the specified amount of characters back into the input stream. + * + * They will be read again by then next call of the scanning method + * + * @param number the number of characters to be read again. + * This number must not be greater than yylength()! + */ + public void yypushback(int number) { + if ( number > yylength() ) + zzScanError(ZZ_PUSHBACK_2BIG); + + zzMarkedPos -= number; + } + + + /** + * Resumes scanning until the next regular expression is matched, + * the end of input is encountered or an I/O-Error occurs. + * + * @return the next token + * @exception java.io.IOException if any I/O-Error occurs + */ + public ParsedSymbol yylex() throws java.io.IOException, ParseException { + int zzInput; + int zzAction; + + // cached fields: + int zzCurrentPosL; + int zzMarkedPosL; + int zzEndReadL = zzEndRead; + char [] zzBufferL = zzBuffer; + char [] zzCMapL = ZZ_CMAP; + + int [] zzTransL = ZZ_TRANS; + int [] zzRowMapL = ZZ_ROWMAP; + int [] zzAttrL = ZZ_ATTRIBUTE; + + while (true) { + zzMarkedPosL = zzMarkedPos; + + yychar+= zzMarkedPosL-zzStartRead; + + boolean zzR = false; + for (zzCurrentPosL = zzStartRead; zzCurrentPosL < zzMarkedPosL; + zzCurrentPosL++) { + switch (zzBufferL[zzCurrentPosL]) { + case '\u000B': + case '\u000C': + case '\u0085': + case '\u2028': + case '\u2029': + yyline++; + yycolumn = 0; + zzR = false; + break; + case '\r': + yyline++; + yycolumn = 0; + zzR = true; + break; + case '\n': + if (zzR) + zzR = false; + else { + yyline++; + yycolumn = 0; + } + break; + default: + zzR = false; + yycolumn++; + } + } + + if (zzR) { + // peek one character ahead if it is \n (if we have counted one line too much) + boolean zzPeek; + if (zzMarkedPosL < zzEndReadL) + zzPeek = zzBufferL[zzMarkedPosL] == '\n'; + else if (zzAtEOF) + zzPeek = false; + else { + boolean eof = zzRefill(); + zzEndReadL = zzEndRead; + zzMarkedPosL = zzMarkedPos; + zzBufferL = zzBuffer; + if (eof) + zzPeek = false; + else + zzPeek = zzBufferL[zzMarkedPosL] == '\n'; + } + if (zzPeek) yyline--; + } + zzAction = -1; + + zzCurrentPosL = zzCurrentPos = zzStartRead = zzMarkedPosL; + + zzState = ZZ_LEXSTATE[zzLexicalState]; + + + zzForAction: { + while (true) { + + if (zzCurrentPosL < zzEndReadL) + zzInput = zzBufferL[zzCurrentPosL++]; + else if (zzAtEOF) { + zzInput = YYEOF; + break zzForAction; + } + else { + // store back cached positions + zzCurrentPos = zzCurrentPosL; + zzMarkedPos = zzMarkedPosL; + boolean eof = zzRefill(); + // get translated positions and possibly new buffer + zzCurrentPosL = zzCurrentPos; + zzMarkedPosL = zzMarkedPos; + zzBufferL = zzBuffer; + zzEndReadL = zzEndRead; + if (eof) { + zzInput = YYEOF; + break zzForAction; + } + else { + zzInput = zzBufferL[zzCurrentPosL++]; + } + } + int zzNext = zzTransL[ zzRowMapL[zzState] + zzCMapL[zzInput] ]; + if (zzNext == -1) break zzForAction; + zzState = zzNext; + + int zzAttributes = zzAttrL[zzState]; + if ( (zzAttributes & 1) == 1 ) { + zzAction = zzState; + zzMarkedPosL = zzCurrentPosL; + if ( (zzAttributes & 8) == 8 ) break zzForAction; + } + + } + } + + // store back cached position + zzMarkedPos = zzMarkedPosL; + + switch (zzAction < 0 ? zzAction : ZZ_ACTION[zzAction]) { + case 2: + { return new ParsedSymbol(ParsedSymbol.TYPE_IDENTIFIER,yytext()); + } + case 36: break; + case 8: + { return new ParsedSymbol(ParsedSymbol.TYPE_ASSIGN); + } + case 37: break; + case 24: + { return new ParsedSymbol(ParsedSymbol.TYPE_NULL); + } + case 38: break; + case 22: + { string.append( '\'' ); + } + case 39: break; + case 3: + { return new ParsedSymbol(ParsedSymbol.TYPE_INTEGER,new Long(Long.parseLong((yytext())))); + } + case 40: break; + case 33: + { return new ParsedSymbol(ParsedSymbol.TYPE_UNDEFINED); + } + case 41: break; + case 34: + { return new ParsedSymbol(ParsedSymbol.TYPE_PROTECTED); + } + case 42: break; + case 28: + { return new ParsedSymbol(ParsedSymbol.TYPE_STATIC); + } + case 43: break; + case 9: + { string.append( yytext() ); + } + case 44: break; + case 14: + { char val = (char) Integer.parseInt(yytext().substring(1),8); + string.append( val ); + } + case 45: break; + case 29: + { return new ParsedSymbol(ParsedSymbol.TYPE_PRIVATE); + } + case 46: break; + case 5: + { return new ParsedSymbol(ParsedSymbol.TYPE_COLON); + } + case 47: break; + case 18: + { string.append( '\r' ); + } + case 48: break; + case 25: + { return new ParsedSymbol(ParsedSymbol.TYPE_TRUE); + } + case 49: break; + case 6: + { return new ParsedSymbol(ParsedSymbol.TYPE_COMMA); + } + case 50: break; + case 35: + { String s=yytext(); + long ns=Long.parseLong(s.substring(3,s.length()-2)); + return new ParsedSymbol(ParsedSymbol.TYPE_NAMESPACE,new Long(ns)); + } + case 51: break; + case 27: + { return new ParsedSymbol(ParsedSymbol.TYPE_FALSE); + } + case 52: break; + case 11: + { yybegin(YYINITIAL); + // length also includes the trailing quote + if(isMultiname){ + return new ParsedSymbol(ParsedSymbol.TYPE_MULTINAME,new Long(multinameId)); + }else{ + return new ParsedSymbol(ParsedSymbol.TYPE_STRING,string.toString()); + } + } + case 53: break; + case 17: + { string.append( '\b' ); + } + case 54: break; + case 10: + { throw new ParseException("Unterminated string at end of line",yyline+1); + } + case 55: break; + case 4: + { isMultiname=false; + yybegin(STRING); + string.setLength(0); + } + case 56: break; + case 32: + { return new ParsedSymbol(ParsedSymbol.TYPE_EXPLICIT); + } + case 57: break; + case 16: + { string.append( '\t' ); + } + case 58: break; + case 12: + { return new ParsedSymbol(ParsedSymbol.TYPE_FLOAT,new Double(Double.parseDouble((yytext())))); + } + case 59: break; + case 31: + { return new ParsedSymbol(ParsedSymbol.TYPE_INTERNAL); + } + case 60: break; + case 23: + { return new ParsedSymbol(ParsedSymbol.TYPE_DOTS); + } + case 61: break; + case 19: + { string.append( '\\' ); + } + case 62: break; + case 7: + { return new ParsedSymbol(ParsedSymbol.TYPE_STAR); + } + case 63: break; + case 13: + { throw new ParseException("Illegal escape sequence \""+yytext()+"\"",yyline+1); + } + case 64: break; + case 30: + { return new ParsedSymbol(ParsedSymbol.TYPE_PACKAGE); + } + case 65: break; + case 26: + { isMultiname=true; + String s=yytext(); + multinameId=Long.parseLong(s.substring(2,s.length()-2)); + yybegin(STRING); + string.setLength(0); + } + case 66: break; + case 15: + { string.append( '\n' ); + } + case 67: break; + case 21: + { string.append( '\f' ); + } + case 68: break; + case 20: + { string.append( '\"' ); + } + case 69: break; + case 1: + { + } + case 70: break; + default: + if (zzInput == YYEOF && zzStartRead == zzCurrentPos) { + zzAtEOF = true; + { + return new ParsedSymbol(ParsedSymbol.TYPE_EOF); + } + } + else { + zzScanError(ZZ_NO_MATCH); + } + } + } + } + + +} diff --git a/trunk/src/com/jpexs/asdec/abc/methodinfo_parser/MethodInfoParser.java b/trunk/src/com/jpexs/asdec/abc/methodinfo_parser/MethodInfoParser.java new file mode 100644 index 000000000..83b6af2c3 --- /dev/null +++ b/trunk/src/com/jpexs/asdec/abc/methodinfo_parser/MethodInfoParser.java @@ -0,0 +1,215 @@ +/* + * Copyright (C) 2011 JPEXS + * + * 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 (at your option) 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 com.jpexs.asdec.abc.methodinfo_parser; + +import com.jpexs.asdec.abc.ABC; +import com.jpexs.asdec.abc.types.MethodInfo; +import com.jpexs.asdec.abc.types.ValueKind; +import java.io.ByteArrayInputStream; +import java.io.IOException; +import java.util.ArrayList; +import java.util.List; + +/** + * + * @author JPEXS + */ +public class MethodInfoParser { + + public static void parse(String text, MethodInfo update,ABC abc) throws ParseException { + MethodInfoLexer lexer = new MethodInfoLexer(new ByteArrayInputStream(text.getBytes())); + List paramNames=new ArrayList(); + List paramTypes=new ArrayList(); + List optionalValues=new ArrayList(); + boolean hasOptional=false; + boolean needsRest=false; + try { + ParsedSymbol symb; + symb = lexer.yylex(); + while (symb.type != ParsedSymbol.TYPE_EOF) + { + if(symb.type==ParsedSymbol.TYPE_DOTS) + { + needsRest=true; + symb = lexer.yylex(); + if(symb.type!=ParsedSymbol.TYPE_IDENTIFIER) + { + throw new ParseException("Identifier expected", lexer.yyline()); + } + symb = lexer.yylex(); + if(symb.type!=ParsedSymbol.TYPE_EOF) + { + throw new ParseException("End expected after rest params", lexer.yyline()); + } + break; + } + + if(symb.type!=ParsedSymbol.TYPE_IDENTIFIER) + { + throw new ParseException("Identifier expected", lexer.yyline()); + } + paramNames.add((String)symb.value); + symb = lexer.yylex(); + if(symb.type==ParsedSymbol.TYPE_COLON){ + ParsedSymbol symbType=lexer.yylex(); + if(symbType.type==ParsedSymbol.TYPE_STAR) + { + paramTypes.add(new Long(0)); + }else if(symbType.type==ParsedSymbol.TYPE_MULTINAME){ + paramTypes.add((Long)symbType.value); + }else{ + throw new ParseException("Multiname or * expected", lexer.yyline()); + } + ParsedSymbol symbEqual=lexer.yylex(); + if(symbEqual.type==ParsedSymbol.TYPE_ASSIGN) + { + hasOptional=true; + ParsedSymbol symbValue; + String nstype=""; + do{ + symbValue=lexer.yylex(); + if(symbValue.type>=8&&symbValue.type<=13){ + nstype=nstype+symbValue.type+":"; + } + }while(symbValue.type>=8&&symbValue.type<=13); + if((!nstype.equals(""))&&(symbValue.type!=ParsedSymbol.TYPE_NAMESPACE)) + { + throw new ParseException("Namespace expected", lexer.yyline()); + } + int id=0; + switch(symbValue.type) + { + case ParsedSymbol.TYPE_INTEGER: + optionalValues.add(new ValueKind(abc.constants.forceGetIntId((Long)symbValue.value),ValueKind.CONSTANT_Int)); + break; + case ParsedSymbol.TYPE_FLOAT: + optionalValues.add(new ValueKind(abc.constants.forceGetDoubleId((Double)symbValue.value),ValueKind.CONSTANT_Double)); + break; + case ParsedSymbol.TYPE_STRING: + optionalValues.add(new ValueKind(abc.constants.forceGetStringId((String)symbValue.value),ValueKind.CONSTANT_Utf8)); + break; + case ParsedSymbol.TYPE_TRUE: + optionalValues.add(new ValueKind(0,ValueKind.CONSTANT_True)); + break; + case ParsedSymbol.TYPE_FALSE: + optionalValues.add(new ValueKind(0,ValueKind.CONSTANT_False)); + break; + case ParsedSymbol.TYPE_NULL: + optionalValues.add(new ValueKind(0,ValueKind.CONSTANT_Null)); + break; + case ParsedSymbol.TYPE_UNDEFINED: + optionalValues.add(new ValueKind(0,ValueKind.CONSTANT_Undefined)); + break; + case ParsedSymbol.TYPE_NAMESPACE: + if(nstype.equals("9:")){ + optionalValues.add(new ValueKind((int)(long)(Long)symbValue.value,ValueKind.CONSTANT_PackageNamespace)); + }else + if(nstype.equals("9:10:")){ + optionalValues.add(new ValueKind((int)(long)(Long)symbValue.value,ValueKind.CONSTANT_PackageInternalNs)); + }else + if(nstype.equals("13:")){ + optionalValues.add(new ValueKind((int)(long)(Long)symbValue.value,ValueKind.CONSTANT_ProtectedNamespace)); + }else + if(nstype.equals("12:")){ + optionalValues.add(new ValueKind((int)(long)(Long)symbValue.value,ValueKind.CONSTANT_ExplicitNamespace)); + }else + if(nstype.equals("11:13:")){ + optionalValues.add(new ValueKind((int)(long)(Long)symbValue.value,ValueKind.CONSTANT_StaticProtectedNs)); + }else + if(nstype.equals("8:")){ + optionalValues.add(new ValueKind((int)(long)(Long)symbValue.value,ValueKind.CONSTANT_PrivateNs)); + }else if(nstype.equals("")){ + optionalValues.add(new ValueKind((int)(long)(Long)symbValue.value,ValueKind.CONSTANT_Namespace)); + }else{ + throw new ParseException("Invalid type of namespace", lexer.yyline()); + } + break; + default: + throw new ParseException("Unexpected symbol", lexer.yyline()); + } + symb=lexer.yylex(); + if(symb.type==ParsedSymbol.TYPE_COMMA){ + + }else if(symb.type==ParsedSymbol.TYPE_EOF){ + break; + } + }else if(symbEqual.type==ParsedSymbol.TYPE_COMMA){ + if(hasOptional) + { + throw new ParseException("Parameter must have default value", lexer.yyline()); + } + }else if(symbEqual.type==ParsedSymbol.TYPE_EOF){ + if(hasOptional) + { + throw new ParseException("Parameter must have default value", lexer.yyline()); + } + break; + } else { + throw new ParseException("Unexpected symbol", lexer.yyline()); + } + }else if(symb.type==ParsedSymbol.TYPE_COMMA){ + + }else if(symb.type==ParsedSymbol.TYPE_EOF){ + break; + }else{ + throw new ParseException("Unexpected symbol", lexer.yyline()); + } + symb = lexer.yylex(); + } + } catch (IOException iex) { + } + + if(needsRest&&(!optionalValues.isEmpty())){ + throw new ParseException("Rest parameter canot be combined with default values", lexer.yyline()); + } + + update.param_types=new int[paramTypes.size()]; + for(int p=0;p { + /* whitespace */ + {WhiteSpace} { } + {Multiname}\" { + isMultiname=true; + String s=yytext(); + multinameId=Long.parseLong(s.substring(2,s.length()-2)); + yybegin(STRING); + string.setLength(0); + } + /* string literal */ + \" { + isMultiname=false; + yybegin(STRING); + string.setLength(0); + } + + + /* numeric literals */ + + {NumberLiteral} { return new ParsedSymbol(ParsedSymbol.TYPE_INTEGER,new Long(Long.parseLong((yytext())))); } + {FloatLiteral} { return new ParsedSymbol(ParsedSymbol.TYPE_FLOAT,new Double(Double.parseDouble((yytext())))); } + + ":" {return new ParsedSymbol(ParsedSymbol.TYPE_COLON);} + "," {return new ParsedSymbol(ParsedSymbol.TYPE_COMMA);} + "..." {return new ParsedSymbol(ParsedSymbol.TYPE_DOTS);} + "*" {return new ParsedSymbol(ParsedSymbol.TYPE_STAR);} + "=" {return new ParsedSymbol(ParsedSymbol.TYPE_ASSIGN);} + + private {return new ParsedSymbol(ParsedSymbol.TYPE_PRIVATE);} + protected {return new ParsedSymbol(ParsedSymbol.TYPE_PROTECTED);} + package {return new ParsedSymbol(ParsedSymbol.TYPE_PACKAGE);} + internal {return new ParsedSymbol(ParsedSymbol.TYPE_INTERNAL);} + static {return new ParsedSymbol(ParsedSymbol.TYPE_STATIC);} + explicit {return new ParsedSymbol(ParsedSymbol.TYPE_EXPLICIT);} + {Namespace} { + String s=yytext(); + long ns=Long.parseLong(s.substring(3,s.length()-2)); + return new ParsedSymbol(ParsedSymbol.TYPE_NAMESPACE,new Long(ns)); + } + true {return new ParsedSymbol(ParsedSymbol.TYPE_TRUE);} + false {return new ParsedSymbol(ParsedSymbol.TYPE_FALSE);} + null {return new ParsedSymbol(ParsedSymbol.TYPE_NULL);} + undefined {return new ParsedSymbol(ParsedSymbol.TYPE_UNDEFINED);} +{Identifier} { + return new ParsedSymbol(ParsedSymbol.TYPE_IDENTIFIER,yytext()); } +} + + { + \" { + yybegin(YYINITIAL); + // length also includes the trailing quote + if(isMultiname){ + return new ParsedSymbol(ParsedSymbol.TYPE_MULTINAME,new Long(multinameId)); + }else{ + return new ParsedSymbol(ParsedSymbol.TYPE_STRING,string.toString()); + } + } + + {StringCharacter}+ { string.append( yytext() ); } + + /* escape sequences */ + "\\b" { string.append( '\b' ); } + "\\t" { string.append( '\t' ); } + "\\n" { string.append( '\n' ); } + "\\f" { string.append( '\f' ); } + "\\r" { string.append( '\r' ); } + "\\\"" { string.append( '\"' ); } + "\\'" { string.append( '\'' ); } + "\\\\" { string.append( '\\' ); } + \\[0-3]?{OctDigit}?{OctDigit} { char val = (char) Integer.parseInt(yytext().substring(1),8); + string.append( val ); } + + /* error cases */ + \\. { throw new ParseException("Illegal escape sequence \""+yytext()+"\"",yyline+1); } + {LineTerminator} { throw new ParseException("Unterminated string at end of line",yyline+1); } + +} + +/* error fallback */ +.|\n { } +<> { return new ParsedSymbol(ParsedSymbol.TYPE_EOF); } diff --git a/trunk/src/com/jpexs/asdec/abc/types/MethodInfo.java b/trunk/src/com/jpexs/asdec/abc/types/MethodInfo.java index bfda353d4..8dfd05050 100644 --- a/trunk/src/com/jpexs/asdec/abc/types/MethodInfo.java +++ b/trunk/src/com/jpexs/asdec/abc/types/MethodInfo.java @@ -32,6 +32,42 @@ public class MethodInfo { public ValueKind optional[]; public int paramNames[]; + public void setFlagNeed_rest() + { + flags|=4; + } + + public void unsetFlagNeed_rest() + { + if(flagNeed_rest()){ + flags-=4; + } + } + + public void setFlagHas_optional() + { + flags|=8; + } + + public void unsetFlagHas_optional() + { + if(flagHas_optional()){ + flags-=8; + } + } + + public void setFlagHas_paramnames() + { + flags|=128; + } + + public void unsetFlagHas_paramnames() + { + if(flagHas_paramnames()){ + flags-=128; + } + } + public boolean flagNeed_arguments() { return (flags & 1) == 1; } diff --git a/trunk/src/com/jpexs/asdec/abc/types/ValueKind.java b/trunk/src/com/jpexs/asdec/abc/types/ValueKind.java index d88ea877d..3b3644d99 100644 --- a/trunk/src/com/jpexs/asdec/abc/types/ValueKind.java +++ b/trunk/src/com/jpexs/asdec/abc/types/ValueKind.java @@ -82,34 +82,34 @@ public class ValueKind { ret = "\"" + constants.constant_string[value_index] + "\""; break; case CONSTANT_True: - ret = "True"; + ret = "true"; break; case CONSTANT_False: - ret = "False"; + ret = "false"; break; case CONSTANT_Null: - ret = "Null"; + ret = "null"; break; case CONSTANT_Undefined: - ret = "Undefined"; + ret = "undefined"; break; case CONSTANT_Namespace: - ret = "" + constants.constant_namespace[value_index].getName(constants); + ret = "ns[" +value_index+"]"; break; case CONSTANT_PackageInternalNs: - ret = "" + constants.constant_namespace[value_index].getName(constants); + ret = "package internal ns[" +value_index+"]"; break; case CONSTANT_ProtectedNamespace: - ret = "protected " + constants.constant_namespace[value_index].getName(constants); + ret = "protected ns[" +value_index+"]"; break; case CONSTANT_ExplicitNamespace: - ret = "explicit " + constants.constant_namespace[value_index].getName(constants); + ret = "explicit ns[" +value_index+"]"; break; case CONSTANT_StaticProtectedNs: - ret = "static protected " + constants.constant_namespace[value_index].getName(constants); + ret = "static protected ns[" +value_index+"]"; break; case CONSTANT_PrivateNs: - ret = "private " + constants.constant_namespace[value_index].getName(constants); + ret = "private ns[" +value_index+"]"; break; } return ret;