**/
/* }}} */
+#include <typeinfo>
+
#include "cycript.hpp"
#include "Driver.hpp"
case CYDriver::AutoMessage: {
CYDriver::Context &thing(driver.contexts_.back());
- expression = $M($C1($V("object_getClass"), thing.context_), $S("messages"));
+ expression = $M($C1($V("object_getClass"), thing.context_), $S("prototype"));
for (CYDriver::Context::Words::const_iterator part(thing.words_.begin()); part != thing.words_.end(); ++part)
prefix << (*part)->word_ << ':';
} break;
std::string begin(prefix.str());
- driver.script_ = $ CYScript($ CYExpress($C3(ParseExpression(pool,
- " function(object, prefix, word) {\n"
+ CYBoolean *message;
+ if (driver.mode_ == CYDriver::AutoMessage)
+ message = $ CYTrue();
+ else
+ message = $ CYFalse();
+
+ driver.script_ = $ CYScript($ CYExpress($C4(ParseExpression(pool,
+ " function(value, prefix, word, message) {\n"
+ " var object = value;\n"
" var names = [];\n"
" var before = prefix.length;\n"
" prefix += word;\n"
" if (name.substring(0, entire) == prefix)\n"
" names.push(name);\n"
" } else do {\n"
- " if (object.hasOwnProperty(\"cy$complete\")) {\n"
- " names = names.concat(object.cy$complete(prefix));\n"
- " continue;\n"
- " }\n"
+ " if (object.hasOwnProperty(\"cy$complete\"))\n"
+ " names = names.concat(object.cy$complete.call(value, prefix, message));\n"
" try {\n"
" var local = Object.getOwnPropertyNames(object);\n"
" } catch (e) {\n"
" } while (object = typeof object === 'object' ? Object.getPrototypeOf(object) : object.__proto__);\n"
" return names;\n"
" }\n"
- ), expression, $S(begin.c_str()), $S(word))));
+ ), expression, $S(begin.c_str()), $S(word), message)));
driver.script_->Replace(context);
_assert(value != NULL);
element = value->next_;
- CYString *string(dynamic_cast<CYString *>(value->value_));
- _assert(string != NULL);
+ _assert(value->value_ != NULL);
+ CYString *string(value->value_->String(context));
+ if (string == NULL)
+ CYThrow("string was actually %s", typeid(*value->value_).name());
CYUTF8String completion;
if (string->size_ != 0)