Files
GDevelop/GDevelop.js/Bindings/Wrapper.cpp
T
2020-08-24 20:51:10 +01:00

597 lines
25 KiB
C++

#include <GDCore/Events/Builtin/CommentEvent.h>
#include <GDCore/Events/Builtin/ForEachEvent.h>
#include <GDCore/Events/Builtin/GroupEvent.h>
#include <GDCore/Events/Builtin/LinkEvent.h>
#include <GDCore/Events/Builtin/RepeatEvent.h>
#include <GDCore/Events/Builtin/StandardEvent.h>
#include <GDCore/Events/Builtin/WhileEvent.h>
#include <GDCore/Events/CodeGeneration/ExpressionCodeGenerator.h>
#include <GDCore/Events/Parsers/ExpressionParser2.h>
#include <GDCore/Events/Parsers/ExpressionParser2Node.h>
#include <GDCore/Extensions/Builtin/SpriteExtension/Animation.h>
#include <GDCore/Extensions/Builtin/SpriteExtension/Direction.h>
#include <GDCore/Extensions/Builtin/SpriteExtension/Sprite.h>
#include <GDCore/Extensions/Builtin/SpriteExtension/SpriteObject.h>
#include <GDCore/Extensions/Metadata/DependencyMetadata.h>
#include <GDCore/Extensions/Metadata/EffectMetadata.h>
#include <GDCore/Extensions/Metadata/MetadataProvider.h>
#include <GDCore/Extensions/Metadata/ParameterMetadataTools.h>
#include <GDCore/Extensions/Platform.h>
#include <GDCore/IDE/AbstractFileSystem.h>
#include <GDCore/IDE/Dialogs/LayoutEditorCanvas/LayoutEditorCanvasOptions.h>
#include <GDCore/IDE/Events/ArbitraryEventsWorker.h>
#include <GDCore/IDE/Events/EventsContextAnalyzer.h>
#include <GDCore/IDE/Events/EventsListUnfolder.h>
#include <GDCore/IDE/Events/EventsParametersLister.h>
#include <GDCore/IDE/Events/EventsRefactorer.h>
#include <GDCore/IDE/Events/EventsRemover.h>
#include <GDCore/IDE/Events/EventsTypesLister.h>
#include <GDCore/IDE/Events/ExpressionCompletionFinder.h>
#include <GDCore/IDE/Events/ExpressionValidator.h>
#include <GDCore/IDE/Events/InstructionSentenceFormatter.h>
#include <GDCore/IDE/Events/InstructionsTypeRenamer.h>
#include <GDCore/IDE/Events/TextFormatting.h>
#include <GDCore/IDE/EventsFunctionTools.h>
#include <GDCore/IDE/Project/ArbitraryResourceWorker.h>
#include <GDCore/IDE/Project/ProjectResourcesAdder.h>
#include <GDCore/IDE/Project/ProjectResourcesCopier.h>
#include <GDCore/IDE/Project/ResourcesInUseHelper.h>
#include <GDCore/IDE/Project/ResourcesMergingHelper.h>
#include <GDCore/IDE/WholeProjectRefactorer.h>
#include <GDCore/Project/Behavior.h>
#include <GDCore/Project/Effect.h>
#include <GDCore/Project/EventsBasedBehavior.h>
#include <GDCore/Project/EventsFunction.h>
#include <GDCore/Project/EventsFunctionsExtension.h>
#include <GDCore/Project/ExternalEvents.h>
#include <GDCore/Project/ExternalLayout.h>
#include <GDCore/Project/InitialInstance.h>
#include <GDCore/Project/InitialInstancesContainer.h>
#include <GDCore/Project/Layout.h>
#include <GDCore/Project/NamedPropertyDescriptor.h>
#include <GDCore/Project/Object.h>
#include <GDCore/Project/Project.h>
#include <GDCore/Project/PropertyDescriptor.h>
#include <GDCore/Project/Variable.h>
#include <GDCore/Project/VariablesContainer.h>
#include <GDCore/Serialization/Serializer.h>
#include <GDCore/Serialization/SerializerElement.h>
#include <GDJS/Events/Builtin/JsCodeEvent.h>
#include <GDJS/Events/CodeGeneration/BehaviorCodeGenerator.h>
#include <GDJS/Events/CodeGeneration/EventsFunctionsExtensionCodeGenerator.h>
#include <GDJS/Events/CodeGeneration/LayoutCodeGenerator.h>
#include <GDJS/IDE/Exporter.h>
#include <GDJS/IDE/ExporterHelper.h>
#include <emscripten.h>
#include <map>
#include <set>
#include <string>
#include <utility>
#include <vector>
#include "../../Extensions/PanelSpriteObject/PanelSpriteObject.h"
#include "../../Extensions/ParticleSystem/ParticleEmitterObject.h"
#include "../../Extensions/PrimitiveDrawing/ShapePainterObject.h"
#include "../../Extensions/SkeletonObject/SkeletonObject.h"
#include "../../Extensions/TextEntryObject/TextEntryObject.h"
#include "../../Extensions/TextObject/TextObject.h"
#include "../../Extensions/TiledSpriteObject/TiledSpriteObject.h"
#include "BehaviorJsImplementation.h"
#include "BehaviorSharedDataJsImplementation.h"
#include "ObjectJsImplementation.h"
#include "ProjectHelper.h"
/**
* \brief Manual binding of gd::ArbitraryResourceWorker to allow overriding
* methods that are using std::string
*/
class ArbitraryResourceWorkerJS : public ArbitraryResourceWorker {
public:
void ExposeImage(gd::String &arg0) {
arg0 = (const char *)EM_ASM_INT(
{
var self =
Module['getCache'](Module['ArbitraryResourceWorkerJS'])[$0];
if (!self.hasOwnProperty('exposeImage'))
throw 'a JSImplementation must implement all functions, you forgot ArbitraryResourceWorkerJS::exposeImage.';
return ensureString(self.exposeImage(UTF8ToString($1)));
},
(int)this,
arg0.c_str());
}
void ExposeShader(gd::String &arg0) {
arg0 = (const char *)EM_ASM_INT(
{
var self =
Module['getCache'](Module['ArbitraryResourceWorkerJS'])[$0];
if (!self.hasOwnProperty('exposeShader'))
throw 'a JSImplementation must implement all functions, you forgot ArbitraryResourceWorkerJS::exposeShader.';
return ensureString(self.exposeShader(UTF8ToString($1)));
},
(int)this,
arg0.c_str());
}
void ExposeFile(gd::String &arg0) {
arg0 = (const char *)EM_ASM_INT(
{
var self =
Module['getCache'](Module['ArbitraryResourceWorkerJS'])[$0];
if (!self.hasOwnProperty('exposeFile'))
throw 'a JSImplementation must implement all functions, you forgot ArbitraryResourceWorkerJS::exposeFile.';
return ensureString(self.exposeFile(UTF8ToString($1)));
},
(int)this,
arg0.c_str());
}
};
/**
* \brief Manual binding of gd::AbstractFileSystem to allow overriding methods
* that are using std::string
*/
class AbstractFileSystemJS : public AbstractFileSystem {
public:
virtual void MkDir(const gd::String &path) {
EM_ASM_INT(
{
var self = Module['getCache'](Module['AbstractFileSystemJS'])[$0];
if (!self.hasOwnProperty('mkDir'))
throw 'a JSImplementation must implement all functions, you forgot AbstractFileSystemJS::mkDir.';
self.mkDir(UTF8ToString($1));
},
(int)this,
path.c_str());
}
virtual bool DirExists(const gd::String &path) {
return EM_ASM_INT(
{
var self = Module['getCache'](Module['AbstractFileSystemJS'])[$0];
if (!self.hasOwnProperty('dirExists'))
throw 'a JSImplementation must implement all functions, you forgot AbstractFileSystemJS::dirExists.';
return self.dirExists(UTF8ToString($1));
},
(int)this,
path.c_str());
}
virtual bool FileExists(const gd::String &path) {
return EM_ASM_INT(
{
var self = Module['getCache'](Module['AbstractFileSystemJS'])[$0];
if (!self.hasOwnProperty('fileExists'))
throw 'a JSImplementation must implement all functions, you forgot AbstractFileSystemJS::fileExists.';
return self.fileExists(UTF8ToString($1));
},
(int)this,
path.c_str());
}
virtual gd::String FileNameFrom(const gd::String &file) {
return (const char *)EM_ASM_INT(
{
var self = Module['getCache'](Module['AbstractFileSystemJS'])[$0];
if (!self.hasOwnProperty('fileNameFrom'))
throw 'a JSImplementation must implement all functions, you forgot AbstractFileSystemJS::fileNameFrom.';
return ensureString(self.fileNameFrom(UTF8ToString($1)));
},
(int)this,
file.c_str());
}
virtual gd::String DirNameFrom(const gd::String &file) {
return (const char *)EM_ASM_INT(
{
var self = Module['getCache'](Module['AbstractFileSystemJS'])[$0];
if (!self.hasOwnProperty('dirNameFrom'))
throw 'a JSImplementation must implement all functions, you forgot AbstractFileSystemJS::dirNameFrom.';
return ensureString(self.dirNameFrom(UTF8ToString($1)));
},
(int)this,
file.c_str());
}
virtual bool MakeAbsolute(gd::String &filename,
const gd::String &baseDirectory) {
filename = (const char *)EM_ASM_INT(
{
var self = Module['getCache'](Module['AbstractFileSystemJS'])[$0];
if (!self.hasOwnProperty('makeAbsolute'))
throw 'a JSImplementation must implement all functions, you forgot AbstractFileSystemJS::makeAbsolute.';
return ensureString(
self.makeAbsolute(UTF8ToString($1), UTF8ToString($2)));
},
(int)this,
filename.c_str(),
baseDirectory.c_str());
return true;
}
virtual bool MakeRelative(gd::String &filename,
const gd::String &baseDirectory) {
filename = (const char *)EM_ASM_INT(
{
var self = Module['getCache'](Module['AbstractFileSystemJS'])[$0];
if (!self.hasOwnProperty('makeRelative'))
throw 'a JSImplementation must implement all functions, you forgot AbstractFileSystemJS::makeRelative.';
return ensureString(
self.makeRelative(UTF8ToString($1), UTF8ToString($2)));
},
(int)this,
filename.c_str(),
baseDirectory.c_str());
return true;
}
virtual bool IsAbsolute(const gd::String &filename) {
return (bool)EM_ASM_INT(
{
var self = Module['getCache'](Module['AbstractFileSystemJS'])[$0];
if (!self.hasOwnProperty('isAbsolute'))
throw 'a JSImplementation must implement all functions, you forgot AbstractFileSystemJS::isAbsolute.';
return self.isAbsolute(UTF8ToString($1));
},
(int)this,
filename.c_str());
};
virtual bool CopyFile(const gd::String &file, const gd::String &destination) {
return (bool)EM_ASM_INT(
{
var self = Module['getCache'](Module['AbstractFileSystemJS'])[$0];
if (!self.hasOwnProperty('copyFile'))
throw 'a JSImplementation must implement all functions, you forgot AbstractFileSystemJS::copyFile.';
return self.copyFile(UTF8ToString($1), UTF8ToString($2));
},
(int)this,
file.c_str(),
destination.c_str());
}
virtual bool ClearDir(const gd::String &directory) {
return (bool)EM_ASM_INT(
{
var self = Module['getCache'](Module['AbstractFileSystemJS'])[$0];
if (!self.hasOwnProperty('clearDir'))
throw 'a JSImplementation must implement all functions, you forgot AbstractFileSystemJS::clearDir.';
return self.clearDir(UTF8ToString($1));
},
(int)this,
directory.c_str());
}
virtual bool WriteToFile(const gd::String &file, const gd::String &content) {
return (bool)EM_ASM_INT(
{
var self = Module['getCache'](Module['AbstractFileSystemJS'])[$0];
if (!self.hasOwnProperty('writeToFile'))
throw 'a JSImplementation must implement all functions, you forgot AbstractFileSystemJS::writeToFile.';
return self.writeToFile(UTF8ToString($1), UTF8ToString($2));
},
(int)this,
file.c_str(),
content.c_str());
}
virtual gd::String ReadFile(const gd::String &file) {
return (const char *)EM_ASM_INT(
{
var self = Module['getCache'](Module['AbstractFileSystemJS'])[$0];
if (!self.hasOwnProperty('readFile'))
throw 'a JSImplementation must implement all functions, you forgot AbstractFileSystemJS::readFile.';
return ensureString(self.readFile(UTF8ToString($1)));
},
(int)this,
file.c_str());
}
virtual gd::String GetTempDir() {
return (const char *)EM_ASM_INT(
{
var self = Module['getCache'](Module['AbstractFileSystemJS'])[$0];
if (!self.hasOwnProperty('getTempDir'))
throw 'a JSImplementation must implement all functions, you forgot AbstractFileSystemJS::getTempDir.';
return ensureString(self.getTempDir());
},
(int)this);
}
virtual std::vector<gd::String> ReadDir(const gd::String &path,
const gd::String &extension = "") {
std::vector<gd::String> directories = *(std::vector<gd::String> *)EM_ASM_INT(
{
var self = Module['getCache'](Module['AbstractFileSystemJS'])[$0];
if (!self.hasOwnProperty('readDir'))
throw 'a JSImplementation must implement all functions, you forgot AbstractFileSystemJS::readDir.';
return self.readDir(UTF8ToString($1), UTF8ToString($2)).ptr;
},
(int)this,
path.c_str(),
extension.c_str());
return directories;
}
AbstractFileSystemJS(){};
virtual ~AbstractFileSystemJS(){};
};
class InitialInstanceJSFunctorWrapper : public gd::InitialInstanceFunctor {
public:
InitialInstanceJSFunctorWrapper(){};
virtual void operator()(gd::InitialInstance &instance) { invoke(&instance); };
virtual void invoke(gd::InitialInstance *instance){};
};
// Implement some std::vector<*> erase methods as free functions as there is no
// easy way to properly expose the erase method :'(
void removeFromVectorPolygon2d(std::vector<Polygon2d> &vec, size_t pos) {
vec.erase(vec.begin() + pos);
}
void removeFromVectorVector2f(std::vector<sf::Vector2f> &vec, size_t pos) {
vec.erase(vec.begin() + pos);
}
void removeFromVectorParameterMetadata(std::vector<gd::ParameterMetadata> &vec,
size_t pos) {
vec.erase(vec.begin() + pos);
}
// Implement a conversion from std::set<gd::String> to std::vector<gd::String>
// as there is no easy way to properly expose iterators :/
std::vector<gd::String> toNewVectorString(const std::set<gd::String> &set) {
std::vector<gd::String> output(set.begin(), set.end());
return output;
}
// Declares typedef for std::vector and templatized types
typedef std::vector<gd::String> VectorString;
typedef std::vector<std::shared_ptr<gd::PlatformExtension>>
VectorPlatformExtension;
typedef std::pair<gd::String, gd::Variable> PairStringVariable;
typedef std::pair<gd::String, TextFormatting> PairStringTextFormatting;
typedef std::vector<std::pair<gd::String, TextFormatting>>
VectorPairStringTextFormatting;
typedef std::vector<gd::ObjectGroup> VectorObjectGroup;
typedef std::map<gd::String, gd::String> MapStringString;
typedef std::map<gd::String, bool> MapStringBoolean;
typedef std::map<gd::String, double> MapStringDouble;
typedef std::map<gd::String, gd::ExpressionMetadata>
MapStringExpressionMetadata;
typedef std::map<gd::String, gd::InstructionMetadata>
MapStringInstructionMetadata;
typedef std::map<gd::String, gd::EventMetadata> MapStringEventMetadata;
typedef std::map<gd::String, gd::Variable> MapStringVariable;
typedef std::map<gd::String, gd::PropertyDescriptor>
MapStringPropertyDescriptor;
typedef std::set<gd::String> SetString;
typedef std::vector<Point> VectorPoint;
typedef std::vector<Polygon2d> VectorPolygon2d;
typedef std::vector<sf::Vector2f> VectorVector2f;
typedef std::vector<EventsSearchResult> VectorEventsSearchResult;
typedef std::vector<gd::ParameterMetadata> VectorParameterMetadata;
typedef std::vector<gd::DependencyMetadata> VectorDependencyMetadata;
typedef std::vector<gd::EventsFunction> VectorEventsFunction;
typedef gd::Object gdObject; // To avoid clashing javascript Object in glue.js
typedef ParticleEmitterObject::RendererType ParticleEmitterObject_RendererType;
typedef EventsFunction::FunctionType EventsFunction_FunctionType;
typedef std::unique_ptr<gd::Object> UniquePtrObject;
typedef std::unique_ptr<ExpressionNode> UniquePtrExpressionNode;
typedef std::vector<gd::ExpressionParserDiagnostic *>
VectorExpressionParserDiagnostic;
typedef gd::SerializableWithNameList<gd::EventsBasedBehavior>
EventsBasedBehaviorsList;
typedef gd::SerializableWithNameList<gd::NamedPropertyDescriptor>
NamedPropertyDescriptorsList;
typedef ExpressionCompletionDescription::CompletionKind
ExpressionCompletionDescription_CompletionKind;
typedef std::vector<gd::ExpressionCompletionDescription>
VectorExpressionCompletionDescription;
typedef std::map<gd::String, std::map<gd::String, gd::PropertyDescriptor>>
MapExtensionProperties;
typedef ExtensionAndMetadata<BehaviorMetadata> ExtensionAndBehaviorMetadata;
typedef ExtensionAndMetadata<ObjectMetadata> ExtensionAndObjectMetadata;
typedef ExtensionAndMetadata<EffectMetadata> ExtensionAndEffectMetadata;
typedef ExtensionAndMetadata<InstructionMetadata>
ExtensionAndInstructionMetadata;
typedef ExtensionAndMetadata<InstructionMetadata>
ExtensionAndInstructionMetadata;
typedef ExtensionAndMetadata<ExpressionMetadata> ExtensionAndExpressionMetadata;
typedef ExtensionAndMetadata<ExpressionMetadata> ExtensionAndExpressionMetadata;
typedef ExtensionAndMetadata<ExpressionMetadata> ExtensionAndExpressionMetadata;
typedef ExtensionAndMetadata<ExpressionMetadata> ExtensionAndExpressionMetadata;
typedef ExtensionAndMetadata<ExpressionMetadata> ExtensionAndExpressionMetadata;
typedef ExtensionAndMetadata<ExpressionMetadata> ExtensionAndExpressionMetadata;
// Customize some functions implementation thanks to WRAPPED_* macros
// The original names will be reconstructed in the js file (see postjs.js)
#define WRAPPED_set(a, b) at(a) = b
#define WRAPPED_GetString(i) at(i).first
#define WRAPPED_GetComment() com1
#define WRAPPED_SetComment(str) com1 = str
#define WRAPPED_GetTextFormatting(i) at(i).second
#define WRAPPED_GetName() first
#define WRAPPED_GetVariable() second
#define WRAPPED_SetBool(v) SetValue(v)
#define WRAPPED_SetString(v) SetValue(gd::String(v))
#define WRAPPED_SetInt(v) SetValue(v)
#define WRAPPED_SetDouble(v) SetValue(v)
#define WRAPPED_SetChild(name, child) GetChild(name) = child
// Wrappers to avoid dealing with shared_ptr in the methods interface:
#define WRAPPED_AddBehavior(name, \
fullname, \
defaultName, \
description, \
group, \
icon24x24, \
className, \
instance, \
sharedDatasInstance) \
AddBehavior(name, \
fullname, \
defaultName, \
description, \
group, \
icon24x24, \
className, \
std::shared_ptr<gd::Behavior>(instance), \
std::shared_ptr<gd::BehaviorsSharedData>(sharedDatasInstance))
#define WRAPPED_AddObject(name, fullname, description, icon24x24, instance) \
AddObject(name, \
fullname, \
description, \
icon24x24, \
std::shared_ptr<gd::Object>(instance))
#define WRAPPED_at(a) at(a).get()
#define MAP_getOrCreate(key) operator[](key)
#define MAP_get(key) find(key)->second
#define MAP_set(key, value) [key] = value
#define MAP_has(key) find(key) != self->end()
#define STATIC_CreateNewGDJSProject CreateNewGDJSProject
#define STATIC_InitializePlatforms InitializePlatforms
#define STATIC_ValidateName ValidateName
#define STATIC_ToJSON ToJSON
#define STATIC_FromJSON(x) FromJSON(gd::String(x))
#define STATIC_IsObject IsObject
#define STATIC_IsBehavior IsBehavior
#define STATIC_Get Get
#define STATIC_AddAllMissing AddAllMissing
#define STATIC_GetAllUseless GetAllUseless
#define STATIC_RemoveAllUseless RemoveAllUseless
#define STATIC_GetExtensionAndBehaviorMetadata GetExtensionAndBehaviorMetadata
#define STATIC_GetExtensionAndObjectMetadata GetExtensionAndObjectMetadata
#define STATIC_GetExtensionAndEffectMetadata GetExtensionAndEffectMetadata
#define STATIC_GetExtensionAndActionMetadata GetExtensionAndActionMetadata
#define STATIC_GetExtensionAndConditionMetadata GetExtensionAndConditionMetadata
#define STATIC_GetExtensionAndExpressionMetadata \
GetExtensionAndExpressionMetadata
#define STATIC_GetExtensionAndObjectExpressionMetadata \
GetExtensionAndObjectExpressionMetadata
#define STATIC_GetExtensionAndBehaviorExpressionMetadata \
GetExtensionAndBehaviorExpressionMetadata
#define STATIC_GetExtensionAndStrExpressionMetadata \
GetExtensionAndStrExpressionMetadata
#define STATIC_GetExtensionAndObjectStrExpressionMetadata \
GetExtensionAndObjectStrExpressionMetadata
#define STATIC_GetExtensionAndBehaviorStrExpressionMetadata \
GetExtensionAndBehaviorStrExpressionMetadata
#define STATIC_HasCondition HasCondition
#define STATIC_HasAction HasAction
#define STATIC_HasObjectAction HasObjectAction
#define STATIC_HasObjectCondition HasObjectCondition
#define STATIC_HasBehaviorAction HasBehaviorAction
#define STATIC_HasBehaviorCondition HasBehaviorCondition
#define STATIC_HasExpression HasExpression
#define STATIC_HasObjectExpression HasObjectExpression
#define STATIC_HasBehaviorExpression HasBehaviorExpression
#define STATIC_HasStrExpression HasStrExpression
#define STATIC_HasObjectStrExpression HasObjectStrExpression
#define STATIC_HasBehaviorStrExpression HasBehaviorStrExpression
#define STATIC_RenameObjectInEvents RenameObjectInEvents
#define STATIC_RemoveObjectInEvents RemoveObjectInEvents
#define STATIC_ReplaceStringInEvents ReplaceStringInEvents
#define STATIC_ExposeProjectEvents ExposeProjectEvents
#define STATIC_GetBehaviorMetadata GetBehaviorMetadata
#define STATIC_GetObjectMetadata GetObjectMetadata
#define STATIC_GetEffectMetadata GetEffectMetadata
#define STATIC_GetActionMetadata GetActionMetadata
#define STATIC_GetConditionMetadata GetConditionMetadata
#define STATIC_GetExpressionMetadata GetExpressionMetadata
#define STATIC_GetObjectExpressionMetadata GetObjectExpressionMetadata
#define STATIC_GetBehaviorExpressionMetadata GetBehaviorExpressionMetadata
#define STATIC_GetStrExpressionMetadata GetStrExpressionMetadata
#define STATIC_GetObjectStrExpressionMetadata GetObjectStrExpressionMetadata
#define STATIC_GetBehaviorStrExpressionMetadata GetBehaviorStrExpressionMetadata
#define STATIC_Major Major
#define STATIC_Minor Minor
#define STATIC_Build Build
#define STATIC_Revision Revision
#define STATIC_FullString FullString
#define STATIC_Status Status
#define STATIC_Year Year
#define STATIC_Month Month
#define STATIC_Date Date
#define STATIC_ObjectOrGroupRenamedInLayout ObjectOrGroupRenamedInLayout
#define STATIC_ObjectOrGroupRemovedInLayout ObjectOrGroupRemovedInLayout
#define STATIC_ObjectOrGroupRemovedInEventsFunction \
ObjectOrGroupRemovedInEventsFunction
#define STATIC_ObjectOrGroupRenamedInEventsFunction \
ObjectOrGroupRenamedInEventsFunction
#define STATIC_GlobalObjectOrGroupRenamed GlobalObjectOrGroupRenamed
#define STATIC_GlobalObjectOrGroupRemoved GlobalObjectOrGroupRemoved
#define STATIC_GetAllObjectTypesUsingEventsBasedBehavior \
GetAllObjectTypesUsingEventsBasedBehavior
#define STATIC_EnsureBehaviorEventsFunctionsProperParameters \
EnsureBehaviorEventsFunctionsProperParameters
#define STATIC_CreateRectangle CreateRectangle
#define STATIC_SanityCheckBehaviorProperty SanityCheckBehaviorProperty
#define STATIC_SanityCheckObjectProperty SanityCheckObjectProperty
#define STATIC_SanityCheckObjectInitialInstanceProperty \
SanityCheckObjectInitialInstanceProperty
#define STATIC_SanityCheckBehaviorsSharedDataProperty \
SanityCheckBehaviorsSharedDataProperty
#define STATIC_SearchInEvents SearchInEvents
#define STATIC_UnfoldWhenContaining UnfoldWhenContaining
#define STATIC_EventsFunctionToObjectsContainer EventsFunctionToObjectsContainer
#define STATIC_ParametersToObjectsContainer ParametersToObjectsContainer
#define STATIC_GetObjectParameterIndexFor GetObjectParameterIndexFor
#define STATIC_GetNamespaceSeparator GetNamespaceSeparator
#define STATIC_RenameEventsFunctionsExtension RenameEventsFunctionsExtension
#define STATIC_RenameEventsFunction RenameEventsFunction
#define STATIC_RenameBehaviorEventsFunction RenameBehaviorEventsFunction
#define STATIC_MoveEventsFunctionParameter MoveEventsFunctionParameter
#define STATIC_MoveBehaviorEventsFunctionParameter \
MoveBehaviorEventsFunctionParameter
#define STATIC_RenameBehaviorProperty RenameBehaviorProperty
#define STATIC_RenameEventsBasedBehavior RenameEventsBasedBehavior
#define STATIC_GetBehaviorPropertyGetterName GetBehaviorPropertyGetterName
#define STATIC_GetBehaviorPropertySetterName GetBehaviorPropertySetterName
#define STATIC_GetPropertyActionName GetPropertyActionName
#define STATIC_GetPropertyConditionName GetPropertyConditionName
#define STATIC_GetPropertyExpressionName GetPropertyExpressionName
#define STATIC_CopyAllResourcesTo CopyAllResourcesTo
#define STATIC_IsExtensionLifecycleEventsFunction \
IsExtensionLifecycleEventsFunction
#define STATIC_GetCompletionDescriptionsFor GetCompletionDescriptionsFor
// We postfix some methods with "At" as Javascript does not support overloading
#define GetLayoutAt GetLayout
#define GetExternalEventsAt GetExternalEvents
#define GetExternalLayoutAt GetExternalLayout
#define GetEventsFunctionsExtensionAt GetEventsFunctionsExtension
#define GetLayerAt GetLayer
#define GetObjectAt GetObject
#define GetAt Get
#define GetEventAt GetEvent
#define RemoveEventAt RemoveEvent
#define RemoveAt Remove
#define GetEventsFunctionAt GetEventsFunction
#define GetEffectAt GetEffect
// We don't use prefix in .idl file to workaround a webidl_binder.py bug
// that can't find in its list of interfaces a class which has a prefix.
using namespace gd;
using namespace std;
#include "glue.cpp"