overwrite rewritten text

classic Classic list List threaded Threaded
6 messages Options
Reply | Threaded
Open this post in threaded view
|

overwrite rewritten text

Richard Smith via cfe-dev
Hi All,

How can I overwrite or remove some code parts which were already rewritten?

Here is my code:

string S = …
Rewriter.InsertText(Loc, S);
Rewriter.RemoveText(Loc, S.length());    <=== Here, Segmentation fault.


Thanks for your help!

Best,
Kihong

_______________________________________________
cfe-dev mailing list
[hidden email]
http://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-dev
Reply | Threaded
Open this post in threaded view
|

Re: overwrite rewritten text

Richard Smith via cfe-dev
Hi,

did you consider creating a Replacement instead of a Insert-Remove
combination?

Best, Jonas

Am 10.12.18 um 06:04 schrieb Kihong Heo via cfe-dev:

> Hi All,
>
> How can I overwrite or remove some code parts which were already rewritten?
>
> Here is my code:
>
> string S = …
> Rewriter.InsertText(Loc, S);
> Rewriter.RemoveText(Loc, S.length());    <=== Here, Segmentation fault.
>
>
> Thanks for your help!
>
> Best,
> Kihong
>
> _______________________________________________
> cfe-dev mailing list
> [hidden email]
> http://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-dev
_______________________________________________
cfe-dev mailing list
[hidden email]
http://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-dev
Reply | Threaded
Open this post in threaded view
|

Re: overwrite rewritten text

Richard Smith via cfe-dev
Hi,

Thanks for your suggestion.
But the result is the same.
I noticed that It works as if the new string was not inserted.
For example, “Loc” points to the location after the inserted string, and “Loc.getWithOffset(-1)” points to the location before the string.
Is there any solution to sync up the mismatch?

Thanks,
Kihong

> On Dec 10, 2018, at 11:38 AM, Jonas Toth <[hidden email]> wrote:
>
> Hi,
>
> did you consider creating a Replacement instead of a Insert-Remove
> combination?
>
> Best, Jonas
>
> Am 10.12.18 um 06:04 schrieb Kihong Heo via cfe-dev:
>> Hi All,
>>
>> How can I overwrite or remove some code parts which were already rewritten?
>>
>> Here is my code:
>>
>> string S = …
>> Rewriter.InsertText(Loc, S);
>> Rewriter.RemoveText(Loc, S.length());    <=== Here, Segmentation fault.
>>
>>
>> Thanks for your help!
>>
>> Best,
>> Kihong
>>
>> _______________________________________________
>> cfe-dev mailing list
>> [hidden email]
>> http://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-dev

_______________________________________________
cfe-dev mailing list
[hidden email]
http://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-dev
Reply | Threaded
Open this post in threaded view
|

Re: overwrite rewritten text

Richard Smith via cfe-dev
I am a bit puzzled of what you want to achieve.

AFAIK the change must be applied to the file and then the AST must be
recreated to get the new Source Locations, but if you `InsertText`
something and then `RemoveText` at the same location and same length
what do you intent to do?
For me this sounds like just replace a piece of original code with new
code. Otherwise that would be a no-op, not?

Best Jonas

Am 10.12.18 um 18:53 schrieb Kihong Heo:

> Hi,
>
> Thanks for your suggestion.
> But the result is the same.
> I noticed that It works as if the new string was not inserted.
> For example, “Loc” points to the location after the inserted string, and “Loc.getWithOffset(-1)” points to the location before the string.
> Is there any solution to sync up the mismatch?
>
> Thanks,
> Kihong
>
>> On Dec 10, 2018, at 11:38 AM, Jonas Toth <[hidden email]> wrote:
>>
>> Hi,
>>
>> did you consider creating a Replacement instead of a Insert-Remove
>> combination?
>>
>> Best, Jonas
>>
>> Am 10.12.18 um 06:04 schrieb Kihong Heo via cfe-dev:
>>> Hi All,
>>>
>>> How can I overwrite or remove some code parts which were already rewritten?
>>>
>>> Here is my code:
>>>
>>> string S = …
>>> Rewriter.InsertText(Loc, S);
>>> Rewriter.RemoveText(Loc, S.length());    <=== Here, Segmentation fault.
>>>
>>>
>>> Thanks for your help!
>>>
>>> Best,
>>> Kihong
>>>
>>> _______________________________________________
>>> cfe-dev mailing list
>>> [hidden email]
>>> http://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-dev
_______________________________________________
cfe-dev mailing list
[hidden email]
http://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-dev
Reply | Threaded
Open this post in threaded view
|

Re: overwrite rewritten text

Richard Smith via cfe-dev
My intention is to transform the input source code. But this transformation is not pre-defined but dynamic. I first apply some transformation (here, adding some statement); check its correctness with an off-the-shelf checker; it is wrong then I want to roll back. Is there any systematic way to do that?

Thanks,
Kihong

> On Dec 10, 2018, at 12:56 PM, Jonas Toth <[hidden email]> wrote:
>
> I am a bit puzzled of what you want to achieve.
>
> AFAIK the change must be applied to the file and then the AST must be
> recreated to get the new Source Locations, but if you `InsertText`
> something and then `RemoveText` at the same location and same length
> what do you intent to do?
> For me this sounds like just replace a piece of original code with new
> code. Otherwise that would be a no-op, not?
>
> Best Jonas
>
> Am 10.12.18 um 18:53 schrieb Kihong Heo:
>> Hi,
>>
>> Thanks for your suggestion.
>> But the result is the same.
>> I noticed that It works as if the new string was not inserted.
>> For example, “Loc” points to the location after the inserted string, and “Loc.getWithOffset(-1)” points to the location before the string.
>> Is there any solution to sync up the mismatch?
>>
>> Thanks,
>> Kihong
>>
>>> On Dec 10, 2018, at 11:38 AM, Jonas Toth <[hidden email]> wrote:
>>>
>>> Hi,
>>>
>>> did you consider creating a Replacement instead of a Insert-Remove
>>> combination?
>>>
>>> Best, Jonas
>>>
>>> Am 10.12.18 um 06:04 schrieb Kihong Heo via cfe-dev:
>>>> Hi All,
>>>>
>>>> How can I overwrite or remove some code parts which were already rewritten?
>>>>
>>>> Here is my code:
>>>>
>>>> string S = …
>>>> Rewriter.InsertText(Loc, S);
>>>> Rewriter.RemoveText(Loc, S.length());    <=== Here, Segmentation fault.
>>>>
>>>>
>>>> Thanks for your help!
>>>>
>>>> Best,
>>>> Kihong
>>>>
>>>> _______________________________________________
>>>> cfe-dev mailing list
>>>> [hidden email]
>>>> http://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-dev

_______________________________________________
cfe-dev mailing list
[hidden email]
http://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-dev
Reply | Threaded
Open this post in threaded view
|

Re: overwrite rewritten text

Richard Smith via cfe-dev
I guess this sounds like the wanted functionality is not possible right
now. You probably need to patch Rewriter.

Best, Jonas

Am 10.12.18 um 19:46 schrieb Kihong Heo:

> According to “Rewriter.cpp”, changes are not directly applied to the rewrite buffer but stored in “Delta”, and there is no interface to remove elements in Delta.
>
> I think the segmentation fault was because the newly added text is longer than the original buffer.
>
> Thanks,
> Kihong
>
>> On Dec 10, 2018, at 1:12 PM, Jonas Toth <[hidden email]> wrote:
>>
>> I never tried and not aware of a method of doing this, but looking at
>> `clang/lib/Rewrite/Rewriter.cpp` the locations are recalculated on the
>> buffer the operations work on which might invalidate the `Loc` you are
>> working with?
>>
>> You said the operations segfault, do they fail with an assertion or
>> normal segfault?
>>
>> Am 10.12.18 um 19:04 schrieb Kihong Heo:
>>> My intention is to transform the input source code. But this transformation is not pre-defined but dynamic. I first apply some transformation (here, adding some statement); check its correctness with an off-the-shelf checker; it is wrong then I want to roll back. Is there any systematic way to do that?
>>>
>>> Thanks,
>>> Kihong
>>>
>>>> On Dec 10, 2018, at 12:56 PM, Jonas Toth <[hidden email]> wrote:
>>>>
>>>> I am a bit puzzled of what you want to achieve.
>>>>
>>>> AFAIK the change must be applied to the file and then the AST must be
>>>> recreated to get the new Source Locations, but if you `InsertText`
>>>> something and then `RemoveText` at the same location and same length
>>>> what do you intent to do?
>>>> For me this sounds like just replace a piece of original code with new
>>>> code. Otherwise that would be a no-op, not?
>>>>
>>>> Best Jonas
>>>>
>>>> Am 10.12.18 um 18:53 schrieb Kihong Heo:
>>>>> Hi,
>>>>>
>>>>> Thanks for your suggestion.
>>>>> But the result is the same.
>>>>> I noticed that It works as if the new string was not inserted.
>>>>> For example, “Loc” points to the location after the inserted string, and “Loc.getWithOffset(-1)” points to the location before the string.
>>>>> Is there any solution to sync up the mismatch?
>>>>>
>>>>> Thanks,
>>>>> Kihong
>>>>>
>>>>>> On Dec 10, 2018, at 11:38 AM, Jonas Toth <[hidden email]> wrote:
>>>>>>
>>>>>> Hi,
>>>>>>
>>>>>> did you consider creating a Replacement instead of a Insert-Remove
>>>>>> combination?
>>>>>>
>>>>>> Best, Jonas
>>>>>>
>>>>>> Am 10.12.18 um 06:04 schrieb Kihong Heo via cfe-dev:
>>>>>>> Hi All,
>>>>>>>
>>>>>>> How can I overwrite or remove some code parts which were already rewritten?
>>>>>>>
>>>>>>> Here is my code:
>>>>>>>
>>>>>>> string S = …
>>>>>>> Rewriter.InsertText(Loc, S);
>>>>>>> Rewriter.RemoveText(Loc, S.length());    <=== Here, Segmentation fault.
>>>>>>>
>>>>>>>
>>>>>>> Thanks for your help!
>>>>>>>
>>>>>>> Best,
>>>>>>> Kihong
>>>>>>>
>>>>>>> _______________________________________________
>>>>>>> cfe-dev mailing list
>>>>>>> [hidden email]
>>>>>>> http://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-dev
_______________________________________________
cfe-dev mailing list
[hidden email]
http://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-dev