]> git.saurik.com Git - cycript.git/commitdiff
Peel away CYCompound layers to fix tab completion. v0.9.456
authorJay Freeman (saurik) <saurik@saurik.com>
Thu, 7 Jun 2012 23:20:47 +0000 (16:20 -0700)
committerJay Freeman (saurik) <saurik@saurik.com>
Thu, 7 Jun 2012 23:20:47 +0000 (16:20 -0700)
Console.cpp
Parser.hpp
Replace.cpp

index 09298a1ab326b7fe7bbec3afea32687b2447c8ad..d669e67239ff008726de6258bd6c6c0bee187852 100644 (file)
@@ -213,9 +213,14 @@ static CYExpression *ParseExpression(CYUTF8String code) {
     if (parser.parse() != 0 || !driver.errors_.empty())
         return NULL;
 
-    CYExpress *express(dynamic_cast<CYExpress *>(driver.program_->statements_));
-    _assert(express != NULL);
-    return express->expression_;
+    CYOptions options;
+    CYContext context(options);
+
+    // XXX: this could be replaced with a CYStatement::Primitive()
+    if (CYExpress *express = dynamic_cast<CYExpress *>(driver.program_->statements_))
+        return express->expression_->Primitive(context);
+
+    return NULL;
 }
 
 static int client_;
index 47d80ec7aa550913d07b2f9961d0a809674b54fd..7197428bfe112e27d83b4b26ef43205005670f63 100644 (file)
@@ -627,6 +627,8 @@ struct CYCompound :
 
     virtual CYExpression *Replace(CYContext &context);
     void Output(CYOutput &out, CYFlags flags) const;
+
+    virtual CYExpression *Primitive(CYContext &context);
 };
 
 struct CYDeclaration;
index c141e4fa11d23f37f4b00b877fd04d370ce37854..d40c8f315deb12694aedd4ff493d8600c6fa01d3 100644 (file)
@@ -155,6 +155,15 @@ CYExpression *CYCompound::Replace(CYContext &context) {
     return this;
 }
 
+CYExpression *CYCompound::Primitive(CYContext &context) {
+    CYExpression *expression(expressions_);
+    if (expression == NULL)
+        return NULL;
+    while (expression->next_ != NULL)
+        expression = expression->next_;
+    return expression->Primitive(context);
+}
+
 CYFunctionParameter *CYComprehension::Parameters(CYContext &context) const { $T(NULL)
     CYFunctionParameter *next(next_->Parameters(context));
     if (CYFunctionParameter *parameter = Parameter(context)) {