diff options
author | Nicholas Clark <nick@ccl4.org> | 2006-10-06 21:19:26 +0000 |
---|---|---|
committer | Nicholas Clark <nick@ccl4.org> | 2006-10-06 21:19:26 +0000 |
commit | bab3dc31a54b991bcbbb7b33bb5ede8251f0e056 (patch) | |
tree | 49c57511090c50636f82738e294d2f6f9e59f9fb /overload.h | |
parent | 8175493de8aa14da9d45b777a870a8e3de6e1135 (diff) | |
download | perl-bab3dc31a54b991bcbbb7b33bb5ede8251f0e056.tar.gz |
Generate the overload enum and names array programatically, which
allows experimentation with the order. The new order shaves nearly
900 bytes from gv.o, because the compiler can make smaller branch
tables for switch statements.
p4raw-id: //depot/perl@28950
Diffstat (limited to 'overload.h')
-rw-r--r-- | overload.h | 168 |
1 files changed, 168 insertions, 0 deletions
diff --git a/overload.h b/overload.h new file mode 100644 index 0000000000..adf1feae2d --- /dev/null +++ b/overload.h @@ -0,0 +1,168 @@ +/* -*- buffer-read-only: t -*- + * + * overload.h + * + * Copyright (C) 1997, 1998, 2000, 2001, 2005 and 2006 by Larry Wall and + * others + * + * You may distribute under the terms of either the GNU General Public + * License or the Artistic License, as specified in the README file. + * + * !!!!!!! DO NOT EDIT THIS FILE !!!!!!! + * This file is built by overload.pl + */ + +enum { + fallback_amg, + to_sv_amg, + to_av_amg, + to_hv_amg, + to_gv_amg, + to_cv_amg, + inc_amg, + dec_amg, + bool__amg, + numer_amg, + string_amg, + not_amg, + copy_amg, + abs_amg, + neg_amg, + iter_amg, + int_amg, + lt_amg, + le_amg, + gt_amg, + ge_amg, + eq_amg, + ne_amg, + slt_amg, + sle_amg, + sgt_amg, + sge_amg, + seq_amg, + sne_amg, + nomethod_amg, + add_amg, + add_ass_amg, + subtr_amg, + subtr_ass_amg, + mult_amg, + mult_ass_amg, + div_amg, + div_ass_amg, + modulo_amg, + modulo_ass_amg, + pow_amg, + pow_ass_amg, + lshift_amg, + lshift_ass_amg, + rshift_amg, + rshift_ass_amg, + band_amg, + band_ass_amg, + bor_amg, + bor_ass_amg, + bxor_amg, + bxor_ass_amg, + ncmp_amg, + scmp_amg, + compl_amg, + atan2_amg, + cos_amg, + sin_amg, + exp_amg, + log_amg, + sqrt_amg, + repeat_amg, + repeat_ass_amg, + concat_amg, + concat_ass_amg, + smart_amg, + DESTROY_amg, + max_amg_code + /* Do not leave a trailing comma here. C9X allows it, C89 doesn't. */ +}; + + +#define NofAMmeth max_amg_code +#define AMG_id2name(id) (PL_AMG_names[id]+1) + +#ifdef DOINIT +EXTCONST char * const PL_AMG_names[NofAMmeth] = { + /* Names kept in the symbol table. fallback => "()", the rest has + "(" prepended. The only other place in perl which knows about + this convention is AMG_id2name (used for debugging output and + 'nomethod' only), the only other place which has it hardwired is + overload.pm. */ + "()", + "(${}", + "(@{}", + "(%{}", + "(*{}", + "(&{}", + "(++", + "(--", + "(bool", + "(0+", + "(\"\"", + "(!", + "(=", + "(abs", + "(neg", + "(<>", + "(int", + "(<", + "(<=", + "(>", + "(>=", + "(==", + "(!=", + "(lt", + "(le", + "(gt", + "(ge", + "(eq", + "(ne", + "(nomethod", + "(+", + "(+=", + "(-", + "(-=", + "(*", + "(*=", + "(/", + "(/=", + "(%", + "(%=", + "(**", + "(**=", + "(<<", + "(<<=", + "(>>", + "(>>=", + "(&", + "(&=", + "(|", + "(|=", + "(^", + "(^=", + "(<=>", + "(cmp", + "(~", + "(atan2", + "(cos", + "(sin", + "(exp", + "(log", + "(sqrt", + "(x", + "(x=", + "(.", + "(.=", + "(~~", + "DESTROY" +}; +#else +EXTCONST char * PL_AMG_names[NofAMmeth]; +#endif /* def INITAMAGIC */ |