Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(2)

Side by Side Diff: src/asmjs/asm-typer.h

Issue 2435823002: [V8][asm.js] Adds support to global const variables. (Closed)
Patch Set: Addresses comments. Created 4 years, 2 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View unified diff | Download patch
« no previous file with comments | « no previous file | src/asmjs/asm-typer.cc » ('j') | no next file with comments »
Toggle Intra-line Diffs ('i') | Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
OLDNEW
1 // Copyright 2016 the V8 project authors. All rights reserved. 1 // Copyright 2016 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 #ifndef SRC_ASMJS_ASM_TYPER_H_ 5 #ifndef SRC_ASMJS_ASM_TYPER_H_
6 #define SRC_ASMJS_ASM_TYPER_H_ 6 #define SRC_ASMJS_ASM_TYPER_H_
7 7
8 #include <cstdint> 8 #include <cstdint>
9 #include <string> 9 #include <string>
10 #include <unordered_set> 10 #include <unordered_set>
(...skipping 84 matching lines...) Expand 10 before | Expand all | Expand 10 after
95 95
96 private: 96 private:
97 friend class v8::internal::wasm::AsmTyperHarnessBuilder; 97 friend class v8::internal::wasm::AsmTyperHarnessBuilder;
98 98
99 class VariableInfo : public ZoneObject { 99 class VariableInfo : public ZoneObject {
100 public: 100 public:
101 enum Mutability { 101 enum Mutability {
102 kInvalidMutability, 102 kInvalidMutability,
103 kLocal, 103 kLocal,
104 kMutableGlobal, 104 kMutableGlobal,
105 // *VIOLATION* We support const variables in asm.js, as per the
106 //
107 // https://discourse.wicg.io/t/allow-const-global-variables/684
108 //
109 // Global const variables are treated as if they were numeric literals,
110 // and can be used anywhere a literal can be used.
111 kConstGlobal,
105 kImmutableGlobal, 112 kImmutableGlobal,
106 }; 113 };
107 114
108 explicit VariableInfo(AsmType* t) : type_(t) {} 115 explicit VariableInfo(AsmType* t) : type_(t) {}
109 116
110 VariableInfo* Clone(Zone* zone) const; 117 VariableInfo* Clone(Zone* zone) const;
111 118
112 bool IsMutable() const { 119 bool IsMutable() const {
113 return mutability_ == kLocal || mutability_ == kMutableGlobal; 120 return mutability_ == kLocal || mutability_ == kMutableGlobal;
114 } 121 }
115 122
116 bool IsGlobal() const { 123 bool IsGlobal() const {
117 return mutability_ == kImmutableGlobal || mutability_ == kMutableGlobal; 124 return mutability_ == kImmutableGlobal || mutability_ == kConstGlobal ||
125 mutability_ == kMutableGlobal;
118 } 126 }
119 127
120 bool IsStdlib() const { return standard_member_ == kStdlib; } 128 bool IsStdlib() const { return standard_member_ == kStdlib; }
121 bool IsFFI() const { return standard_member_ == kFFI; } 129 bool IsFFI() const { return standard_member_ == kFFI; }
122 bool IsHeap() const { return standard_member_ == kHeap; } 130 bool IsHeap() const { return standard_member_ == kHeap; }
123 131
124 void MarkDefined() { missing_definition_ = false; } 132 void MarkDefined() { missing_definition_ = false; }
125 void FirstForwardUseIs(VariableProxy* var); 133 void FirstForwardUseIs(VariableProxy* var);
126 134
127 StandardMember standard_member() const { return standard_member_; } 135 StandardMember standard_member() const { return standard_member_; }
(...skipping 172 matching lines...) Expand 10 before | Expand all | Expand 10 after
300 bool IsCallToFround(Call* call); 308 bool IsCallToFround(Call* call);
301 AsmType* ValidateFloatCoercion(Call* call); 309 AsmType* ValidateFloatCoercion(Call* call);
302 310
303 // 5.1 ParameterTypeAnnotations 311 // 5.1 ParameterTypeAnnotations
304 AsmType* ParameterTypeAnnotations(Variable* parameter, 312 AsmType* ParameterTypeAnnotations(Variable* parameter,
305 Expression* annotation); 313 Expression* annotation);
306 // 5.2 ReturnTypeAnnotations 314 // 5.2 ReturnTypeAnnotations
307 AsmType* ReturnTypeAnnotations(ReturnStatement* statement); 315 AsmType* ReturnTypeAnnotations(ReturnStatement* statement);
308 // 5.4 VariableTypeAnnotations 316 // 5.4 VariableTypeAnnotations
309 // 5.5 GlobalVariableTypeAnnotations 317 // 5.5 GlobalVariableTypeAnnotations
310 AsmType* VariableTypeAnnotations(Expression* initializer, 318 AsmType* VariableTypeAnnotations(
311 bool global = false); 319 Expression* initializer,
320 VariableInfo::Mutability global = VariableInfo::kLocal);
312 AsmType* ImportExpression(Property* import); 321 AsmType* ImportExpression(Property* import);
313 AsmType* NewHeapView(CallNew* new_heap_view); 322 AsmType* NewHeapView(CallNew* new_heap_view);
314 323
315 Isolate* isolate_; 324 Isolate* isolate_;
316 Zone* zone_; 325 Zone* zone_;
317 Script* script_; 326 Script* script_;
318 FunctionLiteral* root_; 327 FunctionLiteral* root_;
319 bool in_function_ = false; 328 bool in_function_ = false;
320 329
321 AsmType* return_type_ = nullptr; 330 AsmType* return_type_ = nullptr;
(...skipping 22 matching lines...) Expand all
344 StdlibSet stdlib_uses_; 353 StdlibSet stdlib_uses_;
345 354
346 DISALLOW_IMPLICIT_CONSTRUCTORS(AsmTyper); 355 DISALLOW_IMPLICIT_CONSTRUCTORS(AsmTyper);
347 }; 356 };
348 357
349 } // namespace wasm 358 } // namespace wasm
350 } // namespace internal 359 } // namespace internal
351 } // namespace v8 360 } // namespace v8
352 361
353 #endif // SRC_ASMJS_ASM_TYPER_H_ 362 #endif // SRC_ASMJS_ASM_TYPER_H_
OLDNEW
« no previous file with comments | « no previous file | src/asmjs/asm-typer.cc » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698