parameter.c 2.4 KB

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