summaryrefslogtreecommitdiff
path: root/eval.c
diff options
context:
space:
mode:
Diffstat (limited to 'eval.c')
-rw-r--r--eval.c17
1 files changed, 16 insertions, 1 deletions
diff --git a/eval.c b/eval.c
index 1eb7c1e..4995ea3 100644
--- a/eval.c
+++ b/eval.c
@@ -53,6 +53,7 @@ static size_t compiler_sizeof_builtin(BuiltinType b) {
case BUILTIN_CHAR: return sizeof(char); /* = 1 */
case BUILTIN_BOOL: return sizeof(bool);
case BUILTIN_TYPE: return sizeof(Type *);
+ case BUILTIN_NMS: return sizeof(Namespace *);
}
assert(0);
return 0;
@@ -161,6 +162,7 @@ static bool builtin_truthiness(Value *v, BuiltinType b) {
case BUILTIN_BOOL: return v->boolv;
case BUILTIN_CHAR: return v->charv != 0;
case BUILTIN_TYPE:
+ case BUILTIN_NMS:
break;
}
assert(0); return false;
@@ -301,6 +303,9 @@ static void fprint_val_ptr(FILE *f, void *p, Type *t) {
case BUILTIN_TYPE:
fprint_type(f, *(Type **)p);
break;
+ case BUILTIN_NMS:
+ fprint_nms(f, *(Namespace **)p);
+ break;
}
break;
case TYPE_FN:
@@ -428,6 +433,7 @@ static void val_free(Value *v, Type *t) {
builtin_casts_to_num(low); \
case BUILTIN_CHAR: vout->charv = (char)vin->low; break; \
case BUILTIN_BOOL: vout->boolv = vin->low != 0; break; \
+ case BUILTIN_NMS: \
case BUILTIN_TYPE: assert(0); break; \
} break
@@ -438,6 +444,7 @@ static void val_free(Value *v, Type *t) {
case BUILTIN_BOOL: vout->boolv = vin->low != 0.0f; break; \
case BUILTIN_CHAR: \
case BUILTIN_TYPE: \
+ case BUILTIN_NMS: \
assert(0); break; \
} break
@@ -467,10 +474,12 @@ static void val_builtin_cast(Value *vin, BuiltinType from, Value *vout, BuiltinT
case BUILTIN_F64:
case BUILTIN_BOOL:
case BUILTIN_TYPE:
+ case BUILTIN_NMS:
assert(0); break;
}
break;
case BUILTIN_TYPE:
+ case BUILTIN_NMS:
assert(0);
break;
}
@@ -546,6 +555,7 @@ static void val_cast(Value *vin, Type *from, Value *vout, Type *to) {
case BUILTIN_F32:
case BUILTIN_F64:
case BUILTIN_TYPE:
+ case BUILTIN_NMS:
assert(0); break;
}
break;
@@ -617,6 +627,7 @@ static void eval_deref(Value *v, void *ptr, Type *type) {
case BUILTIN_F64: v->f64 = *(F64 *)ptr; break;
case BUILTIN_CHAR: v->charv = *(char *)ptr; break;
case BUILTIN_BOOL: v->boolv = *(bool *)ptr; break;
+ case BUILTIN_NMS: v->nms = *(Namespace **)ptr; break;
case BUILTIN_TYPE:
v->type = *(Type **)ptr;
break;
@@ -655,6 +666,7 @@ static void eval_deref_set(void *set, Value *to, Type *type) {
case BUILTIN_F64: *(F64 *)set = to->f64; break;
case BUILTIN_CHAR: *(char *)set = to->charv; break;
case BUILTIN_BOOL: *(bool *)set = to->boolv; break;
+ case BUILTIN_NMS: *(Namespace **)set = to->nms; break;
case BUILTIN_TYPE:
*(Type **)set = to->type;
break;
@@ -1587,6 +1599,9 @@ static bool eval_expr(Evaluator *ev, Expression *e, Value *v) {
case EXPR_TYPE:
v->type = &e->typeval;
break;
+ case EXPR_NMS:
+ v->nms = &e->nms;
+ break;
case EXPR_VAL:
*v = e->val;
break;
@@ -1652,7 +1667,7 @@ static bool eval_stmt(Evaluator *ev, Statement *stmt) {
arr_foreach(stmt->inc.stmts, Statement, sub)
if (!eval_stmt(ev, sub))
return false;
- return false;
+ break;
}
return true;
}