亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频

? 歡迎來到蟲蟲下載站! | ?? 資源下載 ?? 資源專輯 ?? 關于我們
? 蟲蟲下載站

?? createbcode.jrag

?? JDK1.4編譯器后端
?? JRAG
?? 第 1 頁 / 共 4 頁
字號:
/* * The JastAdd Extensible Java Compiler (http://jastadd.org) is covered * by the modified BSD License. You should have received a copy of the * modified BSD license with this compiler. *  * Copyright (c) 2005-2008, Torbjorn Ekman * All rights reserved. */import java.util.*;import java.io.*;aspect CreateBCode {  inh TypeDecl CatchClause.hostType();    syn lazy boolean TypeDecl.hasClinit() {    for(int i = 0; i < getNumBodyDecl(); i++) {      BodyDecl b = getBodyDecl(i);      if(b instanceof FieldDeclaration) {        FieldDeclaration f = (FieldDeclaration)b;        if(f.isStatic() && f.hasInit()) {          return true;        }      }      else if(b instanceof StaticInitializer) {        return true;      }    }    return false;  }  syn lazy CodeGeneration TypeDecl.bytecodes(ConstantPool constantPool) {    CodeGeneration gen = new CodeGeneration(constantPool);    generateBytecodes(gen);    if(!gen.numberFormatError())      return gen;    gen = new CodeGeneration(constantPool, true);    generateBytecodes(gen);    if(!gen.numberFormatError())      return gen;    throw new Error("Could not generate code for initializers in " + hostType().typeName());  }  private void TypeDecl.generateBytecodes(CodeGeneration gen) {    for(int i = 0; i < getNumBodyDecl(); i++) {      BodyDecl b = getBodyDecl(i);      if(b instanceof FieldDeclaration && b.isBytecodeField() && b.generate()) {        FieldDeclaration f = (FieldDeclaration)b;        if(f.isStatic() && f.hasInit()) {          f.getInit().createBCode(gen);          f.getInit().type().emitAssignConvTo(gen, f.type()); // AssignConversion          f.emitStoreField(gen, this);        }      }      else if(b instanceof StaticInitializer) {        b.createBCode(gen);      }    }    gen.emitReturn();  }  syn lazy CodeGeneration MethodDecl.bytecodes(ConstantPool constantPool) {    //if(Program.verbose())    //  System.out.println("Generating bytecodes for " + signature() + " in " + hostType().fullName());    CodeGeneration gen = new CodeGeneration(constantPool);    generateBytecodes(gen);    if(!gen.numberFormatError())      return gen;    gen = new CodeGeneration(constantPool, true);    generateBytecodes(gen);    if(!gen.numberFormatError())      return gen;    throw new Error("Could not generate code for " + signature() + " in " + hostType().typeName());  }  private void MethodDecl.generateBytecodes(CodeGeneration gen) {    int label = gen.variableScopeLabel();    if(!isStatic())      gen.addLocalVariableEntryAtCurrentPC("this", hostType().typeDescriptor(), 0, label);    for(int i = 0; i < getNumParameter(); i++) {      ParameterDeclaration p = (ParameterDeclaration)getParameter(i);      gen.addLocalVariableEntryAtCurrentPC(        p.name(), p.type().typeDescriptor(), p.localNum(), label      );    }    createBCode(gen);    if(type() instanceof VoidType) // TODO: canCompleteNormally check as well      gen.emitReturn();    gen.addVariableScopeLabel(label);  }    syn lazy CodeGeneration ConstructorDecl.bytecodes(ConstantPool constantPool) {    CodeGeneration gen = new CodeGeneration(constantPool);    generateBytecodes(gen);    if(!gen.numberFormatError())      return gen;    gen = new CodeGeneration(constantPool, true);    generateBytecodes(gen);    if(!gen.numberFormatError())      return gen;    throw new Error("Could not generate code for " + signature() + " in " + hostType().typeName());  }  private void ConstructorDecl.generateBytecodes(CodeGeneration gen) {    int label = gen.variableScopeLabel();    gen.addLocalVariableEntryAtCurrentPC("this", hostType().typeDescriptor(), 0, label);    for(int i = 0; i < getNumParameter(); i++) {      ParameterDeclaration p = (ParameterDeclaration)getParameter(i);      gen.addLocalVariableEntryAtCurrentPC(        p.name(), p.type().typeDescriptor(), p.localNum(), label      );    }    createBCode(gen);    gen.emitReturn();    gen.addVariableScopeLabel(label);  }  public void MethodDecl.createBCode(CodeGeneration gen) {    try {    if(hasBlock()) {      gen.maxLocals = Math.max(gen.maxLocals, getBlock().localNum());      getBlock().createBCode(gen);    }    } catch (Error e) {      System.err.println(hostType().typeName() + ": " + this);      throw e;    }  }  public void ConstructorDecl.createBCode(CodeGeneration gen) {    try {    boolean needsInit = true;    if(hasConstructorInvocation()) {      getConstructorInvocation().createBCode(gen);      Stmt stmt = getConstructorInvocation();      if(stmt instanceof ExprStmt) {        ExprStmt exprStmt = (ExprStmt)stmt;        Expr expr = exprStmt.getExpr();        if(!expr.isSuperConstructorAccess())          needsInit = false;      }    }    if(needsEnclosing()) {      gen.emitLoadReference(0);      gen.emitLoadReference(1);      String classname = hostType().constantPoolName();      String desc = enclosing().typeDescriptor();      String name = "this$0";      int index = gen.constantPool().addFieldref(classname, name, desc);      gen.emit(Bytecode.PUTFIELD, -2).add2(index);    }    int localIndex = offsetFirstEnclosingVariable();    for(Iterator iter = hostType().enclosingVariables().iterator(); iter.hasNext(); ) {        Variable v = (Variable)iter.next();        gen.emitLoadReference(0);        v.type().emitLoadLocal(gen, localIndex);        String classname = hostType().constantPoolName();        String desc = v.type().typeDescriptor();        String name = "val$" + v.name();        int index = gen.constantPool().addFieldref(classname, name, desc);        gen.emit(Bytecode.PUTFIELD, -1 - v.type().variableSize()).add2(index);        localIndex += v.type().variableSize();    }    if(needsInit) {      TypeDecl typeDecl = hostType();      for(int i = 0; i < typeDecl.getNumBodyDecl(); i++) {        BodyDecl b = typeDecl.getBodyDecl(i);        if(b instanceof FieldDeclaration && b.isBytecodeField() && b.generate()) {          FieldDeclaration f = (FieldDeclaration)b;          if(!f.isStatic() && f.hasInit()) {            gen.emit(Bytecode.ALOAD_0);            f.getInit().createBCode(gen);            f.getInit().type().emitAssignConvTo(gen, f.type()); // AssignConversion            f.emitStoreField(gen, hostType());          }        }        else if(b instanceof InstanceInitializer) {          b.createBCode(gen);        }      }    }    gen.maxLocals = Math.max(gen.maxLocals, getBlock().localNum());    getBlock().createBCode(gen);    } catch (Error e) {      System.err.println(hostType().typeName() + ": " + this);      throw e;    }  }  public void ASTNode.createBCode(CodeGeneration gen) {    for (int i=0; i<getNumChild(); i++)      getChild(i).createBCode(gen);  }  public void Literal.createBCode(CodeGeneration gen) {          emitPushConstant(gen);  }  protected boolean Expr.needsPush() {    ASTNode n = getParent();    while(n instanceof ParExpr)      n = n.getParent();    return !(n instanceof ExprStmt);  }  syn boolean ExprStmt.needsPop() = getExpr().needsPop();  syn boolean Expr.needsPop() = true;  eq AbstractDot.needsPop() = lastAccess().needsPop();  eq ConstructorAccess.needsPop() = false;  eq ParExpr.needsPop() = getExpr().needsPop();  eq AssignExpr.needsPop() = false; // if dest is instance variable that needs accessor  eq PreIncExpr.needsPop() = false;  eq PostIncExpr.needsPop() = false;  eq PreDecExpr.needsPop() = false;  eq PostDecExpr.needsPop() = false;  public void VariableDeclaration.createBCode(CodeGeneration gen) {    super.createBCode(gen);    if(hasInit()) {      gen.addLocalVariableEntryAtCurrentPC(name(), type().typeDescriptor(), localNum(), variableScopeEndLabel(gen));      getInit().createBCode(gen);      getInit().type().emitAssignConvTo(gen, type()); // AssignConversion      type().emitStoreLocal(gen, localNum());    }  }    // simple assign expression  public void AssignSimpleExpr.createBCode(CodeGeneration gen) {    getDest().createAssignSimpleLoadDest(gen);    getSource().createBCode(gen);    getSource().type().emitAssignConvTo(gen, getDest().type()); // AssignConversion    if(needsPush()) {      getDest().createPushAssignmentResult(gen);    }    getDest().emitStore(gen);  }  // compund assign expression  public void AssignExpr.createBCode(CodeGeneration gen) {    TypeDecl dest = getDest().type();    TypeDecl source = getSource().type();    TypeDecl type;    if(dest.isNumericType() && source.isNumericType())      type = dest.binaryNumericPromotion(source);    else       type = dest;    getDest().createAssignLoadDest(gen);    dest.emitCastTo(gen, type);    getSource().createBCode(gen);    source.emitCastTo(gen, type);    createAssignOp(gen, type);    type.emitCastTo(gen, dest);    if(needsPush()) {      getDest().createPushAssignmentResult(gen);    }    getDest().emitStore(gen);  }  // string addition assign expression  public void AssignPlusExpr.createBCode(CodeGeneration gen) {    TypeDecl dest = getDest().type();    TypeDecl source = getSource().type();    if(dest.isString()) {      getDest().createAssignLoadDest(gen);            // new StringBuffer()      TypeDecl stringBuffer = lookupType("java.lang", "StringBuffer");      String classname = stringBuffer.constantPoolName();      String desc;      int index;      TypeDecl argumentType;      stringBuffer.emitNew(gen); // new StringBuffer      gen.emitDup();             // dup      desc = "()V";      index = gen.constantPool().addMethodref(classname, "<init>", desc);      gen.emit(Bytecode.INVOKESPECIAL, -1).add2(index); // invokespecial StringBuffer()      gen.emitSwap();      // append      argumentType = dest.stringPromotion();      desc = "(" + argumentType.typeDescriptor() + ")" + stringBuffer.typeDescriptor();      index = gen.constantPool().addMethodref(classname, "append", desc);      gen.emit(Bytecode.INVOKEVIRTUAL, -argumentType.variableSize()).add2(index); // StringBuffer.append            getSource().createBCode(gen);      // typed append      argumentType = source.stringPromotion();      desc = "(" + argumentType.typeDescriptor() + ")" + stringBuffer.typeDescriptor();      index = gen.constantPool().addMethodref(classname, "append", desc);      gen.emit(Bytecode.INVOKEVIRTUAL, -argumentType.variableSize()).add2(index); // StringBuffer.append            // toString      desc = "()" + type().typeDescriptor();      index = gen.constantPool().addMethodref(classname, "toString", desc);      gen.emit(Bytecode.INVOKEVIRTUAL, 0).add2(index); // StringBuffer.toString            if(needsPush()) {        getDest().createPushAssignmentResult(gen);      }      getDest().emitStore(gen);    }    else {      super.createBCode(gen);    }  }  // shift assign expression  public void AssignExpr.emitShiftExpr(CodeGeneration gen) {    TypeDecl dest = getDest().type();    TypeDecl source = getSource().type();    TypeDecl type = dest.unaryNumericPromotion();    getDest().createAssignLoadDest(gen);    dest.emitCastTo(gen, type);    getSource().createBCode(gen);    source.emitCastTo(gen, typeInt());    createAssignOp(gen, type);    type.emitCastTo(gen, dest);    if(needsPush()) {      getDest().createPushAssignmentResult(gen);    }    getDest().emitStore(gen);  }  public void AssignLShiftExpr.createBCode(CodeGeneration gen) { emitShiftExpr(gen); }  public void AssignRShiftExpr.createBCode(CodeGeneration gen) { emitShiftExpr(gen); }  public void AssignURShiftExpr.createBCode(CodeGeneration gen) { emitShiftExpr(gen); }  // load left hand side of destination in a simple assign expression  public void Expr.createAssignSimpleLoadDest(CodeGeneration gen) {  }  public void AbstractDot.createAssignSimpleLoadDest(CodeGeneration gen) {    lastAccess().createAssignSimpleLoadDest(gen);  }  public void VarAccess.createAssignSimpleLoadDest(CodeGeneration gen) {    createLoadQualifier(gen);  }  public void ArrayAccess.createAssignSimpleLoadDest(CodeGeneration gen) {    prevExpr().createBCode(gen);    getExpr().createBCode(gen);  }    // duplicate top value on stack and store below destination element  public void Expr.createPushAssignmentResult(CodeGeneration gen) {  }  public void AbstractDot.createPushAssignmentResult(CodeGeneration gen) {    lastAccess().createPushAssignmentResult(gen);  }  public void VarAccess.createPushAssignmentResult(CodeGeneration gen) {    if(hostType().needsAccessorFor(decl()))      return;    if(decl().isInstanceVariable())      type().emitDup_x1(gen);    else      type().emitDup(gen);  }  public void ArrayAccess.createPushAssignmentResult(CodeGeneration gen) {    type().emitDup_x2(gen);  }    // load left hand side of destination in a compound assign expression  public void Expr.createAssignLoadDest(CodeGeneration gen) {  }  public void AbstractDot.createAssignLoadDest(CodeGeneration gen) {    lastAccess().createAssignLoadDest(gen);  }  public void VarAccess.createAssignLoadDest(CodeGeneration gen) {    createLoadQualifier(gen);    Variable v = decl();    if(v.isInstanceVariable())      gen.emitDup();    if(v instanceof VariableDeclaration) {      VariableDeclaration decl = (VariableDeclaration)v;      decl.type().emitLoadLocal(gen, decl.localNum());    }    else if(v instanceof ParameterDeclaration) {      ParameterDeclaration decl = (ParameterDeclaration)v;      decl.type().emitLoadLocal(gen, decl.localNum());    }    else if(v instanceof FieldDeclaration) {      FieldDeclaration f = (FieldDeclaration)v;      if(f.isPrivate() && !hostType().hasField(v.name()))        f.createAccessor(fieldQualifierType()).emitInvokeMethod(gen, fieldQualifierType());      else        f.emitLoadField(gen, fieldQualifierType());    }  }  public void ArrayAccess.createAssignLoadDest(CodeGeneration gen) {    prevExpr().createBCode(gen);    gen.emitDup();    getExpr().createBCode(gen);    typeInt().emitDup_x1(gen);

?? 快捷鍵說明

復制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
国产欧美日韩视频一区二区| 日本一区二区久久| 粉嫩av一区二区三区| 亚洲一区二区三区四区不卡| 26uuu成人网一区二区三区| 色综合色综合色综合 | 亚洲国产精品精华液网站| 欧美不卡一区二区三区四区| 色激情天天射综合网| 国产成人h网站| 激情都市一区二区| 日本在线播放一区二区三区| 亚洲最大成人网4388xx| 亚洲欧洲日韩综合一区二区| 日韩精品一区二区三区四区视频| 色婷婷亚洲精品| 成人免费视频国产在线观看| 免费成人在线播放| 亚洲成人一二三| 一区二区三区四区av| 中国色在线观看另类| 久久精品亚洲精品国产欧美kt∨| 欧美一区二区三区视频在线 | 69堂精品视频| 欧美在线不卡视频| 在线一区二区视频| 色哟哟精品一区| 色综合激情五月| 色老汉一区二区三区| 97aⅴ精品视频一二三区| www.日韩av| av电影一区二区| 99国产精品久久久| 99精品国产视频| 91麻豆国产在线观看| 色哟哟一区二区三区| 91浏览器在线视频| 日本乱人伦一区| 91成人网在线| 欧美日韩精品欧美日韩精品一| 欧美优质美女网站| 欧美三级视频在线播放| 欧美精品1区2区3区| 7777精品伊人久久久大香线蕉的| 欧美高清精品3d| 91精品国产入口在线| 日韩精品资源二区在线| 2017欧美狠狠色| 日本一区二区三区电影| 中文字幕欧美一| 亚洲国产成人av好男人在线观看| 亚洲午夜精品网| 日韩精品91亚洲二区在线观看 | 久久99久久99小草精品免视看| 免费成人在线观看| 国产精品一区三区| 成年人网站91| 欧美性xxxxxx少妇| 日韩免费视频线观看| 久久色在线观看| 亚洲欧美影音先锋| 亚洲一区成人在线| 免费观看在线色综合| 国产成人综合亚洲网站| 91日韩精品一区| 欧美一区二区免费视频| 国产午夜精品一区二区| 亚洲精品一卡二卡| 视频一区二区三区在线| 国产一区二区在线看| 99九九99九九九视频精品| 欧美私人免费视频| 精品不卡在线视频| 中文字幕亚洲电影| 日韩avvvv在线播放| 国产91精品在线观看| 欧美性视频一区二区三区| 精品欧美一区二区三区精品久久| 1区2区3区精品视频| 日本免费在线视频不卡一不卡二| 丁香婷婷综合五月| 91精品国产入口| 国产精品久久久久久久裸模| 日本视频免费一区| 色琪琪一区二区三区亚洲区| 欧美岛国在线观看| 亚洲综合免费观看高清完整版| 精品亚洲成a人在线观看 | 久久蜜桃一区二区| 亚洲一区二区3| 成人av在线播放网站| 欧美一区二区视频观看视频| 亚洲色图丝袜美腿| 国产精品中文欧美| 欧美一区二区视频免费观看| 亚洲色图制服诱惑 | 偷窥少妇高潮呻吟av久久免费| 国产91丝袜在线18| 欧美电影免费观看高清完整版在| 一区二区三区日本| 成人免费va视频| 中文字幕亚洲视频| 国产精品自拍一区| 日韩一区二区免费在线观看| 一区二区三区免费网站| 成人一级片在线观看| 欧美电视剧在线看免费| 天堂资源在线中文精品| 91小视频免费观看| 在线不卡的av| 亚洲永久免费视频| 色哟哟一区二区在线观看| 久久久久国产一区二区三区四区| 日本怡春院一区二区| 欧美日韩午夜精品| 亚洲一区在线观看免费观看电影高清 | 91蝌蚪porny九色| 337p粉嫩大胆噜噜噜噜噜91av| 亚洲女同一区二区| 99在线视频精品| 中文字幕 久热精品 视频在线 | 久热成人在线视频| 5月丁香婷婷综合| 亚洲v精品v日韩v欧美v专区| 色综合久久久久久久久| 成人免费一区二区三区在线观看| 成人久久久精品乱码一区二区三区 | 三级亚洲高清视频| 欧美日韩一区三区四区| 一区二区三区四区av| 在线视频中文字幕一区二区| 亚洲激情自拍偷拍| 在线免费观看日韩欧美| 亚洲国产成人av好男人在线观看| 91麻豆swag| 亚洲一本大道在线| 欧美日韩国产综合一区二区三区| 亚洲国产欧美在线| 欧美日韩日日摸| 人妖欧美一区二区| 欧美va亚洲va| 国产一区 二区| 国产精品免费久久久久| 99久久久国产精品免费蜜臀| 亚洲欧美日韩久久精品| 在线亚洲高清视频| 日韩不卡手机在线v区| 日韩欧美成人午夜| 国产福利一区二区三区| 欧美国产精品专区| 91精品福利在线| 免费国产亚洲视频| 国产三级久久久| 色嗨嗨av一区二区三区| 亚洲国产精品影院| 日韩欧美一区二区在线视频| 国产麻豆精品在线| 成人欧美一区二区三区黑人麻豆| 欧美亚洲动漫另类| 精品在线视频一区| 国产拍欧美日韩视频二区| 91香蕉视频黄| 丰满放荡岳乱妇91ww| 中文字幕欧美一| 欧美精品少妇一区二区三区| 久久精品99久久久| 国产精品久久777777| 欧美日韩成人综合| 国产精品一区二区久久不卡| 亚洲欧美精品午睡沙发| 日韩亚洲国产中文字幕欧美| 风间由美性色一区二区三区| 亚洲国产sm捆绑调教视频| 欧美成人a在线| aaa欧美日韩| 欧美aaa在线| 亚洲视频一区二区在线| 欧美一级国产精品| 不卡的av在线| 九九久久精品视频| 一区二区三区91| 久久久亚洲精品石原莉奈| 精品视频免费在线| 懂色一区二区三区免费观看 | 麻豆成人91精品二区三区| 国产精品二三区| 91麻豆精品国产无毒不卡在线观看| 久久不见久久见免费视频1| 亚洲女与黑人做爰| 欧美精品一区二区久久婷婷| 在线视频一区二区三区| 国产激情一区二区三区| 一区二区三区四区在线播放| 精品久久国产字幕高潮| 91黄色免费观看| 成人午夜激情片| 麻豆国产欧美日韩综合精品二区| 亚洲同性gay激情无套| 久久精品夜色噜噜亚洲a∨| 91麻豆精品国产91久久久更新时间|