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

Side by Side Diff: src/compiler.h

Issue 4135004: Separate JSON parsing from the JavaScript parser. (Closed)
Patch Set: Rename GetSymbol. Move ZoneScope. Created 10 years, 1 month 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/compiler.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 2010 the V8 project authors. All rights reserved. 1 // Copyright 2010 the V8 project authors. All rights reserved.
2 // Redistribution and use in source and binary forms, with or without 2 // Redistribution and use in source and binary forms, with or without
3 // modification, are permitted provided that the following conditions are 3 // modification, are permitted provided that the following conditions are
4 // met: 4 // met:
5 // 5 //
6 // * Redistributions of source code must retain the above copyright 6 // * Redistributions of source code must retain the above copyright
7 // notice, this list of conditions and the following disclaimer. 7 // notice, this list of conditions and the following disclaimer.
8 // * Redistributions in binary form must reproduce the above 8 // * Redistributions in binary form must reproduce the above
9 // copyright notice, this list of conditions and the following 9 // copyright notice, this list of conditions and the following
10 // disclaimer in the documentation and/or other materials provided 10 // disclaimer in the documentation and/or other materials provided
(...skipping 31 matching lines...) Expand 10 before | Expand all | Expand 10 after
42 // is constructed based on the resources available at compile-time. 42 // is constructed based on the resources available at compile-time.
43 class CompilationInfo BASE_EMBEDDED { 43 class CompilationInfo BASE_EMBEDDED {
44 public: 44 public:
45 explicit CompilationInfo(Handle<Script> script); 45 explicit CompilationInfo(Handle<Script> script);
46 explicit CompilationInfo(Handle<SharedFunctionInfo> shared_info); 46 explicit CompilationInfo(Handle<SharedFunctionInfo> shared_info);
47 explicit CompilationInfo(Handle<JSFunction> closure); 47 explicit CompilationInfo(Handle<JSFunction> closure);
48 48
49 bool is_lazy() const { return (flags_ & IsLazy::mask()) != 0; } 49 bool is_lazy() const { return (flags_ & IsLazy::mask()) != 0; }
50 bool is_eval() const { return (flags_ & IsEval::mask()) != 0; } 50 bool is_eval() const { return (flags_ & IsEval::mask()) != 0; }
51 bool is_global() const { return (flags_ & IsGlobal::mask()) != 0; } 51 bool is_global() const { return (flags_ & IsGlobal::mask()) != 0; }
52 bool is_json() const { return (flags_ & IsJson::mask()) != 0; }
53 bool is_in_loop() const { return (flags_ & IsInLoop::mask()) != 0; } 52 bool is_in_loop() const { return (flags_ & IsInLoop::mask()) != 0; }
54 FunctionLiteral* function() const { return function_; } 53 FunctionLiteral* function() const { return function_; }
55 Scope* scope() const { return scope_; } 54 Scope* scope() const { return scope_; }
56 Handle<Code> code() const { return code_; } 55 Handle<Code> code() const { return code_; }
57 Handle<JSFunction> closure() const { return closure_; } 56 Handle<JSFunction> closure() const { return closure_; }
58 Handle<SharedFunctionInfo> shared_info() const { return shared_info_; } 57 Handle<SharedFunctionInfo> shared_info() const { return shared_info_; }
59 Handle<Script> script() const { return script_; } 58 Handle<Script> script() const { return script_; }
60 v8::Extension* extension() const { return extension_; } 59 v8::Extension* extension() const { return extension_; }
61 ScriptDataImpl* pre_parse_data() const { return pre_parse_data_; } 60 ScriptDataImpl* pre_parse_data() const { return pre_parse_data_; }
62 Handle<Context> calling_context() const { return calling_context_; } 61 Handle<Context> calling_context() const { return calling_context_; }
63 62
64 void MarkAsEval() { 63 void MarkAsEval() {
65 ASSERT(!is_lazy()); 64 ASSERT(!is_lazy());
66 flags_ |= IsEval::encode(true); 65 flags_ |= IsEval::encode(true);
67 } 66 }
68 void MarkAsGlobal() { 67 void MarkAsGlobal() {
69 ASSERT(!is_lazy()); 68 ASSERT(!is_lazy());
70 flags_ |= IsGlobal::encode(true); 69 flags_ |= IsGlobal::encode(true);
71 } 70 }
72 void MarkAsJson() {
73 ASSERT(!is_lazy());
74 flags_ |= IsJson::encode(true);
75 }
76 void MarkAsInLoop() { 71 void MarkAsInLoop() {
77 ASSERT(is_lazy()); 72 ASSERT(is_lazy());
78 flags_ |= IsInLoop::encode(true); 73 flags_ |= IsInLoop::encode(true);
79 } 74 }
80 void SetFunction(FunctionLiteral* literal) { 75 void SetFunction(FunctionLiteral* literal) {
81 ASSERT(function_ == NULL); 76 ASSERT(function_ == NULL);
82 function_ = literal; 77 function_ = literal;
83 } 78 }
84 void SetScope(Scope* scope) { 79 void SetScope(Scope* scope) {
85 ASSERT(scope_ == NULL); 80 ASSERT(scope_ == NULL);
(...skipping 15 matching lines...) Expand all
101 96
102 private: 97 private:
103 // Flags using template class BitField<type, start, length>. All are 98 // Flags using template class BitField<type, start, length>. All are
104 // false by default. 99 // false by default.
105 // 100 //
106 // Compilation is either eager or lazy. 101 // Compilation is either eager or lazy.
107 class IsLazy: public BitField<bool, 0, 1> {}; 102 class IsLazy: public BitField<bool, 0, 1> {};
108 // Flags that can be set for eager compilation. 103 // Flags that can be set for eager compilation.
109 class IsEval: public BitField<bool, 1, 1> {}; 104 class IsEval: public BitField<bool, 1, 1> {};
110 class IsGlobal: public BitField<bool, 2, 1> {}; 105 class IsGlobal: public BitField<bool, 2, 1> {};
111 class IsJson: public BitField<bool, 3, 1> {};
112 // Flags that can be set for lazy compilation. 106 // Flags that can be set for lazy compilation.
113 class IsInLoop: public BitField<bool, 4, 1> {}; 107 class IsInLoop: public BitField<bool, 3, 1> {};
114 108
115 unsigned flags_; 109 unsigned flags_;
116 110
117 // Fields filled in by the compilation pipeline. 111 // Fields filled in by the compilation pipeline.
118 // AST filled in by the parser. 112 // AST filled in by the parser.
119 FunctionLiteral* function_; 113 FunctionLiteral* function_;
120 // The scope of the function literal as a convenience. Set to indidicate 114 // The scope of the function literal as a convenience. Set to indicate
121 // that scopes have been analyzed. 115 // that scopes have been analyzed.
122 Scope* scope_; 116 Scope* scope_;
123 // The compiled code. 117 // The compiled code.
124 Handle<Code> code_; 118 Handle<Code> code_;
125 119
126 // Possible initial inputs to the compilation process. 120 // Possible initial inputs to the compilation process.
127 Handle<JSFunction> closure_; 121 Handle<JSFunction> closure_;
128 Handle<SharedFunctionInfo> shared_info_; 122 Handle<SharedFunctionInfo> shared_info_;
129 Handle<Script> script_; 123 Handle<Script> script_;
130 124
(...skipping 15 matching lines...) Expand all
146 // parameters which then can be executed. If the source code contains other 140 // parameters which then can be executed. If the source code contains other
147 // functions, they will be compiled and allocated as part of the compilation 141 // functions, they will be compiled and allocated as part of the compilation
148 // of the source code. 142 // of the source code.
149 143
150 // Please note this interface returns shared function infos. This means you 144 // Please note this interface returns shared function infos. This means you
151 // need to call Factory::NewFunctionFromSharedFunctionInfo before you have a 145 // need to call Factory::NewFunctionFromSharedFunctionInfo before you have a
152 // real function with a context. 146 // real function with a context.
153 147
154 class Compiler : public AllStatic { 148 class Compiler : public AllStatic {
155 public: 149 public:
156 enum ValidationState { DONT_VALIDATE_JSON, VALIDATE_JSON };
157
158 // All routines return a JSFunction. 150 // All routines return a JSFunction.
159 // If an error occurs an exception is raised and 151 // If an error occurs an exception is raised and
160 // the return handle contains NULL. 152 // the return handle contains NULL.
161 153
162 // Compile a String source within a context. 154 // Compile a String source within a context.
163 static Handle<SharedFunctionInfo> Compile(Handle<String> source, 155 static Handle<SharedFunctionInfo> Compile(Handle<String> source,
164 Handle<Object> script_name, 156 Handle<Object> script_name,
165 int line_offset, 157 int line_offset,
166 int column_offset, 158 int column_offset,
167 v8::Extension* extension, 159 v8::Extension* extension,
168 ScriptDataImpl* pre_data, 160 ScriptDataImpl* pre_data,
169 Handle<Object> script_data, 161 Handle<Object> script_data,
170 NativesFlag is_natives_code); 162 NativesFlag is_natives_code);
171 163
172 // Compile a String source within a context for Eval. 164 // Compile a String source within a context for Eval.
173 static Handle<SharedFunctionInfo> CompileEval(Handle<String> source, 165 static Handle<SharedFunctionInfo> CompileEval(Handle<String> source,
174 Handle<Context> context, 166 Handle<Context> context,
175 bool is_global, 167 bool is_global);
176 ValidationState validation);
177 168
178 // Compile from function info (used for lazy compilation). Returns true on 169 // Compile from function info (used for lazy compilation). Returns true on
179 // success and false if the compilation resulted in a stack overflow. 170 // success and false if the compilation resulted in a stack overflow.
180 static bool CompileLazy(CompilationInfo* info); 171 static bool CompileLazy(CompilationInfo* info);
181 172
182 // Compile a shared function info object (the function is possibly lazily 173 // Compile a shared function info object (the function is possibly lazily
183 // compiled). 174 // compiled).
184 static Handle<SharedFunctionInfo> BuildFunctionInfo(FunctionLiteral* node, 175 static Handle<SharedFunctionInfo> BuildFunctionInfo(FunctionLiteral* node,
185 Handle<Script> script); 176 Handle<Script> script);
186 177
(...skipping 26 matching lines...) Expand all
213 FrameElement::ClearConstantList(); 204 FrameElement::ClearConstantList();
214 Result::ClearConstantList(); 205 Result::ClearConstantList();
215 } 206 }
216 } 207 }
217 }; 208 };
218 209
219 210
220 } } // namespace v8::internal 211 } } // namespace v8::internal
221 212
222 #endif // V8_COMPILER_H_ 213 #endif // V8_COMPILER_H_
OLDNEW
« no previous file with comments | « no previous file | src/compiler.cc » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698