News:

As usual while waiting for the next release - don't forget to check the nightly builds in the forum.

Main Menu

new idea: high light local variables in a function body

Started by ollydbg, March 19, 2015, 06:08:47 AM

Previous topic - Next topic

ollydbg

I see that we have a function:
void CodeCompletion::UpdateEditorSyntax(cbEditor* ed)
which give a set of tokens(keywords) as member variables to scintilla control, so that it can highlight them, by

    ed->GetControl()->SetKeyWords(3, keywords);
    ed->GetControl()->Colourise(0, -1);


So, if we put a mouse in a function body, and let our parser parse the function body, and give scintilla control all the local variable tokens, and finally we can only highlight them inside the function body by

    ed->GetControl()->SetKeyWords(3, local_variables_list);
    ed->GetControl()->Colourise(begin_of_function_body, end_of_function_body);

:)

EDIT: some old similar discussion: CC based semantic highlight
If some piece of memory should be reused, turn them to variables (or const variables).
If some piece of operations should be reused, turn them to functions.
If they happened together, then turn them to classes.

oBFusCATed

No you can't, because this is global keyword set.

This example code will break it easily:

int myGlobal=5;

int myFunc() {
    int myGlobal=7;
   
    ... do something with the myGlobal...
}


This feature needs to be done with a custom lexer or modifications to scintilla.
(most of the time I ignore long posts)
[strangers don't send me private messages, I'll ignore them; post a topic in the forum, but first read the rules!]

ollydbg

Quote from: oBFusCATed on March 19, 2015, 09:10:46 AM
No you can't, because this is global keyword set.

This example code will break it easily:

int myGlobal=5;

int myFunc() {
    int myGlobal=7;
   
    ... do something with the myGlobal...
}


This feature needs to be done with a custom lexer or modifications to scintilla.
Indeed, I agree with you, so it is hard to implement this idea.
If some piece of memory should be reused, turn them to variables (or const variables).
If some piece of operations should be reused, turn them to functions.
If they happened together, then turn them to classes.