Source/JavaScriptCore/ChangeLog

 12011-06-13 Juan C. Montemayor <jmont@apple.com>
 2
 3 Reviewed by NOBODY (OOPS!).
 4
 5 No context for javascript parse errors.
 6 https://bugs.webkit.org/show_bug.cgi?id=62613
 7
 8 * parser/JSParser.cpp:
 9 (JSC::JSParser::updateErrorState):
 10 (JSC::jsParse):
 11 (JSC::JSParser::JSParser):
 12 (JSC::JSParser::parseProgram):
 13 (JSC::JSParser::parsePrimaryExpression):
 14 * parser/JSParser.h:
 15 * parser/Parser.cpp:
 16 (JSC::Parser::parse):
 17
1182011-06-13 Oliver Hunt <oliver@apple.com>
219
320 Reviewed by Gavin Barraclough.
88739

Source/JavaScriptCore/parser/JSParser.cpp

@@using namespace JSC;
4343using namespace std;
4444
4545namespace JSC {
46 #define fail() do { m_error = true; return 0; } while (0)
 46#define fail() do { if (!m_error) updateErrorState(); return 0; } while (0)
4747#define failIfFalse(cond) do { if (!(cond)) fail(); } while (0)
4848#define failIfTrue(cond) do { if ((cond)) fail(); } while (0)
4949#define failIfTrueIfStrict(cond) do { if ((cond) && strictMode()) fail(); } while (0)

@@COMPILE_ASSERT(LastUntaggedToken < 64, L
7171
7272class JSParser {
7373public:
74  JSParser(Lexer*, JSGlobalData*, FunctionParameters*, bool isStrictContext, bool isFunction, SourceProvider*);
75  const char* parseProgram();
 74 JSParser(Lexer*, JSGlobalData*, FunctionParameters*, bool isStrictContext, bool isFunction, const SourceCode*);
 75 UString parseProgram();
 76
7677private:
7778 struct AllowInOverride {
7879 AllowInOverride(JSParser* parser)

@@private:
147148 {
148149 return m_token.m_info.endOffset;
149150 }
 151
 152 ALWAYS_INLINE void updateErrorState()
 153 {
 154 m_error = true;
 155 const UChar* source = m_source->data();
 156 m_errorMessage = UString(String::format("Unexpected token '%c'", source[tokenStart()]).impl());
 157 }
150158
151159 void startLoop() { currentScope()->startLoop(); }
152160 void endLoop() { currentScope()->endLoop(); }

@@private:
257265 Lexer* m_lexer;
258266 StackBounds m_stack;
259267 bool m_error;
260  const char* m_errorMessage;
 268 UString m_errorMessage;
261269 JSGlobalData* m_globalData;
262270 JSToken m_token;
263271 bool m_allowsIn;

@@private:
615623 }
616624
617625 SourceProviderCache* m_functionCache;
 626 const SourceCode* m_source;
618627};
619628
620 const char* jsParse(JSGlobalData* globalData, FunctionParameters* parameters, JSParserStrictness strictness, JSParserMode parserMode, const SourceCode* source)
 629UString jsParse(JSGlobalData* globalData, FunctionParameters* parameters, JSParserStrictness strictness, JSParserMode parserMode, const SourceCode* source)
621630{
622  JSParser parser(globalData->lexer, globalData, parameters, strictness == JSParseStrict, parserMode == JSParseFunctionCode, source->provider());
 631 JSParser parser(globalData->lexer, globalData, parameters, strictness == JSParseStrict, parserMode == JSParseFunctionCode, source);
623632 return parser.parseProgram();
624633}
625634
626 JSParser::JSParser(Lexer* lexer, JSGlobalData* globalData, FunctionParameters* parameters, bool inStrictContext, bool isFunction, SourceProvider* provider)
 635JSParser::JSParser(Lexer* lexer, JSGlobalData* globalData, FunctionParameters* parameters, bool inStrictContext, bool isFunction, const SourceCode* source)
627636 : m_lexer(lexer)
628637 , m_stack(globalData->stack())
629638 , m_error(false)
630  , m_errorMessage("Parse error")
 639 , m_errorMessage("Unexpected token")
631640 , m_globalData(globalData)
632641 , m_allowsIn(true)
633642 , m_lastLine(0)
634643 , m_lastTokenEnd(0)
635644 , m_assignmentCount(0)
636645 , m_nonLHSCount(0)
637  , m_syntaxAlreadyValidated(provider->isValid())
 646 , m_syntaxAlreadyValidated(source->provider()->isValid())
638647 , m_statementDepth(0)
639648 , m_nonTrivialExpressionCount(0)
640649 , m_lastIdentifier(0)
641650 , m_functionCache(m_lexer->sourceProvider()->cache())
 651 , m_source(source)
642652{
643653 ScopeRef scope = pushScope();
644654 if (isFunction)

@@JSParser::JSParser(Lexer* lexer, JSGloba
652662 next();
653663 m_lexer->setLastLineNumber(tokenLine());
654664}
655 
656 const char* JSParser::parseProgram()
 665
 666UString JSParser::parseProgram()
657667{
658668 unsigned oldFunctionCacheSize = m_functionCache ? m_functionCache->byteSize() : 0;
659669 ASTBuilder context(m_globalData, m_lexer);

@@const char* JSParser::parseProgram()
677687
678688 m_globalData->parser->didFinishParsing(sourceElements, context.varDeclarations(), context.funcDeclarations(), features,
679689 m_lastLine, context.numConstants(), capturedVariables);
680  return 0;
 690 return UString();
681691}
682692
683693bool JSParser::allowAutomaticSemicolon()

@@template <class TreeBuilder> TreeExpress
19491960 TreeExpression re = context.createRegExp(*pattern, *flags, start);
19501961 if (!re) {
19511962 m_errorMessage = Yarr::checkSyntax(pattern->ustring());
1952  ASSERT(m_errorMessage);
 1963 ASSERT(!m_errorMessage.isNull());
19531964 fail();
19541965 }
19551966 return re;
88733

Source/JavaScriptCore/parser/JSParser.h

2323 * THE POSSIBILITY OF SUCH DAMAGE.
2424 */
2525
 26
 27
2628#ifndef JSParser_h
2729#define JSParser_h
2830
 31#include "UString.h"
 32
2933namespace JSC {
3034
3135class ExecState;

@@struct JSToken {
159163enum JSParserStrictness { JSParseNormal, JSParseStrict };
160164enum JSParserMode { JSParseProgramCode, JSParseFunctionCode };
161165
162 const char* jsParse(JSGlobalData*, FunctionParameters*, JSParserStrictness, JSParserMode, const SourceCode*);
 166UString jsParse(JSGlobalData* globalData, FunctionParameters* parameters, JSParserStrictness strictness, JSParserMode parserMode, const SourceCode* source);
163167}
164168#endif // JSParser_h
88733

Source/JavaScriptCore/parser/Parser.cpp

@@void Parser::parse(JSGlobalData* globalD
4848 Lexer& lexer = *globalData->lexer;
4949 lexer.setCode(*m_source, m_arena);
5050
51  const char* parseError = jsParse(globalData, parameters, strictness, mode, m_source);
 51 UString parseError = jsParse(globalData, parameters, strictness, mode, m_source);
5252 int lineNumber = lexer.lineNumber();
5353 bool lexError = lexer.sawError();
5454 lexer.clear();
5555
56  if (parseError || lexError) {
 56 if (!parseError.isNull() || lexError) {
5757 *errLine = lineNumber;
58  *errMsg = parseError ? parseError : "Parse error";
 58 *errMsg = !parseError.isNull() ? parseError : "Parse error";
5959 m_sourceElements = 0;
6060 }
6161}
88733