aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--Makefile2
-rw-r--r--src/mds-kbdc/call-stack.c51
-rw-r--r--src/mds-kbdc/call-stack.h42
-rw-r--r--src/mds-kbdc/compile-layout.c8
4 files changed, 99 insertions, 4 deletions
diff --git a/Makefile b/Makefile
index d08fda8..0e78fb7 100644
--- a/Makefile
+++ b/Makefile
@@ -34,7 +34,7 @@ OBJ_mds-kbdc_ = mds-kbdc globals raw-data builtin-functions string \
tree make-tree parse-error simplify-tree parsed \
process-includes validate-tree eliminate-dead-code \
paths include-stack compile-layout variables \
- callables
+ callables call-stack
OBJ_mds-server = $(foreach O,$(OBJ_mds-server_),obj/mds-server/$(O).o)
OBJ_mds-registry = $(foreach O,$(OBJ_mds-registry_),obj/mds-registry/$(O).o)
diff --git a/src/mds-kbdc/call-stack.c b/src/mds-kbdc/call-stack.c
new file mode 100644
index 0000000..c8b4e2c
--- /dev/null
+++ b/src/mds-kbdc/call-stack.c
@@ -0,0 +1,51 @@
+/**
+ * mds — A micro-display server
+ * Copyright © 2014 Mattias Andrée (maandree@member.fsf.org)
+ *
+ * This program 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 of the License, or
+ * (at your option) any later version.
+ *
+ * This program 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 this program. If not, see <http://www.gnu.org/licenses/>.
+ */
+#include "call-stack.h"
+
+
+
+/**
+ * Variable whether the latest created error is stored
+ */
+static mds_kbdc_parse_error_t* error;
+
+/**
+ * The `result` parameter of root procedure that requires the include-stack
+ */
+static mds_kbdc_parsed_t* result;
+
+
+
+/**
+ * Prepare for usage of call-stacks
+ *
+ * @param result_ The `result` parameter of root procedure that requires the call-stack
+ */
+void mds_kbdc_call_stack_begin(mds_kbdc_parsed_t* restrict result_)
+{
+ result = result_;
+}
+
+
+/**
+ * Cleanup after usage of call-stacks
+ */
+void mds_kbdc_call_stack_end(void)
+{
+}
+
diff --git a/src/mds-kbdc/call-stack.h b/src/mds-kbdc/call-stack.h
new file mode 100644
index 0000000..fffedf1
--- /dev/null
+++ b/src/mds-kbdc/call-stack.h
@@ -0,0 +1,42 @@
+/**
+ * mds — A micro-display server
+ * Copyright © 2014 Mattias Andrée (maandree@member.fsf.org)
+ *
+ * This program 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 of the License, or
+ * (at your option) any later version.
+ *
+ * This program 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 this program. If not, see <http://www.gnu.org/licenses/>.
+ */
+#ifndef MDS_MDS_KBDC_CALL_STACK_H
+#define MDS_MDS_KBDC_CALL_STACK_H
+
+
+#include "parsed.h"
+#include "include-stack.h"
+
+
+
+/**
+ * Prepare for usage of call-stacks
+ *
+ * @param result The `result` parameter of root procedure that requires the call-stack
+ */
+void mds_kbdc_call_stack_begin(mds_kbdc_parsed_t* restrict result);
+
+/**
+ * Cleanup after usage of call-stacks
+ */
+void mds_kbdc_call_stack_end(void);
+
+
+
+#endif
+
diff --git a/src/mds-kbdc/compile-layout.c b/src/mds-kbdc/compile-layout.c
index 93eb219..371394d 100644
--- a/src/mds-kbdc/compile-layout.c
+++ b/src/mds-kbdc/compile-layout.c
@@ -16,11 +16,10 @@
* along with this program. If not, see <http://www.gnu.org/licenses/>.
*/
#include "compile-layout.h"
-/* TODO add call stack */
/* XXX fix so that for-loops do not generate the same errors/warnings in all iterations [loopy_error]. */
/* XXX add pragma support */
-#include "include-stack.h"
+#include "call-stack.h"
#include "builtin-functions.h"
#include "string.h"
#include "variables.h"
@@ -2590,9 +2589,12 @@ static int compile_subtree(mds_kbdc_tree_t* restrict tree)
int compile_layout(mds_kbdc_parsed_t* restrict result_)
{
int r, saved_errno;
- mds_kbdc_include_stack_begin(result = result_);
+ result = result_;
+ mds_kbdc_include_stack_begin(result_);
+ mds_kbdc_call_stack_begin(result_);
r = compile_subtree(result_->tree);
saved_errno = errno;
+ mds_kbdc_call_stack_end();
mds_kbdc_include_stack_end();
variables_terminate();
callables_terminate();