1 /* 2 * Copyright (C) 2002-2009, Parrot Foundation. 3 */ 4 5 #ifndef PARROT_IMCC_SYMREG_H_GUARD 6 #define PARROT_IMCC_SYMREG_H_GUARD 7 8 /* types */ 9 10 #define VARTYPE_BIT(n) ((UINTVAL)1 << (n)) 11 enum VARTYPE { /* variable type can be */ 12 VTCONST = VARTYPE_BIT(0), /* constant */ 13 VTREG = VARTYPE_BIT(1), /* register */ 14 VTIDENTIFIER = VARTYPE_BIT(2), /* identifier */ 15 VTADDRESS = VARTYPE_BIT(3), /* address */ 16 VTREGKEY = VARTYPE_BIT(4), /* parrot [key;key..]), including registers */ 17 VTPASM = VARTYPE_BIT(5), /* parrot register), colored from .emit */ 18 VT_CONSTP = VARTYPE_BIT(6), /* pointer to constant value */ 19 VT_PCC_SUB = VARTYPE_BIT(7), /* PCC subroutine call */ 20 VT_FLAT = VARTYPE_BIT(8), /* var :flat */ 21 VT_OPTIONAL = VARTYPE_BIT(9), /* var :optional */ 22 /* include/parrot/packfile.h */ 23 VT_ENCODED = VARTYPE_BIT(16), /* unicode string constant */ 24 VT_OPT_FLAG = VARTYPE_BIT(17), /* var :opt_flag */ 25 VT_NAMED = VARTYPE_BIT(18), /* var :named(name) */ 26 VT_CALL_SIG = VARTYPE_BIT(19) 27 }; 28 #undef VARTYPE_BIT 29 30 /* this VARTYPE needs register allocation and such */ 31 #define VTREGISTER (VTREG | VTIDENTIFIER | VTREGKEY | VTPASM) 32 #define REG_NEEDS_ALLOC(r) ((r)->type & VTREGISTER) 33 34 enum USAGE { 35 U_KEYED = 1 << 0, /* array, hash, keyed */ 36 U_NEW = 1 << 1, /* PMC was inited */ 37 U_GLOBAL = 1 << 3, /* symbol is global (fixup) */ 38 U_LEXICAL = 1 << 4, /* symbol is lexical */ 39 U_FIXUP = 1 << 5, /* maybe not global, force fixup */ 40 U_SUBID_LOOKUP = 1 << 6, /* .const 'Sub' lookup is done by subid */ 41 U_LEXINFO_LOOKUP = 1 << 7 /* .const 'LexInfo' lookup is done by subid */ 42 }; 43 44 typedef struct _SymReg { 45 char *name; 46 struct _SymReg *subid; 47 struct _SymReg *nextkey; /* keys */ 48 struct _SymReg *reg; /* key->register for VTREGKEYs */ 49 struct pcc_sub_t *pcc_sub; /* PCC subroutine */ 50 struct _SymReg *used; /* used register in invoke */ 51 struct _SymReg *next; /* used in the symbols hash */ 52 struct _Instruction *first_ins; /* first and last instruction */ 53 struct _Instruction *last_ins; /* this symbol is in */ 54 INTVAL type; /* Variable type */ 55 INTVAL usage; /* s. USAGE above */ 56 int set; /* parent register set/file */ 57 int want_regno; /* wanted register number */ 58 INTVAL color; /* Color: parrot register number 59 * and const table index of VTCONST */ 60 int offset; /* used for label fixup */ 61 int use_count; /* How often this symbol is used */ 62 int lhs_use_count; /* Frequency of writing to this symbol*/ 63 int pmc_type; /* class enum */ 64 } SymReg; 65 66 typedef struct _SymHash { 67 SymReg **data; 68 unsigned int size; 69 unsigned int entries; 70 } SymHash; 71 72 /* namespaces */ 73 74 typedef struct ident_t Identifier; 75 struct ident_t { 76 char *name; 77 Identifier *next; 78 }; 79 80 typedef struct namespace_t Namespace; 81 struct namespace_t { 82 Namespace *parent; 83 char *name; 84 Identifier *idents; 85 }; 86 87 typedef enum { 88 P_NONE = 0x00, /* 0<<0 */ 89 P_NEED_LEX = 0x01, /* 1<<0 */ 90 P_VTABLE = SUB_COMP_FLAG_VTABLE, /* 1<<1 0x2 */ 91 P_METHOD = SUB_COMP_FLAG_METHOD, /* 1<<2 0x4 */ 92 P_ANON = SUB_FLAG_PF_ANON, /* 1<<3 0x8 - private3 */ 93 P_MAIN = SUB_FLAG_PF_MAIN, /* 1<<4 0x10 - private4 */ 94 P_LOAD = SUB_FLAG_PF_LOAD, /* 1<<5 0x20 - private5 */ 95 P_IMMEDIATE = SUB_FLAG_PF_IMMEDIATE, /* 1<<6 0x40 - private6 */ 96 P_POSTCOMP = SUB_FLAG_PF_POSTCOMP, /* 1<<7 0x80 - private7 */ 97 P_INIT = SUB_COMP_FLAG_PF_INIT, /* 1<<10 0x400 - 10 */ 98 P_NSENTRY = SUB_COMP_FLAG_NSENTRY /* 1<<11 0x800 - 11 */ 99 } pragma_enum_t; 100 101 typedef struct pcc_sub_t { 102 SymReg *sub; 103 SymReg *cc; 104 SymReg **args; 105 SymReg **multi; 106 SymReg **ret; 107 SymReg *object; 108 SymReg **flags; /* "load", "init", etc */ 109 int *arg_flags; /* :slurpy, :optional, ... */ 110 int *ret_flags; /* :slurpy, :optional, ... */ 111 int nargs; 112 int nret; 113 int nmulti; 114 int nflags; 115 int yield; 116 int tailcall; 117 int label; 118 INTVAL pragma; 119 } pcc_sub_t; 120 121 enum uniq_t { 122 U_add_once, 123 U_add_uniq_label, 124 U_add_uniq_sub, 125 U_add_all 126 }; 127 128 /* functions */ 129 130 /* HEADERIZER BEGIN: compilers/imcc/symreg.c */ 131 /* Don't modify between HEADERIZER BEGIN / HEADERIZER END. Your changes will be lost. */ 132 133 PARROT_CAN_RETURN_NULL 134 PARROT_WARN_UNUSED_RESULT 135 SymReg * _find_sym( 136 ARGMOD(imc_info_t * imcc), 137 ARGIN_NULLOK(const Namespace *nspace), 138 ARGIN(const SymHash *hsh), 139 ARGIN(const char *name)) 140 __attribute__nonnull__(1) 141 __attribute__nonnull__(3) 142 __attribute__nonnull__(4) 143 FUNC_MODIFIES(* imcc); 144 145 PARROT_CAN_RETURN_NULL 146 PARROT_WARN_UNUSED_RESULT 147 SymReg * _get_sym(ARGIN(const SymHash *hsh), ARGIN(const char *name)) 148 __attribute__nonnull__(1) 149 __attribute__nonnull__(2); 150 151 PARROT_WARN_UNUSED_RESULT 152 PARROT_CANNOT_RETURN_NULL 153 SymReg * _mk_address( 154 ARGMOD(imc_info_t * imcc), 155 ARGMOD(SymHash *hsh), 156 ARGIN(const char *name), 157 int uniq) 158 __attribute__nonnull__(1) 159 __attribute__nonnull__(2) 160 __attribute__nonnull__(3) 161 FUNC_MODIFIES(* imcc) 162 FUNC_MODIFIES(*hsh); 163 164 PARROT_WARN_UNUSED_RESULT 165 PARROT_CANNOT_RETURN_NULL 166 SymReg * _mk_const( 167 ARGMOD(imc_info_t * imcc), 168 ARGMOD(SymHash *hsh), 169 ARGIN(const char *name), 170 int t) 171 __attribute__nonnull__(1) 172 __attribute__nonnull__(2) 173 __attribute__nonnull__(3) 174 FUNC_MODIFIES(* imcc) 175 FUNC_MODIFIES(*hsh); 176 177 void _store_symreg( 178 ARGMOD(imc_info_t * imcc), 179 ARGMOD(SymHash *hsh), 180 ARGMOD(SymReg *r)) 181 __attribute__nonnull__(1) 182 __attribute__nonnull__(2) 183 __attribute__nonnull__(3) 184 FUNC_MODIFIES(* imcc) 185 FUNC_MODIFIES(*hsh) 186 FUNC_MODIFIES(*r); 187 188 void add_namespace(ARGMOD(imc_info_t * imcc), ARGMOD(IMC_Unit *unit)) 189 __attribute__nonnull__(1) 190 __attribute__nonnull__(2) 191 FUNC_MODIFIES(* imcc) 192 FUNC_MODIFIES(*unit); 193 194 void add_pcc_arg( 195 ARGMOD(imc_info_t * imcc), 196 ARGMOD(SymReg *r), 197 ARGMOD(SymReg *arg)) 198 __attribute__nonnull__(1) 199 __attribute__nonnull__(2) 200 __attribute__nonnull__(3) 201 FUNC_MODIFIES(* imcc) 202 FUNC_MODIFIES(*r) 203 FUNC_MODIFIES(*arg); 204 205 void add_pcc_cc(ARGMOD(SymReg *r), ARGIN(SymReg *arg)) 206 __attribute__nonnull__(1) 207 __attribute__nonnull__(2) 208 FUNC_MODIFIES(*r); 209 210 void add_pcc_flag_str( 211 ARGMOD(imc_info_t * imcc), 212 ARGMOD(SymReg * r), 213 ARGIN(SymReg * arg)) 214 __attribute__nonnull__(1) 215 __attribute__nonnull__(2) 216 __attribute__nonnull__(3) 217 FUNC_MODIFIES(* imcc) 218 FUNC_MODIFIES(* r); 219 220 void add_pcc_multi( 221 ARGMOD(imc_info_t * imcc), 222 ARGMOD(SymReg *r), 223 ARGIN_NULLOK(SymReg *arg)) 224 __attribute__nonnull__(1) 225 __attribute__nonnull__(2) 226 FUNC_MODIFIES(* imcc) 227 FUNC_MODIFIES(*r); 228 229 void add_pcc_result( 230 ARGMOD(imc_info_t * imcc), 231 ARGMOD(SymReg *r), 232 ARGMOD(SymReg *arg)) 233 __attribute__nonnull__(1) 234 __attribute__nonnull__(2) 235 __attribute__nonnull__(3) 236 FUNC_MODIFIES(* imcc) 237 FUNC_MODIFIES(*r) 238 FUNC_MODIFIES(*arg); 239 240 void add_pcc_sub(ARGMOD(SymReg *r), ARGIN(SymReg *arg)) 241 __attribute__nonnull__(1) 242 __attribute__nonnull__(2) 243 FUNC_MODIFIES(*r); 244 245 void clear_globals(ARGMOD(imc_info_t * imcc)) 246 __attribute__nonnull__(1) 247 FUNC_MODIFIES(* imcc); 248 249 void clear_locals(ARGIN_NULLOK(IMC_Unit *unit)); 250 void clear_sym_hash(ARGMOD(SymHash *hsh)) 251 __attribute__nonnull__(1) 252 FUNC_MODIFIES(*hsh); 253 254 void create_symhash(ARGMOD(imc_info_t * imcc), ARGOUT(SymHash *hash)) 255 __attribute__nonnull__(1) 256 __attribute__nonnull__(2) 257 FUNC_MODIFIES(* imcc) 258 FUNC_MODIFIES(*hash); 259 260 PARROT_MALLOC 261 PARROT_CANNOT_RETURN_NULL 262 SymReg * dup_sym(ARGMOD(imc_info_t * imcc), ARGIN(const SymReg *r)) 263 __attribute__nonnull__(1) 264 __attribute__nonnull__(2) 265 FUNC_MODIFIES(* imcc); 266 267 PARROT_CAN_RETURN_NULL 268 PARROT_WARN_UNUSED_RESULT 269 SymReg * find_sym(ARGMOD(imc_info_t * imcc), ARGIN(const char *name)) 270 __attribute__nonnull__(1) 271 __attribute__nonnull__(2) 272 FUNC_MODIFIES(* imcc); 273 274 void free_pcc_sub(ARGMOD(pcc_sub_t *sub)) 275 __attribute__nonnull__(1) 276 FUNC_MODIFIES(*sub); 277 278 void free_sym(ARGMOD(SymReg *r)) 279 __attribute__nonnull__(1) 280 FUNC_MODIFIES(*r); 281 282 PARROT_CAN_RETURN_NULL 283 PARROT_WARN_UNUSED_RESULT 284 SymReg * get_sym(ARGMOD(imc_info_t * imcc), ARGIN(const char *name)) 285 __attribute__nonnull__(1) 286 __attribute__nonnull__(2) 287 FUNC_MODIFIES(* imcc); 288 289 PARROT_PURE_FUNCTION 290 unsigned int hash_str(ARGIN(const char *str)) 291 __attribute__nonnull__(1); 292 293 PARROT_MALLOC 294 PARROT_CANNOT_RETURN_NULL 295 SymReg * link_keys( 296 ARGMOD(imc_info_t * imcc), 297 int nargs, 298 ARGMOD(SymReg **keys), 299 int force) 300 __attribute__nonnull__(1) 301 __attribute__nonnull__(3) 302 FUNC_MODIFIES(* imcc) 303 FUNC_MODIFIES(*keys); 304 305 PARROT_WARN_UNUSED_RESULT 306 PARROT_CANNOT_RETURN_NULL 307 SymReg * mk_const(ARGMOD(imc_info_t * imcc), ARGIN(const char *name), int t) 308 __attribute__nonnull__(1) 309 __attribute__nonnull__(2) 310 FUNC_MODIFIES(* imcc); 311 312 PARROT_CANNOT_RETURN_NULL 313 PARROT_IGNORABLE_RESULT 314 SymReg * mk_const_ident( 315 ARGMOD(imc_info_t * imcc), 316 ARGIN(const char *name), 317 int t, 318 ARGMOD(SymReg *val), 319 int global) 320 __attribute__nonnull__(1) 321 __attribute__nonnull__(2) 322 __attribute__nonnull__(4) 323 FUNC_MODIFIES(* imcc) 324 FUNC_MODIFIES(*val); 325 326 PARROT_CANNOT_RETURN_NULL 327 PARROT_IGNORABLE_RESULT 328 SymReg * mk_ident( 329 ARGMOD(imc_info_t * imcc), 330 ARGIN(const char *name), 331 int t, 332 INTVAL type) 333 __attribute__nonnull__(1) 334 __attribute__nonnull__(2) 335 FUNC_MODIFIES(* imcc); 336 337 PARROT_WARN_UNUSED_RESULT 338 PARROT_CANNOT_RETURN_NULL 339 SymReg * mk_label_address( 340 ARGMOD(imc_info_t * imcc), 341 ARGIN(const char *name)) 342 __attribute__nonnull__(1) 343 __attribute__nonnull__(2) 344 FUNC_MODIFIES(* imcc); 345 346 PARROT_WARN_UNUSED_RESULT 347 PARROT_CANNOT_RETURN_NULL 348 SymReg * mk_local_label(ARGMOD(imc_info_t * imcc), ARGIN(const char *name)) 349 __attribute__nonnull__(1) 350 __attribute__nonnull__(2) 351 FUNC_MODIFIES(* imcc); 352 353 PARROT_WARN_UNUSED_RESULT 354 PARROT_CANNOT_RETURN_NULL 355 SymReg * mk_pasm_reg(ARGMOD(imc_info_t * imcc), ARGIN(const char *name)) 356 __attribute__nonnull__(1) 357 __attribute__nonnull__(2) 358 FUNC_MODIFIES(* imcc); 359 360 PARROT_WARN_UNUSED_RESULT 361 PARROT_CANNOT_RETURN_NULL 362 SymReg * mk_pcc_sub( 363 ARGMOD(imc_info_t * imcc), 364 ARGIN(const char *name), 365 int proto) 366 __attribute__nonnull__(1) 367 __attribute__nonnull__(2) 368 FUNC_MODIFIES(* imcc); 369 370 PARROT_WARN_UNUSED_RESULT 371 PARROT_CANNOT_RETURN_NULL 372 SymReg * mk_sub_address(ARGMOD(imc_info_t * imcc), ARGIN(const char *name)) 373 __attribute__nonnull__(1) 374 __attribute__nonnull__(2) 375 FUNC_MODIFIES(* imcc); 376 377 PARROT_WARN_UNUSED_RESULT 378 PARROT_CANNOT_RETURN_NULL 379 SymReg * mk_sub_label(ARGMOD(imc_info_t * imcc), ARGIN(const char *name)) 380 __attribute__nonnull__(1) 381 __attribute__nonnull__(2) 382 FUNC_MODIFIES(* imcc); 383 384 PARROT_WARN_UNUSED_RESULT 385 PARROT_CANNOT_RETURN_NULL 386 SymReg * mk_symreg( 387 ARGMOD(imc_info_t * imcc), 388 ARGIN(const char *name), 389 int t) 390 __attribute__nonnull__(1) 391 __attribute__nonnull__(2) 392 FUNC_MODIFIES(* imcc); 393 394 PARROT_WARN_UNUSED_RESULT 395 PARROT_CANNOT_RETURN_NULL 396 SymReg * mk_temp_reg(ARGMOD(imc_info_t * imcc), int t) 397 __attribute__nonnull__(1) 398 FUNC_MODIFIES(* imcc); 399 400 void store_symreg(ARGMOD(imc_info_t * imcc), ARGMOD(SymReg *r)) 401 __attribute__nonnull__(1) 402 __attribute__nonnull__(2) 403 FUNC_MODIFIES(* imcc) 404 FUNC_MODIFIES(*r); 405 406 PARROT_MALLOC 407 PARROT_WARN_UNUSED_RESULT 408 PARROT_CANNOT_RETURN_NULL 409 char * symreg_to_str(ARGIN(const SymReg *s)) 410 __attribute__nonnull__(1); 411 412 #define ASSERT_ARGS__find_sym __attribute__unused__ int _ASSERT_ARGS_CHECK = (\ 413 PARROT_ASSERT_ARG(imcc) \ 414 , PARROT_ASSERT_ARG(hsh) \ 415 , PARROT_ASSERT_ARG(name)) 416 #define ASSERT_ARGS__get_sym __attribute__unused__ int _ASSERT_ARGS_CHECK = (\ 417 PARROT_ASSERT_ARG(hsh) \ 418 , PARROT_ASSERT_ARG(name)) 419 #define ASSERT_ARGS__mk_address __attribute__unused__ int _ASSERT_ARGS_CHECK = (\ 420 PARROT_ASSERT_ARG(imcc) \ 421 , PARROT_ASSERT_ARG(hsh) \ 422 , PARROT_ASSERT_ARG(name)) 423 #define ASSERT_ARGS__mk_const __attribute__unused__ int _ASSERT_ARGS_CHECK = (\ 424 PARROT_ASSERT_ARG(imcc) \ 425 , PARROT_ASSERT_ARG(hsh) \ 426 , PARROT_ASSERT_ARG(name)) 427 #define ASSERT_ARGS__store_symreg __attribute__unused__ int _ASSERT_ARGS_CHECK = (\ 428 PARROT_ASSERT_ARG(imcc) \ 429 , PARROT_ASSERT_ARG(hsh) \ 430 , PARROT_ASSERT_ARG(r)) 431 #define ASSERT_ARGS_add_namespace __attribute__unused__ int _ASSERT_ARGS_CHECK = (\ 432 PARROT_ASSERT_ARG(imcc) \ 433 , PARROT_ASSERT_ARG(unit)) 434 #define ASSERT_ARGS_add_pcc_arg __attribute__unused__ int _ASSERT_ARGS_CHECK = (\ 435 PARROT_ASSERT_ARG(imcc) \ 436 , PARROT_ASSERT_ARG(r) \ 437 , PARROT_ASSERT_ARG(arg)) 438 #define ASSERT_ARGS_add_pcc_cc __attribute__unused__ int _ASSERT_ARGS_CHECK = (\ 439 PARROT_ASSERT_ARG(r) \ 440 , PARROT_ASSERT_ARG(arg)) 441 #define ASSERT_ARGS_add_pcc_flag_str __attribute__unused__ int _ASSERT_ARGS_CHECK = (\ 442 PARROT_ASSERT_ARG(imcc) \ 443 , PARROT_ASSERT_ARG(r) \ 444 , PARROT_ASSERT_ARG(arg)) 445 #define ASSERT_ARGS_add_pcc_multi __attribute__unused__ int _ASSERT_ARGS_CHECK = (\ 446 PARROT_ASSERT_ARG(imcc) \ 447 , PARROT_ASSERT_ARG(r)) 448 #define ASSERT_ARGS_add_pcc_result __attribute__unused__ int _ASSERT_ARGS_CHECK = (\ 449 PARROT_ASSERT_ARG(imcc) \ 450 , PARROT_ASSERT_ARG(r) \ 451 , PARROT_ASSERT_ARG(arg)) 452 #define ASSERT_ARGS_add_pcc_sub __attribute__unused__ int _ASSERT_ARGS_CHECK = (\ 453 PARROT_ASSERT_ARG(r) \ 454 , PARROT_ASSERT_ARG(arg)) 455 #define ASSERT_ARGS_clear_globals __attribute__unused__ int _ASSERT_ARGS_CHECK = (\ 456 PARROT_ASSERT_ARG(imcc)) 457 #define ASSERT_ARGS_clear_locals __attribute__unused__ int _ASSERT_ARGS_CHECK = (0) 458 #define ASSERT_ARGS_clear_sym_hash __attribute__unused__ int _ASSERT_ARGS_CHECK = (\ 459 PARROT_ASSERT_ARG(hsh)) 460 #define ASSERT_ARGS_create_symhash __attribute__unused__ int _ASSERT_ARGS_CHECK = (\ 461 PARROT_ASSERT_ARG(imcc) \ 462 , PARROT_ASSERT_ARG(hash)) 463 #define ASSERT_ARGS_dup_sym __attribute__unused__ int _ASSERT_ARGS_CHECK = (\ 464 PARROT_ASSERT_ARG(imcc) \ 465 , PARROT_ASSERT_ARG(r)) 466 #define ASSERT_ARGS_find_sym __attribute__unused__ int _ASSERT_ARGS_CHECK = (\ 467 PARROT_ASSERT_ARG(imcc) \ 468 , PARROT_ASSERT_ARG(name)) 469 #define ASSERT_ARGS_free_pcc_sub __attribute__unused__ int _ASSERT_ARGS_CHECK = (\ 470 PARROT_ASSERT_ARG(sub)) 471 #define ASSERT_ARGS_free_sym __attribute__unused__ int _ASSERT_ARGS_CHECK = (\ 472 PARROT_ASSERT_ARG(r)) 473 #define ASSERT_ARGS_get_sym __attribute__unused__ int _ASSERT_ARGS_CHECK = (\ 474 PARROT_ASSERT_ARG(imcc) \ 475 , PARROT_ASSERT_ARG(name)) 476 #define ASSERT_ARGS_hash_str __attribute__unused__ int _ASSERT_ARGS_CHECK = (\ 477 PARROT_ASSERT_ARG(str)) 478 #define ASSERT_ARGS_link_keys __attribute__unused__ int _ASSERT_ARGS_CHECK = (\ 479 PARROT_ASSERT_ARG(imcc) \ 480 , PARROT_ASSERT_ARG(keys)) 481 #define ASSERT_ARGS_mk_const __attribute__unused__ int _ASSERT_ARGS_CHECK = (\ 482 PARROT_ASSERT_ARG(imcc) \ 483 , PARROT_ASSERT_ARG(name)) 484 #define ASSERT_ARGS_mk_const_ident __attribute__unused__ int _ASSERT_ARGS_CHECK = (\ 485 PARROT_ASSERT_ARG(imcc) \ 486 , PARROT_ASSERT_ARG(name) \ 487 , PARROT_ASSERT_ARG(val)) 488 #define ASSERT_ARGS_mk_ident __attribute__unused__ int _ASSERT_ARGS_CHECK = (\ 489 PARROT_ASSERT_ARG(imcc) \ 490 , PARROT_ASSERT_ARG(name)) 491 #define ASSERT_ARGS_mk_label_address __attribute__unused__ int _ASSERT_ARGS_CHECK = (\ 492 PARROT_ASSERT_ARG(imcc) \ 493 , PARROT_ASSERT_ARG(name)) 494 #define ASSERT_ARGS_mk_local_label __attribute__unused__ int _ASSERT_ARGS_CHECK = (\ 495 PARROT_ASSERT_ARG(imcc) \ 496 , PARROT_ASSERT_ARG(name)) 497 #define ASSERT_ARGS_mk_pasm_reg __attribute__unused__ int _ASSERT_ARGS_CHECK = (\ 498 PARROT_ASSERT_ARG(imcc) \ 499 , PARROT_ASSERT_ARG(name)) 500 #define ASSERT_ARGS_mk_pcc_sub __attribute__unused__ int _ASSERT_ARGS_CHECK = (\ 501 PARROT_ASSERT_ARG(imcc) \ 502 , PARROT_ASSERT_ARG(name)) 503 #define ASSERT_ARGS_mk_sub_address __attribute__unused__ int _ASSERT_ARGS_CHECK = (\ 504 PARROT_ASSERT_ARG(imcc) \ 505 , PARROT_ASSERT_ARG(name)) 506 #define ASSERT_ARGS_mk_sub_label __attribute__unused__ int _ASSERT_ARGS_CHECK = (\ 507 PARROT_ASSERT_ARG(imcc) \ 508 , PARROT_ASSERT_ARG(name)) 509 #define ASSERT_ARGS_mk_symreg __attribute__unused__ int _ASSERT_ARGS_CHECK = (\ 510 PARROT_ASSERT_ARG(imcc) \ 511 , PARROT_ASSERT_ARG(name)) 512 #define ASSERT_ARGS_mk_temp_reg __attribute__unused__ int _ASSERT_ARGS_CHECK = (\ 513 PARROT_ASSERT_ARG(imcc)) 514 #define ASSERT_ARGS_store_symreg __attribute__unused__ int _ASSERT_ARGS_CHECK = (\ 515 PARROT_ASSERT_ARG(imcc) \ 516 , PARROT_ASSERT_ARG(r)) 517 #define ASSERT_ARGS_symreg_to_str __attribute__unused__ int _ASSERT_ARGS_CHECK = (\ 518 PARROT_ASSERT_ARG(s)) 519 /* Don't modify between HEADERIZER BEGIN / HEADERIZER END. Your changes will be lost. */ 520 /* HEADERIZER END: compilers/imcc/symreg.c */ 521 522 #endif /* PARROT_IMCC_SYMREG_H_GUARD */ 523 524 /* 525 * Local variables: 526 * c-file-style: "parrot" 527 * End: 528 * vim: expandtab shiftwidth=4 cinoptions='\:2=2' : 529 */ 530