- 05 Nov, 2009 1 commit
-
-
kmillikin@chromium.org authored
Review URL: http://codereview.chromium.org/366030 git-svn-id: http://v8.googlecode.com/svn/branches/bleeding_edge@3233 ce2b1a6d-e550-0410-aec6-3dcde31c8c00
-
- 03 Nov, 2009 1 commit
-
-
kmillikin@chromium.org authored
directly-applied function literals that are themselves compiled with the top-level code generator. The choice is guarded by a test that the function is anonymous (thus not expected to be recursive) and not in a loop. A compilation hint is set in the shared function info and used to make the choice. Review URL: http://codereview.chromium.org/341081 git-svn-id: http://v8.googlecode.com/svn/branches/bleeding_edge@3206 ce2b1a6d-e550-0410-aec6-3dcde31c8c00
-
- 30 Oct, 2009 2 commits
-
-
kmillikin@chromium.org authored
context. Test contexts are used for the left subexpressions of short-circuited boolean operators. The right subexpressions inherit their expression context from the binary op expression. Compilation of short-circuited operations in effect and test context is straightforward: effect(e0 || e1) = test(e0, L0, L1) L1: effect(e1) L0: test(e0 || e1, L0, L1) = test(e0, L0, L2) L2: test(e1, L0, L1) Because the value of the first subexpression may be needed as the value of the whole expression in a value context, we introduce a hybrid value/test contest (the value is needed if true, but not if false). value(e0 || e1) = value/test(e0, L0, L1) L1: value(e1) L0: The compilation of value/test and test/value (introduced by boolean AND) is: value/test(e0 || e1, L0, L1) = value/test(e0, L0, L2) L2: value/test(e1, L0, L1) test/value(e0 || e1, L0, L1) = test(e0, L0, L2) L2: test/value(e1, L0, L1) Boolean AND is the dual. The AST nodes themselves (not their parents) are responsible for producing the proper result (effect, value, or control flow) depending on their context. Review URL: http://codereview.chromium.org/339082 git-svn-id: http://v8.googlecode.com/svn/branches/bleeding_edge@3187 ce2b1a6d-e550-0410-aec6-3dcde31c8c00
-
kmillikin@chromium.org authored
Since it is (currently) only an enum, change it to an enum (for now). Review URL: http://codereview.chromium.org/342035 git-svn-id: http://v8.googlecode.com/svn/branches/bleeding_edge@3181 ce2b1a6d-e550-0410-aec6-3dcde31c8c00
-
- 29 Oct, 2009 1 commit
-
-
kmillikin@chromium.org authored
context of the expressions they label. Introduce an "unintialized" location to catch failure to assign any location at all. Changed the object literal initialization on ARM to use a Store IC in the same cases where it did on the other platforms. This was required because the location of the literal property name is given an "unitialized" location. Review URL: http://codereview.chromium.org/339045 git-svn-id: http://v8.googlecode.com/svn/branches/bleeding_edge@3171 ce2b1a6d-e550-0410-aec6-3dcde31c8c00
-
- 28 Oct, 2009 1 commit
-
-
kmillikin@chromium.org authored
location to an Expression AST node from the node's parent to the node itself. This allows an inherited code generation context from a parent node to be passed arbitrarily far down the tree (eg, the subexpression of a unary not is in the same context as the unary expression itself, the then and else subexpressions of the ternary operator are in the same context as the whole expression, and so forth). We do not yet take advantage of this in the backend (eg, the right subexpression of short-circuited OR is still compiled by using the parent's destination location, rather than the subexpression's itself). Review URL: http://codereview.chromium.org/340005 git-svn-id: http://v8.googlecode.com/svn/branches/bleeding_edge@3163 ce2b1a6d-e550-0410-aec6-3dcde31c8c00
-
- 15 Oct, 2009 2 commits
-
-
kmillikin@chromium.org authored
fast-mode code generator. AST expression nodes are annotated with a location when doing the initial syntactic check of the AST. In the current implementation, expression locations are 'temporary' (ie, allocated to the stack) or 'nowhere' (ie, the expression's value is not needed though it must be evaluated for side effects). For the assignment '.result = true' on IA32, we had before (with the true value already on top of the stack): 32 mov eax,[esp] 35 mov [ebp+0xf4],eax 38 pop eax Now: 32 pop [ebp+0xf4] ======== On x64, before: 37 movq rax,[rsp] 41 movq [rbp-0x18],rax 45 pop rax Now: 37 pop [rbp-0x18] ======== On ARM, before (with the true value in register ip): 36 str ip, [sp, #-4]! 40 ldr ip, [sp, #+0] 44 str ip, [fp, #-12] 48 add sp, sp, #4 Now: 36 str ip, [fp, #-12] Review URL: http://codereview.chromium.org/267118 git-svn-id: http://v8.googlecode.com/svn/branches/bleeding_edge@3076 ce2b1a6d-e550-0410-aec6-3dcde31c8c00
-
kmillikin@chromium.org authored
"jsregexp.h" and "jump-target.h" required "macro-assembler.h" to always be included first. Instead the include of "macro-assembler.h" has moved into those header files. "dateparser-inl.h" required "dateparser.h" to always be included first. Instead the include of "dateparser.h" has moved into "dateparser-inl.h". Review URL: http://codereview.chromium.org/267117 git-svn-id: http://v8.googlecode.com/svn/branches/bleeding_edge@3074 ce2b1a6d-e550-0410-aec6-3dcde31c8c00
-
- 13 Oct, 2009 1 commit
-
-
kmillikin@chromium.org authored
contains_array_literal_ implies materialized_literal_count_ > 0, and we appear not to need to know about array literals specifically. Review URL: http://codereview.chromium.org/272043 git-svn-id: http://v8.googlecode.com/svn/branches/bleeding_edge@3055 ce2b1a6d-e550-0410-aec6-3dcde31c8c00
-
- 12 Oct, 2009 2 commits
-
-
kmillikin@chromium.org authored
implementation is not yet complete (it prints only the node name for some AST constructs) and does not serialize everything needed to reconstitute the AST. It is motivated by a desire to prototype source-to-source transformations in JavaScript itself (or anything else that can grok JSON), but it should have other uses too. Feedback is welcome. Review URL: http://codereview.chromium.org/131101 git-svn-id: http://v8.googlecode.com/svn/branches/bleeding_edge@3051 ce2b1a6d-e550-0410-aec6-3dcde31c8c00
-
kmillikin@chromium.org authored
while, and for loops. Previously they were distinguished by a type field, which required runtime asserts to avoid invalid nodes (since not all loop types have the same internal structure). Now they C++ type system is used to require well-formed loop ASTs. Because they do not share compilation code, we had very large functions in the code generators that merely did a runtime dispatch to a specific implementation based on the type. Review URL: http://codereview.chromium.org/269049 git-svn-id: http://v8.googlecode.com/svn/branches/bleeding_edge@3048 ce2b1a6d-e550-0410-aec6-3dcde31c8c00
-
- 30 Sep, 2009 1 commit
-
-
kmillikin@chromium.org authored
1. Change the AST node type CallNew to be a subclass of Expression rather than Call. It's not really a call but it just happens to have the same fields. 2. Change our error reporting for invalid left-hand sides in for-in statements, pre- and postfix count expressions, and assignments. Before we signaled a syntax error at compile time *unless* the LHS was a function call or 'new' expression, in which case we signaled a reference error at runtime. Now we signal a reference error at runtime in all cases. This matches the JSC behavior in Safari 4. Review URL: http://codereview.chromium.org/249039 git-svn-id: http://v8.googlecode.com/svn/branches/bleeding_edge@2994 ce2b1a6d-e550-0410-aec6-3dcde31c8c00
-
- 29 Sep, 2009 1 commit
-
-
kmillikin@chromium.org authored
differentiating between Call and CallEval except in the code generator, and the difference can be detected from a regular Call AST node at code generation time. Review URL: http://codereview.chromium.org/245042 git-svn-id: http://v8.googlecode.com/svn/branches/bleeding_edge@2984 ce2b1a6d-e550-0410-aec6-3dcde31c8c00
-
- 28 Sep, 2009 1 commit
-
-
kmillikin@chromium.org authored
It was not currently being used for expressions or declarations and always had the default initial value. Review URL: http://codereview.chromium.org/246019 git-svn-id: http://v8.googlecode.com/svn/branches/bleeding_edge@2976 ce2b1a6d-e550-0410-aec6-3dcde31c8c00
-
- 19 Aug, 2009 1 commit
-
-
sgjesse@chromium.org authored
During parsing functions are analyzed for statements of the form this.x = ...;. These assignments are categorized in two types: simple and non simple. The simple ones are where the right hand side is known to be either a constant or an argument to the function. If a function only contains statements of this type the property names are collected and for the simple assignments the index of the argument or the constant value assigned are stored as well. When the initial map for a function is created and the function consists of only this type of assignemnts the initial map is created with a descriptor array describing these properties which will be known to always exist in an object created from the function. The information on this property assignments is not collected during pre-parsing so if compiling using pre-parse data these optimization hints are not available. Next step will be to use the information collected for the simple assignments to generate constructor code which will create and initialize the object from this information without calling the code for the function. Review URL: http://codereview.chromium.org/172088 git-svn-id: http://v8.googlecode.com/svn/branches/bleeding_edge@2710 ce2b1a6d-e550-0410-aec6-3dcde31c8c00
-
- 03 Aug, 2009 1 commit
-
-
sgjesse@chromium.org authored
Review URL: http://codereview.chromium.org/159783 git-svn-id: http://v8.googlecode.com/svn/branches/bleeding_edge@2606 ce2b1a6d-e550-0410-aec6-3dcde31c8c00
-
- 30 Jul, 2009 2 commits
-
-
kmillikin@chromium.org authored
Review URL: http://codereview.chromium.org/159633 git-svn-id: http://v8.googlecode.com/svn/branches/bleeding_edge@2587 ce2b1a6d-e550-0410-aec6-3dcde31c8c00
-
kmillikin@chromium.org authored
AstNode in case we ever want to have some other kind of node. Split the NODE_LIST macro-generating macro so that we can iterate concrete subclasses of Statement and concrete subclasses of Expression separately. Review URL: http://codereview.chromium.org/159632 git-svn-id: http://v8.googlecode.com/svn/branches/bleeding_edge@2586 ce2b1a6d-e550-0410-aec6-3dcde31c8c00
-
- 03 Jul, 2009 1 commit
-
-
lrn@chromium.org authored
Shouldn't run out of stack space while parsing deeply nested regexps. Might be a little faster. Review URL: http://codereview.chromium.org/149069 git-svn-id: http://v8.googlecode.com/svn/branches/bleeding_edge@2345 ce2b1a6d-e550-0410-aec6-3dcde31c8c00
-
- 24 Jun, 2009 1 commit
-
-
kasperl@chromium.org authored
This allows Function.prototype.apply to not allocate the objects and copy the arguments directly from the stack. Review URL: http://codereview.chromium.org/147075 git-svn-id: http://v8.googlecode.com/svn/branches/bleeding_edge@2256 ce2b1a6d-e550-0410-aec6-3dcde31c8c00
-
- 25 May, 2009 1 commit
-
-
mikhail.naganov@gmail.com authored
This issue was raised by Brett Wilson while reviewing my changelist for readability. Craig Silverstein (one of C++ SG maintainers) confirmed that we should declare one namespace per line. Our way of namespaces closing seems not violating style guides (there is no clear agreement on it), so I left it intact. Review URL: http://codereview.chromium.org/115756 git-svn-id: http://v8.googlecode.com/svn/branches/bleeding_edge@2038 ce2b1a6d-e550-0410-aec6-3dcde31c8c00
-
- 24 Apr, 2009 1 commit
-
-
christian.plesner.hansen@gmail.com authored
the properties as well. This fixes some failing tests. - Moved json parsing into native code. git-svn-id: http://v8.googlecode.com/svn/branches/bleeding_edge@1789 ce2b1a6d-e550-0410-aec6-3dcde31c8c00
-
- 14 Apr, 2009 1 commit
-
-
mikhail.naganov@gmail.com authored
Currently function name inference is wired with AST optimization pass to avoid introducing another pass over AST. A better solution would be to rewrite AST visitors so they can be naturally combined together in a single pass, as their current implementation doesn't allow it. For examples of cases where function names can be inferred, see the tests file. Review URL: http://codereview.chromium.org/62146 git-svn-id: http://v8.googlecode.com/svn/branches/bleeding_edge@1696 ce2b1a6d-e550-0410-aec6-3dcde31c8c00
-
- 03 Apr, 2009 1 commit
-
-
lrn@chromium.org authored
Uses static string type to optimize string additions. git-svn-id: http://v8.googlecode.com/svn/branches/bleeding_edge@1675 ce2b1a6d-e550-0410-aec6-3dcde31c8c00
-
- 24 Mar, 2009 1 commit
-
-
kmillikin@chromium.org authored
It defaults to true so that if the analysis is not run we get a safe analysis result. Review URL: http://codereview.chromium.org/42562 git-svn-id: http://v8.googlecode.com/svn/branches/bleeding_edge@1600 ce2b1a6d-e550-0410-aec6-3dcde31c8c00
-
- 23 Mar, 2009 1 commit
-
-
olehougaard authored
Review URL: http://codereview.chromium.org/48006 git-svn-id: http://v8.googlecode.com/svn/branches/bleeding_edge@1571 ce2b1a6d-e550-0410-aec6-3dcde31c8c00
-
- 15 Mar, 2009 1 commit
-
-
erik.corry@gmail.com authored
Review URL: http://codereview.chromium.org/46088 git-svn-id: http://v8.googlecode.com/svn/branches/bleeding_edge@1511 ce2b1a6d-e550-0410-aec6-3dcde31c8c00
-
- 12 Mar, 2009 1 commit
-
-
kmillikin@chromium.org authored
is enabled for a loop by the absence of function literal subexpressions in the condition expression. Review URL: http://codereview.chromium.org/42127 git-svn-id: http://v8.googlecode.com/svn/branches/bleeding_edge@1503 ce2b1a6d-e550-0410-aec6-3dcde31c8c00
-
- 11 Mar, 2009 1 commit
-
-
kmillikin@chromium.org authored
the expectation at the break, continue, and return labels (including shadowed ones) instead of based on the AST nodes. See http://code.google.com/p/v8/issues/detail?id=265 Review URL: http://codereview.chromium.org/42017 git-svn-id: http://v8.googlecode.com/svn/branches/bleeding_edge@1482 ce2b1a6d-e550-0410-aec6-3dcde31c8c00
-
- 10 Mar, 2009 3 commits
-
-
lrn@chromium.org authored
git-svn-id: http://v8.googlecode.com/svn/branches/bleeding_edge@1476 ce2b1a6d-e550-0410-aec6-3dcde31c8c00
-
kmillikin@chromium.org authored
blocks labeled by "break", "continue", and "return". BreakTargets are the only jump targets that appear in the AST, the only ones that can be uninitialized, and the only ones that can be shadowed. Review URL: http://codereview.chromium.org/42008 git-svn-id: http://v8.googlecode.com/svn/branches/bleeding_edge@1475 ce2b1a6d-e550-0410-aec6-3dcde31c8c00
-
olehougaard authored
Review URL: http://codereview.chromium.org/40295 git-svn-id: http://v8.googlecode.com/svn/branches/bleeding_edge@1469 ce2b1a6d-e550-0410-aec6-3dcde31c8c00
-
- 09 Mar, 2009 1 commit
-
-
kmillikin@chromium.org authored
more than once. Review URL: http://codereview.chromium.org/39339 git-svn-id: http://v8.googlecode.com/svn/branches/bleeding_edge@1456 ce2b1a6d-e550-0410-aec6-3dcde31c8c00
-
- 06 Mar, 2009 1 commit
-
-
olehougaard authored
Optimizing nested, constant object literals (like JSON objects) by building one large object template for the entire object instead of one for each sub-object. Review URL: http://codereview.chromium.org/39184 git-svn-id: http://v8.googlecode.com/svn/branches/bleeding_edge@1432 ce2b1a6d-e550-0410-aec6-3dcde31c8c00
-
- 02 Mar, 2009 1 commit
-
-
kmillikin@chromium.org authored
all the reachable tests first, and then all the reachable bodies. Review URL: http://codereview.chromium.org/28296 git-svn-id: http://v8.googlecode.com/svn/branches/bleeding_edge@1397 ce2b1a6d-e550-0410-aec6-3dcde31c8c00
-
- 27 Feb, 2009 1 commit
-
-
kmillikin@chromium.org authored
git-svn-id: http://v8.googlecode.com/svn/branches/bleeding_edge@1389 ce2b1a6d-e550-0410-aec6-3dcde31c8c00
-
- 26 Feb, 2009 1 commit
-
-
olehougaard authored
Go into slow case when encountering object initialization on the top level to optimize performance of code like C.prototype.x = ...; C.prototype.y = ...; ... C.prototype.z = ...; Review URL: http://codereview.chromium.org/27128 git-svn-id: http://v8.googlecode.com/svn/branches/bleeding_edge@1372 ce2b1a6d-e550-0410-aec6-3dcde31c8c00
-
- 03 Feb, 2009 1 commit
-
-
lrn@chromium.org authored
Choice nodes may know that they are never not at the start of input. This can remove start_of_input assertions in cases where they are statically known to fail. The initial loop is unrolled once if the regexp might check for the start of input. Only the first iteration may be at the start, the following loop knows that it isn't. git-svn-id: http://v8.googlecode.com/svn/branches/bleeding_edge@1217 ce2b1a6d-e550-0410-aec6-3dcde31c8c00
-
- 26 Jan, 2009 1 commit
-
-
lrn@chromium.org authored
Allows backtracking to clear registers instead of pushing and popping them to restore state. Redo of 1135 with bug fixed. git-svn-id: http://v8.googlecode.com/svn/branches/bleeding_edge@1156 ce2b1a6d-e550-0410-aec6-3dcde31c8c00
-
- 23 Jan, 2009 1 commit
-
-
erik.corry@gmail.com authored
git-svn-id: http://v8.googlecode.com/svn/branches/bleeding_edge@1138 ce2b1a6d-e550-0410-aec6-3dcde31c8c00
-