Pass 'noreturn_macro'
This commit is contained in:
parent
62c9909d46
commit
f48cd83c4e
@ -9537,7 +9537,10 @@ resolve_type = fn (module: &Module, type: &Type) &Type
|
|||||||
report_error();
|
report_error();
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
.integer =>
|
.void,
|
||||||
|
.noreturn,
|
||||||
|
.integer,
|
||||||
|
=>
|
||||||
{
|
{
|
||||||
result = type;
|
result = type;
|
||||||
},
|
},
|
||||||
@ -9563,6 +9566,14 @@ resolve_type = fn (module: &Module, type: &Type) &Type
|
|||||||
return result;
|
return result;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
BlockCopy = struct
|
||||||
|
{
|
||||||
|
source: &Block,
|
||||||
|
destination: &Block,
|
||||||
|
}
|
||||||
|
|
||||||
|
copy_block = fn (module: &Module, parent_scope: &Scope, copy: BlockCopy) void;
|
||||||
|
|
||||||
clone_value = fn (module: &Module, scope: &Scope, old_value: &Value) &Value
|
clone_value = fn (module: &Module, scope: &Scope, old_value: &Value) &Value
|
||||||
{
|
{
|
||||||
assert(old_value != zero);
|
assert(old_value != zero);
|
||||||
@ -9607,6 +9618,7 @@ clone_value = fn (module: &Module, scope: &Scope, old_value: &Value) &Value
|
|||||||
},
|
},
|
||||||
};
|
};
|
||||||
},
|
},
|
||||||
|
.unreachable => {},
|
||||||
else =>
|
else =>
|
||||||
{
|
{
|
||||||
#trap();
|
#trap();
|
||||||
@ -9643,6 +9655,43 @@ clone_statement = fn (module: &Module, scope: &Scope, old_statement: &Statement)
|
|||||||
.return = return_value,
|
.return = return_value,
|
||||||
};
|
};
|
||||||
},
|
},
|
||||||
|
.if =>
|
||||||
|
{
|
||||||
|
>condition = clone_value(module, scope, old_statement.content.if.condition);
|
||||||
|
>if_statement = clone_statement(module, scope, old_statement.content.if.if);
|
||||||
|
>else_statement = old_statement.content.if.else;
|
||||||
|
if (else_statement)
|
||||||
|
{
|
||||||
|
else_statement = clone_statement(module, scope, else_statement);
|
||||||
|
}
|
||||||
|
|
||||||
|
new_statement.content = {
|
||||||
|
.if = {
|
||||||
|
.condition = condition,
|
||||||
|
.if = if_statement,
|
||||||
|
.else = else_statement,
|
||||||
|
},
|
||||||
|
};
|
||||||
|
},
|
||||||
|
.block =>
|
||||||
|
{
|
||||||
|
>block = arena_allocate[Block](module.arena, 1);
|
||||||
|
copy_block(module, scope, {
|
||||||
|
.source = old_statement.content.block,
|
||||||
|
.destination = block,
|
||||||
|
});
|
||||||
|
|
||||||
|
new_statement.content = {
|
||||||
|
.block = block,
|
||||||
|
};
|
||||||
|
},
|
||||||
|
.expression =>
|
||||||
|
{
|
||||||
|
>value = clone_value(module, scope, old_statement.content.expression);
|
||||||
|
new_statement.content = {
|
||||||
|
.expression = value,
|
||||||
|
};
|
||||||
|
},
|
||||||
else =>
|
else =>
|
||||||
{
|
{
|
||||||
#trap();
|
#trap();
|
||||||
@ -9652,12 +9701,6 @@ clone_statement = fn (module: &Module, scope: &Scope, old_statement: &Statement)
|
|||||||
return new_statement;
|
return new_statement;
|
||||||
}
|
}
|
||||||
|
|
||||||
BlockCopy = struct
|
|
||||||
{
|
|
||||||
source: &Block,
|
|
||||||
destination: &Block,
|
|
||||||
}
|
|
||||||
|
|
||||||
copy_block = fn (module: &Module, parent_scope: &Scope, copy: BlockCopy) void
|
copy_block = fn (module: &Module, parent_scope: &Scope, copy: BlockCopy) void
|
||||||
{
|
{
|
||||||
>source = copy.source;
|
>source = copy.source;
|
||||||
@ -10049,6 +10092,7 @@ analyze_type = fn (module: &Module, value: &Value, expected_type: &Type, analysi
|
|||||||
.ampersand,
|
.ampersand,
|
||||||
.exclamation,
|
.exclamation,
|
||||||
.va_end,
|
.va_end,
|
||||||
|
.bitwise_not,
|
||||||
=>
|
=>
|
||||||
{
|
{
|
||||||
>is_boolean = unary_is_boolean(unary_id);
|
>is_boolean = unary_is_boolean(unary_id);
|
||||||
@ -13763,6 +13807,10 @@ emit_value = fn (module: &Module, value: &Value, type_kind: TypeKind, expect_con
|
|||||||
LLVMSetInstructionCallConv(call, .fast);
|
LLVMSetInstructionCallConv(call, .fast);
|
||||||
llvm_value = call;
|
llvm_value = call;
|
||||||
},
|
},
|
||||||
|
.bitwise_not =>
|
||||||
|
{
|
||||||
|
llvm_value = LLVMBuildNot(module.llvm.builder, llvm_unary_value, "");
|
||||||
|
},
|
||||||
else => { #trap(); },
|
else => { #trap(); },
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
@ -17174,6 +17222,7 @@ names: [_][]u8 =
|
|||||||
"basic_macro",
|
"basic_macro",
|
||||||
"generic_macro",
|
"generic_macro",
|
||||||
"generic_pointer_macro",
|
"generic_pointer_macro",
|
||||||
|
"noreturn_macro",
|
||||||
];
|
];
|
||||||
|
|
||||||
[export] main = fn [cc(c)] (argument_count: u32, argv: &&u8, envp: &&u8) s32
|
[export] main = fn [cc(c)] (argument_count: u32, argv: &&u8, envp: &&u8) s32
|
||||||
|
Loading…
x
Reference in New Issue
Block a user