module: dfmc-c-ffi Copyright: Original Code is Copyright (c) 1995-2004 Functional Objects, Inc. All rights reserved. License: Functional Objects Library Public License Version 1.0 Dual-license: GNU Lesser General Public License Warranty: Distributed WITHOUT WARRANTY OF ANY KIND /// Copyright 1996 Functional Objects, Inc. All rights reserved. /// definitions for the basic designator classes in the ffi // still need implementations of the versions, // , and versions. I suspect we can just // have the () metaclass ; end &class; define abstract &class () metaclass ; end &class; define open abstract &class () metaclass ; end &class; define open abstract &class () metaclass ; end &class; // We have a split between structs and non-structs define abstract &class () metaclass ; end; define abstract open &class () metaclass , raw-type-name: #"", boxer-function-name: #"primitive-wrap-c-pointer", unboxer-function-name: #"primitive-unwrap-c-pointer", raw-dereferencer: #"primitive-c-pointer-at", low-level-type: , self: ; runtime-constant &slot raw-pointer-address :: , required-init-keyword: raw-pointer-address:; end &class; define abstract &class () metaclass , low-level-type: , self: ; end &class; // is this necessary?? define abstract open &class () metaclass , referenced-type: , low-level-type: , self: ; end &class; define concrete &class () metaclass , low-level-type: , self: , abstract-super: ; end &class; define abstract open &class (, ) metaclass , low-level-type: , self: ; end &class; define abstract open &class () metaclass , low-level-type: , self: ; end &class; define open abstract &class () metaclass , low-level-type: , self: ; end &class; define concrete &class () metaclass , low-level-type: , self: , abstract-super: ; end &class; // need to use a new metaclass here to hold the static type define abstract open &class () metaclass , low-level-type: , self: ; end &class; define abstract &class () metaclass ; end &class; define abstract &class () metaclass , low-level-type: ; end &class; define abstract &class () metaclass ; end; define macro integer-designator-class-definer { define integer-designator-class "" "<" ## ?super-class-name:name ## ">" ?bitfield-dereferencer:name ?boxer-name:name end } => { define integer-designator-class-aux "" "" "<" ## ?super-class-name ## ">" "" "primitive-c-" ## ?designator-class-name ## "-at" ?bitfield-dereferencer ?boxer-name end } { define integer-designator-class "" "<" ## ?super-class-name:name ## ">" ?bitfield-dereferencer:name ?boxer-name:name ?raw-type:name end } => { define integer-designator-class-aux "" "" "<" ## ?super-class-name ## ">" ?raw-type "primitive-c-" ## ?designator-class-name ## "-at" ?bitfield-dereferencer ?boxer-name end } options: { } => { } { #rest ?keys:* /* , #key, #all-keys */ } => { ?keys } bitfield-dereferencer: { signed } => { primitive-c-signed-field } { unsigned } => { primitive-c-unsigned-field } { int } => { primitive-c-int-field } end macro; define macro integer-designator-class-aux-definer { define integer-designator-class-aux ?model-class-name:name "<" ## ?pointer-class-name:name ## ">" ?superclass-name:name ?raw-type:name ?raw-dereferencer:name ?bitfield-dereferencer:name ?boxer-name:name end } => { define open abstract &class ?model-class-name (?superclass-name) metaclass , raw-type-name: ?#"raw-type", raw-dereferencer: ?#"raw-dereferencer", bitfield-dereferencer: ?#"bitfield-dereferencer", boxer-function-name: ?#"boxer-name", unboxer-function-name: #"primitive-unwrap-machine-word", pointer-type-name: "<" ## ?pointer-class-name ## ">"; end; define open abstract &class "<" ## ?pointer-class-name ## ">" () metaclass , referenced-type: ?model-class-name, low-level-type: "<" ## ?pointer-class-name ## ">", self: "<" ## ?pointer-class-name ## ">", concrete-class-name: "", pointer-type-name: "<" ## ?pointer-class-name ## "*>"; end; define sealed concrete &class "" ("<" ## ?pointer-class-name ## ">") metaclass , abstract-super: "<" ## ?pointer-class-name ## ">", low-level-type: "", self: ""; end; define open abstract &class "<" ## ?pointer-class-name ## "*>" () metaclass , referenced-type: "<" ## ?pointer-class-name ## ">", low-level-type: "<" ## ?pointer-class-name ## "*>", self: "<" ## ?pointer-class-name ## "*>", concrete-class-name: ""; end; define sealed concrete &class "" ("<" ## ?pointer-class-name ## "*>") metaclass , abstract-super: "<" ## ?pointer-class-name ## "*>", low-level-type: "", self: ""; end } end macro; define integer-designator-class unsigned box-c-unsigned-char end; define integer-designator-class signed box-c-signed-char end; define integer-designator-class unsigned box-c-unsigned-short end; define integer-designator-class signed box-c-signed-short end; define integer-designator-class unsigned primitive-wrap-machine-word end; define integer-designator-class signed primitive-wrap-machine-word end; define integer-designator-class unsigned primitive-wrap-machine-word end; define integer-designator-class signed primitive-wrap-machine-word end; define integer-designator-class int primitive-wrap-machine-word end; define macro float-designator-class-definer { define float-designator-class "" "<" ## ?dylan-class:name ## ">" end } => { define float-designator-class-aux "" "" "" "" "<" ## ?dylan-class ## ">" "primitive-c-" ## ?C-class ## "-at" "primitive-raw-as-" ## ?dylan-class "primitive-" ## ?dylan-class ## "-as-raw" end } end macro float-designator-class-definer; define macro float-designator-class-aux-definer { define float-designator-class-aux ?C-class:name ?C-pointer-class:name ?C-pointer-instantiation-class:name ?raw-type:name ?dylan-class:name ?dereferencer:name ?boxer:name ?unboxer:name end } => { define open abstract &class ?C-class () metaclass , raw-type-name: ?#"raw-type", raw-dereferencer: ?#"dereferencer", boxer-function-name: ?#"boxer", unboxer-function-name: ?#"unboxer", low-level-type: ?dylan-class; end; define open abstract &class ?C-pointer-class () metaclass , referenced-type: ?C-class, low-level-type: ?C-pointer-class, self: ?C-pointer-class; end; define sealed concrete &class ?C-pointer-instantiation-class (?C-pointer-class) metaclass , abstract-super: ?C-pointer-class, low-level-type: ?C-pointer-instantiation-class, self: ?C-pointer-instantiation-class; end } end macro float-designator-class-aux-definer; define float-designator-class end; define float-designator-class end; ///---*** NOTE: Since we don't implement , it would be difficult ///---*** to provide as we don't have the needed primitives /// define float-designator-class end;