Skip to content
  • civodul's avatar
    Simplify the (system foreign) API. · d4149a51
    civodul authored
    Suggested by Neil Jerram.
    
    * libguile/foreign.h (SCM_FOREIGN_TYPE, SCM_FOREIGN_VALUE_REF,
      SCM_FOREIGN_VALUE_SET, SCM_FOREIGN_LEN, SCM_FOREIGN_TYPED_P,
      SCM_FOREIGN_VALUE_P, SCM_VALIDATE_FOREIGN_VALUE, scm_foreign_set_x,
      scm_foreign_type): Remove.
      (scm_foreign_ref): Rename to...
      (scm_foreign_address): ... this.
      (scm_take_foreign_pointer): Update.
      (SCM_FOREIGN_POINTER): Remove CTYPE argument.  Update callers.
      (scm_make_pointer): New declaration.
    
    * libguile/foreign.c (scm_to_uintptr, scm_from_uintptr): New macros.
      (scm_make_pointer): New function.
      (scm_take_foreign_pointer): Remove TYPE and LEN arguments.  Update
      callers.
      (scm_foreign_ref): Remove to...
      (scm_foreign_address): ... this.  Remove type-related code.
      (scm_foreign_set_x): Remove.
      (scm_foreign_to_bytevector): Change argument order; make LEN argument
      compulsory.
      (scm_i_foreign_print): Remove type printing.
      (unpack): Remove foreign-type checking.
    
    * libguile/deprecated.c (scm_dynamic_args_call): Update accordingly.
    
    * libguile/dynl.c (scm_dynamic_pointer): Remove the TYPE and LEN
      arguments; update callers.  Update to the new foreign API.
    
    * libguile/dynl.h (scm_dynamic_pointer): Update.
    
    * libguile/gsubr.c (create_gsubr): Update to the new foreign API.
    
    * libguile/gsubr.h (SCM_SUBRF, SCM_SUBR_GENERIC): Ditto.
    
    * libguile/snarf.h (SCM_IMMUTABLE_FOREIGN): Ditto.
    
    * libguile/vm-i-system.c (subr_call): Ditto.
    
    * module/system/foreign.scm (null-pointer?): New procedure.
    
    * test-suite/standalone/test-ffi: Update to the new
      `bytevector->foreign' signature.
    
    * test-suite/tests/foreign.test ("null pointer")["null pointer
      identity", "null-pointer? %null-pointer"]: New tests.
      ["foreign-set! other-null-pointer", "foreign->bytevector
      other-null-pointer"]: Remove.
      ("make-pointer", "foreign<->bytevector"): New test prefixes.
    d4149a51