From 1601858de5e29cb9112bd605eb306630a8784788 Mon Sep 17 00:00:00 2001 From: Steve Naroff Date: Wed, 7 Nov 2007 18:43:40 +0000 Subject: [PATCH] Finishing touches on code generation for @try and friends. - declare functions we use. - cast arguments to objc_exception_match(). - don't take the & of _stack.buf. llvm-svn: 43831 --- clang/Driver/RewriteTest.cpp | 19 +++++++++++++------ 1 file changed, 13 insertions(+), 6 deletions(-) diff --git a/clang/Driver/RewriteTest.cpp b/clang/Driver/RewriteTest.cpp index 0c3d06b86b10..8ff6bc643881 100644 --- a/clang/Driver/RewriteTest.cpp +++ b/clang/Driver/RewriteTest.cpp @@ -57,11 +57,18 @@ namespace { Rewrite.setSourceMgr(Context->SourceMgr); // declaring objc_selector outside the parameter list removes a silly // scope related warning... - const char *s = "struct objc_selector;\n" + const char *s = "struct objc_selector; struct objc_class;\n" "extern struct objc_object *objc_msgSend" "(struct objc_object *, struct objc_selector *, ...);\n" "extern struct objc_object *objc_getClass" - "(const char *);\n"; + "(const char *);\n" + "extern void objc_exception_throw(struct objc_object *);\n" + "extern void objc_exception_try_enter(void *);\n" + "extern void objc_exception_try_exit(void *);\n" + "extern struct objc_object *objc_exception_extract(void *);\n" + "extern int objc_exception_match" + "(struct objc_class *, struct objc_object *, ...);\n"; + Rewrite.InsertText(SourceLocation::getFileLoc(mainFileID, 0), s, strlen(s)); } @@ -455,7 +462,7 @@ Stmt *RewriteTest::RewriteObjcTryStmt(ObjcAtTryStmt *S) { buf += "char *pointers[4];} _stack;\n"; buf += "id volatile _rethrow = 0;\n"; buf += "objc_exception_try_enter(&_stack);\n"; - buf += "if (!_setjmp(&_stack.buf)) /* @try block continue */\n"; + buf += "if (!_setjmp(_stack.buf)) /* @try block continue */\n"; Rewrite.ReplaceText(startLoc, 4, buf.c_str(), buf.size()); @@ -470,7 +477,7 @@ Stmt *RewriteTest::RewriteObjcTryStmt(ObjcAtTryStmt *S) { buf = " /* @catch begin */ else {\n"; buf += " id _caught = objc_exception_extract(&_stack);\n"; buf += " objc_exception_try_enter (&_stack);\n"; - buf += " if (_setjmp(&_stack.buf))\n"; + buf += " if (_setjmp(_stack.buf))\n"; buf += " _rethrow = objc_exception_extract(&_stack);\n"; buf += " else { /* @catch continue */"; @@ -505,9 +512,9 @@ Stmt *RewriteTest::RewriteObjcTryStmt(ObjcAtTryStmt *S) { cls = dyn_cast(pType->getPointeeType().getTypePtr()); if (cls) { - buf += "objc_exception_match(objc_getClass(\""; + buf += "objc_exception_match((struct objc_class *)objc_getClass(\""; buf += cls->getDecl()->getName(); - buf += "\"), _caught)) { "; + buf += "\"), (struct objc_object *)_caught)) { "; Rewrite.ReplaceText(startLoc, lParenLoc-startBuf+1, buf.c_str(), buf.size()); } -- GitLab