12 #include "GDCore/Events/CodeGeneration/DiagnosticReport.h"
13 #include "GDCore/Events/Event.h"
14 #include "GDCore/Events/Instruction.h"
15 #include "GDCore/Project/ProjectScopedContainers.h"
16 #include "GDCore/String.h"
23 class ObjectsContainer;
24 class ObjectsContainersList;
26 class ParameterMetadata;
28 class BehaviorMetadata;
29 class InstructionMetadata;
30 class EventsCodeGenerationContext;
31 class ExpressionCodeGenerationInformation;
32 class InstructionMetadata;
129 std::vector<gd::String> GenerateParametersCodes(
130 const std::vector<gd::Expression>& parameters,
133 std::vector<std::pair<gd::String, gd::String> >*
134 supplementaryParametersTypes = 0);
163 const gd::String& optionalAsyncCallbackName =
"",
164 const gd::String& optionalAsyncCallbackId =
"");
169 const std::set<gd::String> requiredObjects_)
170 : functionName(functionName_),
171 argumentsList(argumentsList_),
172 requiredObjects(requiredObjects_) {};
217 virtual gd::String GenerateObjectsDeclarationCode(
264 if (!file.
empty()) includeFiles.insert(file);
272 for (std::size_t i = 0; i < files.size(); ++i) AddIncludeFile(files[i]);
279 customGlobalDeclarations.insert(declaration);
286 customCodeOutsideMain += code;
296 return customCodeOutsideMain;
302 return customGlobalDeclarations;
315 compilationForRuntime = compilationForRuntime_;
334 return projectScopedContainers.GetObjectsContainersList();
338 return projectScopedContainers;
348 return projectScopedContainers;
379 return maxCustomConditionsDepth;
388 diagnosticReport = diagnosticReport_;
425 return "bool " + boolName +
" = false;\n";
474 VARIABLE_OR_PROPERTY,
475 VARIABLE_OR_PROPERTY_OR_PARAMETER
490 size_t GenerateSingleUsageUniqueIdFor(
const gd::Instruction* instruction);
499 size_t GenerateSingleUsageUniqueIdForEventsList();
501 virtual gd::String GenerateRelationalOperation(
509 virtual gd::String GenerateLocalVariablesStackAccessor();
517 EventsCodeGenerationContext& context);
519 virtual gd::String GeneratePropertySetterWithoutCasting(
525 virtual const gd::String GenerateRelationalOperatorCodes(
569 std::vector<std::pair<gd::String, gd::String> >*
570 supplementaryParametersTypes);
577 const VariableScope& scope,
583 if (scope == LAYOUT_VARIABLE) {
584 return "getLayoutVariable(" + variableName +
")";
586 }
else if (scope == PROJECT_VARIABLE) {
587 return "getProjectVariable(" + variableName +
")";
588 }
else if (scope == ANY_VARIABLE || scope == VARIABLE_OR_PROPERTY ||
589 scope == VARIABLE_OR_PROPERTY_OR_PARAMETER) {
591 return "getAnyVariable(" + variableName +
")";
594 return "getVariableForObject(" + objectName +
", " + variableName +
")";
601 return ".getChild(" + ConvertToStringExplicit(childName) +
")";
605 return type ==
"number|string" ?
".getAsNumberOrString()"
606 : type ==
"string" ?
".getAsString()"
616 return ".getChild(" + expressionCode +
")";
635 return "fakeObjectListOf_" + objectName;
644 virtual gd::String GeneratePropertyGetterWithoutCasting(
653 virtual gd::String GenerateParameterGetterWithoutCasting(
674 virtual gd::String GenerateObjectFunctionCall(
695 virtual gd::String GenerateObjectBehaviorFunctionCall(
737 return "!(" + predicate +
")";
741 const std::vector<gd::String>& arguments,
744 bool conditionInverted,
750 const std::vector<gd::String>& arguments,
753 bool conditionInverted,
760 const std::vector<gd::String>& arguments,
763 bool conditionInverted,
768 const std::vector<gd::String>& arguments,
771 const gd::String& optionalAsyncCallbackName =
"",
772 const gd::String& optionalAsyncCallbackId =
"");
778 const std::vector<gd::String>& arguments,
781 const gd::String& optionalAsyncCallbackName =
"",
782 const gd::String& optionalAsyncCallbackId =
"");
789 const std::vector<gd::String>& arguments,
792 const gd::String& optionalAsyncCallbackName =
"",
793 const gd::String& optionalAsyncCallbackId =
"");
797 const std::vector<gd::String>& arguments,
799 std::size_t startFromArgument = 0);
802 const std::vector<gd::String>& arguments,
805 std::size_t startFromArgument = 0);
808 const std::vector<gd::String>& arguments,
810 std::size_t startFromArgument = 0);
812 const std::vector<gd::String>& arguments,
814 std::size_t startFromArgument = 0);
834 const std::vector<gd::String>& arguments,
size_t startFrom = 0);
839 virtual gd::String GenerateGetBehaviorNameCode(
Definition: DiagnosticReport.h:57
Used to manage the context when generating code for events.
Definition: EventsCodeGenerationContext.h:27
Internal class used to generate code from events.
Definition: EventsCodeGenerator.h:41
virtual gd::String GenerateNegatedPredicate(const gd::String &predicate) const
Must negate a predicate.
Definition: EventsCodeGenerator.h:735
size_t GetMaxConditionsListsSize() const
Get the maximum size of a list of conditions.
Definition: EventsCodeGenerator.h:385
const gd::Project * project
The project being used.
Definition: EventsCodeGenerator.h:851
void AddIncludeFiles(std::vector< gd::String > files)
Declare a list of include files to be added.
Definition: EventsCodeGenerator.h:271
virtual gd::String GetCodeNamespace()
Get the namespace to be used to store code generated objects/values/functions.
Definition: EventsCodeGenerator.h:467
const gd::Platform & GetPlatform() const
Get the platform the code is being generated for.
Definition: EventsCodeGenerator.h:372
virtual gd::String GenerateUpperScopeBooleanFullName(const gd::String &boolName, const gd::EventsCodeGenerationContext &context)
Generate the full name for accessing to a boolean variable used for conditions.
Definition: EventsCodeGenerator.h:411
void AddGlobalDeclaration(gd::String declaration)
Add a declaration which will be inserted after includes.
Definition: EventsCodeGenerator.h:278
virtual gd::String GenerateVariableBracketAccessor(gd::String expressionCode)
Generate the code to get the child of a variable, using generated the expression.
Definition: EventsCodeGenerator.h:614
const std::set< gd::String > & GetIncludeFiles() const
Get the set containing the include files.
Definition: EventsCodeGenerator.h:291
void SetGenerateCodeForRuntime(bool compilationForRuntime_)
Set if the code generated is meant to be used for runtime only and not in the IDE.
Definition: EventsCodeGenerator.h:314
size_t maxCustomConditionsDepth
Definition: EventsCodeGenerator.h:867
virtual gd::String GenerateScopeBegin(gd::EventsCodeGenerationContext &context, const gd::String &extraVariable="")
Called when a new scope must be entered.
Definition: EventsCodeGenerator.h:711
bool compilationForRuntime
Definition: EventsCodeGenerator.h:855
const gd::Platform & platform
The platform being used.
Definition: EventsCodeGenerator.h:845
virtual gd::String GenerateProfilerSectionBegin(const gd::String §ion)
Generate the code to notify the profiler of the beginning of a section.
Definition: EventsCodeGenerator.h:441
const gd::Layout * scene
The scene being generated.
Definition: EventsCodeGenerator.h:852
virtual gd::String GenerateBadVariable()
Generate the code to reference a variable which is in an empty/null state.
Definition: EventsCodeGenerator.h:623
virtual gd::String GenerateBooleanInitializationToFalse(const gd::String &boolName, const gd::EventsCodeGenerationContext &context)
Must create a boolean. Its value must be false.
Definition: EventsCodeGenerator.h:422
bool GenerateCodeForRuntime()
Return true if code generation is made for runtime only.
Definition: EventsCodeGenerator.h:308
virtual gd::String GenerateBadObject()
Generate the code to reference an object which is in an empty/null state.
Definition: EventsCodeGenerator.h:660
virtual gd::String GenerateGetVariable(const gd::String &variableName, const VariableScope &scope, gd::EventsCodeGenerationContext &context, const gd::String &objectName, bool hasChild)
Generate the code to get a variable.
Definition: EventsCodeGenerator.h:575
bool hasProjectAndLayout
Definition: EventsCodeGenerator.h:849
gd::String GenerateTrue() const
Return the "true" keyword in the target language.
Definition: EventsCodeGenerator.h:819
size_t GetMaxCustomConditionsDepth() const
Get the maximum depth of custom conditions reached during code generation.
Definition: EventsCodeGenerator.h:378
gd::String GenerateFalse() const
Return the "false" keyword in the target language.
Definition: EventsCodeGenerator.h:824
gd::String customCodeOutsideMain
Definition: EventsCodeGenerator.h:862
size_t maxConditionsListsSize
The maximum size of a list of conditions.
Definition: EventsCodeGenerator.h:869
gd::ProjectScopedContainers & GetProjectScopedContainers()
Give access to the project scoped containers as code generation might push and pop variable container...
Definition: EventsCodeGenerator.h:347
size_t eventsListNextUniqueId
Definition: EventsCodeGenerator.h:873
std::set< gd::String > customGlobalDeclarations
Definition: EventsCodeGenerator.h:865
const std::set< gd::String > & GetCustomGlobalDeclaration() const
Get the custom declaration to be inserted after includes.
Definition: EventsCodeGenerator.h:301
virtual gd::String GenerateObject(const gd::String &objectName, const gd::String &type, gd::EventsCodeGenerationContext &context)
Generate the code to reference an object.
Definition: EventsCodeGenerator.h:632
bool HasProjectAndLayout() const
Return true if the code generation is done for a given project and layout. If not,...
Definition: EventsCodeGenerator.h:355
virtual gd::String GenerateBooleanFullName(const gd::String &boolName, const gd::EventsCodeGenerationContext &context)
Generate the full name for accessing to a boolean variable used for conditions.
Definition: EventsCodeGenerator.h:399
virtual gd::String GenerateProfilerSectionEnd(const gd::String §ion)
Generate the code to notify the profiler of the end of a section.
Definition: EventsCodeGenerator.h:448
const gd::String & GetCustomCodeOutsideMain() const
Get the custom code to be inserted outside main.
Definition: EventsCodeGenerator.h:295
const gd::Project & GetProject() const
Get the project the code is being generated for.
Definition: EventsCodeGenerator.h:361
void AddCustomCodeOutsideMain(gd::String code)
Add some code before events outside the main function.
Definition: EventsCodeGenerator.h:285
std::set< gd::String > includeFiles
Definition: EventsCodeGenerator.h:859
void AddIncludeFile(gd::String file)
Declare an include file to be added.
Definition: EventsCodeGenerator.h:263
virtual gd::String GenerateVariableAccessor(gd::String childName)
Generate the code to get the child of a variable.
Definition: EventsCodeGenerator.h:600
bool errorOccurred
Must be set to true if an error occurred.
Definition: EventsCodeGenerator.h:854
virtual gd::String GetCodeNamespaceAccessor()
Get the namespace to be used to store code generated objects/values/functions, with the extra "dot" a...
Definition: EventsCodeGenerator.h:459
bool ErrorOccurred() const
Return true if an error has occurred during code generation (in this case, generated code is not usab...
Definition: EventsCodeGenerator.h:331
std::set< size_t > instructionUniqueIds
The unique ids generated for instructions.
Definition: EventsCodeGenerator.h:872
const gd::Layout & GetLayout() const
Get the layout the code is being generated for.
Definition: EventsCodeGenerator.h:367
virtual gd::String GenerateScopeEnd(gd::EventsCodeGenerationContext &context, const gd::String &extraVariable="")
Called when a new must be ended.
Definition: EventsCodeGenerator.h:724
A list of events.
Definition: EventsList.h:32
Generate code for a parsed expression.
Definition: ExpressionCodeGenerator.h:35
Class representing an expression used as a parameter of a gd::Instruction. This class is nothing more...
Definition: Expression.h:30
An instruction is a member of an event: It can be a condition or an action.
Definition: Instruction.h:30
Definition: InstructionsList.h:25
Represent a layout ( also called a scene ) of a project.
Definition: Layout.h:40
Used to describe a property shown in a property grid.
Definition: NamedPropertyDescriptor.h:21
A list of objects containers, useful for accessing objects in a scoped way, along with methods to acc...
Definition: ObjectsContainersList.h:29
Base class representing a project (game), including all resources, scenes, objects,...
Definition: Project.h:50
Holds references to variables, objects, properties and other containers.
Definition: ProjectScopedContainers.h:34
A container of properties, used for custom behaviors, custom objects, extensions.....
Definition: PropertiesContainer.h:17
String represents an UTF8 encoded string.
Definition: String.h:33
bool empty() const
Returns true if the string is empty.
Definition: String.h:157
Definition: CommonTools.h:24
Definition: EventsCodeGenerator.h:166
const std::set< gd::String > requiredObjects
Definition: EventsCodeGenerator.h:185
const gd::String argumentsList
Definition: EventsCodeGenerator.h:180
const gd::String functionName
Definition: EventsCodeGenerator.h:172