void yasm_bc_finalize(yasm_bytecode *bc, yasm_bytecode *prev_bc) { if (bc->callback) bc->callback->finalize(bc, prev_bc); if (bc->multiple) { yasm_value val; if (yasm_value_finalize_expr(&val, bc->multiple, prev_bc, 0)) yasm_error_set(YASM_ERROR_TOO_COMPLEX, N_("multiple expression too complex")); else if (val.rel) yasm_error_set(YASM_ERROR_NOT_ABSOLUTE, N_("multiple expression not absolute")); /* Finalize creates NULL output if value=0, but bc->multiple is NULL * if value=1 (this difference is to make the common case small). * However, this means we need to set bc->multiple explicitly to 0 * here if val.abs is NULL. */ if (val.abs) bc->multiple = val.abs; else bc->multiple = yasm_expr_create_ident( yasm_expr_int(yasm_intnum_create_uint(0)), bc->line); } }
static void bc_incbin_finalize(yasm_bytecode *bc, yasm_bytecode *prev_bc) { bytecode_incbin *incbin = (bytecode_incbin *)bc->contents; yasm_value val; if (yasm_value_finalize_expr(&val, incbin->start, prev_bc, 0)) yasm_error_set(YASM_ERROR_TOO_COMPLEX, N_("start expression too complex")); else if (val.rel) yasm_error_set(YASM_ERROR_NOT_ABSOLUTE, N_("start expression not absolute")); incbin->start = val.abs; if (yasm_value_finalize_expr(&val, incbin->maxlen, prev_bc, 0)) yasm_error_set(YASM_ERROR_TOO_COMPLEX, N_("maximum length expression too complex")); else if (val.rel) yasm_error_set(YASM_ERROR_NOT_ABSOLUTE, N_("maximum length expression not absolute")); incbin->maxlen = val.abs; }