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