12 #include "GDCore/Events/CodeGeneration/EventsCodeGenerator.h"
13 #include "GDCore/Events/Event.h"
14 #include "GDCore/Events/InstructionsList.h"
16 class ObjectsContainer;
17 class EventsFunctionsContainer;
19 class EventsBasedBehavior;
20 class EventsBasedObject;
22 class BehaviorMetadata;
23 class InstructionMetadata;
24 class ExpressionCodeGenerationInformation;
25 class EventsCodeGenerationContext;
26 class ProjectScopedContainers;
27 class ParameterMetadataContainer;
52 const gd::Layout& scene,
53 const gd::String& codeNamespace,
54 std::set<gd::String>& includeFiles,
55 gd::DiagnosticReport& diagnosticReport,
56 bool compilationForRuntime =
false);
73 const gd::EventsFunctionsExtension& eventsFunctionsExtension,
74 const gd::EventsFunction& eventsFunction,
75 const gd::String& codeNamespace,
76 std::set<gd::String>& includeFiles,
77 bool compilationForRuntime =
false);
99 const gd::EventsFunctionsExtension& eventsFunctionsExtension,
100 const gd::EventsBasedBehavior& eventsBasedBehavior,
101 const gd::EventsFunction& eventsFunction,
102 const gd::String& codeNamespace,
103 const gd::String& fullyQualifiedFunctionName,
104 const gd::String& onceTriggersVariable,
105 const gd::String& preludeCode,
106 std::set<gd::String>& includeFiles,
107 bool compilationForRuntime =
false);
131 gd::Project& project,
132 const gd::EventsFunctionsExtension& eventsFunctionsExtension,
133 const gd::EventsBasedObject& eventsBasedObject,
134 const gd::EventsFunction& eventsFunction,
135 const gd::String& codeNamespace,
136 const gd::String& fullyQualifiedFunctionName,
137 const gd::String& onceTriggersVariable,
138 const gd::String& preludeCode,
139 const gd::String& endingCode,
140 std::set<gd::String>& includeFiles,
141 bool compilationForRuntime =
false);
155 gd::EventsList& events, gd::EventsCodeGenerationContext& context)
override;
167 gd::InstructionsList& conditions,
168 gd::EventsCodeGenerationContext& context)
override;
175 const gd::String& boolName,
176 const gd::EventsCodeGenerationContext& context)
override;
183 const gd::String& boolName,
184 const gd::EventsCodeGenerationContext& context)
override;
190 const gd::String& boolName,
191 const gd::EventsCodeGenerationContext& context)
override;
197 const gd::String& name,
const gd::EventsCodeGenerationContext& context)
override;
225 codeNamespace = codeNamespace_;
228 virtual gd::String GeneratePropertySetterWithoutCasting(
229 const gd::PropertiesContainer &propertiesContainer,
230 const gd::NamedPropertyDescriptor &property,
231 const gd::String &operandCode)
override;
234 virtual gd::String GenerateParameterCodes(
235 const gd::Expression& parameter,
236 const gd::ParameterMetadata& metadata,
237 gd::EventsCodeGenerationContext& context,
238 const gd::String& lastObjectName,
239 std::vector<std::pair<gd::String, gd::String> >*
240 supplementaryParametersTypes)
override;
242 virtual gd::String GenerateObjectFunctionCall(
243 gd::String objectListName,
244 const gd::ObjectMetadata& objMetadata,
245 const gd::ExpressionCodeGenerationInformation& codeInfo,
246 gd::String parametersStr,
247 gd::String defaultOutput,
248 gd::EventsCodeGenerationContext& context)
override;
250 virtual gd::String GenerateObjectBehaviorFunctionCall(
251 gd::String objectListName,
252 gd::String behaviorName,
253 const gd::BehaviorMetadata& autoInfo,
254 const gd::ExpressionCodeGenerationInformation& codeInfo,
255 gd::String parametersStr,
256 gd::String defaultOutput,
257 gd::EventsCodeGenerationContext& context)
override;
259 virtual gd::String GenerateFreeCondition(
260 const std::vector<gd::String>& arguments,
261 const gd::InstructionMetadata& instrInfos,
262 const gd::String& returnBoolean,
263 bool conditionInverted,
264 gd::EventsCodeGenerationContext& context)
override;
266 virtual gd::String GenerateObjectCondition(
267 const gd::String& objectName,
268 const gd::ObjectMetadata& objInfo,
269 const std::vector<gd::String>& arguments,
270 const gd::InstructionMetadata& instrInfos,
271 const gd::String& returnBoolean,
272 bool conditionInverted,
273 gd::EventsCodeGenerationContext& context)
override;
275 virtual gd::String GenerateBehaviorCondition(
276 const gd::String& objectName,
277 const gd::String& behaviorName,
278 const gd::BehaviorMetadata& autoInfo,
279 const std::vector<gd::String>& arguments,
280 const gd::InstructionMetadata& instrInfos,
281 const gd::String& returnBoolean,
282 bool conditionInverted,
283 gd::EventsCodeGenerationContext& context)
override;
285 virtual gd::String GenerateObjectAction(
286 const gd::String& objectName,
287 const gd::ObjectMetadata& objInfo,
288 const gd::String& functionCallName,
289 const std::vector<gd::String>& arguments,
290 const gd::InstructionMetadata& instrInfos,
291 gd::EventsCodeGenerationContext& context,
292 const gd::String& optionalAsyncCallbackName =
"")
override;
294 virtual gd::String GenerateBehaviorAction(
295 const gd::String& objectName,
296 const gd::String& behaviorName,
297 const gd::BehaviorMetadata& autoInfo,
298 const gd::String& functionCallName,
299 const std::vector<gd::String>& arguments,
300 const gd::InstructionMetadata& instrInfos,
301 gd::EventsCodeGenerationContext& context,
302 const gd::String& optionalAsyncCallbackName =
"")
override;
304 virtual gd::String GenerateGetBehaviorNameCode(
305 const gd::String& behaviorName)
override;
307 virtual gd::String GenerateGetVariable(
308 const gd::String& variableName,
309 const VariableScope& scope,
310 gd::EventsCodeGenerationContext& context,
311 const gd::String& objectName,
312 bool hasChild)
override;
314 virtual gd::String GenerateVariableAccessor(gd::String childName)
override {
316 return ".getChild(" + ConvertToStringExplicit(childName) +
")";
319 virtual gd::String GenerateVariableBracketAccessor(
320 gd::String expressionCode)
override {
326 return ".getChild(" + expressionCode +
")";
329 virtual gd::String GenerateBadVariable()
override {
330 return "gdjs.VariablesContainer.badVariable";
333 virtual gd::String GeneratePropertyGetter(
const gd::PropertiesContainer& propertiesContainer,
334 const gd::NamedPropertyDescriptor& property,
335 const gd::String& type,
336 gd::EventsCodeGenerationContext& context)
override;
338 virtual gd::String GeneratePropertyGetterWithoutCasting(
339 const gd::PropertiesContainer &propertiesContainer,
340 const gd::NamedPropertyDescriptor &property)
override;
342 virtual gd::String GenerateParameterGetter(
const gd::ParameterMetadata& parameter,
343 const gd::String& type,
344 gd::EventsCodeGenerationContext& context)
override;
346 virtual gd::String GenerateParameterGetterWithoutCasting(
347 const gd::ParameterMetadata ¶meter)
override;
349 virtual gd::String GenerateBadObject()
override {
return "null"; }
351 virtual gd::String GenerateObject(
const gd::String& objectName,
352 const gd::String& type,
353 gd::EventsCodeGenerationContext& context)
override;
355 virtual gd::String GenerateNegatedPredicate(
const gd::String& predicate)
const override {
356 return "!(" + predicate +
")";
359 virtual gd::String GenerateObjectsDeclarationCode(
360 gd::EventsCodeGenerationContext& context)
override;
362 virtual gd::String GenerateAllInstancesGetterCode(
363 const gd::String& objectName, gd::EventsCodeGenerationContext& context);
365 virtual gd::String GenerateProfilerSectionBegin(
const gd::String& section)
override;
366 virtual gd::String GenerateProfilerSectionEnd(
const gd::String& section)
override;
368 virtual gd::String GenerateRelationalOperation(
369 const gd::String& relationalOperator,
370 const gd::String& lhs,
371 const gd::String& rhs)
override;
374 static gd::String GenerateEventsListCompleteFunctionCode(
376 gd::String fullyQualifiedFunctionName,
377 gd::String functionArgumentsCode,
378 gd::String functionPreEventsCode,
379 const gd::EventsList& events,
380 gd::String functionPostEventsCode,
381 gd::String functionReturnCode);
390 gd::String GenerateAllConditionsBooleanDeclarations();
398 std::pair<gd::String, gd::String> GenerateAllObjectsDeclarationsAndResets(
399 unsigned int maxDepthLevelReached);
407 gd::String GenerateEventsFunctionParameterDeclarationsList(
408 const gd::ParameterMetadataContainer& parameters,
409 int firstParameterIndex,
410 bool addsSceneParameter);
417 gd::String GenerateFreeEventsFunctionContext(
418 const gd::EventsFunctionsExtension &eventsFunctionsExtension,
419 const gd::EventsFunction &eventsFunction,
420 const gd::String& onceTriggersVariable);
427 gd::String GenerateBehaviorEventsFunctionContext(
428 const gd::EventsFunctionsExtension &eventsFunctionsExtension,
429 const gd::EventsBasedBehavior& eventsBasedBehavior,
430 const gd::EventsFunction &eventsFunction,
431 const gd::String& onceTriggersVariable,
432 const gd::String& thisObjectName,
433 const gd::String& thisBehaviorName);
440 gd::String GenerateObjectEventsFunctionContext(
441 const gd::EventsFunctionsExtension &eventsFunctionsExtension,
442 const gd::EventsBasedObject& eventsBasedObject,
443 const gd::EventsFunction &eventsFunction,
444 const gd::String& onceTriggersVariable,
445 const gd::String& thisObjectName);
447 gd::String GenerateEventsFunctionReturn(
448 const gd::EventsFunction& eventFunction);
453 EventsCodeGenerator(
const gd::Project& project,
const gd::Layout& layout);
458 EventsCodeGenerator(
const gd::ProjectScopedContainers& projectScopedContainers);
459 virtual ~EventsCodeGenerator();
461 gd::String codeNamespace;
470 gd::String GenerateEventsFunctionContext(
471 const gd::EventsFunctionsExtension &eventsFunctionsExtension,
472 const gd::EventsFunctionsContainer &eventsFunctionsContainer,
473 const gd::EventsFunction &eventsFunction,
474 const gd::String &onceTriggersVariable,
475 gd::String &objectsGettersMap,
476 gd::String &objectArraysMap,
477 gd::String &behaviorNamesMap,
478 const gd::String &thisObjectName =
"",
479 const gd::String &thisBehaviorName =
"");
The class being responsible for generating JavaScript code from events.
Definition: EventsCodeGenerator.h:38
virtual gd::String GetCodeNamespaceAccessor() override
Get the namespace to be used to store code generated objects/values/functions, with the extra "dot" a...
Definition: EventsCodeGenerator.h:206
virtual gd::String GetCodeNamespace() override
Get the namespace to be used to store code generated objects/values/functions.
Definition: EventsCodeGenerator.h:216
virtual gd::String GenerateEventsListCode(gd::EventsList &events, gd::EventsCodeGenerationContext &context) override
Generate code for executing an event list.
Definition: EventsCodeGenerator.cpp:1150
virtual gd::String GenerateConditionsListCode(gd::InstructionsList &conditions, gd::EventsCodeGenerationContext &context) override
Definition: EventsCodeGenerator.cpp:1183
virtual gd::String GenerateBooleanInitializationToFalse(const gd::String &boolName, const gd::EventsCodeGenerationContext &context) override
Set a boolean to false.
Definition: EventsCodeGenerator.cpp:1507
static gd::String GenerateObjectEventsFunctionCode(gd::Project &project, const gd::EventsFunctionsExtension &eventsFunctionsExtension, const gd::EventsBasedObject &eventsBasedObject, const gd::EventsFunction &eventsFunction, const gd::String &codeNamespace, const gd::String &fullyQualifiedFunctionName, const gd::String &onceTriggersVariable, const gd::String &preludeCode, const gd::String &endingCode, std::set< gd::String > &includeFiles, bool compilationForRuntime=false)
Definition: EventsCodeGenerator.cpp:258
virtual gd::String GenerateUpperScopeBooleanFullName(const gd::String &boolName, const gd::EventsCodeGenerationContext &context) override
Generate the full name for accessing to a boolean variable used for conditions.
Definition: EventsCodeGenerator.cpp:1496
void SetCodeNamespace(const gd::String &codeNamespace_)
Specify the code namespace to use, useful for functions as it is not autogenerated.
Definition: EventsCodeGenerator.h:224
static gd::String GenerateBehaviorEventsFunctionCode(gd::Project &project, const gd::EventsFunctionsExtension &eventsFunctionsExtension, const gd::EventsBasedBehavior &eventsBasedBehavior, const gd::EventsFunction &eventsFunction, const gd::String &codeNamespace, const gd::String &fullyQualifiedFunctionName, const gd::String &onceTriggersVariable, const gd::String &preludeCode, std::set< gd::String > &includeFiles, bool compilationForRuntime=false)
Definition: EventsCodeGenerator.cpp:174
virtual gd::String GenerateBooleanFullName(const gd::String &boolName, const gd::EventsCodeGenerationContext &context) override
Generate the full name for accessing to a boolean variable used for conditions.
Definition: EventsCodeGenerator.cpp:1513
static gd::String GenerateEventsFunctionCode(gd::Project &project, const gd::EventsFunctionsExtension &eventsFunctionsExtension, const gd::EventsFunction &eventsFunction, const gd::String &codeNamespace, std::set< gd::String > &includeFiles, bool compilationForRuntime=false)
Definition: EventsCodeGenerator.cpp:125
virtual gd::String GetObjectListName(const gd::String &name, const gd::EventsCodeGenerationContext &context) override
Get the full name for accessing to a list of objects.
Definition: EventsCodeGenerator.cpp:1055
static gd::String GenerateLayoutCode(const gd::Project &project, const gd::Layout &scene, const gd::String &codeNamespace, std::set< gd::String > &includeFiles, gd::DiagnosticReport &diagnosticReport, bool compilationForRuntime=false)
Definition: EventsCodeGenerator.cpp:99