/graalpython/com.oracle.graal.python.cext/src/methodobject.c

https://github.com/graalvm/graalpython · C · 56 lines · 13 code · 3 blank · 40 comment · 0 complexity · 76390836b19f947df9d549f5bcef51e3 MD5 · raw file

  1. /*
  2. * Copyright (c) 2018, 2020, Oracle and/or its affiliates. All rights reserved.
  3. * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
  4. *
  5. * The Universal Permissive License (UPL), Version 1.0
  6. *
  7. * Subject to the condition set forth below, permission is hereby granted to any
  8. * person obtaining a copy of this software, associated documentation and/or
  9. * data (collectively the "Software"), free of charge and under any and all
  10. * copyright rights in the Software, and any and all patent rights owned or
  11. * freely licensable by each licensor hereunder covering either (i) the
  12. * unmodified Software as contributed to or provided by such licensor, or (ii)
  13. * the Larger Works (as defined below), to deal in both
  14. *
  15. * (a) the Software, and
  16. *
  17. * (b) any piece of software and/or hardware listed in the lrgrwrks.txt file if
  18. * one is included with the Software each a "Larger Work" to which the Software
  19. * is contributed by such licensors),
  20. *
  21. * without restriction, including without limitation the rights to copy, create
  22. * derivative works of, display, perform, and distribute the Software and make,
  23. * use, sell, offer for sale, import, export, have made, and have sold the
  24. * Software and the Larger Work(s), and to sublicense the foregoing rights on
  25. * either these or other terms.
  26. *
  27. * This license is subject to the following condition:
  28. *
  29. * The above copyright notice and either this complete permission notice or at a
  30. * minimum a reference to the UPL must be included in all copies or substantial
  31. * portions of the Software.
  32. *
  33. * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
  34. * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
  35. * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
  36. * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
  37. * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
  38. * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
  39. * SOFTWARE.
  40. */
  41. #include "capi.h"
  42. typedef PyObject *(*PyCFunction)(PyObject *, PyObject *);
  43. PyTypeObject PyCFunction_Type = PY_TRUFFLE_TYPE_WITH_VECTORCALL("builtin_function_or_method", &PyType_Type, Py_TPFLAGS_DEFAULT | Py_TPFLAGS_HAVE_GC | _Py_TPFLAGS_HAVE_VECTORCALL, sizeof(PyCFunctionObject), offsetof(PyCFunctionObject, vectorcall));
  44. PyObject* PyCFunction_NewEx(PyMethodDef *ml, PyObject *self, PyObject *module) {
  45. return to_sulong(polyglot_invoke(PY_TRUFFLE_CEXT,
  46. "PyCFunction_NewEx",
  47. polyglot_from_string((const char*)(ml->ml_name), SRC_CS),
  48. native_pointer_to_java(ml->ml_meth),
  49. get_method_flags_wrapper(ml->ml_flags),
  50. native_to_java(self),
  51. native_to_java(module),
  52. ml->ml_doc ? polyglot_from_string(ml->ml_doc, SRC_CS) : native_to_java(Py_None)));
  53. }