Você não pode selecionar mais de 25 tópicos Os tópicos devem começar com uma letra ou um número, podem incluir traços ('-') e podem ter até 35 caracteres.
 
 
 
 
 
 

22 linhas
765 B

  1. Ast_Node* built_in_add(Ast_Node* operands) {
  2. double sum = 0;
  3. while (operands->type == Ast_Node_Type_Cons_Cell) {
  4. // TODO(Felix): assert type
  5. sum += operands->value.cons_cell->first->value.number->value;
  6. operands = operands->value.cons_cell->rest;
  7. }
  8. return create_ast_node_number(sum);
  9. }
  10. Ast_Node* built_in_substract(Ast_Node* operands) {
  11. double diff = operands->value.cons_cell->first->value.number->value;
  12. operands = operands->value.cons_cell->rest;
  13. while (operands->type == Ast_Node_Type_Cons_Cell) {
  14. // TODO(Felix): assert type
  15. diff -= operands->value.cons_cell->first->value.number->value;
  16. operands = operands->value.cons_cell->rest;
  17. }
  18. return create_ast_node_number(diff);
  19. }