mirror of
https://github.com/reactos/reactos.git
synced 2025-04-19 20:19:26 +00:00
[SPEC2DEF]
* Support thiscall and float specifiers. By Samuel Serapion. See issue #6539 for more details. svn path=/trunk/; revision=54021
This commit is contained in:
parent
1c23f7c0ef
commit
da997a7c0e
1 changed files with 16 additions and 1 deletions
|
@ -54,6 +54,7 @@ enum
|
|||
CC_STDCALL,
|
||||
CC_CDECL,
|
||||
CC_FASTCALL,
|
||||
CC_THISCALL,
|
||||
CC_EXTERN,
|
||||
CC_STUB,
|
||||
};
|
||||
|
@ -65,7 +66,8 @@ enum
|
|||
ARG_STR,
|
||||
ARG_WSTR,
|
||||
ARG_DBL,
|
||||
ARG_INT64
|
||||
ARG_INT64,
|
||||
ARG_FLOAT
|
||||
};
|
||||
|
||||
char* astrCallingConventions[] =
|
||||
|
@ -73,6 +75,7 @@ char* astrCallingConventions[] =
|
|||
"STDCALL",
|
||||
"CDECL",
|
||||
"FASTCALL",
|
||||
"THISCALL",
|
||||
"EXTERN"
|
||||
};
|
||||
|
||||
|
@ -189,6 +192,7 @@ OutputLine_stub(FILE *file, EXPORT *pexp)
|
|||
case ARG_STR: fprintf(file, "char*"); break;
|
||||
case ARG_WSTR: fprintf(file, "wchar_t*"); break;
|
||||
case ARG_DBL: case ARG_INT64 : fprintf(file, "__int64"); break;
|
||||
case ARG_FLOAT: fprintf(file, "float"); break;
|
||||
}
|
||||
fprintf(file, " a%d", i);
|
||||
}
|
||||
|
@ -206,6 +210,7 @@ OutputLine_stub(FILE *file, EXPORT *pexp)
|
|||
case ARG_WSTR: fprintf(file, "'%%ws'"); break;
|
||||
case ARG_DBL: fprintf(file, "%%f"); break;
|
||||
case ARG_INT64: fprintf(file, "%%\"PRix64\""); break;
|
||||
case ARG_FLOAT: fprintf(file, "%%f"); break;
|
||||
}
|
||||
}
|
||||
fprintf(file, ")\\n\"");
|
||||
|
@ -221,6 +226,7 @@ OutputLine_stub(FILE *file, EXPORT *pexp)
|
|||
case ARG_WSTR: fprintf(file, "(wchar_t*)a%d", i); break;
|
||||
case ARG_DBL: fprintf(file, "(double)a%d", i); break;
|
||||
case ARG_INT64: fprintf(file, "(__int64)a%d", i); break;
|
||||
case ARG_FLOAT: fprintf(file, "(float)a%d", i); break;
|
||||
}
|
||||
}
|
||||
fprintf(file, ");\n");
|
||||
|
@ -452,6 +458,10 @@ ParseFile(char* pcStart, FILE *fileDest, PFNOUTLINE OutputLine)
|
|||
{
|
||||
exp.nCallingConvention = CC_FASTCALL;
|
||||
}
|
||||
else if (CompareToken(pc, "thiscall"))
|
||||
{
|
||||
exp.nCallingConvention = CC_THISCALL;
|
||||
}
|
||||
else if (CompareToken(pc, "extern"))
|
||||
{
|
||||
exp.nCallingConvention = CC_EXTERN;
|
||||
|
@ -590,6 +600,11 @@ ParseFile(char* pcStart, FILE *fileDest, PFNOUTLINE OutputLine)
|
|||
exp.nStackBytes += 8;
|
||||
exp.anArgs[exp.nArgCount] = ARG_INT64;
|
||||
}
|
||||
else if (CompareToken(pc, "float"))
|
||||
{
|
||||
exp.nStackBytes += 4;
|
||||
exp.anArgs[exp.nArgCount] = ARG_FLOAT;
|
||||
}
|
||||
else
|
||||
fprintf(stderr, "error: line %d, expected type, got: %.10s\n", nLine, pc);
|
||||
|
||||
|
|
Loading…
Reference in a new issue