Created
December 5, 2015 04:27
-
-
Save waywardmonkeys/36a6295a28fa3fe3e9b9 to your computer and use it in GitHub Desktop.
enumeration in dylan?
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Module: posix-sockets | |
Synopsis: Auto-generated bindings for the POSIX sockets API. | |
Author: Bruce Mitchener, Jr. | |
Copyright: See LICENSE file in this distribution. | |
define primary class <enumerated-value> (<object>) | |
constant slot enumerated-value :: <integer>, | |
required-init-keyword: value:; | |
constant slot enumerated-name :: <string>, | |
required-init-keyword: name:; | |
end class <enumerated-value>; | |
define constant <enumerated-value-vector> = limited(<vector>, of: <enumerated-value>); | |
define generic enumeration-values | |
(class :: <class>) | |
=> (values :: <enumerated-value-vector>); | |
define macro enumeration-definer | |
{ define enumeration ?class-name:name ?values:* end } | |
=> { define enumeration-class ?class-name end; | |
define-enumeration-values (?class-name) ?values end; | |
define enumeration-utils ?class-name ?values end; } | |
end macro enumeration-definer; | |
define macro enumeration-class-definer | |
{ define enumeration-class ?class-name:name end } | |
=> { | |
define sealed class ?class-name (<enumerated-value>) | |
end class ?class-name; | |
} | |
end macro enumeration-class-definer; | |
define macro define-enumeration-values | |
{ define-enumeration-values (?class-name:name) end } => { } | |
{ define-enumeration-values (?class-name:name) ?name:expression => ?value:expression; ?more:* end } | |
=> { | |
define constant ?name = make(?class-name, value: ?value, name: "?name"); | |
define-enumeration-values (?class-name) ?more end; | |
} | |
end macro define-enumeration-values; | |
define macro enumeration-utils-definer | |
{ define enumeration-utils ?:name ?values:* end } | |
=> { | |
define constant ?name ## "-values" :: <enumerated-value-vector> | |
= as(<enumerated-value-vector>, vector(?values)); | |
define method enumeration-values | |
(class == ?name) | |
=> (values :: <enumerated-value-vector>) | |
?name ## "-values" | |
end; | |
} | |
values: | |
{ } => { } | |
{ ?name:expression => ?value:expression; ... } | |
=> { ?name, ... } | |
end macro enumeration-utils-definer; | |
define enumeration <address-family> | |
$AF-INET => raw/$AF-INET; | |
$AF-INET6 => raw/$AF-INET6; | |
$AF-UNIX => raw/$AF-UNIX; | |
$AF-UNSPEC => raw/$AF-UNSPEC; | |
end; |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment