Package anvil.codec

Examples of anvil.codec.ConstantPool


    /* invoke(Context, int, Any[]) */
    {
      Method method = clazz.createMethod("invoke",
        "(Lanvil/script/Context;I[Lanvil/core/Any;)Lanvil/core/Any;", Code.ACC_PUBLIC);
      Code code = method.getCode();
      ConstantPool pool = code.getPool();
      context.pushCode(code);
      int l_context = code.addLocal();
      int l_index = code.addLocal();
      int l_parameters = code.addLocal();
      int l_length = code.addLocal();
      int l_newparameters = code.addLocal();
      code.aload(l_parameters);
      code.arraylength();
      code.istore(l_length);
      code.iload(l_length);
      code.iconst(1);
      code.iadd();
      code.anewarray(context.TYPE_ANY);
      code.astore(l_newparameters);
      code.aload(l_parameters);
      code.iconst(0);
      code.aload(l_newparameters);
      code.iconst(1);
      code.iload(l_length);
      code.invokestatic(pool.addMethodRef("java/lang/System", "arraycopy", "(Ljava/lang/Object;ILjava/lang/Object;II)V"));
      code.aload(l_newparameters);
      code.iconst(0);
      code.iload(l_index);
      code.invokestatic(pool.addMethodRef("anvil/core/Register", "getAnyNameOf", "(I)Lanvil/core/Any;"));
      code.aastore();
      code.getstatic(pool.addFieldRef(clazz.getIndex(), "m_"+function.getName(), "Lanvil/script/Function;"));
      code.aload(l_context);
      code.self();
      code.aload(l_newparameters);
      code.invokeinterface(pool.addInterfaceMethodRef("anvil/script/Function",
        "execute", "(Lanvil/script/Context;Lanvil/core/Any;[Lanvil/core/Any;)Lanvil/core/Any;"));
      code.areturn();
      context.popCode();
    }
   
    for(int i=0; i<4; i++) {
      Method method = clazz.createMethod("invoke", INVOKE_SIGNATURES[i], Code.ACC_PUBLIC);
      Node[] params = new Node[1 + i];
      params[0] = P2_TO_SYMBOL;
      for(int j=0; j<i; j++) {
        params[j+1] = new ParameterNode(3 + j);
      }
      compileCallback(context, function, method, false, 3+i, params, 0, 2);
    }

    /* invoke(Context, int, Any, Any, Any, Any) */
    {
      Method method = clazz.createMethod("invoke", INVOKE_SIGNATURES[4], Code.ACC_PUBLIC);
      Code code = method.getCode();
      ConstantPool pool = code.getPool();
      context.pushCode(code);
      int l_context = code.addLocal();
      int l_index = code.addLocal();
      int l_base = code.addLocal();
      code.addLocals(3);

      code.getstatic(pool.addFieldRef(clazz.getIndex(), "m_"+function.getName(), "Lanvil/script/Function;"));

      code.aload(l_context);

      code.self();

      code.iconst(5);
      code.anewarray(context.TYPE_ANY);

      code.dup();
      code.iconst(0);
      code.iload(l_index);
      code.invokestatic(pool.addMethodRef("anvil/core/Register", "getNameOf", "(I)Ljava/lang/String;"));
      code.invokestatic(pool.addMethodRef(context.TYPE_ANY, "create", "(Ljava/lang/String;)Lanvil/core/Any;"));
      code.aastore();

      for(int i=0; i<4; i++) {
        code.dup();
        code.iconst(i+1);
        code.aload(l_base + i);
        code.aastore();
      }

      code.invokeinterface(pool.addInterfaceMethodRef("anvil/script/Function",
        "execute", "(Lanvil/script/Context;Lanvil/core/Any;[Lanvil/core/Any;)Lanvil/core/Any;"));
      code.areturn();

      context.popCode();
    }
View Full Code Here


  protected void compileCallback(ByteCompiler context, CompilableFunction function,
    Method method, boolean getContext, int parameters, Node[] nodes, int toType, int treturn)
  {
    Code code = method.getCode();
    ConstantPool pool = code.getPool();
    context.pushCode(code);
    int contextindex = 1;
    if (parameters > 0) {
      code.addLocals(parameters);
    }
    if (getContext) {
      contextindex = code.addLocal();
      code.invokestatic(pool.addMethodRef(context.TYPE_CONTEXT, "getInstance", "()Lanvil/script/Context;"));
      code.astore(contextindex);
    }
    code.self();
    context.compileArgumentList(function, nodes, contextindex);
    code.invokevirtual(function.getTypeRef(pool));
View Full Code Here

  protected void compileEqualsMethod(ByteCompiler context, CompilableFunction function)
  {
    ClassRoom clazz = context.getClassRoom();
    Method method = clazz.createMethod("equals", "(Ljava/lang/Object;)Z", Code.ACC_PUBLIC);
    Code code = method.getCode();
    ConstantPool pool = code.getPool();
    context.pushCode(code);
    code.addLocal();
    code.aload(1);
    code.instance_of(context.TYPE_ANY);
    Source isfalse = code.if_eq();
    code.invokestatic(pool.addMethodRef(context.TYPE_CONTEXT, "getInstance", "()Lanvil/script/Context;"));
    code.astore(code.addLocal());
    code.self();
    context.compileArgumentList(function, CAST_P1_NODE, 2);
    code.invokevirtual(function.getTypeRef(pool));
    code.invokevirtual(pool.addMethodRef(context.TYPE_ANY, "toBoolean", "()Z"));
    code.ireturn();
    isfalse.bind();
    code.iconst(false);
    code.ireturn();
    context.popCode();
View Full Code Here


  public void compile(ByteCompiler context, int operation)
  {
    Code code = context.getCode();
    ConstantPool pool = code.getPool();
    /*if (hasSplices()) {
      int field = pool.addFieldRef(_method.getParent().getTypeRef(pool),
         "m_" + _method.getName(), "Lanvil/script/Function;");
      code.getstatic(field);
      code.aload_first();
View Full Code Here

    }
   
    public void compile(ByteCompiler context, int operation)
    {
      Code code = context.getCode();
      ConstantPool pool = code.getPool();
      code.iload(_local);
      code.invokestatic(pool.addMethodRef("anvil/core/Register", "getAnyNameOf", "(I)Lanvil/core/Any;"));
    }
View Full Code Here

  public void compile(ByteCompiler context)
  {
    ClassRoom clazz = context.getClassRoom().createClass(getDescriptor(), "n_"+_name);
    clazz.setAccessFlags(context.ACC_PUBLIC);
    ConstantPool pool = clazz.getPool();
    context.pushClass(clazz);
    Field typefield1 = clazz.createField("_class", "Lanvil/script/compiler/CompiledNamespace;", Code.ACC_PUBLIC|Code.ACC_STATIC);
    Field typefield2 = clazz.createField("_type", "Lanvil/core/Any;", Code.ACC_PUBLIC|Code.ACC_STATIC);
    clazz.setSuperClassname(context.TYPE_OBJECT);
    clazz.setAccessFlags(Code.ACC_SUPER|Code.ACC_PUBLIC);

    compileMembers(context, _types.size(), _types.elements());

    Code code = clazz.getStatic().getCode();
    context.pushCode(code);
    //code.println("INTERFACE-START:"+getDescriptor());
    code.getstatic(pool.addFieldRef(_parent.getDescriptor(), "_members", "[Ljava/lang/Object;"));
    code.pop();
    //code.println("INTERFACE-END:"+getDescriptor());
    code.vreturn();
    context.popCode();
View Full Code Here

  private void compileDependencies(ByteCompiler context)
  {
    ClassRoom clazz = context.getClassRoom();
    Code code = context.getCode();
    ConstantPool pool = code.getPool();
    Field field = clazz.createField("_imports", "[Ljava/lang/String;", Code.ACC_PUBLIC|Code.ACC_STATIC);
    code.iconst(_dependencies.size()*2);
    code.anewarray("java/lang/String");
    Iterator iter = _dependencies.values().iterator();
    for(int i=0; iter.hasNext(); ) {
View Full Code Here


  public void compile(ByteCompiler context, Node child)
  {
    Code code = context.getCode();
    ConstantPool pool = code.getPool();
    code.aload(_context.getFrameIndex());
    code.iconst(_depth);
    code.iconst(_index);
    child.compile(context, GET);
    code.invokevirtual(code.getPool().addMethodRef(context.TYPE_STACKFRAME,
View Full Code Here


  public void compile(ByteCompiler context, int operation)
  {
    Code code = context.getCode();
    ConstantPool pool = code.getPool();
    switch(operation) {
    case GET:
    case CHECK:
      code.aload(_context.getFrameIndex());
      code.iconst(_depth);
      code.iconst(_index);
      code.invokevirtual(code.getPool().addMethodRef(context.TYPE_STACKFRAME,
        "getLocal", "(II)Lanvil/core/Any;"));
      break;

    case GET_REF:
      int refclass = pool.addClass("anvil/core/AnyEscapedLocalRef");
      code.anew(refclass);
      code.dup();
      code.aload(_context.getFrameIndex());
      code.iconst(_depth);
      code.iconst(_index);
      code.invokespecial(pool.addMethodRef(refclass, "<init>", "(Lanvil/script/StackFrame;II)V"));
      break;

    case GET_BOOLEAN:
      code.aload(_context.getFrameIndex());
      code.iconst(_depth);
View Full Code Here

  public void compile(ByteCompiler context, int operation)
  {
    super.compile(context, GET_BOOLEAN);
    Code code = context.getCode();
    ConstantPool pool = code.getPool();
    Source notequal = code.if_icmpne();
    if (operation == GET_BOOLEAN) {
      code.iconst(false);
    } else {
      code.getstatic(pool.addFieldRef(context.TYPE_ANY, "FALSE", "Lanvil/core/Any;"));
    }
    Source toend = code.go_to();
    notequal.bind();
    if (operation == GET_BOOLEAN) {
      code.iconst(true);
    } else {
      code.getstatic(pool.addFieldRef(context.TYPE_ANY, "TRUE", "Lanvil/core/Any;"));
    }
    toend.bind();
  }
View Full Code Here

TOP

Related Classes of anvil.codec.ConstantPool

Copyright © 2018 www.massapicom. All rights reserved.
All source code are property of their respective owners. Java is a trademark of Sun Microsystems, Inc and owned by ORACLE Inc. Contact coftware#gmail.com.