void Translate() { // Get the reserved variables and IDs foreach (ScriptFile script in Importer.ScriptFiles) { if (script.Context.reserved_global()?.reserved_list() != null) { foreach (var name in script.Context.reserved_global().reserved_list().PART()) { VarCollection.Reserve(name.GetText(), true); } foreach (var id in script.Context.reserved_global().reserved_list().NUMBER()) { VarCollection.Reserve(int.Parse(id.GetText()), true, null, null); } } if (script.Context.reserved_player()?.reserved_list() != null) { foreach (var name in script.Context.reserved_player().reserved_list().PART()) { VarCollection.Reserve(name.GetText(), false); } foreach (var id in script.Context.reserved_player().reserved_list().NUMBER()) { VarCollection.Reserve(int.Parse(id.GetText()), false, null, null); } } } // Get the enums foreach (ScriptFile script in Importer.ScriptFiles) { foreach (var enumContext in script.Context.enum_define()) { var newEnum = new DefinedEnum(new ParseInfo(script, this), enumContext); Types.AllTypes.Add(newEnum); Types.DefinedTypes.Add(newEnum); Types.CalledTypes.Add(newEnum); } } // Get the types foreach (ScriptFile script in Importer.ScriptFiles) { foreach (var typeContext in script.Context.type_define()) { var newType = new DefinedType(new ParseInfo(script, this), GlobalScope, typeContext); Types.AllTypes.Add(newType); Types.DefinedTypes.Add(newType); Types.CalledTypes.Add(newType); } } // Get the methods and macros foreach (ScriptFile script in Importer.ScriptFiles) { ParseInfo parseInfo = new ParseInfo(script, this); // Get the methods. foreach (var methodContext in script.Context.define_method()) { new DefinedMethod(parseInfo, RulesetScope, RulesetScope, methodContext, null); } // Get the macros. foreach (var macroContext in script.Context.define_macro()) { parseInfo.GetMacro(RulesetScope, RulesetScope, macroContext); } } // Get the defined variables. foreach (ScriptFile script in Importer.ScriptFiles) { foreach (var varContext in script.Context.define()) { Var newVar = new RuleLevelVariable(RulesetScope, new DefineContextHandler(new ParseInfo(script, this), varContext)); rulesetVariables.Add(newVar); // Add the variable to the player variables scope if it is a player variable. if (newVar.VariableType == VariableType.Player) { PlayerVariableScope.CopyVariable(newVar); } } } foreach (var applyType in Types.AllTypes) { if (applyType is ClassType classType) { classType.ResolveElements(); } } foreach (var apply in _applyBlocks) { apply.SetupParameters(); } foreach (var apply in _applyBlocks) { apply.SetupBlock(); } foreach (var callInfo in _recursionCheck) { callInfo.CheckRecursion(); } // Get hooks foreach (ScriptFile script in Importer.ScriptFiles) { foreach (var hookContext in script.Context.hook()) { HookVar.GetHook(new ParseInfo(script, this), RulesetScope, hookContext); } } // Get the rules foreach (ScriptFile script in Importer.ScriptFiles) { foreach (var ruleContext in script.Context.ow_rule()) { rules.Add(new RuleAction(new ParseInfo(script, this), RulesetScope, ruleContext)); } } }
void Translate() { AddComponent <RecursionCheckComponent>(); // Get the enums foreach (ScriptFile script in Importer.ScriptFiles) { foreach (var enumContext in script.Context.Enums) { var newEnum = new GenericCodeTypeInitializer(new DefinedEnum(new ParseInfo(script, this), enumContext)); RulesetScope.AddType(newEnum); Types.AllTypes.Add(newEnum); Types.DefinedTypes.Add(newEnum); } } // Get the types foreach (ScriptFile script in Importer.ScriptFiles) { foreach (var typeContext in script.Context.Classes) { var newType = IDefinedTypeInitializer.GetInitializer(new ParseInfo(script, this), RulesetScope, typeContext); RulesetScope.AddType(newType); Types.AllTypes.Add(newType); Types.DefinedTypes.Add(newType); } } // Get the variable reservations foreach (ScriptFile script in Importer.ScriptFiles) { foreach (Token reservation in script.Context.GlobalvarReservations) { string text = reservation.GetText().RemoveQuotes(); if (Int32.TryParse(text, out int id)) { VarCollection.Reserve(id, true, script.Diagnostics, reservation.Range); } else { VarCollection.Reserve(text, true); } } foreach (Token reservation in script.Context.PlayervarReservations) { string text = reservation.GetText().RemoveQuotes(); if (Int32.TryParse(text, out int id)) { VarCollection.Reserve(id, false, script.Diagnostics, reservation.Range); } else { VarCollection.Reserve(text, false); } } } // Get variable declarations foreach (ScriptFile script in Importer.ScriptFiles) { foreach (var declaration in script.Context.Declarations) { if (declaration is VariableDeclaration variable) { Var var = new RuleLevelVariable(RulesetScope, new DefineContextHandler(new ParseInfo(script, this), variable)).GetVar(); if (var.StoreType != StoreType.None) { rulesetVariables.Add(var); // Add the variable to the player variables scope if it is a player variable. if (var.VariableType == VariableType.Player) { PlayerVariableScope.CopyVariable(var.GetDefaultInstance(null)); } } } } } ElementList.AddWorkshopFunctionsToScope(GlobalScope, Types); // Add workshop methods to global scope. GlobalFunctions.GlobalFunctions.Add(this, GlobalScope); // Add built-in methods. // Get the function declarations foreach (ScriptFile script in Importer.ScriptFiles) { ParseInfo parseInfo = new ParseInfo(script, this); foreach (var declaration in script.Context.Declarations) { if (declaration is FunctionContext function) { DefinedMethodProvider.GetDefinedMethod(parseInfo, this, function, null); } } } StagedInitiation.Start(); // Get hooks foreach (ScriptFile script in Importer.ScriptFiles) { foreach (var hookContext in script.Context.Hooks) { HookVar.GetHook(new ParseInfo(script, this), RulesetScope, hookContext); } } // Get the rules foreach (ScriptFile script in Importer.ScriptFiles) { foreach (var ruleContext in script.Context.Rules) { rules.Add(new RuleAction(new ParseInfo(script, this), RulesetScope, ruleContext)); } } GetComponent <SymbolLinkComponent>().Collect(); }