/vm/number.go

http://github.com/feyeleanor/RubyGoLightly · Go · 86 lines · 74 code · 12 blank · 0 comment · 14 complexity · 883e199d8cd5c2e02381f0e35b66f065 MD5 · raw file

  1. import(
  2. "tr";
  3. )
  4. func TrFixnum_add(vm *RunyVM, self, other *RubyObject) RubyObject {
  5. return TR_INT2FIX(TR_FIX2INT(self) + TR_FIX2INT(other));
  6. }
  7. func TrFixnum_sub(vm *RubyVM, self, other *RubyObject) RubyObject {
  8. return TR_INT2FIX(TR_FIX2INT(self) - TR_FIX2INT(other));
  9. }
  10. func TrFixnum_mul(vm *RubyVM, self, other *RubyObject) RubyObject {
  11. return TR_INT2FIX(TR_FIX2INT(self) * TR_FIX2INT(other));
  12. }
  13. func TrFixnum_div(vm *RubyVM, self, other *RubyObject) RubyObject {
  14. return TR_INT2FIX(TR_FIX2INT(self) / TR_FIX2INT(other));
  15. }
  16. func TrFixnum_eq(vm *RubyVM, self, other *RubyObject) RubyObject {
  17. if TR_FIX2INT(self) == TR_FIX2INT(other) {
  18. return TR_TRUE;
  19. } else {
  20. return TR_FALSE;
  21. }
  22. }
  23. func TrFixnum_ne(vm *RubyVM, self, other *RubyObject) RubyObject {
  24. if TR_FIX2INT(self) != TR_FIX2INT(other) {
  25. return TR_TRUE;
  26. } else {
  27. return TR_FALSE;
  28. }
  29. }
  30. func TrFixnum_lt(vm *RubyVM, self, other *RubyObject) RubyObject {
  31. if TR_FIX2INT(self) < TR_FIX2INT(other) {
  32. return TR_TRUE;
  33. } else {
  34. return TR_FALSE;
  35. }
  36. }
  37. func TrFixnum_gt(vm *RubyVM, self, other *RubyObject) RubyObject {
  38. if TR_FIX2INT(self) > TR_FIX2INT(other) {
  39. return TR_TRUE;
  40. } else {
  41. return TR_FALSE;
  42. }
  43. }
  44. func TrFixnum_le(vm *RubyVM, self, other *RubyObject) RubyObject {
  45. if TR_FIX2INT(self) <= TR_FIX2INT(other) {
  46. return TR_TRUE;
  47. } else {
  48. return TR_FALSE;
  49. }
  50. }
  51. func TrFixnum_ge(vm *RubyVM, self, other *RubyObject) RubyObject {
  52. if TR_FIX2INT(self) >= TR_FIX2INT(other) {
  53. return TR_TRUE;
  54. } else {
  55. return TR_FALSE;
  56. }
  57. }
  58. func TrFixnum_to_s(vm *RubyVM, self *RubyObject) RubyObject {
  59. return tr_sprintf(vm, "%d", TR_FIX2INT(self));
  60. }
  61. void TrFixnum_init(vm *RubyVM) {
  62. c := vm.classes[TR_T_Fixnum] = Object_const_set(vm, vm.self, TrSymbol_new(vm, Fixnum), newClass(vm, TrSymbol_new(vm, Fixnum), vm.classes[TR_T_Object]));
  63. c.add_method(vm, TrSymbol_new(vm, "+"), newMethod(vm, (TrFunc *)TrFixnum_add, TR_NIL, 1));
  64. c.add_method(vm, TrSymbol_new(vm, "-"), newMethod(vm, (TrFunc *)TrFixnum_sub, TR_NIL, 1));
  65. c.add_method(vm, TrSymbol_new(vm, "*"), newMethod(vm, (TrFunc *)TrFixnum_mul, TR_NIL, 1));
  66. c.add_method(vm, TrSymbol_new(vm, "/"), newMethod(vm, (TrFunc *)TrFixnum_div, TR_NIL, 1));
  67. c.add_method(vm, TrSymbol_new(vm, "=="), newMethod(vm, (TrFunc *)TrFixnum_eq, TR_NIL, 1));
  68. c.add_method(vm, TrSymbol_new(vm, "!="), newMethod(vm, (TrFunc *)TrFixnum_eq, TR_NIL, 1));
  69. c.add_method(vm, TrSymbol_new(vm, "<"), newMethod(vm, (TrFunc *)TrFixnum_lt, TR_NIL, 1));
  70. c.add_method(vm, TrSymbol_new(vm, "<="), newMethod(vm, (TrFunc *)TrFixnum_le, TR_NIL, 1));
  71. c.add_method(vm, TrSymbol_new(vm, ">"), newMethod(vm, (TrFunc *)TrFixnum_gt, TR_NIL, 1));
  72. c.add_method(vm, TrSymbol_new(vm, ">="), newMethod(vm, (TrFunc *)TrFixnum_ge, TR_NIL, 1));
  73. c.add_method(vm, TrSymbol_new(vm, "to_s"), newMethod(vm, (TrFunc *)TrFixnum_to_s, TR_NIL, 0));
  74. }