#include "scanstrbuf.h"
#include "symtab.h"
#include "pragma.h"
-#include "trampoline.h"
+#include "wrappedcall.h"
PRAGMA_SIGNEDCHARS, /* obsolete */
PRAGMA_STATIC_LOCALS,
PRAGMA_STATICLOCALS, /* obsolete */
- PRAGMA_TRAMPOLINE,
PRAGMA_WARN,
+ PRAGMA_WRAPPED_CALL,
PRAGMA_WRITABLE_STRINGS,
PRAGMA_ZPSYM,
PRAGMA_COUNT
{ "signedchars", PRAGMA_SIGNEDCHARS }, /* obsolete */
{ "static-locals", PRAGMA_STATIC_LOCALS },
{ "staticlocals", PRAGMA_STATICLOCALS }, /* obsolete */
- { "trampoline", PRAGMA_TRAMPOLINE },
{ "warn", PRAGMA_WARN },
+ { "wrapped-call", PRAGMA_WRAPPED_CALL },
{ "writable-strings", PRAGMA_WRITABLE_STRINGS },
{ "zpsym", PRAGMA_ZPSYM },
};
}
-static void TrampolinePragma (StrBuf* B)
-/* Handle the trampoline pragma */
+static void WrappedCallPragma (StrBuf* B)
+/* Handle the wrapped-call pragma */
{
StrBuf S = AUTO_STRBUF_INITIALIZER;
const char *Name;
break;
case PP_POP:
- PopTrampoline();
+ PopWrappedCall();
/* Done */
goto ExitPoint;
/* Skip the following comma */
if (!GetComma (B)) {
/* Error already flagged by GetComma */
- Error ("Value required for trampoline data");
+ Error ("Value required for wrapped-call identifier");
goto ExitPoint;
}
if (!GetNumber (B, &Val)) {
- Error ("Value required for trampoline data");
+ Error ("Value required for wrapped-call identifier");
goto ExitPoint;
}
if (Val < 0 || Val > 255) {
- Error ("Value must be between 0-255");
+ Error ("Identifier must be between 0-255");
goto ExitPoint;
}
Entry = FindSym(Name);
/* Check if the name is valid */
- if (Entry && Entry->Flags & (SC_FUNC | SC_STORAGE)) {
+ if (Entry && Entry->Flags & SC_FUNC) {
- PushTrampoline(Entry, Val);
+ PushWrappedCall(Entry, Val);
Entry->Flags |= SC_REF;
+ Entry->V.F.Func->Flags |= FD_CALL_WRAPPER;
} else {
/* Segment name is invalid */
- Error ("Trampoline does not exist or is not a function or array");
+ Error ("Wrapped-call target does not exist or is not a function");
}
FlagPragma (&B, &StaticLocals);
break;
- case PRAGMA_TRAMPOLINE:
- TrampolinePragma(&B);
+ case PRAGMA_WRAPPED_CALL:
+ WrappedCallPragma(&B);
break;
case PRAGMA_WARN: