diff --git a/components/compiler/exprparser.cpp b/components/compiler/exprparser.cpp index ed628278b..e54b2e2a8 100644 --- a/components/compiler/exprparser.cpp +++ b/components/compiler/exprparser.cpp @@ -775,7 +775,7 @@ namespace Compiler { parser.reset(); - if (optional) + if (optional || *iter == 'X') parser.setOptional (true); scanner.scan (parser); @@ -783,17 +783,20 @@ namespace Compiler if (optional && parser.isEmpty()) break; - std::vector tmp; + if (*iter != 'X') + { + std::vector tmp; - char type = parser.append (tmp); + char type = parser.append (tmp); - if (type!=*iter) - Generator::convert (tmp, type, *iter); + if (type!=*iter) + Generator::convert (tmp, type, *iter); - stack.push (tmp); + stack.push (tmp); - if (optional) - ++optionalCount; + if (optional) + ++optionalCount; + } } } diff --git a/components/compiler/extensions.hpp b/components/compiler/extensions.hpp index 418cbb402..d229751de 100644 --- a/components/compiler/extensions.hpp +++ b/components/compiler/extensions.hpp @@ -20,7 +20,8 @@ namespace Compiler l - Integer
s - Short
S - String, case preserved
- x - Optional, ignored argument + x - Optional, ignored string argument + X - Optional, ignored integer argument **/ typedef std::string ScriptArgs; diff --git a/components/compiler/extensions0.cpp b/components/compiler/extensions0.cpp index 9fc66900f..f38c3320c 100644 --- a/components/compiler/extensions0.cpp +++ b/components/compiler/extensions0.cpp @@ -405,7 +405,7 @@ namespace Compiler extensions.registerInstruction ("setpccrimelevel", "f", opcodeSetPCCrimeLevel); extensions.registerInstruction ("modpccrimelevel", "f", opcodeModPCCrimeLevel); - extensions.registerInstruction ("addspell", "cx", opcodeAddSpell, opcodeAddSpellExplicit); + extensions.registerInstruction ("addspell", "cxX", opcodeAddSpell, opcodeAddSpellExplicit); extensions.registerInstruction ("removespell", "c", opcodeRemoveSpell, opcodeRemoveSpellExplicit); extensions.registerInstruction ("removespelleffects", "c", opcodeRemoveSpellEffects,