Wild Life  2.29
 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 ()
 Return a list of roots of the children types of T (except bottom). More...
 
static long c_parents ()
 Return a list of roots of the parent types of T. 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)
 
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

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

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:224
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:194
ptr_definition top
Definition: def_glob.h:106
void curry()
curry
Definition: lefun.c:174
#define NULL
Definition: def_const.h:203
ptr_goal resid_aim
Definition: def_glob.h:220
ptr_definition real
Definition: def_glob.h:102
#define greatest_sel
Definition: def_const.h:7
#define deref_ptr(P)
Definition: def_macro.h:95
#define TRUE
Definition: def_const.h:127
#define deref(P)
Definition: def_macro.h:142
struct wl_definition * ptr_definition
Definition: def_struct.h:31
ptr_psi_term stack_psi_term(long stat)
stack_psi_term
Definition: lefun.c:21
GENERIC value_3
Definition: def_struct.h:170
ptr_psi_term stack_nil()
stack_nil
Definition: built_ins.c:26
ptr_goal aim
Definition: def_glob.h:49
#define unify
Definition: def_const.h:274
#define deref_args(P, S)
Definition: def_macro.h:145
ptr_psi_term collect_symbols(long sel)
collect_symbols
Definition: built_ins.c:3696
ptr_definition type
Definition: def_struct.h:165
GENERIC value_1
Definition: def_struct.h:54
ptr_psi_term bbbb_1
Definition: def_struct.h:225
long hidden_type(ptr_definition t)
hidden_type
Definition: built_ins.c:3669
ptr_int_list children
Definition: def_struct.h:131
ptr_node attr_list
Definition: def_struct.h:171
ptr_int_list next
Definition: def_struct.h:55
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 708 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.

709 {
710  ptr_psi_term func,arg1,arg2, result, other;
711  ptr_definition ans;
712  ptr_int_list complexType;
713  ptr_int_list decodedType = NULL;
714  long ret;
715 
716  func=aim->aaaa_1;
717  deref_ptr(func);
718  get_two_args(func->attr_list,&arg1,&arg2);
719 
720  if ((!arg1) || (!arg2)) {
721  curry();
722  return TRUE;
723  }
724  result = aim->bbbb_1;
725  deref(result);
726  deref(arg1);
727  deref(arg2);
728  deref_args(func, set_1_2);
729 
730  if ((ret=glb(arg1->type, arg2->type, &ans, &complexType)) == 0)
731  return FALSE;
732 
733  if ((ret != 4)&&(isValue(arg1)||isValue(arg2))) {
734  /* glb is one of arg1->type or arg2->type AND at least one is a value */
735  if (!isSubTypeValue(arg1, arg2) && !isSubTypeValue(arg2, arg1))
736  return FALSE;
737  }
738  if (!ans) {
739  decodedType = decode(complexType);
740  ans = (ptr_definition)decodedType->value_1;
741  decodedType = decodedType->next;
742  }
743  other=makePsiTerm(ans);
744 
745  if (isValue(arg1)) other->value_3=arg1->value_3;
746  if (isValue(arg2)) other->value_3=arg2->value_3;
747 
748  if (isValue(arg1) || isValue(arg2)) {
749  if (decodedType) {
750  Errorline("glb of multiple-inheritance value sorts not yet implemented.\n");
751  return FALSE;
752  }
753  }
754 
755  if (decodedType)
756  push_choice_point(type_disj, result,(ptr_psi_term) decodedType,(GENERIC) NULL);
757 
758  resid_aim = NULL;
759  push_goal(unify,result,other,NULL);
760  return TRUE;
761 }
ptr_psi_term makePsiTerm(ptr_definition x)
Definition: bi_sys.c:572
ptr_psi_term aaaa_1
Definition: def_struct.h:224
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:203
ptr_goal resid_aim
Definition: def_glob.h:220
void Errorline(char *format,...)
Errorline.
Definition: error.c:465
#define set_1_2
Definition: def_const.h:196
#define deref_ptr(P)
Definition: def_macro.h:95
#define TRUE
Definition: def_const.h:127
#define FALSE
Definition: def_const.h:128
#define deref(P)
Definition: def_macro.h:142
struct wl_definition * ptr_definition
Definition: def_struct.h:31
GENERIC value_3
Definition: def_struct.h:170
ptr_goal aim
Definition: def_glob.h:49
#define unify
Definition: def_const.h:274
#define deref_args(P, S)
Definition: def_macro.h:145
#define type_disj
Definition: def_const.h:284
long isValue(ptr_psi_term p)
isValue(p)
Definition: bi_type.c:691
ptr_definition type
Definition: def_struct.h:165
GENERIC value_1
Definition: def_struct.h:54
ptr_psi_term bbbb_1
Definition: def_struct.h:225
unsigned long * GENERIC
Definition: def_struct.h:17
ptr_node attr_list
Definition: def_struct.h:171
ptr_int_list next
Definition: def_struct.h:55
static long c_is_function ( )
static

c_is_function

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

Definition at line 488 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().

489 {
490  int success=TRUE,ans;
491  ptr_psi_term arg1,funct,result;
492 
493  funct=aim->aaaa_1;
494  deref_ptr(funct);
495  result=aim->bbbb_1;
496  get_one_arg(funct->attr_list,&arg1);
497  if (arg1) {
498  deref(arg1);
499  deref_args(funct,set_1);
500  ans=(arg1->type->type_def==(def_type)function_it);
501  unify_bool_result(result,ans);
502  }
503  else curry();
504 
505  return success;
506 }
ptr_psi_term aaaa_1
Definition: def_struct.h:224
#define function_it
Definition: def_const.h:362
struct wl_definition * def_type
Definition: def_struct.h:32
void unify_bool_result(ptr_psi_term t, long v)
unify_bool_result
Definition: built_ins.c:345
def_type type_def
Definition: def_struct.h:133
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:194
void curry()
curry
Definition: lefun.c:174
#define deref_ptr(P)
Definition: def_macro.h:95
#define TRUE
Definition: def_const.h:127
#define deref(P)
Definition: def_macro.h:142
ptr_goal aim
Definition: def_glob.h:49
#define deref_args(P, S)
Definition: def_macro.h:145
ptr_definition type
Definition: def_struct.h:165
ptr_psi_term bbbb_1
Definition: def_struct.h:225
ptr_node attr_list
Definition: def_struct.h:171
static long c_is_number ( )
static

static long c_is_number

Return true iff argument is an actual number.

Definition at line 632 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.

633 {
634  long success=TRUE,ans;
635  ptr_psi_term arg1,arg2,funct,result;
636 
637  funct=aim->aaaa_1;
638  deref_ptr(funct);
639  result=aim->bbbb_1;
640  get_two_args(funct->attr_list,&arg1,&arg2);
641  if (arg1) {
642  deref(arg1);
643  deref_args(funct,set_1);
644  ans=sub_type(arg1->type,real) && (arg1->value_3!=NULL);
645  unify_bool_result(result,ans);
646  }
647  else curry();
648 
649  return success;
650 }
ptr_psi_term aaaa_1
Definition: def_struct.h:224
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:345
#define set_1
Definition: def_const.h:194
void curry()
curry
Definition: lefun.c:174
#define NULL
Definition: def_const.h:203
long sub_type(ptr_definition t1, ptr_definition t2)
sub_type
Definition: types.c:1642
ptr_definition real
Definition: def_glob.h:102
#define deref_ptr(P)
Definition: def_macro.h:95
#define TRUE
Definition: def_const.h:127
#define deref(P)
Definition: def_macro.h:142
GENERIC value_3
Definition: def_struct.h:170
ptr_goal aim
Definition: def_glob.h:49
#define deref_args(P, S)
Definition: def_macro.h:145
ptr_definition type
Definition: def_struct.h:165
ptr_psi_term bbbb_1
Definition: def_struct.h:225
ptr_node attr_list
Definition: def_struct.h:171
static long c_is_persistent ( )
static

c_is_persistent

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

Definition at line 516 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, wl_definition::global_value, heap_pointer, set_1, TRUE, wl_psi_term::type, wl_definition::type_def, and unify_bool_result().

517 {
518  int success=TRUE,ans;
519  ptr_psi_term arg1,glob,result;
520 
521  glob=aim->aaaa_1;
522  deref_ptr(glob);
523  result=aim->bbbb_1;
524  get_one_arg(glob->attr_list,&arg1);
525  if (arg1) {
526  deref(arg1);
527  deref_args(glob,set_1);
528  ans=(
529  arg1->type->type_def==(def_type)global &&
531  ) ||
532  (GENERIC)arg1>=heap_pointer;
533  unify_bool_result(result,ans);
534  }
535  else curry();
536 
537  return success;
538 }
ptr_psi_term aaaa_1
Definition: def_struct.h:224
struct wl_definition * def_type
Definition: def_struct.h:32
#define global
Definition: def_const.h:364
void unify_bool_result(ptr_psi_term t, long v)
unify_bool_result
Definition: built_ins.c:345
def_type type_def
Definition: def_struct.h:133
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:194
void curry()
curry
Definition: lefun.c:174
#define deref_ptr(P)
Definition: def_macro.h:95
#define TRUE
Definition: def_const.h:127
ptr_psi_term global_value
Definition: def_struct.h:141
#define deref(P)
Definition: def_macro.h:142
ptr_goal aim
Definition: def_glob.h:49
GENERIC heap_pointer
Definition: def_glob.h:12
#define deref_args(P, S)
Definition: def_macro.h:145
ptr_definition type
Definition: def_struct.h:165
ptr_psi_term bbbb_1
Definition: def_struct.h:225
unsigned long * GENERIC
Definition: def_struct.h:17
ptr_node attr_list
Definition: def_struct.h:171
static long c_is_predicate ( )
static

c_is_predicate

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

Definition at line 548 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, set_1, TRUE, wl_psi_term::type, wl_definition::type_def, and unify_bool_result().

549 {
550  int success=TRUE,ans;
551  ptr_psi_term arg1,funct,result;
552 
553  funct=aim->aaaa_1;
554  deref_ptr(funct);
555  result=aim->bbbb_1;
556  get_one_arg(funct->attr_list,&arg1);
557  if (arg1) {
558  deref(arg1);
559  deref_args(funct,set_1);
560  ans=(arg1->type->type_def==(def_type)predicate);
561  unify_bool_result(result,ans);
562  }
563  else curry();
564 
565  return success;
566 }
ptr_psi_term aaaa_1
Definition: def_struct.h:224
#define predicate
Definition: def_const.h:361
struct wl_definition * def_type
Definition: def_struct.h:32
void unify_bool_result(ptr_psi_term t, long v)
unify_bool_result
Definition: built_ins.c:345
def_type type_def
Definition: def_struct.h:133
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:194
void curry()
curry
Definition: lefun.c:174
#define deref_ptr(P)
Definition: def_macro.h:95
#define TRUE
Definition: def_const.h:127
#define deref(P)
Definition: def_macro.h:142
ptr_goal aim
Definition: def_glob.h:49
#define deref_args(P, S)
Definition: def_macro.h:145
ptr_definition type
Definition: def_struct.h:165
ptr_psi_term bbbb_1
Definition: def_struct.h:225
ptr_node attr_list
Definition: def_struct.h:171
static long c_is_sort ( )
static

c_is_sort

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

Definition at line 576 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().

577 {
578  int success=TRUE,ans;
579  ptr_psi_term arg1,funct,result;
580 
581  funct=aim->aaaa_1;
582  deref_ptr(funct);
583  result=aim->bbbb_1;
584  get_one_arg(funct->attr_list,&arg1);
585  if (arg1) {
586  deref(arg1);
587  deref_args(funct,set_1);
588  ans=(arg1->type->type_def==(def_type)type_it);
589  unify_bool_result(result,ans);
590  }
591  else curry();
592 
593  return success;
594 }
ptr_psi_term aaaa_1
Definition: def_struct.h:224
struct wl_definition * def_type
Definition: def_struct.h:32
void unify_bool_result(ptr_psi_term t, long v)
unify_bool_result
Definition: built_ins.c:345
def_type type_def
Definition: def_struct.h:133
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:194
void curry()
curry
Definition: lefun.c:174
#define type_it
Definition: def_const.h:363
#define deref_ptr(P)
Definition: def_macro.h:95
#define TRUE
Definition: def_const.h:127
#define deref(P)
Definition: def_macro.h:142
ptr_goal aim
Definition: def_glob.h:49
#define deref_args(P, S)
Definition: def_macro.h:145
ptr_definition type
Definition: def_struct.h:165
ptr_psi_term bbbb_1
Definition: def_struct.h:225
ptr_node attr_list
Definition: def_struct.h:171
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 606 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.

607 {
608  long success=TRUE,ans;
609  ptr_psi_term arg1,arg2,funct,result;
610 
611  funct=aim->aaaa_1;
612  deref_ptr(funct);
613  result=aim->bbbb_1;
614  get_two_args(funct->attr_list,&arg1,&arg2);
615  if (arg1) {
616  deref(arg1);
617  deref_args(funct,set_1);
618  ans=(arg1->value_3!=NULL);
619  unify_bool_result(result,ans);
620  }
621  else curry();
622 
623  return success;
624 }
ptr_psi_term aaaa_1
Definition: def_struct.h:224
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:345
#define set_1
Definition: def_const.h:194
void curry()
curry
Definition: lefun.c:174
#define NULL
Definition: def_const.h:203
#define deref_ptr(P)
Definition: def_macro.h:95
#define TRUE
Definition: def_const.h:127
#define deref(P)
Definition: def_macro.h:142
GENERIC value_3
Definition: def_struct.h:170
ptr_goal aim
Definition: def_glob.h:49
#define deref_args(P, S)
Definition: def_macro.h:145
ptr_psi_term bbbb_1
Definition: def_struct.h:225
ptr_node attr_list
Definition: def_struct.h:171
static long c_isa_cmp ( )
static

c_isa_cmp

Definition at line 466 of file bi_type.c.

References c_isa_main(), and isa_cmp_sel.

467 {
468  return c_isa_main(isa_cmp_sel);
469 }
#define isa_cmp_sel
Definition: def_const.h:309
static long c_isa_main(long sel)
c_isa_main
Definition: bi_type.c:290
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 382 of file bi_type.c.

References c_isa_main(), and isa_eq_sel.

383 {
384  return c_isa_main(isa_eq_sel);
385 }
#define isa_eq_sel
Definition: def_const.h:303
static long c_isa_main(long sel)
c_isa_main
Definition: bi_type.c:290
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 352 of file bi_type.c.

References c_isa_main(), and isa_ge_sel.

353 {
354  return c_isa_main(isa_ge_sel);
355 }
#define isa_ge_sel
Definition: def_const.h:301
static long c_isa_main(long sel)
c_isa_main
Definition: bi_type.c:290
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 367 of file bi_type.c.

References c_isa_main(), and isa_gt_sel.

368 {
369  return c_isa_main(isa_gt_sel);
370 }
static long c_isa_main(long sel)
c_isa_main
Definition: bi_type.c:290
#define isa_gt_sel
Definition: def_const.h:302
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 322 of file bi_type.c.

References c_isa_main(), and isa_le_sel.

323 {
324  return c_isa_main(isa_le_sel);
325 }
#define isa_le_sel
Definition: def_const.h:299
static long c_isa_main(long sel)
c_isa_main
Definition: bi_type.c:290
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 337 of file bi_type.c.

References c_isa_main(), and isa_lt_sel.

338 {
339  return c_isa_main(isa_lt_sel);
340 }
static long c_isa_main(long sel)
c_isa_main
Definition: bi_type.c:290
#define isa_lt_sel
Definition: def_const.h:300
static long c_isa_main ( long  sel)
static

c_isa_main

Parameters
longsel

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

Definition at line 290 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().

291 {
292  long success=TRUE,ans;
293  ptr_psi_term arg1,arg2,funct,result;
294 
295  funct=aim->aaaa_1;
296  deref_ptr(funct);
297  result=aim->bbbb_1;
298  get_two_args(funct->attr_list,&arg1,&arg2);
299  if (arg1 && arg2) {
300  deref(arg1);
301  deref(arg2);
302  deref_args(funct,set_1_2);
303  ans=isa_select(arg1,arg2,sel);
304  unify_bool_result(result,ans);
305  }
306  else curry();
307 
308  return success;
309 }
ptr_psi_term aaaa_1
Definition: def_struct.h:224
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:345
void curry()
curry
Definition: lefun.c:174
#define set_1_2
Definition: def_const.h:196
#define deref_ptr(P)
Definition: def_macro.h:95
#define TRUE
Definition: def_const.h:127
#define deref(P)
Definition: def_macro.h:142
ptr_goal aim
Definition: def_glob.h:49
#define deref_args(P, S)
Definition: def_macro.h:145
static long isa_select(ptr_psi_term arg1, ptr_psi_term arg2, long sel)
isa_select
Definition: bi_type.c:249
ptr_psi_term bbbb_1
Definition: def_struct.h:225
ptr_node attr_list
Definition: def_struct.h:171
static long c_isa_ncmp ( )
static

c_isa_ncmp

Definition at line 475 of file bi_type.c.

References c_isa_main(), and isa_ncmp_sel.

476 {
477  return c_isa_main(isa_ncmp_sel);
478 }
static long c_isa_main(long sel)
c_isa_main
Definition: bi_type.c:290
#define isa_ncmp_sel
Definition: def_const.h:310
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 457 of file bi_type.c.

References c_isa_main(), and isa_neq_sel.

458 {
459  return c_isa_main(isa_neq_sel);
460 }
#define isa_neq_sel
Definition: def_const.h:308
static long c_isa_main(long sel)
c_isa_main
Definition: bi_type.c:290
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 427 of file bi_type.c.

References c_isa_main(), and isa_nge_sel.

428 {
429  return c_isa_main(isa_nge_sel);
430 }
#define isa_nge_sel
Definition: def_const.h:306
static long c_isa_main(long sel)
c_isa_main
Definition: bi_type.c:290
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 442 of file bi_type.c.

References c_isa_main(), and isa_ngt_sel.

443 {
444  return c_isa_main(isa_ngt_sel);
445 }
#define isa_ngt_sel
Definition: def_const.h:307
static long c_isa_main(long sel)
c_isa_main
Definition: bi_type.c:290
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 397 of file bi_type.c.

References c_isa_main(), and isa_nle_sel.

398 {
399  return c_isa_main(isa_nle_sel);
400 }
#define isa_nle_sel
Definition: def_const.h:304
static long c_isa_main(long sel)
c_isa_main
Definition: bi_type.c:290
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 412 of file bi_type.c.

References c_isa_main(), and isa_nlt_sel.

413 {
414  return c_isa_main(isa_nlt_sel);
415 }
#define isa_nlt_sel
Definition: def_const.h:305
static long c_isa_main(long sel)
c_isa_main
Definition: bi_type.c:290
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 661 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.

662 {
663  ptr_psi_term pred,arg1,arg2;
664 
665  pred=aim->aaaa_1;
666  deref_ptr(pred);
667  get_two_args(pred->attr_list,&arg1,&arg2);
668 
669  if (!arg1) (void)reportAndAbort(pred,"no first argument");
670  deref(arg1);
671 
672  if (!arg2) (void)reportAndAbort(pred,"no second argument");
673  deref(arg2);
674 
675  deref_args(pred, set_1_2);
676 
677  if (isa(arg1, arg2))
678  {
679  residuate(arg2);
680  return TRUE;
681  }
682  return FALSE;
683 }
ptr_psi_term aaaa_1
Definition: def_struct.h:224
void get_two_args(ptr_node t, ptr_psi_term *a, ptr_psi_term *b)
get_two_args
Definition: login.c:47
static long isa(ptr_psi_term arg1, ptr_psi_term arg2)
Definition: bi_type.c:217
void residuate(ptr_psi_term t)
residuate
Definition: lefun.c:125
long reportAndAbort(ptr_psi_term g, char *s)
reportAndAbort
Definition: error.c:872
#define set_1_2
Definition: def_const.h:196
#define deref_ptr(P)
Definition: def_macro.h:95
#define TRUE
Definition: def_const.h:127
#define FALSE
Definition: def_const.h:128
#define deref(P)
Definition: def_macro.h:142
ptr_goal aim
Definition: def_glob.h:49
#define deref_args(P, S)
Definition: def_macro.h:145
ptr_node attr_list
Definition: def_struct.h:171
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 775 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.

776 {
777  ptr_psi_term func,arg1,arg2, result, other;
778  ptr_definition ans=NULL;
779  ptr_int_list decodedType = NULL;
780 
781  func=aim->aaaa_1;
782  deref_ptr(func);
783  get_two_args(func->attr_list,&arg1,&arg2);
784 
785  if ((!arg1) || (!arg2))
786  {
787  curry();
788  return TRUE;
789  }
790  result = aim->bbbb_1;
791  deref(result);
792  deref(arg1);
793  deref(arg2);
794  deref_args(func, set_1_2);
795 
796  /* now lets find the list of types that is the lub */
797 
798  decodedType = lub(arg1, arg2, &other);
799 
800  if (decodedType) {
801  ans = (ptr_definition)decodedType->value_1;
802  decodedType = decodedType->next;
803  other = makePsiTerm(ans);
804  }
805 
806  if (decodedType)
807  push_choice_point(type_disj, result,(ptr_psi_term) decodedType,(GENERIC) NULL);
808 
809  resid_aim = NULL;
810  push_goal(unify,result,other,NULL);
811  return TRUE;
812 }
ptr_psi_term makePsiTerm(ptr_definition x)
Definition: bi_sys.c:572
ptr_psi_term aaaa_1
Definition: def_struct.h:224
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:203
ptr_goal resid_aim
Definition: def_glob.h:220
#define set_1_2
Definition: def_const.h:196
#define deref_ptr(P)
Definition: def_macro.h:95
#define TRUE
Definition: def_const.h:127
#define deref(P)
Definition: def_macro.h:142
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:31
ptr_goal aim
Definition: def_glob.h:49
#define unify
Definition: def_const.h:274
#define deref_args(P, S)
Definition: def_macro.h:145
#define type_disj
Definition: def_const.h:284
GENERIC value_1
Definition: def_struct.h:54
ptr_psi_term bbbb_1
Definition: def_struct.h:225
unsigned long * GENERIC
Definition: def_struct.h:17
ptr_node attr_list
Definition: def_struct.h:171
ptr_int_list next
Definition: def_struct.h:55
static long c_parents ( )
static

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

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:224
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:194
ptr_definition top
Definition: def_glob.h:106
void curry()
curry
Definition: lefun.c:174
#define NULL
Definition: def_const.h:203
ptr_goal resid_aim
Definition: def_glob.h:220
ptr_definition real
Definition: def_glob.h:102
#define deref_ptr(P)
Definition: def_macro.h:95
#define TRUE
Definition: def_const.h:127
ptr_definition integer
Definition: def_glob.h:93
#define deref(P)
Definition: def_macro.h:142
ptr_definition quoted_string
Definition: def_glob.h:101
struct wl_definition * ptr_definition
Definition: def_struct.h:31
ptr_psi_term stack_psi_term(long stat)
stack_psi_term
Definition: lefun.c:21
GENERIC value_3
Definition: def_struct.h:170
ptr_psi_term stack_nil()
stack_nil
Definition: built_ins.c:26
ptr_goal aim
Definition: def_glob.h:49
#define unify
Definition: def_const.h:274
#define deref_args(P, S)
Definition: def_macro.h:145
ptr_definition type
Definition: def_struct.h:165
GENERIC value_1
Definition: def_struct.h:54
ptr_psi_term bbbb_1
Definition: def_struct.h:225
long hidden_type(ptr_definition t)
hidden_type
Definition: built_ins.c:3669
ptr_node attr_list
Definition: def_struct.h:171
ptr_int_list next
Definition: def_struct.h:55
ptr_int_list parents
Definition: def_struct.h:130
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:224
#define least_sel
Definition: def_const.h:6
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:193
#define NULL
Definition: def_const.h:203
#define TRUE
Definition: def_const.h:127
ptr_goal aim
Definition: def_glob.h:49
#define unify
Definition: def_const.h:274
#define deref_args(P, S)
Definition: def_macro.h:145
ptr_psi_term collect_symbols(long sel)
collect_symbols
Definition: built_ins.c:3696
ptr_psi_term bbbb_1
Definition: def_struct.h:225
void insert_type_builtins ( )

void insert_type_builtins

Definition at line 820 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, and syntax_module.

821 {
822  /* Sort comparisons */
835 
836 
837  /* Type checks */
844 
845  /* Sort hierarchy maneuvering */
852 }
void new_built_in(ptr_module m, char *s, def_type t, long(*r)())
new_built_in
Definition: built_ins.c:5371
static long c_isa_cmp()
c_isa_cmp
Definition: bi_type.c:466
#define predicate
Definition: def_const.h:361
#define function_it
Definition: def_const.h:362
static long c_smallest()
c_smallest
Definition: bi_type.c:159
long c_lub()
long c_lub
Definition: bi_type.c:775
static long c_is_number()
static long c_is_number
Definition: bi_type.c:632
static long c_is_predicate()
c_is_predicate
Definition: bi_type.c:548
static long c_isa_lt()
c_isa_lt
Definition: bi_type.c:337
static long c_isa_ncmp()
c_isa_ncmp
Definition: bi_type.c:475
long c_glb()
long c_glb
Definition: bi_type.c:708
static long c_children()
Return a list of roots of the children types of T (except bottom).
Definition: bi_type.c:30
static long c_isa_nle()
c_isa_nle
Definition: bi_type.c:397
static long c_isa_ge()
c_isa_ge
Definition: bi_type.c:352
long c_isa_subsort()
long c_isa_subsort
Definition: bi_type.c:661
static long c_isa_nlt()
c_isa_nlt
Definition: bi_type.c:412
static long c_isa_ngt()
c_isa_ngt
Definition: bi_type.c:442
static long c_isa_gt()
c_isa_gt
Definition: bi_type.c:367
ptr_module syntax_module
Definition: def_glob.h:159
static long c_is_value()
c_is_value
Definition: bi_type.c:606
static long c_isa_nge()
c_isa_nge
Definition: bi_type.c:427
static long c_parents()
Return a list of roots of the parent types of T.
Definition: bi_type.c:96
static long c_is_sort()
c_is_sort
Definition: bi_type.c:576
static long c_is_function()
c_is_function
Definition: bi_type.c:488
static long c_isa_eq()
c_isa_eq
Definition: bi_type.c:382
ptr_module bi_module
Definition: def_glob.h:155
static long c_isa_le()
c_isa_le
Definition: bi_type.c:322
static long c_is_persistent()
c_is_persistent
Definition: bi_type.c:516
static long c_isa_neq()
c_isa_neq
Definition: bi_type.c:457
static long isa ( ptr_psi_term  arg1,
ptr_psi_term  arg2 
)
static

Definition at line 217 of file bi_type.c.

References cut, integer, isSubTypeValue(), matches(), real, and TRUE.

219 {
220  long ans;
221 
222  if ( arg1->type==arg2->type
223  || ( (arg1->type==real || arg1->type==integer)
224  && (arg2->type==real || arg2->type==integer)
225  && (arg1->value_3 || arg2->value_3)
226  )
227  ) {
228 
229  if(arg1->type==cut) /* RM: Jan 21 1993 */
230  ans=TRUE;
231  else
232  ans=isSubTypeValue(arg1, arg2);
233  }
234  else {
235  (void)matches(arg1->type, arg2->type, &ans);
236  }
237 
238  /*Errorline("isa %P %P -> %d\n",arg1,arg2,ans);*/
239 
240  return ans;
241 }
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:102
#define TRUE
Definition: def_const.h:127
ptr_definition integer
Definition: def_glob.h:93
GENERIC value_3
Definition: def_struct.h:170
ptr_definition cut
Definition: def_glob.h:83
ptr_definition type
Definition: def_struct.h:165
static long isa_select ( ptr_psi_term  arg1,
ptr_psi_term  arg2,
long  sel 
)
static

isa_select

Utility that selects one of several isa functions

Definition at line 249 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.

250 {
251  long ans;
252 
253  switch (sel) {
254  case isa_le_sel: ans=isa(arg1,arg2);
255  break;
256  case isa_lt_sel: ans=isa(arg1,arg2) && !isa(arg2,arg1);
257  break;
258  case isa_ge_sel: ans=isa(arg2,arg1);
259  break;
260  case isa_gt_sel: ans=isa(arg2,arg1) && !isa(arg1,arg2);
261  break;
262  case isa_eq_sel: ans=isa(arg1,arg2) && isa(arg2,arg1);
263  break;
264 
265  case isa_nle_sel: ans= !isa(arg1,arg2);
266  break;
267  case isa_nlt_sel: ans= !(isa(arg1,arg2) && !isa(arg2,arg1));
268  break;
269  case isa_nge_sel: ans= !isa(arg2,arg1);
270  break;
271  case isa_ngt_sel: ans= !(isa(arg2,arg1) && !isa(arg1,arg2));
272  break;
273  case isa_neq_sel: ans= !(isa(arg1,arg2) && isa(arg2,arg1));
274  break;
275 
276  case isa_cmp_sel: ans=isa(arg1,arg2) || isa(arg2,arg1);
277  break;
278  case isa_ncmp_sel: ans= !(isa(arg1,arg2) || isa(arg2,arg1));
279  break;
280  }
281  return ans;
282 }
static long isa(ptr_psi_term arg1, ptr_psi_term arg2)
Definition: bi_type.c:217
#define isa_nlt_sel
Definition: def_const.h:305
#define isa_eq_sel
Definition: def_const.h:303
#define isa_le_sel
Definition: def_const.h:299
#define isa_nge_sel
Definition: def_const.h:306
#define isa_ngt_sel
Definition: def_const.h:307
#define isa_neq_sel
Definition: def_const.h:308
#define isa_cmp_sel
Definition: def_const.h:309
#define isa_nle_sel
Definition: def_const.h:304
#define isa_ge_sel
Definition: def_const.h:301
#define isa_gt_sel
Definition: def_const.h:302
#define isa_lt_sel
Definition: def_const.h:300
#define isa_ncmp_sel
Definition: def_const.h:310
int isSubTypeValue ( ptr_psi_term  arg1,
ptr_psi_term  arg2 
)

isSubTypeValue

Parameters
ptr_psi_termarg1
ptr_psi_termarg2

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
Definition: def_const.h:72
ptr_definition real
Definition: def_glob.h:102
#define TRUE
Definition: def_const.h:127
ptr_definition integer
Definition: def_glob.h:93
#define FALSE
Definition: def_const.h:128
ptr_definition quoted_string
Definition: def_glob.h:101
GENERIC value_3
Definition: def_struct.h:170
ptr_definition type
Definition: def_struct.h:165
long isValue ( ptr_psi_term  p)

isValue(p)

Parameters
ptr_psi_termp

Definition at line 691 of file bi_type.c.

References NULL, and wl_psi_term::value_3.

692 {
693  return (p->value_3 != NULL);
694 }
#define NULL
Definition: def_const.h:203
GENERIC value_3
Definition: def_struct.h:170