diff options
Diffstat (limited to 'ortho/agcc/agcc-fe.ads')
-rw-r--r-- | ortho/agcc/agcc-fe.ads | 238 |
1 files changed, 238 insertions, 0 deletions
diff --git a/ortho/agcc/agcc-fe.ads b/ortho/agcc/agcc-fe.ads new file mode 100644 index 0000000..7c2b110 --- /dev/null +++ b/ortho/agcc/agcc-fe.ads @@ -0,0 +1,238 @@ +-- Ada bindings for GCC internals. +-- Copyright (C) 2002, 2003, 2004, 2005 Tristan Gingold +-- +-- GHDL is free software; you can redistribute it and/or modify it under +-- the terms of the GNU General Public License as published by the Free +-- Software Foundation; either version 2, or (at your option) any later +-- version. +-- +-- GHDL is distributed in the hope that it will be useful, but WITHOUT ANY +-- WARRANTY; without even the implied warranty of MERCHANTABILITY or +-- FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License +-- for more details. +-- +-- You should have received a copy of the GNU General Public License +-- along with GCC; see the file COPYING. If not, write to the Free +-- Software Foundation, 59 Temple Place - Suite 330, Boston, MA +-- 02111-1307, USA. +with Agcc.Trees; use Agcc.Trees; +with Agcc.Machmode; use Agcc.Machmode; +with Agcc.Hwint; use Agcc.Hwint; +with Agcc.Options; use Agcc.Options; +with Interfaces.C_Streams; use Interfaces.C_Streams; +with C; use C; + +package Agcc.Fe is + -- Subprograms that must be defined by the front-end. + + -- Defined in langhooks.h + function Lang_Init_Options (Argc : Integer; Argv : C_String_Array) + return Integer; + + -- Front-end function expected by GCC. + function Lang_Handle_Option (Code : Opt_Code; + Arg : C_String; + Value : Integer) + return Integer; + + type C_String_Acc is access C_String; + pragma Convention (C, C_String_Acc); + + function Lang_Post_Options (Filename : C_String_Acc) return C_Bool; + + function Lang_Init return C_Bool; + + procedure Lang_Finish; + + --procedure Lang_Clear_Binding_Stack; + + -- Return the typed-based alias set for T, which may be an expression + -- or a type. Return -1 if we don't do anything special. + -- O means can alias everything. + function Lang_Get_Alias_Set (T : Tree) return HOST_WIDE_INT; + + --function Lang_Expand_Constant (N : Tree) return Tree; + + --function Lang_Safe_From_P (Target : Rtx; Exp : Tree) return C_Bool; + + procedure Lang_Parse_File (Debug : C_Bool); + + -- Called by the back-end or by the front-end when the address of EXP + -- must be taken. + -- This function should found the base object (if any), and mark it as + -- addressable (via TREE_ADDRESSABLE). It may emit a warning if this + -- object cannot be addressable (front-end restriction). + -- Returns TRUE in case of success, FALSE in case of failure. + -- Note that the status is never checked by the back-end. + function Mark_Addressable (Exp : Tree) return C_Bool; + + -- Possibly apply default attributes to function FUNC represented by + -- a FUNCTION_DECL. + procedure Insert_Default_Attributes (Func : Tree); + + -- Lexical scopes. + -- Roughly speaking, it is used to mark declarations regions. + + -- Enter in a new lexical scope. INSIDE should be FALSE (TRUE iff called + -- from the inside of the front end, ie from gcc internal code). + procedure Pushlevel (Inside : C_Bool); + + -- Add a declaration to the current scope. + -- Note: GCC backend expect PUSHDECL to return its argument; however, + -- it is only seldom used. Both forms exist and are aliased with a third + -- one which is exported under the C name. + -- (Unfortunatly, it is not possible to export the function and to import + -- the procedure). + procedure Pushdecl (Decl : Tree); + function Pushdecl (Decl : Tree) return Tree; + + -- This function has to be defined. + function Exported_Pushdecl (Decl : Tree) return Tree; + + -- Get the declarations of the current scope. + function Getdecls return Tree; + + procedure Set_Block (Block : Tree); + + -- Return non-zero if we are currently in the global binding level. + function Global_Bindings_P return Integer; + + -- Insert BLOCK at the end of the list of subblocks of the + -- current binding level. This is used when a BIND_EXPR is expanded, + -- to handle the BLOCK node inside the BIND_EXPR. + procedure Insert_Block (Block : Tree); + + -- Exit the current scope. + -- FUNCTIONBODY is TRUE iff the scope corresponds to a subprogram scope. + -- Used forms (both imported). + procedure Poplevel (Keep : C_Bool; Revers : C_Bool; Functionbody : C_Bool); + function Poplevel (Keep : C_Bool; Revers : C_Bool; Functionbody : C_Bool) + return Tree; + + -- Exported form. + function Exported_Poplevel + (Keep : C_Bool; Revers : C_Bool; Functionbody : C_Bool) + return Tree; + + -- Perform all the initialization steps that are language-specific. + --procedure Lang_Init; + + -- Perform all the finalization steps that are language-specific. + --procedure Lang_Finish; + + -- Return an integer type with the number of bits of precision given by + -- PRECISION. UNSIGNEDP is nonzero if the type is unsigned; otherwise + -- it is a signed type. + function Type_For_Size (Precision : Natural; Unsignedp : C_Bool) + return Tree; + + -- Return a data type that has machine mode MODE. UNSIGNEDP selects + -- an unsigned type; otherwise a signed type is returned. + function Type_For_Mode (Mode : Machine_Mode; Unsignedp : C_Bool) + return Tree; + + -- Return the unsigned version of a TYPE_NODE, a scalar type. + function Unsigned_Type (Type_Node : Tree) return Tree; + + -- Return the signed version of a TYPE_NODE, a scalar type. + function Signed_Type (Type_Node : Tree) return Tree; + + -- Return a type the same as TYPE except unsigned or signed according to + -- UNSIGNEDP. + function Signed_Or_Unsigned_Type (Unsignedp : C_Bool; Atype : Tree) + return Tree; + + -- Return a definition for a builtin function named NAME and whose data + -- type is TYPE. TYPE should be a function type with argument types. + -- FUNCTION_CODE tells later passes how to compile calls to this function. + -- See tree.h for its possible values. + -- + -- If LIBRARY_NAME is nonzero, use that for DECL_ASSEMBLER_NAME, + -- the name to be called if we can't opencode the function. + function Builtin_Function + (Name: System.Address; + Ftype : Tree; + Function_Code : Built_In_Function; + Class : Built_In_Class; + Library_Name : System.Address) + return Tree; + + -- Set debug flag of the parser. + procedure Set_Yydebug (Flag : C_Bool); + + + -- Hooks for print-tree.c: + procedure Print_Lang_Decl (File : FILEs; Node : Tree; Indent : natural); + procedure Print_Lang_Type (File : FILEs; Node : Tree; Indent : Natural); + procedure Print_Lang_Identifier + (File : FILEs; Node : Tree; Indent : Natural); + procedure Lang_Print_Xnode (File : FILEs; Node : Tree; Indent : Natural); + + -- Print any language-specific compilation statistics. + procedure Print_Lang_Statistics; + + + -- Finish to copy a ..._DECL node (the LANG_DECL_SPECIFIC field). + procedure Copy_Lang_Decl (Node : Tree); + + -- Normalize boolean value EXPR. + function Truthvalue_Conversion (Expr : Tree) return Tree; + + -- Procedure called in case of sizeof applied to an incomplete type. + procedure Incomplete_Type_Error (Value : Tree; Atype : Tree); + + -- This function must be defined in the language-specific files. + -- expand_expr calls it to build the cleanup-expression for a TARGET_EXPR. + function Maybe_Build_Cleanup (Decl : Tree) return Tree; + + --Language_String : constant Chars; + Flag_Traditional : Integer := 0; +private + pragma Export (C, Lang_Init_Options); + pragma Export (C, Lang_Handle_Option); + pragma Export (C, Lang_Post_Options); + pragma Export (C, Lang_Init); + pragma Export (C, Lang_Finish); + pragma Export (C, Lang_Get_Alias_Set); + + pragma Export (C, Lang_Parse_File); + + pragma Export (C, Mark_Addressable); + pragma Export (C, Insert_Default_Attributes); + + pragma Import (C, Pushdecl); + pragma Export (C, Exported_Pushdecl, "pushdecl"); + pragma Export (C, Pushlevel); + pragma Export (C, Set_Block); + pragma Export (C, Insert_Block); + pragma Export (C, Global_Bindings_P); + pragma Import (C, Poplevel); + pragma Export (C, Exported_Poplevel, "poplevel"); + pragma Export (C, Getdecls); + + pragma Export (C, Type_For_Size); + pragma Export (C, Type_For_Mode); + pragma Export (C, Unsigned_Type); + pragma Export (C, Signed_Type); + pragma Export (C, Signed_Or_Unsigned_Type); + + pragma Export (C, Builtin_Function); + + + pragma Export (C, Set_Yydebug); + + pragma Export (C, Print_Lang_Decl); + pragma Export (C, Print_Lang_Type); + pragma Export (C, Print_Lang_Identifier); + pragma Export (C, Lang_Print_Xnode); + + pragma Export (C, Print_Lang_Statistics); + pragma Export (C, Copy_Lang_Decl); + + pragma Export (C, Truthvalue_Conversion); + pragma Export (C, Incomplete_Type_Error); + pragma Export (C, Maybe_Build_Cleanup); + + pragma Export (C, Flag_Traditional); +end Agcc.Fe; + |