00001
00002 #include <basix/int.hpp>
00003 #include <basix/vector.hpp>
00004 #include <basix/port.hpp>
00005 #include <basix/literal.hpp>
00006 #include <basix/tuple.hpp>
00007 #include <basix/glue.hpp>
00008
00009 #define int_literal(x) as_int (as_string (x))
00010 #define is_generic_literal is<literal>
00011 #define gen_literal_apply(f,v) gen (as<generic> (f), v)
00012 #define gen_literal_access(f,v) access (as<generic> (f), v)
00013
00014 namespace mmx {
00015 static bool
00016 GLUE_1 (const generic &arg_1) {
00017 return is_generic_literal (arg_1);
00018 }
00019
00020 static generic
00021 GLUE_2 (const literal &arg_1, const tuple<generic> &arg_2) {
00022 return gen_literal_apply (arg_1, as_vector (arg_2));
00023 }
00024
00025 static generic
00026 GLUE_3 (const literal &arg_1, const tuple<generic> &arg_2) {
00027 return gen_literal_access (arg_1, as_vector (arg_2));
00028 }
00029
00030 static literal
00031 GLUE_4 (const string &arg_1) {
00032 return literal (arg_1);
00033 }
00034
00035 static string
00036 GLUE_5 (const literal &arg_1) {
00037 return *arg_1;
00038 }
00039
00040 void
00041 glue_literal () {
00042 static bool done = false;
00043 if (done) return;
00044 done = true;
00045 call_glue (string ("glue_string"));
00046 define ("literal?", GLUE_1);
00047 define (".()", GLUE_2);
00048 define (".[]", GLUE_3);
00049 define ("as_literal", GLUE_4);
00050 define ("as_string", GLUE_5);
00051 }
00052 }