X-Git-Url: https://git.saurik.com/cycript.git/blobdiff_plain/4e869640036110df20ccde74fcb5a5167f28622a..62f398e4aed5b34ee2bd8edff9fb3afa80d75e25:/Cycript.yy.in
diff --git a/Cycript.yy.in b/Cycript.yy.in
index ece104f..5a35dd7 100644
--- a/Cycript.yy.in
+++ b/Cycript.yy.in
@@ -1,50 +1,36 @@
-/* Cycript - Inlining/Optimizing JavaScript Compiler
- * Copyright (C) 2009 Jay Freeman (saurik)
+/* Cycript - Optimizing JavaScript Compiler/Runtime
+ * Copyright (C) 2009-2013 Jay Freeman (saurik)
*/
-/* Modified BSD License {{{ */
+/* GNU General Public License, Version 3 {{{ */
/*
- * Redistribution and use in source and binary
- * forms, with or without modification, are permitted
- * provided that the following conditions are met:
+ * 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.
*
- * 1. Redistributions of source code must retain the
- * above copyright notice, this list of conditions
- * and the following disclaimer.
- * 2. Redistributions in binary form must reproduce the
- * above copyright notice, this list of conditions
- * and the following disclaimer in the documentation
- * and/or other materials provided with the
- * distribution.
- * 3. The name of the author may not be used to endorse
- * or promote products derived from this software
- * without specific prior written permission.
+ * 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.
*
- * THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS''
- * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING,
- * BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF
- * MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
- * ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHOR BE
- * LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,
- * EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT
- * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
- * SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
- * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF
- * LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR
- * TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN
- * ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF
- * ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
-*/
+ * You should have received a copy of the GNU General Public License
+ * along with Cycript. If not, see .
+**/
/* }}} */
-%{
+@if Bison23 %{
+
+@if Bison24 %code top {
#define cyscanner driver.scanner_
#define YYSTACKEXPANDABLE 1
-#define yyerrok (yyerrstatus_ = 0)
-%}
+@if Bison23 #define yyerrok (yyerrstatus_ = 0)
+@if Bison24 }
-%{
+@if Bison24 %code requires {
+#include "Driver.hpp"
#include "Parser.hpp"
+#define CYNew new($pool)
@begin ObjectiveC
#include "ObjectiveC/Syntax.hpp"
@@ -54,8 +40,11 @@
#include "E4X/Syntax.hpp"
@end
+#include "Highlight.hpp"
+
typedef struct {
bool newline_;
+ hi::Value highlight_;
union {
bool bool_;
@@ -83,11 +72,13 @@ typedef struct {
CYInfix *infix_;
CYLiteral *literal_;
CYMember *member_;
+ CYModule *module_;
CYNull *null_;
CYNumber *number_;
CYProgram *program_;
CYProperty *property_;
CYPropertyName *propertyName_;
+ CYRubyProc *rubyProc_;
CYStatement *statement_;
CYString *string_;
CYThis *this_;
@@ -101,6 +92,9 @@ typedef struct {
CYMessageParameter *messageParameter_;
CYProtocol *protocol_;
CYSelectorPart *selector_;
+ CYTypeModifier *modifier_;
+ CYTypedIdentifier *typedIdentifier_;
+ CYTypedParameter *typedParameter_;
@end
@begin E4X
@@ -112,22 +106,24 @@ typedef struct {
} YYSTYPE;
#define YYSTYPE YYSTYPE
+@if Bison24 }
-%}
-
-%{
+@if Bison24 %code provides {
int cylex(YYSTYPE *, cy::location *, void *);
-%}
+@if Bison24 }
+
+@if Bison23 %}
%name-prefix="cy"
-%skeleton "lalr1.cc"
-%locations
+@if Bison23 %skeleton "lalr1.cc"
+@if Bison24 %language "C++"
%initial-action {
@$.begin.filename = @$.end.filename = &driver.filename_;
};
+%locations
%defines
//%glr-parser
@@ -138,6 +134,7 @@ int cylex(YYSTYPE *, cy::location *, void *);
%parse-param { CYDriver &driver }
%lex-param { void *cyscanner }
+/* Token Declarations {{{ */
@begin E4X
%token XMLCDATA
%token XMLComment
@@ -163,6 +160,7 @@ int cylex(YYSTYPE *, cy::location *, void *);
@begin E4X ObjectiveC
%token At "@"
+%token Pound "#"
@end
%token Ampersand "&"
@@ -173,6 +171,7 @@ int cylex(YYSTYPE *, cy::location *, void *);
%token Equal "="
%token EqualEqual "=="
%token EqualEqualEqual "==="
+%token EqualRight "=>"
%token Exclamation "!"
%token ExclamationEqual "!="
%token ExclamationEqualEqual "!=="
@@ -188,6 +187,7 @@ int cylex(YYSTYPE *, cy::location *, void *);
%token Percent "%"
%token PercentEqual "%="
%token Period "."
+%token PeriodPeriodPeriod "..."
%token Pipe "|"
%token PipeEqual "|="
%token PipePipe "||"
@@ -219,20 +219,40 @@ int cylex(YYSTYPE *, cy::location *, void *);
%token CloseParen ")"
%token OpenBrace "{"
+%token OpenBrace_ "\n{"
+%token OpenBrace__ ";{"
%token CloseBrace "}"
%token OpenBracket "["
%token CloseBracket "]"
+%token AtError "@error"
+
+@begin Java
%token AtClass "@class"
-%token AtSelector "@selector"
+@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"
%token Null "null"
%token True "true"
// ES3/ES5/WIE/JSC Reserved
+%token Auto "auto"
%token Break "break"
%token Case "case"
%token Catch "catch"
@@ -244,8 +264,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"
@@ -306,6 +328,7 @@ int cylex(YYSTYPE *, cy::location *, void *);
// Woah?!
%token Each "each"
+%token Of "of"
@begin E4X
// E4X Conditional
@@ -313,51 +336,53 @@ int cylex(YYSTYPE *, cy::location *, void *);
%token XML "xml"
@end
+%token AutoComplete
+
%token Identifier_
%token NumericLiteral
%token StringLiteral
%token RegularExpressionLiteral
%type AdditiveExpression
-%type AdditiveExpressionNoBF
-%type ArgumentList
%type ArgumentList_
+%type ArgumentList
%type ArgumentListOpt
%type Arguments
+%type ArrayComprehension
+%type ArrayInitialiser
%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 ComprehensionList
-%type ComprehensionListOpt
+%type Comprehension
+%type ComprehensionFor
+%type ComprehensionIf
+%type ComprehensionTail
%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
@@ -365,121 +390,93 @@ 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 IfComprehension
+%type IdentifierName
%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 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
@@ -487,30 +484,44 @@ int cylex(YYSTYPE *, cy::location *, void *);
%type ClassProtocolListOpt
%type ClassProtocols
%type ClassProtocolsOpt
+%type EncodedType
+%type FunctionedType
%type MessageExpression
%type MessageParameter
%type MessageParameters
%type MessageParameterList
%type MessageParameterListOpt
%type MessageScope
-%type