static void asm_IFNDEF(ParseCtx *ctx, char *name) { Bool condition; condition = ! check_ifdef_condition(name); start_struct(ctx, TK_IFNDEF, condition); }
tree objc_start_struct (tree name) { gcc_assert (!objc_building_struct); objc_building_struct = true; return start_struct (input_location, RECORD_TYPE, name, &objc_struct_info); }
static void asm_IF(ParseCtx *ctx, Expr *expr) { int value; Bool condition; /* eval and discard expression, ignore errors */ value = Expr_eval(expr, FALSE); if (value == 0) /* ignore expr->result.not_evaluable, as undefined values result in 0 */ condition = FALSE; else condition = TRUE; OBJ_DELETE(expr); start_struct(ctx, TK_IF, condition); }
void define_internal_attribute(const char *name, void (*handle_ndecl)(nesc_attribute attr, nesc_declaration ndecl), void (*handle_decl)(nesc_attribute attr, data_declaration ddecl), void (*handle_tag)(nesc_attribute attr, tag_declaration tdecl), void (*handle_field)(nesc_attribute attr, field_declaration fdecl), void (*handle_type)(nesc_attribute attr, type *t), ...) { va_list args; field_declaration *next_field; word attr_word; type_element attr_tag; tag_declaration attr_decl; struct internal_attribute *iattr; /* Build and declare the attribute */ current.env = global_env; attr_word = build_word(parse_region, name); attr_tag = start_struct(dummy_location, kind_attribute_ref, attr_word); attr_decl = CAST(tag_ref, attr_tag)->tdecl; attr_decl->fields = new_env(parse_region, NULL); next_field = &attr_decl->fieldlist; /* Fields. A fieldname, fieldtype argument list, terminated with a null fieldname. We build a semi-fake struct for these. */ va_start(args, handle_type); for (;;) { const char *field_name = va_arg(args, const char *); field_declaration field; if (!field_name) break; field = ralloc(parse_region, struct field_declaration); field->containing_tag = attr_decl; *next_field = field; next_field = &field->next; field->name = field_name; field->type = va_arg(args, type); field->bitwidth = field->offset = cval_unknown_number; env_add(attr_decl->fields, field_name, field); } va_end(args); /* Add to internal attributes table */ iattr = ralloc(permanent, struct internal_attribute); iattr->name = name; iattr->handle_ndecl = handle_ndecl; iattr->handle_decl = handle_decl; iattr->handle_tag = handle_tag; iattr->handle_field = handle_field; iattr->handle_type = handle_type; env_add(internal_attributes, name, iattr); }