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);
74 const gd::EventsFunctionsExtension& eventsFunctionsExtension,
75 const gd::EventsFunction& eventsFunction,
76 const gd::String& codeNamespace,
77 std::set<gd::String>& includeFiles,
78 bool compilationForRuntime =
false);
100 const gd::EventsFunctionsExtension& eventsFunctionsExtension,
101 const gd::EventsBasedBehavior& eventsBasedBehavior,
102 const gd::EventsFunction& eventsFunction,
103 const gd::String& codeNamespace,
104 const gd::String& fullyQualifiedFunctionName,
105 const gd::String& onceTriggersVariable,
106 const gd::String& preludeCode,
107 std::set<gd::String>& includeFiles,
108 bool compilationForRuntime =
false);
133 gd::Project& project,
134 const gd::EventsFunctionsExtension& eventsFunctionsExtension,
135 const gd::EventsBasedObject& eventsBasedObject,
136 const gd::EventsFunction& eventsFunction,
137 const gd::String& codeNamespace,
138 const gd::String& fullyQualifiedFunctionName,
139 const gd::String& onceTriggersVariable,
140 const gd::String& preludeCode,
141 const gd::String& endingCode,
142 std::set<gd::String>& includeFiles,
143 bool compilationForRuntime =
false);
157 gd::EventsList& events,
158 gd::EventsCodeGenerationContext& context)
override;
170 gd::InstructionsList& conditions,
171 gd::EventsCodeGenerationContext& context)
override;
178 const gd::String& boolName,
179 const gd::EventsCodeGenerationContext& context)
override;
186 const gd::String& boolName,
187 const gd::EventsCodeGenerationContext& context)
override;
193 const gd::String& boolName,
194 const gd::EventsCodeGenerationContext& context)
override;
200 const gd::String& name,
201 const gd::EventsCodeGenerationContext& context)
override;
229 codeNamespace = codeNamespace_;
232 virtual gd::String GeneratePropertySetterWithoutCasting(
233 const gd::PropertiesContainer& propertiesContainer,
234 const gd::NamedPropertyDescriptor& property,
235 const gd::String& operandCode)
override;
238 virtual gd::String GenerateParameterCodes(
239 const gd::Expression& parameter,
240 const gd::ParameterMetadata& metadata,
241 gd::EventsCodeGenerationContext& context,
242 const gd::String& lastObjectName,
243 std::vector<std::pair<gd::String, gd::String> >*
244 supplementaryParametersTypes)
override;
246 virtual gd::String GenerateObjectFunctionCall(
247 gd::String objectListName,
248 const gd::ObjectMetadata& objMetadata,
249 const gd::ExpressionCodeGenerationInformation& codeInfo,
250 gd::String parametersStr,
251 gd::String defaultOutput,
252 gd::EventsCodeGenerationContext& context)
override;
254 virtual gd::String GenerateObjectBehaviorFunctionCall(
255 gd::String objectListName,
256 gd::String behaviorName,
257 const gd::BehaviorMetadata& autoInfo,
258 const gd::ExpressionCodeGenerationInformation& codeInfo,
259 gd::String parametersStr,
260 gd::String defaultOutput,
261 gd::EventsCodeGenerationContext& context)
override;
263 virtual gd::String GenerateFreeCondition(
264 const std::vector<gd::String>& arguments,
265 const gd::InstructionMetadata& instrInfos,
266 const gd::String& returnBoolean,
267 bool conditionInverted,
268 gd::EventsCodeGenerationContext& context)
override;
270 virtual gd::String GenerateObjectCondition(
271 const gd::String& objectName,
272 const gd::ObjectMetadata& objInfo,
273 const std::vector<gd::String>& arguments,
274 const gd::InstructionMetadata& instrInfos,
275 const gd::String& returnBoolean,
276 bool conditionInverted,
277 gd::EventsCodeGenerationContext& context)
override;
279 virtual gd::String GenerateBehaviorCondition(
280 const gd::String& objectName,
281 const gd::String& behaviorName,
282 const gd::BehaviorMetadata& autoInfo,
283 const std::vector<gd::String>& arguments,
284 const gd::InstructionMetadata& instrInfos,
285 const gd::String& returnBoolean,
286 bool conditionInverted,
287 gd::EventsCodeGenerationContext& context)
override;
289 virtual gd::String GenerateObjectAction(
290 const gd::String& objectName,
291 const gd::ObjectMetadata& objInfo,
292 const gd::String& functionCallName,
293 const std::vector<gd::String>& arguments,
294 const gd::InstructionMetadata& instrInfos,
295 gd::EventsCodeGenerationContext& context,
296 const gd::String& optionalAsyncCallbackName =
"",
297 const gd::String& optionalAsyncCallbackId =
"")
override;
299 virtual gd::String GenerateBehaviorAction(
300 const gd::String& objectName,
301 const gd::String& behaviorName,
302 const gd::BehaviorMetadata& autoInfo,
303 const gd::String& functionCallName,
304 const std::vector<gd::String>& arguments,
305 const gd::InstructionMetadata& instrInfos,
306 gd::EventsCodeGenerationContext& context,
307 const gd::String& optionalAsyncCallbackName =
"",
308 const gd::String& optionalAsyncCallbackId =
"")
override;
310 virtual gd::String GenerateGetBehaviorNameCode(
311 const gd::String& behaviorName)
override;
313 virtual gd::String GenerateGetVariable(
314 const gd::String& variableName,
315 const VariableScope& scope,
316 gd::EventsCodeGenerationContext& context,
317 const gd::String& objectName,
318 bool hasChild)
override;
320 virtual gd::String GenerateVariableAccessor(gd::String childName)
override {
322 return ".getChild(" + ConvertToStringExplicit(childName) +
")";
325 virtual gd::String GenerateVariableBracketAccessor(
326 gd::String expressionCode)
override {
332 return ".getChild(" + expressionCode +
")";
335 virtual gd::String GenerateBadVariable()
override {
336 return "gdjs.VariablesContainer.badVariable";
339 virtual gd::String GeneratePropertyGetter(
340 const gd::PropertiesContainer& propertiesContainer,
341 const gd::NamedPropertyDescriptor& property,
342 const gd::String& type,
343 gd::EventsCodeGenerationContext& context)
override;
345 virtual gd::String GeneratePropertyGetterWithoutCasting(
346 const gd::PropertiesContainer& propertiesContainer,
347 const gd::NamedPropertyDescriptor& property)
override;
349 virtual gd::String GenerateParameterGetter(
350 const gd::ParameterMetadata& parameter,
351 const gd::String& type,
352 gd::EventsCodeGenerationContext& context)
override;
354 virtual gd::String GenerateParameterGetterWithoutCasting(
355 const gd::ParameterMetadata& parameter)
override;
357 virtual gd::String GenerateBadObject()
override {
return "null"; }
359 virtual gd::String GenerateObject(
360 const gd::String& objectName,
361 const gd::String& type,
362 gd::EventsCodeGenerationContext& context)
override;
364 virtual gd::String GenerateNegatedPredicate(
365 const gd::String& predicate)
const override {
366 return "!(" + predicate +
")";
369 virtual gd::String GenerateObjectsDeclarationCode(
370 gd::EventsCodeGenerationContext& context)
override;
372 virtual gd::String GenerateAllInstancesGetterCode(
373 const gd::String& objectName, gd::EventsCodeGenerationContext& context);
375 virtual gd::String GenerateProfilerSectionBegin(
376 const gd::String& section)
override;
377 virtual gd::String GenerateProfilerSectionEnd(
378 const gd::String& section)
override;
380 virtual gd::String GenerateRelationalOperation(
381 const gd::String& relationalOperator,
382 const gd::String& lhs,
383 const gd::String& rhs)
override;
386 static gd::String GenerateEventsListCompleteFunctionCode(
388 gd::String fullyQualifiedFunctionName,
389 gd::String functionArgumentsCode,
390 gd::String functionPreEventsCode,
391 const gd::EventsList& events,
392 gd::String functionPostEventsCode,
393 gd::String functionReturnCode);
402 gd::String GenerateAllConditionsBooleanDeclarations();
410 std::pair<gd::String, gd::String> GenerateAllObjectsDeclarationsAndResets(
411 unsigned int maxDepthLevelReached);
419 gd::String GenerateEventsFunctionParameterDeclarationsList(
420 const gd::ParameterMetadataContainer& parameters,
421 int firstParameterIndex,
422 bool addsSceneParameter);
429 gd::String GenerateFreeEventsFunctionContext(
430 const gd::EventsFunctionsExtension& eventsFunctionsExtension,
431 const gd::EventsFunction& eventsFunction,
432 const gd::String& onceTriggersVariable);
439 gd::String GenerateBehaviorEventsFunctionContext(
440 const gd::EventsFunctionsExtension& eventsFunctionsExtension,
441 const gd::EventsBasedBehavior& eventsBasedBehavior,
442 const gd::EventsFunction& eventsFunction,
443 const gd::String& onceTriggersVariable,
444 const gd::String& thisObjectName,
445 const gd::String& thisBehaviorName);
452 gd::String GenerateObjectEventsFunctionContext(
453 const gd::EventsFunctionsExtension& eventsFunctionsExtension,
454 const gd::EventsBasedObject& eventsBasedObject,
455 const gd::EventsFunction& eventsFunction,
456 const gd::String& onceTriggersVariable,
457 const gd::String& thisObjectName);
459 gd::String GenerateEventsFunctionReturn(
460 const gd::EventsFunction& eventFunction);
465 EventsCodeGenerator(
const gd::Project& project,
const gd::Layout& layout);
471 const gd::ProjectScopedContainers& projectScopedContainers);
472 virtual ~EventsCodeGenerator();
474 gd::String codeNamespace;
483 gd::String GenerateEventsFunctionContext(
484 const gd::EventsFunctionsExtension& eventsFunctionsExtension,
485 const gd::EventsFunctionsContainer& eventsFunctionsContainer,
486 const gd::EventsFunction& eventsFunction,
487 const gd::String& onceTriggersVariable,
488 gd::String& objectsGettersMap,
489 gd::String& objectArraysMap,
490 gd::String& behaviorNamesMap,
491 const gd::String& thisObjectName =
"",
492 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:210
virtual gd::String GetCodeNamespace() override
Get the namespace to be used to store code generated objects/values/functions.
Definition: EventsCodeGenerator.h:220
virtual gd::String GenerateEventsListCode(gd::EventsList &events, gd::EventsCodeGenerationContext &context) override
Generate code for executing an event list.
Definition: EventsCodeGenerator.cpp:1193
virtual gd::String GenerateConditionsListCode(gd::InstructionsList &conditions, gd::EventsCodeGenerationContext &context) override
Definition: EventsCodeGenerator.cpp:1226
virtual gd::String GenerateBooleanInitializationToFalse(const gd::String &boolName, const gd::EventsCodeGenerationContext &context) override
Set a boolean to false.
Definition: EventsCodeGenerator.cpp:1548
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:289
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:1537
void SetCodeNamespace(const gd::String &codeNamespace_)
Specify the code namespace to use, useful for functions as it is not autogenerated.
Definition: EventsCodeGenerator.h:228
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:193
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:1554
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:130
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:1098
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:104