Lines Matching refs:lp

319 dt_type_promote(dt_node_t *lp, dt_node_t *rp, ctf_file_t **ofp, ctf_id_t *otype)
321 ctf_file_t *lfp = lp->dn_ctfp;
322 ctf_id_t ltype = lp->dn_type;
390 dt_node_promote(dt_node_t *lp, dt_node_t *rp, dt_node_t *dnp)
392 dt_type_promote(lp, rp, &dnp->dn_ctfp, &dnp->dn_type);
394 dt_node_attr_assign(dnp, dt_attr_min(lp->dn_attr, rp->dn_attr));
1003 dt_node_is_ptrcompat(const dt_node_t *lp, const dt_node_t *rp,
1006 ctf_file_t *lfp = lp->dn_ctfp;
1017 assert(lp->dn_flags & DT_NF_COOKED);
1020 if (dt_node_is_dynamic(lp) || dt_node_is_dynamic(rp))
1023 lp_is_int = dt_node_is_integer(lp);
1029 if (lp_is_int && (lp->dn_kind != DT_NODE_INT || lp->dn_value != 0))
1030 return (0); /* fail if lp is an integer that isn't 0 constant */
1036 (lp->dn_flags & DT_NF_USERLAND) ^ (rp->dn_flags & DT_NF_USERLAND)))
1045 lbase = ctf_type_resolve(lfp, lp->dn_type);
1115 dt_node_is_argcompat(const dt_node_t *lp, const dt_node_t *rp)
1117 ctf_file_t *lfp = lp->dn_ctfp;
1120 assert(lp->dn_flags & DT_NF_COOKED);
1123 if (dt_node_is_integer(lp) && dt_node_is_integer(rp))
1126 if (dt_node_is_strcompat(lp) && dt_node_is_strcompat(rp))
1129 if (dt_node_is_stack(lp) && dt_node_is_stack(rp))
1132 if (dt_node_is_symaddr(lp) && dt_node_is_symaddr(rp))
1135 if (dt_node_is_usymaddr(lp) && dt_node_is_usymaddr(rp))
1138 switch (ctf_type_kind(lfp, ctf_type_resolve(lfp, lp->dn_type))) {
1142 return (ctf_type_compat(lfp, lp->dn_type, rfp, rp->dn_type));
1144 return (dt_node_is_ptrcompat(lp, rp, NULL, NULL));
1864 dt_node_op2(int op, dt_node_t *lp, dt_node_t *rp)
1882 if (lp->dn_kind == DT_NODE_INT && rp->dn_kind == DT_NODE_INT) {
1883 uintmax_t l = lp->dn_value;
1906 dt_node_promote(lp, rp, dnp);
1910 dt_node_promote(lp, rp, dnp);
1914 dt_node_promote(lp, rp, dnp);
1927 dt_node_promote(lp, rp, dnp);
1936 dt_node_promote(lp, rp, dnp);
1945 dt_node_promote(lp, rp, dnp);
1954 dt_node_promote(lp, rp, dnp);
1964 dt_node_type_propagate(lp, dnp);
1966 dt_attr_min(lp->dn_attr, rp->dn_attr));
1970 dt_node_type_propagate(lp, dnp);
1972 dt_attr_min(lp->dn_attr, rp->dn_attr));
1976 dt_node_promote(lp, rp, dnp);
1980 dt_node_promote(lp, rp, dnp);
1984 dt_node_promote(lp, rp, dnp);
1987 dt_node_promote(lp, rp, dnp);
1994 dt_node_promote(lp, rp, dnp);
2006 dt_node_free(lp);
2021 dt_node_is_integer(lp)) {
2023 size_t dstsize = dt_node_type_size(lp);
2025 if ((dstsize < srcsize) || ((lp->dn_flags & DT_NF_SIGNED) ^
2032 if (lp->dn_flags & DT_NF_SIGNED)
2038 dt_node_type_propagate(lp, rp);
2039 dt_node_attr_assign(rp, dt_attr_min(lp->dn_attr, rp->dn_attr));
2040 dt_node_free(lp);
2052 dnp->dn_left = lp;
2059 dt_node_op3(dt_node_t *expr, dt_node_t *lp, dt_node_t *rp)
2064 return (expr->dn_value != 0 ? lp : rp);
2069 dnp->dn_left = lp;
3082 dt_node_t *lp = dnp->dn_left;
3103 if (lp->dn_kind == DT_NODE_IDENT) {
3107 if (lp->dn_op == DT_TOK_AGG) {
3109 idp = dt_idhash_lookup(dhp, lp->dn_string + 1);
3114 &yypcb->pcb_globals, lp->dn_string);
3119 dt_xcook_ident(lp, dhp, idkind, B_TRUE);
3121 dt_xcook_ident(lp, dhp, idp->di_kind, B_FALSE);
3123 lp = dnp->dn_left = dt_node_cook(lp, 0);
3127 * (a) lp is a DT_IDENT_ARRAY variable that has already been
3129 * (b) lp is a non-ARRAY variable that has already been given
3131 * (c) lp is neither a variable nor an aggregation
3133 if (lp->dn_kind == DT_NODE_VAR) {
3134 if (lp->dn_ident->di_kind == DT_IDENT_ARRAY) {
3135 if (lp->dn_args != NULL)
3137 } else if (!dt_ident_unref(lp->dn_ident))
3139 } else if (lp->dn_kind != DT_NODE_AGG)
3147 lp = dnp->dn_left = dt_node_cook(lp, DT_IDFLG_REF);
3150 if (!dt_node_is_integer(lp) || !dt_node_is_integer(rp)) {
3155 dt_node_promote(lp, rp, dnp); /* see K&R[A7.11-13] */
3160 lp = dnp->dn_left = dt_node_cook(lp, DT_IDFLG_REF);
3163 if (!dt_node_is_integer(lp) || !dt_node_is_integer(rp)) {
3168 dt_node_type_propagate(lp, dnp); /* see K&R[A7.8] */
3169 dt_node_attr_assign(dnp, dt_attr_min(lp->dn_attr, rp->dn_attr));
3173 lp = dnp->dn_left = dt_node_cook(lp, DT_IDFLG_REF);
3176 if (!dt_node_is_integer(lp) || !dt_node_is_integer(rp)) {
3181 dt_node_promote(lp, rp, dnp); /* see K&R[A7.6] */
3186 lp = dnp->dn_left = dt_node_cook(lp, DT_IDFLG_REF);
3189 if (!dt_node_is_arith(lp) || !dt_node_is_arith(rp)) {
3194 dt_node_promote(lp, rp, dnp); /* see K&R[A7.6] */
3200 lp = dnp->dn_left = dt_node_cook(lp, DT_IDFLG_REF);
3203 if (!dt_node_is_scalar(lp) || !dt_node_is_scalar(rp)) {
3209 dt_node_attr_assign(dnp, dt_attr_min(lp->dn_attr, rp->dn_attr));
3226 lp = dnp->dn_left = dt_node_cook(lp, DT_IDFLG_REF);
3228 kind = ctf_type_kind(lp->dn_ctfp,
3229 ctf_type_resolve(lp->dn_ctfp, lp->dn_type));
3233 lp->dn_ctfp, lp->dn_type, rp->dn_string, &val) == 0) {
3241 dt_node_type_name(lp, n1, sizeof (n1)),
3252 dt_node_type_assign(rp, lp->dn_ctfp, lp->dn_type);
3269 if (ctf_type_compat(lp->dn_ctfp, lp->dn_type,
3272 else if (dt_node_is_integer(lp) && dt_node_is_integer(rp))
3274 else if (dt_node_is_strcompat(lp) && dt_node_is_strcompat(rp) &&
3275 (dt_node_is_string(lp) || dt_node_is_string(rp)))
3277 else if (dt_node_is_ptrcompat(lp, rp, NULL, NULL) == 0) {
3280 dt_node_type_name(lp, n1, sizeof (n1)), opstr(op),
3285 dt_node_attr_assign(dnp, dt_attr_min(lp->dn_attr, rp->dn_attr));
3298 lp = dnp->dn_left = dt_node_cook(lp, DT_IDFLG_REF);
3301 lp_is_ptr = dt_node_is_string(lp) ||
3302 (dt_node_is_pointer(lp) && !dt_node_is_vfptr(lp));
3303 lp_is_int = dt_node_is_integer(lp);
3310 dt_type_promote(lp, rp, &ctfp, &type);
3313 ctfp = lp->dn_ctfp;
3314 type = lp->dn_type;
3315 uref = lp->dn_flags & DT_NF_USERLAND;
3321 dt_node_is_ptrcompat(lp, rp, NULL, NULL)) {
3328 dt_node_type_name(lp, n1, sizeof (n1)), opstr(op),
3333 dt_node_attr_assign(dnp, dt_attr_min(lp->dn_attr, rp->dn_attr));
3346 if (lp->dn_kind == DT_NODE_IDENT) {
3347 dt_xcook_ident(lp, dtp->dt_globals,
3351 lp = dnp->dn_left =
3352 dt_node_cook(lp, DT_IDFLG_REF | DT_IDFLG_MOD);
3357 if (!dt_node_is_integer(lp) || !dt_node_is_integer(rp)) {
3365 if (lp->dn_kind == DT_NODE_IDENT) {
3366 dt_xcook_ident(lp, dtp->dt_globals,
3370 lp = dnp->dn_left =
3371 dt_node_cook(lp, DT_IDFLG_REF | DT_IDFLG_MOD);
3376 if (!dt_node_is_arith(lp) || !dt_node_is_arith(rp)) {
3389 if (lp->dn_kind == DT_NODE_IDENT) {
3390 if (lp->dn_op == DT_TOK_AGG) {
3391 dt_xcook_ident(lp, dtp->dt_aggs,
3394 dt_xcook_ident(lp, dtp->dt_globals,
3399 lp = dnp->dn_left = dt_node_cook(lp, 0); /* don't set mod yet */
3411 if (lp->dn_kind == DT_NODE_AGG) {
3412 const char *aname = lp->dn_ident->di_name;
3413 dt_ident_t *oid = lp->dn_ident->di_iarg;
3428 lp->dn_ident->di_lineno);
3430 lp->dn_ident->di_iarg = rp->dn_ident;
3438 if (lp->dn_aggfun != NULL) {
3443 lp->dn_aggfun = rp;
3444 lp = dt_node_cook(lp, DT_IDFLG_MOD);
3449 return (lp);
3471 if (lp->dn_kind == DT_NODE_VAR &&
3472 dt_ident_unref(lp->dn_ident)) {
3473 dt_node_type_assign(lp, ctfp, type);
3474 dt_ident_type_assign(lp->dn_ident, ctfp, type);
3477 lp->dn_flags |= DT_NF_USERLAND;
3478 lp->dn_ident->di_flags |= DT_IDFLG_USER;
3482 if (lp->dn_kind == DT_NODE_VAR)
3483 lp->dn_ident->di_flags |= DT_IDFLG_MOD;
3490 if (!dt_node_is_string(lp)) {
3491 kind = ctf_type_kind(lp->dn_ctfp,
3492 ctf_type_resolve(lp->dn_ctfp, lp->dn_type));
3498 dt_node_type_name(lp, n1, sizeof (n1)));
3503 ctf_type_compat(lp->dn_ctfp, lp->dn_type, ctfp, type))
3506 if (dt_node_is_argcompat(lp, rp))
3511 dt_node_type_name(lp, n1, sizeof (n1)), opstr(op),
3517 if (lp->dn_kind == DT_NODE_IDENT) {
3518 dt_xcook_ident(lp, dtp->dt_globals,
3522 lp = dnp->dn_left =
3523 dt_node_cook(lp, DT_IDFLG_REF | DT_IDFLG_MOD);
3528 if (dt_node_is_string(lp) || dt_node_is_string(rp)) {
3531 dt_node_type_name(lp, n1, sizeof (n1)), opstr(op),
3540 if (dt_node_is_integer(lp) == 0 ||
3542 if (!dt_node_is_pointer(lp) || dt_node_is_vfptr(lp)) {
3547 dt_node_is_ptrcompat(lp, rp, NULL, NULL) == 0) {
3550 dt_node_type_name(lp, n1, sizeof (n1)),
3556 if (!(lp->dn_flags & DT_NF_LVALUE)) {
3562 if (!(lp->dn_flags & DT_NF_WRITABLE)) {
3567 dt_node_type_propagate(lp, dnp); /* see K&R[A7.17] */
3568 dt_node_attr_assign(dnp, dt_attr_min(lp->dn_attr, rp->dn_attr));
3576 if (lp->dn_kind == DT_NODE_IDENT &&
3577 strcmp(lp->dn_string, "self") == 0) {
3595 if (lp->dn_kind == DT_NODE_IDENT &&
3596 strcmp(lp->dn_string, "this") == 0) {
3613 lp = dnp->dn_left = dt_node_cook(lp, DT_IDFLG_REF);
3620 if ((idp = dt_node_resolve(lp, DT_IDENT_XLSOU)) != NULL ||
3621 (idp = dt_node_resolve(lp, DT_IDENT_XLPTR)) != NULL) {
3638 ctfp = lp->dn_ctfp;
3639 type = ctf_type_resolve(ctfp, lp->dn_type);
3640 uref = lp->dn_flags & DT_NF_USERLAND;
3700 dt_node_attr_assign(dnp, lp->dn_attr);
3706 if (op == DT_TOK_DOT && (lp->dn_flags & DT_NF_LVALUE) &&
3710 if (lp->dn_flags & DT_NF_WRITABLE)
3721 * the top that lp is either a D variable or an aggregation.
3732 if (lp->dn_kind == DT_NODE_AGG) {
3733 if (lp->dn_aggtup != NULL) {
3736 "array\n", lp->dn_ident->di_name);
3739 lp->dn_aggtup = rp;
3740 lp = dt_node_cook(lp, 0);
3745 return (lp);
3748 assert(lp->dn_kind == DT_NODE_VAR);
3749 idp = lp->dn_ident;
3789 * [ VAR ]=lp [ ??? ]=rp
3796 assert(lp->dn_kind == DT_NODE_VAR);
3797 assert(lp->dn_args == NULL);
3800 bcopy(lp, dnp, sizeof (dt_node_t));
3806 dt_node_free(lp);
3813 assert(lp->dn_kind == DT_NODE_TYPE);
3815 dxp = dt_xlator_lookup(dtp, rp, lp, DT_XLATE_FUZZY);
3821 dt_node_type_name(lp, n2, sizeof (n2)));
3824 dnp->dn_ident = dt_xlator_ident(dxp, lp->dn_ctfp, lp->dn_type);
3835 assert(lp->dn_kind == DT_NODE_TYPE);
3838 ltype = ctf_type_resolve(lp->dn_ctfp, lp->dn_type);
3839 lkind = ctf_type_kind(lp->dn_ctfp, ltype);
3851 if (ctf_type_compat(lp->dn_ctfp, lp->dn_type,
3854 else if (dt_node_is_scalar(lp) &&
3857 else if (dt_node_is_void(lp))
3861 else if (dt_node_is_string(lp) && (dt_node_is_scalar(rp) ||
3868 dt_node_type_name(lp, n2, sizeof (n2)));
3871 dt_node_type_propagate(lp, dnp); /* see K&R[A7.5] */
3872 dt_node_attr_assign(dnp, dt_attr_min(lp->dn_attr, rp->dn_attr));
3877 lp = dnp->dn_left = dt_node_cook(lp, DT_IDFLG_REF);
3880 if (dt_node_is_dynamic(lp) || dt_node_is_dynamic(rp)) {
3885 if (dt_node_is_actfunc(lp) || dt_node_is_actfunc(rp)) {
3891 dt_node_attr_assign(dnp, dt_attr_min(lp->dn_attr, rp->dn_attr));
3911 dt_node_name(lp, n1, sizeof (n1)));
3939 dt_node_t *lp, *rp;
3944 lp = dnp->dn_left = dt_node_cook(dnp->dn_left, DT_IDFLG_REF);
3952 if (dt_node_is_dynamic(lp) || dt_node_is_dynamic(rp)) {
3962 if (ctf_type_compat(lp->dn_ctfp, lp->dn_type,
3964 ctfp = lp->dn_ctfp;
3965 type = lp->dn_type;
3966 } else if (dt_node_is_integer(lp) && dt_node_is_integer(rp)) {
3967 dt_type_promote(lp, rp, &ctfp, &type);
3968 } else if (dt_node_is_strcompat(lp) && dt_node_is_strcompat(rp) &&
3969 (dt_node_is_string(lp) || dt_node_is_string(rp))) {
3972 } else if (dt_node_is_ptrcompat(lp, rp, &ctfp, &type) == 0) {
3977 if (dt_node_is_actfunc(lp) || dt_node_is_actfunc(rp)) {
3984 dt_attr_min(lp->dn_attr, rp->dn_attr)));
4495 dt_node_link(dt_node_t *lp, dt_node_t *rp)
4499 if (lp == NULL)
4502 return (lp);
4504 for (dnp = lp; dnp->dn_list != NULL; dnp = dnp->dn_list)
4508 return (lp);