    public Construct execute(List<Construct> args, Env env){
        env.SetVarList(new IVariableList());
        CArray array = new CArray(0, null);        
        for(String key : originals.keySet()){
            Construct c = originals.get(key);
            env.GetVarList().set(new IVariable(key, c, 0, null));
            array.push(c);
        }
        GenericTree<Construct> root = new GenericTree<Construct>();
        root.setRoot(tree);
        Script fakeScript = new Script(null, null);
        for(int i = 0; i < args.size(); i++){
            Construct c = args.get(i);
            array.set(i, c);
            if(varIndex.size() > i){
                String varname = varIndex.get(i).getName();
                env.GetVarList().set(new IVariable(varname, c, c.getLineNum(), c.getFile()));
            }
        }
        env.GetVarList().set(new IVariable("@arguments", array, 0, null));
        try{
            fakeScript.eval(tree, env);
        } catch(FunctionReturnException e){
            return e.getReturn();
        }
        return new CVoid(0, null);
    }

    public Construct execute(List<Construct> args, Env env){
        env.SetVarList(new IVariableList());
        CArray array = new CArray(0, null);        
        for(String key : originals.keySet()){
            Construct c = originals.get(key);
            env.GetVarList().set(new IVariable(key, c, 0, null));
            array.push(c);
        }
        GenericTree<Construct> root = new GenericTree<Construct>();
        root.setRoot(tree);
        Script fakeScript = Script.GenerateScript(tree, env.GetLabel());
        for(int i = 0; i < args.size(); i++){
            Construct c = args.get(i);
            array.set(i, c);
            if(varIndex.size() > i){
                String varname = varIndex.get(i).getName();
                env.GetVarList().set(new IVariable(varname, c, c.getLineNum(), c.getFile()));
            }
        }
        env.GetVarList().set(new IVariable("@arguments", array, 0, null));
        try{
            fakeScript.eval(tree, env);
        } catch(FunctionReturnException e){
            return e.getReturn();
        }
        return new CVoid(0, null);
    }
