static MprList *expandWild(Ejs *ejs, int argc, char **argv) { MprList *list; EjsArray *files; EjsPath *path, *dir; cchar *arg; int i, j; if ((list = mprCreateList(-1, 0)) == 0) { return 0; } for (i = 0; i < argc; i++) { if (schr(argv[i], '*')) { arg = mprNormalizePath(argv[i]); dir = ejsCreatePathFromAsc(ejs, mprGetPathDir(arg)); path = ejsCreatePathFromAsc(ejs, mprGetPathBase(arg)); if ((files = ejsGetPathFiles(ejs, dir, 1, (EjsObj**) (void*) &path)) == 0) { ejsClearException(ejs); mprAddItem(list, sclone(argv[i])); } else { for (j = 0; j < files->length; j++) { mprAddItem(list, ((EjsPath*) files->data[j])->value); } } } else { mprAddItem(list, sclone(argv[i])); } } return list; }
/* Get the current exception error. May be an Error object or may be any other object that is thrown. Caller must NOT free. */ cchar *ejsGetErrorMsg(Ejs *ejs, int withStack) { EjsString *str, *tag, *msg, *message; EjsAny *stack, *error, *saveException; char *buf, *stackStr; error = ejs->exception; message = 0; stack = 0; tag = NULL; if (error) { tag = TYPE(error)->qname.name; if (ejsIs(ejs, error, Error)) { message = ejsGetProperty(ejs, error, ES_Error_message); if (withStack && ejs->initialized && ejs->state) { saveException = ejs->exception; ejsClearException(ejs); stack = ejsRunFunctionBySlot(ejs, error, ES_Error_formatStack, 0, NULL); ejsThrowException(ejs, saveException); } } else if (ejsIs(ejs, error, String)) { tag = ejsCreateStringFromAsc(ejs, "Error"); message = (EjsString*) error; } else if (ejsIs(ejs, error, Number)) { tag = ejsCreateStringFromAsc(ejs, "Error"); message = (EjsString*) error; } else if (error == EST(StopIteration)) { message = ejsCreateStringFromAsc(ejs, "Uncaught StopIteration exception"); } } if (message == ESV(null) || message == 0) { msg = ejsCreateStringFromAsc(ejs, "Exception"); } else{ msg = ejsToString(ejs, message); } if (ejsIs(ejs, error, Error)) { stackStr = (stack) ? ejsToMulti(ejs, stack) : 0; if (stackStr && *stackStr) { buf = sfmt("%@: %@\nStack:\n%s", tag, msg, (stack) ? ejsToMulti(ejs, stack) : ""); } else { buf = sfmt("%@: %@", tag, msg); } } else if (message && ejsIs(ejs, message, String)){ buf = sfmt("%@: %@", tag, msg); } else if (message && ejsIs(ejs, message, Number)){ buf = sfmt("%@: %g", tag, ((EjsNumber*) msg)->value); } else if (error) { EjsObj *saveException = ejs->exception; ejs->exception = 0; str = ejsToString(ejs, error); buf = sclone(ejsToMulti(ejs, str)); ejs->exception = saveException; } else { buf = sclone(""); } ejs->errorMsg = buf; return buf; }