home *** CD-ROM | disk | FTP | other *** search
- package espresso;
-
- class Parser implements Constants {
- private static int[] prec = new int[112];
- private static Name initS = Name.fromString("<init>");
- private static Name starS = Name.fromString("*");
- private static Name nullS = Name.fromString("null");
- private static Name voidS = Name.fromString("void");
- private static Name shortS = Name.fromString("short");
- private static Name longS = Name.fromString("long");
- private static Name intS = Name.fromString("int");
- private static Name floatS = Name.fromString("float");
- private static Name doubleS = Name.fromString("double");
- private static Name charS = Name.fromString("char");
- private static Name booleanS = Name.fromString("boolean");
- private static Name byteS = Name.fromString("byte");
- // $FF: renamed from: S espresso.Scanner
- private Scanner field_0;
- private static final int infixPrecedenceLevels = 10;
- private static final int EXPR = 2;
- private static final int TYPE = 1;
-
- static {
- for(int var0 = 0; var0 <= 111; ++var0) {
- prec[var0] = -1;
- }
-
- prec[55] = 0;
- prec[56] = 1;
- prec[27] = 2;
- prec[24] = 3;
- prec[25] = 4;
- prec[37] = 5;
- prec[40] = 5;
- prec[31] = 6;
- prec[30] = 6;
- prec[38] = 6;
- prec[39] = 6;
- prec[41] = 7;
- prec[42] = 7;
- prec[43] = 7;
- prec[20] = 8;
- prec[21] = 8;
- prec[26] = 9;
- prec[29] = 9;
- prec[23] = 9;
- }
-
- private AST makePostop(int var1, int var2, AST var3) {
- byte var4;
- switch (var2) {
- case 35:
- var4 = 77;
- break;
- case 36:
- var4 = 78;
- break;
- default:
- throw new CompilerError("makePostop");
- }
-
- return new Unop(var1, var4, var3);
- }
-
- private AST makePreop(int var1, int var2, AST var3) {
- byte var4;
- switch (var2) {
- case 20:
- var4 = 71;
- break;
- case 21:
- switch (var3.tag) {
- case 90:
- ((Literal)var3).val = new Integer(-(Integer)((Literal)var3).val);
- return var3;
- case 91:
- ((Literal)var3).val = new Long(-(Long)((Literal)var3).val);
- return var3;
- case 92:
- ((Literal)var3).val = new Float(-(Float)((Literal)var3).val);
- return var3;
- case 93:
- ((Literal)var3).val = new Double(-(Double)((Literal)var3).val);
- return var3;
- default:
- var4 = 72;
- return new Unop(var1, var4, var3);
- }
- case 22:
- var4 = 73;
- break;
- case 23:
- case 24:
- case 25:
- case 26:
- case 27:
- case 29:
- case 30:
- case 31:
- case 32:
- case 33:
- case 34:
- default:
- throw new CompilerError("makePreop");
- case 28:
- var4 = 74;
- break;
- case 35:
- var4 = 75;
- break;
- case 36:
- var4 = 76;
- }
-
- return new Unop(var1, var4, var3);
- }
-
- private AST makeAssignment(int var1, int var2, AST var3, AST var4) {
- byte var5;
- switch (var2) {
- case 34:
- var5 = 49;
- break;
- case 35:
- case 36:
- case 37:
- case 38:
- case 39:
- case 40:
- case 41:
- case 42:
- case 43:
- default:
- throw new CompilerError("makeAssignment");
- case 44:
- var5 = 56;
- break;
- case 45:
- var5 = 57;
- break;
- case 46:
- var5 = 58;
- break;
- case 47:
- var5 = 59;
- break;
- case 48:
- var5 = 52;
- break;
- case 49:
- var5 = 50;
- break;
- case 50:
- var5 = 51;
- break;
- case 51:
- var5 = 60;
- break;
- case 52:
- var5 = 53;
- break;
- case 53:
- var5 = 54;
- break;
- case 54:
- var5 = 55;
- }
-
- return new Assignop(var1, var5, var3, var4);
- }
-
- private AST makeBinop(int var1, int var2, AST var3, AST var4) {
- byte var5;
- switch (var2) {
- case 20:
- var5 = 44;
- break;
- case 21:
- var5 = 45;
- break;
- case 22:
- case 28:
- case 32:
- case 33:
- case 34:
- case 35:
- case 36:
- case 44:
- case 45:
- case 46:
- case 47:
- case 48:
- case 49:
- case 50:
- case 51:
- case 52:
- case 53:
- case 54:
- default:
- throw new CompilerError("makeBinop");
- case 23:
- var5 = 48;
- break;
- case 24:
- var5 = 39;
- break;
- case 25:
- var5 = 40;
- break;
- case 26:
- var5 = 46;
- break;
- case 27:
- var5 = 38;
- break;
- case 29:
- var5 = 47;
- break;
- case 30:
- var5 = 35;
- break;
- case 31:
- var5 = 34;
- break;
- case 37:
- var5 = 32;
- break;
- case 38:
- var5 = 36;
- break;
- case 39:
- var5 = 37;
- break;
- case 40:
- var5 = 33;
- break;
- case 41:
- var5 = 41;
- break;
- case 42:
- var5 = 42;
- break;
- case 43:
- var5 = 43;
- break;
- case 55:
- var5 = 30;
- break;
- case 56:
- var5 = 31;
- }
-
- return new Binop(var1, var5, var3, var4);
- }
-
- private int narrow(int var1, AST var2) {
- return var1 & ((var2.isType() ? 1 : 0) | (var2.isExpr() ? 2 : 0));
- }
-
- private boolean checkExprStat(AST var1) {
- if (this.checkExpr(var1)) {
- if (49 <= var1.tag && var1.tag <= 60 || 75 <= var1.tag && var1.tag <= 78 || var1.tag == 5 || var1.tag == 7 || var1.tag == 0) {
- return true;
- }
-
- Report.error(var1.pos, "not a statement");
- }
-
- return false;
- }
-
- private boolean checkExpr(AST var1) {
- if (!var1.isExpr() && var1.tag != 0) {
- if (var1.isType()) {
- Report.error(var1.pos, "malformed declaration");
- } else {
- Report.error(var1.pos, "malformed expression");
- }
-
- return false;
- } else {
- return true;
- }
- }
-
- ASTS compilationUnit() {
- int var1 = this.field_0.pos;
- ASTS var2 = new ASTS();
- if (this.field_0.sym == 80) {
- this.field_0.nextsym();
- IdRef var3 = this.qualident();
- this.accept(12);
- var2.append(new Package(var1, var3));
- }
-
- while(this.field_0.sym == 76) {
- var2.append(this.importClause());
- }
-
- while(this.field_0.sym != 111) {
- var2 = this.addTopDef(var2);
- }
-
- return var2;
- }
-
- private AST importClause() {
- int var1 = this.field_0.pos;
- this.field_0.nextsym();
- int var2 = this.field_0.pos;
-
- Object var3;
- for(var3 = new Ident(var2, this.ident()); this.field_0.sym == 10; var3 = new Select(var2, (AST)var3, this.ident())) {
- this.field_0.nextsym();
- if (this.field_0.sym == 26) {
- this.field_0.nextsym();
- var3 = new Select(var2, (AST)var3, starS);
- break;
- }
- }
-
- this.accept(12);
- return new Import(var1, (IdRef)var3);
- }
-
- private ASTS addTopDef(ASTS var1) {
- if (this.field_0.pos == this.field_0.errPos) {
- while(this.field_0.sym != 64 && this.field_0.sym != 77 && this.field_0.sym != 111) {
- this.field_0.nextsym();
- }
- }
-
- if (this.field_0.sym == 12) {
- this.field_0.nextsym();
- } else {
- int var2 = this.modifiers(0);
- if (this.field_0.sym == 64) {
- var1.append(this.classDef(var2));
- } else if (this.field_0.sym == 77) {
- var1.append(this.interfaceDef(var2));
- } else {
- this.syntaxError("'class' or 'interface' expected");
-
- while(this.field_0.sym == 18) {
- this.field_0.nextsym();
- }
- }
- }
-
- return var1;
- }
-
- private AST interfaceDef(int var1) {
- int var2 = this.field_0.pos;
- this.field_0.nextsym();
- Name var3 = this.ident();
- ASTS var4 = new ASTS();
- if (this.field_0.sym == 70) {
- this.field_0.nextsym();
- var4.append(this.qualident());
-
- while(this.field_0.sym == 11) {
- this.field_0.nextsym();
- var4.append(this.qualident());
- }
- }
-
- Block var5 = this.classBlock(var3, true);
- return new ClassDef(var2, var3, var1 | 512, (AST)null, var4, var5);
- }
-
- private AST classDef(int var1) {
- int var2 = this.field_0.pos;
- this.field_0.nextsym();
- Name var3 = this.ident();
- IdRef var4 = null;
- if (this.field_0.sym == 70) {
- this.field_0.nextsym();
- var4 = this.qualident();
- }
-
- ASTS var5 = new ASTS();
- if (this.field_0.sym == 75) {
- this.field_0.nextsym();
- var5.append(this.qualident());
-
- while(this.field_0.sym == 11) {
- this.field_0.nextsym();
- var5.append(this.qualident());
- }
- }
-
- Block var6 = this.classBlock(var3, false);
- return new ClassDef(var2, var3, var1, var4, var5, var6);
- }
-
- private Block classBlock(Name var1, boolean var2) {
- int var3 = this.field_0.pos;
- this.accept(17);
-
- ASTS var4;
- for(var4 = new ASTS(); this.field_0.sym != 18 && this.field_0.sym != 111 && this.field_0.sym != 64 && this.field_0.sym != 77; var4 = this.addDef(var4, var1, var2)) {
- }
-
- this.accept(18);
- return new Block(var3, var4);
- }
-
- private ASTS addDef(ASTS var1, Name var2, boolean var3) {
- if (this.field_0.sym == 12) {
- this.field_0.nextsym();
- } else {
- int var4 = 0;
- if (this.field_0.sym == 85) {
- this.field_0.nextsym();
- if (this.field_0.sym == 17) {
- Block var5 = this.block();
- var5.mods = 8;
- var1.append(var5);
- return var1;
- }
-
- var4 |= 8;
- }
-
- var4 = this.modifiers(var4);
- int var6 = this.field_0.pos;
- AST var7 = this.type();
- if (this.field_0.sym == 13 && var7.tag == 1 && ((Ident)var7).name.equals(var2)) {
- var1.append(this.funDefiner(var6, initS, var4, (AST)null));
- } else {
- var6 = this.field_0.pos;
- Name var8 = this.ident();
- if (this.field_0.sym == 13) {
- var1.append(this.funDefiner(var6, var8, var4, var7));
- } else {
- var1 = this.addVarDefiners(var1, var6, var8, var4, var7, var3);
- this.accept(12);
- }
- }
- }
-
- return var1;
- }
-
- private FunDef funDefiner(int var1, Name var2, int var3, AST var4) {
- ASTS var5 = this.formals();
- var4 = this.brackets(var4);
- ASTS var6 = this.throwsDcl();
- Block var7 = null;
- if (this.field_0.sym == 12) {
- this.field_0.nextsym();
- } else {
- var7 = this.block();
- }
-
- return new FunDef(var1, 65, var2, var3, var4, var5, var6, var7);
- }
-
- private FunDef lambda() {
- int var1 = this.field_0.pos;
- this.field_0.nextsym();
- ASTS var2 = this.formals();
- ASTS var3 = this.throwsDcl();
- Block var4 = this.block();
- return new FunDef(var1, 67, (Name)null, 0, (AST)null, var2, var3, var4);
- }
-
- private ASTS throwsDcl() {
- ASTS var1 = new ASTS();
- if (this.field_0.sym == 92) {
- this.field_0.nextsym();
- var1.append(this.type());
-
- while(this.field_0.sym == 11) {
- this.field_0.nextsym();
- var1.append(this.type());
- }
- }
-
- return var1;
- }
-
- private ASTS typargs() {
- ASTS var1 = new ASTS();
- this.accept(13);
- if (this.field_0.sym != 14) {
- var1.append(this.type());
-
- while(this.field_0.sym == 11) {
- this.field_0.nextsym();
- var1.append(this.type());
- }
- }
-
- this.accept(14);
- return var1;
- }
-
- private ASTS formals() {
- ASTS var1 = new ASTS();
- this.accept(13);
- if (this.field_0.sym != 14) {
- var1.append(this.varDcl(0, this.type()));
-
- while(this.field_0.sym == 11) {
- this.field_0.nextsym();
- var1.append(this.varDcl(0, this.type()));
- }
- }
-
- this.accept(14);
- return var1;
- }
-
- private ASTS varDefs(int var1, AST var2) {
- return this.addVarDefiners(new ASTS(), this.field_0.pos, this.ident(), var1, var2, false);
- }
-
- private ASTS addVarDefiners(ASTS var1, int var2, Name var3, int var4, AST var5, boolean var6) {
- var1.append(this.varDefiner(var2, var3, var4, var5, var6));
-
- while(this.field_0.sym == 11) {
- this.field_0.nextsym();
- int var7 = this.field_0.pos;
- Name var8 = this.ident();
- var1.append(this.varDefiner(var7, var8, var4, var5, var6));
- }
-
- return var1;
- }
-
- private AST varDefiner(int var1, Name var2, int var3, AST var4, boolean var5) {
- var4 = this.brackets(var4);
- AST var6 = null;
- if (this.field_0.sym == 34) {
- this.field_0.nextsym();
- var6 = this.initializer();
- } else if (var5) {
- this.syntaxError("missing initializer");
- }
-
- return new VarDef(var1, var2, var3, var4, var6);
- }
-
- private AST varDcl(int var1, AST var2) {
- int var3 = this.field_0.pos;
- Name var4 = this.ident();
- return new VarDef(var3, var4, var1, this.brackets(var2), (AST)null);
- }
-
- private AST brackets(AST var1) {
- while(this.field_0.sym == 15) {
- int var2 = this.field_0.pos;
- this.field_0.nextsym();
- this.accept(16);
- var1 = new Subscript(var2, (AST)var1, (AST)null);
- }
-
- return (AST)var1;
- }
-
- private Block block() {
- int var1 = this.field_0.pos;
- this.accept(17);
- Block var2 = new Block(var1, this.stats());
- if (this.field_0.sym == 62 || this.field_0.sym == 67) {
- this.syntaxError(String.valueOf("orphaned ").concat(String.valueOf(this.field_0.sym2string(this.field_0.sym))));
- }
-
- this.accept(18);
- return var2;
- }
-
- private ASTS stats() {
- ASTS var1 = new ASTS();
-
- while(true) {
- switch (this.field_0.sym) {
- case 18:
- case 111:
- case 64:
- case 77:
- case 62:
- case 67:
- return var1;
- default:
- var1 = this.addStat(var1);
- }
- }
- }
-
- private AST substat() {
- int var1 = this.field_0.pos;
- ASTS var2 = this.addStat(new ASTS());
- return (AST)(var2.length == 1 && !(var2.elems[0] instanceof Def) ? var2.elems[0] : new Block(var1, var2));
- }
-
- private AST stat() {
- int var1 = this.field_0.pos;
- ASTS var2 = this.addStat(new ASTS());
- return (AST)(var2.length == 1 ? var2.elems[0] : new Block(var1, var2));
- }
-
- private ASTS addStat(ASTS var1) {
- int var2 = this.field_0.pos;
- switch (this.field_0.sym) {
- case 17:
- var1.append(this.block());
- break;
- case 74:
- this.field_0.nextsym();
- AST var3 = this.parExpr();
- AST var4 = this.substat();
- AST var5 = null;
- if (this.field_0.sym == 69) {
- this.field_0.nextsym();
- var5 = this.substat();
- }
-
- var1.append(new Conditional(var2, 28, var3, var4, var5));
- break;
- case 73:
- this.field_0.nextsym();
- this.accept(13);
- ASTS var6 = this.forInit();
- this.accept(12);
- AST var7 = null;
- if (this.field_0.sym != 12) {
- var7 = this.expr();
- }
-
- this.accept(12);
- ASTS var8 = this.forIncr();
- this.accept(14);
- var1.append(new ForLoop(var2, var6, var7, var8, this.substat()));
- break;
- case 95:
- this.field_0.nextsym();
- AST var9 = this.parExpr();
- var1.append(new WhileLoop(var2, var9, this.substat()));
- break;
- case 68:
- this.field_0.nextsym();
- AST var10 = this.substat();
- this.accept(95);
- var1.append(new DoLoop(var2, var10, this.parExpr()));
- this.accept(12);
- break;
- case 94:
- this.field_0.nextsym();
- Block var11 = this.block();
- ASTS var12 = new ASTS();
-
- while(this.field_0.sym == 63) {
- int var13 = this.field_0.pos;
- this.field_0.nextsym();
- this.accept(13);
- ASTS var14 = new ASTS();
- var14.append(this.varDcl(0, this.type()));
- this.accept(14);
- Block var15 = this.block();
- var12.append(new FunDef(var13, 66, (Name)null, 0, (AST)null, var14, new ASTS(), var15));
- }
-
- Block var16 = null;
- if (this.field_0.sym == 72) {
- this.field_0.nextsym();
- var16 = this.block();
- }
-
- var1.append(new Try(var2, var11, var12, var16));
- if (var12.length == 0 && var16 == null) {
- Report.error(var2, "'try' without 'catch' or 'finally'");
- }
- break;
- case 87:
- this.field_0.nextsym();
- AST var17 = this.parExpr();
- this.accept(17);
- var1.append(new Switch(var2, var17, this.cases()));
- this.accept(18);
- break;
- case 88:
- this.field_0.nextsym();
- AST var18 = this.parExpr();
- AST var19 = this.substat();
- var1.append(new Synchronized(var2, var18, var19));
- break;
- case 84:
- this.field_0.nextsym();
- AST var20 = null;
- if (this.field_0.sym != 12) {
- var20 = this.expr();
- }
-
- var1.append(new Return(var2, var20));
- this.accept(12);
- break;
- case 91:
- this.field_0.nextsym();
- AST var21 = this.expr();
- var1.append(new Throw(var2, var21));
- this.accept(12);
- break;
- case 61:
- this.field_0.nextsym();
- if (this.field_0.sym == 1) {
- var1.append(new Break(var2, this.field_0.name));
- this.field_0.nextsym();
- } else {
- var1.append(new Break(var2, (Name)null));
- }
-
- this.accept(12);
- break;
- case 66:
- this.field_0.nextsym();
- if (this.field_0.sym == 1) {
- var1.append(new Continue(var2, this.field_0.name));
- this.field_0.nextsym();
- } else {
- var1.append(new Continue(var2, (Name)null));
- }
-
- this.accept(12);
- break;
- case 12:
- this.field_0.nextsym();
- break;
- case 69:
- this.syntaxError("'else' without 'if'");
- break;
- case 72:
- this.syntaxError("'finally' without 'try'");
- break;
- case 63:
- this.syntaxError("'catch' without 'try'");
- break;
- default:
- byte var22 = 0;
- AST var23 = this.term(3);
- if (var23.tag == 1 && this.field_0.sym == 33) {
- this.field_0.nextsym();
- var1.append(new Labelled(var2, ((Ident)var23).name, this.stat()));
- } else if (this.field_0.sym == 1 && var23.isType()) {
- var2 = this.field_0.pos;
- Name var24 = this.ident();
- var1 = this.addVarDefiners(var1, var2, var24, var22, var23, false);
- this.accept(12);
- } else {
- this.checkExprStat(var23);
- var1.append(new Exec(var2, var23));
- this.accept(12);
- }
- }
-
- return var1;
- }
-
- private ASTS forIncr() {
- ASTS var1 = new ASTS();
- if (this.field_0.sym != 14) {
- var1.append(this.expr());
-
- while(this.field_0.sym == 11) {
- this.field_0.nextsym();
- var1.append(this.expr());
- }
- }
-
- return var1;
- }
-
- private ASTS forInit() {
- ASTS var1 = new ASTS();
- if (this.field_0.sym != 12) {
- AST var2 = this.term(3);
- if (this.field_0.sym == 1 && var2.isType()) {
- return this.varDefs(0, var2);
- }
-
- if (this.checkExpr(var2)) {
- var1.append(var2);
- }
-
- while(this.field_0.sym == 11) {
- this.field_0.nextsym();
- var1.append(this.expr());
- }
- }
-
- return var1;
- }
-
- private ASTS cases() {
- ASTS var1 = new ASTS();
-
- while(this.field_0.sym == 62 || this.field_0.sym == 67) {
- int var2 = this.field_0.pos;
- int var3 = this.field_0.sym;
- this.field_0.nextsym();
- AST var4 = null;
- if (var3 == 62) {
- var4 = this.expr();
- }
-
- this.accept(33);
- ASTS var5 = this.stats();
- var1.append(new Case(var2, var4, var5));
- }
-
- return var1;
- }
-
- private AST initializer() {
- return this.field_0.sym == 17 ? this.aggregate() : this.expr();
- }
-
- private AST aggregate() {
- int var1 = this.field_0.pos;
- this.field_0.nextsym();
- ASTS var2 = new ASTS();
- if (this.field_0.sym != 18) {
- var2.append(this.initializer());
-
- while(this.field_0.sym == 11) {
- this.field_0.nextsym();
- if (this.field_0.sym == 18) {
- break;
- }
-
- var2.append(this.initializer());
- }
- }
-
- this.accept(18);
- return new Aggregate(var1, var2);
- }
-
- private AST arrowtype(ASTS var1) {
- int var2 = this.field_0.pos;
- this.accept(109);
- return new FunctionType(var2, this.type(), var1, this.throwsDcl());
- }
-
- private AST parTerm(int var1) {
- int var2 = this.field_0.pos;
- this.accept(13);
- Object var3;
- if (Switches.extended && this.field_0.sym == 109 && (var1 & 1) != 0) {
- var3 = this.arrowtype(new ASTS());
- this.accept(14);
- } else {
- var3 = this.term(var1 | 1);
- if (Switches.extended && (this.field_0.sym == 11 || this.field_0.sym == 109) && (var1 & 1) != 0 && ((AST)var3).isType()) {
- ASTS var4 = new ASTS((AST)var3);
-
- while(this.field_0.sym == 11) {
- this.field_0.nextsym();
- var4.append(this.type());
- }
-
- var3 = this.arrowtype(var4);
- this.accept(14);
- } else {
- this.accept(14);
- if (((AST)var3).isType() && (var1 & 2) != 0) {
- switch (this.field_0.sym) {
- case 13:
- case 1:
- case 2:
- case 3:
- case 4:
- case 5:
- case 6:
- case 7:
- case 79:
- case 89:
- case 86:
- case 106:
- case 28:
- case 22:
- case 107:
- var3 = new Typeop(var2, 62, this.term4(2), (AST)var3);
- break;
- case 20:
- case 21:
- case 35:
- case 36:
- if (!((AST)var3).isExpr()) {
- var3 = new Typeop(var2, 62, this.term4(2), (AST)var3);
- }
- }
- }
- }
- }
-
- return (AST)var3;
- }
-
- private AST constructor() {
- IdRef var1 = this.typeident();
- Object var3;
- if (this.field_0.sym == 15) {
- int var2 = this.field_0.pos;
- this.field_0.nextsym();
- var3 = new Subscript(var2, var1, this.expr());
- this.accept(16);
-
- while(this.field_0.sym == 15) {
- var2 = this.field_0.pos;
- this.field_0.nextsym();
- if (this.field_0.sym == 16) {
- var3 = new Subscript(var2, (AST)var3, (AST)null);
- this.field_0.nextsym();
-
- while(this.field_0.sym == 15) {
- var3 = new Subscript(var2, (AST)var3, (AST)null);
- this.field_0.nextsym();
- this.accept(16);
- }
- } else {
- var3 = new Subscript(var2, (AST)var3, this.expr());
- this.accept(16);
- }
- }
- } else if (this.field_0.sym == 13) {
- var3 = new Apply(this.field_0.pos, var1, this.argList());
- } else {
- var3 = AST.error;
- this.syntaxError("'(' or '[' expected");
- }
-
- return (AST)var3;
- }
-
- private ASTS argList() {
- int var1 = this.field_0.pos;
- this.accept(13);
- ASTS var2 = new ASTS();
- if (this.field_0.sym != 14) {
- var2.append(this.expr());
-
- while(this.field_0.sym == 11) {
- this.field_0.nextsym();
- var2.append(this.expr());
- }
- }
-
- this.accept(14);
- return var2;
- }
-
- private AST parExpr() {
- this.accept(13);
- AST var1 = this.expr();
- this.accept(14);
- return var1;
- }
-
- private AST type() {
- return this.term(1);
- }
-
- private AST expr() {
- return this.term(2);
- }
-
- private AST term4(int var1) {
- if ((var1 & 2) != 0) {
- switch (this.field_0.sym) {
- case 20:
- case 21:
- case 22:
- case 28:
- case 35:
- case 36:
- int var2 = this.field_0.sym;
- int var3 = this.field_0.pos;
- this.field_0.nextsym();
- return this.makePreop(var3, var2, this.term4(2));
- case 23:
- case 24:
- case 25:
- case 26:
- case 27:
- case 29:
- case 30:
- case 31:
- case 32:
- case 33:
- case 34:
- }
- }
-
- int var4 = this.field_0.pos;
- Object var5;
- if (this.field_0.sym == 13 && (var1 & 2) != 0 | Switches.extended) {
- var5 = this.parTerm(var1);
- } else if ((var1 & 1) == 0 || this.field_0.sym != 1 && (97 > this.field_0.sym || this.field_0.sym > 105)) {
- if ((var1 & 2) != 0) {
- switch (this.field_0.sym) {
- case 79:
- this.field_0.nextsym();
- var5 = new New(var4, this.constructor());
- break;
- case 1:
- var5 = this.qualident();
- break;
- case 89:
- var5 = new Self(this.field_0.pos, 80);
- this.field_0.nextsym();
- break;
- case 86:
- var5 = new Self(this.field_0.pos, 81);
- this.field_0.nextsym();
- break;
- case 3:
- var5 = new Literal(this.field_0.pos, 95, this.field_0.name);
- this.field_0.nextsym();
- break;
- case 2:
- var5 = new Literal(this.field_0.pos, 94, new Integer((int)this.field_0.intVal));
- this.field_0.nextsym();
- break;
- case 4:
- if ((long)Integer.MIN_VALUE <= this.field_0.intVal && this.field_0.intVal <= (long)Integer.MAX_VALUE) {
- var5 = new Literal(this.field_0.pos, 90, new Integer((int)this.field_0.intVal));
- } else {
- var5 = new Literal(this.field_0.pos, 91, new Long(this.field_0.intVal));
- }
-
- this.field_0.nextsym();
- break;
- case 5:
- var5 = new Literal(this.field_0.pos, 91, new Long(this.field_0.intVal));
- this.field_0.nextsym();
- break;
- case 6:
- var5 = new Literal(this.field_0.pos, 92, new Float((float)this.field_0.floatVal));
- this.field_0.nextsym();
- break;
- case 7:
- var5 = new Literal(this.field_0.pos, 93, new Double(this.field_0.floatVal));
- this.field_0.nextsym();
- break;
- case 106:
- var5 = new Ident(this.field_0.pos, nullS);
- this.field_0.nextsym();
- break;
- case 107:
- var5 = this.lambda();
- break;
- case 108:
- this.field_0.nextsym();
- var5 = new Sequence(var4, this.block());
- break;
- default:
- if (Switches.extended && this.field_0.sym == 17) {
- var5 = this.aggregate();
- } else {
- var5 = AST.error;
- this.syntaxError("illegal start of expression");
- }
- }
- } else {
- var5 = AST.error;
- this.syntaxError("illegal start of type");
- }
- } else {
- var5 = this.typeident();
- }
-
- while(true) {
- switch (this.field_0.sym) {
- case 10:
- if ((var1 & 2) == 0 || !((AST)var5).isExpr()) {
- return (AST)var5;
- }
-
- var4 = this.field_0.pos;
- this.field_0.nextsym();
- var5 = new Select(var4, (AST)var5, this.ident());
- break;
- case 15:
- this.field_0.nextsym();
- if (this.field_0.sym == 16 && (var1 & 1) != 0 && ((AST)var5).isType()) {
- this.field_0.nextsym();
- var5 = new Subscript(((AST)var5).pos, (AST)var5, (AST)null);
- break;
- }
-
- var5 = new Subscript(this.field_0.pos, (AST)var5, this.term(this.narrow(var1, (AST)var5)));
- this.accept(16);
- break;
- case 13:
- if ((var1 & 2) == 0 || !((AST)var5).isExpr()) {
- return (AST)var5;
- }
-
- var5 = new Apply(this.field_0.pos, (AST)var5, this.argList());
- break;
- case 35:
- case 36:
- if ((var1 & 2) == 0 || !((AST)var5).isExpr()) {
- return (AST)var5;
- }
-
- var5 = this.makePostop(this.field_0.pos, this.field_0.sym, (AST)var5);
- this.field_0.nextsym();
- break;
- case 107:
- if ((var1 & 1) != 0 && ((AST)var5).isType()) {
- var4 = this.field_0.pos;
- this.field_0.nextsym();
- ASTS var6 = this.typargs();
- ASTS var7 = this.throwsDcl();
- var5 = new FunctionType(var4, (AST)var5, var6, var7);
- break;
- }
-
- return (AST)var5;
- default:
- return (AST)var5;
- }
- }
- }
-
- private AST term3(int var1) {
- Object var2 = this.term4(var1);
- if (this.field_0.sym == 96 && (var1 & 2) != 0 && ((AST)var2).isExpr()) {
- int var3 = this.field_0.pos;
- this.field_0.nextsym();
- var2 = new Typeop(var3, 61, (AST)var2, this.type());
- }
-
- return (AST)var2;
- }
-
- private AST term2(int var1) {
- AST var2 = this.term3(var1);
- if (prec[this.field_0.sym] >= 0 && (var1 & 2) != 0 && var2.isExpr()) {
- AST[] var3 = new AST[11];
- int[] var4 = new int[10];
- int var5 = 0;
- var3[var5] = var2;
-
- while(prec[this.field_0.sym] >= 0) {
- var4[var5] = this.field_0.sym;
- ++var5;
- int var6 = this.field_0.pos;
- this.field_0.nextsym();
-
- for(var3[var5] = this.term3(2); var5 > 0 && prec[var4[var5 - 1]] >= prec[this.field_0.sym]; --var5) {
- var3[var5 - 1] = this.makeBinop(var6, var4[var5 - 1], var3[var5 - 1], var3[var5]);
- }
- }
-
- var2 = var3[var5];
- }
-
- return var2;
- }
-
- private AST term1(int var1) {
- Object var2 = this.term2(var1);
- if (this.field_0.sym == 32 && (var1 & 2) != 0 && ((AST)var2).isExpr()) {
- int var3 = this.field_0.pos;
- this.field_0.nextsym();
- AST var4 = this.term1(2);
- this.accept(33);
- AST var5 = this.term1(2);
- var2 = new Conditional(var3, 4, (AST)var2, var4, var5);
- }
-
- return (AST)var2;
- }
-
- private AST term(int var1) {
- AST var2 = this.term1(var1);
- if ((this.field_0.sym == 34 || 44 <= this.field_0.sym && this.field_0.sym <= 54) && (var1 & 2) != 0 && var2.isExpr()) {
- int var3 = this.field_0.pos;
- int var4 = this.field_0.sym;
- this.field_0.nextsym();
- var2 = this.makeAssignment(var3, var4, var2, this.term(2));
- }
-
- return var2;
- }
-
- private int modifiers(int var1) {
- int var2 = var1;
-
- while(true) {
- short var3;
- switch (this.field_0.sym) {
- case 60:
- var3 = 1024;
- break;
- case 61:
- case 62:
- case 63:
- case 64:
- case 65:
- case 66:
- case 67:
- case 68:
- case 69:
- case 70:
- case 72:
- case 73:
- case 74:
- case 75:
- case 76:
- case 77:
- case 79:
- case 80:
- case 84:
- case 86:
- case 87:
- case 89:
- case 91:
- case 92:
- default:
- return var2;
- case 71:
- var3 = 16;
- break;
- case 78:
- var3 = 256;
- break;
- case 81:
- var3 = 2;
- break;
- case 82:
- var3 = 4;
- break;
- case 83:
- var3 = 1;
- break;
- case 85:
- var3 = 8;
- break;
- case 88:
- var3 = 32;
- break;
- case 90:
- var3 = 64;
- break;
- case 93:
- var3 = 128;
- }
-
- if ((var2 & var3) != 0) {
- Report.error(this.field_0.pos, "repeated modifier");
- }
-
- var2 |= var3;
- this.field_0.nextsym();
- }
- }
-
- private IdRef typeident() {
- int var1 = this.field_0.pos;
- switch (this.field_0.sym) {
- case 1:
- return this.qualident();
- case 98:
- this.field_0.nextsym();
- return new TypeIdent(var1, byteS);
- case 97:
- this.field_0.nextsym();
- return new TypeIdent(var1, booleanS);
- case 99:
- this.field_0.nextsym();
- return new TypeIdent(var1, charS);
- case 100:
- this.field_0.nextsym();
- return new TypeIdent(var1, doubleS);
- case 101:
- this.field_0.nextsym();
- return new TypeIdent(var1, floatS);
- case 102:
- this.field_0.nextsym();
- return new TypeIdent(var1, intS);
- case 103:
- this.field_0.nextsym();
- return new TypeIdent(var1, longS);
- case 104:
- this.field_0.nextsym();
- return new TypeIdent(var1, shortS);
- case 105:
- this.field_0.nextsym();
- return new TypeIdent(var1, voidS);
- default:
- this.syntaxError("illegal start of type");
- return new TypeIdent(var1, Name.fromString("<error>"));
- }
- }
-
- private IdRef qualident() {
- int var1 = this.field_0.pos;
-
- Object var2;
- for(var2 = new Ident(var1, this.ident()); this.field_0.sym == 10; var2 = new Select(var1, (AST)var2, this.ident())) {
- this.field_0.nextsym();
- }
-
- return (IdRef)var2;
- }
-
- private Name ident() {
- if (this.field_0.sym == 1) {
- Name var1 = this.field_0.name;
- this.field_0.nextsym();
- return var1;
- } else {
- this.accept(1);
- return Name.fromString("<error>");
- }
- }
-
- private void accept(int var1) {
- if (this.field_0.sym == var1) {
- this.field_0.nextsym();
- } else {
- int var2;
- if (this.field_0.pos >>> 10 > this.field_0.lastpos >>> 10) {
- var2 = this.field_0.lastpos;
- } else {
- var2 = this.field_0.pos;
- }
-
- this.syntaxError(String.valueOf(this.field_0.sym2string(var1)).concat(String.valueOf(" expected")), var2);
- if (this.field_0.sym == var1) {
- this.field_0.nextsym();
- }
- }
-
- }
-
- private void syntaxError(String var1) {
- this.syntaxError(var1, this.field_0.pos);
- }
-
- private void syntaxError(String var1, int var2) {
- if (this.field_0.pos != this.field_0.errPos) {
- Report.error(var2, var1);
- }
-
- this.skip();
- this.field_0.errPos = this.field_0.pos;
- }
-
- private void skip() {
- int var1 = 0;
- int var2 = 0;
-
- while(true) {
- switch (this.field_0.sym) {
- case 111:
- case 64:
- return;
- case 12:
- if (var1 == 0 && var2 == 0) {
- return;
- }
- break;
- case 18:
- if (var1 == 0) {
- return;
- }
-
- --var1;
- break;
- case 14:
- if (var2 > 0) {
- --var2;
- }
- break;
- case 17:
- ++var1;
- break;
- case 13:
- ++var2;
- }
-
- this.field_0.nextsym();
- }
- }
-
- Parser(Scanner var1) {
- this.field_0 = var1;
- }
- }
-