Github User Fetcher 1.0.0
C Application with Server and GUI
Loading...
Searching...
No Matches
duk_bi_pointer.c File Reference
#include "duk_internal.h"

Go to the source code of this file.

Functions

DUK_INTERNAL duk_ret_t duk_bi_pointer_constructor (duk_context *ctx)
 
DUK_INTERNAL duk_ret_t duk_bi_pointer_prototype_tostring_shared (duk_context *ctx)
 

Function Documentation

◆ duk_bi_pointer_constructor()

DUK_INTERNAL duk_ret_t duk_bi_pointer_constructor ( duk_context * ctx)

Definition at line 11 of file duktape-1.5.2/src-separate/duk_bi_pointer.c.

11 {
12 /* XXX: this behavior is quite useless now; it would be nice to be able
13 * to create pointer values from e.g. numbers or strings. Numbers are
14 * problematic on 64-bit platforms though. Hex encoded strings?
15 */
16 if (duk_get_top(ctx) == 0) {
18 } else {
19 duk_to_pointer(ctx, 0);
20 }
22 duk_set_top(ctx, 1);
23
24 if (duk_is_constructor_call(ctx)) {
29
30 /* Pointer object internal value is immutable */
31 duk_dup(ctx, 0);
33 }
34 /* Note: unbalanced stack on purpose */
35
36 return 1;
37}
DUK_EXTERNAL void * duk_to_pointer(duk_context *ctx, duk_idx_t index)
DUK_EXTERNAL duk_bool_t duk_is_pointer(duk_context *ctx, duk_idx_t index)
#define DUK_HOBJECT_CLASS_POINTER
#define DUK_BIDX_POINTER_PROTOTYPE
#define DUK_PROPDESC_FLAGS_NONE
#define DUK_HOBJECT_CLASS_AS_FLAGS(v)
DUK_EXTERNAL void duk_push_pointer(duk_context *ctx, void *val)
DUK_EXTERNAL void duk_set_top(duk_context *ctx, duk_idx_t index)
DUK_EXTERNAL void duk_dup(duk_context *ctx, duk_idx_t from_index)
DUK_EXTERNAL duk_idx_t duk_get_top(duk_context *ctx)
DUK_EXTERNAL duk_bool_t duk_is_constructor_call(duk_context *ctx)
#define DUK_HOBJECT_FLAG_EXTENSIBLE
DUK_INTERNAL_DECL duk_idx_t duk_push_object_helper(duk_context *ctx, duk_uint_t hobject_flags_and_class, duk_small_int_t prototype_bidx)
DUK_INTERNAL_DECL void duk_xdef_prop_stridx(duk_context *ctx, duk_idx_t obj_index, duk_small_int_t stridx, duk_small_uint_t desc_flags)
#define NULL
Definition gmacros.h:924

References DUK_ASSERT, DUK_BIDX_POINTER_PROTOTYPE, duk_dup(), duk_get_top(), DUK_HOBJECT_CLASS_AS_FLAGS, DUK_HOBJECT_CLASS_POINTER, DUK_HOBJECT_FLAG_EXTENSIBLE, duk_is_constructor_call(), duk_is_pointer(), DUK_PROPDESC_FLAGS_NONE, duk_push_object_helper(), duk_push_pointer(), duk_set_top(), DUK_STRIDX_INT_VALUE, duk_to_pointer(), duk_xdef_prop_stridx(), and NULL.

◆ duk_bi_pointer_prototype_tostring_shared()

DUK_INTERNAL duk_ret_t duk_bi_pointer_prototype_tostring_shared ( duk_context * ctx)

Definition at line 43 of file duktape-1.5.2/src-separate/duk_bi_pointer.c.

43 {
44 duk_tval *tv;
46
47 duk_push_this(ctx);
48 tv = duk_require_tval(ctx, -1);
49 DUK_ASSERT(tv != NULL);
50
51 if (DUK_TVAL_IS_POINTER(tv)) {
52 /* nop */
53 } else if (DUK_TVAL_IS_OBJECT(tv)) {
55 DUK_ASSERT(h != NULL);
56
57 /* Must be a "pointer object", i.e. class "Pointer" */
59 goto type_error;
60 }
61
63 } else {
64 goto type_error;
65 }
66
67 if (to_string) {
68 duk_to_string(ctx, -1);
69 }
70 return 1;
71
72 type_error:
73 return DUK_RET_TYPE_ERROR;
74}
DUK_EXTERNAL void duk_push_this(duk_context *ctx)
DUK_INTERNAL_DECL duk_bool_t duk_get_prop_stridx(duk_context *ctx, duk_idx_t obj_index, duk_small_int_t stridx)
#define DUK_TVAL_GET_OBJECT(tv)
#define DUK_TVAL_IS_OBJECT(tv)
#define DUK_TVAL_IS_POINTER(tv)
DUK_INTERNAL_DECL duk_tval * duk_require_tval(duk_context *ctx, duk_idx_t index)
DUK_EXTERNAL const char * duk_to_string(duk_context *ctx, duk_idx_t index)
#define DUK_HOBJECT_GET_CLASS_NUMBER(h)
DUK_EXTERNAL duk_int_t duk_get_current_magic(duk_context *ctx)

References DUK_ASSERT, duk_get_current_magic(), duk_get_prop_stridx(), DUK_HOBJECT_CLASS_POINTER, DUK_HOBJECT_GET_CLASS_NUMBER, duk_push_this(), duk_require_tval(), DUK_RET_TYPE_ERROR, DUK_STRIDX_INT_VALUE, duk_to_string(), DUK_TVAL_GET_OBJECT, DUK_TVAL_IS_OBJECT, DUK_TVAL_IS_POINTER, and NULL.