// natFirstThread.cc - Implementation of FirstThread native methods.

/* Copyright (C) 1998, 1999, 2000, 2001  Free Software Foundation

   This file is part of libgcj.

This software is copyrighted work licensed under the terms of the
Libgcj License.  Please consult the file "LIBGCJ_LICENSE" for
details.  */

#include <config.h>

#include <stdio.h>
#include <stdlib.h>

#include <gcj/cni.h>
#include <jvm.h>

#include <gnu/gcj/runtime/FirstThread.h>

typedef void main_func (jobject);

void
gnu::gcj::runtime::FirstThread::call_main (void)
{
  Utf8Const* main_signature = _Jv_makeUtf8Const ("([Ljava.lang.String;)V", 22);
  Utf8Const* main_name = _Jv_makeUtf8Const ("main", 4);

  _Jv_Method *meth = _Jv_GetMethodLocal (klass, main_name, main_signature);

  // Some checks from Java Spec section 12.1.4.
  const char *msg = NULL;
  if (meth == NULL)
    msg = "no suitable method `main' in class";
  else if (! java::lang::reflect::Modifier::isStatic(meth->accflags))
    msg = "`main' must be static";
  else if (! java::lang::reflect::Modifier::isPublic(meth->accflags))
    msg =  "`main' must be public";
  if (msg != NULL)
    {
      fprintf (stderr, "%s\n", msg);
      ::exit(1);
    }

  main_func *real_main = (main_func *) meth->ncode;
  (*real_main) (args);
}
