mirror of
https://github.com/Ed94/Odin.git
synced 2026-08-06 15:48:51 +00:00
new as a user-level procedure
This commit is contained in:
+1
-5
@@ -4,11 +4,7 @@ import (
|
|||||||
|
|
||||||
|
|
||||||
proc main() {
|
proc main() {
|
||||||
proc new_type(T: type) -> ^T {
|
var ptr = new(int);
|
||||||
return ^T(alloc(size_of(T), align_of(T)));
|
|
||||||
}
|
|
||||||
|
|
||||||
var ptr = new_type(int);
|
|
||||||
ptr^ = 123;
|
ptr^ = 123;
|
||||||
|
|
||||||
fmt.println(ptr^);
|
fmt.println(ptr^);
|
||||||
|
|||||||
@@ -264,6 +264,11 @@ proc resize(ptr: rawptr, old_size, new_size: int, alignment: int = DEFAULT_ALIGN
|
|||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
proc new(T: type) -> ^T {
|
||||||
|
return ^T(alloc(size_of(T), align_of(T)));
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
proc default_resize_align(old_memory: rawptr, old_size, new_size, alignment: int) -> rawptr {
|
proc default_resize_align(old_memory: rawptr, old_size, new_size, alignment: int) -> rawptr {
|
||||||
if old_memory == nil {
|
if old_memory == nil {
|
||||||
|
|||||||
+3
-1
@@ -3784,7 +3784,7 @@ bool check_builtin_procedure(Checker *c, Operand *operand, AstNode *call, i32 id
|
|||||||
|
|
||||||
|
|
||||||
switch (id) {
|
switch (id) {
|
||||||
case BuiltinProc_new:
|
// case BuiltinProc_new:
|
||||||
case BuiltinProc_make:
|
case BuiltinProc_make:
|
||||||
case BuiltinProc_size_of:
|
case BuiltinProc_size_of:
|
||||||
case BuiltinProc_align_of:
|
case BuiltinProc_align_of:
|
||||||
@@ -3878,6 +3878,7 @@ bool check_builtin_procedure(Checker *c, Operand *operand, AstNode *call, i32 id
|
|||||||
operand->type = type;
|
operand->type = type;
|
||||||
} break;
|
} break;
|
||||||
|
|
||||||
|
#if 0
|
||||||
case BuiltinProc_new: {
|
case BuiltinProc_new: {
|
||||||
// proc new(Type) -> ^Type
|
// proc new(Type) -> ^Type
|
||||||
Operand op = {};
|
Operand op = {};
|
||||||
@@ -3890,6 +3891,7 @@ bool check_builtin_procedure(Checker *c, Operand *operand, AstNode *call, i32 id
|
|||||||
operand->mode = Addressing_Value;
|
operand->mode = Addressing_Value;
|
||||||
operand->type = make_type_pointer(c->allocator, type);
|
operand->type = make_type_pointer(c->allocator, type);
|
||||||
} break;
|
} break;
|
||||||
|
#endif
|
||||||
#if 0
|
#if 0
|
||||||
case BuiltinProc_new_slice: {
|
case BuiltinProc_new_slice: {
|
||||||
// proc new_slice(Type, len: int) -> []Type
|
// proc new_slice(Type, len: int) -> []Type
|
||||||
|
|||||||
+2
-2
@@ -27,7 +27,7 @@ enum BuiltinProcId {
|
|||||||
BuiltinProc_len,
|
BuiltinProc_len,
|
||||||
BuiltinProc_cap,
|
BuiltinProc_cap,
|
||||||
|
|
||||||
BuiltinProc_new,
|
// BuiltinProc_new,
|
||||||
BuiltinProc_make,
|
BuiltinProc_make,
|
||||||
BuiltinProc_free,
|
BuiltinProc_free,
|
||||||
|
|
||||||
@@ -75,7 +75,7 @@ gb_global BuiltinProc builtin_procs[BuiltinProc_COUNT] = {
|
|||||||
{STR_LIT("len"), 1, false, Expr_Expr},
|
{STR_LIT("len"), 1, false, Expr_Expr},
|
||||||
{STR_LIT("cap"), 1, false, Expr_Expr},
|
{STR_LIT("cap"), 1, false, Expr_Expr},
|
||||||
|
|
||||||
{STR_LIT("new"), 1, false, Expr_Expr},
|
// {STR_LIT("new"), 1, false, Expr_Expr},
|
||||||
{STR_LIT("make"), 1, true, Expr_Expr},
|
{STR_LIT("make"), 1, true, Expr_Expr},
|
||||||
{STR_LIT("free"), 1, false, Expr_Stmt},
|
{STR_LIT("free"), 1, false, Expr_Stmt},
|
||||||
|
|
||||||
|
|||||||
@@ -3772,6 +3772,7 @@ irValue *ir_build_builtin_proc(irProcedure *proc, AstNode *expr, TypeAndValue tv
|
|||||||
|
|
||||||
} break;
|
} break;
|
||||||
|
|
||||||
|
#if 0
|
||||||
case BuiltinProc_new: {
|
case BuiltinProc_new: {
|
||||||
ir_emit_comment(proc, str_lit("new"));
|
ir_emit_comment(proc, str_lit("new"));
|
||||||
// proc new(Type) -> ^Type
|
// proc new(Type) -> ^Type
|
||||||
@@ -3807,6 +3808,7 @@ irValue *ir_build_builtin_proc(irProcedure *proc, AstNode *expr, TypeAndValue tv
|
|||||||
}
|
}
|
||||||
return v;
|
return v;
|
||||||
} break;
|
} break;
|
||||||
|
#endif
|
||||||
|
|
||||||
case BuiltinProc_make: {
|
case BuiltinProc_make: {
|
||||||
ir_emit_comment(proc, str_lit("make"));
|
ir_emit_comment(proc, str_lit("make"));
|
||||||
|
|||||||
Reference in New Issue
Block a user