home *** CD-ROM | disk | FTP | other *** search
/ Geek Gadgets 1 / ADE-1.bin / ade-dist / kaffe-0.5p4-src.tgz / tar.out / contrib / kaffe / lib / native / java.lang / Class.c next >
C/C++ Source or Header  |  1996-09-28  |  2KB  |  110 lines

  1. /*
  2.  * java.lang.Class.c
  3.  *
  4.  * Copyright (c) 1996 Systems Architecture Research Centre,
  5.  *           City University, London, UK.
  6.  *
  7.  * See the file "license.terms" for information on usage and redistribution
  8.  * of this file, and for a DISCLAIMER OF ALL WARRANTIES.
  9.  *
  10.  * Written by Tim Wilkinson <tim@sarc.city.ac.uk>, February 1996.
  11.  */
  12.  
  13. #define __jtypes_h
  14. #include <stdio.h>
  15. #include <assert.h>
  16. #include <string.h>
  17. #include "../../kaffevm/gtypes.h"
  18. #include <native.h>
  19. #include "../../kaffevm/access.h"
  20. #include "../../kaffevm/constants.h"
  21. #include "../../kaffevm/object.h"
  22. #include "../../kaffevm/classMethod.h"
  23. #include "defs.h"
  24.  
  25. extern char* addStringLen(char*, int);
  26. extern struct Hjava_lang_Class*    lookupClass(char*);
  27.  
  28. /*
  29.  * Convert string name to class object.
  30.  */
  31. struct Hjava_lang_Class*
  32. java_lang_Class_forName(struct Hjava_lang_Class* this, struct Hjava_lang_String* str)
  33. {
  34.     struct Hjava_lang_Class* c;
  35.     char* s;
  36.     char buf[MAXNAMELEN];
  37.     int i;
  38.  
  39.     /* Get string and convert '.' to '/' */
  40.     javaString2CString(str, buf, sizeof(buf));
  41.     classname2pathname(buf, buf);
  42.  
  43.     c = lookupClass(addStringLen(buf, strlen(buf)));
  44.     assert(c != 0);
  45.  
  46.     return (c);
  47. }
  48.  
  49. /*
  50.  * Convert class to string name.
  51.  */
  52. struct Hjava_lang_String*
  53. java_lang_Class_getName(struct Hjava_lang_Class* c)
  54. {
  55.     return (makeJavaString(c->name, strlen(c->name)));
  56. }
  57.  
  58. /*
  59.  * Create a new instance of the derived class.
  60.  */
  61. struct Hjava_lang_Object*
  62. java_lang_Class_newInstance(struct Hjava_lang_Class* this)
  63. {
  64.     return (execute_java_constructor(0, 0, this, "()V"));
  65. }
  66.  
  67. /*
  68.  * Return super class.
  69.  */
  70. struct Hjava_lang_Class*
  71. java_lang_Class_getSuperclass(struct Hjava_lang_Class* this)
  72. {
  73.     return (this->superclass);
  74. }
  75.  
  76. HArrayOfObject* /* [Ljava.lang.Class; */
  77. java_lang_Class_getInterfaces(struct Hjava_lang_Class* this)
  78. {
  79.     object* obj;
  80.     struct Hjava_lang_Class** ifaces;
  81.     int i;
  82.  
  83.     obj = AllocObjectArray(this->interface_len, this->name);
  84.     ifaces = (struct Hjava_lang_Class**)(obj+1);
  85.     for (i = 0; i < this->interface_len; i++) {
  86.         ifaces[i] = this->interfaces[i];
  87.     }
  88.  
  89.     return ((HArrayOfObject*)obj);
  90. }
  91.  
  92. /*
  93.  * Return the class loader which loaded me.
  94.  * Not currently supported.
  95.  */
  96. struct Hjava_lang_ClassLoader*
  97. java_lang_Class_getClassLoader(struct Hjava_lang_Class* this)
  98. {
  99.     return (0);
  100. }
  101.  
  102. /*
  103.  * Is the class an interface?
  104.  */
  105. long /* bool */
  106. java_lang_Class_isInterface(struct Hjava_lang_Class* this)
  107. {
  108.     return ((this->accflags & ACC_INTERFACE) ? 1 : 0);
  109. }
  110.