Package anvil.codec

Examples of anvil.codec.ConstantPool



  public void compile(ByteCompiler context, int operation)
  {
    Code code = context.getCode();
    ConstantPool pool = code.getPool();
    if (_function instanceof NativeJava) {
      if (hasSplices()) {
        code.getstatic(pool.addFieldRef(_function.getParent().getTypeRef(pool),
          "__module__", "Lanvil/script/compiler/NativeNamespace;"));
        code.aload_first();
        code.astring(_function.getName())
        context.compileArgumentList(getChilds(0));
        code.invokevirtual(pool.addMethodRef(
          "anvil/script/compiler/NativeNamespace", "execute",
          "(Lanvil/script/Context;Ljava/lang/String;[Lanvil/core/Any;)Lanvil/core/Any;"));
         
      } else {
        context.compileCall(_function, getChilds(0));
       
      }
     
    } else {
      if (hasSplices()) {
        code.getstatic(pool.addFieldRef(context.TYPE_MODULE,
          "f_"+_function.getName(), "Lanvil/script/Function;"));
        code.aload_first();
        context.compileArgumentList(getChilds(0));
        code.invokeinterface(pool.addInterfaceMethodRef(
          context.TYPE_FUNCTION, "execute",
          "(Lanvil/script/Context;[Lanvil/core/Any;)Lanvil/core/Any;"));
         
      } else {
        context.compileCall(_function, getChilds(0));
View Full Code Here


  public static FunctionDispatcher create(CompilableFunction function, boolean isstatic, ZoneClassLoader loader)
    throws Throwable
  {
    ClassRoom clazz = new ClassRoom();
    ConstantPool pool = clazz.getPool();
    String classname = getNextName();
    clazz.setClassname(classname, null);
    clazz.setSuperClassname("java/lang/Object");
    clazz.addInterface("anvil/script/FunctionDispatcher");
    clazz.setAccessFlags(ACC_PUBLIC|ACC_FINAL);
View Full Code Here


  public void compile(ByteCompiler context)
  {
    Code code = context.getCode();
    ConstantPool pool = code.getPool();
    FunctionStatement function = getFunctionStatement();
    final boolean in_generator = function.isGenerator();
   
    if (_expression.needLineNumbers()) {
      context.location(_expression.getLocation());
    }
    if (in_generator) {
   
      if (_index != null) {
        _indexvar.compile(context, new Node()
        {
          public void compile(ByteCompiler context, int operation)
          {
            Code code_ = context.getCode();
            code_.getstatic(code_.getPool().addFieldRef(
              context.TYPE_ANY, "ZERO", "Lanvil/core/Any;"));
          }
        });
        code.pop();
      }

      int clazz1 = pool.addClass("java/util/Enumeration");
      int clazz2 = pool.addClass("anvil/java/util/BindingEnumeration");
      int clazz3 = pool.addClass("anvil/core/AnyBindingEnumeration");
      code.anew(clazz3);
      code.dup();
      _expression.compile(context, Expression.GET);
      code.invokevirtual(pool.addMethodRef(context.TYPE_ANY, "enumeration", "()Lanvil/java/util/BindingEnumeration;"));
      code.invokespecial(pool.addMethodRef(clazz3, "<init>", "(Lanvil/java/util/BindingEnumeration;)V"));
      final int tmp = code.addLocal();
      code.astore(tmp);
      _enumvar.compile(context, new Node()
      {
        public void compile(ByteCompiler context, int operation)
        {
          context.getCode().aload(tmp);
        }
      });
      code.endLocal(tmp);
      code.pop();

      Target start = code.getTarget();
      _startscope = code.getSource();
      _endscope = code.getSource();

      _enumvar.compile(context, Node.GET);
      code.invokeinterface(pool.addInterfaceMethodRef(clazz1, "hasMoreElements", "()Z"));
      code.if_eq(_endscope);

      if (_index != null) {
       
        new AssignmentNode(new ExpressionList(_index,
          new Node() {
            public void compile(ByteCompiler context, int operation)
            {
              _indexvar.compile(context, GET);
            }
          })).compile(context, Node.GET);
         
        code.pop();
       
        _indexvar.compile(context, new Node() {
          public void compile(ByteCompiler context, int operation)
          {
            Code code_ = context.getCode();
            _indexvar.compile(context, GET);
            code_.invokevirtual(code_.getPool().addMethodRef(context.TYPE_ANY,
              "increase", "()Lanvil/core/Any;"));
          }
        });
        code.pop();
      }

      if (_key != null) {
        new AssignmentNode(new ExpressionList(_key,
          new Node() {
            public void compile(ByteCompiler context, int operation)
            {
              Code code_ = context.getCode();
              ConstantPool pool_ = code_.getPool();
              _enumvar.compile(context, Node.GET);
              code_.invokeinterface(pool_.addInterfaceMethodRef("anvil/java/util/BindingEnumeration", "nextKey", "()Ljava/lang/Object;"));
              code_.invokestatic(pool_.addMethodRef(context.TYPE_ANY, "create", "(Ljava/lang/Object;)Lanvil/core/Any;"));
            }
          })).compile(context, Node.GET);
        code.pop();
      }


      if (_value != null) {
        new AssignmentNode(new ExpressionList(_value,
          new Node() {
            public void compile(ByteCompiler context, int operation)
            {
              Code code_ = context.getCode();
              ConstantPool pool_ = code_.getPool();
              _enumvar.compile(context, Node.GET);
              code_.invokeinterface(pool_.addInterfaceMethodRef("java/util/Enumeration", "nextElement", "()Ljava/lang/Object;"));
              code_.invokestatic(pool_.addMethodRef(context.TYPE_ANY, "create", "(Ljava/lang/Object;)Lanvil/core/Any;"));
            }
          })).compile(context, Node.GET);
        code.pop();

      } else
        _enumvar.compile(context, Node.GET);
        code.invokeinterface(pool.addInterfaceMethodRef(clazz1, "nextElement", "()Ljava/lang/Object;"));
        code.pop();

      }

      _statement.compile(context);
      code.go_to(_startscope);
      _endscope.bind();
      _startscope.bind(start);

    } else {

      final int l_enum = code.addLocal();
      final int l_index = (_index != null) ? code.addLocal() : 0;
      if (l_index != 0) {
        code.iconst(0);
        code.istore(l_index);
      }

      // create enumeration, and wrap it
      int clazz1 = pool.addClass("java/util/Enumeration");
      int clazz2 = pool.addClass("anvil/java/util/BindingEnumeration");
      _expression.compile(context, Expression.GET);
      code.invokevirtual(pool.addMethodRef(context.TYPE_ANY, "enumeration", "()Lanvil/java/util/BindingEnumeration;"));
      code.astore(l_enum);
      int sun_hack_1 = 10 + l_enum;

      Target start = code.getTarget();
      _startscope = code.getSource();
      _endscope = code.getSource();

      code.aload(l_enum);
      int sun_hack_2 = 10 + l_enum;
     
      code.invokeinterface(pool.addInterfaceMethodRef(clazz1, "hasMoreElements", "()Z"));
      code.if_eq(_endscope);

      if (_index != null) {
        new AssignmentNode(new ExpressionList(_index,
          new Node() {
            public void compile(ByteCompiler context, int operation)
            {
              Code code_ = context.getCode();
              code_.iload(l_index);
              code_.iinc(l_index, 1);
              code_.invokestatic(code_.getPool().addMethodRef(
                context.TYPE_ANY, "create", "(I)Lanvil/core/Any;"));
            }
          })).compile(context, Node.GET);
        code.pop();
      }

      if (_key != null) {
        new AssignmentNode(new ExpressionList(_key,
          new Node() {
            public void compile(ByteCompiler context, int operation)
            {
              Code code_ = context.getCode();
              ConstantPool pool_ = code_.getPool();
              code_.aload(l_enum);
              code_.invokeinterface(pool_.addInterfaceMethodRef("anvil/java/util/BindingEnumeration", "nextKey", "()Ljava/lang/Object;"));
              code_.invokestatic(pool_.addMethodRef(context.TYPE_ANY, "create", "(Ljava/lang/Object;)Lanvil/core/Any;"));
            }
          })).compile(context, Node.GET);
        code.pop();
      }

      if (_value != null) {
        new AssignmentNode(new ExpressionList(_value,
          new Node() {
            public void compile(ByteCompiler context, int operation)
            {
              Code code_ = context.getCode();
              ConstantPool pool_ = code_.getPool();
              code_.aload(l_enum);
              code_.invokeinterface(pool_.addInterfaceMethodRef("java/util/Enumeration", "nextElement", "()Ljava/lang/Object;"));
              code_.invokestatic(pool_.addMethodRef(context.TYPE_ANY, "create", "(Ljava/lang/Object;)Lanvil/core/Any;"));
            }
          })).compile(context, Node.GET);
        code.pop();

      } else
View Full Code Here

 
  public static GeneratorDispatcher createGenerator(CompilableFunction function, ZoneClassLoader loader)
    throws Throwable
  {
    ClassRoom clazz = new ClassRoom();
    ConstantPool pool = clazz.getPool();
    String classname = getNextName();
    clazz.setClassname(classname, null);
    clazz.setSuperClassname("java/lang/Object");
    clazz.addInterface("anvil/script/GeneratorDispatcher");
    clazz.setAccessFlags(ACC_PUBLIC|ACC_FINAL);

    Method method = clazz.createMethod("<init>", "()V", ACC_PUBLIC);
    Code code = method.getCode();
    code.self();
    code.invokespecial(pool.addMethodRef(clazz.getSuperClassIndex(), "<init>", "()V"));
    code.vreturn();

    method = clazz.createMethod("execute",
      "(Lanvil/script/Context;Lanvil/core/AnyClass;Lanvil/script/Generator;)Lanvil/core/Any;",
      ACC_PUBLIC|ACC_FINAL);
    code = method.getCode();
    code.addLocals(4);
   
    boolean ismethod = (function.getType() == Type.METHOD);
    Scope parent = function.getParent();
    int parent_ref = parent.getTypeRef(pool);
    if (ismethod) {
      code.aload(2);
      code.checkcast(parent_ref);
    }
    code.aload(1);
    code.aload(3);
    int method_ref = pool.addMethodRef(
        parent_ref, "h_"+function.getName(), "(Lanvil/script/Context;Lanvil/script/Generator;)Lanvil/core/Any;");
    if (ismethod) {
      code.invokevirtual(method_ref);
    } else {
      code.invokestatic(method_ref);
View Full Code Here

 

  public void compile(ByteCompiler context, int operation)
  {
    Code code = context.getCode();
    ConstantPool pool = code.getPool();

    boolean inclass = (_thunk.getType() != Type.FUNCTION);

    int clazz = pool.addClass("anvil/script/Thunk");
    code.anew(clazz);
    code.dup();

    String name = (inclass ? "m_" : "f_")+_thunk.getName();
    String signature = inclass ?
      "(Lanvil/script/StackFrame;Lanvil/script/Function;Lanvil/core/Any;)V" :
      "(Lanvil/script/StackFrame;Lanvil/script/Function;)V";

    if (_context != null) {
      code.aload(_context.getFrameIndex());
    } else {
      code.aconst_null();
    }
    code.getstatic(pool.addFieldRef(_thunk.getParent().getTypeRef(pool), name, "Lanvil/script/Function;"));
    if (inclass) {
      code.self();
    }
    code.invokespecial(pool.addMethodRef(clazz, "<init>", signature));

    if (operation == GET_BOOLEAN) {
      context.any2boolean();
    }
  }
View Full Code Here

 

  public void compile(ByteCompiler context)
  {
    Code code = context.getCode();
    ConstantPool pool = code.getPool();
    FunctionStatement function = getFunctionStatement();
    if (function.isGenerator()) {
      code.aload(function.getFrameIndex());
      code.invokevirtual(pool.addMethodRef("anvil/script/Generator", "setClosedState", "()V"));
    }
    int rv = 0;   
    if (_expression != null) {
      if (_expression.needLineNumbers()) {
        context.location(_expression.getLocation());
View Full Code Here

  }
 
  public void compile(ByteCompiler context)
  {
    Code code = context.getCode();
    ConstantPool pool = code.getPool();
    boolean needloop =
      (_start != null) ||
      (_end != null) ||
      (_release != null) ||
      (_statement != null);

    if (needloop) {
      if (_init != null) {
        _init.compile(context, Node.GET);
      } else {
        code.getstatic(pool.addFieldRef(context.TYPE_ANY, "UNDEFINED",
          "Lanvil/core/Any;"));
      }
      code.dup();

      int contextframe = pool.addMethodRef(context.TYPE_CONTEXT, "frame",
        "()Lanvil/script/StackFrame;");
      code.aload_first();
      code.invokevirtual(contextframe);
      code.swap();
      code.invokevirtual(pool.addMethodRef("anvil/script/StackFrame",
        "push", "(Lanvil/core/Any;)V"));

      _framelocal = code.addLocal();
      code.astore(_framelocal);

      ExceptionHandler handler = code.startExceptionHandler(true);
      _handler = handler;
      Target tostart = code.getTarget();
      if (_start != null) {
        _start.compile(context, Node.GET_BOOLEAN);
        Source istrue = code.if_ne();
        handler.callFinally();
        handler.jumpOut();
        istrue.bind();
      }
      if (_statement != null) {
        _statement.compile(context);
      }
      if (_end != null) {
        _end.compile(context, Node.GET_BOOLEAN);
        code.if_ne(tostart);
      }
      handler.endTry();
      if (_statement == null || !_statement.isBlocked()) {
        handler.callFinally();
        handler.jumpOut();
      }
      handler.endProtectedRegion();

      handler.startCatch(0);
      int thrown = code.addLocal();
      code.astore(thrown);
      handler.callFinally();
      code.aload(thrown);
      code.athrow();
      handler.endCatches();
       _handler = null;

      // finally
      handler.startFinally();
      int returnto = code.addLocal();
      code.astore(returnto);
      code.aload_first();
      code.invokevirtual(contextframe);
      code.invokevirtual(pool.addMethodRef("anvil/script/StackFrame",
        "pop", "()Lanvil/core/Any;"));
      code.pop();
      if (_release != null) {
        _release.compile(context, Node.GET);
        code.pop();
View Full Code Here


  public void compile(ByteCompiler context, Node child)
  {
    Code code = context.getCode();
    ConstantPool pool = code.getPool();
    _child.compile(context, GET);
    child.compile(context, GET);
    code.dup_x1();
    code.invokevirtual(pool.addMethodRef(context.TYPE_ANY, "setRef",
      "(Lanvil/core/Any;)V"));
  }
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:
      _child.compile(context, GET_REF);
      break;
View Full Code Here

  {
   
    public void compile(ByteCompiler context, int operation)
    {
      Code code = context.getCode();
      ConstantPool pool = code.getPool();
      code.aload_first();
      code.invokevirtual(pool.addMethodRef(context.TYPE_CONTEXT, "frame",
        "()Lanvil/script/StackFrame;"));
      code.invokevirtual(pool.addMethodRef("anvil/script/StackFrame", "peek",
        "()Lanvil/core/Any;"));
    }
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.