Committed to branch dmalcolm/jit:

gcc/jit/
        * libgccjit.h (gcc_jit_function_get_param): New.
        * libgccjit.map (gcc_jit_function_get_param): New.
        * libgccjit.c (gcc_jit_function_get_param): New.
        * libgccjit++.h (gccjit::function::get_param): New.
---
 gcc/jit/ChangeLog.jit |  7 +++++++
 gcc/jit/libgccjit++.h |  9 +++++++++
 gcc/jit/libgccjit.c   | 17 +++++++++++++++++
 gcc/jit/libgccjit.h   |  3 +++
 gcc/jit/libgccjit.map |  1 +
 5 files changed, 37 insertions(+)

diff --git a/gcc/jit/ChangeLog.jit b/gcc/jit/ChangeLog.jit
index 8b3c947..001cefb 100644
--- a/gcc/jit/ChangeLog.jit
+++ b/gcc/jit/ChangeLog.jit
@@ -1,5 +1,12 @@
 2014-02-10  David Malcolm  <dmalc...@redhat.com>
 
+       * libgccjit.h (gcc_jit_function_get_param): New.
+       * libgccjit.map (gcc_jit_function_get_param): New.
+       * libgccjit.c (gcc_jit_function_get_param): New.
+       * libgccjit++.h (gccjit::function::get_param): New.
+
+2014-02-10  David Malcolm  <dmalc...@redhat.com>
+
        * libgccjit++.h (gccjit::object::get_inner_object): Make const.
        (gccjit::location::get_inner_location): Likewise.
        (gccjit::field::get_inner_field): Likewise.
diff --git a/gcc/jit/libgccjit++.h b/gcc/jit/libgccjit++.h
index f3c26ee..74c02ea 100644
--- a/gcc/jit/libgccjit++.h
+++ b/gcc/jit/libgccjit++.h
@@ -259,6 +259,8 @@ namespace gccjit
 
     gcc_jit_function *get_inner_function () const;
 
+    param get_param (int index);
+
     label new_forward_label ();
     label new_forward_label (const std::string &name);
 
@@ -970,6 +972,13 @@ function::get_inner_function () const
   return reinterpret_cast<gcc_jit_function *> (get_inner_object ());
 }
 
+inline param
+function::get_param (int index)
+{
+  return param (gcc_jit_function_get_param (get_inner_function (),
+                                           index));
+}
+
 inline label
 function::new_forward_label ()
 {
diff --git a/gcc/jit/libgccjit.c b/gcc/jit/libgccjit.c
index 3f39984..da1afdc 100644
--- a/gcc/jit/libgccjit.c
+++ b/gcc/jit/libgccjit.c
@@ -397,6 +397,23 @@ gcc_jit_function_as_object (gcc_jit_function *func)
   return static_cast <gcc_jit_object *> (func->as_object ());
 }
 
+gcc_jit_param *
+gcc_jit_function_get_param (gcc_jit_function *func, int index)
+{
+  RETURN_NULL_IF_FAIL (func, NULL, "NULL function");
+  gcc::jit::recording::context *ctxt = func->m_ctxt;
+  RETURN_NULL_IF_FAIL (index >= 0, ctxt, "negative index");
+  int num_params = func->get_params ().length ();
+  RETURN_NULL_IF_FAIL_PRINTF3 (index < num_params,
+                              ctxt,
+                              "index of %d is too large (%s has %d params)",
+                              index,
+                              func->get_debug_string (),
+                              num_params);
+
+  return static_cast <gcc_jit_param *> (func->get_param (index));
+}
+
 gcc_jit_label*
 gcc_jit_function_new_forward_label (gcc_jit_function *func,
                                    const char *name)
diff --git a/gcc/jit/libgccjit.h b/gcc/jit/libgccjit.h
index e0161ba..03e9ff8 100644
--- a/gcc/jit/libgccjit.h
+++ b/gcc/jit/libgccjit.h
@@ -435,6 +435,9 @@ gcc_jit_context_new_function (gcc_jit_context *ctxt,
 extern gcc_jit_object *
 gcc_jit_function_as_object (gcc_jit_function *func);
 
+extern gcc_jit_param *
+gcc_jit_function_get_param (gcc_jit_function *func, int index);
+
 /* Create a label, to be placed later.
 
    The name can be NULL, or you can give it a meaningful name, which
diff --git a/gcc/jit/libgccjit.map b/gcc/jit/libgccjit.map
index 6dc700d..45b2a2f 100644
--- a/gcc/jit/libgccjit.map
+++ b/gcc/jit/libgccjit.map
@@ -39,6 +39,7 @@
     gcc_jit_function_add_label;
     gcc_jit_function_add_return;
     gcc_jit_function_as_object;
+    gcc_jit_function_get_param;
     gcc_jit_function_new_forward_label;
     gcc_jit_function_new_local;
     gcc_jit_function_new_loop;
-- 
1.7.11.7

Reply via email to