mirror of
https://github.com/dschmenk/PLASMA.git
synced 2025-04-09 16:40:38 +00:00
Simply predicate evaluation
This commit is contained in:
parent
2fecde9a7a
commit
a63fed59c9
@ -351,7 +351,11 @@ end
|
||||
//
|
||||
|
||||
def is_int(c); return c >= '0' and c <= '9'; end
|
||||
def is_alphasym(c); c=toupper(c); return c >= '*' and c <= 'Z' and c <> '.'; end
|
||||
|
||||
def is_alphasym(c)
|
||||
c=toupper(c)
|
||||
return c >= '*' and c <= 'Z' and c <> '.'
|
||||
end
|
||||
|
||||
def parse_int(evalptr)#2 // return evalptr, intptr
|
||||
var int[2]
|
||||
@ -536,12 +540,16 @@ end
|
||||
// Base native functions
|
||||
//
|
||||
|
||||
def eval_pred(bool)
|
||||
return bool ?? @pred_true :: @pred_false
|
||||
end
|
||||
|
||||
def natv_atom(atom)
|
||||
return !atom or atom->type <> CONS_TYPE ?? @pred_true :: @pred_false
|
||||
return eval_pred(!atom or atom->type <> CONS_TYPE)
|
||||
end
|
||||
|
||||
def natv_eq(expr)
|
||||
return eval_expr(expr=>car) == eval_expr(expr=>cdr=>car) ?? @pred_true :: @pred_false
|
||||
return eval_pred(eval_expr(expr=>car) == eval_expr(expr=>cdr=>car))
|
||||
end
|
||||
|
||||
def natv_cons(expr)
|
||||
@ -579,7 +587,7 @@ def natv_null(expr)
|
||||
var result
|
||||
|
||||
result = eval_expr(expr=>car)
|
||||
return !result or !result->type ?? @pred_true :: @pred_false
|
||||
return eval_pred(!result or !result->type)
|
||||
end
|
||||
|
||||
def natv_label(expr)
|
||||
@ -701,7 +709,7 @@ def natv_gt(expr)
|
||||
num[0], num[1] = eval_num(expr)
|
||||
load32(@num)
|
||||
num[0], num[1] = eval_num(expr=>cdr)
|
||||
return isgt32(@num) ?? @pred_true :: @pred_false
|
||||
return eval_pred(isgt32(@num))
|
||||
end
|
||||
|
||||
def natv_lt(expr)
|
||||
@ -710,7 +718,7 @@ def natv_lt(expr)
|
||||
num[0], num[1] = eval_num(expr)
|
||||
load32(@num)
|
||||
num[0], num[1] = eval_num(expr=>cdr)
|
||||
return islt32(@num) ?? @pred_true :: @pred_false
|
||||
return eval_pred(islt32(@num))
|
||||
end
|
||||
|
||||
def natv_print(expr)
|
||||
|
Loading…
x
Reference in New Issue
Block a user