X-Git-Url: https://git.sur5r.net/?a=blobdiff_plain;f=src%2Fcc65%2Ffunction.h;h=70f3dd2ed8891a1229033b860bb6aca916377ae9;hb=b9e04d5242618b83d78016d57b032e2518ddba17;hp=273daad7231e5a8f6c331bdfd8fa802221683510;hpb=544705e6f456abaef98462d78325b4d1907bc6b0;p=cc65 diff --git a/src/cc65/function.h b/src/cc65/function.h index 273daad72..70f3dd2ed 100644 --- a/src/cc65/function.h +++ b/src/cc65/function.h @@ -1,8 +1,35 @@ -/* - * function.h - * - * Ullrich von Bassewitz, 07.06.1998 - */ +/*****************************************************************************/ +/* */ +/* function.h */ +/* */ +/* Function management */ +/* */ +/* */ +/* */ +/* (C) 1998-2001 Ullrich von Bassewitz */ +/* Wacholderweg 14 */ +/* D-70597 Stuttgart */ +/* EMail: uz@cc65.org */ +/* */ +/* */ +/* This software is provided 'as-is', without any expressed or implied */ +/* warranty. In no event will the authors be held liable for any damages */ +/* arising from the use of this software. */ +/* */ +/* Permission is granted to anyone to use this software for any purpose, */ +/* including commercial applications, and to alter it and redistribute it */ +/* freely, subject to the following restrictions: */ +/* */ +/* 1. The origin of this software must not be misrepresented; you must not */ +/* claim that you wrote the original software. If you use this software */ +/* in a product, an acknowledgment in the product documentation would be */ +/* appreciated but is not required. */ +/* 2. Altered source versions must be plainly marked as such, and must not */ +/* be misrepresented as being the original software. */ +/* 3. This notice may not be removed or altered from any source */ +/* distribution. */ +/* */ +/*****************************************************************************/ @@ -31,40 +58,52 @@ extern Function* CurrentFunc; -const char* GetFuncName (const Function* F); +const char* F_GetFuncName (const Function* F); /* Return the name of the current function */ -unsigned GetParamCount (const Function* F); +unsigned F_GetParamCount (const Function* F); /* Return the parameter count for the current function */ -unsigned GetParamSize (const Function* F); +unsigned F_GetParamSize (const Function* F); /* Return the parameter size for the current function */ -type* GetReturnType (Function* F); +type* F_GetReturnType (Function* F); /* Get the return type for the function */ -int HasVoidReturn (const Function* F); +int F_HasVoidReturn (const Function* F); /* Return true if the function does not have a return value */ -int IsVariadic (const Function* F); +int F_IsVariadic (const Function* F); /* Return true if this is a variadic function */ -void RememberEntry (Function* F); -/* Remember the current output position for local space creation later */ +int F_IsOldStyle (const Function* F); +/* Return true if this is an old style (K&R) function */ + +int F_HasOldStyleIntRet (const Function* F); +/* Return true if this is an old style (K&R) function with an implicit int return */ -unsigned GetRetLab (const Function* F); +unsigned F_GetRetLab (const Function* F); /* Return the return jump label */ -int ReserveLocalSpace (Function* F, unsigned Size); +int F_GetTopLevelSP (const Function* F); +/* Get the value of the stack pointer on function top level */ + +int F_ReserveLocalSpace (Function* F, unsigned Size); /* Reserve (but don't allocate) the given local space and return the stack * offset. */ -void AllocLocalSpace (Function* F); +void F_AllocLocalSpace (Function* F); /* Allocate any local space previously reserved. The function will do * nothing if there is no reserved local space. */ +int F_AllocRegVar (Function* F, const type* Type); +/* Allocate a register variable for the given variable type. If the allocation + * was successful, return the offset of the register variable in the register + * bank (zero page storage). If there is no register space left, return -1. + */ + void NewFunc (struct SymEntry* Func); /* Parse argument declarations and function body. */