500 Commits (d0dfe465504aa1d3077290a8ce48b10c60bb573b)
 

Author SHA1 Message Date
David Majda 2f3dd951e9 Do not store result variable indices, just the counts 13 years ago
David Majda 42d4fc6dd4 Get rid of two parser variable stacks
One stack is conceptually simpler, requires less code and will make a
transition to a register-based machine easier.

Note that the stack variables are now named a bit incorrectly
(|result0|, |result1|, etc. even when they store also parse positions).
I didn't bother with renaming because a transition to a register-based
machine will follow soon and the names will change anyway.

The speed/size impact is insignificant.

Speed impact
------------
Before:     839.05 kB/s
After:      839.67 kB/s
Difference: 0.07%

Size impact
-----------
Before:     949783 b
After:      961578 b
Difference: 1.24%

(Measured by /tools/impact with Node.js v0.6.18 on x86_64 GNU/Linux.)
13 years ago
David Majda 890140d73b More responsibility for computing |resultIndex| to node's parent
Before this commit, each node was responsible for computing the value of
its |resultIndex| property in the |computeVarIndices| pass. This was
possible because |resultIndex| was always equal to |index.result|,
meaning that nodes always wrote their match results to the top of the
stack.

This behavior would cause problems in the future where nodes will use
the stack also for storing positions. Parent nodes storing position on
the stack would have to copy their childs' match results from the top of
the stack to some position below where parent's match result would be
expected. There would be no way to tell the children to place their
match result somewhere else than the top of the stack and avoid copying.

This commit fixes the described problem by shifting the responsibility
for setting the value of node's |resultIndex| property to its parent.
This way it can direct its child to place its result wherever it wants
to.
13 years ago
David Majda 2c8b323ade Replace variable name computations by computations of indices
This commit replaces all variable name computations in |computeVarNames|
and |computeParams| passes by computations of indices. The actual names
are computed later in the |generateCode| pass.

This change makes the code generator the only place that deals with the
actual variable names, making them easier to change for example.

The code generator code seems bit more complicated after the change, but
this complexity will pay off (and mostly disappear) later.
13 years ago
David Majda 725927e05f Change ordering of "action" code
Places all code that does something with "action" AST nodes under code
handling "choice" nodes.

This ordering is logical because now all the node handling code matches
the sequence in which various node types usually appear when descending
through the AST tree.
13 years ago
David Majda cdf23e0a49 Change ordering of "literal", "class" and "any" code
Changes all code that does something with "literal", "class" or "any"
AST nodes so that the code deals with these in the follwing order:

  1. literal
  2. class
  3. any

Previously the code used this ordering:

  1. literal
  2. any
  3. class

The new ordering is more logical because the nodes are handled from the
most specific to the most generic.
13 years ago
David Majda eb4badab24 Refactor named rules AST representation
PEG.js grammar rules are represented by |rule| nodes in the AST. Until
now, all such nodes had a |displayName| property which was either |null|
or stored rule's human-readable name. This commit gets rid of the
|displayName| property and starts representing rules with a
human-readable name using a new |named| node (a child of the |rule|
node).

This change simplifies code generation code a bit as tests for
|displayName| can be removed (see changes in generate-code.js). It also
separates different concerns from each other nicely.
13 years ago
David Majda b05b09a9f6 README.md: Remove extraneous "and"
Based on patch for pegjs-website by Michael Ficarra:

  https://github.com/dmajda/pegjs-website/pull/3
13 years ago
David Majda 4f6386ea2a README.md: Fix typo
Based on patch for pegjs-website by Michael Ficarra:

  https://github.com/dmajda/pegjs-website/pull/2
13 years ago
David Majda a59516f89b Small reordering of properties when creating |class| nodes
General rule: Least important things/flags go last.
13 years ago
David Majda 55a255a882 Add forgotten tests for |nonBraceCharacter| & |nonBraceCharacters| rules 13 years ago
David Majda 7900b66c70 Fix |braced| rule in the PEG.js grammar
This fix does not change the behavior, it just makes the
|nonBraceCharacters| rule un-dead (as originally intended).
13 years ago
David Majda 23e04bb4f4 Jasmine: Delete remains the old test suite 13 years ago
David Majda 8ef5f08c90 Jasmine: Convert |removeProxyRules| compiler pass tests 13 years ago
David Majda eaf2af8e7b Jasmine: Convert |computeParams| compiler pass tests 13 years ago
David Majda 4edc9982cc Jasmine: Convert |computeVarNames| compiler pass tests 13 years ago
David Majda 1471df9a69 Jasmine: Convert |reportLeftRecursion| compiler pass tests 13 years ago
David Majda 2889ca72fc Jasmine: Convert |reportMissingRules| compiler pass tests 13 years ago
David Majda ef25ec08c2 Extract |varyAll| calls one level up
DRY + less code.
13 years ago
David Majda e030834a0e Delete test/compiler-test.js 13 years ago
David Majda 112e4122d0 Jasmine: Convert remaining error reporting tests 13 years ago
David Majda 94aaf4ec75 Jasmine: Convert error position reporting tests 13 years ago
David Majda 1825dd4a42 Jasmine: Convert start rule tests 13 years ago
David Majda 68bfeac134 Jasmine: Drop the idempotence test
The code this test covered is long gone.
13 years ago
David Majda f61813238d Jasmine: Convert complex example tests 13 years ago
David Majda 022a51f94e Jasmine: Convert cache tests 13 years ago
David Majda e9f7255d47 Jasmine: Convert initializer tests 13 years ago
David Majda f5f40f68d2 Jasmine: Convert choice matching tests 13 years ago
David Majda 1b0789fbae Jasmine: Convert sequence matching tests 13 years ago
David Majda ae8a89c9e4 Jasmine: Convert labeled matching tests 13 years ago
David Majda b013ba8cc9 Jasmine: Convert simple and matching tests 13 years ago
David Majda 343e9db525 Jasmine: Convert simple not matching tests 13 years ago
David Majda 2bb25efa44 Jasmine: Convert semantic and code tests 13 years ago
David Majda f04096189f Jasmine: Convert semantic not code tests 13 years ago
David Majda ccf31f8822 Jasmine: Convert optional matching tests 13 years ago
David Majda 669668fc1b Jasmine: Convert zero or more matching tests 13 years ago
David Majda 1ab06ff906 Jasmine: Convert one or more matching tests 13 years ago
David Majda 03716a562d Jasmine: Convert action code tests 13 years ago
David Majda b06bd774f5 Jasmine: Convert rule reference matching tests 13 years ago
David Majda 14c11b4dfc Jasmine: Convert class matching tests 13 years ago
David Majda 75ab03dc85 Jasmine: Convert any matching tests 13 years ago
David Majda ec48742032 Jasmine: Convert literal matching tests 13 years ago
David Majda feddd10190 Jasmine: Delete test/parser-test.js 13 years ago
David Majda 94205ab639 Jasmine: Convert tests of parser's "grammar" rule 13 years ago
David Majda f746189f2b Jasmine: Convert tests of parser's "initializer" rule 13 years ago
David Majda a49674b05f Jasmine: Change |oneRuleGrammar| parameter handling
This change makes code using |oneRuleGrammar| less verbose + prepares
for passing of the initializer (will be used by code added in the next
few commits).
13 years ago
David Majda 171d62fce4 Jasmine: Convert tests of parser's "rule" rule 13 years ago
David Majda e17d4de7ae Jasmine: Convert tests of parser's "expression" rule 13 years ago
David Majda cc22086a09 Jasmine: Convert tests of parser's "choice" rule 13 years ago
David Majda 434abdb272 Jasmine: Convert tests of parser's "sequence" rule 13 years ago