aboutsummaryrefslogtreecommitdiff
path: root/gcc/m2/mc-boot/GmcStack.c
diff options
context:
space:
mode:
Diffstat (limited to 'gcc/m2/mc-boot/GmcStack.c')
-rw-r--r--gcc/m2/mc-boot/GmcStack.c228
1 files changed, 228 insertions, 0 deletions
diff --git a/gcc/m2/mc-boot/GmcStack.c b/gcc/m2/mc-boot/GmcStack.c
new file mode 100644
index 0000000..83fecda
--- /dev/null
+++ b/gcc/m2/mc-boot/GmcStack.c
@@ -0,0 +1,228 @@
+/* do not edit automatically generated by mc from mcStack. */
+/* This file is part of GNU Modula-2.
+
+GNU Modula-2 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 3, or (at your option) any later
+version.
+
+GNU Modula-2 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 gm2; see the file COPYING. If not, write to the Free Software
+Foundation, 51 Franklin Street, Fifth Floor,
+Boston, MA 02110-1301, USA. */
+
+#include "config.h"
+#include "system.h"
+# if !defined (PROC_D)
+# define PROC_D
+ typedef void (*PROC_t) (void);
+ typedef struct { PROC_t proc; } PROC;
+# endif
+
+# include "GStorage.h"
+# include "Gmcrts.h"
+#if defined(__cplusplus)
+# undef NULL
+# define NULL 0
+#endif
+#define _mcStack_H
+#define _mcStack_C
+
+# include "GStorage.h"
+# include "GIndexing.h"
+# include "GM2RTS.h"
+
+typedef struct mcStack__T1_r mcStack__T1;
+
+typedef mcStack__T1 *mcStack_stack;
+
+struct mcStack__T1_r {
+ Indexing_Index list;
+ unsigned int count;
+ };
+
+
+/*
+ init - create and return a stack.
+*/
+
+extern "C" mcStack_stack mcStack_init (void);
+
+/*
+ kill - deletes stack, s.
+*/
+
+extern "C" void mcStack_kill (mcStack_stack *s);
+
+/*
+ push - an address, a, onto the stack, s.
+ It returns, a.
+*/
+
+extern "C" void * mcStack_push (mcStack_stack s, void * a);
+
+/*
+ pop - and return the top element from stack, s.
+*/
+
+extern "C" void * mcStack_pop (mcStack_stack s);
+
+/*
+ replace - performs a pop; push (a); return a.
+*/
+
+extern "C" void * mcStack_replace (mcStack_stack s, void * a);
+
+/*
+ depth - returns the depth of the stack.
+*/
+
+extern "C" unsigned int mcStack_depth (mcStack_stack s);
+
+/*
+ access - returns the, i, th stack element.
+ The top of stack is defined by:
+
+ access (s, depth (s)).
+*/
+
+extern "C" void * mcStack_access (mcStack_stack s, unsigned int i);
+
+
+/*
+ init - create and return a stack.
+*/
+
+extern "C" mcStack_stack mcStack_init (void)
+{
+ mcStack_stack s;
+
+ Storage_ALLOCATE ((void **) &s, sizeof (mcStack__T1));
+ s->list = Indexing_InitIndex (1);
+ s->count = 0;
+ return s;
+ /* static analysis guarentees a RETURN statement will be used before here. */
+ __builtin_unreachable ();
+}
+
+
+/*
+ kill - deletes stack, s.
+*/
+
+extern "C" void mcStack_kill (mcStack_stack *s)
+{
+ (*s)->list = Indexing_KillIndex ((*s)->list);
+ Storage_DEALLOCATE ((void **) &(*s), sizeof (mcStack__T1));
+ (*s) = NULL;
+}
+
+
+/*
+ push - an address, a, onto the stack, s.
+ It returns, a.
+*/
+
+extern "C" void * mcStack_push (mcStack_stack s, void * a)
+{
+ if (s->count == 0)
+ {
+ Indexing_PutIndice (s->list, Indexing_LowIndice (s->list), a);
+ }
+ else
+ {
+ Indexing_PutIndice (s->list, (Indexing_HighIndice (s->list))+1, a);
+ }
+ s->count += 1;
+ return a;
+ /* static analysis guarentees a RETURN statement will be used before here. */
+ __builtin_unreachable ();
+}
+
+
+/*
+ pop - and return the top element from stack, s.
+*/
+
+extern "C" void * mcStack_pop (mcStack_stack s)
+{
+ void * a;
+
+ if (s->count == 0)
+ {
+ M2RTS_HALT (-1);
+ __builtin_unreachable ();
+ }
+ else
+ {
+ s->count -= 1;
+ a = Indexing_GetIndice (s->list, Indexing_HighIndice (s->list));
+ Indexing_DeleteIndice (s->list, Indexing_HighIndice (s->list));
+ return a;
+ }
+ ReturnException ("../../gcc-git-devel-modula2/gcc/m2/mc/mcStack.def", 20, 1);
+ __builtin_unreachable ();
+}
+
+
+/*
+ replace - performs a pop; push (a); return a.
+*/
+
+extern "C" void * mcStack_replace (mcStack_stack s, void * a)
+{
+ void * b;
+
+ b = mcStack_pop (s);
+ return mcStack_push (s, a);
+ /* static analysis guarentees a RETURN statement will be used before here. */
+ __builtin_unreachable ();
+}
+
+
+/*
+ depth - returns the depth of the stack.
+*/
+
+extern "C" unsigned int mcStack_depth (mcStack_stack s)
+{
+ return s->count;
+ /* static analysis guarentees a RETURN statement will be used before here. */
+ __builtin_unreachable ();
+}
+
+
+/*
+ access - returns the, i, th stack element.
+ The top of stack is defined by:
+
+ access (s, depth (s)).
+*/
+
+extern "C" void * mcStack_access (mcStack_stack s, unsigned int i)
+{
+ if ((i > s->count) || (i == 0))
+ {
+ M2RTS_HALT (-1);
+ __builtin_unreachable ();
+ }
+ else
+ {
+ return Indexing_GetIndice (s->list, i);
+ }
+ ReturnException ("../../gcc-git-devel-modula2/gcc/m2/mc/mcStack.def", 20, 1);
+ __builtin_unreachable ();
+}
+
+extern "C" void _M2_mcStack_init (__attribute__((unused)) int argc,__attribute__((unused)) char *argv[],__attribute__((unused)) char *envp[])
+{
+}
+
+extern "C" void _M2_mcStack_finish (__attribute__((unused)) int argc,__attribute__((unused)) char *argv[],__attribute__((unused)) char *envp[])
+{
+}