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 }