summaryrefslogtreecommitdiff
path: root/ortho/mcode/ortho_mcode.adb
diff options
context:
space:
mode:
Diffstat (limited to 'ortho/mcode/ortho_mcode.adb')
-rw-r--r--ortho/mcode/ortho_mcode.adb738
1 files changed, 0 insertions, 738 deletions
diff --git a/ortho/mcode/ortho_mcode.adb b/ortho/mcode/ortho_mcode.adb
deleted file mode 100644
index 55e890b..0000000
--- a/ortho/mcode/ortho_mcode.adb
+++ /dev/null
@@ -1,738 +0,0 @@
--- Mcode back-end for ortho.
--- Copyright (C) 2006 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 Ada.Text_IO;
-with Ortho_Code.Debug;
-with Ortho_Ident;
-with Ortho_Code.Abi;
--- with Binary_File;
-
-package body Ortho_Mcode is
- procedure New_Debug_Comment_Stmt (Comment : String)
- is
- pragma Unreferenced (Comment);
- begin
- null;
- end New_Debug_Comment_Stmt;
-
- procedure Start_Const_Value (Const : in out O_Dnode)
- is
- pragma Unreferenced (Const);
- begin
- null;
- end Start_Const_Value;
-
- procedure Start_Record_Type (Elements : out O_Element_List) is
- begin
- Ortho_Code.Types.Start_Record_Type
- (Ortho_Code.Types.O_Element_List (Elements));
- end Start_Record_Type;
-
- procedure New_Record_Field
- (Elements : in out O_Element_List;
- El : out O_Fnode;
- Ident : O_Ident; Etype : O_Tnode) is
- begin
- Ortho_Code.Types.New_Record_Field
- (Ortho_Code.Types.O_Element_List (Elements),
- Ortho_Code.O_Fnode (El), Ident, Ortho_Code.O_Tnode (Etype));
- end New_Record_Field;
-
- procedure Finish_Record_Type
- (Elements : in out O_Element_List; Res : out O_Tnode) is
- begin
- Ortho_Code.Types.Finish_Record_Type
- (Ortho_Code.Types.O_Element_List (Elements),
- Ortho_Code.O_Tnode (Res));
- end Finish_Record_Type;
-
- procedure New_Uncomplete_Record_Type (Res : out O_Tnode) is
- begin
- Ortho_Code.Types.New_Uncomplete_Record_Type (Ortho_Code.O_Tnode (Res));
- end New_Uncomplete_Record_Type;
-
- procedure Start_Uncomplete_Record_Type (Res : O_Tnode;
- Elements : out O_Element_List) is
- begin
- Ortho_Code.Types.Start_Uncomplete_Record_Type
- (Ortho_Code.O_Tnode (Res),
- Ortho_Code.Types.O_Element_List (Elements));
- end Start_Uncomplete_Record_Type;
-
- procedure Start_Union_Type (Elements : out O_Element_List) is
- begin
- Ortho_Code.Types.Start_Union_Type
- (Ortho_Code.Types.O_Element_List (Elements));
- end Start_Union_Type;
-
- procedure New_Union_Field
- (Elements : in out O_Element_List;
- El : out O_Fnode;
- Ident : O_Ident;
- Etype : O_Tnode) is
- begin
- Ortho_Code.Types.New_Union_Field
- (Ortho_Code.Types.O_Element_List (Elements),
- Ortho_Code.O_Fnode (El),
- Ident,
- Ortho_Code.O_Tnode (Etype));
- end New_Union_Field;
-
- procedure Finish_Union_Type
- (Elements : in out O_Element_List; Res : out O_Tnode) is
- begin
- Ortho_Code.Types.Finish_Union_Type
- (Ortho_Code.Types.O_Element_List (Elements),
- Ortho_Code.O_Tnode (Res));
- end Finish_Union_Type;
-
- function New_Access_Type (Dtype : O_Tnode) return O_Tnode is
- begin
- return O_Tnode
- (Ortho_Code.Types.New_Access_Type (Ortho_Code.O_Tnode (Dtype)));
- end New_Access_Type;
-
- procedure Finish_Access_Type (Atype : O_Tnode; Dtype : O_Tnode) is
- begin
- Ortho_Code.Types.Finish_Access_Type (Ortho_Code.O_Tnode (Atype),
- Ortho_Code.O_Tnode (Dtype));
- end Finish_Access_Type;
-
- procedure Finish_Const_Value (Const : in out O_Dnode; Val : O_Cnode)
- is
- pragma Warnings (Off, Const);
- begin
- New_Const_Value (Ortho_Code.O_Dnode (Const), Ortho_Code.O_Cnode (Val));
- end Finish_Const_Value;
-
- function New_Array_Type (El_Type : O_Tnode; Index_Type : O_Tnode)
- return O_Tnode is
- begin
- return O_Tnode
- (Ortho_Code.Types.New_Array_Type (Ortho_Code.O_Tnode (El_Type),
- Ortho_Code.O_Tnode (Index_Type)));
- end New_Array_Type;
-
- function New_Constrained_Array_Type (Atype : O_Tnode; Length : O_Cnode)
- return O_Tnode
- is
- Len : constant Ortho_Code.O_Cnode := Ortho_Code.O_Cnode (Length);
- L_Type : Ortho_Code.O_Tnode;
- begin
- L_Type := Get_Const_Type (Len);
- if Get_Type_Kind (L_Type) /= OT_Unsigned then
- raise Syntax_Error;
- end if;
- return O_Tnode (New_Constrained_Array_Type
- (Ortho_Code.O_Tnode (Atype), Get_Const_U32 (Len)));
- end New_Constrained_Array_Type;
-
- function New_Unsigned_Type (Size : Natural) return O_Tnode is
- begin
- return O_Tnode (Ortho_Code.Types.New_Unsigned_Type (Size));
- end New_Unsigned_Type;
-
- function New_Signed_Type (Size : Natural) return O_Tnode is
- begin
- return O_Tnode (Ortho_Code.Types.New_Signed_Type (Size));
- end New_Signed_Type;
-
- function New_Float_Type return O_Tnode is
- begin
- return O_Tnode (Ortho_Code.Types.New_Float_Type);
- end New_Float_Type;
-
- procedure New_Boolean_Type (Res : out O_Tnode;
- False_Id : O_Ident;
- False_E : out O_Cnode;
- True_Id : O_Ident;
- True_E : out O_Cnode) is
- begin
- Ortho_Code.Types.New_Boolean_Type (Ortho_Code.O_Tnode (Res),
- False_Id,
- Ortho_Code.O_Cnode (False_E),
- True_Id,
- Ortho_Code.O_Cnode (True_E));
- end New_Boolean_Type;
-
- procedure Start_Enum_Type (List : out O_Enum_List; Size : Natural) is
- begin
- Ortho_Code.Types.Start_Enum_Type (Ortho_Code.Types.O_Enum_List (List),
- Size);
- end Start_Enum_Type;
-
- procedure New_Enum_Literal (List : in out O_Enum_List;
- Ident : O_Ident; Res : out O_Cnode) is
- begin
- Ortho_Code.Types.New_Enum_Literal (Ortho_Code.Types.O_Enum_List (List),
- Ident, Ortho_Code.O_Cnode (Res));
- end New_Enum_Literal;
-
- procedure Finish_Enum_Type (List : in out O_Enum_List; Res : out O_Tnode) is
- begin
- Ortho_Code.Types.Finish_Enum_Type (Ortho_Code.Types.O_Enum_List (List),
- Ortho_Code.O_Tnode (Res));
- end Finish_Enum_Type;
-
- -------------------
- -- Expressions --
- -------------------
-
- To_Op : constant array (ON_Op_Kind) of Ortho_Code.ON_Op_Kind :=
- (
- ON_Nil => ON_Nil,
-
- -- Dyadic operations.
- ON_Add_Ov => ON_Add_Ov,
- ON_Sub_Ov => ON_Sub_Ov,
- ON_Mul_Ov => ON_Mul_Ov,
- ON_Div_Ov => ON_Div_Ov,
- ON_Rem_Ov => ON_Rem_Ov,
- ON_Mod_Ov => ON_Mod_Ov,
-
- -- Binary operations.
- ON_And => ON_And,
- ON_Or => ON_Or,
- ON_Xor => ON_Xor,
-
- -- Monadic operations.
- ON_Not => ON_Not,
- ON_Neg_Ov => ON_Neg_Ov,
- ON_Abs_Ov => ON_Abs_Ov,
-
- -- Comparaisons
- ON_Eq => ON_Eq,
- ON_Neq => ON_Neq,
- ON_Le => ON_Le,
- ON_Lt => ON_Lt,
- ON_Ge => ON_Ge,
- ON_Gt => ON_Gt
- );
-
- function New_Signed_Literal (Ltype : O_Tnode; Value : Integer_64)
- return O_Cnode is
- begin
- return O_Cnode
- (Ortho_Code.Consts.New_Signed_Literal (Ortho_Code.O_Tnode (Ltype),
- Value));
- end New_Signed_Literal;
-
- function New_Unsigned_Literal (Ltype : O_Tnode; Value : Unsigned_64)
- return O_Cnode is
- begin
- return O_Cnode
- (Ortho_Code.Consts.New_Unsigned_Literal (Ortho_Code.O_Tnode (Ltype),
- Value));
- end New_Unsigned_Literal;
-
- function New_Float_Literal (Ltype : O_Tnode; Value : IEEE_Float_64)
- return O_Cnode is
- begin
- return O_Cnode
- (Ortho_Code.Consts.New_Float_Literal (Ortho_Code.O_Tnode (Ltype),
- Value));
- end New_Float_Literal;
-
- function New_Null_Access (Ltype : O_Tnode) return O_Cnode is
- begin
- return O_Cnode
- (Ortho_Code.Consts.New_Null_Access (Ortho_Code.O_Tnode (Ltype)));
- end New_Null_Access;
-
- procedure Start_Record_Aggr (List : out O_Record_Aggr_List;
- Atype : O_Tnode) is
- begin
- Ortho_Code.Consts.Start_Record_Aggr
- (Ortho_Code.Consts.O_Record_Aggr_List (List),
- Ortho_Code.O_Tnode (Atype));
- end Start_Record_Aggr;
-
- procedure New_Record_Aggr_El (List : in out O_Record_Aggr_List;
- Value : O_Cnode) is
- begin
- Ortho_Code.Consts.New_Record_Aggr_El
- (Ortho_Code.Consts.O_Record_Aggr_List (List),
- Ortho_Code.O_Cnode (Value));
- end New_Record_Aggr_El;
-
- procedure Finish_Record_Aggr (List : in out O_Record_Aggr_List;
- Res : out O_Cnode) is
- begin
- Ortho_Code.Consts.Finish_Record_Aggr
- (Ortho_Code.Consts.O_Record_Aggr_List (List),
- Ortho_Code.O_Cnode (Res));
- end Finish_Record_Aggr;
-
- procedure Start_Array_Aggr (List : out O_Array_Aggr_List; Atype : O_Tnode)
- is
- begin
- Ortho_Code.Consts.Start_Array_Aggr
- (Ortho_Code.Consts.O_Array_Aggr_List (List),
- Ortho_Code.O_Tnode (Atype));
- end Start_Array_Aggr;
-
- procedure New_Array_Aggr_El (List : in out O_Array_Aggr_List;
- Value : O_Cnode) is
- begin
- Ortho_Code.Consts.New_Array_Aggr_El
- (Ortho_Code.Consts.O_Array_Aggr_List (List),
- Ortho_Code.O_Cnode (Value));
- end New_Array_Aggr_El;
-
- procedure Finish_Array_Aggr (List : in out O_Array_Aggr_List;
- Res : out O_Cnode) is
- begin
- Ortho_Code.Consts.Finish_Array_Aggr
- (Ortho_Code.Consts.O_Array_Aggr_List (List),
- Ortho_Code.O_Cnode (Res));
- end Finish_Array_Aggr;
-
- function New_Union_Aggr (Atype : O_Tnode; Field : O_Fnode; Value : O_Cnode)
- return O_Cnode is
- begin
- return O_Cnode
- (Ortho_Code.Consts.New_Union_Aggr (Ortho_Code.O_Tnode (Atype),
- Ortho_Code.O_Fnode (Field),
- Ortho_Code.O_Cnode (Value)));
- end New_Union_Aggr;
-
- function New_Sizeof (Atype : O_Tnode; Rtype : O_Tnode) return O_Cnode is
- begin
- return O_Cnode
- (Ortho_Code.Consts.New_Sizeof (Ortho_Code.O_Tnode (Atype),
- Ortho_Code.O_Tnode (Rtype)));
- end New_Sizeof;
-
- function New_Alignof (Atype : O_Tnode; Rtype : O_Tnode) return O_Cnode is
- begin
- return O_Cnode
- (Ortho_Code.Consts.New_Alignof (Ortho_Code.O_Tnode (Atype),
- Ortho_Code.O_Tnode (Rtype)));
- end New_Alignof;
-
- function New_Offsetof (Atype : O_Tnode; Field : O_Fnode; Rtype : O_Tnode)
- return O_Cnode is
- begin
- return O_Cnode
- (Ortho_Code.Consts.New_Offsetof (Ortho_Code.O_Tnode (Atype),
- Ortho_Code.O_Fnode (Field),
- Ortho_Code.O_Tnode (Rtype)));
- end New_Offsetof;
-
- function New_Subprogram_Address (Subprg : O_Dnode; Atype : O_Tnode)
- return O_Cnode is
- begin
- return O_Cnode
- (Ortho_Code.Consts.New_Subprogram_Address
- (Ortho_Code.O_Dnode (Subprg), Ortho_Code.O_Tnode (Atype)));
- end New_Subprogram_Address;
-
- function New_Global_Address (Decl : O_Dnode; Atype : O_Tnode)
- return O_Cnode is
- begin
- return O_Cnode
- (Ortho_Code.Consts.New_Global_Address
- (Ortho_Code.O_Dnode (Decl), Ortho_Code.O_Tnode (Atype)));
- end New_Global_Address;
-
- function New_Global_Unchecked_Address (Decl : O_Dnode; Atype : O_Tnode)
- return O_Cnode is
- begin
- return O_Cnode
- (Ortho_Code.Consts.New_Global_Unchecked_Address
- (Ortho_Code.O_Dnode (Decl), Ortho_Code.O_Tnode (Atype)));
- end New_Global_Unchecked_Address;
-
- function New_Lit (Lit : O_Cnode) return O_Enode is
- begin
- return O_Enode (Ortho_Code.Exprs.New_Lit (Ortho_Code.O_Cnode (Lit)));
- end New_Lit;
-
- function New_Dyadic_Op (Kind : ON_Dyadic_Op_Kind; Left, Right : O_Enode)
- return O_Enode is
- begin
- return O_Enode
- (Ortho_Code.Exprs.New_Dyadic_Op (To_Op (Kind),
- Ortho_Code.O_Enode (Left),
- Ortho_Code.O_Enode (Right)));
- end New_Dyadic_Op;
-
- function New_Monadic_Op (Kind : ON_Monadic_Op_Kind; Operand : O_Enode)
- return O_Enode is
- begin
- return O_Enode
- (Ortho_Code.Exprs.New_Monadic_Op (To_Op (Kind),
- Ortho_Code.O_Enode (Operand)));
- end New_Monadic_Op;
-
- function New_Compare_Op
- (Kind : ON_Compare_Op_Kind; Left, Right : O_Enode; Ntype : O_Tnode)
- return O_Enode is
- begin
- return O_Enode
- (Ortho_Code.Exprs.New_Compare_Op (To_Op (Kind),
- Ortho_Code.O_Enode (Left),
- Ortho_Code.O_Enode (Right),
- Ortho_Code.O_Tnode (Ntype)));
- end New_Compare_Op;
-
- function New_Indexed_Element (Arr : O_Lnode; Index : O_Enode)
- return O_Lnode is
- begin
- return O_Lnode
- (Ortho_Code.Exprs.New_Indexed_Element (Ortho_Code.O_Lnode (Arr),
- Ortho_Code.O_Enode (Index)));
- end New_Indexed_Element;
-
- function New_Slice (Arr : O_Lnode; Res_Type : O_Tnode; Index : O_Enode)
- return O_Lnode is
- begin
- return O_Lnode
- (Ortho_Code.Exprs.New_Slice (Ortho_Code.O_Lnode (Arr),
- Ortho_Code.O_Tnode (Res_Type),
- Ortho_Code.O_Enode (Index)));
- end New_Slice;
-
- function New_Selected_Element (Rec : O_Lnode; El : O_Fnode)
- return O_Lnode is
- begin
- return O_Lnode
- (Ortho_Code.Exprs.New_Selected_Element (Ortho_Code.O_Lnode (Rec),
- Ortho_Code.O_Fnode (El)));
- end New_Selected_Element;
-
- function New_Access_Element (Acc : O_Enode) return O_Lnode is
- begin
- return O_Lnode
- (Ortho_Code.Exprs.New_Access_Element (Ortho_Code.O_Enode (Acc)));
- end New_Access_Element;
-
- function New_Convert_Ov (Val : O_Enode; Rtype : O_Tnode) return O_Enode is
- begin
- return O_Enode
- (Ortho_Code.Exprs.New_Convert_Ov (Ortho_Code.O_Enode (Val),
- Ortho_Code.O_Tnode (Rtype)));
- end New_Convert_Ov;
-
- function New_Address (Lvalue : O_Lnode; Atype : O_Tnode)
- return O_Enode is
- begin
- return O_Enode
- (Ortho_Code.Exprs.New_Address (Ortho_Code.O_Lnode (Lvalue),
- Ortho_Code.O_Tnode (Atype)));
- end New_Address;
-
- function New_Unchecked_Address (Lvalue : O_Lnode; Atype : O_Tnode)
- return O_Enode is
- begin
- return O_Enode
- (Ortho_Code.Exprs.New_Unchecked_Address (Ortho_Code.O_Lnode (Lvalue),
- Ortho_Code.O_Tnode (Atype)));
- end New_Unchecked_Address;
-
- function New_Value (Lvalue : O_Lnode) return O_Enode is
- begin
- return O_Enode
- (Ortho_Code.Exprs.New_Value (Ortho_Code.O_Lnode (Lvalue)));
- end New_Value;
-
- function New_Obj_Value (Obj : O_Dnode) return O_Enode is
- begin
- return New_Value (New_Obj (Obj));
- end New_Obj_Value;
-
- function New_Alloca (Rtype : O_Tnode; Size : O_Enode) return O_Enode is
- begin
- return O_Enode (Ortho_Code.Exprs.New_Alloca (Ortho_Code.O_Tnode (Rtype),
- Ortho_Code.O_Enode (Size)));
- end New_Alloca;
-
- ---------------------
- -- Declarations. --
- ---------------------
-
- procedure New_Debug_Filename_Decl (Filename : String)
- renames Ortho_Code.Abi.New_Debug_Filename_Decl;
-
- procedure New_Debug_Line_Decl (Line : Natural)
- is
- pragma Unreferenced (Line);
- begin
- null;
- end New_Debug_Line_Decl;
-
- procedure New_Type_Decl (Ident : O_Ident; Atype : O_Tnode) is
- begin
- Ortho_Code.Decls.New_Type_Decl (Ident, Ortho_Code.O_Tnode (Atype));
- end New_Type_Decl;
-
- To_Storage : constant array (O_Storage) of Ortho_Code.O_Storage :=
- (O_Storage_External => O_Storage_External,
- O_Storage_Public => O_Storage_Public,
- O_Storage_Private => O_Storage_Private,
- O_Storage_Local => O_Storage_Local);
-
- procedure New_Const_Decl
- (Res : out O_Dnode;
- Ident : O_Ident;
- Storage : O_Storage;
- Atype : O_Tnode) is
- begin
- Ortho_Code.Decls.New_Const_Decl
- (Ortho_Code.O_Dnode (Res), Ident, To_Storage (Storage),
- Ortho_Code.O_Tnode (Atype));
- end New_Const_Decl;
-
- procedure New_Var_Decl
- (Res : out O_Dnode;
- Ident : O_Ident;
- Storage : O_Storage;
- Atype : O_Tnode) is
- begin
- Ortho_Code.Decls.New_Var_Decl
- (Ortho_Code.O_Dnode (Res), Ident, To_Storage (Storage),
- Ortho_Code.O_Tnode (Atype));
- end New_Var_Decl;
-
- function New_Obj (Obj : O_Dnode) return O_Lnode is
- begin
- return O_Lnode (Ortho_Code.Exprs.New_Obj (Ortho_Code.O_Dnode (Obj)));
- end New_Obj;
-
- procedure Start_Function_Decl
- (Interfaces : out O_Inter_List;
- Ident : O_Ident;
- Storage : O_Storage;
- Rtype : O_Tnode) is
- begin
- Ortho_Code.Decls.Start_Function_Decl
- (Ortho_Code.Decls.O_Inter_List (Interfaces),
- Ident, To_Storage (Storage), Ortho_Code.O_Tnode (Rtype));
- end Start_Function_Decl;
-
- procedure Start_Procedure_Decl
- (Interfaces : out O_Inter_List;
- Ident : O_Ident;
- Storage : O_Storage) is
- begin
- Ortho_Code.Decls.Start_Procedure_Decl
- (Ortho_Code.Decls.O_Inter_List (Interfaces),
- Ident, To_Storage (Storage));
- end Start_Procedure_Decl;
-
- procedure New_Interface_Decl
- (Interfaces : in out O_Inter_List;
- Res : out O_Dnode;
- Ident : O_Ident;
- Atype : O_Tnode) is
- begin
- Ortho_Code.Decls.New_Interface_Decl
- (Ortho_Code.Decls.O_Inter_List (Interfaces),
- Ortho_Code.O_Dnode (Res),
- Ident,
- Ortho_Code.O_Tnode (Atype));
- end New_Interface_Decl;
-
- procedure Finish_Subprogram_Decl
- (Interfaces : in out O_Inter_List; Res : out O_Dnode) is
- begin
- Ortho_Code.Decls.Finish_Subprogram_Decl
- (Ortho_Code.Decls.O_Inter_List (Interfaces), Ortho_Code.O_Dnode (Res));
- end Finish_Subprogram_Decl;
-
- procedure Start_Subprogram_Body (Func : O_Dnode) is
- begin
- Ortho_Code.Exprs.Start_Subprogram_Body (Ortho_Code.O_Dnode (Func));
- end Start_Subprogram_Body;
-
- procedure Finish_Subprogram_Body
- renames Ortho_Code.Exprs.Finish_Subprogram_Body;
-
- -------------------
- -- Statements. --
- -------------------
-
- procedure New_Debug_Line_Stmt (Line : Natural)
- renames Ortho_Code.Exprs.New_Debug_Line_Stmt;
-
- procedure New_Debug_Comment_Decl (Comment : String)
- is
- pragma Unreferenced (Comment);
- begin
- null;
- end New_Debug_Comment_Decl;
-
- procedure Start_Declare_Stmt renames
- Ortho_Code.Exprs.Start_Declare_Stmt;
- procedure Finish_Declare_Stmt renames
- Ortho_Code.Exprs.Finish_Declare_Stmt;
-
- procedure Start_Association (Assocs : out O_Assoc_List; Subprg : O_Dnode) is
- begin
- Ortho_Code.Exprs.Start_Association
- (Ortho_Code.Exprs.O_Assoc_List (Assocs), Ortho_Code.O_Dnode (Subprg));
- end Start_Association;
-
- procedure New_Association (Assocs : in out O_Assoc_List; Val : O_Enode) is
- begin
- Ortho_Code.Exprs.New_Association
- (Ortho_Code.Exprs.O_Assoc_List (Assocs), Ortho_Code.O_Enode (Val));
- end New_Association;
-
- function New_Function_Call (Assocs : O_Assoc_List) return O_Enode is
- begin
- return O_Enode (Ortho_Code.Exprs.New_Function_Call
- (Ortho_Code.Exprs.O_Assoc_List (Assocs)));
- end New_Function_Call;
-
- procedure New_Procedure_Call (Assocs : in out O_Assoc_List) is
- begin
- Ortho_Code.Exprs.New_Procedure_Call
- (Ortho_Code.Exprs.O_Assoc_List (Assocs));
- end New_Procedure_Call;
-
- procedure New_Assign_Stmt (Target : O_Lnode; Value : O_Enode) is
- begin
- Ortho_Code.Exprs.New_Assign_Stmt (Ortho_Code.O_Lnode (Target),
- Ortho_Code.O_Enode (Value));
- end New_Assign_Stmt;
-
- procedure New_Return_Stmt (Value : O_Enode) is
- begin
- Ortho_Code.Exprs.New_Return_Stmt (Ortho_Code.O_Enode (Value));
- end New_Return_Stmt;
-
- procedure New_Return_Stmt
- renames Ortho_Code.Exprs.New_Return_Stmt;
-
- procedure Start_If_Stmt (Block : in out O_If_Block; Cond : O_Enode) is
- begin
- Ortho_Code.Exprs.Start_If_Stmt (Ortho_Code.Exprs.O_If_Block (Block),
- Ortho_Code.O_Enode (Cond));
- end Start_If_Stmt;
-
- procedure New_Else_Stmt (Block : in out O_If_Block) is
- begin
- Ortho_Code.Exprs.New_Else_Stmt (Ortho_Code.Exprs.O_If_Block (Block));
- end New_Else_Stmt;
-
- procedure Finish_If_Stmt (Block : in out O_If_Block) is
- begin
- Ortho_Code.Exprs.Finish_If_Stmt (Ortho_Code.Exprs.O_If_Block (Block));
- end Finish_If_Stmt;
-
- procedure Start_Loop_Stmt (Label : out O_Snode) is
- begin
- Ortho_Code.Exprs.Start_Loop_Stmt (Ortho_Code.Exprs.O_Snode (Label));
- end Start_Loop_Stmt;
-
- procedure Finish_Loop_Stmt (Label : in out O_Snode) is
- begin
- Ortho_Code.Exprs.Finish_Loop_Stmt (Ortho_Code.Exprs.O_Snode (Label));
- end Finish_Loop_Stmt;
-
- procedure New_Exit_Stmt (L : O_Snode) is
- begin
- Ortho_Code.Exprs.New_Exit_Stmt (Ortho_Code.Exprs.O_Snode (L));
- end New_Exit_Stmt;
-
- procedure New_Next_Stmt (L : O_Snode) is
- begin
- Ortho_Code.Exprs.New_Next_Stmt (Ortho_Code.Exprs.O_Snode (L));
- end New_Next_Stmt;
-
- procedure Start_Case_Stmt (Block : in out O_Case_Block; Value : O_Enode) is
- begin
- Ortho_Code.Exprs.Start_Case_Stmt
- (Ortho_Code.Exprs.O_Case_Block (Block), Ortho_Code.O_Enode (Value));
- end Start_Case_Stmt;
-
- procedure Start_Choice (Block : in out O_Case_Block) is
- begin
- Ortho_Code.Exprs.Start_Choice (Ortho_Code.Exprs.O_Case_Block (Block));
- end Start_Choice;
-
- procedure New_Expr_Choice (Block : in out O_Case_Block; Expr : O_Cnode) is
- begin
- Ortho_Code.Exprs.New_Expr_Choice (Ortho_Code.Exprs.O_Case_Block (Block),
- Ortho_Code.O_Cnode (Expr));
- end New_Expr_Choice;
-
- procedure New_Range_Choice (Block : in out O_Case_Block;
- Low, High : O_Cnode) is
- begin
- Ortho_Code.Exprs.New_Range_Choice
- (Ortho_Code.Exprs.O_Case_Block (Block),
- Ortho_Code.O_Cnode (Low), Ortho_Code.O_Cnode (High));
- end New_Range_Choice;
-
- procedure New_Default_Choice (Block : in out O_Case_Block) is
- begin
- Ortho_Code.Exprs.New_Default_Choice
- (Ortho_Code.Exprs.O_Case_Block (Block));
- end New_Default_Choice;
-
- procedure Finish_Choice (Block : in out O_Case_Block) is
- begin
- Ortho_Code.Exprs.Finish_Choice (Ortho_Code.Exprs.O_Case_Block (Block));
- end Finish_Choice;
-
- procedure Finish_Case_Stmt (Block : in out O_Case_Block) is
- begin
- Ortho_Code.Exprs.Finish_Case_Stmt
- (Ortho_Code.Exprs.O_Case_Block (Block));
- end Finish_Case_Stmt;
-
- procedure Init is
- begin
- -- Create an anonymous pointer type.
- if New_Access_Type (O_Tnode_Null) /= O_Tnode (O_Tnode_Ptr) then
- raise Program_Error;
- end if;
- -- Do not finish the access, since this creates an infinite recursion
- -- in gdb (at least for GDB 6.3).
- --Finish_Access_Type (O_Tnode_Ptr, O_Tnode_Ptr);
- Ortho_Code.Abi.Init;
- end Init;
-
- procedure Finish is
- begin
- if False then
- Ortho_Code.Decls.Disp_All_Decls;
- --Ortho_Code.Exprs.Disp_All_Enode;
- end if;
- Ortho_Code.Abi.Finish;
- if Debug.Flag_Debug_Stat then
- Ada.Text_IO.Put_Line ("Statistics:");
- Ortho_Code.Exprs.Disp_Stats;
- Ortho_Code.Decls.Disp_Stats;
- Ortho_Code.Types.Disp_Stats;
- Ortho_Code.Consts.Disp_Stats;
- Ortho_Ident.Disp_Stats;
- -- Binary_File.Disp_Stats;
- end if;
- end Finish;
-
- procedure Free_All is
- begin
- Ortho_Code.Types.Finish;
- Ortho_Code.Exprs.Finish;
- Ortho_Code.Consts.Finish;
- Ortho_Code.Decls.Finish;
- Ortho_Ident.Finish;
- end Free_All;
-end Ortho_Mcode;