X-Git-Url: https://git.saurik.com/cycript.git/blobdiff_plain/039ea0ce2f7197c9dae2382e09cfdfb0ddf6021e..8a81192b83961beebb4698b63e122e754ef40ada:/Cycript.yy.in?ds=sidebyside
diff --git a/Cycript.yy.in b/Cycript.yy.in
index 22a601a..94d804b 100644
--- a/Cycript.yy.in
+++ b/Cycript.yy.in
@@ -1,20 +1,20 @@
/* Cycript - Optimizing JavaScript Compiler/Runtime
- * Copyright (C) 2009-2010 Jay Freeman (saurik)
+ * Copyright (C) 2009-2013 Jay Freeman (saurik)
*/
-/* GNU Lesser General Public License, Version 3 {{{ */
+/* GNU General Public License, Version 3 {{{ */
/*
- * Cycript is free software: you can redistribute it and/or modify it under
- * the terms of the GNU Lesser General Public License as published by the
- * Free Software Foundation, either version 3 of the License, or (at your
- * option) any later version.
+ * Cycript is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published
+ * by the Free Software Foundation, either version 3 of the License,
+ * or (at your option) any later version.
*
- * Cycript is distributed in the hope that it will be useful, but WITHOUT
- * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
- * FITNESS FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public
- * License for more details.
+ * Cycript is distributed in the hope that it will be useful, but
+ * WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
*
- * You should have received a copy of the GNU Lesser General Public License
+ * You should have received a copy of the GNU General Public License
* along with Cycript. If not, see .
**/
/* }}} */
@@ -28,6 +28,7 @@
@if Bison24 }
@if Bison24 %code requires {
+#include "Driver.hpp"
#include "Parser.hpp"
#define CYNew new($pool)
@@ -39,8 +40,11 @@
#include "E4X/Syntax.hpp"
@end
+#include "Highlight.hpp"
+
typedef struct {
bool newline_;
+ hi::Value highlight_;
union {
bool bool_;
@@ -87,6 +91,9 @@ typedef struct {
CYMessageParameter *messageParameter_;
CYProtocol *protocol_;
CYSelectorPart *selector_;
+ CYTypeModifier *type_;
+ CYTypedIdentifier *typedIdentifier_;
+ CYTypedParameter *typedParameter_;
@end
@begin E4X
@@ -126,6 +133,7 @@ int cylex(YYSTYPE *, cy::location *, void *);
%parse-param { CYDriver &driver }
%lex-param { void *cyscanner }
+/* Token Declarations {{{ */
@begin E4X
%token XMLCDATA
%token XMLComment
@@ -161,6 +169,7 @@ int cylex(YYSTYPE *, cy::location *, void *);
%token Equal "="
%token EqualEqual "=="
%token EqualEqualEqual "==="
+%token EqualRight "=>"
%token Exclamation "!"
%token ExclamationEqual "!="
%token ExclamationEqualEqual "!=="
@@ -176,6 +185,7 @@ int cylex(YYSTYPE *, cy::location *, void *);
%token Percent "%"
%token PercentEqual "%="
%token Period "."
+%token PeriodPeriodPeriod "..."
%token Pipe "|"
%token PipeEqual "|="
%token PipePipe "||"
@@ -208,20 +218,31 @@ int cylex(YYSTYPE *, cy::location *, void *);
%token OpenBrace "{"
%token OpenBrace_ "\n{"
+%token OpenBrace__ ";{"
%token CloseBrace "}"
%token OpenBracket "["
%token CloseBracket "]"
+%token AtError "@error"
+
@begin Java
%token AtClass "@class"
@end
+@begin C
+%token Typedef "typedef"
+@end
+
@begin ObjectiveC
%token AtImplementation "@implementation"
+%token AtImplementation_ ";@implementation"
%token AtImport "@import"
+%token AtEncode "@encode"
%token AtEnd "@end"
%token AtSelector "@selector"
+%token Yes "YES"
+%token No "NO"
@end
%token False "false"
@@ -229,6 +250,7 @@ int cylex(YYSTYPE *, cy::location *, void *);
%token True "true"
// ES3/ES5/WIE/JSC Reserved
+%token Auto "auto"
%token Break "break"
%token Case "case"
%token Catch "catch"
@@ -240,8 +262,10 @@ int cylex(YYSTYPE *, cy::location *, void *);
%token Finally "finally"
%token For "for"
%token Function "function"
+%token Function_ ";function"
%token If "if"
%token In "in"
+%token In_ "!in"
%token InstanceOf "instanceof"
%token New "new"
%token Return "return"
@@ -302,6 +326,7 @@ int cylex(YYSTYPE *, cy::location *, void *);
// Woah?!
%token Each "each"
+%token Of "of"
@begin E4X
// E4X Conditional
@@ -317,45 +342,43 @@ int cylex(YYSTYPE *, cy::location *, void *);
%token RegularExpressionLiteral
%type AdditiveExpression
-%type AdditiveExpressionNoBF
-%type ArgumentList
%type ArgumentList_
+%type ArgumentList
%type ArgumentListOpt
%type Arguments
%type ArrayLiteral
-%type AssigneeExpression
-%type AssigneeExpressionNoBF
+%type ArrowFunction
+%type ArrowParameters
%type AssignmentExpression
-%type AssignmentExpression_
-%type AssignmentExpressionNoBF
-%type AssignmentExpressionNoIn
+%type Binding
+%type BindingIdentifier
%type BitwiseANDExpression
-%type BitwiseANDExpressionNoBF
-%type BitwiseANDExpressionNoIn
-%type Block
%type Block_
+%type Block
%type BooleanLiteral
+%type BindingElement
%type BitwiseORExpression
-%type BitwiseORExpressionNoBF
-%type BitwiseORExpressionNoIn
%type BitwiseXORExpression
-%type BitwiseXORExpressionNoBF
-%type BitwiseXORExpressionNoIn
%type BreakStatement
+%type BreakableStatement
+%type CallExpression_
%type CallExpression
-%type CallExpressionNoBF
%type CaseBlock
%type CaseClause
%type CaseClausesOpt
%type CatchOpt
+%type ComprehensionForList
+%type ComprehensionForListOpt
%type ComprehensionList
%type ComprehensionListOpt
%type ConditionalExpression
-%type ConditionalExpressionNoBF
-%type ConditionalExpressionNoIn
%type ContinueStatement
+%type ConciseBody
+%type DebuggerStatement
+%type Declaration__
+%type Declaration_
+%type Declaration
%type DefaultClause
-%type DoWhileStatement
%type Element
%type ElementOpt
%type ElementList
@@ -363,125 +386,95 @@ int cylex(YYSTYPE *, cy::location *, void *);
%type ElseStatementOpt
%type EmptyStatement
%type EqualityExpression
-%type EqualityExpressionNoBF
-%type EqualityExpressionNoIn
-%type Expression
-%type ExpressionOpt
%type Expression_
-%type ExpressionNoBF
-%type ExpressionNoIn
-%type ExpressionNoIn_
-%type ExpressionNoInOpt
+%type Expression
+%type ExpressionOpt
%type ExpressionStatement
%type FinallyOpt
%type ForComprehension
-%type ForStatement
%type ForStatementInitialiser
-%type ForInStatement
%type ForInStatementInitialiser
-%type FormalParameterList
+%type FormalParameter
%type FormalParameterList_
+%type FormalParameterList
+%type FormalParameterListOpt
%type FunctionBody
%type FunctionDeclaration
%type FunctionExpression
%type Identifier
%type IdentifierOpt
+%type IdentifierName
%type IfComprehension
%type IfStatement
%type Initialiser
%type InitialiserOpt
-%type InitialiserNoIn
-%type InitialiserNoInOpt
%type IterationStatement
%type LabelledStatement
%type LeftHandSideExpression
-%type LeftHandSideExpressionNoBF
-//%type LetStatement
+%type LetStatement
+%type LexicalDeclaration
%type Literal
-%type LiteralNoRE
-%type LiteralRE
+%type ValueLiteral
%type LogicalANDExpression
-%type LogicalANDExpressionNoBF
-%type LogicalANDExpressionNoIn
%type LogicalORExpression
-%type LogicalORExpressionNoBF
-%type LogicalORExpressionNoIn
%type MemberAccess
-%type MemberExpression
%type MemberExpression_
-%type MemberExpressionNoBF
+%type MemberExpression
%type MultiplicativeExpression
-%type MultiplicativeExpressionNoBF
%type NewExpression
-%type NewExpression_
-%type NewExpressionNoBF
%type NullLiteral
%type ObjectLiteral
+%type Parenthetical
+%type ParentheticalOpt
%type PostfixExpression
-%type PostfixExpressionNoBF
%type PrimaryExpression
-%type PrimaryExpressionNo
-%type PrimaryExpressionNoBF
-%type PrimaryExpressionNoRE
-%type PrimaryExpressionBF
%type Program
-%type PropertyName
+%type ProgramBody
+%type ProgramBodyOpt
%type PropertyName_
-%type PropertyNameAndValueList
-%type PropertyNameAndValueList_
-%type PropertyNameAndValueListOpt
+%type PropertyName
+%type PropertyDefinition
+%type PropertyDefinitionList_
+%type PropertyDefinitionList
+%type PropertyDefinitionListOpt
%type RelationalExpression
-%type RelationalExpression_
-%type RelationalExpressionNoBF
-%type RelationalExpressionNoIn
-%type RelationalExpressionNoIn_
%type ReturnStatement
%type RubyProcExpression
-%type RubyProcParameterList
%type RubyProcParameterList_
+%type RubyProcParameterList
+%type RubyProcParameters
%type RubyProcParametersOpt
%type ShiftExpression
-%type ShiftExpressionNoBF
-%type SourceElement
-%type SourceElement_
-%type SourceElements
-%type Statement
+%type SingleNameBinding
+%type Statement__
%type Statement_
+%type Statement
%type StatementList
%type StatementListOpt
+%type StatementListItem
%type SwitchStatement
%type ThrowStatement
%type TryStatement
-%type UnaryExpression
%type UnaryExpression_
-%type UnaryExpressionNoBF
+%type UnaryExpression
%type VariableDeclaration
-%type VariableDeclarationNoIn
-%type VariableDeclarationList
%type VariableDeclarationList_
-%type VariableDeclarationListNoIn
-%type VariableDeclarationListNoIn_
+%type VariableDeclarationList
%type VariableStatement
-%type WhileStatement
%type WithStatement
-
-@begin C
-%type AssigneeExpressionNoRE
-%type CallExpressionNoRE
-%type LeftHandSideExpressionNoRE
-%type MemberExpressionNoRE
-%type NewExpressionNoRE
-%type PostfixExpressionNoRE
-%type UnaryAssigneeExpression
-%type UnaryExpressionNoRE
-@end
+%type Word
+%type WordOpt
+%type Variable
@begin ObjectiveC
+%type ArrayedType
+%type BoxableExpression
%type CategoryStatement
%type ClassExpression
+%type ClassFieldListOpt
+%type ClassFields
%type ClassStatement
%type ClassSuperOpt
-%type ClassFieldList
%type ClassMessageDeclaration
%type ClassMessageDeclarationListOpt
%type ClassName
@@ -489,31 +482,44 @@ int cylex(YYSTYPE *, cy::location *, void *);
%type ClassProtocolListOpt
%type ClassProtocols
%type ClassProtocolsOpt
+%type ConcreteType
+%type EncodedType
%type MessageExpression
%type MessageParameter
%type MessageParameters
%type MessageParameterList
%type MessageParameterListOpt
%type MessageScope
-%type SelectorCall
+%type ModifiedType_
+%type ModifiedType
+%type PrefixedType
+%type PrimitiveType
%type SelectorCall_
-%type SelectorExpression
+%type SelectorCall
%type