Wild Life  2.30
 All Data Structures Files Functions Variables Typedefs Macros
Functions
bi_type.c File Reference

Builtins for doing type heierachy stuff. More...

Go to the source code of this file.

Functions

static long c_children ()
 c_children More...
 
static long c_parents ()
 c_parents More...
 
static long c_smallest ()
 c_smallest More...
 
int isSubTypeValue (ptr_psi_term arg1, ptr_psi_term arg2)
 isSubTypeValue More...
 
static long isa (ptr_psi_term arg1, ptr_psi_term arg2)
 isa More...
 
static long isa_select (ptr_psi_term arg1, ptr_psi_term arg2, long sel)
 isa_select More...
 
static long c_isa_main (long sel)
 c_isa_main More...
 
static long c_isa_le ()
 c_isa_le More...
 
static long c_isa_lt ()
 c_isa_lt More...
 
static long c_isa_ge ()
 c_isa_ge More...
 
static long c_isa_gt ()
 c_isa_gt More...
 
static long c_isa_eq ()
 c_isa_eq More...
 
static long c_isa_nle ()
 c_isa_nle More...
 
static long c_isa_nlt ()
 c_isa_nlt More...
 
static long c_isa_nge ()
 c_isa_nge More...
 
static long c_isa_ngt ()
 c_isa_ngt More...
 
static long c_isa_neq ()
 c_isa_neq More...
 
static long c_isa_cmp ()
 c_isa_cmp More...
 
static long c_isa_ncmp ()
 c_isa_ncmp More...
 
static long c_is_function ()
 c_is_function More...
 
static long c_is_persistent ()
 c_is_persistent More...
 
static long c_is_predicate ()
 c_is_predicate More...
 
static long c_is_sort ()
 c_is_sort More...
 
static long c_is_value ()
 c_is_value More...
 
static long c_is_number ()
 static long c_is_number More...
 
long c_isa_subsort ()
 long c_isa_subsort More...
 
long isValue (ptr_psi_term p)
 isValue(p) More...
 
long c_glb ()
 long c_glb More...
 
long c_lub ()
 long c_lub More...
 
void insert_type_builtins ()
 void insert_type_builtins More...
 

Detailed Description

Builtins for doing type heierachy stuff.

Definition in file bi_type.c.

Function Documentation

static long c_children ( )
static

c_children

Return a list of roots of the children types of T (except bottom).

Definition at line 30 of file bi_type.c.

References wl_goal::aaaa_1, aim, wl_psi_term::attr_list, wl_goal::bbbb_1, wl_definition::children, collect_symbols(), curry(), deref, deref_args, deref_ptr, get_two_args(), greatest_sel, hidden_type(), wl_int_list::next, NULL, push_goal(), real, resid_aim, set_1, stack_cons(), stack_nil(), stack_psi_term(), top, TRUE, wl_psi_term::type, unify, wl_int_list::value_1, and wl_psi_term::value_3.

31 {
32  long success=TRUE;
33  ptr_psi_term funct,result,arg1,arg2,t,p1;
34  ptr_int_list p;
35 
36  funct=aim->aaaa_1;
37  deref_ptr(funct);
38  result=aim->bbbb_1;
39  get_two_args(funct->attr_list,&arg1,&arg2);
40 
41  if (!arg1) {
42  curry();
43  return success;
44  }
45 
46  deref(arg1);
47  deref_args(funct,set_1);
49 
50  if (arg1->type==top)
51  t=collect_symbols(greatest_sel); /* RM: Feb 3 1993 */
52  else {
53  p=arg1->type->children;
54 
55  /* Hack: check there's enough memory to build the list */
56  /* RM: Jul 22 1993 */
57  /*
58  { int count=0;
59  while(p) {
60  count++;
61  p=p->next;
62  }
63  if (heap_pointer-stack_pointer < 3*count*sizeof(psi_term)) {
64  goal_stack=aim;
65  garbage();
66  return success;
67  }
68  */
69 
70  t=stack_nil();
71  if (!(arg1->type==real && arg1->value_3)) /* PVR 15.2.94 */
72  while (p) {
73  ptr_definition ptype;
74 
75  ptype = (ptr_definition) p->value_1;
76  if (hidden_type(ptype)) { p=p->next; continue; }
77  p1 = stack_psi_term(0);
78  p1->type = ptype;
79  t=stack_cons(p1,t);
80  p = p->next;
81  }
82  }
83  push_goal(unify,result,t,NULL);
84 
85  return success;
86 }
ptr_psi_term aaaa_1
Definition: def_struct.h:231
void get_two_args(ptr_node t, ptr_psi_term *a, ptr_psi_term *b)
get_two_args
Definition: login.c:47
ptr_psi_term stack_cons(ptr_psi_term head, ptr_psi_term tail)
stack_cons
Definition: built_ins.c:46
void push_goal(goals t, ptr_psi_term a, ptr_psi_term b, GENERIC c)
push_goal
Definition: login.c:600
#define set_1
Definition: def_const.h:418
ptr_definition top
Definition: def_glob.h:111
void curry()
curry
Definition: lefun.c:174
#define NULL
Definition: def_const.h:427
ptr_goal resid_aim
Definition: def_glob.h:225
ptr_definition real
Definition: def_glob.h:107
#define greatest_sel
Definition: def_const.h:9
#define deref_ptr(P)
Definition: def_macro.h:100
#define TRUE
Standard boolean.
Definition: def_const.h:242
#define deref(P)
Definition: def_macro.h:147
struct wl_definition * ptr_definition
Definition: def_struct.h:51
ptr_psi_term stack_psi_term(long stat)
stack_psi_term
Definition: lefun.c:21
GENERIC value_3
Definition: def_struct.h:178
ptr_psi_term stack_nil()
stack_nil
Definition: built_ins.c:26
ptr_goal aim
Definition: def_glob.h:54
#define unify
Definition: def_const.h:490
#define deref_args(P, S)
Definition: def_macro.h:150
ptr_psi_term collect_symbols(long sel)
collect_symbols
Definition: built_ins.c:3699
ptr_definition type
Definition: def_struct.h:173
GENERIC value_1
Definition: def_struct.h:77
ptr_psi_term bbbb_1
Definition: def_struct.h:232
long hidden_type(ptr_definition t)
hidden_type
Definition: built_ins.c:3672
ptr_int_list children
Definition: def_struct.h:144
ptr_node attr_list
Definition: def_struct.h:179
ptr_int_list next
Definition: def_struct.h:78
long c_glb ( )

long c_glb

greatest lower bound (djd)

C_GLB(A,B) Return glb(A,B). Continued calls will return each following type in the disjunction of the glb of A,B.

Definition at line 712 of file bi_type.c.

References wl_goal::aaaa_1, aim, wl_psi_term::attr_list, wl_goal::bbbb_1, curry(), decode(), deref, deref_args, deref_ptr, Errorline(), FALSE, get_two_args(), glb(), isSubTypeValue(), isValue(), makePsiTerm(), wl_int_list::next, NULL, push_choice_point(), push_goal(), resid_aim, set_1_2, TRUE, wl_psi_term::type, type_disj, unify, wl_int_list::value_1, and wl_psi_term::value_3.

713 {
714  ptr_psi_term func,arg1,arg2, result, other;
715  ptr_definition ans;
716  ptr_int_list complexType;
717  ptr_int_list decodedType = NULL;
718  long ret;
719 
720  func=aim->aaaa_1;
721  deref_ptr(func);
722  get_two_args(func->attr_list,&arg1,&arg2);
723 
724  if ((!arg1) || (!arg2)) {
725  curry();
726  return TRUE;
727  }
728  result = aim->bbbb_1;
729  deref(result);
730  deref(arg1);
731  deref(arg2);
732  deref_args(func, set_1_2);
733 
734  if ((ret=glb(arg1->type, arg2->type, &ans, &complexType)) == 0)
735  return FALSE;
736 
737  if ((ret != 4)&&(isValue(arg1)||isValue(arg2))) {
738  /* glb is one of arg1->type or arg2->type AND at least one is a value */
739  if (!isSubTypeValue(arg1, arg2) && !isSubTypeValue(arg2, arg1))
740  return FALSE;
741  }
742  if (!ans) {
743  decodedType = decode(complexType);
744  ans = (ptr_definition)decodedType->value_1;
745  decodedType = decodedType->next;
746  }
747  other=makePsiTerm(ans);
748 
749  if (isValue(arg1)) other->value_3=arg1->value_3;
750  if (isValue(arg2)) other->value_3=arg2->value_3;
751 
752  if (isValue(arg1) || isValue(arg2)) {
753  if (decodedType) {
754  Errorline("glb of multiple-inheritance value sorts not yet implemented.\n");
755  return FALSE;
756  }
757  }
758 
759  if (decodedType)
760  push_choice_point(type_disj, result,(ptr_psi_term) decodedType,(GENERIC) NULL);
761 
762  resid_aim = NULL;
763  push_goal(unify,result,other,NULL);
764  return TRUE;
765 }
ptr_psi_term makePsiTerm(ptr_definition x)
ptr_psi_term makePsiTerm
Definition: bi_sys.c:573
ptr_psi_term aaaa_1
Definition: def_struct.h:231
void get_two_args(ptr_node t, ptr_psi_term *a, ptr_psi_term *b)
get_two_args
Definition: login.c:47
int isSubTypeValue(ptr_psi_term arg1, ptr_psi_term arg2)
isSubTypeValue
Definition: bi_type.c:180
long glb(ptr_definition t1, ptr_definition t2, ptr_definition *t3, ptr_int_list *c3)
glb
Definition: types.c:1481
void push_choice_point(goals t, ptr_psi_term a, ptr_psi_term b, GENERIC c)
push_choice_point
Definition: login.c:638
void push_goal(goals t, ptr_psi_term a, ptr_psi_term b, GENERIC c)
push_goal
Definition: login.c:600
ptr_int_list decode(ptr_int_list c)
decode
Definition: types.c:1784
void curry()
curry
Definition: lefun.c:174
#define NULL
Definition: def_const.h:427
ptr_goal resid_aim
Definition: def_glob.h:225
void Errorline(char *format,...)
Errorline.
Definition: error.c:465
unsigned long * GENERIC
unsigned long *GENERIC
Definition: def_struct.h:27
#define set_1_2
Definition: def_const.h:420
#define deref_ptr(P)
Definition: def_macro.h:100
#define TRUE
Standard boolean.
Definition: def_const.h:242
#define FALSE
Standard boolean.
Definition: def_const.h:249
#define deref(P)
Definition: def_macro.h:147
struct wl_definition * ptr_definition
Definition: def_struct.h:51
GENERIC value_3
Definition: def_struct.h:178
ptr_goal aim
Definition: def_glob.h:54
#define unify
Definition: def_const.h:490
#define deref_args(P, S)
Definition: def_macro.h:150
#define type_disj
Definition: def_const.h:500
long isValue(ptr_psi_term p)
isValue(p)
Definition: bi_type.c:695
ptr_definition type
Definition: def_struct.h:173
GENERIC value_1
Definition: def_struct.h:77
ptr_psi_term bbbb_1
Definition: def_struct.h:232
ptr_node attr_list
Definition: def_struct.h:179
ptr_int_list next
Definition: def_struct.h:78
static long c_is_function ( )
static

c_is_function

Succeed iff argument is a function (built-in or user-defined).

Definition at line 492 of file bi_type.c.

References wl_goal::aaaa_1, aim, wl_psi_term::attr_list, wl_goal::bbbb_1, curry(), deref, deref_args, deref_ptr, function_it, get_one_arg(), set_1, TRUE, wl_psi_term::type, wl_definition::type_def, and unify_bool_result().

493 {
494  int success=TRUE,ans;
495  ptr_psi_term arg1,funct,result;
496 
497  funct=aim->aaaa_1;
498  deref_ptr(funct);
499  result=aim->bbbb_1;
500  get_one_arg(funct->attr_list,&arg1);
501  if (arg1) {
502  deref(arg1);
503  deref_args(funct,set_1);
504  ans=(arg1->type->type_def==(def_type)function_it);
505  unify_bool_result(result,ans);
506  }
507  else curry();
508 
509  return success;
510 }
ptr_psi_term aaaa_1
Definition: def_struct.h:231
#define function_it
Definition: def_const.h:573
struct wl_definition * def_type
Definition: def_struct.h:52
void unify_bool_result(ptr_psi_term t, long v)
unify_bool_result
Definition: built_ins.c:344
def_type type_def
Definition: def_struct.h:145
void get_one_arg(ptr_node t, ptr_psi_term *a)
get_one_arg
Definition: login.c:99
#define set_1
Definition: def_const.h:418
void curry()
curry
Definition: lefun.c:174
#define deref_ptr(P)
Definition: def_macro.h:100
#define TRUE
Standard boolean.
Definition: def_const.h:242
#define deref(P)
Definition: def_macro.h:147
ptr_goal aim
Definition: def_glob.h:54
#define deref_args(P, S)
Definition: def_macro.h:150
ptr_definition type
Definition: def_struct.h:173
ptr_psi_term bbbb_1
Definition: def_struct.h:232
ptr_node attr_list
Definition: def_struct.h:179
static long c_is_number ( )
static

static long c_is_number

Return true iff argument is an actual number.

Definition at line 636 of file bi_type.c.

References wl_goal::aaaa_1, aim, wl_psi_term::attr_list, wl_goal::bbbb_1, curry(), deref, deref_args, deref_ptr, get_two_args(), NULL, real, set_1, sub_type(), TRUE, wl_psi_term::type, unify_bool_result(), and wl_psi_term::value_3.

637 {
638  long success=TRUE,ans;
639  ptr_psi_term arg1,arg2,funct,result;
640 
641  funct=aim->aaaa_1;
642  deref_ptr(funct);
643  result=aim->bbbb_1;
644  get_two_args(funct->attr_list,&arg1,&arg2);
645  if (arg1) {
646  deref(arg1);
647  deref_args(funct,set_1);
648  ans=sub_type(arg1->type,real) && (arg1->value_3!=NULL);
649  unify_bool_result(result,ans);
650  }
651  else curry();
652 
653  return success;
654 }
ptr_psi_term aaaa_1
Definition: def_struct.h:231
void get_two_args(ptr_node t, ptr_psi_term *a, ptr_psi_term *b)
get_two_args
Definition: login.c:47
void unify_bool_result(ptr_psi_term t, long v)
unify_bool_result
Definition: built_ins.c:344
#define set_1
Definition: def_const.h:418
void curry()
curry
Definition: lefun.c:174
#define NULL
Definition: def_const.h:427
long sub_type(ptr_definition t1, ptr_definition t2)
sub_type
Definition: types.c:1642
ptr_definition real
Definition: def_glob.h:107
#define deref_ptr(P)
Definition: def_macro.h:100
#define TRUE
Standard boolean.
Definition: def_const.h:242
#define deref(P)
Definition: def_macro.h:147
GENERIC value_3
Definition: def_struct.h:178
ptr_goal aim
Definition: def_glob.h:54
#define deref_args(P, S)
Definition: def_macro.h:150
ptr_definition type
Definition: def_struct.h:173
ptr_psi_term bbbb_1
Definition: def_struct.h:232
ptr_node attr_list
Definition: def_struct.h:179
static long c_is_persistent ( )
static

c_is_persistent

Succeed iff argument is a quoted persistent or on the heap.

Definition at line 520 of file bi_type.c.

References wl_goal::aaaa_1, aim, wl_psi_term::attr_list, wl_goal::bbbb_1, curry(), deref, deref_args, deref_ptr, get_one_arg(), global_it, wl_definition::global_value, heap_pointer, set_1, TRUE, wl_psi_term::type, wl_definition::type_def, and unify_bool_result().

521 {
522  int success=TRUE,ans;
523  ptr_psi_term arg1,glob,result;
524 
525  glob=aim->aaaa_1;
526  deref_ptr(glob);
527  result=aim->bbbb_1;
528  get_one_arg(glob->attr_list,&arg1);
529  if (arg1) {
530  deref(arg1);
531  deref_args(glob,set_1);
532  ans=(
533  arg1->type->type_def==(def_type)global_it &&
535  ) ||
536  (GENERIC)arg1>=heap_pointer;
537  unify_bool_result(result,ans);
538  }
539  else curry();
540 
541  return success;
542 }
ptr_psi_term aaaa_1
Definition: def_struct.h:231
struct wl_definition * def_type
Definition: def_struct.h:52
void unify_bool_result(ptr_psi_term t, long v)
unify_bool_result
Definition: built_ins.c:344
def_type type_def
Definition: def_struct.h:145
void get_one_arg(ptr_node t, ptr_psi_term *a)
get_one_arg
Definition: login.c:99
#define set_1
Definition: def_const.h:418
#define global_it
Definition: def_const.h:575
void curry()
curry
Definition: lefun.c:174
unsigned long * GENERIC
unsigned long *GENERIC
Definition: def_struct.h:27
#define deref_ptr(P)
Definition: def_macro.h:100
#define TRUE
Standard boolean.
Definition: def_const.h:242
ptr_psi_term global_value
Definition: def_struct.h:151
#define deref(P)
Definition: def_macro.h:147
ptr_goal aim
Definition: def_glob.h:54
GENERIC heap_pointer
Definition: def_glob.h:17
#define deref_args(P, S)
Definition: def_macro.h:150
ptr_definition type
Definition: def_struct.h:173
ptr_psi_term bbbb_1
Definition: def_struct.h:232
ptr_node attr_list
Definition: def_struct.h:179
static long c_is_predicate ( )
static

c_is_predicate

Succeed iff argument is a predicate (built-in or user-defined).

Definition at line 552 of file bi_type.c.

References wl_goal::aaaa_1, aim, wl_psi_term::attr_list, wl_goal::bbbb_1, curry(), deref, deref_args, deref_ptr, get_one_arg(), predicate_it, set_1, TRUE, wl_psi_term::type, wl_definition::type_def, and unify_bool_result().

553 {
554  int success=TRUE,ans;
555  ptr_psi_term arg1,funct,result;
556 
557  funct=aim->aaaa_1;
558  deref_ptr(funct);
559  result=aim->bbbb_1;
560  get_one_arg(funct->attr_list,&arg1);
561  if (arg1) {
562  deref(arg1);
563  deref_args(funct,set_1);
564  ans=(arg1->type->type_def==(def_type)predicate_it);
565  unify_bool_result(result,ans);
566  }
567  else curry();
568 
569  return success;
570 }
ptr_psi_term aaaa_1
Definition: def_struct.h:231
struct wl_definition * def_type
Definition: def_struct.h:52
void unify_bool_result(ptr_psi_term t, long v)
unify_bool_result
Definition: built_ins.c:344
def_type type_def
Definition: def_struct.h:145
#define predicate_it
Definition: def_const.h:572
void get_one_arg(ptr_node t, ptr_psi_term *a)
get_one_arg
Definition: login.c:99
#define set_1
Definition: def_const.h:418
void curry()
curry
Definition: lefun.c:174
#define deref_ptr(P)
Definition: def_macro.h:100
#define TRUE
Standard boolean.
Definition: def_const.h:242
#define deref(P)
Definition: def_macro.h:147
ptr_goal aim
Definition: def_glob.h:54
#define deref_args(P, S)
Definition: def_macro.h:150
ptr_definition type
Definition: def_struct.h:173
ptr_psi_term bbbb_1
Definition: def_struct.h:232
ptr_node attr_list
Definition: def_struct.h:179
static long c_is_sort ( )
static

c_is_sort

Succeed iff argument is a sort (built-in or user-defined).

Definition at line 580 of file bi_type.c.

References wl_goal::aaaa_1, aim, wl_psi_term::attr_list, wl_goal::bbbb_1, curry(), deref, deref_args, deref_ptr, get_one_arg(), set_1, TRUE, wl_psi_term::type, wl_definition::type_def, type_it, and unify_bool_result().

581 {
582  int success=TRUE,ans;
583  ptr_psi_term arg1,funct,result;
584 
585  funct=aim->aaaa_1;
586  deref_ptr(funct);
587  result=aim->bbbb_1;
588  get_one_arg(funct->attr_list,&arg1);
589  if (arg1) {
590  deref(arg1);
591  deref_args(funct,set_1);
592  ans=(arg1->type->type_def==(def_type)type_it);
593  unify_bool_result(result,ans);
594  }
595  else curry();
596 
597  return success;
598 }
ptr_psi_term aaaa_1
Definition: def_struct.h:231
struct wl_definition * def_type
Definition: def_struct.h:52
void unify_bool_result(ptr_psi_term t, long v)
unify_bool_result
Definition: built_ins.c:344
def_type type_def
Definition: def_struct.h:145
void get_one_arg(ptr_node t, ptr_psi_term *a)
get_one_arg
Definition: login.c:99
#define set_1
Definition: def_const.h:418
void curry()
curry
Definition: lefun.c:174
#define type_it
Definition: def_const.h:574
#define deref_ptr(P)
Definition: def_macro.h:100
#define TRUE
Standard boolean.
Definition: def_const.h:242
#define deref(P)
Definition: def_macro.h:147
ptr_goal aim
Definition: def_glob.h:54
#define deref_args(P, S)
Definition: def_macro.h:150
ptr_definition type
Definition: def_struct.h:173
ptr_psi_term bbbb_1
Definition: def_struct.h:232
ptr_node attr_list
Definition: def_struct.h:179
static long c_is_value ( )
static

c_is_value

Return true iff argument has a value, i.e. if it is implemented in a quirky way in Wild_Life. This is true for integers, reals, strings (which are potentially infinite sets of objects), and list objects.

Definition at line 610 of file bi_type.c.

References wl_goal::aaaa_1, aim, wl_psi_term::attr_list, wl_goal::bbbb_1, curry(), deref, deref_args, deref_ptr, get_two_args(), NULL, set_1, TRUE, unify_bool_result(), and wl_psi_term::value_3.

611 {
612  long success=TRUE,ans;
613  ptr_psi_term arg1,arg2,funct,result;
614 
615  funct=aim->aaaa_1;
616  deref_ptr(funct);
617  result=aim->bbbb_1;
618  get_two_args(funct->attr_list,&arg1,&arg2);
619  if (arg1) {
620  deref(arg1);
621  deref_args(funct,set_1);
622  ans=(arg1->value_3!=NULL);
623  unify_bool_result(result,ans);
624  }
625  else curry();
626 
627  return success;
628 }
ptr_psi_term aaaa_1
Definition: def_struct.h:231
void get_two_args(ptr_node t, ptr_psi_term *a, ptr_psi_term *b)
get_two_args
Definition: login.c:47
void unify_bool_result(ptr_psi_term t, long v)
unify_bool_result
Definition: built_ins.c:344
#define set_1
Definition: def_const.h:418
void curry()
curry
Definition: lefun.c:174
#define NULL
Definition: def_const.h:427
#define deref_ptr(P)
Definition: def_macro.h:100
#define TRUE
Standard boolean.
Definition: def_const.h:242
#define deref(P)
Definition: def_macro.h:147
GENERIC value_3
Definition: def_struct.h:178
ptr_goal aim
Definition: def_glob.h:54
#define deref_args(P, S)
Definition: def_macro.h:150
ptr_psi_term bbbb_1
Definition: def_struct.h:232
ptr_node attr_list
Definition: def_struct.h:179
static long c_isa_cmp ( )
static

c_isa_cmp

Definition at line 470 of file bi_type.c.

References c_isa_main(), and isa_cmp_sel.

471 {
472  return c_isa_main(isa_cmp_sel);
473 }
#define isa_cmp_sel
Definition: def_const.h:525
static long c_isa_main(long sel)
c_isa_main
Definition: bi_type.c:294
static long c_isa_eq ( )
static

c_isa_eq

Type t1 equals t2 in the hierarchy, i.e. t1 is equal to t2. This boolean function requires two arguments and never residuates. It will curry if insufficient arguments are given. It works correctly on the 'value' types, i.e. on integers, reals, strings, and lists. For lists, it looks only at the top level, i.e. whether the object is nil or a cons cell.

Definition at line 386 of file bi_type.c.

References c_isa_main(), and isa_eq_sel.

387 {
388  return c_isa_main(isa_eq_sel);
389 }
#define isa_eq_sel
Definition: def_const.h:519
static long c_isa_main(long sel)
c_isa_main
Definition: bi_type.c:294
static long c_isa_ge ( )
static

c_isa_ge

Type t2 isa t1 in the hierarchy, i.e. t2 is less than or equal to t1. This boolean function requires two arguments and never residuates. It will curry if insufficient arguments are given. It works correctly on the 'value' types, i.e. on integers, reals, strings, and lists. For lists, it looks only at the top level, i.e. whether the object is nil or a cons cell.

Definition at line 356 of file bi_type.c.

References c_isa_main(), and isa_ge_sel.

357 {
358  return c_isa_main(isa_ge_sel);
359 }
#define isa_ge_sel
Definition: def_const.h:517
static long c_isa_main(long sel)
c_isa_main
Definition: bi_type.c:294
static long c_isa_gt ( )
static

c_isa_gt

Type t2 is lt t1 in the hierarchy, i.e. t2 is less than to t1. This boolean function requires two arguments and never residuates. It will curry if insufficient arguments are given. It works correctly on the 'value' types, i.e. on integers, reals, strings, and lists. For lists, it looks only at the top level, i.e. whether the object is nil or a cons cell.

Definition at line 371 of file bi_type.c.

References c_isa_main(), and isa_gt_sel.

372 {
373  return c_isa_main(isa_gt_sel);
374 }
static long c_isa_main(long sel)
c_isa_main
Definition: bi_type.c:294
#define isa_gt_sel
Definition: def_const.h:518
static long c_isa_le ( )
static

c_isa_le

Type t1 isa t2 in the hierarchy, i.e. t1 is less than or equal to t2. This boolean function requires two arguments and never residuates. It will curry if insufficient arguments are given. It works correctly on the 'value' types, i.e. on integers, reals, strings, and lists. For lists, it looks only at the top level, i.e. whether the object is nil or a cons cell.

Definition at line 326 of file bi_type.c.

References c_isa_main(), and isa_le_sel.

327 {
328  return c_isa_main(isa_le_sel);
329 }
#define isa_le_sel
Definition: def_const.h:515
static long c_isa_main(long sel)
c_isa_main
Definition: bi_type.c:294
static long c_isa_lt ( )
static

c_isa_lt

Type t1 is lt t2 in the hierarchy, i.e. t1 is less than t2. This boolean function requires two arguments and never residuates. It will curry if insufficient arguments are given. It works correctly on the 'value' types, i.e. on integers, reals, strings, and lists. For lists, it looks only at the top level, i.e. whether the object is nil or a cons cell.

Definition at line 341 of file bi_type.c.

References c_isa_main(), and isa_lt_sel.

342 {
343  return c_isa_main(isa_lt_sel);
344 }
static long c_isa_main(long sel)
c_isa_main
Definition: bi_type.c:294
#define isa_lt_sel
Definition: def_const.h:516
static long c_isa_main ( long  sel)
static

c_isa_main

Parameters
sel- long sel

Main routine to handle all the isa built-in functions.

Definition at line 294 of file bi_type.c.

References wl_goal::aaaa_1, aim, wl_psi_term::attr_list, wl_goal::bbbb_1, curry(), deref, deref_args, deref_ptr, get_two_args(), isa_select(), set_1_2, TRUE, and unify_bool_result().

295 {
296  long success=TRUE,ans;
297  ptr_psi_term arg1,arg2,funct,result;
298 
299  funct=aim->aaaa_1;
300  deref_ptr(funct);
301  result=aim->bbbb_1;
302  get_two_args(funct->attr_list,&arg1,&arg2);
303  if (arg1 && arg2) {
304  deref(arg1);
305  deref(arg2);
306  deref_args(funct,set_1_2);
307  ans=isa_select(arg1,arg2,sel);
308  unify_bool_result(result,ans);
309  }
310  else curry();
311 
312  return success;
313 }
ptr_psi_term aaaa_1
Definition: def_struct.h:231
void get_two_args(ptr_node t, ptr_psi_term *a, ptr_psi_term *b)
get_two_args
Definition: login.c:47
void unify_bool_result(ptr_psi_term t, long v)
unify_bool_result
Definition: built_ins.c:344
void curry()
curry
Definition: lefun.c:174
#define set_1_2
Definition: def_const.h:420
#define deref_ptr(P)
Definition: def_macro.h:100
#define TRUE
Standard boolean.
Definition: def_const.h:242
#define deref(P)
Definition: def_macro.h:147
ptr_goal aim
Definition: def_glob.h:54
#define deref_args(P, S)
Definition: def_macro.h:150
static long isa_select(ptr_psi_term arg1, ptr_psi_term arg2, long sel)
isa_select
Definition: bi_type.c:253
ptr_psi_term bbbb_1
Definition: def_struct.h:232
ptr_node attr_list
Definition: def_struct.h:179
static long c_isa_ncmp ( )
static

c_isa_ncmp

Definition at line 479 of file bi_type.c.

References c_isa_main(), and isa_ncmp_sel.

480 {
481  return c_isa_main(isa_ncmp_sel);
482 }
static long c_isa_main(long sel)
c_isa_main
Definition: bi_type.c:294
#define isa_ncmp_sel
Definition: def_const.h:526
static long c_isa_neq ( )
static

c_isa_neq

Type t1 is not eq t2 in the hierarchy, i.e. t1 is not equal to t2. This boolean function requires two arguments and never residuates. It will curry if insufficient arguments are given. It works correctly on the 'value' types, i.e. on integers, reals, strings, and lists. For lists, it looks only at the top level, i.e. whether the object is nil or a cons cell.

Definition at line 461 of file bi_type.c.

References c_isa_main(), and isa_neq_sel.

462 {
463  return c_isa_main(isa_neq_sel);
464 }
#define isa_neq_sel
Definition: def_const.h:524
static long c_isa_main(long sel)
c_isa_main
Definition: bi_type.c:294
static long c_isa_nge ( )
static

c_isa_nge

Type t2 is not lt t1 in the hierarchy, i.e. t2 is not less than or equal to t1. This boolean function requires two arguments and never residuates. It will curry if insufficient arguments are given. It works correctly on the 'value' types, i.e. on integers, reals, strings, and lists. For lists, it looks only at the top level, i.e. whether the object is nil or a cons cell.

Definition at line 431 of file bi_type.c.

References c_isa_main(), and isa_nge_sel.

432 {
433  return c_isa_main(isa_nge_sel);
434 }
#define isa_nge_sel
Definition: def_const.h:522
static long c_isa_main(long sel)
c_isa_main
Definition: bi_type.c:294
static long c_isa_ngt ( )
static

c_isa_ngt

Type t2 is not t1 in the hierarchy, i.e. t2 is not less than t1. This boolean function requires two arguments and never residuates. It will curry if insufficient arguments are given. It works correctly on the 'value' types, i.e. on integers, reals, strings, and lists. For lists, it looks only at the top level, i.e. whether the object is nil or a cons cell.

Definition at line 446 of file bi_type.c.

References c_isa_main(), and isa_ngt_sel.

447 {
448  return c_isa_main(isa_ngt_sel);
449 }
#define isa_ngt_sel
Definition: def_const.h:523
static long c_isa_main(long sel)
c_isa_main
Definition: bi_type.c:294
static long c_isa_nle ( )
static

c_isa_nle

Type t1 is not a t2 in the hierarchy, i.e. t1 is not less than or equal to t2. This boolean function requires two arguments and never residuates. It will curry if insufficient arguments are given. It works correctly on the 'value' types, i.e. on integers, reals, strings, and lists. For lists, it looks only at the top level, i.e. whether the object is nil or a cons cell.

Definition at line 401 of file bi_type.c.

References c_isa_main(), and isa_nle_sel.

402 {
403  return c_isa_main(isa_nle_sel);
404 }
#define isa_nle_sel
Definition: def_const.h:520
static long c_isa_main(long sel)
c_isa_main
Definition: bi_type.c:294
static long c_isa_nlt ( )
static

c_isa_nlt

Type t1 is not lt t2 in the hierarchy, i.e. t1 is not less than to t2. This boolean function requires two arguments and never residuates. It will curry if insufficient arguments are given. It works correctly on the 'value' types, i.e. on integers, reals, strings, and lists. For lists, it looks only at the top level, i.e. whether the object is nil or a cons cell.

Definition at line 416 of file bi_type.c.

References c_isa_main(), and isa_nlt_sel.

417 {
418  return c_isa_main(isa_nlt_sel);
419 }
#define isa_nlt_sel
Definition: def_const.h:521
static long c_isa_main(long sel)
c_isa_main
Definition: bi_type.c:294
long c_isa_subsort ( )

long c_isa_subsort

C_ISA_SUBSORT(A,B) if A is a subsort of B => succeed and residuate on B else => fail

Definition at line 665 of file bi_type.c.

References wl_goal::aaaa_1, aim, wl_psi_term::attr_list, deref, deref_args, deref_ptr, FALSE, get_two_args(), isa(), reportAndAbort(), residuate(), set_1_2, and TRUE.

666 {
667  ptr_psi_term pred,arg1,arg2;
668 
669  pred=aim->aaaa_1;
670  deref_ptr(pred);
671  get_two_args(pred->attr_list,&arg1,&arg2);
672 
673  if (!arg1) (void)reportAndAbort(pred,"no first argument");
674  deref(arg1);
675 
676  if (!arg2) (void)reportAndAbort(pred,"no second argument");
677  deref(arg2);
678 
679  deref_args(pred, set_1_2);
680 
681  if (isa(arg1, arg2))
682  {
683  residuate(arg2);
684  return TRUE;
685  }
686  return FALSE;
687 }
ptr_psi_term aaaa_1
Definition: def_struct.h:231
void get_two_args(ptr_node t, ptr_psi_term *a, ptr_psi_term *b)
get_two_args
Definition: login.c:47
void residuate(ptr_psi_term t)
residuate
Definition: lefun.c:125
static long isa(ptr_psi_term arg1, ptr_psi_term arg2)
isa
Definition: bi_type.c:219
long reportAndAbort(ptr_psi_term g, char *s)
reportAndAbort
Definition: error.c:872
#define set_1_2
Definition: def_const.h:420
#define deref_ptr(P)
Definition: def_macro.h:100
#define TRUE
Standard boolean.
Definition: def_const.h:242
#define FALSE
Standard boolean.
Definition: def_const.h:249
#define deref(P)
Definition: def_macro.h:147
ptr_goal aim
Definition: def_glob.h:54
#define deref_args(P, S)
Definition: def_macro.h:150
ptr_node attr_list
Definition: def_struct.h:179
long c_lub ( )

long c_lub

least upper bound (djd) C_LUB(A,B) Return lub(A,B). Continued calls will return each following type in the disjunction of the lub of A,B.

Definition at line 778 of file bi_type.c.

References wl_goal::aaaa_1, aim, wl_psi_term::attr_list, wl_goal::bbbb_1, curry(), deref, deref_args, deref_ptr, get_two_args(), lub(), makePsiTerm(), wl_int_list::next, NULL, push_choice_point(), push_goal(), resid_aim, set_1_2, TRUE, type_disj, unify, and wl_int_list::value_1.

779 {
780  ptr_psi_term func,arg1,arg2, result, other;
781  ptr_definition ans=NULL;
782  ptr_int_list decodedType = NULL;
783 
784  func=aim->aaaa_1;
785  deref_ptr(func);
786  get_two_args(func->attr_list,&arg1,&arg2);
787 
788  if ((!arg1) || (!arg2))
789  {
790  curry();
791  return TRUE;
792  }
793  result = aim->bbbb_1;
794  deref(result);
795  deref(arg1);
796  deref(arg2);
797  deref_args(func, set_1_2);
798 
799  /* now lets find the list of types that is the lub */
800 
801  decodedType = lub(arg1, arg2, &other);
802 
803  if (decodedType) {
804  ans = (ptr_definition)decodedType->value_1;
805  decodedType = decodedType->next;
806  other = makePsiTerm(ans);
807  }
808 
809  if (decodedType)
810  push_choice_point(type_disj, result,(ptr_psi_term) decodedType,(GENERIC) NULL);
811 
812  resid_aim = NULL;
813  push_goal(unify,result,other,NULL);
814  return TRUE;
815 }
ptr_psi_term makePsiTerm(ptr_definition x)
ptr_psi_term makePsiTerm
Definition: bi_sys.c:573
ptr_psi_term aaaa_1
Definition: def_struct.h:231
void get_two_args(ptr_node t, ptr_psi_term *a, ptr_psi_term *b)
get_two_args
Definition: login.c:47
void push_choice_point(goals t, ptr_psi_term a, ptr_psi_term b, GENERIC c)
push_choice_point
Definition: login.c:638
void push_goal(goals t, ptr_psi_term a, ptr_psi_term b, GENERIC c)
push_goal
Definition: login.c:600
void curry()
curry
Definition: lefun.c:174
#define NULL
Definition: def_const.h:427
ptr_goal resid_aim
Definition: def_glob.h:225
unsigned long * GENERIC
unsigned long *GENERIC
Definition: def_struct.h:27
#define set_1_2
Definition: def_const.h:420
#define deref_ptr(P)
Definition: def_macro.h:100
#define TRUE
Standard boolean.
Definition: def_const.h:242
#define deref(P)
Definition: def_macro.h:147
ptr_int_list lub(ptr_psi_term a, ptr_psi_term b, ptr_psi_term *pp)
Definition: lub.c:173
struct wl_definition * ptr_definition
Definition: def_struct.h:51
ptr_goal aim
Definition: def_glob.h:54
#define unify
Definition: def_const.h:490
#define deref_args(P, S)
Definition: def_macro.h:150
#define type_disj
Definition: def_const.h:500
GENERIC value_1
Definition: def_struct.h:77
ptr_psi_term bbbb_1
Definition: def_struct.h:232
ptr_node attr_list
Definition: def_struct.h:179
ptr_int_list next
Definition: def_struct.h:78
static long c_parents ( )
static

c_parents

Return a list of roots of the parent types of T.

Definition at line 96 of file bi_type.c.

References wl_goal::aaaa_1, aim, wl_psi_term::attr_list, wl_goal::bbbb_1, curry(), deref, deref_args, deref_ptr, get_two_args(), hidden_type(), integer, wl_int_list::next, NULL, wl_definition::parents, push_goal(), quoted_string, real, resid_aim, set_1, stack_cons(), stack_nil(), stack_psi_term(), top, TRUE, wl_psi_term::type, unify, wl_int_list::value_1, and wl_psi_term::value_3.

97 {
98  long success=TRUE;
99  ptr_psi_term funct,result,arg1,arg2,t,p1;
100  ptr_int_list p;
101 
102  funct=aim->aaaa_1;
103  deref_ptr(funct);
104  result=aim->bbbb_1;
105  get_two_args(funct->attr_list,&arg1,&arg2);
106  if (arg1) {
107  deref(arg1);
108  deref_args(funct,set_1);
109  resid_aim=NULL;
110  t=stack_nil(); /* RM: Dec 14 1992 */
111  p = arg1->type->parents;
112  if (arg1->type!=top && p==NULL) {
113  /* Top is the only parent */
114  p1 = stack_psi_term(4);
115  p1->type = (ptr_definition) top;
116  t=stack_cons(p1,t); /* RM: Dec 14 1992 */
117  }
118  else {
119  if ((arg1->type==quoted_string || arg1->type==integer ||
120  arg1->type==real) && arg1->value_3!=NULL) {
121  /* arg1 is a string, long or real: return a list with arg1 as
122  argument, where arg1->value_2 = NULL, MH */
123  p1 = stack_psi_term(4);
124  p1->type = arg1->type;
125  t=stack_cons(p1,t); /* RM: Dec 14 1992 */
126  }
127  else {
128  /* Look at the parents list */
129  while (p) {
130  ptr_definition ptype;
131 
132  ptype = (ptr_definition) p->value_1;
133  if (hidden_type(ptype)) { p=p->next; continue; }
134  p1 = stack_psi_term(4);
135  p1->type = ptype;
136  t=stack_cons(p1,t); /* RM: Dec 14 1992 */
137  p = p->next;
138  }
139  }
140  }
141  push_goal(unify,result,t,NULL);
142  }
143  else
144  curry();
145 
146  return success;
147 }
ptr_psi_term aaaa_1
Definition: def_struct.h:231
void get_two_args(ptr_node t, ptr_psi_term *a, ptr_psi_term *b)
get_two_args
Definition: login.c:47
ptr_psi_term stack_cons(ptr_psi_term head, ptr_psi_term tail)
stack_cons
Definition: built_ins.c:46
void push_goal(goals t, ptr_psi_term a, ptr_psi_term b, GENERIC c)
push_goal
Definition: login.c:600
#define set_1
Definition: def_const.h:418
ptr_definition top
Definition: def_glob.h:111
void curry()
curry
Definition: lefun.c:174
#define NULL
Definition: def_const.h:427
ptr_goal resid_aim
Definition: def_glob.h:225
ptr_definition real
Definition: def_glob.h:107
#define deref_ptr(P)
Definition: def_macro.h:100
#define TRUE
Standard boolean.
Definition: def_const.h:242
ptr_definition integer
Definition: def_glob.h:98
#define deref(P)
Definition: def_macro.h:147
ptr_definition quoted_string
Definition: def_glob.h:106
struct wl_definition * ptr_definition
Definition: def_struct.h:51
ptr_psi_term stack_psi_term(long stat)
stack_psi_term
Definition: lefun.c:21
GENERIC value_3
Definition: def_struct.h:178
ptr_psi_term stack_nil()
stack_nil
Definition: built_ins.c:26
ptr_goal aim
Definition: def_glob.h:54
#define unify
Definition: def_const.h:490
#define deref_args(P, S)
Definition: def_macro.h:150
ptr_definition type
Definition: def_struct.h:173
GENERIC value_1
Definition: def_struct.h:77
ptr_psi_term bbbb_1
Definition: def_struct.h:232
long hidden_type(ptr_definition t)
hidden_type
Definition: built_ins.c:3672
ptr_node attr_list
Definition: def_struct.h:179
ptr_int_list next
Definition: def_struct.h:78
ptr_int_list parents
Definition: def_struct.h:143
static long c_smallest ( )
static

c_smallest

Return the parents of bottom. This function has no arguments.

Definition at line 159 of file bi_type.c.

References wl_goal::aaaa_1, aim, wl_goal::bbbb_1, collect_symbols(), deref_args, least_sel, NULL, push_goal(), set_empty, TRUE, and unify.

160 {
161  long success=TRUE;
162  ptr_psi_term result, g, t;
163 
164  g=aim->aaaa_1;
166  result=aim->bbbb_1;
167  t=collect_symbols(least_sel); /* RM: Feb 3 1993 */
168  push_goal(unify,result,t,NULL);
169 
170  return success;
171 }
ptr_psi_term aaaa_1
Definition: def_struct.h:231
#define least_sel
Definition: def_const.h:8
void push_goal(goals t, ptr_psi_term a, ptr_psi_term b, GENERIC c)
push_goal
Definition: login.c:600
#define set_empty
Definition: def_const.h:417
#define NULL
Definition: def_const.h:427
#define TRUE
Standard boolean.
Definition: def_const.h:242
ptr_goal aim
Definition: def_glob.h:54
#define unify
Definition: def_const.h:490
#define deref_args(P, S)
Definition: def_macro.h:150
ptr_psi_term collect_symbols(long sel)
collect_symbols
Definition: built_ins.c:3699
ptr_psi_term bbbb_1
Definition: def_struct.h:232
void insert_type_builtins ( )

void insert_type_builtins

Definition at line 823 of file bi_type.c.

References bi_module, c_children(), c_glb(), c_is_function(), c_is_number(), c_is_persistent(), c_is_predicate(), c_is_sort(), c_is_value(), c_isa_cmp(), c_isa_eq(), c_isa_ge(), c_isa_gt(), c_isa_le(), c_isa_lt(), c_isa_ncmp(), c_isa_neq(), c_isa_nge(), c_isa_ngt(), c_isa_nle(), c_isa_nlt(), c_isa_subsort(), c_lub(), c_parents(), c_smallest(), function_it, new_built_in(), predicate_it, and syntax_module.

824 {
825  /* Sort comparisons */
838 
839 
840  /* Type checks */
847 
848  /* Sort hierarchy maneuvering */
855 }
void new_built_in(ptr_module m, char *s, def_type t, long(*r)())
new_built_in
Definition: built_ins.c:5375
static long c_isa_cmp()
c_isa_cmp
Definition: bi_type.c:470
#define function_it
Definition: def_const.h:573
static long c_smallest()
c_smallest
Definition: bi_type.c:159
long c_lub()
long c_lub
Definition: bi_type.c:778
static long c_is_number()
static long c_is_number
Definition: bi_type.c:636
static long c_is_predicate()
c_is_predicate
Definition: bi_type.c:552
static long c_isa_lt()
c_isa_lt
Definition: bi_type.c:341
static long c_isa_ncmp()
c_isa_ncmp
Definition: bi_type.c:479
long c_glb()
long c_glb
Definition: bi_type.c:712
#define predicate_it
Definition: def_const.h:572
static long c_children()
c_children
Definition: bi_type.c:30
static long c_isa_nle()
c_isa_nle
Definition: bi_type.c:401
static long c_isa_ge()
c_isa_ge
Definition: bi_type.c:356
long c_isa_subsort()
long c_isa_subsort
Definition: bi_type.c:665
static long c_isa_nlt()
c_isa_nlt
Definition: bi_type.c:416
static long c_isa_ngt()
c_isa_ngt
Definition: bi_type.c:446
static long c_isa_gt()
c_isa_gt
Definition: bi_type.c:371
ptr_module syntax_module
Definition: def_glob.h:164
static long c_is_value()
c_is_value
Definition: bi_type.c:610
static long c_isa_nge()
c_isa_nge
Definition: bi_type.c:431
static long c_parents()
c_parents
Definition: bi_type.c:96
static long c_is_sort()
c_is_sort
Definition: bi_type.c:580
static long c_is_function()
c_is_function
Definition: bi_type.c:492
static long c_isa_eq()
c_isa_eq
Definition: bi_type.c:386
ptr_module bi_module
Definition: def_glob.h:160
static long c_isa_le()
c_isa_le
Definition: bi_type.c:326
static long c_is_persistent()
c_is_persistent
Definition: bi_type.c:520
static long c_isa_neq()
c_isa_neq
Definition: bi_type.c:461
static static long isa ( ptr_psi_term  arg1,
ptr_psi_term  arg2 
)
static

isa

Parameters
arg1- ptr_psi_term arg1
arg2- ptr_psi_term arg2

Boolean utility function that implements isa

Definition at line 219 of file bi_type.c.

References cut, integer, isSubTypeValue(), matches(), real, TRUE, wl_psi_term::type, and wl_psi_term::value_3.

220 {
221  long ans;
222 
223  if ( arg1->type==arg2->type
224  || ( (arg1->type==real || arg1->type==integer)
225  && (arg2->type==real || arg2->type==integer)
226  && (arg1->value_3 || arg2->value_3)
227  )
228  ) {
229 
230  if(arg1->type==cut) /* RM: Jan 21 1993 */
231  ans=TRUE;
232  else
233  ans=isSubTypeValue(arg1, arg2);
234  }
235  else {
236  (void)matches(arg1->type, arg2->type, &ans);
237  }
238 
239  /*Errorline("isa %P %P -> %d\n",arg1,arg2,ans);*/
240 
241  return ans;
242 }
int isSubTypeValue(ptr_psi_term arg1, ptr_psi_term arg2)
isSubTypeValue
Definition: bi_type.c:180
long matches(ptr_definition t1, ptr_definition t2, long *smaller)
matches
Definition: types.c:1666
ptr_definition real
Definition: def_glob.h:107
#define TRUE
Standard boolean.
Definition: def_const.h:242
ptr_definition integer
Definition: def_glob.h:98
GENERIC value_3
Definition: def_struct.h:178
ptr_definition cut
Definition: def_glob.h:88
ptr_definition type
Definition: def_struct.h:173
static long isa_select ( ptr_psi_term  arg1,
ptr_psi_term  arg2,
long  sel 
)
static

isa_select

Parameters
arg1- ptr_psi_term arg1
arg2- ptr_psi_term arg2
sel- long sel

Utility that selects one of several isa functions

Definition at line 253 of file bi_type.c.

References isa(), isa_cmp_sel, isa_eq_sel, isa_ge_sel, isa_gt_sel, isa_le_sel, isa_lt_sel, isa_ncmp_sel, isa_neq_sel, isa_nge_sel, isa_ngt_sel, isa_nle_sel, and isa_nlt_sel.

254 {
255  long ans;
256 
257  switch (sel) {
258  case isa_le_sel: ans=isa(arg1,arg2);
259  break;
260  case isa_lt_sel: ans=isa(arg1,arg2) && !isa(arg2,arg1);
261  break;
262  case isa_ge_sel: ans=isa(arg2,arg1);
263  break;
264  case isa_gt_sel: ans=isa(arg2,arg1) && !isa(arg1,arg2);
265  break;
266  case isa_eq_sel: ans=isa(arg1,arg2) && isa(arg2,arg1);
267  break;
268 
269  case isa_nle_sel: ans= !isa(arg1,arg2);
270  break;
271  case isa_nlt_sel: ans= !(isa(arg1,arg2) && !isa(arg2,arg1));
272  break;
273  case isa_nge_sel: ans= !isa(arg2,arg1);
274  break;
275  case isa_ngt_sel: ans= !(isa(arg2,arg1) && !isa(arg1,arg2));
276  break;
277  case isa_neq_sel: ans= !(isa(arg1,arg2) && isa(arg2,arg1));
278  break;
279 
280  case isa_cmp_sel: ans=isa(arg1,arg2) || isa(arg2,arg1);
281  break;
282  case isa_ncmp_sel: ans= !(isa(arg1,arg2) || isa(arg2,arg1));
283  break;
284  }
285  return ans;
286 }
#define isa_nlt_sel
Definition: def_const.h:521
#define isa_eq_sel
Definition: def_const.h:519
static long isa(ptr_psi_term arg1, ptr_psi_term arg2)
isa
Definition: bi_type.c:219
#define isa_le_sel
Definition: def_const.h:515
#define isa_nge_sel
Definition: def_const.h:522
#define isa_ngt_sel
Definition: def_const.h:523
#define isa_neq_sel
Definition: def_const.h:524
#define isa_cmp_sel
Definition: def_const.h:525
#define isa_nle_sel
Definition: def_const.h:520
#define isa_ge_sel
Definition: def_const.h:517
#define isa_gt_sel
Definition: def_const.h:518
#define isa_lt_sel
Definition: def_const.h:516
#define isa_ncmp_sel
Definition: def_const.h:526
int isSubTypeValue ( ptr_psi_term  arg1,
ptr_psi_term  arg2 
)

isSubTypeValue

Parameters
arg1- ptr_psi_term arg1
arg2- ptr_psi_term arg2

Definition at line 180 of file bi_type.c.

References FALSE, integer, quoted_string, REAL, real, TRUE, wl_psi_term::type, and wl_psi_term::value_3.

181 {
182  long ans=TRUE;
183 
184  /* we already know that either arg1->type == arg2->type or that at both
185  * of the two are either long or real
186  */
187 
188  if (arg2->value_3) {
189  if (arg1->value_3) {
190  if (arg1->type==real || arg1->type==integer) {
191  ans=( *(REAL *)arg1->value_3 == *(REAL *)arg2->value_3);
192  }
193  else if (arg1->type==quoted_string) {
194  ans=(strcmp((char *)arg1->value_3,(char *)arg2->value_3)==0);
195  }
196  }
197  else
198  ans=FALSE;
199  }
200  else {
201  if (arg1->value_3 && (arg1->type==real || arg1->type==integer)) {
202  if (arg2->type==integer)
203  ans=(*(REAL *)arg1->value_3 == floor(*(REAL *)arg1->value_3));
204  else
205  ans=TRUE;
206  }
207  }
208  return ans;
209 }
#define REAL
Which C type to use to represent reals and integers in Wild_Life.
Definition: def_const.h:106
ptr_definition real
Definition: def_glob.h:107
#define TRUE
Standard boolean.
Definition: def_const.h:242
ptr_definition integer
Definition: def_glob.h:98
#define FALSE
Standard boolean.
Definition: def_const.h:249
ptr_definition quoted_string
Definition: def_glob.h:106
GENERIC value_3
Definition: def_struct.h:178
ptr_definition type
Definition: def_struct.h:173
long isValue ( ptr_psi_term  p)

isValue(p)

Parameters
p- ptr_psi_term p

Definition at line 695 of file bi_type.c.

References NULL, and wl_psi_term::value_3.

696 {
697  return (p->value_3 != NULL);
698 }
#define NULL
Definition: def_const.h:427
GENERIC value_3
Definition: def_struct.h:178