------------------------------------------------------------------------
r1558 | jlam | 2014-07-13 11:34:11 +0000 (Sun, 13 Jul 2014) | 1 line
Changed paths:
   A /tags/5.4.23 (from /trunk:1557)

Tagging as 5.4.23 release.
------------------------------------------------------------------------
r1557 | jlam | 2014-07-13 11:33:10 +0000 (Sun, 13 Jul 2014) | 4 lines
Changed paths:
   M /trunk/scripts/ovale_monk_spells.lua

Monk: Use the Jab texture from the game.

People were confused when the displayed icon didn't match the Jab icon on
their action bar.
------------------------------------------------------------------------
r1556 | jlam | 2014-07-13 11:33:03 +0000 (Sun, 13 Jul 2014) | 3 lines
Changed paths:
   M /trunk/scripts/ovale_rogue.lua

Rogue: Suggest Shadow Blades for Assassination rogues.

Also Shadow Blades align with Vendetta if Vendetta is ready.
------------------------------------------------------------------------
r1555 | jlam | 2014-07-13 11:32:56 +0000 (Sun, 13 Jul 2014) | 1 line
Changed paths:
   M /trunk/scripts/ovale_rogue.lua
   M /trunk/scripts/simulationcraft_rogue_combat_t16h.lua

Rogue: Update Combat script to SimC profile as of 2014-07-01.
------------------------------------------------------------------------
r1554 | jlam | 2014-07-13 11:32:48 +0000 (Sun, 13 Jul 2014) | 4 lines
Changed paths:
   M /trunk/scripts/ovale_deathknight.lua
   M /trunk/scripts/ovale_druid.lua
   M /trunk/scripts/ovale_hunter.lua
   M /trunk/scripts/ovale_mage.lua
   M /trunk/scripts/ovale_monk.lua
   M /trunk/scripts/ovale_paladin.lua
   M /trunk/scripts/ovale_priest.lua
   M /trunk/scripts/ovale_rogue.lua
   M /trunk/scripts/ovale_shaman.lua
   M /trunk/scripts/ovale_warlock.lua
   M /trunk/scripts/ovale_warrior.lua

Add checkbox to show the icons for the current specialization.

This checkbox defaults to checked.  This allows for permanently setting
whether the icons for current specialization are displayed.
------------------------------------------------------------------------
r1553 | jlam | 2014-07-13 11:32:41 +0000 (Sun, 13 Jul 2014) | 1 line
Changed paths:
   M /trunk/scripts/ovale_paladin_spells.lua
   M /trunk/scripts/ovale_shaman_spells.lua

Fix script problems exposed by stricter parser.
------------------------------------------------------------------------
r1552 | jlam | 2014-07-13 11:32:32 +0000 (Sun, 13 Jul 2014) | 4 lines
Changed paths:
   M /trunk/OvaleSimulationCraft.lua
   M /trunk/scripts/ovale_deathknight.lua
   M /trunk/scripts/ovale_deathknight_spells.lua
   M /trunk/scripts/ovale_druid.lua
   M /trunk/scripts/ovale_druid_spells.lua
   M /trunk/scripts/ovale_hunter.lua
   M /trunk/scripts/ovale_hunter_spells.lua
   M /trunk/scripts/ovale_mage.lua
   M /trunk/scripts/ovale_mage_spells.lua
   M /trunk/scripts/ovale_monk.lua
   M /trunk/scripts/ovale_monk_spells.lua
   M /trunk/scripts/ovale_paladin.lua
   M /trunk/scripts/ovale_paladin_spells.lua
   M /trunk/scripts/ovale_priest.lua
   M /trunk/scripts/ovale_priest_spells.lua
   M /trunk/scripts/ovale_rogue.lua
   M /trunk/scripts/ovale_rogue_spells.lua
   M /trunk/scripts/ovale_shaman.lua
   M /trunk/scripts/ovale_shaman_spells.lua
   M /trunk/scripts/ovale_warlock.lua
   M /trunk/scripts/ovale_warlock_spells.lua
   M /trunk/scripts/ovale_warrior.lua
   M /trunk/scripts/ovale_warrior_common.lua
   M /trunk/scripts/ovale_warrior_spells.lua
   M /trunk/scripts/simulationcraft_deathknight_frost_1h_t16h.lua
   M /trunk/scripts/simulationcraft_deathknight_frost_2h_t16h.lua
   M /trunk/scripts/simulationcraft_deathknight_unholy_t16h.lua
   M /trunk/scripts/simulationcraft_druid_balance_t16h.lua
   M /trunk/scripts/simulationcraft_druid_feral_t16h.lua
   M /trunk/scripts/simulationcraft_druid_feral_t16h_adv_rotation.lua
   M /trunk/scripts/simulationcraft_hunter_bm_t16h.lua
   M /trunk/scripts/simulationcraft_hunter_mm_t16h.lua
   M /trunk/scripts/simulationcraft_hunter_sv_t16h.lua
   M /trunk/scripts/simulationcraft_mage_arcane_t16h.lua
   M /trunk/scripts/simulationcraft_mage_fire_t16h.lua
   M /trunk/scripts/simulationcraft_mage_frost_t16h.lua
   M /trunk/scripts/simulationcraft_monk_windwalker_1h_t16h.lua
   M /trunk/scripts/simulationcraft_monk_windwalker_2h_t16h.lua
   M /trunk/scripts/simulationcraft_paladin_protection_t16h.lua
   M /trunk/scripts/simulationcraft_paladin_retribution_t16h.lua
   M /trunk/scripts/simulationcraft_priest_shadow_t16h.lua
   M /trunk/scripts/simulationcraft_rogue_assassination_t16h.lua
   M /trunk/scripts/simulationcraft_rogue_combat_t16h.lua
   M /trunk/scripts/simulationcraft_rogue_subtlety_t16h.lua
   M /trunk/scripts/simulationcraft_shaman_elemental_t16h.lua
   M /trunk/scripts/simulationcraft_shaman_enhancement_t16h.lua
   M /trunk/scripts/simulationcraft_warlock_affliction_t16h.lua
   M /trunk/scripts/simulationcraft_warlock_demonology_t16h.lua
   M /trunk/scripts/simulationcraft_warlock_destruction_t16h.lua
   M /trunk/scripts/simulationcraft_warrior_arms_t16h.lua
   M /trunk/scripts/simulationcraft_warrior_fury_1h_t16h.lua
   M /trunk/scripts/simulationcraft_warrior_fury_2h_t16h.lua
   M /trunk/scripts/simulationcraft_warrior_protection_t16h.lua
   M /trunk/scripts/wiljo_mage.lua

Fix use of deprecated features of Ovale.

* Use "specialization" instead of deprecated "mastery" parameter.
* Use "checkbox=name" instead of deprecated "checkboxon=name".
------------------------------------------------------------------------
r1551 | jlam | 2014-07-13 11:32:25 +0000 (Sun, 13 Jul 2014) | 10 lines
Changed paths:
   M /trunk/OvaleAST.lua
   M /trunk/OvaleCompile.lua

Allow for multiple checkbox and list/item pairs in parameters.

List/item pairs should now use the following syntax:

    list=name item=value   -->   listitem=name:value

Isolate code to handle deprecated parameters (checkboxon, checkboxoff,
list, item, mastery) into OvaleAST:FlattenParameters() so that other
modules no longer need logic to handle the deprecated features when using
parameters.
------------------------------------------------------------------------
r1550 | jlam | 2014-07-13 11:32:18 +0000 (Sun, 13 Jul 2014) | 4 lines
Changed paths:
   M /trunk/Ovale.lua
   M /trunk/OvaleAura.lua
   M /trunk/OvaleCompile.lua
   M /trunk/OvaleFrame.lua

Add facility to print one-time messages (per session).

Use one-time messages to print warnings for scripts using deprecated
features.
------------------------------------------------------------------------
r1549 | jlam | 2014-07-13 11:32:12 +0000 (Sun, 13 Jul 2014) | 4 lines
Changed paths:
   M /trunk/OvaleAura.lua

Re-add some trace logging when looking up auras in the simulator.

The logging was lost in Ovale 5.4.9 in r1140 as part of the changes that
converted OvaleCondition into a script condition registry.
------------------------------------------------------------------------
r1548 | jlam | 2014-07-13 11:32:06 +0000 (Sun, 13 Jul 2014) | 5 lines
Changed paths:
   M /trunk/Ovale.lua
   M /trunk/OvaleOptions.lua
   M /trunk/conditions/Health.lua

Put trace output into its own dialog box.

This simplifies debugging complex scripts which have enormous traces by
allowing one to copy the trace output and paste it into a text editor for
browsing and searching.
------------------------------------------------------------------------
r1547 | jlam | 2014-07-13 11:31:59 +0000 (Sun, 13 Jul 2014) | 1 line
Changed paths:
   M /trunk/Ovale.lua
   M /trunk/OvaleFrame.lua

Improve encapsulation of various "trace" flags.
------------------------------------------------------------------------
r1546 | jlam | 2014-07-13 11:31:52 +0000 (Sun, 13 Jul 2014) | 1 line
Changed paths:
   M /trunk/OvaleBestAction.lua

Check that spell costs are positive before requiring them for spells.
------------------------------------------------------------------------
r1545 | jlam | 2014-07-13 11:31:46 +0000 (Sun, 13 Jul 2014) | 7 lines
Changed paths:
   M /trunk/OvaleAST.lua
   M /trunk/OvaleCompile.lua

Special handling of "mastery" keyword since it's also the name of a buff.

Rename "mastery" keyword to "specialization", i.e., specialization=feral,
so that it doesn't conflict with the name of the "mastery" raid buff.

Mark the use of the "mastery" keyword as deprecated for removal in a
future release.
------------------------------------------------------------------------
r1544 | jlam | 2014-07-13 11:31:39 +0000 (Sun, 13 Jul 2014) | 1 line
Changed paths:
   M /trunk/OvaleSimulationCraft.lua
   M /trunk/scripts/ovale_mage_spells.lua
   M /trunk/scripts/ovale_paladin.lua
   M /trunk/scripts/ovale_priest.lua
   M /trunk/scripts/ovale_shaman_spells.lua
   M /trunk/scripts/ovale_warlock_spells.lua
   M /trunk/scripts/simulationcraft_paladin_protection_t16h.lua

Fix script problems exposed by new, more strict language parser.
------------------------------------------------------------------------
r1543 | jlam | 2014-07-13 11:31:31 +0000 (Sun, 13 Jul 2014) | 15 lines
Changed paths:
   M /trunk/OvaleBestAction.lua
   M /trunk/OvaleCompile.lua
   M /trunk/OvaleFrame.lua
   M /trunk/OvaleOptions.lua
   M /trunk/conditions/Damage.lua
   M /trunk/conditions/LastEstimatedDamage.lua

Update Ovale to use abstract syntax trees.

OvaleCompile has been restructured to only evaluate the declarations in
the script and populate any databases used by other modules.  It makes a
distinction between compiling the script (using OvaleAST) and evaluating
the script.  Compiling the script only needs to happen when the script
code changes.  All other events only require re-evaluating the script.

OvaleBestAction has been restructured to more readily cache computed
results of nodes during each update cycle.  Combined with the common
function elimination optimization in OvaleAST, this allows for all
function calls to be computed only once per AddIcon group.

Other miscellaenous changes to modules were made to update to correct
method names and to remove unused code.
------------------------------------------------------------------------
r1542 | jlam | 2014-07-13 11:31:23 +0000 (Sun, 13 Jul 2014) | 19 lines
Changed paths:
   M /trunk/Ovale.toc
   A /trunk/OvaleAST.lua
   A /trunk/tests/ast.t

Add OvaleAST module to generate an abstract syntax tree from a script.

This module implements a recursive descent parser for the Ovale script
language and generates an AST for further manipulation.

There are some ambiguities in the script language:

    * Unary negation versus binary subtraction.
    * '{' and '}' can enclose either a statement group or an expression.

The public methods for OvaleAST are:

    ParseCode(code) to generate an AST from a block of code.
    ParseScript(name) to generate an AST from a named script.
    Unparse(node) to generate a block of code from an AST node.
    Optimize(ast) to make optimization passes through the AST.

Unparse(ParseCode(Code)) should be roughly idempotent in that the original
code and the resulting code should have the same AST representation.
------------------------------------------------------------------------
r1541 | jlam | 2014-07-13 11:31:16 +0000 (Sun, 13 Jul 2014) | 3 lines
Changed paths:
   M /trunk/OvaleCompile.lua
   M /trunk/OvaleCondition.lua
   M /trunk/conditions/Damage.lua
   M /trunk/conditions/LastEstimatedDamage.lua

Move ComputeParameter into the dependent code to reduce dependencies.

This has code duplication and needs to refactored.
------------------------------------------------------------------------
r1540 | jlam | 2014-07-13 11:31:09 +0000 (Sun, 13 Jul 2014) | 22 lines
Changed paths:
   M /trunk/Ovale.toc
   M /trunk/OvaleLexer.lua

Change OvaleLexer into an object factory to generate lexers.

The calling code must provide an iterator, which is typically generated
with OvaleLexer.scan.  The lexer buffers the token stream so that it may
be accessed with look-ahead capabilities.

The lexer provides two methods for accessing the buffered token stream:

Peek(k) buffers the next k tokens from the stream and returns the k'th one.
Consume(k) consumes the next k tokens from the buffer and returns the k'th one.

This allows the following code to iterate through the token stream without
consuming extra tokens.

    -- Process tokens until seeing a '}'.
    local tokenType, token = lexer:Peek()
    while tokenType ~= "}" do
        lexer:Consume()
        -- do stuff here with the token
        tokenType, token = lexer:Peek()
    end
    -- Here, the next token to be consumed is still '}'.
------------------------------------------------------------------------
r1539 | jlam | 2014-07-13 11:31:02 +0000 (Sun, 13 Jul 2014) | 5 lines
Changed paths:
   M /trunk/OvaleLexer.lua

Encapsulate vendor code in a better way.

Include the file verbatim with the minor changes needed to allow it to be
part of an addon file.  Wrap the exported functions within an Ovale
module.
------------------------------------------------------------------------
r1538 | jlam | 2014-07-13 11:30:56 +0000 (Sun, 13 Jul 2014) | 5 lines
Changed paths:
   M /trunk/OvaleQueue.lua

Add new queue method :At() to return the queue element at the given index.

Also, tweak the internal indices so that in the best case usage, the queue
simply uses array table size for the queued elements.  Lastly, fix the
documentation since queue = FIFO and stack = LIFO.
------------------------------------------------------------------------
r1537 | jlam | 2014-07-13 11:30:49 +0000 (Sun, 13 Jul 2014) | 1 line
Changed paths:
   M /trunk/Ovale.toc
   M /trunk/OvaleData.lua
   M /trunk/OvaleFrame.lua
   M /trunk/OvaleIcone.lua
   M /trunk/OvaleOptions.lua

Remove unprintable characters that caused failures when loading in Lua.
------------------------------------------------------------------------
r1536 | jlam | 2014-07-13 11:30:43 +0000 (Sun, 13 Jul 2014) | 1 line
Changed paths:
   A /trunk/tests/load.t

Add test for properly loading all of the Ovale addon files.
------------------------------------------------------------------------
r1535 | jlam | 2014-07-13 11:30:36 +0000 (Sun, 13 Jul 2014) | 1 line
Changed paths:
   M /trunk/OvaleTimeSpan.lua
   A /trunk/tests
   A /trunk/tests/timespan.t

Split out unit tests in OvaleTimeSpan into a separate file.
------------------------------------------------------------------------
r1534 | jlam | 2014-07-13 11:30:30 +0000 (Sun, 13 Jul 2014) | 1 line
Changed paths:
   M /trunk/generate.lua

Fix generate.lua to work after WoWAPI module changes.
------------------------------------------------------------------------
r1533 | jlam | 2014-07-13 11:30:23 +0000 (Sun, 13 Jul 2014) | 1 line
Changed paths:
   M /trunk/WoWAPI.lua

WoWAPI: Add strsplit to string module and fix for "." in delimiter string.
------------------------------------------------------------------------
r1532 | jlam | 2014-07-13 11:30:16 +0000 (Sun, 13 Jul 2014) | 22 lines
Changed paths:
   M /trunk/WoWAPI.lua

Overhaul of WoWAPI unit testing module.

The WoWAPI module tries to provide enough of the WoW environment to be
able to load addon files and do unit testing or integration testing of
addon components.

WoWAPI contains fake implementations of some libraries that are used
by Ovale.

Example usage:

    local state = {
        class = "DRUID",
        level = 90,
    }
    dofile("WoWAPI.lua")
    WoWAPI:Initialize("Ovale", state)
    WoWAPI:ExportSymbols()
    WoWAPI:LoadTOC("Ovale.toc")

This example loads all of the Ovale addon's files in the order listed in
its TOC file.
------------------------------------------------------------------------
r1531 | jlam | 2014-07-13 11:30:09 +0000 (Sun, 13 Jul 2014) | 6 lines
Changed paths:
   M /trunk/compiler.pl

Detect private functions defined using variable assignment.

This detects functions defined as follows:

    local foo
    foo = function() ... end
------------------------------------------------------------------------
r1530 | jlam | 2014-07-13 11:30:02 +0000 (Sun, 13 Jul 2014) | 1 line
Changed paths:
   M /trunk/compiler.pl

Quiet compiler.pl warnings.
------------------------------------------------------------------------
r1529 | jlam | 2014-07-13 11:29:55 +0000 (Sun, 13 Jul 2014) | 1 line
Changed paths:
   M /trunk/OvaleBanditsGuile.lua
   M /trunk/OvaleShadowWordDeath.lua
   M /trunk/OvaleSteadyFocus.lua

Rename "name" field to "spellName" to avoid conflict with AceAddon.
------------------------------------------------------------------------
r1528 | jlam | 2014-07-13 11:29:48 +0000 (Sun, 13 Jul 2014) | 1 line
Changed paths:
   M /trunk/OvalePool.lua
   M /trunk/OvalePoolRefCount.lua

Remove unused code.
------------------------------------------------------------------------
r1527 | jlam | 2014-07-13 11:29:42 +0000 (Sun, 13 Jul 2014) | 1 line
Changed paths:
   M /trunk/OvaleEquipement.lua

Defer creation of frame for tooltip-scanning until addon is loaded.
------------------------------------------------------------------------
r1526 | jlam | 2014-07-13 11:29:36 +0000 (Sun, 13 Jul 2014) | 1 line
Changed paths:
   M /trunk/OvaleEquipement.lua

Avoid needless use of GetInventorySlotInfo() when constants are provided.
------------------------------------------------------------------------
r1525 | jlam | 2014-07-13 11:29:29 +0000 (Sun, 13 Jul 2014) | 1 line
Changed paths:
   M /trunk/Ovale.lua

Fix the addon broadcast message for requesting a version check.
------------------------------------------------------------------------
r1524 | jlam | 2014-07-13 11:29:23 +0000 (Sun, 13 Jul 2014) | 1 line
Changed paths:
   M /trunk/scripts/ovale_deathknight.lua
   M /trunk/scripts/ovale_druid.lua
   M /trunk/scripts/ovale_hunter.lua
   M /trunk/scripts/ovale_mage.lua
   M /trunk/scripts/ovale_monk.lua
   M /trunk/scripts/ovale_paladin.lua
   M /trunk/scripts/ovale_priest.lua
   M /trunk/scripts/ovale_rogue.lua
   M /trunk/scripts/ovale_shaman.lua
   M /trunk/scripts/ovale_warlock.lua
   M /trunk/scripts/ovale_warrior.lua

Give default scripts a unique name to use via "Include(...)".
------------------------------------------------------------------------
r1523 | jlam | 2014-07-13 11:29:14 +0000 (Sun, 13 Jul 2014) | 4 lines
Changed paths:
   M /trunk/OvaleSimulationCraft.lua
   M /trunk/scripts/files.xml
   A /trunk/scripts/ovale_common.lua
   M /trunk/scripts/ovale_deathknight.lua
   A /trunk/scripts/ovale_deathknight_common.lua
   M /trunk/scripts/ovale_deathknight_spells.lua
   M /trunk/scripts/ovale_druid.lua
   A /trunk/scripts/ovale_druid_common.lua
   M /trunk/scripts/ovale_druid_spells.lua
   M /trunk/scripts/ovale_hunter.lua
   A /trunk/scripts/ovale_hunter_common.lua
   M /trunk/scripts/ovale_hunter_spells.lua
   M /trunk/scripts/ovale_items.lua
   M /trunk/scripts/ovale_mage.lua
   A /trunk/scripts/ovale_mage_common.lua
   M /trunk/scripts/ovale_mage_spells.lua
   M /trunk/scripts/ovale_monk.lua
   A /trunk/scripts/ovale_monk_common.lua
   M /trunk/scripts/ovale_monk_spells.lua
   M /trunk/scripts/ovale_paladin.lua
   A /trunk/scripts/ovale_paladin_common.lua
   M /trunk/scripts/ovale_paladin_spells.lua
   M /trunk/scripts/ovale_priest.lua
   A /trunk/scripts/ovale_priest_common.lua
   M /trunk/scripts/ovale_priest_spells.lua
   M /trunk/scripts/ovale_racials.lua
   M /trunk/scripts/ovale_rogue.lua
   A /trunk/scripts/ovale_rogue_common.lua
   M /trunk/scripts/ovale_rogue_spells.lua
   M /trunk/scripts/ovale_shaman.lua
   A /trunk/scripts/ovale_shaman_common.lua
   M /trunk/scripts/ovale_shaman_spells.lua
   M /trunk/scripts/ovale_warlock.lua
   A /trunk/scripts/ovale_warlock_common.lua
   M /trunk/scripts/ovale_warlock_spells.lua
   M /trunk/scripts/ovale_warrior.lua
   A /trunk/scripts/ovale_warrior_common.lua
   M /trunk/scripts/ovale_warrior_spells.lua
   M /trunk/scripts/simulationcraft_deathknight_frost_1h_t16h.lua
   M /trunk/scripts/simulationcraft_deathknight_frost_2h_t16h.lua
   M /trunk/scripts/simulationcraft_deathknight_unholy_t16h.lua
   M /trunk/scripts/simulationcraft_druid_balance_t16h.lua
   M /trunk/scripts/simulationcraft_druid_feral_t16h.lua
   M /trunk/scripts/simulationcraft_druid_feral_t16h_adv_rotation.lua
   M /trunk/scripts/simulationcraft_hunter_bm_t16h.lua
   M /trunk/scripts/simulationcraft_hunter_mm_t16h.lua
   M /trunk/scripts/simulationcraft_hunter_sv_t16h.lua
   M /trunk/scripts/simulationcraft_mage_arcane_t16h.lua
   M /trunk/scripts/simulationcraft_mage_fire_t16h.lua
   M /trunk/scripts/simulationcraft_mage_frost_t16h.lua
   M /trunk/scripts/simulationcraft_monk_windwalker_1h_t16h.lua
   M /trunk/scripts/simulationcraft_monk_windwalker_2h_t16h.lua
   M /trunk/scripts/simulationcraft_paladin_protection_t16h.lua
   M /trunk/scripts/simulationcraft_paladin_retribution_t16h.lua
   M /trunk/scripts/simulationcraft_priest_shadow_t16h.lua
   M /trunk/scripts/simulationcraft_rogue_assassination_t16h.lua
   M /trunk/scripts/simulationcraft_rogue_combat_t16h.lua
   M /trunk/scripts/simulationcraft_rogue_subtlety_t16h.lua
   M /trunk/scripts/simulationcraft_shaman_elemental_t16h.lua
   M /trunk/scripts/simulationcraft_shaman_enhancement_t16h.lua
   M /trunk/scripts/simulationcraft_warlock_affliction_t16h.lua
   M /trunk/scripts/simulationcraft_warlock_demonology_t16h.lua
   M /trunk/scripts/simulationcraft_warlock_destruction_t16h.lua
   M /trunk/scripts/simulationcraft_warrior_arms_t16h.lua
   M /trunk/scripts/simulationcraft_warrior_fury_1h_t16h.lua
   M /trunk/scripts/simulationcraft_warrior_fury_2h_t16h.lua
   M /trunk/scripts/simulationcraft_warrior_protection_t16h.lua

Separate class spell information from functions and UI elements.

This allows the spell information to be re-used in other scripts without
also including unwanted functions or UI elements (checkboxes and lists).
------------------------------------------------------------------------
