Lines Matching full:lp

336 dt_type_promote(dt_node_t *lp, dt_node_t *rp, ctf_file_t **ofp, ctf_id_t *otype)  in dt_type_promote()  argument
338 ctf_file_t *lfp = lp->dn_ctfp; in dt_type_promote()
339 ctf_id_t ltype = lp->dn_type; in dt_type_promote()
407 dt_node_promote(dt_node_t *lp, dt_node_t *rp, dt_node_t *dnp) in dt_node_promote() argument
409 dt_type_promote(lp, rp, &dnp->dn_ctfp, &dnp->dn_type); in dt_node_promote()
411 dt_node_attr_assign(dnp, dt_attr_min(lp->dn_attr, rp->dn_attr)); in dt_node_promote()
1046 dt_node_is_ptrcompat(const dt_node_t *lp, const dt_node_t *rp, in dt_node_is_ptrcompat() argument
1049 ctf_file_t *lfp = lp->dn_ctfp; in dt_node_is_ptrcompat()
1060 assert(lp->dn_flags & DT_NF_COOKED); in dt_node_is_ptrcompat()
1063 if (dt_node_is_dynamic(lp) || dt_node_is_dynamic(rp)) in dt_node_is_ptrcompat()
1066 lp_is_int = dt_node_is_integer(lp); in dt_node_is_ptrcompat()
1072 if (lp_is_int && (lp->dn_kind != DT_NODE_INT || lp->dn_value != 0)) in dt_node_is_ptrcompat()
1073 return (0); /* fail if lp is an integer that isn't 0 constant */ in dt_node_is_ptrcompat()
1079 (lp->dn_flags & DT_NF_USERLAND) ^ (rp->dn_flags & DT_NF_USERLAND))) in dt_node_is_ptrcompat()
1088 lbase = ctf_type_resolve(lfp, lp->dn_type); in dt_node_is_ptrcompat()
1181 dt_node_is_argcompat(const dt_node_t *lp, const dt_node_t *rp) in dt_node_is_argcompat() argument
1183 ctf_file_t *lfp = lp->dn_ctfp; in dt_node_is_argcompat()
1186 assert(lp->dn_flags & DT_NF_COOKED); in dt_node_is_argcompat()
1189 if (dt_node_is_integer(lp) && dt_node_is_integer(rp)) in dt_node_is_argcompat()
1192 if (dt_node_is_strcompat(lp) && dt_node_is_strcompat(rp)) in dt_node_is_argcompat()
1195 if (dt_node_is_stack(lp) && dt_node_is_stack(rp)) in dt_node_is_argcompat()
1198 if (dt_node_is_symaddr(lp) && dt_node_is_symaddr(rp)) in dt_node_is_argcompat()
1201 if (dt_node_is_usymaddr(lp) && dt_node_is_usymaddr(rp)) in dt_node_is_argcompat()
1204 switch (ctf_type_kind(lfp, ctf_type_resolve(lfp, lp->dn_type))) { in dt_node_is_argcompat()
1208 return (ctf_type_compat(lfp, lp->dn_type, rfp, rp->dn_type)); in dt_node_is_argcompat()
1210 return (dt_node_is_ptrcompat(lp, rp, NULL, NULL)); in dt_node_is_argcompat()
1946 dt_cast(dt_node_t *lp, dt_node_t *rp) in dt_cast() argument
1949 size_t dstsize = dt_node_type_size(lp); in dt_cast()
1970 dt_node_op2(int op, dt_node_t *lp, dt_node_t *rp) in dt_node_op2() argument
1988 if (lp->dn_kind == DT_NODE_INT && rp->dn_kind == DT_NODE_INT) { in dt_node_op2()
1989 uintmax_t l = lp->dn_value; in dt_node_op2()
2012 dt_node_promote(lp, rp, dnp); in dt_node_op2()
2016 dt_node_promote(lp, rp, dnp); in dt_node_op2()
2020 dt_node_promote(lp, rp, dnp); in dt_node_op2()
2033 dt_node_promote(lp, rp, dnp); in dt_node_op2()
2042 dt_node_promote(lp, rp, dnp); in dt_node_op2()
2051 dt_node_promote(lp, rp, dnp); in dt_node_op2()
2060 dt_node_promote(lp, rp, dnp); in dt_node_op2()
2070 dt_node_type_propagate(lp, dnp); in dt_node_op2()
2072 dt_attr_min(lp->dn_attr, rp->dn_attr)); in dt_node_op2()
2076 dt_node_type_propagate(lp, dnp); in dt_node_op2()
2078 dt_attr_min(lp->dn_attr, rp->dn_attr)); in dt_node_op2()
2082 dt_node_promote(lp, rp, dnp); in dt_node_op2()
2086 dt_node_promote(lp, rp, dnp); in dt_node_op2()
2090 dt_node_promote(lp, rp, dnp); in dt_node_op2()
2093 dt_node_promote(lp, rp, dnp); in dt_node_op2()
2100 dt_node_promote(lp, rp, dnp); in dt_node_op2()
2112 dt_node_free(lp); in dt_node_op2()
2119 dt_node_is_integer(lp)) { in dt_node_op2()
2120 dt_cast(lp, rp); in dt_node_op2()
2121 dt_node_type_propagate(lp, rp); in dt_node_op2()
2122 dt_node_attr_assign(rp, dt_attr_min(lp->dn_attr, rp->dn_attr)); in dt_node_op2()
2123 dt_node_free(lp); in dt_node_op2()
2135 dnp->dn_left = lp; in dt_node_op2()
2142 dt_node_op3(dt_node_t *expr, dt_node_t *lp, dt_node_t *rp) in dt_node_op3() argument
2147 return (expr->dn_value != 0 ? lp : rp); in dt_node_op3()
2152 dnp->dn_left = lp; in dt_node_op3()
3193 dt_node_t *lp = dnp->dn_left; in dt_assign_common() local
3198 dt_cast(lp, rp); in dt_assign_common()
3200 if (!(lp->dn_flags & DT_NF_LVALUE)) { in dt_assign_common()
3206 if (!(lp->dn_flags & DT_NF_WRITABLE)) { in dt_assign_common()
3211 dt_node_type_propagate(lp, dnp); /* see K&R[A7.17] */ in dt_assign_common()
3212 dt_node_attr_assign(dnp, dt_attr_min(lp->dn_attr, rp->dn_attr)); in dt_assign_common()
3219 dt_node_t *lp = dnp->dn_left; in dt_cook_op2() local
3240 if (lp->dn_kind == DT_NODE_IDENT) { in dt_cook_op2()
3244 if (lp->dn_op == DT_TOK_AGG) { in dt_cook_op2()
3246 idp = dt_idhash_lookup(dhp, lp->dn_string + 1); in dt_cook_op2()
3251 &yypcb->pcb_globals, lp->dn_string); in dt_cook_op2()
3256 dt_xcook_ident(lp, dhp, idkind, B_TRUE); in dt_cook_op2()
3258 dt_xcook_ident(lp, dhp, idp->di_kind, B_FALSE); in dt_cook_op2()
3260 lp = dnp->dn_left = dt_node_cook(lp, 0); in dt_cook_op2()
3265 * (a) lp is a DT_IDENT_ARRAY variable that has already been in dt_cook_op2()
3267 * (b) lp is a non-ARRAY variable that has already been given in dt_cook_op2()
3269 * (c) lp is neither a variable nor an aggregation in dt_cook_op2()
3271 if (lp->dn_kind == DT_NODE_VAR) { in dt_cook_op2()
3272 if (lp->dn_ident->di_kind == DT_IDENT_ARRAY) { in dt_cook_op2()
3273 if (lp->dn_args != NULL) in dt_cook_op2()
3275 } else if (!dt_ident_unref(lp->dn_ident)) { in dt_cook_op2()
3278 } else if (lp->dn_kind != DT_NODE_AGG) { in dt_cook_op2()
3287 lp = dnp->dn_left = dt_node_cook(lp, DT_IDFLG_REF); in dt_cook_op2()
3290 if (!dt_node_is_integer(lp) || !dt_node_is_integer(rp)) { in dt_cook_op2()
3295 dt_node_promote(lp, rp, dnp); /* see K&R[A7.11-13] */ in dt_cook_op2()
3300 lp = dnp->dn_left = dt_node_cook(lp, DT_IDFLG_REF); in dt_cook_op2()
3303 if (!dt_node_is_integer(lp) || !dt_node_is_integer(rp)) { in dt_cook_op2()
3308 dt_node_type_propagate(lp, dnp); /* see K&R[A7.8] */ in dt_cook_op2()
3309 dt_node_attr_assign(dnp, dt_attr_min(lp->dn_attr, rp->dn_attr)); in dt_cook_op2()
3313 lp = dnp->dn_left = dt_node_cook(lp, DT_IDFLG_REF); in dt_cook_op2()
3316 if (!dt_node_is_integer(lp) || !dt_node_is_integer(rp)) { in dt_cook_op2()
3321 dt_node_promote(lp, rp, dnp); /* see K&R[A7.6] */ in dt_cook_op2()
3326 lp = dnp->dn_left = dt_node_cook(lp, DT_IDFLG_REF); in dt_cook_op2()
3329 if (!dt_node_is_arith(lp) || !dt_node_is_arith(rp)) { in dt_cook_op2()
3334 dt_node_promote(lp, rp, dnp); /* see K&R[A7.6] */ in dt_cook_op2()
3340 lp = dnp->dn_left = dt_node_cook(lp, DT_IDFLG_REF); in dt_cook_op2()
3343 if (!dt_node_is_scalar(lp) || !dt_node_is_scalar(rp)) { in dt_cook_op2()
3350 dt_node_attr_assign(dnp, dt_attr_min(lp->dn_attr, rp->dn_attr)); in dt_cook_op2()
3367 lp = dnp->dn_left = dt_node_cook(lp, DT_IDFLG_REF); in dt_cook_op2()
3369 kind = ctf_type_kind(lp->dn_ctfp, in dt_cook_op2()
3370 ctf_type_resolve(lp->dn_ctfp, lp->dn_type)); in dt_cook_op2()
3374 lp->dn_ctfp, lp->dn_type, rp->dn_string, &val) == 0) { in dt_cook_op2()
3382 dt_node_type_name(lp, n1, sizeof (n1)), in dt_cook_op2()
3393 dt_node_type_assign(rp, lp->dn_ctfp, lp->dn_type, in dt_cook_op2()
3411 if (ctf_type_compat(lp->dn_ctfp, lp->dn_type, in dt_cook_op2()
3414 else if (dt_node_is_integer(lp) && dt_node_is_integer(rp)) in dt_cook_op2()
3416 else if (dt_node_is_strcompat(lp) && dt_node_is_strcompat(rp) && in dt_cook_op2()
3417 (dt_node_is_string(lp) || dt_node_is_string(rp))) in dt_cook_op2()
3419 else if (dt_node_is_ptrcompat(lp, rp, NULL, NULL) == 0) { in dt_cook_op2()
3422 dt_node_type_name(lp, n1, sizeof (n1)), opstr(op), in dt_cook_op2()
3428 dt_node_attr_assign(dnp, dt_attr_min(lp->dn_attr, rp->dn_attr)); in dt_cook_op2()
3441 lp = dnp->dn_left = dt_node_cook(lp, DT_IDFLG_REF); in dt_cook_op2()
3444 lp_is_ptr = dt_node_is_string(lp) || in dt_cook_op2()
3445 (dt_node_is_pointer(lp) && !dt_node_is_vfptr(lp)); in dt_cook_op2()
3446 lp_is_int = dt_node_is_integer(lp); in dt_cook_op2()
3453 dt_type_promote(lp, rp, &ctfp, &type); in dt_cook_op2()
3456 ctfp = lp->dn_ctfp; in dt_cook_op2()
3457 type = lp->dn_type; in dt_cook_op2()
3458 uref = lp->dn_flags & DT_NF_USERLAND; in dt_cook_op2()
3464 dt_node_is_ptrcompat(lp, rp, NULL, NULL)) { in dt_cook_op2()
3471 dt_node_type_name(lp, n1, sizeof (n1)), opstr(op), in dt_cook_op2()
3476 dt_node_attr_assign(dnp, dt_attr_min(lp->dn_attr, rp->dn_attr)); in dt_cook_op2()
3489 if (lp->dn_kind == DT_NODE_IDENT) { in dt_cook_op2()
3490 dt_xcook_ident(lp, dtp->dt_globals, in dt_cook_op2()
3494 lp = dnp->dn_left = in dt_cook_op2()
3495 dt_node_cook(lp, DT_IDFLG_REF | DT_IDFLG_MOD); in dt_cook_op2()
3500 if (!dt_node_is_integer(lp) || !dt_node_is_integer(rp)) { in dt_cook_op2()
3508 if (lp->dn_kind == DT_NODE_IDENT) { in dt_cook_op2()
3509 dt_xcook_ident(lp, dtp->dt_globals, in dt_cook_op2()
3513 lp = dnp->dn_left = in dt_cook_op2()
3514 dt_node_cook(lp, DT_IDFLG_REF | DT_IDFLG_MOD); in dt_cook_op2()
3519 if (!dt_node_is_arith(lp) || !dt_node_is_arith(rp)) { in dt_cook_op2()
3532 if (lp->dn_kind == DT_NODE_IDENT) { in dt_cook_op2()
3533 if (lp->dn_op == DT_TOK_AGG) { in dt_cook_op2()
3534 dt_xcook_ident(lp, dtp->dt_aggs, in dt_cook_op2()
3537 dt_xcook_ident(lp, dtp->dt_globals, in dt_cook_op2()
3542 lp = dnp->dn_left = dt_node_cook(lp, 0); /* don't set mod yet */ in dt_cook_op2()
3554 if (lp->dn_kind == DT_NODE_AGG) { in dt_cook_op2()
3555 const char *aname = lp->dn_ident->di_name; in dt_cook_op2()
3556 dt_ident_t *oid = lp->dn_ident->di_iarg; in dt_cook_op2()
3571 lp->dn_ident->di_lineno); in dt_cook_op2()
3573 lp->dn_ident->di_iarg = rp->dn_ident; in dt_cook_op2()
3581 if (lp->dn_aggfun != NULL) { in dt_cook_op2()
3586 lp->dn_aggfun = rp; in dt_cook_op2()
3587 lp = dt_node_cook(lp, DT_IDFLG_MOD); in dt_cook_op2()
3592 return (lp); in dt_cook_op2()
3614 if (lp->dn_kind == DT_NODE_VAR && in dt_cook_op2()
3615 dt_ident_unref(lp->dn_ident)) { in dt_cook_op2()
3616 dt_node_type_assign(lp, ctfp, type, B_FALSE); in dt_cook_op2()
3617 dt_ident_type_assign(lp->dn_ident, ctfp, type); in dt_cook_op2()
3620 lp->dn_flags |= DT_NF_USERLAND; in dt_cook_op2()
3621 lp->dn_ident->di_flags |= DT_IDFLG_USER; in dt_cook_op2()
3625 if (lp->dn_kind == DT_NODE_VAR) in dt_cook_op2()
3626 lp->dn_ident->di_flags |= DT_IDFLG_MOD; in dt_cook_op2()
3633 if (!dt_node_is_string(lp)) { in dt_cook_op2()
3634 kind = ctf_type_kind(lp->dn_ctfp, in dt_cook_op2()
3635 ctf_type_resolve(lp->dn_ctfp, lp->dn_type)); in dt_cook_op2()
3641 dt_node_type_name(lp, n1, sizeof (n1))); in dt_cook_op2()
3646 ctf_type_compat(lp->dn_ctfp, lp->dn_type, ctfp, type)) in dt_cook_op2()
3649 if (dt_node_is_argcompat(lp, rp)) in dt_cook_op2()
3654 dt_node_type_name(lp, n1, sizeof (n1)), opstr(op), in dt_cook_op2()
3660 if (lp->dn_kind == DT_NODE_IDENT) { in dt_cook_op2()
3661 dt_xcook_ident(lp, dtp->dt_globals, in dt_cook_op2()
3665 lp = dnp->dn_left = in dt_cook_op2()
3666 dt_node_cook(lp, DT_IDFLG_REF | DT_IDFLG_MOD); in dt_cook_op2()
3671 if (dt_node_is_string(lp) || dt_node_is_string(rp)) { in dt_cook_op2()
3674 dt_node_type_name(lp, n1, sizeof (n1)), opstr(op), in dt_cook_op2()
3683 if (dt_node_is_integer(lp) == 0 || in dt_cook_op2()
3685 if (!dt_node_is_pointer(lp) || dt_node_is_vfptr(lp)) { in dt_cook_op2()
3690 dt_node_is_ptrcompat(lp, rp, NULL, NULL) == 0) { in dt_cook_op2()
3693 dt_node_type_name(lp, n1, sizeof (n1)), in dt_cook_op2()
3708 if (lp->dn_kind == DT_NODE_IDENT) { in dt_cook_op2()
3711 if (strcmp(lp->dn_string, "self") == 0) { in dt_cook_op2()
3713 } else if (strcmp(lp->dn_string, "this") == 0) { in dt_cook_op2()
3733 lp = dnp->dn_left = dt_node_cook(lp, DT_IDFLG_REF); in dt_cook_op2()
3740 if ((idp = dt_node_resolve(lp, DT_IDENT_XLSOU)) != NULL || in dt_cook_op2()
3741 (idp = dt_node_resolve(lp, DT_IDENT_XLPTR)) != NULL) { in dt_cook_op2()
3758 ctfp = lp->dn_ctfp; in dt_cook_op2()
3759 type = ctf_type_resolve(ctfp, lp->dn_type); in dt_cook_op2()
3760 uref = lp->dn_flags & DT_NF_USERLAND; in dt_cook_op2()
3820 dt_node_attr_assign(dnp, lp->dn_attr); in dt_cook_op2()
3826 if (op == DT_TOK_DOT && (lp->dn_flags & DT_NF_LVALUE) && in dt_cook_op2()
3830 if (lp->dn_flags & DT_NF_WRITABLE) in dt_cook_op2()
3841 * the top that lp is either a D variable or an aggregation. in dt_cook_op2()
3852 if (lp->dn_kind == DT_NODE_AGG) { in dt_cook_op2()
3853 if (lp->dn_aggtup != NULL) { in dt_cook_op2()
3856 "array\n", lp->dn_ident->di_name); in dt_cook_op2()
3859 lp->dn_aggtup = rp; in dt_cook_op2()
3860 lp = dt_node_cook(lp, 0); in dt_cook_op2()
3865 return (lp); in dt_cook_op2()
3868 assert(lp->dn_kind == DT_NODE_VAR); in dt_cook_op2()
3869 idp = lp->dn_ident; in dt_cook_op2()
3909 * [ VAR ]=lp [ ??? ]=rp in dt_cook_op2()
3916 assert(lp->dn_kind == DT_NODE_VAR); in dt_cook_op2()
3917 assert(lp->dn_args == NULL); in dt_cook_op2()
3920 bcopy(lp, dnp, sizeof (dt_node_t)); in dt_cook_op2()
3926 dt_node_free(lp); in dt_cook_op2()
3933 assert(lp->dn_kind == DT_NODE_TYPE); in dt_cook_op2()
3935 dxp = dt_xlator_lookup(dtp, rp, lp, DT_XLATE_FUZZY); in dt_cook_op2()
3941 dt_node_type_name(lp, n2, sizeof (n2))); in dt_cook_op2()
3944 dnp->dn_ident = dt_xlator_ident(dxp, lp->dn_ctfp, lp->dn_type); in dt_cook_op2()
3956 assert(lp->dn_kind == DT_NODE_TYPE); in dt_cook_op2()
3959 ltype = ctf_type_resolve(lp->dn_ctfp, lp->dn_type); in dt_cook_op2()
3960 lkind = ctf_type_kind(lp->dn_ctfp, ltype); in dt_cook_op2()
3972 if (ctf_type_compat(lp->dn_ctfp, lp->dn_type, in dt_cook_op2()
3975 else if (dt_node_is_scalar(lp) && in dt_cook_op2()
3978 else if (dt_node_is_void(lp)) in dt_cook_op2()
3982 else if (dt_node_is_string(lp) && (dt_node_is_scalar(rp) || in dt_cook_op2()
3989 dt_node_type_name(lp, n2, sizeof (n2))); in dt_cook_op2()
3992 dt_node_type_propagate(lp, dnp); /* see K&R[A7.5] */ in dt_cook_op2()
3993 dt_node_attr_assign(dnp, dt_attr_min(lp->dn_attr, rp->dn_attr)); in dt_cook_op2()
4006 lp = dnp->dn_left = dt_node_cook(lp, DT_IDFLG_REF); in dt_cook_op2()
4009 if (dt_node_is_dynamic(lp) || dt_node_is_dynamic(rp)) { in dt_cook_op2()
4014 if (dt_node_is_actfunc(lp) || dt_node_is_actfunc(rp)) { in dt_cook_op2()
4020 dt_node_attr_assign(dnp, dt_attr_min(lp->dn_attr, rp->dn_attr)); in dt_cook_op2()
4040 dt_node_name(lp, n1, sizeof (n1))); in dt_cook_op2()
4068 dt_node_t *lp, *rp; in dt_cook_op3() local
4073 lp = dnp->dn_left = dt_node_cook(dnp->dn_left, DT_IDFLG_REF); in dt_cook_op3()
4081 if (dt_node_is_dynamic(lp) || dt_node_is_dynamic(rp)) { in dt_cook_op3()
4091 if (ctf_type_compat(lp->dn_ctfp, lp->dn_type, in dt_cook_op3()
4093 ctfp = lp->dn_ctfp; in dt_cook_op3()
4094 type = lp->dn_type; in dt_cook_op3()
4095 } else if (dt_node_is_integer(lp) && dt_node_is_integer(rp)) { in dt_cook_op3()
4096 dt_type_promote(lp, rp, &ctfp, &type); in dt_cook_op3()
4097 } else if (dt_node_is_strcompat(lp) && dt_node_is_strcompat(rp) && in dt_cook_op3()
4098 (dt_node_is_string(lp) || dt_node_is_string(rp))) { in dt_cook_op3()
4101 } else if (dt_node_is_ptrcompat(lp, rp, &ctfp, &type) == 0) { in dt_cook_op3()
4106 if (dt_node_is_actfunc(lp) || dt_node_is_actfunc(rp)) { in dt_cook_op3()
4113 dt_attr_min(lp->dn_attr, rp->dn_attr))); in dt_cook_op3()
4629 dt_node_link(dt_node_t *lp, dt_node_t *rp) in dt_node_link() argument
4633 if (lp == NULL) in dt_node_link()
4636 return (lp); in dt_node_link()
4638 for (dnp = lp; dnp->dn_list != NULL; dnp = dnp->dn_list) in dt_node_link()
4642 return (lp); in dt_node_link()