Mercurial > repos > rhope
comparison runtime/integer.c @ 48:a24eb366195c
Fixed some bugs introduced in previous commit and moved definition of integer methods out of runtime and into the compiler
author | Mike Pavone <pavone@retrodev.com> |
---|---|
date | Tue, 02 Mar 2010 00:18:49 -0500 |
parents | 640f541e9116 |
children | 04baa003de5a |
comparison
equal
deleted
inserted
replaced
47:6202b866d72c | 48:a24eb366195c |
---|---|
1 #include "integer.h" | 1 #include "integer.h" |
2 #include "builtin.h" | 2 #include "builtin.h" |
3 #include "context.h" | 3 #include "context.h" |
4 #include "bool.h" | 4 #include "bool.h" |
5 | 5 |
6 #define left ((t_Int32 *)cdata->params[0]) | |
7 #define right ((t_Int32 *)cdata->params[1]) | |
8 | 6 |
9 MethodNoLocals(_PL_,Int32, | |
10 NumParams 2, | |
11 CallSpace 1) | |
12 | |
13 CopiedParam(0, TYPE_INT32) | |
14 Param(1, TYPE_INT32) | |
15 | |
16 left->num += right->num; | |
17 | |
18 release_ref((object *)right); | |
19 EndFunc | |
20 | |
21 MethodNoLocals(_MN_,Int32, | |
22 NumParams 2, | |
23 CallSpace 1) | |
24 | |
25 CopiedParam(0, TYPE_INT32) | |
26 Param(1, TYPE_INT32) | |
27 | |
28 left->num -= right->num; | |
29 | |
30 release_ref((object *)right); | |
31 EndFunc | |
32 | |
33 MethodNoLocals(_TM_,Int32, | |
34 NumParams 2, | |
35 CallSpace 1) | |
36 | |
37 CopiedParam(0, TYPE_INT32) | |
38 Param(1, TYPE_INT32) | |
39 | |
40 left->num *= right->num; | |
41 | |
42 release_ref((object *)right); | |
43 EndFunc | |
44 | |
45 MethodNoLocals(_DV_,Int32, | |
46 NumParams 2, | |
47 CallSpace 1) | |
48 | |
49 CopiedParam(0, TYPE_INT32) | |
50 Param(1, TYPE_INT32) | |
51 | |
52 left->num /= right->num; | |
53 | |
54 release_ref((object *)right); | |
55 EndFunc | |
56 | |
57 MethodNoLocals(LShift,Int32, | |
58 NumParams 2, | |
59 CallSpace 1) | |
60 | |
61 CopiedParam(0, TYPE_INT32) | |
62 Param(1, TYPE_INT32) | |
63 | |
64 left->num <<= right->num; | |
65 | |
66 release_ref((object *)right); | |
67 EndFunc | |
68 | |
69 MethodNoLocals(RShift,Int32, | |
70 NumParams 2, | |
71 CallSpace 1) | |
72 | |
73 CopiedParam(0, TYPE_INT32) | |
74 Param(1, TYPE_INT32) | |
75 | |
76 left->num <<= right->num; | |
77 | |
78 release_ref((object *)right); | |
79 EndFunc | |
80 | |
81 MethodNoLocals(_LT_,Int32, | |
82 NumParams 2, | |
83 CallSpace 1) | |
84 | |
85 Param(0, TYPE_INT32) | |
86 Param(1, TYPE_INT32) | |
87 | |
88 if(left->num < right->num) | |
89 { | |
90 release_ref(cdata->params[0]); | |
91 Ret(0, Yes) | |
92 } else { | |
93 release_ref(cdata->params[0]); | |
94 Ret(0, No) | |
95 } | |
96 release_ref(cdata->params[1]); | |
97 EndFunc | |
98 | |
99 MethodNoLocals(_GT_,Int32, | |
100 NumParams 2, | |
101 CallSpace 1) | |
102 | |
103 Param(0, TYPE_INT32) | |
104 Param(1, TYPE_INT32) | |
105 | |
106 if(left->num > right->num) | |
107 { | |
108 release_ref(cdata->params[0]); | |
109 Ret(0, Yes) | |
110 } else { | |
111 release_ref(cdata->params[0]); | |
112 Ret(0, No) | |
113 } | |
114 release_ref(cdata->params[1]); | |
115 EndFunc | |
116 | |
117 object * make_Int32(int32_t val) | |
118 { | |
119 t_Int32 * obj; | |
120 object * ret = new_object(TYPE_INT32); | |
121 obj = (t_Int32 *)ret; | |
122 obj->num = val; | |
123 return ret; | |
124 } |