| OLD | NEW |
| 1 // Copyright 2015 the V8 project authors. All rights reserved. | 1 // Copyright 2015 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/interpreter/bytecode-generator.h" | 5 #include "src/interpreter/bytecode-generator.h" |
| 6 | 6 |
| 7 #include <stack> | 7 #include <stack> |
| 8 | 8 |
| 9 #include "src/compiler.h" | 9 #include "src/compiler.h" |
| 10 #include "src/objects.h" | 10 #include "src/objects.h" |
| 11 #include "src/scopes.h" | 11 #include "src/scopes.h" |
| 12 #include "src/token.h" | 12 #include "src/token.h" |
| 13 | 13 |
| 14 namespace v8 { | 14 namespace v8 { |
| 15 namespace internal { | 15 namespace internal { |
| 16 namespace interpreter { | 16 namespace interpreter { |
| 17 | 17 |
| 18 BytecodeGenerator::BytecodeGenerator(Isolate* isolate, Zone* zone) | 18 BytecodeGenerator::BytecodeGenerator(Isolate* isolate, Zone* zone) |
| 19 : builder_(isolate) { | 19 : builder_(isolate, zone) { |
| 20 InitializeAstVisitor(isolate, zone); | 20 InitializeAstVisitor(isolate, zone); |
| 21 } | 21 } |
| 22 | 22 |
| 23 | 23 |
| 24 BytecodeGenerator::~BytecodeGenerator() {} | 24 BytecodeGenerator::~BytecodeGenerator() {} |
| 25 | 25 |
| 26 | 26 |
| 27 Handle<BytecodeArray> BytecodeGenerator::MakeBytecode(CompilationInfo* info) { | 27 Handle<BytecodeArray> BytecodeGenerator::MakeBytecode(CompilationInfo* info) { |
| 28 set_scope(info->scope()); | 28 set_scope(info->scope()); |
| 29 | 29 |
| (...skipping 164 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 194 void BytecodeGenerator::VisitNativeFunctionLiteral( | 194 void BytecodeGenerator::VisitNativeFunctionLiteral( |
| 195 NativeFunctionLiteral* node) { | 195 NativeFunctionLiteral* node) { |
| 196 UNIMPLEMENTED(); | 196 UNIMPLEMENTED(); |
| 197 } | 197 } |
| 198 | 198 |
| 199 | 199 |
| 200 void BytecodeGenerator::VisitConditional(Conditional* node) { UNIMPLEMENTED(); } | 200 void BytecodeGenerator::VisitConditional(Conditional* node) { UNIMPLEMENTED(); } |
| 201 | 201 |
| 202 | 202 |
| 203 void BytecodeGenerator::VisitLiteral(Literal* expr) { | 203 void BytecodeGenerator::VisitLiteral(Literal* expr) { |
| 204 if (expr->IsPropertyName()) { | |
| 205 UNIMPLEMENTED(); | |
| 206 } | |
| 207 | |
| 208 Handle<Object> value = expr->value(); | 204 Handle<Object> value = expr->value(); |
| 209 if (value->IsSmi()) { | 205 if (value->IsSmi()) { |
| 210 builder().LoadLiteral(Smi::cast(*value)); | 206 builder().LoadLiteral(Smi::cast(*value)); |
| 211 } else if (value->IsUndefined()) { | 207 } else if (value->IsUndefined()) { |
| 212 builder().LoadUndefined(); | 208 builder().LoadUndefined(); |
| 213 } else if (value->IsTrue()) { | 209 } else if (value->IsTrue()) { |
| 214 builder().LoadTrue(); | 210 builder().LoadTrue(); |
| 215 } else if (value->IsFalse()) { | 211 } else if (value->IsFalse()) { |
| 216 builder().LoadFalse(); | 212 builder().LoadFalse(); |
| 217 } else if (value->IsNull()) { | 213 } else if (value->IsNull()) { |
| 218 builder().LoadNull(); | 214 builder().LoadNull(); |
| 219 } else if (value->IsTheHole()) { | 215 } else if (value->IsTheHole()) { |
| 220 builder().LoadTheHole(); | 216 builder().LoadTheHole(); |
| 221 } else { | 217 } else { |
| 222 UNIMPLEMENTED(); | 218 builder().LoadLiteral(value); |
| 223 } | 219 } |
| 224 } | 220 } |
| 225 | 221 |
| 226 | 222 |
| 227 void BytecodeGenerator::VisitRegExpLiteral(RegExpLiteral* node) { | 223 void BytecodeGenerator::VisitRegExpLiteral(RegExpLiteral* node) { |
| 228 UNIMPLEMENTED(); | 224 UNIMPLEMENTED(); |
| 229 } | 225 } |
| 230 | 226 |
| 231 | 227 |
| 232 void BytecodeGenerator::VisitObjectLiteral(ObjectLiteral* node) { | 228 void BytecodeGenerator::VisitObjectLiteral(ObjectLiteral* node) { |
| (...skipping 138 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 371 | 367 |
| 372 Visit(left); | 368 Visit(left); |
| 373 builder().StoreAccumulatorInRegister(temporary); | 369 builder().StoreAccumulatorInRegister(temporary); |
| 374 Visit(right); | 370 Visit(right); |
| 375 builder().BinaryOperation(op, temporary); | 371 builder().BinaryOperation(op, temporary); |
| 376 } | 372 } |
| 377 | 373 |
| 378 } // namespace interpreter | 374 } // namespace interpreter |
| 379 } // namespace internal | 375 } // namespace internal |
| 380 } // namespace v8 | 376 } // namespace v8 |
| OLD | NEW |