unsigned _errorReporter( JSDContext* jsdc, JSContext* cx, const char* message, JSErrorReport* report, void* callerdata ) { JHandle* reporter; JHandle* msg = NULL; JHandle* filename = NULL; int lineno = 0; JHandle* linebuf = NULL; int tokenOffset = 0; ExecEnv* ee = EE(); if( ! context || ! controller || ! ee ) return JSD_ERROR_REPORTER_PASS_ALONG; reporter = (JHandle*) unhand(controller)->errorReporter; if( ! reporter ) return JSD_ERROR_REPORTER_PASS_ALONG; if( message ) msg = (JHandle*) makeJavaString((char*)message, strlen(message)); if( report && report->filename ) filename = (JHandle*) makeJavaString((char*)report->filename, strlen(report->filename)); if( report && report->linebuf ) linebuf = (JHandle*) makeJavaString((char*)report->linebuf, strlen(report->linebuf)); if( report ) lineno = report->lineno; if( report && report->linebuf && report->tokenptr ) tokenOffset = report->tokenptr - report->linebuf; return (int) execute_java_dynamic_method( ee, reporter, "reportError", "(Ljava/lang/String;Ljava/lang/String;ILjava/lang/String;I)I", msg, filename, lineno, linebuf, tokenOffset ); }
struct Hjava_lang_String *netscape_jsdebug_DebugController_executeScriptInStackFrame0(struct Hnetscape_jsdebug_DebugController *self,struct Hnetscape_jsdebug_JSStackFrameInfo *frame,struct Hjava_lang_String *src,struct Hjava_lang_String *filename,long lineno) { struct Hnetscape_jsdebug_JSThreadState* threadStateOb; JSDThreadState* jsdthreadstate; JSDStackFrameInfo* jsdframe; char* filenameC; char* srcC; JSString* jsstr; jsval rval; JSBool success; int srclen; threadStateOb = (struct Hnetscape_jsdebug_JSThreadState*)unhand(frame)->threadState; jsdthreadstate = (JSDThreadState*) unhand(threadStateOb)->nativeThreadState; jsdframe = (JSDStackFrameInfo*) unhand(frame)->_nativePtr; if( ! context || ! controller || ! jsdframe ) return NULL; filenameC = allocCString(filename); if( ! filenameC ) return NULL; srcC = allocCString(src); if( ! srcC ) { free(filenameC); return NULL; } srclen = strlen(srcC); success = JSD_EvaluateScriptInStackFrame(context, jsdthreadstate, jsdframe, srcC, srclen, filenameC, lineno, &rval); /* XXX crashing on Windows under Symantec (though I can't see why!)*/ free(filenameC); free(srcC); if( ! success ) return NULL; if( JSVAL_IS_NULL(rval) || JSVAL_IS_VOID(rval) ) return NULL; jsstr = JSD_ValToStringInStackFrame(context,jsdthreadstate,jsdframe,rval); if( ! jsstr ) return NULL; /* XXXbe should use JS_GetStringChars and preserve Unicode. */ return makeJavaString((char*)JS_GetStringBytes(jsstr), JS_GetStringLength(jsstr)); }
void netscape_jsdebug_JSSourceTextProvider_refreshSourceTextVector(struct Hnetscape_jsdebug_JSSourceTextProvider * self) { JHandle* vec; JHandle* itemOb; JSDSourceText* iterp = 0; JSDSourceText* item; const char* url; struct Hjava_lang_String* urlOb; ExecEnv* ee = EE(); if( ! context || ! controller || ! ee ) return; /* create new vector */ vec = (JHandle*) execute_java_constructor(ee, "netscape/util/Vector", 0, "()"); if( ! vec ) return; /* lock the native subsystem */ JSD_LockSourceTextSubsystem(context); /* iterate through the native items */ while( 0 != (item = JSD_IterateSources(context, &iterp)) ) { int urlStrLen; int status = JSD_GetSourceStatus(context,item); /* try to find Java object */ url = JSD_GetSourceURL(context, item); if( ! url || 0 == (urlStrLen = strlen(url)) ) /* ignoring those with no url */ continue; urlOb = makeJavaString((char*)url,urlStrLen); if( ! urlOb ) continue; itemOb = (JHandle*) execute_java_dynamic_method( ee, (JHandle*)self, "findSourceTextItem0", "(Ljava/lang/String;)Lnetscape/jsdebug/SourceTextItem;", urlOb ); if( ! itemOb ) { /* if not found then generate new item */ struct Hjava_lang_String* textOb; const char* str; int length; if( ! JSD_GetSourceText(context, item, &str, &length ) ) { str = ""; length = 0; } textOb = makeJavaString((char*)str, length); itemOb = (JHandle*) execute_java_constructor(ee, "netscape/jsdebug/SourceTextItem",0, "(Ljava/lang/String;Ljava/lang/String;I)", urlOb, textOb, status ); } else if( JSD_IsSourceDirty(context, item) && JSD_SOURCE_CLEARED != status ) { /* if found and dirty then update */ struct Hjava_lang_String* textOb; const char* str; int length; if( ! JSD_GetSourceText(context, item, &str, &length ) ) { str = ""; length = 0; } textOb = makeJavaString((char*)str, length); execute_java_dynamic_method(ee, itemOb, "setText", "(Ljava/lang/String;)V", textOb); execute_java_dynamic_method(ee, itemOb, "setStatus", "(I)V", status ); execute_java_dynamic_method(ee, itemOb, "setDirty", "(Z)V", 1 ); } /* we have our copy; clear the native cached text */ if( JSD_SOURCE_INITED != status && JSD_SOURCE_PARTIAL != status && JSD_SOURCE_CLEARED != status ) { JSD_ClearSourceText(context, item); } /* set the item clean */ JSD_SetSourceDirty(context, item, FALSE ); /* add the item to the vector */ if( itemOb ) execute_java_dynamic_method(ee, vec, "addElement", "(Ljava/lang/Object;)V", itemOb ); } /* unlock the native subsystem */ JSD_UnlockSourceTextSubsystem(context); /* set main vector to our new vector */ unhand(self)->_sourceTextVector = (struct Hnetscape_util_Vector*) vec; }
void _scriptHook( JSDContext* jsdc, JSDScript* jsdscript, JSBool creating, void* callerdata ) { Hnetscape_jsdebug_Script* script; ExecEnv* ee = EE(); if( ! context || ! controller || ! ee ) return; if( creating ) { char* url = (char*)JSD_GetScriptFilename (jsdc, jsdscript); JSString* function = JSD_GetScriptFunctionId (jsdc, jsdscript); int base = JSD_GetScriptBaseLineNumber (jsdc, jsdscript); int extent = JSD_GetScriptLineExtent (jsdc, jsdscript); if( ! url ) { return; /* url = ""; */ } /* create Java Object for Script */ script = (Hnetscape_jsdebug_Script*) execute_java_constructor(ee, "netscape/jsdebug/Script", 0, "()"); if( ! script ) return; /* set the members */ unhand(script)->_url = makeJavaString(url,strlen(url)); unhand(script)->_function = function ? makeJavaString(function,strlen(function)) : 0; unhand(script)->_baseLineNumber = base; unhand(script)->_lineExtent = extent; unhand(script)->_nativePtr = (long)jsdscript; /* add it to the hash table */ _putHash( ee, (JHandle*) unhand(controller)->scriptTable, _constructInteger(ee, (long)jsdscript), (JHandle*)script ); /* call the hook */ if( unhand(controller)->scriptHook ) { execute_java_dynamic_method( ee,(JHandle*)unhand(controller)->scriptHook, "justLoadedScript", "(Lnetscape/jsdebug/Script;)V", script ); } } else { JHandle* tbl = (JHandle*) unhand(controller)->scriptTable; JHandle* key = _constructInteger(ee,(long)jsdscript); /* find Java Object for Script */ script = (Hnetscape_jsdebug_Script*) _getHash( ee, tbl, key ); if( ! script ) return; /* remove it from the hash table */ _removeHash( ee, tbl, key ); /* call the hook */ if( unhand(controller)->scriptHook ) { execute_java_dynamic_method( ee,(JHandle*)unhand(controller)->scriptHook, "aboutToUnloadScript", "(Lnetscape/jsdebug/Script;)V", script ); } /* set the Script as invalid */ execute_java_dynamic_method( ee,(JHandle*)script, "_setInvalid", "()V" ); } }
/* * Initialise the linker and return the search path for shared libraries. */ struct Hjava_lang_String* java_lang_Runtime_initializeLinkerInternal(struct Hjava_lang_Runtime* this) { struct Hjava_lang_String* ret_val; // // inserted by doner // - This function must be synchronized. // _lockMutex( (Hjava_lang_Object*)this ); ret_val = makeJavaString(libraryPath, strlen(libraryPath)); _unlockMutex( (Hjava_lang_Object*)this ); return ret_val; } /* * Construct a library name. */ struct Hjava_lang_String* java_lang_Runtime_buildLibName(struct Hjava_lang_Runtime* this, struct Hjava_lang_String* s1, struct Hjava_lang_String* s2) { char lib[MAXLIBPATH]; char str[MAXPATHLEN];