Nie możesz wybrać więcej, niż 25 tematów Tematy muszą się zaczynać od litery lub cyfry, mogą zawierać myślniki ('-') i mogą mieć do 35 znaków.
 
 
 
 
 
 

53 wiersze
1.9 KiB

  1. Ast_Node* built_in_add(Ast_Node* operands) {
  2. double sum = 0;
  3. while (operands->type == Ast_Node_Type_Pair) {
  4. assert_type(operands->value.pair->first, Ast_Node_Type_Number);
  5. sum += operands->value.pair->first->value.number->value;
  6. operands = operands->value.pair->rest;
  7. }
  8. return create_ast_node_number(sum);
  9. }
  10. Ast_Node* built_in_substract(Ast_Node* operands) {
  11. assert_type(operands->value.pair->first, Ast_Node_Type_Number);
  12. double difference = operands->value.pair->first->value.number->value;
  13. operands = operands->value.pair->rest;
  14. while (operands->type == Ast_Node_Type_Pair) {
  15. assert_type(operands->value.pair->first, Ast_Node_Type_Number);
  16. difference -= operands->value.pair->first->value.number->value;
  17. operands = operands->value.pair->rest;
  18. }
  19. return create_ast_node_number(difference);
  20. }
  21. Ast_Node* built_in_multiply(Ast_Node* operands) {
  22. assert_type(operands->value.pair->first, Ast_Node_Type_Number);
  23. double product = operands->value.pair->first->value.number->value;
  24. operands = operands->value.pair->rest;
  25. while (operands->type == Ast_Node_Type_Pair) {
  26. assert_type(operands->value.pair->first, Ast_Node_Type_Number);
  27. product *= operands->value.pair->first->value.number->value;
  28. operands = operands->value.pair->rest;
  29. }
  30. return create_ast_node_number(product);
  31. }
  32. Ast_Node* built_in_divide(Ast_Node* operands) {
  33. assert_type(operands->value.pair->first, Ast_Node_Type_Number);
  34. double quotient = operands->value.pair->first->value.number->value;
  35. operands = operands->value.pair->rest;
  36. while (operands->type == Ast_Node_Type_Pair) {
  37. assert_type(operands->value.pair->first, Ast_Node_Type_Number);
  38. quotient /= operands->value.pair->first->value.number->value;
  39. operands = operands->value.pair->rest;
  40. }
  41. return create_ast_node_number(quotient);
  42. }