annotate runtime/array.c @ 58:4c22fe798779

Some small optimizations
author Mike Pavone <pavone@retrodev.com>
date Thu, 08 Oct 2009 03:03:48 -0400
parents d61550e2c001
children 3e20ed8959c4
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
rev   line source
7
d61550e2c001 Added current work on new runtime
Mike Pavone <pavone@retrodev.com>
parents:
diff changeset
1 #include "array.h"
d61550e2c001 Added current work on new runtime
Mike Pavone <pavone@retrodev.com>
parents:
diff changeset
2 #include "integer.h"
d61550e2c001 Added current work on new runtime
Mike Pavone <pavone@retrodev.com>
parents:
diff changeset
3
d61550e2c001 Added current work on new runtime
Mike Pavone <pavone@retrodev.com>
parents:
diff changeset
4 Func(Array,0,
d61550e2c001 Added current work on new runtime
Mike Pavone <pavone@retrodev.com>
parents:
diff changeset
5 ;)
d61550e2c001 Added current work on new runtime
Mike Pavone <pavone@retrodev.com>
parents:
diff changeset
6 Ret(0, new_object(TYPE_ARRAY))
d61550e2c001 Added current work on new runtime
Mike Pavone <pavone@retrodev.com>
parents:
diff changeset
7 Return
d61550e2c001 Added current work on new runtime
Mike Pavone <pavone@retrodev.com>
parents:
diff changeset
8 EndFunc
d61550e2c001 Added current work on new runtime
Mike Pavone <pavone@retrodev.com>
parents:
diff changeset
9
d61550e2c001 Added current work on new runtime
Mike Pavone <pavone@retrodev.com>
parents:
diff changeset
10 Method(Index,Array,2,
d61550e2c001 Added current work on new runtime
Mike Pavone <pavone@retrodev.com>
parents:
diff changeset
11 _t_Int32 * idx;)
d61550e2c001 Added current work on new runtime
Mike Pavone <pavone@retrodev.com>
parents:
diff changeset
12 Param(1,idx,Int32)
d61550e2c001 Added current work on new runtime
Mike Pavone <pavone@retrodev.com>
parents:
diff changeset
13 if (idx->num < 0 || idx->num >= me->numels) {
d61550e2c001 Added current work on new runtime
Mike Pavone <pavone@retrodev.com>
parents:
diff changeset
14 Ret(0, NULL)
d61550e2c001 Added current work on new runtime
Mike Pavone <pavone@retrodev.com>
parents:
diff changeset
15 Ret(1, me)
d61550e2c001 Added current work on new runtime
Mike Pavone <pavone@retrodev.com>
parents:
diff changeset
16 } else {
d61550e2c001 Added current work on new runtime
Mike Pavone <pavone@retrodev.com>
parents:
diff changeset
17 Ret(1, NULL)
d61550e2c001 Added current work on new runtime
Mike Pavone <pavone@retrodev.com>
parents:
diff changeset
18 if (me->contents_type) {
d61550e2c001 Added current work on new runtime
Mike Pavone <pavone@retrodev.com>
parents:
diff changeset
19 Ret(0, copy_from_raw(me->conents_type, (char *)me + sizeof(*me) + (idx->num * sizeof(object *))))
d61550e2c001 Added current work on new runtime
Mike Pavone <pavone@retrodev.com>
parents:
diff changeset
20 } else {
d61550e2c001 Added current work on new runtime
Mike Pavone <pavone@retrodev.com>
parents:
diff changeset
21 Ret(0, add_ref((object *)((char *)me + sizeof(*me) + (idx->num * sizeof(object *)))))
d61550e2c001 Added current work on new runtime
Mike Pavone <pavone@retrodev.com>
parents:
diff changeset
22 }
d61550e2c001 Added current work on new runtime
Mike Pavone <pavone@retrodev.com>
parents:
diff changeset
23 release_ref(me);
d61550e2c001 Added current work on new runtime
Mike Pavone <pavone@retrodev.com>
parents:
diff changeset
24 }
d61550e2c001 Added current work on new runtime
Mike Pavone <pavone@retrodev.com>
parents:
diff changeset
25 EndFunc
d61550e2c001 Added current work on new runtime
Mike Pavone <pavone@retrodev.com>
parents:
diff changeset
26