From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: (qmail 15837 invoked by alias); 22 May 2014 15:17:40 -0000 Mailing-List: contact gdb-patches-help@sourceware.org; run by ezmlm Precedence: bulk List-Id: List-Subscribe: List-Archive: List-Post: List-Help: , Sender: gdb-patches-owner@sourceware.org Received: (qmail 15778 invoked by uid 89); 22 May 2014 15:17:38 -0000 Authentication-Results: sourceware.org; auth=none X-Virus-Found: No X-Spam-SWARE-Status: No, score=-1.5 required=5.0 tests=AWL,BAYES_00,RCVD_IN_DNSWL_LOW,SPF_SOFTFAIL autolearn=no version=3.3.2 X-HELO: mail-la0-f45.google.com Received: from mail-la0-f45.google.com (HELO mail-la0-f45.google.com) (209.85.215.45) by sourceware.org (qpsmtpd/0.93/v0.84-503-g423c35a) with (AES128-SHA encrypted) ESMTPS; Thu, 22 May 2014 15:17:37 +0000 Received: by mail-la0-f45.google.com with SMTP id gl10so2766017lab.18 for ; Thu, 22 May 2014 08:17:33 -0700 (PDT) X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20130820; h=x-gm-message-state:mime-version:in-reply-to:references:date :message-id:subject:from:to:cc:content-type; bh=MwXNVBGLXZZexQVIjtwTrnAqo5QNWdBazms4AsZ7jws=; b=k+W142YpcsqKo6f8hIjbtWSxNibddE39ieD8AkUvVS72Q5JJzMiRkNaXJvZIbbQv+v xrrILU6nrguNakhfDfhqYvCsHXaMqnoXGzieB8ujQAtnuml3nqH/TOeE+JpbWHJ5GvlP algnvB3cK+7G+Uln/k2hIYwX++wkImVcWm1bN+MmJRz5tnBzBmZBFAp+LR/eh/Iek7wC XZ8aSTTnqhwvKMzb1earK6ecot3S69G3qyVJuog6tpktYFbqaap4fk84aEx3S8wS9wWr ak/nhv+gKrTtC5gBJ1L8qfMYr/aRawKam7tFpYstPjfHWWjPr7d9wLORIwsqQSTPZh8Q lRhw== X-Gm-Message-State: ALoCoQm3lORfnk37sd/cCAxbaQ6EVFlVILSBAYF3sRVHk0YayJITmjybqWq2WwfJpU/dM7IPPZ4a MIME-Version: 1.0 X-Received: by 10.112.13.35 with SMTP id e3mr36017423lbc.44.1400771853433; Thu, 22 May 2014 08:17:33 -0700 (PDT) Received: by 10.112.9.5 with HTTP; Thu, 22 May 2014 08:17:33 -0700 (PDT) In-Reply-To: <87tx8ks8yv.fsf@fleche.redhat.com> References: <87tx8ks8yv.fsf@fleche.redhat.com> Date: Thu, 22 May 2014 15:17:00 -0000 Message-ID: Subject: Re: [PATCH] Add autocompletion for convenience vars in print and set From: Daniel Gutson To: Tom Tromey Cc: gdb-patches Content-Type: multipart/mixed; boundary=001a11c3b5dcbc68f704f9fe9c47 X-IsSubscribed: yes X-SW-Source: 2014-05/txt/msg00550.txt.bz2 --001a11c3b5dcbc68f704f9fe9c47 Content-Type: text/plain; charset=UTF-8 Content-length: 2464 Second version. Comments below: On Tue, May 20, 2014 at 1:36 PM, Tom Tromey wrote: >>>>>> "Daniel" == Daniel Gutson writes: > > Daniel> I could not find any testsuite where to add tests for this; if > Daniel> there are, please let me know. > > See testsuite/gdb.base/completion.exp Thanks, I ran all the tests and passed. I did not add a new test case though since I didn't check how to add a new convenience var and undefine it later from the test framework. (Should I try harder?) > > Daniel> exp : VARIABLE > Daniel> { > Daniel> - write_dollar_variable (pstate, $1); > Daniel> + if (!parse_completion) > Daniel> + write_dollar_variable (pstate, $1); > Daniel> } > > I think this isn't correct. I think it won't work if you try to > complete on a field name where the "LHS" has a convenience variable. > That is something like: > > set $var = (struct x *) malloc (...) > complete print $var.somethin You were right, that was broken. > > Instead I think you need a new production, like "exp : VARIABLE COMPLETE". I found another solution without touching the yacc file: adding a check inside write_dollar_variable > > Daniel> + if (p != NULL && *p == '$') > Daniel> + return complete_internalvar (p + 1); > > I'm not sure this is correct either, but offhand I don't know. > Should it not look at "word"? It actually works ("word" didn't have the $). However, I noticed that 'set' cmd autocomplete doesn't work for members of structures (neither with convenience vars nor regular symbols). I'll address that in the next patch once this gets approved and committed. > > Daniel> + VEC (char_ptr) * ret = current_language->la_make_symbol_completion_list ( > Daniel> + text, word, > Daniel> + TYPE_CODE_UNDEF); > > No space before "ret". > The line breaks look odd, I would break before the "=" and not after the "(". > > thanks, > Tom 2014-05-22 Daniel Gutson gdb/ * parse.c (write_dollar_variable): Do not create an internal var when completing. * completer.c (expression_completer): Call complete_internalvar. * symtab.c (make_symbol_completion_list): Call complete_internalvar. --001a11c3b5dcbc68f704f9fe9c47 Content-Type: text/x-patch; charset=US-ASCII; name="completer2.patch" Content-Disposition: attachment; filename="completer2.patch" Content-Transfer-Encoding: base64 X-Attachment-Id: f_hvi77ve50 Content-length: 3555 ZGlmZiAtLWdpdCBhL2dkYi9jb21wbGV0ZXIuYyBiL2dkYi9jb21wbGV0ZXIu YwppbmRleCA5NGY3MGE5Li42YzVjZGY4IDEwMDY0NAotLS0gYS9nZGIvY29t cGxldGVyLmMKKysrIGIvZ2RiL2NvbXBsZXRlci5jCkBAIC0yMCw2ICsyMCw3 IEBACiAjaW5jbHVkZSAic3ltdGFiLmgiCiAjaW5jbHVkZSAiZ2RidHlwZXMu aCIKICNpbmNsdWRlICJleHByZXNzaW9uLmgiCisjaW5jbHVkZSAidmFsdWUu aCIKICNpbmNsdWRlICJmaWxlbmFtZXMuaCIJCS8qIEZvciBET1Npc2ggZmls ZSBuYW1lcy4gICovCiAjaW5jbHVkZSAibGFuZ3VhZ2UuaCIKICNpbmNsdWRl ICJnZGJfYXNzZXJ0LmgiCkBAIC00NDYsOCArNDQ3LDExIEBAIGV4cHJlc3Np b25fY29tcGxldGVyIChzdHJ1Y3QgY21kX2xpc3RfZWxlbWVudCAqaWdub3Jl LAogICAgICAgIHAtLSkKICAgICA7CiAKLSAgLyogTm90IGlkZWFsIGJ1dCBp dCBpcyB3aGF0IHdlIHVzZWQgdG8gZG8gYmVmb3JlLi4uICAqLwotICByZXR1 cm4gbG9jYXRpb25fY29tcGxldGVyIChpZ25vcmUsIHAsIHdvcmQpOworICBp ZiAocCAhPSBOVUxMICYmICpwID09ICckJykKKyAgICByZXR1cm4gY29tcGxl dGVfaW50ZXJuYWx2YXIgKHAgKyAxKTsKKyAgZWxzZQorICAgIC8qIE5vdCBp ZGVhbCBidXQgaXQgaXMgd2hhdCB3ZSB1c2VkIHRvIGRvIGJlZm9yZS4uLiAg Ki8KKyAgICByZXR1cm4gbG9jYXRpb25fY29tcGxldGVyIChpZ25vcmUsIHAs IHdvcmQpOwogfQogCiAvKiBIZXJlIGFyZSBzb21lIHVzZWZ1bCB0ZXN0IGNh c2VzIGZvciBjb21wbGV0aW9uLiAgRklYTUU6IFRoZXNlCmRpZmYgLS1naXQg YS9nZGIvcGFyc2UuYyBiL2dkYi9wYXJzZS5jCmluZGV4IDEwNWQwY2QuLjIx OGJlMTMgMTAwNjQ0Ci0tLSBhL2dkYi9wYXJzZS5jCisrKyBiL2dkYi9wYXJz ZS5jCkBAIC02OTIsMTAgKzY5MiwxMiBAQCB3cml0ZV9kb2xsYXJfdmFyaWFi bGUgKHN0cnVjdCBwYXJzZXJfc3RhdGUgKnBzLCBzdHJ1Y3Qgc3Rva2VuIHN0 cikKICAgICB9CiAKICAgLyogQW55IG90aGVyIG5hbWVzIGFyZSBhc3N1bWVk IHRvIGJlIGRlYnVnZ2VyIGludGVybmFsIHZhcmlhYmxlcy4gICovCi0KLSAg d3JpdGVfZXhwX2VsdF9vcGNvZGUgKHBzLCBPUF9JTlRFUk5BTFZBUik7Ci0g IHdyaXRlX2V4cF9lbHRfaW50ZXJuIChwcywgY3JlYXRlX2ludGVybmFsdmFy IChjb3B5X25hbWUgKHN0cikgKyAxKSk7Ci0gIHdyaXRlX2V4cF9lbHRfb3Bj b2RlIChwcywgT1BfSU5URVJOQUxWQVIpOworICBpZiAoIXBhcnNlX2NvbXBs ZXRpb24pCisgICAgeworICAgICAgd3JpdGVfZXhwX2VsdF9vcGNvZGUgKHBz LCBPUF9JTlRFUk5BTFZBUik7CisgICAgICB3cml0ZV9leHBfZWx0X2ludGVy biAocHMsIGNyZWF0ZV9pbnRlcm5hbHZhciAoY29weV9uYW1lIChzdHIpICsg MSkpOworICAgICAgd3JpdGVfZXhwX2VsdF9vcGNvZGUgKHBzLCBPUF9JTlRF Uk5BTFZBUik7CisgICAgfQogICByZXR1cm47CiBoYW5kbGVfbGFzdDoKICAg d3JpdGVfZXhwX2VsdF9vcGNvZGUgKHBzLCBPUF9MQVNUKTsKZGlmZiAtLWdp dCBhL2dkYi9zeW10YWIuYyBiL2dkYi9zeW10YWIuYwppbmRleCAxNWFjM2Qx Li41MmViNjRjIDEwMDY0NAotLS0gYS9nZGIvc3ltdGFiLmMKKysrIGIvZ2Ri L3N5bXRhYi5jCkBAIC00NTQyLDE0ICs0NTQyLDIxIEBAIGRlZmF1bHRfbWFr ZV9zeW1ib2xfY29tcGxldGlvbl9saXN0IChjb25zdCBjaGFyICp0ZXh0LCBj b25zdCBjaGFyICp3b3JkLAogfQogCiAvKiBSZXR1cm4gYSB2ZWN0b3Igb2Yg YWxsIHN5bWJvbHMgKHJlZ2FyZGxlc3Mgb2YgY2xhc3MpIHdoaWNoIGJlZ2lu IGJ5Ci0gICBtYXRjaGluZyBURVhULiAgSWYgdGhlIGFuc3dlciBpcyBubyBz eW1ib2xzLCB0aGVuIHRoZSByZXR1cm4gdmFsdWUKLSAgIGlzIE5VTEwuICAq LworICAgbWF0Y2hpbmcgVEVYVC4gIElmIHRoZSBhbnN3ZXIgaXMgbm8gc3lt Ym9scywgdGhlbiBjaGVjayB3aGV0aGVyIHRoZQorICAgdGV4dCBpcyBhbiBp bnRlcm5hbCB2YXIgKCRmb28pLCBpZiBzbywgcmV0dXJuIHdoYXQgY29tcGxl dGVfaW50ZXJuYWx2YXIKKyAgIHJldHVybnM7IG90aGVyd2lzZSB0aGUgcmV0 dXJuIHZhbHVlIGlzIE5VTEwuICAqLwogCiBWRUMgKGNoYXJfcHRyKSAqCiBt YWtlX3N5bWJvbF9jb21wbGV0aW9uX2xpc3QgKGNvbnN0IGNoYXIgKnRleHQs IGNvbnN0IGNoYXIgKndvcmQpCiB7Ci0gIHJldHVybiBjdXJyZW50X2xhbmd1 YWdlLT5sYV9tYWtlX3N5bWJvbF9jb21wbGV0aW9uX2xpc3QgKHRleHQsIHdv cmQsCi0JCQkJCQkJICAgVFlQRV9DT0RFX1VOREVGKTsKKyAgVkVDIChjaGFy X3B0cikgKnJldAorICAgID0gY3VycmVudF9sYW5ndWFnZS0+bGFfbWFrZV9z eW1ib2xfY29tcGxldGlvbl9saXN0ICh0ZXh0LCB3b3JkLAorICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg VFlQRV9DT0RFX1VOREVGKTsKKworICBpZiAocmV0ID09IE5VTEwgJiYgKnRl eHQgPT0gJyQnKQorICAgIHJldCA9IGNvbXBsZXRlX2ludGVybmFsdmFyICh0 ZXh0ICsgMSk7CisKKyAgcmV0dXJuIHJldDsKIH0KIAogLyogTGlrZSBtYWtl X3N5bWJvbF9jb21wbGV0aW9uX2xpc3QsIGJ1dCBvbmx5IHJldHVybiBTVFJV Q1RfRE9NQUlOCg== --001a11c3b5dcbc68f704f9fe9c47--