Lines Matching full:lp

336 dt_type_promote(dt_node_t *lp, dt_node_t *rp, ctf_file_t **ofp, ctf_id_t *otype)
338 ctf_file_t *lfp = lp->dn_ctfp;
339 ctf_id_t ltype = lp->dn_type;
407 dt_node_promote(dt_node_t *lp, dt_node_t *rp, dt_node_t *dnp)
409 dt_type_promote(lp, rp, &dnp->dn_ctfp, &dnp->dn_type);
411 dt_node_attr_assign(dnp, dt_attr_min(lp->dn_attr, rp->dn_attr));
1046 dt_node_is_ptrcompat(const dt_node_t *lp, const dt_node_t *rp,
1049 ctf_file_t *lfp = lp->dn_ctfp;
1060 assert(lp->dn_flags & DT_NF_COOKED);
1063 if (dt_node_is_dynamic(lp) || dt_node_is_dynamic(rp))
1066 lp_is_int = dt_node_is_integer(lp);
1072 if (lp_is_int && (lp->dn_kind != DT_NODE_INT || lp->dn_value != 0))
1073 return (0); /* fail if lp is an integer that isn't 0 constant */
1079 (lp->dn_flags & DT_NF_USERLAND) ^ (rp->dn_flags & DT_NF_USERLAND)))
1088 lbase = ctf_type_resolve(lfp, lp->dn_type);
1181 dt_node_is_argcompat(const dt_node_t *lp, const dt_node_t *rp)
1183 ctf_file_t *lfp = lp->dn_ctfp;
1186 assert(lp->dn_flags & DT_NF_COOKED);
1189 if (dt_node_is_integer(lp) && dt_node_is_integer(rp))
1192 if (dt_node_is_strcompat(lp) && dt_node_is_strcompat(rp))
1195 if (dt_node_is_stack(lp) && dt_node_is_stack(rp))
1198 if (dt_node_is_symaddr(lp) && dt_node_is_symaddr(rp))
1201 if (dt_node_is_usymaddr(lp) && dt_node_is_usymaddr(rp))
1204 switch (ctf_type_kind(lfp, ctf_type_resolve(lfp, lp->dn_type))) {
1208 return (ctf_type_compat(lfp, lp->dn_type, rfp, rp->dn_type));
1210 return (dt_node_is_ptrcompat(lp, rp, NULL, NULL));
1938 dt_cast(dt_node_t *lp, dt_node_t *rp)
1941 size_t dstsize = dt_node_type_size(lp);
1962 dt_node_op2(int op, dt_node_t *lp, dt_node_t *rp)
1980 if (lp->dn_kind == DT_NODE_INT && rp->dn_kind == DT_NODE_INT) {
1981 uintmax_t l = lp->dn_value;
2004 dt_node_promote(lp, rp, dnp);
2008 dt_node_promote(lp, rp, dnp);
2012 dt_node_promote(lp, rp, dnp);
2025 dt_node_promote(lp, rp, dnp);
2034 dt_node_promote(lp, rp, dnp);
2043 dt_node_promote(lp, rp, dnp);
2052 dt_node_promote(lp, rp, dnp);
2062 dt_node_type_propagate(lp, dnp);
2064 dt_attr_min(lp->dn_attr, rp->dn_attr));
2068 dt_node_type_propagate(lp, dnp);
2070 dt_attr_min(lp->dn_attr, rp->dn_attr));
2074 dt_node_promote(lp, rp, dnp);
2078 dt_node_promote(lp, rp, dnp);
2082 dt_node_promote(lp, rp, dnp);
2085 dt_node_promote(lp, rp, dnp);
2092 dt_node_promote(lp, rp, dnp);
2104 dt_node_free(lp);
2111 dt_node_is_integer(lp)) {
2112 dt_cast(lp, rp);
2113 dt_node_type_propagate(lp, rp);
2114 dt_node_attr_assign(rp, dt_attr_min(lp->dn_attr, rp->dn_attr));
2115 dt_node_free(lp);
2127 dnp->dn_left = lp;
2134 dt_node_op3(dt_node_t *expr, dt_node_t *lp, dt_node_t *rp)
2139 return (expr->dn_value != 0 ? lp : rp);
2144 dnp->dn_left = lp;
3174 dt_node_t *lp = dnp->dn_left;
3179 dt_cast(lp, rp);
3181 if (!(lp->dn_flags & DT_NF_LVALUE)) {
3187 if (!(lp->dn_flags & DT_NF_WRITABLE)) {
3192 dt_node_type_propagate(lp, dnp); /* see K&R[A7.17] */
3193 dt_node_attr_assign(dnp, dt_attr_min(lp->dn_attr, rp->dn_attr));
3200 dt_node_t *lp = dnp->dn_left;
3221 if (lp->dn_kind == DT_NODE_IDENT) {
3225 if (lp->dn_op == DT_TOK_AGG) {
3227 idp = dt_idhash_lookup(dhp, lp->dn_string + 1);
3232 &yypcb->pcb_globals, lp->dn_string);
3237 dt_xcook_ident(lp, dhp, idkind, B_TRUE);
3239 dt_xcook_ident(lp, dhp, idp->di_kind, B_FALSE);
3241 lp = dnp->dn_left = dt_node_cook(lp, 0);
3246 * (a) lp is a DT_IDENT_ARRAY variable that has already been
3248 * (b) lp is a non-ARRAY variable that has already been given
3250 * (c) lp is neither a variable nor an aggregation
3252 if (lp->dn_kind == DT_NODE_VAR) {
3253 if (lp->dn_ident->di_kind == DT_IDENT_ARRAY) {
3254 if (lp->dn_args != NULL)
3256 } else if (!dt_ident_unref(lp->dn_ident)) {
3259 } else if (lp->dn_kind != DT_NODE_AGG) {
3268 lp = dnp->dn_left = dt_node_cook(lp, DT_IDFLG_REF);
3271 if (!dt_node_is_integer(lp) || !dt_node_is_integer(rp)) {
3276 dt_node_promote(lp, rp, dnp); /* see K&R[A7.11-13] */
3281 lp = dnp->dn_left = dt_node_cook(lp, DT_IDFLG_REF);
3284 if (!dt_node_is_integer(lp) || !dt_node_is_integer(rp)) {
3289 dt_node_type_propagate(lp, dnp); /* see K&R[A7.8] */
3290 dt_node_attr_assign(dnp, dt_attr_min(lp->dn_attr, rp->dn_attr));
3294 lp = dnp->dn_left = dt_node_cook(lp, DT_IDFLG_REF);
3297 if (!dt_node_is_integer(lp) || !dt_node_is_integer(rp)) {
3302 dt_node_promote(lp, rp, dnp); /* see K&R[A7.6] */
3307 lp = dnp->dn_left = dt_node_cook(lp, DT_IDFLG_REF);
3310 if (!dt_node_is_arith(lp) || !dt_node_is_arith(rp)) {
3315 dt_node_promote(lp, rp, dnp); /* see K&R[A7.6] */
3321 lp = dnp->dn_left = dt_node_cook(lp, DT_IDFLG_REF);
3324 if (!dt_node_is_scalar(lp) || !dt_node_is_scalar(rp)) {
3331 dt_node_attr_assign(dnp, dt_attr_min(lp->dn_attr, rp->dn_attr));
3348 lp = dnp->dn_left = dt_node_cook(lp, DT_IDFLG_REF);
3350 kind = ctf_type_kind(lp->dn_ctfp,
3351 ctf_type_resolve(lp->dn_ctfp, lp->dn_type));
3355 lp->dn_ctfp, lp->dn_type, rp->dn_string, &val) == 0) {
3363 dt_node_type_name(lp, n1, sizeof (n1)),
3374 dt_node_type_assign(rp, lp->dn_ctfp, lp->dn_type,
3392 if (ctf_type_compat(lp->dn_ctfp, lp->dn_type,
3395 else if (dt_node_is_integer(lp) && dt_node_is_integer(rp))
3397 else if (dt_node_is_strcompat(lp) && dt_node_is_strcompat(rp) &&
3398 (dt_node_is_string(lp) || dt_node_is_string(rp)))
3400 else if (dt_node_is_ptrcompat(lp, rp, NULL, NULL) == 0) {
3403 dt_node_type_name(lp, n1, sizeof (n1)), opstr(op),
3409 dt_node_attr_assign(dnp, dt_attr_min(lp->dn_attr, rp->dn_attr));
3422 lp = dnp->dn_left = dt_node_cook(lp, DT_IDFLG_REF);
3425 lp_is_ptr = dt_node_is_string(lp) ||
3426 (dt_node_is_pointer(lp) && !dt_node_is_vfptr(lp));
3427 lp_is_int = dt_node_is_integer(lp);
3434 dt_type_promote(lp, rp, &ctfp, &type);
3437 ctfp = lp->dn_ctfp;
3438 type = lp->dn_type;
3439 uref = lp->dn_flags & DT_NF_USERLAND;
3445 dt_node_is_ptrcompat(lp, rp, NULL, NULL)) {
3452 dt_node_type_name(lp, n1, sizeof (n1)), opstr(op),
3457 dt_node_attr_assign(dnp, dt_attr_min(lp->dn_attr, rp->dn_attr));
3470 if (lp->dn_kind == DT_NODE_IDENT) {
3471 dt_xcook_ident(lp, dtp->dt_globals,
3475 lp = dnp->dn_left =
3476 dt_node_cook(lp, DT_IDFLG_REF | DT_IDFLG_MOD);
3481 if (!dt_node_is_integer(lp) || !dt_node_is_integer(rp)) {
3489 if (lp->dn_kind == DT_NODE_IDENT) {
3490 dt_xcook_ident(lp, dtp->dt_globals,
3494 lp = dnp->dn_left =
3495 dt_node_cook(lp, DT_IDFLG_REF | DT_IDFLG_MOD);
3500 if (!dt_node_is_arith(lp) || !dt_node_is_arith(rp)) {
3513 if (lp->dn_kind == DT_NODE_IDENT) {
3514 if (lp->dn_op == DT_TOK_AGG) {
3515 dt_xcook_ident(lp, dtp->dt_aggs,
3518 dt_xcook_ident(lp, dtp->dt_globals,
3523 lp = dnp->dn_left = dt_node_cook(lp, 0); /* don't set mod yet */
3535 if (lp->dn_kind == DT_NODE_AGG) {
3536 const char *aname = lp->dn_ident->di_name;
3537 dt_ident_t *oid = lp->dn_ident->di_iarg;
3552 lp->dn_ident->di_lineno);
3554 lp->dn_ident->di_iarg = rp->dn_ident;
3562 if (lp->dn_aggfun != NULL) {
3567 lp->dn_aggfun = rp;
3568 lp = dt_node_cook(lp, DT_IDFLG_MOD);
3573 return (lp);
3595 if (lp->dn_kind == DT_NODE_VAR &&
3596 dt_ident_unref(lp->dn_ident)) {
3597 dt_node_type_assign(lp, ctfp, type, B_FALSE);
3598 dt_ident_type_assign(lp->dn_ident, ctfp, type);
3601 lp->dn_flags |= DT_NF_USERLAND;
3602 lp->dn_ident->di_flags |= DT_IDFLG_USER;
3606 if (lp->dn_kind == DT_NODE_VAR)
3607 lp->dn_ident->di_flags |= DT_IDFLG_MOD;
3614 if (!dt_node_is_string(lp)) {
3615 kind = ctf_type_kind(lp->dn_ctfp,
3616 ctf_type_resolve(lp->dn_ctfp, lp->dn_type));
3622 dt_node_type_name(lp, n1, sizeof (n1)));
3627 ctf_type_compat(lp->dn_ctfp, lp->dn_type, ctfp, type))
3630 if (dt_node_is_argcompat(lp, rp))
3635 dt_node_type_name(lp, n1, sizeof (n1)), opstr(op),
3641 if (lp->dn_kind == DT_NODE_IDENT) {
3642 dt_xcook_ident(lp, dtp->dt_globals,
3646 lp = dnp->dn_left =
3647 dt_node_cook(lp, DT_IDFLG_REF | DT_IDFLG_MOD);
3652 if (dt_node_is_string(lp) || dt_node_is_string(rp)) {
3655 dt_node_type_name(lp, n1, sizeof (n1)), opstr(op),
3664 if (dt_node_is_integer(lp) == 0 ||
3666 if (!dt_node_is_pointer(lp) || dt_node_is_vfptr(lp)) {
3671 dt_node_is_ptrcompat(lp, rp, NULL, NULL) == 0) {
3674 dt_node_type_name(lp, n1, sizeof (n1)),
3689 if (lp->dn_kind == DT_NODE_IDENT) {
3692 if (strcmp(lp->dn_string, "self") == 0) {
3694 } else if (strcmp(lp->dn_string, "this") == 0) {
3714 lp = dnp->dn_left = dt_node_cook(lp, DT_IDFLG_REF);
3721 if ((idp = dt_node_resolve(lp, DT_IDENT_XLSOU)) != NULL ||
3722 (idp = dt_node_resolve(lp, DT_IDENT_XLPTR)) != NULL) {
3739 ctfp = lp->dn_ctfp;
3740 type = ctf_type_resolve(ctfp, lp->dn_type);
3741 uref = lp->dn_flags & DT_NF_USERLAND;
3801 dt_node_attr_assign(dnp, lp->dn_attr);
3807 if (op == DT_TOK_DOT && (lp->dn_flags & DT_NF_LVALUE) &&
3811 if (lp->dn_flags & DT_NF_WRITABLE)
3822 * the top that lp is either a D variable or an aggregation.
3833 if (lp->dn_kind == DT_NODE_AGG) {
3834 if (lp->dn_aggtup != NULL) {
3837 "array\n", lp->dn_ident->di_name);
3840 lp->dn_aggtup = rp;
3841 lp = dt_node_cook(lp, 0);
3846 return (lp);
3849 assert(lp->dn_kind == DT_NODE_VAR);
3850 idp = lp->dn_ident;
3890 * [ VAR ]=lp [ ??? ]=rp
3897 assert(lp->dn_kind == DT_NODE_VAR);
3898 assert(lp->dn_args == NULL);
3901 bcopy(lp, dnp, sizeof (dt_node_t));
3907 dt_node_free(lp);
3914 assert(lp->dn_kind == DT_NODE_TYPE);
3916 dxp = dt_xlator_lookup(dtp, rp, lp, DT_XLATE_FUZZY);
3922 dt_node_type_name(lp, n2, sizeof (n2)));
3925 dnp->dn_ident = dt_xlator_ident(dxp, lp->dn_ctfp, lp->dn_type);
3937 assert(lp->dn_kind == DT_NODE_TYPE);
3940 ltype = ctf_type_resolve(lp->dn_ctfp, lp->dn_type);
3941 lkind = ctf_type_kind(lp->dn_ctfp, ltype);
3953 if (ctf_type_compat(lp->dn_ctfp, lp->dn_type,
3956 else if (dt_node_is_scalar(lp) &&
3959 else if (dt_node_is_void(lp))
3963 else if (dt_node_is_string(lp) && (dt_node_is_scalar(rp) ||
3970 dt_node_type_name(lp, n2, sizeof (n2)));
3973 dt_node_type_propagate(lp, dnp); /* see K&R[A7.5] */
3974 dt_node_attr_assign(dnp, dt_attr_min(lp->dn_attr, rp->dn_attr));
3987 lp = dnp->dn_left = dt_node_cook(lp, DT_IDFLG_REF);
3990 if (dt_node_is_dynamic(lp) || dt_node_is_dynamic(rp)) {
3995 if (dt_node_is_actfunc(lp) || dt_node_is_actfunc(rp)) {
4001 dt_node_attr_assign(dnp, dt_attr_min(lp->dn_attr, rp->dn_attr));
4021 dt_node_name(lp, n1, sizeof (n1)));
4049 dt_node_t *lp, *rp;
4054 lp = dnp->dn_left = dt_node_cook(dnp->dn_left, DT_IDFLG_REF);
4062 if (dt_node_is_dynamic(lp) || dt_node_is_dynamic(rp)) {
4072 if (ctf_type_compat(lp->dn_ctfp, lp->dn_type,
4074 ctfp = lp->dn_ctfp;
4075 type = lp->dn_type;
4076 } else if (dt_node_is_integer(lp) && dt_node_is_integer(rp)) {
4077 dt_type_promote(lp, rp, &ctfp, &type);
4078 } else if (dt_node_is_strcompat(lp) && dt_node_is_strcompat(rp) &&
4079 (dt_node_is_string(lp) || dt_node_is_string(rp))) {
4082 } else if (dt_node_is_ptrcompat(lp, rp, &ctfp, &type) == 0) {
4087 if (dt_node_is_actfunc(lp) || dt_node_is_actfunc(rp)) {
4094 dt_attr_min(lp->dn_attr, rp->dn_attr)));
4610 dt_node_link(dt_node_t *lp, dt_node_t *rp)
4614 if (lp == NULL)
4617 return (lp);
4619 for (dnp = lp; dnp->dn_list != NULL; dnp = dnp->dn_list)
4623 return (lp);