Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
02110-1301, USA.
- $Id: resolve.c 7486 2007-03-08 13:50:07Z twisti $
+ $Id: resolve.c 7983 2007-05-30 20:04:42Z twisti $
*/
bool link,
classinfo **result)
{
- classinfo *cls = NULL;
- char *utf_ptr;
- int len;
-
+ classinfo *cls;
+ char *utf_ptr;
+ int len;
+ char *msg;
+ s4 msglen;
+ utf *u;
+
assert(result);
assert(referer);
assert(classname);
#endif
/* check access rights of referer to refered class */
+
if (checkaccess && !access_is_accessible_class(referer,cls)) {
- int msglen;
- char *message;
+ msglen =
+ utf_bytes(cls->name) +
+ utf_bytes(referer->name) +
+ 100;
+
+ msg = MNEW(char, msglen);
+
+ strcpy(msg, "class is not accessible (");
+ utf_cat_classname(msg, cls->name);
+ strcat(msg, " from ");
+ utf_cat_classname(msg, referer->name);
+ strcat(msg, ")");
- msglen = utf_bytes(cls->name) + utf_bytes(referer->name) + 100;
- message = MNEW(char, msglen);
- strcpy(message, "class is not accessible (");
- utf_cat_classname(message, cls->name);
- strcat(message, " from ");
- utf_cat_classname(message, referer->name);
- strcat(message, ")");
+ u = utf_new_char(msg);
- exceptions_throw_illegalaccessexception(message);
+ MFREE(msg, char, msglen);
- MFREE(message, char, msglen);
+ exceptions_throw_illegalaccessexception(u);
return false; /* exception */
}
resolve_mode_t mode,
resolve_err_t error)
{
- classinfo *subclass;
- typeinfo subti;
- typecheck_result r;
+ classinfo *subclass;
+ typeinfo subti;
+ typecheck_result r;
+ char *msg;
+ s4 msglen;
+ utf *u;
assert(refmethod);
assert(subtype.any);
if (!r) {
/* sub class relationship is false */
- char *message;
- int msglen;
-
#if defined(RESOLVE_VERBOSE)
printf("SUBTYPE CHECK FAILED!\n");
#endif
utf_bytes(CLASSREF_OR_CLASSINFO_NAME(supertype))
+ 200;
- message = MNEW(char, msglen);
+ msg = MNEW(char, msglen);
+
+ strcpy(msg, (error == resolveIllegalAccessError) ?
+ "illegal access to protected member (" :
+ "subtype constraint violated (");
- strcpy(message, (error == resolveIllegalAccessError) ?
- "illegal access to protected member ("
- : "subtype constraint violated (");
+ utf_cat_classname(msg, subclass->name);
+ strcat(msg, " is not a subclass of ");
+ utf_cat_classname(msg, CLASSREF_OR_CLASSINFO_NAME(supertype));
+ strcat(msg, ")");
- utf_cat_classname(message, subclass->name);
- strcat(message, " is not a subclass of ");
- utf_cat_classname(message, CLASSREF_OR_CLASSINFO_NAME(supertype));
- strcat(message, ")");
+ u = utf_new_char(msg);
if (error == resolveIllegalAccessError)
- exceptions_throw_illegalaccessexception(message);
+ exceptions_throw_illegalaccessexception(u);
else
- exceptions_throw_linkageerror(message, NULL);
+ exceptions_throw_linkageerror(msg, NULL);
- MFREE(message, char, msglen);
+ /* ATTENTION: We probably need msg for
+ exceptions_throw_linkageerror. */
+
+ MFREE(msg, char, msglen);
return resolveFailed; /* exception */
}
bool isstatic,
bool isput)
{
- classinfo *declarer;
- classinfo *referer;
- resolve_result_t result;
+ classinfo *declarer;
+ classinfo *referer;
+ resolve_result_t result;
constant_classref *fieldtyperef;
+ char *msg;
+ s4 msglen;
+ utf *u;
assert(refmethod);
assert(fieldref);
/* check access rights */
if (!access_is_accessible_member(referer,declarer,fi->flags)) {
- int msglen;
- char *message;
-
msglen =
utf_bytes(declarer->name) +
utf_bytes(fi->name) +
utf_bytes(referer->name) +
100;
- message = MNEW(char, msglen);
+ msg = MNEW(char, msglen);
+
+ strcpy(msg, "field is not accessible (");
+ utf_cat_classname(msg, declarer->name);
+ strcat(msg, ".");
+ utf_cat(msg, fi->name);
+ strcat(msg, " from ");
+ utf_cat_classname(msg, referer->name);
+ strcat(msg, ")");
- strcpy(message, "field is not accessible (");
- utf_cat_classname(message, declarer->name);
- strcat(message, ".");
- utf_cat(message, fi->name);
- strcat(message, " from ");
- utf_cat_classname(message, referer->name);
- strcat(message, ")");
+ u = utf_new_char(msg);
- exceptions_throw_illegalaccessexception(message);
+ MFREE(msg, char, msglen);
- MFREE(message, char, msglen);
+ exceptions_throw_illegalaccessexception(u);
return resolveFailed; /* exception */
}
{
classinfo *declarer;
classinfo *referer;
+ char *msg;
+ s4 msglen;
+ utf *u;
assert(refmethod);
assert(methodref);
/* check access rights */
if (!access_is_accessible_member(referer,declarer,mi->flags)) {
- int msglen;
- char *message;
-
/* XXX clean this up. this should be in exceptions.c */
+
msglen =
utf_bytes(declarer->name) +
utf_bytes(mi->name) +
utf_bytes(referer->name) +
100;
- message = MNEW(char, msglen);
+ msg = MNEW(char, msglen);
+
+ strcpy(msg, "method is not accessible (");
+ utf_cat_classname(msg, declarer->name);
+ strcat(msg, ".");
+ utf_cat(msg, mi->name);
+ utf_cat(msg, mi->descriptor);
+ strcat(msg, " from ");
+ utf_cat_classname(msg, referer->name);
+ strcat(msg, ")");
- strcpy(message, "method is not accessible (");
- utf_cat_classname(message, declarer->name);
- strcat(message, ".");
- utf_cat(message, mi->name);
- utf_cat(message, mi->descriptor);
- strcat(message, " from ");
- utf_cat_classname(message, referer->name);
- strcat(message, ")");
+ u = utf_new_char(msg);
- exceptions_throw_illegalaccessexception(message);
+ MFREE(msg, char, msglen);
- MFREE(message, char, msglen);
+ exceptions_throw_illegalaccessexception(u);
return resolveFailed; /* exception */
}