parameter.c 2.1 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374
  1. #include<stdio.h>
  2. #include "interpreter.h"
  3. parameter *make_parameter_name(statement *var){
  4. parameter *tmp;
  5. tmp = malloc(sizeof(parameter)); // get an address for base var
  6. tmp->next = NULL;
  7. tmp->u.var = var;
  8. tmp->type = only_value;
  9. return tmp;
  10. }
  11. parameter *append_parameter_name(statement *var, parameter *parameter_base){
  12. parameter *tmp = parameter_base; // iter var
  13. while(1){
  14. if (tmp->next == NULL){ // the last
  15. break;
  16. }
  17. tmp = tmp->next; // get the next to iter
  18. }
  19. parameter *new_tmp = make_parameter_name(var);
  20. tmp->next = new_tmp;
  21. return new_tmp;
  22. }
  23. // ---- parameter func[实参]
  24. parameter *make_parameter_value(statement *value){
  25. parameter *tmp;
  26. tmp = malloc(sizeof(parameter)); // get an address for base var
  27. tmp->next = NULL;
  28. tmp->type = only_value;
  29. tmp->u.value = value;
  30. return tmp;
  31. }
  32. parameter *append_parameter_value(statement *value, parameter *parameter_base){ // add at last
  33. parameter *tmp = parameter_base; // iter var
  34. while(1){
  35. if (tmp->next == NULL){ // the last
  36. break;
  37. }
  38. tmp = tmp->next; // get the next to iter
  39. }
  40. parameter *new_tmp = make_parameter_value(value);
  41. tmp->next = new_tmp;
  42. return new_tmp;
  43. }
  44. parameter *add_parameter_value(statement *value, parameter *parameter_base){ // add at first
  45. parameter *new_tmp = make_parameter_value(value);
  46. new_tmp->next = parameter_base;
  47. return new_tmp;
  48. }
  49. parameter *pack_value_parameter(GWARF_value value){ // 把value封装成参数
  50. parameter *tmp;
  51. tmp = malloc(sizeof(parameter)); // get an address for base var
  52. tmp->next = NULL;
  53. tmp->type = only_value;
  54. statement *statement_tmp = make_statement();
  55. statement_tmp->type = base_value;
  56. statement_tmp->code.base_value.value = value;
  57. tmp->u.value = statement_tmp;
  58. return tmp;
  59. }
  60. statement *pack_call_name(char *name, statement *from){ // 快速生成call back函数的the_statment
  61. statement *tmp = make_statement();
  62. tmp->type = base_var;
  63. tmp->code.base_var.var_name = name;
  64. tmp->code.base_var.from = from;
  65. return tmp;
  66. }