Page MenuHomePhorge

unary.h
No OneTemporary

Size
1 KB
Referenced Files
None
Subscribers
None
#ifndef SV_UNARY_H
#define SV_UNARY_H
#include "silver/engine.h"
#include <stdlib.h>
#include <string.h>
static inline void sv_op_not(sv_vm_t *vm, ant_t *js) {
jsval_t a = vm->stack[--vm->sp];
vm->stack[vm->sp++] = mkval(T_BOOL, !js_truthy(js, a));
}
static inline void sv_op_typeof(sv_vm_t *vm, ant_t *js) {
jsval_t a = vm->stack[--vm->sp];
const char *ts = typestr(vtype(a));
vm->stack[vm->sp++] = js_mkstr(js, ts, strlen(ts));
}
static inline void sv_op_void(sv_vm_t *vm) {
vm->sp--;
vm->stack[vm->sp++] = mkval(T_UNDEF, 0);
}
static inline jsval_t sv_op_delete(sv_vm_t *vm, ant_t *js) {
jsval_t key = vm->stack[--vm->sp];
jsval_t obj = vm->stack[--vm->sp];
jsval_t key_str = js_mkundef();
if (vtype(key) == T_SYMBOL) {
jsval_t result = js_delete_sym_prop(js, obj, key);
if (is_err(result)) return result;
vm->stack[vm->sp++] = result;
return js_mkundef();
} else key_str = coerce_to_str(js, key);
if (!is_err(key_str) && vtype(key_str) == T_STR) {
jsoff_t klen = 0;
jsoff_t koff = vstr(js, key_str, &klen);
const char *kptr = (const char *)&js->mem[koff];
jsval_t result = js_delete_prop(js, obj, kptr, klen);
if (is_err(result)) return result;
vm->stack[vm->sp++] = result;
} else vm->stack[vm->sp++] = mkval(T_BOOL, 0);
return js_mkundef();
}
static inline void sv_op_delete_var(
sv_vm_t *vm, ant_t *js,
sv_func_t *func, uint8_t *ip
) {
sv_atom_t *a = &func->atoms[sv_get_u32(ip + 1)];
jsval_t result = js_delete_prop(js, js->global, a->str, a->len);
vm->stack[vm->sp++] = result;
}
#endif

File Metadata

Mime Type
text/x-c
Expires
Thu, Mar 26, 4:43 PM (1 d, 4 h)
Storage Engine
blob
Storage Format
Raw Data
Storage Handle
511926
Default Alt Text
unary.h (1 KB)

Event Timeline