static char* S_gen_code_sample(CFCFunction *func, const char *alias, CFCClass *klass, int is_constructor) { char *invocant = NULL; if (is_constructor) { invocant = CFCUtil_strdup(CFCClass_get_name(klass)); } else { char *lower = S_camel_to_lower(CFCClass_get_struct_sym(klass)); invocant = CFCUtil_sprintf("$%s", lower); FREEMEM(lower); } CFCParamList *param_list = CFCFunction_get_param_list(func); size_t num_vars = CFCParamList_num_vars(param_list); size_t start = is_constructor ? 0 : 1; char *sample = NULL; if (start == num_vars) { sample = CFCUtil_sprintf(" %s->%s();\n", invocant, alias); } else if (is_constructor || num_vars - start >= 2) { sample = S_gen_labeled_sample(invocant, alias, param_list, start); } else { sample = S_gen_positional_sample(invocant, alias, param_list, start); } return sample; }
static char* S_gen_code_sample(CFCCallable *func, const char *alias, CFCClass *klass, int is_constructor) { char *prologue = CFCUtil_sprintf(""); char *class_var_name = S_camel_to_lower(CFCClass_get_struct_sym(klass)); CFCType *ret_type = CFCCallable_get_return_type(func); if (!CFCType_is_void(ret_type)) { char *ret_name = S_perl_var_name(ret_type, is_constructor); if (!is_constructor && strcmp(ret_name, class_var_name) == 0) { // Return type equals `klass`. Use a generic variable name // to avoid confusing code samples like // `my $string = $string->trim`. prologue = CFCUtil_cat(prologue, "my $result = ", NULL); } else { prologue = CFCUtil_cat(prologue, "my $", ret_name, " = ", NULL); } FREEMEM(ret_name); } if (is_constructor) { const char *invocant = CFCClass_get_name(klass); prologue = CFCUtil_cat(prologue, invocant, NULL); } else { prologue = CFCUtil_cat(prologue, "$", class_var_name, NULL); } prologue = CFCUtil_cat(prologue, "->", alias, NULL); CFCParamList *param_list = CFCCallable_get_param_list(func); int num_vars = CFCParamList_num_vars(param_list); int start = is_constructor ? 0 : 1; char *sample = NULL; if (start == num_vars) { sample = CFCUtil_sprintf(" %s();\n", prologue); } else if (is_constructor || num_vars - start >= 2) { sample = S_gen_labeled_sample(prologue, param_list, start); } else { sample = S_gen_positional_sample(prologue, param_list, start); } FREEMEM(class_var_name); FREEMEM(prologue); return sample; }