MDN will switch to a new design later today, a sneak peek: https://blog.mozilla.org/opendesign/mdns-new-design-beta/

As GCC compiles file, Dehydra calls functions in the user analysis script with information about the code being compiled. For more information, see the function reference and the object reference.

Example: printing the location of type declarations

Save the following C++ code dumptypes.cc:

typedef int MyInt;
struct Foo { int i; char *c; };

Save the following analysis script dumptypes.js:

function process_type(t)
{
  print("Type found: " + t.name + " location: " + t.loc);
}

function input_end()
{
  print("Hello, world!");
}

Compile using the following command:

$ g++ -fplugin=~/dehydra/gcc_dehydra.so -fplugin-arg=~/dumptypes.js -o/dev/null -c dumptypes.cc

Note:for g++4.5 and up

use -fplugin-arg-gcc_dehydra-script= rather than -fplugin-arg

It should print the following results:

Type found: Foo location: test.cc:2:12
Type found: MyInt location: test.cc:1:13
Hello, world!

See documentation for: process_type, input_end, print, .loc property

 Example: using attributes to mark a class as "final"

Save the following code as final.cc:

// This class should not be subclassed!
class __attribute__((user("final"))) MyClass
{
};

// This subclass should be an error
class SubClass : public MyClass
{
};

Save the following analysis script final.js:

/**
 * Helper function: returns true if a class is marked with the "final" attribute.
 */
function isFinal(c)
{
  if (!c.attributes)
    return false;
  for each (let a in c.attributes)
    if (a.name == 'user' && a.value == 'final')
      return true;
  return false;
}

function process_type(t)
{
  if (t.bases)
    for each (let base in t.bases)
      if (isFinal(base.type))
        error("class " + t.name + " extends final class " + base.type.name, t.loc);
}

Compile using the following command:

$ g++ -fplugin=~/dehydra/gcc_dehydra.so -fplugin-arg=~/final.js -o/dev/null -c final.cc

It should print the following results and return with an error code:

final.cc:8: error: class SubClass extends final class MyClass

 See documentation for: process_type, error, .bases property, .attributes property

Document Tags and Contributors

 Contributors to this page: Sheppy, thesamprice, Tglek, Imphil, bsmedberg
 Last updated by: Sheppy,