Package anvil.codec

Examples of anvil.codec.Code


  {
    /* 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


    boolean in_class = (_function.getType() != Type.FUNCTION);
    String name = (in_class ? "m_" : "f_")+_function.getName();
    String signature = in_class ?
      "(Lanvil/core/Any;Lanvil/script/Function;Lanvil/script/StackFrame;)V" :
      "(Lanvil/script/Function;Lanvil/script/StackFrame;)V";
    Code code = context.getCode();
    ConstantPool pool = code.getPool();
    int anyfunction = pool.addClass("anvil/core/runtime/AnyFunction");
    code.anew(anyfunction);
    code.dup();
    int parent = _function.getParent().getTypeRef(pool);
    int field = pool.addFieldRef(parent, name, "Lanvil/script/Function;");
    if (in_class) {
      code.self();
    }
    code.getstatic(field);
    code.aload(_context.getFrameIndex());
    int depth = Grammar.countEscapeDepth(_context, _function);
    if (depth >= 0) {
      code.iconst(depth+1);
      code.invokevirtual(pool.addMethodRef("anvil/script/StackFrame", "getEscape",
        "(I)Lanvil/script/StackFrame;"));
    }
    code.invokespecial(pool.addMethodRef(anyfunction, "<init>", signature));
    if (operation == GET_BOOLEAN) {
      context.any2boolean();
    }
  }
View Full Code Here

 
  public void compile(ByteCompiler context, int operation)
  {
    boolean get_type = (operation == GET_TYPE);
    Code code = context.getCode();
    ConstantPool pool = code.getPool();
    if (_type instanceof NativeJava) {
      switch(_type.getType()) {
      case Type.FUNCTION:
        {
          code.getstatic(pool.addFieldRef(_type.getParent().getTypeRef(pool),
            "__module__", "Lanvil/script/compiler/NativeNamespace;"));
          code.aload_first();
          code.astring(_type.getName())
          int method;
          if (get_type) {
            method = pool.addMethodRef("anvil/script/compiler/NativeNamespace",
              "getDeclaration", "(Lanvil/script/Context;Ljava/lang/String;)Lanvil/script/Type;");
          } else {
            method = pool.addMethodRef("anvil/script/compiler/NativeNamespace", "getFunction",
              "(Lanvil/script/Context;Ljava/lang/String;)Lanvil/core/Any;");
          }
          code.invokevirtual(method);
        }
        break;

      case Type.CLASS:
        {
          code.getstatic(pool.addFieldRef(_type.getTypeRef(pool),
            "__class__", "Lanvil/script/compiler/NativeClass;"));
          if (!get_type) {
            code.invokevirtual(pool.addMethodRef("anvil/script/compiler/NativeClass",
              "getWrapper", "()Lanvil/core/Any;"));
          }
        }
        break;
       
      case Type.NAMESPACE:
        {
          code.getstatic(pool.addFieldRef(_type.getTypeRef(pool),
            "__module__", "Lanvil/script/compiler/NativeNamespace;"));
          if (!get_type) {
            code.invokevirtual(pool.addMethodRef("anvil/script/compiler/NativeNamespace",
              "getWrapper", "()Lanvil/core/Any;"));         
          }
        }
        break;
       
      case Type.METHOD:
        {
          code.getstatic(pool.addFieldRef(_type.getParent().getTypeRef(pool),
            "__class__", "Lanvil/script/compiler/NativeClass;"));
          int method;
          code.aload_first();
          code.astring(_type.getName())
          if (get_type) {
            method = pool.addMethodRef("anvil/script/compiler/NativeClass",
              "getDeclaration", "(Lanvil/script/Context;Ljava/lang/String;)Lanvil/script/Type;");
          } else {
            method = pool.addMethodRef("anvil/script/compiler/NativeClass", "getMethod",
              "(Lanvil/script/Context;Ljava/lang/String;)Lanvil/core/Any;");
          }
          code.invokevirtual(method);
        }
        break;
      }
     
    } else {
      switch(_type.getType()) {
      case Type.FUNCTION:
        {
          int field = pool.addFieldRef(_type.getParent().getTypeRef(pool),
            (get_type ? "f_" : "F_") + _type.getName(),
             get_type ? "Lanvil/script/Function;" : "Lanvil/core/Any;");
          code.getstatic(field);
        }
        break;
     
      case Type.MEMBER_VARIABLE:
        {
          Type parent = _type.getParent();
          int field = pool.addFieldRef(parent.getTypeRef(pool), "_class",
            "Lanvil/script/compiler/CompiledClassType;");
          code.getstatic(field);
          code.aload_first();
          code.astring(_type.getName());
          code.invokevirtual(pool.addMethodRef(
            "anvil/script/compiler/CompiledClassType",
            get_type ?
              "getMember" :
              "getMemberType",
            get_type ?
              "(Lanvil/script/Context;Ljava/lang/String;)Lanvil/script/Type;" :
              "(Lanvil/script/Context;Ljava/lang/String;)Lanvil/core/Any;"));
        }
        break;
       
      case Type.INTERFACE_METHOD:
      case Type.METHOD:
      case Type.CONSTRUCTOR:
        {
          int field = pool.addFieldRef(_type.getParent().getTypeRef(pool),
            (get_type ? "m_" : "M_") + _type.getName(),
             get_type ? "Lanvil/script/Function;" : "Lanvil/core/Any;");
          code.getstatic(field);
        }
        break;

      case Type.CLASS:
        {
          if (get_type) {
            int field = pool.addFieldRef(_type.getTypeRef(pool), "_class",
              "Lanvil/script/compiler/CompiledClassType;");
            code.getstatic(field);
          } else {
            int field = pool.addFieldRef(_type.getTypeRef(pool),
              "_type", "Lanvil/core/Any;");
            code.getstatic(field);           
          }
        }
        break;

      case Type.INTERFACE:
        {
          int field = pool.addFieldRef(_type.getTypeRef(pool),
            get_type ? "_class" : "_type",
            get_type ? "Lanvil/script/compiler/CompiledInterfaceType;" : "Lanvil/core/Any;");
          code.getstatic(field);
        }
        break;

      case Type.NAMESPACE:
        {
          int field = pool.addFieldRef(_type.getTypeRef(pool),
            get_type ? "_class" : "_type",
            get_type ? "Lanvil/script/compiler/CompiledNamespace;" : "Lanvil/core/Any;");
          code.getstatic(field);
        }
        break;
               
      case Type.MODULE:
        {
          int field = code.getPool().addFieldRef(_type.getTypeRef(pool),
            get_type ? "_module" : "_type",
            get_type ? "Lanvil/script/compiler/CompiledModule;" : "Lanvil/core/Any;");
          code.getstatic(field);
        }
        break;

      }
    }
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));
    if (toType > 0) {
      code.invokevirtual(toType);
    } else if (toType < 0) {
      code.invokestatic(-toType);
    }
    switch(treturn) {
    case 0:
      code.pop();
      code.vreturn();
      break;
    case 1:
      code.ireturn();
      break;
    case 2:
      code.areturn();
      break;
    }
    context.popCode();
  }
View Full Code Here

 

  public void compile(ByteCompiler context, Node child)
  {
    Code code = context.getCode();
    _child.compile(context, GET);
    code.aload_first();
    child.compile(context, GET);
    code.invokevirtual(code.getPool().addMethodRef(context.TYPE_ANY,
      "setReference", "(Lanvil/script/Context;Lanvil/core/Any;)Lanvil/core/Any;"));
  }
View Full Code Here

  }
 

  public void compile(ByteCompiler context)
  {
    Code code = context.getCode();
    switch(_condition.conditionOf()) {
    case Expression.IS_FALSE:
      if (_elseStatements != null) {
        _elseStatements.compile(context);
      }
      break;
     
    case Expression.IS_TRUE:
      _thenStatements.compile(context);
      break;
     
    case Expression.IS_DYNAMIC:
      if (_condition.needLineNumbers()) {
        context.location(_condition.getLocation());
      }
      _condition.compile(context, Expression.GET_BOOLEAN);
      Source to_then = code.if_eq();
      _thenStatements.compile(context);
      if (_elseStatements != null) {
        Source to_end = code.go_to();
        to_then.bind();
        _elseStatements.compile(context);
        to_end.bind();
      } else {
        to_then.bind();
View Full Code Here

  }


  public void compile(ByteCompiler context, int operation)
  {
    Code code = context.getCode();
    switch(operation) {
    case GET:
      _child.compile(context, GET);
      code.aload_first();
      code.astring(_attribute);
      code.invokevirtual(code.getPool().addMethodRef(context.TYPE_ANY, "getAttribute",
        "(Lanvil/script/Context;Ljava/lang/String;)Lanvil/core/Any;"));
      break;

    case GET_BOOLEAN:
      _child.compile(context, GET);
      code.aload_first();
      code.astring(_attribute);
      code.invokevirtual(code.getPool().addMethodRef(context.TYPE_ANY, "getAttribute",
        "(Lanvil/script/Context;Ljava/lang/String;)Lanvil/core/Any;"));
      context.any2boolean();
      break;

    case CHECK:
      _child.compile(context, GET);
      code.aload_first();
      code.astring(_attribute);
      code.invokevirtual(code.getPool().addMethodRef(context.TYPE_ANY, "checkAttribute",
        "(Lanvil/script/Context;Ljava/lang/String;)Lanvil/core/Any;"));
      break;

    case DELETE:
      _child.compile(context, GET);
      code.aload_first();
      code.astring(_attribute);
      code.invokevirtual(code.getPool().addMethodRef(context.TYPE_ANY, "deleteAttribute",
        "(Lanvil/script/Context;Ljava/lang/String;)Z"));
      break;
    }
  }
View Full Code Here

  }
 

  public void compile(ByteCompiler context)
  {
    Code code = context.getCode();
    ConstantPool pool = code.getPool();
    int clazz = pool.addClass("anvil/script/ExitException");
    if (_expression != null) {
      if (_expression.needLineNumbers()) {
        context.location(_expression.getLocation());
      }
      code.anew(clazz);
      code.dup();
      _expression.compile(context, Expression.GET);
      code.invokespecial(pool.addMethodRef(clazz, "<init>", "(Lanvil/core/Any;)V"));
    } else {
      code.anew(clazz);
      code.dup();
      code.invokespecial(pool.addMethodRef(clazz, "<init>", "()V"));
    }
    code.athrow();
 
View Full Code Here

  }


  public void compile(ByteCompiler context, int operation)
  {
    Code code = context.getCode();
    code.aload_first();
    code.astring(_namespace.getName());
    code.invokevirtual(code.getPool().addMethodRef(context.TYPE_CONTEXT,
      "getNS", "(Ljava/lang/String;)Lanvil/core/Any;"));
    if (operation == GET_BOOLEAN) {
      context.any2boolean();
    }
  }
View Full Code Here

  }


  public void compile(ByteCompiler context, int operation)
  {
    Code code = context.getCode();
    if (operation == GET_BOOLEAN) {
      code.iconst(_symbol.toBoolean());
    } else {
      context.constant(_symbol, false);
    }
  }
View Full Code Here

TOP

Related Classes of anvil.codec.Code

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.