| OLD | NEW |
| 1 // Copyright 2014 the V8 project authors. All rights reserved. | 1 // Copyright 2014 the V8 project authors. All rights reserved. |
| 2 // Use of this source code is governed by a BSD-style license that can be | 2 // Use of this source code is governed by a BSD-style license that can be |
| 3 // found in the LICENSE file. | 3 // found in the LICENSE file. |
| 4 | 4 |
| 5 #include "src/compiler/ast-graph-builder.h" | 5 #include "src/compiler/ast-graph-builder.h" |
| 6 | 6 |
| 7 #include "src/ast/compile-time-value.h" | 7 #include "src/ast/compile-time-value.h" |
| 8 #include "src/ast/scopes.h" | 8 #include "src/ast/scopes.h" |
| 9 #include "src/compilation-info.h" | 9 #include "src/compilation-info.h" |
| 10 #include "src/compiler.h" | 10 #include "src/compiler.h" |
| (...skipping 2102 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 2113 Variable* variable = expr->expression()->AsVariableProxy()->var(); | 2113 Variable* variable = expr->expression()->AsVariableProxy()->var(); |
| 2114 DCHECK(is_sloppy(language_mode()) || variable->is_this()); | 2114 DCHECK(is_sloppy(language_mode()) || variable->is_this()); |
| 2115 value = BuildVariableDelete(variable, expr->id(), | 2115 value = BuildVariableDelete(variable, expr->id(), |
| 2116 ast_context()->GetStateCombine()); | 2116 ast_context()->GetStateCombine()); |
| 2117 } else if (expr->expression()->IsProperty()) { | 2117 } else if (expr->expression()->IsProperty()) { |
| 2118 Property* property = expr->expression()->AsProperty(); | 2118 Property* property = expr->expression()->AsProperty(); |
| 2119 VisitForValue(property->obj()); | 2119 VisitForValue(property->obj()); |
| 2120 VisitForValue(property->key()); | 2120 VisitForValue(property->key()); |
| 2121 Node* key = environment()->Pop(); | 2121 Node* key = environment()->Pop(); |
| 2122 Node* object = environment()->Pop(); | 2122 Node* object = environment()->Pop(); |
| 2123 value = NewNode(javascript()->DeleteProperty(language_mode()), object, key); | 2123 Node* mode = jsgraph()->Constant(static_cast<int32_t>(language_mode())); |
| 2124 value = NewNode(javascript()->DeleteProperty(), object, key, mode); |
| 2124 PrepareFrameState(value, expr->id(), ast_context()->GetStateCombine()); | 2125 PrepareFrameState(value, expr->id(), ast_context()->GetStateCombine()); |
| 2125 } else { | 2126 } else { |
| 2126 VisitForEffect(expr->expression()); | 2127 VisitForEffect(expr->expression()); |
| 2127 value = jsgraph()->TrueConstant(); | 2128 value = jsgraph()->TrueConstant(); |
| 2128 } | 2129 } |
| 2129 ast_context()->ProduceValue(expr, value); | 2130 ast_context()->ProduceValue(expr, value); |
| 2130 } | 2131 } |
| 2131 | 2132 |
| 2132 | 2133 |
| 2133 void AstGraphBuilder::VisitVoid(UnaryOperation* expr) { | 2134 void AstGraphBuilder::VisitVoid(UnaryOperation* expr) { |
| (...skipping 312 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 2446 | 2447 |
| 2447 | 2448 |
| 2448 Node* AstGraphBuilder::BuildVariableDelete(Variable* variable, | 2449 Node* AstGraphBuilder::BuildVariableDelete(Variable* variable, |
| 2449 BailoutId bailout_id, | 2450 BailoutId bailout_id, |
| 2450 OutputFrameStateCombine combine) { | 2451 OutputFrameStateCombine combine) { |
| 2451 switch (variable->location()) { | 2452 switch (variable->location()) { |
| 2452 case VariableLocation::UNALLOCATED: { | 2453 case VariableLocation::UNALLOCATED: { |
| 2453 // Global var, const, or let variable. | 2454 // Global var, const, or let variable. |
| 2454 Node* global = BuildLoadGlobalObject(); | 2455 Node* global = BuildLoadGlobalObject(); |
| 2455 Node* name = jsgraph()->Constant(variable->name()); | 2456 Node* name = jsgraph()->Constant(variable->name()); |
| 2456 const Operator* op = javascript()->DeleteProperty(language_mode()); | 2457 Node* mode = jsgraph()->Constant(static_cast<int32_t>(language_mode())); |
| 2457 Node* result = NewNode(op, global, name); | 2458 const Operator* op = javascript()->DeleteProperty(); |
| 2459 Node* result = NewNode(op, global, name, mode); |
| 2458 PrepareFrameState(result, bailout_id, combine); | 2460 PrepareFrameState(result, bailout_id, combine); |
| 2459 return result; | 2461 return result; |
| 2460 } | 2462 } |
| 2461 case VariableLocation::PARAMETER: | 2463 case VariableLocation::PARAMETER: |
| 2462 case VariableLocation::LOCAL: | 2464 case VariableLocation::LOCAL: |
| 2463 case VariableLocation::CONTEXT: { | 2465 case VariableLocation::CONTEXT: { |
| 2464 // Local var, const, or let variable or context variable. | 2466 // Local var, const, or let variable or context variable. |
| 2465 return jsgraph()->BooleanConstant(variable->is_this()); | 2467 return jsgraph()->BooleanConstant(variable->is_this()); |
| 2466 } | 2468 } |
| 2467 case VariableLocation::LOOKUP: | 2469 case VariableLocation::LOOKUP: |
| (...skipping 707 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 3175 float invocation_frequency, LoopAssignmentAnalysis* loop_assignment, | 3177 float invocation_frequency, LoopAssignmentAnalysis* loop_assignment, |
| 3176 SourcePositionTable* source_positions, int inlining_id) | 3178 SourcePositionTable* source_positions, int inlining_id) |
| 3177 : AstGraphBuilder(local_zone, info, jsgraph, invocation_frequency, | 3179 : AstGraphBuilder(local_zone, info, jsgraph, invocation_frequency, |
| 3178 loop_assignment), | 3180 loop_assignment), |
| 3179 source_positions_(source_positions), | 3181 source_positions_(source_positions), |
| 3180 start_position_(info->shared_info()->start_position(), inlining_id) {} | 3182 start_position_(info->shared_info()->start_position(), inlining_id) {} |
| 3181 | 3183 |
| 3182 } // namespace compiler | 3184 } // namespace compiler |
| 3183 } // namespace internal | 3185 } // namespace internal |
| 3184 } // namespace v8 | 3186 } // namespace v8 |
| OLD | NEW |