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

? 歡迎來到蟲蟲下載站! | ?? 資源下載 ?? 資源專輯 ?? 關(guān)于我們
? 蟲蟲下載站

?? createbcode.jrag

?? JDK1.4編譯器后端
?? JRAG
?? 第 1 頁 / 共 4 頁
字號(hào):
/* * 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);

?? 快捷鍵說明

復(fù)制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號(hào) Ctrl + =
減小字號(hào) Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
一本久久a久久免费精品不卡| 国产黄人亚洲片| 国产欧美一区二区三区沐欲 | 不卡的av电影| 激情综合网最新| 麻豆精品久久久| 亚洲成av人片| 亚洲成人自拍一区| 一区二区三区日韩精品视频| 亚洲欧洲av色图| 国产精品色婷婷久久58| 中文一区一区三区高中清不卡| 日韩欧美国产综合一区| 91精品国产乱码久久蜜臀| 欧美丝袜第三区| 欧美日韩午夜影院| 欧美主播一区二区三区| jlzzjlzz亚洲女人18| 91免费国产视频网站| 色屁屁一区二区| 在线视频欧美区| 欧美最猛性xxxxx直播| 欧美视频在线观看一区二区| 欧美日韩精品欧美日韩精品| 欧美精品tushy高清| 欧美一区中文字幕| 精品国产一区二区在线观看| 久久久久国产精品麻豆ai换脸| 国产精品素人一区二区| 一区在线播放视频| 亚洲成av人影院| 国内精品伊人久久久久av一坑 | 欧美日韩精品免费| 日韩精品一区二区三区蜜臀 | 亚洲欧洲av另类| 午夜精品久久久久影视| 韩国av一区二区三区| 色综合色狠狠综合色| 日韩欧美国产综合一区| 国产精品久久久久久妇女6080| 午夜精品一区二区三区三上悠亚| 精品一区二区三区久久久| 成人美女在线观看| 欧美一区在线视频| 一区二区三区在线免费观看| 韩国精品主播一区二区在线观看 | 欧美精品一区二区三区很污很色的| 国产精品毛片久久久久久久| 麻豆一区二区三区| 日韩一本二本av| 亚洲第一搞黄网站| 99精品国产91久久久久久| 日韩精品中文字幕一区二区三区 | 菠萝蜜视频在线观看一区| 538在线一区二区精品国产| 中文字幕制服丝袜一区二区三区| 麻豆精品蜜桃视频网站| 欧美久久久久久久久久| 一区二区在线观看av| 成人av免费在线观看| 国产欧美日韩一区二区三区在线观看| 青青草一区二区三区| 欧美一区二区在线视频| 亚洲成人资源网| 精品污污网站免费看| 亚洲一区二区五区| 欧美日韩精品系列| 亚洲成人777| 制服视频三区第一页精品| 天堂av在线一区| 日韩精品一区国产麻豆| 麻豆精品视频在线观看免费| 精品盗摄一区二区三区| 久久99久久99精品免视看婷婷| 欧美zozozo| 91福利精品第一导航| 亚洲黄色免费网站| 欧美日韩国产天堂| 久久精品理论片| 国产日产欧产精品推荐色| 99久久久久久| 天天av天天翘天天综合网色鬼国产 | 91视视频在线观看入口直接观看www | 亚洲国产日韩综合久久精品| 日韩一区二区三区视频| 国产剧情av麻豆香蕉精品| 国产精品久久久久久久岛一牛影视 | 日韩精品专区在线影院重磅| 风间由美一区二区三区在线观看| 亚洲欧洲av另类| 精品人伦一区二区色婷婷| 成人国产精品免费观看动漫| 亚洲va国产天堂va久久en| 久久亚洲欧美国产精品乐播| 色噜噜狠狠色综合欧洲selulu| 国产成人精品免费| 亚洲韩国一区二区三区| 国产日韩精品一区二区三区| 欧美三级资源在线| 91网页版在线| 国产精品自拍在线| 午夜影院久久久| 亚洲人精品一区| 国产日韩欧美精品在线| 欧美精品v日韩精品v韩国精品v| 国产a级毛片一区| 老司机午夜精品| 琪琪一区二区三区| 亚洲最新在线观看| 国产精品丝袜久久久久久app| 欧美精品粉嫩高潮一区二区| 欧美视频中文字幕| 色噜噜狠狠成人中文综合| a亚洲天堂av| 成人av电影免费观看| k8久久久一区二区三区| 成人一区二区三区视频在线观看| 国产一区不卡在线| 国产成人免费视| av在线不卡电影| 99久久久免费精品国产一区二区| 国产盗摄女厕一区二区三区| 国产黄人亚洲片| www..com久久爱| 欧美专区日韩专区| 欧美理论电影在线| 欧美精品vⅰdeose4hd| 欧美一区二区三区在线电影| 精品国产一区二区三区av性色| 日韩欧美激情在线| 国产精品视频一区二区三区不卡| 中文字幕高清一区| 夜夜揉揉日日人人青青一国产精品 | 亚洲乱码精品一二三四区日韩在线| 国产精品美女久久久久久久久久久 | 国产精品免费视频一区| 成人欧美一区二区三区白人 | 精品美女一区二区| 中文字幕av一区二区三区免费看| 国产精品久久久久久户外露出| 亚洲色图一区二区| 日韩一区精品字幕| 国产主播一区二区| 91传媒视频在线播放| 欧美精品色综合| 国产精品国产三级国产普通话三级 | 韩国女主播一区| 在线亚洲欧美专区二区| 欧美精品一区二区久久婷婷| 一区二区在线看| 粉嫩欧美一区二区三区高清影视| 91丨九色丨蝌蚪丨老版| 精品久久五月天| 亚洲国产综合在线| 99久久精品国产网站| 久久综合久色欧美综合狠狠| 亚洲午夜精品17c| 成人av在线影院| 久久免费精品国产久精品久久久久| 亚洲猫色日本管| www.亚洲在线| 国产精品婷婷午夜在线观看| 加勒比av一区二区| 日韩欧美国产精品| 亚洲一区自拍偷拍| 色偷偷88欧美精品久久久 | 一区二区三区中文字幕精品精品| 国产九色sp调教91| 精品少妇一区二区三区| 久久精品国产亚洲aⅴ| 91精品午夜视频| 久久99日本精品| 2023国产精华国产精品| 麻豆91精品视频| 日韩精品在线网站| 国内成人免费视频| 久久久久久久精| 国产成人精品免费在线| 国产精品视频免费看| 国产寡妇亲子伦一区二区| 中文字幕va一区二区三区| 成av人片一区二区| 亚洲一区二区在线播放相泽| 56国语精品自产拍在线观看| 久久99精品国产.久久久久久| 精品日韩在线一区| 国产91在线|亚洲| 亚洲免费电影在线| 欧美一二区视频| 不卡高清视频专区| 日韩黄色小视频| 欧美国产一区二区在线观看| 日本高清不卡一区| 日本亚洲视频在线| 亚洲女同一区二区| 久久综合九色综合97婷婷女人| 99re在线视频这里只有精品| 午夜精品久久久久久久久久久| 久久久久久久久久久电影| 色婷婷av一区二区三区之一色屋|