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/v8.h" | 5 #include "src/v8.h" |
6 | 6 |
7 // Required to get M_E etc. in MSVC. | 7 // Required to get M_E etc. in MSVC. |
8 #if defined(_WIN32) | 8 #if defined(_WIN32) |
9 #define _USE_MATH_DEFINES | 9 #define _USE_MATH_DEFINES |
10 #endif | 10 #endif |
(...skipping 29 matching lines...) Expand all Loading... |
40 | 40 |
41 struct ForeignVariable { | 41 struct ForeignVariable { |
42 Handle<Name> name; | 42 Handle<Name> name; |
43 Variable* var; | 43 Variable* var; |
44 LocalType type; | 44 LocalType type; |
45 }; | 45 }; |
46 | 46 |
47 class AsmWasmBuilderImpl final : public AstVisitor<AsmWasmBuilderImpl> { | 47 class AsmWasmBuilderImpl final : public AstVisitor<AsmWasmBuilderImpl> { |
48 public: | 48 public: |
49 AsmWasmBuilderImpl(Isolate* isolate, Zone* zone, | 49 AsmWasmBuilderImpl(Isolate* isolate, Zone* zone, |
50 AstValueFactory* ast_value_factory, Script* script, | 50 AstValueFactory* ast_value_factory, Handle<Script> script, |
51 FunctionLiteral* literal, AsmTyper* typer) | 51 FunctionLiteral* literal, AsmTyper* typer) |
52 : local_variables_(ZoneHashMap::kDefaultHashMapCapacity, | 52 : local_variables_(ZoneHashMap::kDefaultHashMapCapacity, |
53 ZoneAllocationPolicy(zone)), | 53 ZoneAllocationPolicy(zone)), |
54 functions_(ZoneHashMap::kDefaultHashMapCapacity, | 54 functions_(ZoneHashMap::kDefaultHashMapCapacity, |
55 ZoneAllocationPolicy(zone)), | 55 ZoneAllocationPolicy(zone)), |
56 global_variables_(ZoneHashMap::kDefaultHashMapCapacity, | 56 global_variables_(ZoneHashMap::kDefaultHashMapCapacity, |
57 ZoneAllocationPolicy(zone)), | 57 ZoneAllocationPolicy(zone)), |
58 scope_(kModuleScope), | 58 scope_(kModuleScope), |
59 builder_(new (zone) WasmModuleBuilder(zone)), | 59 builder_(new (zone) WasmModuleBuilder(zone)), |
60 current_function_builder_(nullptr), | 60 current_function_builder_(nullptr), |
(...skipping 71 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
132 DCHECK_EQ(kModuleScope, scope_); | 132 DCHECK_EQ(kModuleScope, scope_); |
133 DCHECK_NULL(current_function_builder_); | 133 DCHECK_NULL(current_function_builder_); |
134 FunctionLiteral* old_func = decl->fun(); | 134 FunctionLiteral* old_func = decl->fun(); |
135 Zone zone(isolate_->allocator(), ZONE_NAME); | 135 Zone zone(isolate_->allocator(), ZONE_NAME); |
136 DeclarationScope* new_func_scope = nullptr; | 136 DeclarationScope* new_func_scope = nullptr; |
137 if (decl->fun()->body() == nullptr) { | 137 if (decl->fun()->body() == nullptr) { |
138 // TODO(bradnelson): Refactor parser so we don't need a | 138 // TODO(bradnelson): Refactor parser so we don't need a |
139 // SharedFunctionInfo to parse a single function, | 139 // SharedFunctionInfo to parse a single function, |
140 // or squirrel away the SharedFunctionInfo to use later. | 140 // or squirrel away the SharedFunctionInfo to use later. |
141 Handle<SharedFunctionInfo> shared = | 141 Handle<SharedFunctionInfo> shared = |
142 isolate_->factory()->NewSharedFunctionInfoForLiteral( | 142 isolate_->factory()->NewSharedFunctionInfoForLiteral(decl->fun(), |
143 decl->fun(), handle(script_, isolate_)); | 143 script_); |
144 shared->set_is_toplevel(false); | 144 shared->set_is_toplevel(false); |
145 ParseInfo info(&zone, handle(script_, isolate_)); | 145 ParseInfo info(&zone, script_); |
146 info.set_shared_info(shared); | 146 info.set_shared_info(shared); |
147 info.set_toplevel(false); | 147 info.set_toplevel(false); |
148 info.set_language_mode(decl->fun()->scope()->language_mode()); | 148 info.set_language_mode(decl->fun()->scope()->language_mode()); |
149 info.set_allow_lazy_parsing(false); | 149 info.set_allow_lazy_parsing(false); |
150 info.set_function_literal_id(shared->function_literal_id()); | 150 info.set_function_literal_id(shared->function_literal_id()); |
151 info.set_ast_value_factory(ast_value_factory_); | 151 info.set_ast_value_factory(ast_value_factory_); |
152 info.set_ast_value_factory_owned(false); | 152 info.set_ast_value_factory_owned(false); |
153 // Create fresh function scope to use to parse the function in. | 153 // Create fresh function scope to use to parse the function in. |
154 new_func_scope = new (info.zone()) DeclarationScope( | 154 new_func_scope = new (info.zone()) DeclarationScope( |
155 info.zone(), decl->fun()->scope()->outer_scope(), FUNCTION_SCOPE); | 155 info.zone(), decl->fun()->scope()->outer_scope(), FUNCTION_SCOPE); |
(...skipping 1758 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
1914 ZoneHashMap local_variables_; | 1914 ZoneHashMap local_variables_; |
1915 ZoneHashMap functions_; | 1915 ZoneHashMap functions_; |
1916 ZoneHashMap global_variables_; | 1916 ZoneHashMap global_variables_; |
1917 AsmScope scope_; | 1917 AsmScope scope_; |
1918 WasmModuleBuilder* builder_; | 1918 WasmModuleBuilder* builder_; |
1919 WasmFunctionBuilder* current_function_builder_; | 1919 WasmFunctionBuilder* current_function_builder_; |
1920 FunctionLiteral* literal_; | 1920 FunctionLiteral* literal_; |
1921 Isolate* isolate_; | 1921 Isolate* isolate_; |
1922 Zone* zone_; | 1922 Zone* zone_; |
1923 AstValueFactory* ast_value_factory_; | 1923 AstValueFactory* ast_value_factory_; |
1924 Script* script_; | 1924 Handle<Script> script_; |
1925 AsmTyper* typer_; | 1925 AsmTyper* typer_; |
1926 bool typer_failed_; | 1926 bool typer_failed_; |
1927 ZoneVector<std::pair<BreakableStatement*, bool>> breakable_blocks_; | 1927 ZoneVector<std::pair<BreakableStatement*, bool>> breakable_blocks_; |
1928 ZoneVector<ForeignVariable> foreign_variables_; | 1928 ZoneVector<ForeignVariable> foreign_variables_; |
1929 WasmFunctionBuilder* init_function_; | 1929 WasmFunctionBuilder* init_function_; |
1930 WasmFunctionBuilder* foreign_init_function_; | 1930 WasmFunctionBuilder* foreign_init_function_; |
1931 uint32_t next_table_index_; | 1931 uint32_t next_table_index_; |
1932 ZoneHashMap function_tables_; | 1932 ZoneHashMap function_tables_; |
1933 ImportedFunctionTable imported_function_table_; | 1933 ImportedFunctionTable imported_function_table_; |
1934 | 1934 |
1935 DEFINE_AST_VISITOR_SUBCLASS_MEMBERS(); | 1935 DEFINE_AST_VISITOR_SUBCLASS_MEMBERS(); |
1936 | 1936 |
1937 private: | 1937 private: |
1938 DISALLOW_COPY_AND_ASSIGN(AsmWasmBuilderImpl); | 1938 DISALLOW_COPY_AND_ASSIGN(AsmWasmBuilderImpl); |
1939 }; | 1939 }; |
1940 | 1940 |
1941 AsmWasmBuilder::AsmWasmBuilder(Isolate* isolate, Zone* zone, | 1941 AsmWasmBuilder::AsmWasmBuilder(Isolate* isolate, Zone* zone, |
1942 AstValueFactory* ast_value_factory, | 1942 AstValueFactory* ast_value_factory, |
1943 Script* script, FunctionLiteral* literal) | 1943 Handle<Script> script, FunctionLiteral* literal) |
1944 : isolate_(isolate), | 1944 : isolate_(isolate), |
1945 zone_(zone), | 1945 zone_(zone), |
1946 ast_value_factory_(ast_value_factory), | 1946 ast_value_factory_(ast_value_factory), |
1947 script_(script), | 1947 script_(script), |
1948 literal_(literal), | 1948 literal_(literal), |
1949 typer_(isolate, zone, script, literal) {} | 1949 typer_(isolate, zone, script, literal) {} |
1950 | 1950 |
1951 // TODO(aseemgarg): probably should take zone (to write wasm to) as input so | 1951 // TODO(aseemgarg): probably should take zone (to write wasm to) as input so |
1952 // that zone in constructor may be thrown away once wasm module is written. | 1952 // that zone in constructor may be thrown away once wasm module is written. |
1953 AsmWasmBuilder::Result AsmWasmBuilder::Run(Handle<FixedArray>* foreign_args) { | 1953 AsmWasmBuilder::Result AsmWasmBuilder::Run(Handle<FixedArray>* foreign_args) { |
1954 AsmWasmBuilderImpl impl(isolate_, zone_, ast_value_factory_, script_, | 1954 AsmWasmBuilderImpl impl(isolate_, zone_, ast_value_factory_, script_, |
1955 literal_, &typer_); | 1955 literal_, &typer_); |
1956 bool success = impl.Build(); | 1956 bool success = impl.Build(); |
1957 *foreign_args = impl.GetForeignArgs(); | 1957 *foreign_args = impl.GetForeignArgs(); |
1958 ZoneBuffer* module_buffer = new (zone_) ZoneBuffer(zone_); | 1958 ZoneBuffer* module_buffer = new (zone_) ZoneBuffer(zone_); |
1959 impl.builder_->WriteTo(*module_buffer); | 1959 impl.builder_->WriteTo(*module_buffer); |
1960 ZoneBuffer* asm_offsets_buffer = new (zone_) ZoneBuffer(zone_); | 1960 ZoneBuffer* asm_offsets_buffer = new (zone_) ZoneBuffer(zone_); |
1961 impl.builder_->WriteAsmJsOffsetTable(*asm_offsets_buffer); | 1961 impl.builder_->WriteAsmJsOffsetTable(*asm_offsets_buffer); |
1962 return {module_buffer, asm_offsets_buffer, success}; | 1962 return {module_buffer, asm_offsets_buffer, success}; |
1963 } | 1963 } |
1964 | 1964 |
1965 const char* AsmWasmBuilder::foreign_init_name = "__foreign_init__"; | 1965 const char* AsmWasmBuilder::foreign_init_name = "__foreign_init__"; |
1966 const char* AsmWasmBuilder::single_function_name = "__single_function__"; | 1966 const char* AsmWasmBuilder::single_function_name = "__single_function__"; |
1967 | 1967 |
1968 } // namespace wasm | 1968 } // namespace wasm |
1969 } // namespace internal | 1969 } // namespace internal |
1970 } // namespace v8 | 1970 } // namespace v8 |
OLD | NEW |