]> gerrit.simantics Code Review - simantics/platform.git/blob - org.simantics.scl.runtime/scl/Coercion.scl
Fixed multiple issues causing dangling references to discarded queries
[simantics/platform.git] / org.simantics.scl.runtime / scl / Coercion.scl
1 import "Prelude"
2 import "JavaBuiltin" as Java
3
4 class Coercible a b where
5     coerce :: a -> b
6
7 //instance Coercible a a where
8 //    coerce = id
9     
10 instance (Coercible a b) => Coercible [a] [b] where
11     coerce = map coerce
12
13 // From Byte
14
15 instance Coercible Byte Integer where
16     coerce = Java.b2i
17
18 instance Coercible Byte Long where
19     coerce = Java.i2l . Java.b2i
20     
21 // From Character
22
23 instance Coercible Character Integer where
24     coerce = Java.c2i
25
26 instance Coercible Character Long where
27     coerce = Java.i2l . Java.c2i
28
29 // From Short
30
31 instance Coercible Short Integer where
32     coerce = Java.s2i
33
34 instance Coercible Short Long where
35     coerce = Java.i2l . Java.s2i
36
37 // From Integer
38
39 instance Coercible Integer Byte where
40     coerce = Java.i2b
41
42 instance Coercible Integer Character where
43     coerce = Java.i2c    
44
45 instance Coercible Integer Short where
46     coerce = Java.i2s
47
48 instance Coercible Integer Long where
49     coerce = Java.i2l
50
51 instance Coercible Integer Float where
52     coerce = Java.i2f
53
54 instance Coercible Integer Double where
55     coerce = Java.i2d
56
57 instance Coercible Integer String where
58     coerce = coerceIntegerToString
59
60 // From Long
61
62 instance Coercible Long Byte where
63     coerce = Java.i2b . Java.l2i
64
65 instance Coercible Long Character where
66     coerce = Java.i2c . Java.l2i
67
68 instance Coercible Long Short where
69     coerce = Java.i2s . Java.l2i
70     
71 instance Coercible Long Integer where
72     coerce = Java.l2i
73
74 instance Coercible Long Float where
75     coerce = Java.l2f
76
77 instance Coercible Long Double where
78     coerce = Java.l2d
79
80 instance Coercible Long String where
81     coerce = coerceLongToString
82     
83 // From Float
84
85 instance Coercible Float Byte where
86     coerce = Java.i2b . Java.f2i
87
88 instance Coercible Float Short where
89     coerce = Java.i2s . Java.f2i
90     
91 instance Coercible Float Integer where
92     coerce = Java.f2i
93
94 instance Coercible Float Long where
95     coerce = Java.f2l
96
97 instance Coercible Float Double where
98     coerce = Java.f2d
99
100 instance Coercible Float String where
101     coerce = coerceFloatToString
102     
103 // From Double
104
105 instance Coercible Double Byte where
106     coerce = Java.i2b . Java.d2i
107
108 instance Coercible Double Short where
109     coerce = Java.i2s . Java.d2i
110     
111 instance Coercible Double Integer where
112     coerce = Java.d2i
113
114 instance Coercible Double Long where
115     coerce = Java.d2l
116
117 instance Coercible Double Float where
118     coerce = Java.d2f
119
120 instance Coercible Double String where
121     coerce = coerceDoubleToString
122     
123 // From String
124
125 instance Coercible String Integer where
126     coerce = coerceStringToInteger
127
128 instance Coercible String Long where
129     coerce = coerceStringToLong
130
131 instance Coercible String Float where
132     coerce = coerceStringToFloat
133
134 instance Coercible String Double where
135     coerce = coerceStringToDouble
136
137 // Java imports
138
139 @private
140 importJava "java.lang.Integer" where
141     @JavaName toString
142     coerceIntegerToString :: Integer -> String
143     @JavaName parseInt
144     coerceStringToInteger :: String -> Integer
145
146 @private
147 importJava "java.lang.Long" where
148     @JavaName toString
149     coerceLongToString :: Long -> String
150     @JavaName parseLong
151     coerceStringToLong :: String -> Long
152
153 @private
154 importJava "java.lang.Float" where
155     @JavaName toString
156     coerceFloatToString :: Float -> String
157     @JavaName parseFloat
158     coerceStringToFloat :: String -> Float
159
160 @private
161 importJava "java.lang.Double" where
162     @JavaName toString
163     coerceDoubleToString :: Double -> String
164     @JavaName parseDouble
165     coerceStringToDouble :: String -> Double