bool is_valid_function_expression(const char* in_code_line) { unsigned long find_equal_index=0; unsigned long find_length=strlen(in_code_line); char variables_name[VARIABLES_NAME_LENGTH]={0}; for (;find_equal_index<find_length;++find_equal_index) { if ('='==*(char*)(in_code_line+find_equal_index)) { string_get_equal_left(in_code_line,variables_name); if (is_valid_variables_name(variables_name)) return is_valid_function(in_code_line+find_equal_index+1); } } return is_valid_function(in_code_line); }
struct type *type_new_from_ast(struct ast *ast) { switch (ast->type) { case SYN_VOID: assert(is_valid_void(ast)); return type_new_void(); case SYN_BOOL: assert(is_valid_bool(ast)); return type_new_bool(); case SYN_BYTE: assert(is_valid_byte(ast)); return type_new_byte(); case SYN_SHORT: assert(is_valid_short(ast)); return type_new_short(); case SYN_INT: assert(is_valid_int(ast)); return type_new_int(); case SYN_LONG: assert(is_valid_long(ast)); return type_new_long(); case SYN_UBYTE: assert(is_valid_ubyte(ast)); return type_new_ubyte(); case SYN_USHORT: assert(is_valid_ushort(ast)); return type_new_ushort(); case SYN_UINT: assert(is_valid_uint(ast)); return type_new_uint(); case SYN_ULONG: assert(is_valid_ulong(ast)); return type_new_ulong(); case SYN_HALF: assert(is_valid_half(ast)); return type_new_half(); case SYN_FLOAT: assert(is_valid_float(ast)); return type_new_float(); case SYN_DOUBLE: assert(is_valid_double(ast)); return type_new_double(); case SYN_POINTER: assert(is_valid_pointer(ast)); return pointer_ast(&ast->val.op); case SYN_ARRAY: assert(is_valid_array(ast)); return array_ast(&ast->val.op); case SYN_ARRAY_UNDEFINED_SIZE: assert(is_valid_array_undefined_size(ast)); return array_undefined_size_ast(&ast->val.op); case SYN_FUNCTION: assert(is_valid_function(ast)); return function_ast(&ast->val.op); default: ERROR_HERE; } }