// vim: ts=4 sw=4 expandtab ft=java
//
// Copyright (C) 2001-2004, 2011 The University of Melbourne.
// Copyright (C) 2015, 2018 The Mercury team.
// This file is distributed under the terms specified in COPYING.LIB.
//

package jmercury.runtime;

public class DuFunctorDesc implements java.io.Serializable {

    public java.lang.String du_functor_name;
    public short du_functor_orig_arity;
    public short du_functor_arg_type_contains_var;
    public Sectag_Locn du_functor_sectag_locn;
    public byte du_functor_primary;
    public int du_functor_secondary;
    public int du_functor_ordinal;
    // XXX PseudoTypeInfo's have not been implemented properly
    //     yet, so this may not be correct.
    public /*final*/ PseudoTypeInfo[] du_functor_arg_types;
    public /*final*/ java.lang.String[] du_functor_arg_names;
    public /*final*/ DuArgLocn[] du_functor_arg_locns;
    public /*final*/ DuExistInfo du_functor_exist_info;
    public FunctorSubtypeInfo du_functor_subtype_info;
    public byte du_functor_num_sectag_bits;     // not used in Java grades

    public DuFunctorDesc()
    {
    }

    public void init(java.lang.String functor_name,
        short orig_arity,
        short arg_type_contains_var,
        int sectag_locn,
        byte primary,
        int secondary,
        int ordinal,
        // XXX why do we need to use Object here?
        java.lang.Object arg_types,
        java.lang.Object arg_names,
        java.lang.Object arg_locns,
        java.lang.Object exist_info,
        int functor_subtype_info,
        byte num_sectag_bits)
    {
        du_functor_name = functor_name;
        du_functor_orig_arity = orig_arity;
        du_functor_ordinal = ordinal;
        du_functor_arg_type_contains_var = arg_type_contains_var;
        du_functor_sectag_locn = new Sectag_Locn(sectag_locn);
        du_functor_primary = primary;
        du_functor_secondary = secondary;
        du_functor_ordinal = ordinal;
        du_functor_arg_types = (PseudoTypeInfo []) arg_types;
        du_functor_arg_names = (java.lang.String []) arg_names;
        du_functor_arg_locns = (DuArgLocn []) arg_locns;
        du_functor_exist_info = (DuExistInfo) exist_info;
        du_functor_subtype_info =
            new FunctorSubtypeInfo(functor_subtype_info);
        du_functor_num_sectag_bits = num_sectag_bits;
    }
}
