X-Git-Url: https://git.sur5r.net/?a=blobdiff_plain;f=src%2Fcc65%2Ffunction.h;h=c5174c78b5d08e1860ea23a3a46b027f414665a7;hb=4185caf8558690ae4720d4a83d829ed3ed087ae9;hp=a2b11f1b7ad1f53de3f66b3c5776f2c82297902a;hpb=9e83b00152d9b82528eabb92f7f45076c5f4e5ca;p=cc65 diff --git a/src/cc65/function.h b/src/cc65/function.h index a2b11f1b7..c5174c78b 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-2012, Ullrich von Bassewitz */ +/* Roemerstrasse 52 */ +/* D-70794 Filderstadt */ +/* 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. */ +/* */ +/*****************************************************************************/ @@ -12,7 +39,7 @@ /*****************************************************************************/ -/* data */ +/* data */ /*****************************************************************************/ @@ -26,46 +53,76 @@ extern Function* CurrentFunc; /*****************************************************************************/ -/* Code */ +/* Code */ /*****************************************************************************/ -const char* GetFuncName (const Function* F); +const char* F_GetFuncName (const Function* F); /* Return the name of the current function */ -unsigned GetParamSize (const Function* F); +unsigned F_GetParamCount (const Function* F); +/* Return the parameter count for the current function */ + +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 */ -void RememberEntry (Function* F); -/* Remember the current output position for local space creation later */ +void F_ReturnFound (Function* F); +/* Mark the function as having a return statement */ + +int F_HasReturn (const Function* F); +/* Return true if the function contains a return statement*/ + +int F_IsMainFunc (const Function* F); +/* Return true if this is the main function */ + +int F_IsVariadic (const Function* F); +/* Return true if this is a variadic function */ + +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); +int F_GetStackPtr (const Function* F); +/* Return the current stack pointer including reserved (but not allocated) + * space on the stack. + */ + +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. */ /* End of function.h */ -#endif - - +#endif