(;module: lux (lux (control [monad #+ do]) (data [text] text/format (coll [list "list/" Functor] [dict #+ Dict])) [macro #+ with-gensyms] (macro [code] ["s" syntax #+ syntax:]) [host]) (luxc ["&" base] (lang ["la" analysis] ["ls" synthesis]) ["&;" analyser] ["&;" synthesizer] (synthesizer [function]) (generator ["&;" common] ["&;" runtime] (host ["$" jvm] (jvm ["$t" type] ["$d" def] ["$i" inst])))) ["@" ../common]) (do-template [ ] [(def: $;Inst )] [L2S (|>. $i;L2I $i;I2S)] [L2B (|>. $i;L2I $i;I2B)] ) (do-template [ ] [(def: ( inputI) @;Unary (if (is $i;NOP ) (|>. inputI ($i;unwrap ) ($i;wrap )) (|>. inputI ($i;unwrap ) ($i;wrap ))))] [convert//double-to-float #$;Double $i;D2F #$;Float] [convert//double-to-int #$;Double $i;D2I #$;Int] [convert//double-to-long #$;Double $i;D2L #$;Long] [convert//float-to-double #$;Float $i;F2D #$;Double] [convert//float-to-int #$;Float $i;F2I #$;Int] [convert//float-to-long #$;Float $i;F2L #$;Long] [convert//int-to-byte #$;Int $i;I2B #$;Byte] [convert//int-to-char #$;Int $i;I2C #$;Char] [convert//int-to-double #$;Int $i;I2D #$;Double] [convert//int-to-float #$;Int $i;I2F #$;Float] [convert//int-to-long #$;Int $i;I2L #$;Long] [convert//int-to-short #$;Int $i;I2S #$;Short] [convert//long-to-double #$;Long $i;L2D #$;Double] [convert//long-to-float #$;Long $i;L2F #$;Float] [convert//long-to-int #$;Long $i;L2I #$;Int] [convert//long-to-short #$;Long L2S #$;Short] [convert//long-to-byte #$;Long L2B #$;Byte] [convert//char-to-byte #$;Char $i;I2B #$;Byte] [convert//char-to-short #$;Char $i;I2S #$;Short] [convert//char-to-int #$;Char $i;NOP #$;Int] [convert//char-to-long #$;Char $i;I2L #$;Long] [convert//byte-to-long #$;Byte $i;I2L #$;Long] [convert//short-to-long #$;Short $i;I2L #$;Long] ) (def: conversion-procs @;Bundle (<| (@;prefix "convert") (|> (dict;new text;Hash) (@;install "double-to-float" (@;unary convert//double-to-float)) (@;install "double-to-int" (@;unary convert//double-to-int)) (@;install "double-to-long" (@;unary convert//double-to-long)) (@;install "float-to-double" (@;unary convert//float-to-double)) (@;install "float-to-int" (@;unary convert//float-to-int)) (@;install "float-to-long" (@;unary convert//float-to-long)) (@;install "int-to-byte" (@;unary convert//int-to-byte)) (@;install "int-to-char" (@;unary convert//int-to-char)) (@;install "int-to-double" (@;unary convert//int-to-double)) (@;install "int-to-float" (@;unary convert//int-to-float)) (@;install "int-to-long" (@;unary convert//int-to-long)) (@;install "int-to-short" (@;unary convert//int-to-short)) (@;install "long-to-double" (@;unary convert//long-to-double)) (@;install "long-to-float" (@;unary convert//long-to-float)) (@;install "long-to-int" (@;unary convert//long-to-int)) (@;install "long-to-short" (@;unary convert//long-to-short)) (@;install "long-to-byte" (@;unary convert//long-to-byte)) (@;install "char-to-byte" (@;unary convert//char-to-byte)) (@;install "char-to-short" (@;unary convert//char-to-short)) (@;install "char-to-int" (@;unary convert//char-to-int)) (@;install "char-to-long" (@;unary convert//char-to-long)) (@;install "byte-to-long" (@;unary convert//byte-to-long)) (@;install "short-to-long" (@;unary convert//short-to-long)) ))) (def: #export procedures @;Bundle (<| (@;prefix "jvm") (|> (dict;new text;Hash) (dict;merge conversion-procs) )))